Ignore:
Timestamp:
2018-12-28T17:40:08+01:00 (6 years ago)
Author:
gerdp
Message:

fix #16382 Add Source Tag doesn't work

Similar solution as with #14862.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/utilsplugin2/src/org/openstreetmap/josm/plugins/utilsplugin2/actions/TagSourceAction.java

    r34454 r34792  
    66import java.awt.event.ActionEvent;
    77import java.awt.event.KeyEvent;
     8import java.util.ArrayList;
    89import java.util.Collection;
    9 import java.util.HashSet;
    10 import java.util.Set;
     10import java.util.List;
    1111
    1212import org.openstreetmap.josm.actions.JosmAction;
     
    2525    private static final String TITLE = tr("Add Source Tag");
    2626    private String source;
    27     private Set<OsmPrimitive> selectionBuf = new HashSet<>();
    28     private boolean clickedTwice = false;
     27    private List<OsmPrimitive> selectionBuf = new ArrayList<>();
    2928
    3029    public TagSourceAction() {
     
    4544        UndoRedoHandler.getInstance().add(new ChangePropertyCommand(selection, "source", source));
    4645    }
    47 
    4846    @Override
    4947    protected void updateEnabledState() {
    5048        if (getLayerManager().getEditDataSet() == null) {
    5149            setEnabled(false);
    52             if (selectionBuf != null)
    53                 selectionBuf.clear();
     50            selectionBuf = new ArrayList<>();
    5451        } else
    5552            updateEnabledState(getLayerManager().getEditDataSet().getSelected());
    5653    }
    5754
     55
    5856    @Override
    5957    protected void updateEnabledState(Collection<? extends OsmPrimitive> selection) {
    60         if (selection == null || selection.isEmpty()) {
    61             selectionBuf.clear();
    62             clickedTwice = false;
    63             setEnabled(false);
    64             return;
     58        if (!selectionBuf.isEmpty()) {
     59                String newSource = null;
     60                for (OsmPrimitive p : selectionBuf) {
     61                        String s = p.get("source");
     62                        if (s != null) {
     63                                if (newSource == null)
     64                                        newSource = s;
     65                                else {
     66                                        if (!newSource.equals(s)) {
     67                                                newSource = null;
     68                                                break;
     69                                        }
     70                                }
     71                        }
     72                }
     73                if (newSource != null && !newSource.isEmpty()) {
     74                source = newSource;
     75                Config.getPref().put("sourcetag.value", source);
     76                }
    6577        }
    66 
    67         if (selectionBuf.size() == selection.size() && selectionBuf.containsAll(selection)) {
    68             if (!clickedTwice)
    69                 clickedTwice = true;
    70             else {
    71                 // tags may have been changed, get the source
    72                 String newSource = null;
    73                 for (OsmPrimitive p : selection) {
    74                     String value = p.get("source");
    75                     if (value != null && newSource == null)
    76                         newSource = value;
    77                     else if (value != null ? !value.equals(newSource) : newSource != null) {
    78                         newSource = "";
    79                         break;
    80                     }
    81                 }
    82                 if (newSource != null && newSource.length() > 0 && !newSource.equals(source)) {
    83                     source = newSource;
    84                     Config.getPref().put("sourcetag.value", source);
    85                 }
    86             }
    87         } else
    88             clickedTwice = false;
    89         selectionBuf.clear();
    90         selectionBuf.addAll(selection);
    91         setEnabled(source != null && source.length() > 0);
     78        selectionBuf = new ArrayList<>(selection);
     79        setEnabled(!selection.isEmpty() && source != null && !source.isEmpty());
    9280    }
    9381}
Note: See TracChangeset for help on using the changeset viewer.