Ignore:
Timestamp:
2010-03-26T16:28:37+01:00 (14 years ago)
Author:
hampelratte
Message:
  • improved selection handling in combination with automatic updates
  • removed deprecated code
Location:
applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbLayer.java

    r20679 r20682  
    3838import java.awt.event.MouseListener;
    3939import java.awt.image.ImageObserver;
     40import java.util.ArrayList;
    4041import java.util.Collection;
     42import java.util.List;
    4143
    4244import javax.swing.Icon;
     
    237239                Node n = getNearestNode(e.getPoint());
    238240                if(n != null && data.getNodes().contains(n)) {
    239                     dialog.setSelectedNode(n);
     241                    List<OsmPrimitive> selected = new ArrayList<OsmPrimitive>();
     242                    selected.add(n);
     243                    data.setSelected(selected);
     244                } else {
     245                    data.setSelected(new ArrayList<OsmPrimitive>());
    240246                }
     247                data.fireSelectionChanged();
    241248            }
    242249        }
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/OsbPlugin.java

    r20463 r20682  
    3838import org.openstreetmap.josm.data.Bounds;
    3939import org.openstreetmap.josm.data.osm.DataSet;
     40import org.openstreetmap.josm.data.osm.Node;
    4041import org.openstreetmap.josm.gui.MapFrame;
    4142import org.openstreetmap.josm.gui.MapView;
     
    160161
    161162    public void updateData() {
     163        // store the current selected node
     164        Node selectedNode = getDialog().getSelectedNode();
     165       
    162166        // determine the bounds of the currently visible area
    163167        Bounds bounds = null;
     
    190194            }
    191195        }
     196       
     197        // restore node selection
     198        dialog.setSelectedNode(selectedNode);
    192199    }
    193200
  • applications/editors/josm/plugins/openstreetbugs/src/org/openstreetmap/josm/plugins/osb/gui/OsbDialog.java

    r20463 r20682  
    3838import java.awt.event.MouseListener;
    3939import java.util.ArrayList;
     40import java.util.Collection;
    4041import java.util.Collections;
    4142import java.util.Comparator;
     
    5758
    5859import org.openstreetmap.josm.Main;
     60import org.openstreetmap.josm.data.SelectionChangedListener;
    5961import org.openstreetmap.josm.data.osm.DataSet;
    6062import org.openstreetmap.josm.data.osm.Node;
    6163import org.openstreetmap.josm.data.osm.OsmPrimitive;
     64import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
     65import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
     66import org.openstreetmap.josm.data.osm.event.DataSetListener;
     67import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
     68import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
     69import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
     70import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
     71import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
     72import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    6273import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    6374import org.openstreetmap.josm.gui.dialogs.ToggleDialog;
    64 import org.openstreetmap.josm.gui.layer.DataChangeListener;
    6575import org.openstreetmap.josm.gui.layer.Layer;
    66 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    6776import org.openstreetmap.josm.plugins.osb.ConfigKeys;
    6877import org.openstreetmap.josm.plugins.osb.OsbObserver;
     
    7988import org.openstreetmap.josm.tools.Shortcut;
    8089
    81 public class OsbDialog extends ToggleDialog implements OsbObserver, ListSelectionListener, LayerChangeListener,
    82 DataChangeListener, MouseListener, OsbActionObserver {
     90public class OsbDialog extends ToggleDialog implements OsbObserver, ListSelectionListener, LayerChangeListener, 
     91DataSetListener, SelectionChangedListener, MouseListener, OsbActionObserver {
    8392
    8493    private static final long serialVersionUID = 1L;
     
    216225        closeIssueAction.addActionObserver(this);
    217226        setConnectionMode(offline);
     227        DataSet.selListeners.add(this);
    218228    }
    219229
    220230    public synchronized void update(final DataSet dataset) {
    221         // store the last selection
    222         OsbListItem listItem = (OsbListItem) bugList.getSelectedValue();
    223         Node lastNode = null;
    224         if(listItem != null) {
    225             lastNode = listItem.getNode();
    226         }
    227 
    228231        // create a new list model
    229232        bugListModel = new DefaultListModel();
     
    236239        }
    237240        bugList.setModel(bugListModel);
    238 
    239         // restore the last selection
    240         if(lastNode != null) {
    241             bugList.setSelectedValue(new OsbListItem(lastNode), true);
    242         }
    243241    }
    244242
     
    302300            bugListModel.removeAllElements();
    303301        }
    304     }
    305 
    306     public void dataChanged(OsmDataLayer l) {
    307         update(l.data);
    308302    }
    309303
     
    401395
    402396    public Node getSelectedNode() {
    403         return ((OsbListItem)bugList.getSelectedValue()).getNode();
     397        if(bugList.getSelectedValue() != null) {
     398            return ((OsbListItem)bugList.getSelectedValue()).getNode();
     399        } else {
     400            return null;
     401        }
    404402    }
    405403
    406404    public void setSelectedNode(Node node) {
    407         bugList.setSelectedValue(new OsbListItem(node), true);
     405        if(node == null) {
     406            bugList.clearSelection();
     407        } else {
     408            bugList.setSelectedValue(new OsbListItem(node), true);
     409        }
    408410    }
    409411
     
    413415        toggleConnectionMode.setSelected(offline);
    414416    }
     417
     418    public void dataChanged(DataChangedEvent event) {
     419        update(event.getDataset());
     420    }
     421
     422    public void nodeMoved(NodeMovedEvent event) {}
     423
     424    public void otherDatasetChange(AbstractDatasetChangedEvent event) {}
     425
     426    public void primtivesAdded(PrimitivesAddedEvent event) {}
     427
     428    public void primtivesRemoved(PrimitivesRemovedEvent event) {}
     429
     430    public void relationMembersChanged(RelationMembersChangedEvent event) {}
     431
     432    public void tagsChanged(TagsChangedEvent event) {}
     433
     434    public void wayNodesChanged(WayNodesChangedEvent event) {}
     435
     436    public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
     437        if(newSelection.size() == 1 && newSelection.iterator().next() instanceof Node) {
     438            Node selectedNode = (Node) newSelection.iterator().next();
     439            if(osbPlugin.getLayer().getDataSet().getNodes().contains(selectedNode)) {
     440                setSelectedNode(selectedNode);
     441            } else {
     442                bugList.clearSelection();
     443            }
     444        } else {
     445            bugList.clearSelection();
     446        }
     447    }
    415448}
Note: See TracChangeset for help on using the changeset viewer.