Ignore:
Timestamp:
2009-12-12T20:21:36+01:00 (17 years ago)
Author:
jttt
Message:

Dataset changed events refactored - DatasetEventManager now allows to register listeners to current dataset (no need to reregister when activeLayer is changed, events from current dataset are always returned), possibility to automatically receive events in EDT

Location:
trunk/src/org/openstreetmap/josm/gui
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/MapView.java

    r2621 r2622  
    246246        if (layer instanceof OsmDataLayer || activeLayer == null) {
    247247            // autoselect the new layer
    248             Layer old = activeLayer;
    249248            setActiveLayer(layer);
    250             fireActiveLayerChanged(old, layer);
    251249        }
    252250        layer.addPropertyChangeListener(this);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r2621 r2622  
    3333
    3434import org.openstreetmap.josm.Main;
    35 import org.openstreetmap.josm.data.osm.DataSetListener;
    3635import org.openstreetmap.josm.data.osm.NameFormatter;
    37 import org.openstreetmap.josm.data.osm.Node;
    3836import org.openstreetmap.josm.data.osm.OsmPrimitive;
    3937import org.openstreetmap.josm.data.osm.Relation;
    4038import org.openstreetmap.josm.data.osm.RelationMember;
    41 import org.openstreetmap.josm.data.osm.Way;
     39import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
     40import org.openstreetmap.josm.data.osm.event.DataSetListener;
     41import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
     42import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
     43import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
     44import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
     45import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
     46import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
     47import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    4248import org.openstreetmap.josm.gui.DefaultNameFormatter;
    4349import org.openstreetmap.josm.gui.MapView;
    4450import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    4551import org.openstreetmap.josm.gui.SideButton;
    46 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    4752import org.openstreetmap.josm.gui.dialogs.relation.DownloadRelationTask;
    4853import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor;
     
    140145        MapView.addLayerChangeListener(this);
    141146        MapView.addLayerChangeListener(newAction);
    142         // Register as a data set listener for the current edit layer only.
    143         // See also activeLayerChanged
    144         if (Main.main.getEditLayer() != null) {
    145             Main.main.getEditLayer().data.addDataSetListener(this);
    146         }
    147         dataChanged();
     147        DatasetEventManager.getInstance().addDatasetListener(this, true);
     148        dataChanged(Main.main.getEditLayer());
    148149    }
    149150
     
    151152        MapView.removeLayerChangeListener(this);
    152153        MapView.removeLayerChangeListener(newAction);
    153         // unregistering from *all* data layer is somewhat overkill but it
    154         // doesn't harm either.
    155         for (OsmDataLayer layer:Main.map.mapView.getLayersOfType(OsmDataLayer.class)) {
    156             layer.data.removeDataSetListener(this);
    157         }
     154        DatasetEventManager.getInstance().removeDatasetListener(this);
    158155    }
    159156
     
    701698    /* ---------------------------------------------------------------------------------- */
    702699    public void activeLayerChange(Layer a, Layer b) {
    703         initFromLayer(b);
    704700        if (a != null && a instanceof OsmDataLayer) {
    705             ((OsmDataLayer)a).data.removeDataSetListener(this);
    706701            ((OsmDataLayer)a).listenerDataChanged.remove(this);
    707702        }
    708703        if (b != null && b instanceof OsmDataLayer) {
    709             ((OsmDataLayer)b).data.addDataSetListener(this);
    710704            ((OsmDataLayer)b).listenerDataChanged.add(this);
    711705        }
     
    719713    /* ---------------------------------------------------------------------------------- */
    720714
    721     public void nodeMoved(Node node) {/* irrelevant in this context */}
    722 
    723     public void wayNodesChanged(Way way) {/* irrelevant in this context */}
    724 
    725     public void primtivesAdded(final Collection<? extends OsmPrimitive> added) {
    726         Runnable task = new Runnable() {
    727             public void run() {
    728                 model.addRelations(added);
    729             }
    730         };
    731         if (SwingUtilities.isEventDispatchThread()) {
    732             task.run();
    733         } else {
    734             SwingUtilities.invokeLater(task);
    735         }
    736     }
    737 
    738     public void primtivesRemoved(final Collection<? extends OsmPrimitive> removed) {
    739         Runnable task = new Runnable() {
    740             public void run() {
    741                 model.removeRelations(removed);
    742             }
    743         };
    744         if (SwingUtilities.isEventDispatchThread()) {
    745             task.run();
    746         } else {
    747             SwingUtilities.invokeLater(task);
    748         }
    749     }
    750 
    751     public void relationMembersChanged(final Relation r) {
    752         Runnable task = new Runnable() {
    753             public void run() {
    754                 List<Relation> sel = model.getSelectedRelations();
    755                 model.sort();
    756                 model.setSelectedRelations(sel);
    757                 displaylist.repaint();
    758             }
    759         };
    760         if (SwingUtilities.isEventDispatchThread()) {
    761             task.run();
    762         } else {
    763             SwingUtilities.invokeLater(task);
    764         }
    765     }
    766 
    767     public void tagsChanged(OsmPrimitive prim) {
     715    public void nodeMoved(NodeMovedEvent event) {/* irrelevant in this context */}
     716
     717    public void wayNodesChanged(WayNodesChangedEvent event) {/* irrelevant in this context */}
     718
     719    public void primtivesAdded(final PrimitivesAddedEvent event) {
     720        model.addRelations(event.getPrimitives());
     721    }
     722
     723    public void primtivesRemoved(final PrimitivesRemovedEvent event) {
     724        model.removeRelations(event.getPrimitives());
     725    }
     726
     727    public void relationMembersChanged(final RelationMembersChangedEvent event) {
     728        List<Relation> sel = model.getSelectedRelations();
     729        model.sort();
     730        model.setSelectedRelations(sel);
     731        displaylist.repaint();
     732    }
     733
     734    public void tagsChanged(TagsChangedEvent event) {
     735        OsmPrimitive prim = event.getPrimitive();
    768736        if (prim == null || ! (prim instanceof Relation))
    769737            return;
    770         Runnable task = new Runnable() {
    771             public void run() {
    772                 // trigger a sort of the relation list because the display name may
    773                 // have changed
    774                 //
    775                 List<Relation> sel = model.getSelectedRelations();
    776                 model.sort();
    777                 model.setSelectedRelations(sel);
    778                 displaylist.repaint();
    779             }
    780         };
    781         if (SwingUtilities.isEventDispatchThread()) {
    782             task.run();
    783         } else {
    784             SwingUtilities.invokeLater(task);
    785         }
    786     }
    787 
    788     public void dataChanged() {
     738        // trigger a sort of the relation list because the display name may
     739        // have changed
     740        //
     741        List<Relation> sel = model.getSelectedRelations();
     742        model.sort();
     743        model.setSelectedRelations(sel);
     744        displaylist.repaint();
     745    }
     746
     747    public void dataChanged(DataChangedEvent event) {
    789748        Layer l = Main.main.getEditLayer();
    790749        if (l != null) {
  • trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTableModel.java

    r2578 r2622  
    2828import org.openstreetmap.josm.data.SelectionChangedListener;
    2929import org.openstreetmap.josm.data.coor.EastNorth;
    30 import org.openstreetmap.josm.data.osm.DataSetListener;
    3130import org.openstreetmap.josm.data.osm.Node;
    3231import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    3433import org.openstreetmap.josm.data.osm.RelationMember;
    3534import org.openstreetmap.josm.data.osm.Way;
     35import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
     36import org.openstreetmap.josm.data.osm.event.DataSetListener;
     37import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
     38import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
     39import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
     40import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
     41import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
     42import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    3643import org.openstreetmap.josm.gui.dialogs.relation.WayConnectionType.Direction;
    3744import org.openstreetmap.josm.gui.layer.DataChangeListener;
     
    8895    /* Interface DataSetListener                                                   */
    8996    /* --------------------------------------------------------------------------- */
    90     public void dataChanged() {
     97    public void dataChanged(DataChangedEvent event) {
    9198        // just trigger a repaint - the display name of the relation members may
    9299        // have changed
     
    96103    }
    97104
    98     public void nodeMoved(Node node) {/* ignore */}
    99     public void primtivesAdded(Collection<? extends OsmPrimitive> added) {/* ignore */}
    100 
    101     public void primtivesRemoved(Collection<? extends OsmPrimitive> removed) {
     105    public void nodeMoved(NodeMovedEvent event) {/* ignore */}
     106    public void primtivesAdded(PrimitivesAddedEvent event) {/* ignore */}
     107
     108    public void primtivesRemoved(PrimitivesRemovedEvent event) {
    102109        // ignore - the relation in the editor might become out of sync with the relation
    103110        // in the dataset. We will deal with it when the relation editor is closed or
     
    105112    }
    106113
    107     public void relationMembersChanged(Relation r) {
     114    public void relationMembersChanged(RelationMembersChangedEvent event) {
    108115        // ignore - the relation in the editor might become out of sync with the relation
    109116        // in the dataset. We will deal with it when the relation editor is closed or
     
    111118    }
    112119
    113     public void tagsChanged(OsmPrimitive prim) {
     120    public void tagsChanged(TagsChangedEvent event) {
    114121        // just refresh the respective table cells
    115122        //
    116123        Collection<RelationMember> sel = getSelectedMembers();
    117124        for (int i=0; i < members.size();i++) {
    118             if (members.get(i).getMember() == prim) {
     125            if (members.get(i).getMember() == event.getPrimitive()) {
    119126                fireTableCellUpdated(i, 1 /* the column with the primitive name */);
    120127            }
     
    123130    }
    124131
    125     public void wayNodesChanged(Way way) {/* ignore */}
     132    public void wayNodesChanged(WayNodesChangedEvent event) {/* ignore */}
    126133    /* --------------------------------------------------------------------------- */
    127134
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java

    r2621 r2622  
    55
    66import java.util.ArrayList;
    7 import java.util.Collection;
    87import java.util.Collections;
    98import java.util.HashSet;
    109import java.util.Observable;
    11 import java.util.logging.Logger;
    1210
    1311import javax.swing.table.DefaultTableModel;
    1412
    1513import org.openstreetmap.josm.Main;
    16 import org.openstreetmap.josm.data.osm.DataSetListener;
    1714import org.openstreetmap.josm.data.osm.Node;
    1815import org.openstreetmap.josm.data.osm.OsmPrimitive;
     
    2320import org.openstreetmap.josm.data.osm.SimplePrimitiveId;
    2421import org.openstreetmap.josm.data.osm.Way;
     22import org.openstreetmap.josm.data.osm.event.DataChangedEvent;
     23import org.openstreetmap.josm.data.osm.event.DataSetListener;
     24import org.openstreetmap.josm.data.osm.event.NodeMovedEvent;
     25import org.openstreetmap.josm.data.osm.event.PrimitivesAddedEvent;
     26import org.openstreetmap.josm.data.osm.event.PrimitivesRemovedEvent;
     27import org.openstreetmap.josm.data.osm.event.RelationMembersChangedEvent;
     28import org.openstreetmap.josm.data.osm.event.TagsChangedEvent;
     29import org.openstreetmap.josm.data.osm.event.WayNodesChangedEvent;
    2530import org.openstreetmap.josm.data.osm.history.History;
    2631import org.openstreetmap.josm.data.osm.history.HistoryNode;
     
    3035import org.openstreetmap.josm.data.osm.visitor.AbstractVisitor;
    3136import org.openstreetmap.josm.gui.MapView;
     37import org.openstreetmap.josm.gui.MapView.LayerChangeListener;
    3238import org.openstreetmap.josm.gui.layer.DataChangeListener;
    3339import org.openstreetmap.josm.gui.layer.Layer;
     
    5965 * @see HistoryBrowser
    6066 */
    61 public class HistoryBrowserModel extends Observable implements MapView.LayerChangeListener, DataSetListener, DataChangeListener {
    62 
    63     private static Logger logger = Logger.getLogger(HistoryBrowserModel.class.getName());
     67public class HistoryBrowserModel extends Observable implements LayerChangeListener, DataSetListener, DataChangeListener {
     68    //private static Logger logger = Logger.getLogger(HistoryBrowserModel.class.getName());
    6469
    6570    /** the history of an OsmPrimitive */
     
    777782    /* DataSetListener                                                        */
    778783    /* ---------------------------------------------------------------------- */
    779     public void nodeMoved(Node node) {
     784    public void nodeMoved(NodeMovedEvent event) {
     785        Node node = event.getNode();
    780786        if (!node.isNew() && node.getId() == history.getId()) {
    781787            setLatest(new HistoryPrimitiveBuilder().build(node));
     
    783789    }
    784790
    785     public void primtivesAdded(Collection<? extends OsmPrimitive> added) {
    786         if (added == null || added.isEmpty()) return;
    787         for (OsmPrimitive p: added) {
     791    public void primtivesAdded(PrimitivesAddedEvent event) {
     792        for (OsmPrimitive p: event.getPrimitives()) {
    788793            if (canShowAsLatest(p)) {
    789794                setLatest(new HistoryPrimitiveBuilder().build(p));
     
    792797    }
    793798
    794     public void primtivesRemoved(Collection<? extends OsmPrimitive> removed) {
    795         if (removed == null || removed.isEmpty()) return;
    796         for (OsmPrimitive p: removed) {
     799    public void primtivesRemoved(PrimitivesRemovedEvent event) {
     800        for (OsmPrimitive p: event.getPrimitives()) {
    797801            if (!p.isNew() && p.getId() == history.getId()) {
    798802                setLatest(null);
     
    801805    }
    802806
    803     public void relationMembersChanged(Relation r) {
     807    public void relationMembersChanged(RelationMembersChangedEvent event) {
     808        Relation r = event.getRelation();
    804809        if (!r.isNew() && r.getId() == history.getId()) {
    805810            setLatest(new HistoryPrimitiveBuilder().build(r));
     
    807812    }
    808813
    809     public void tagsChanged(OsmPrimitive prim) {
     814    public void tagsChanged(TagsChangedEvent event) {
     815        OsmPrimitive prim = event.getPrimitive();
    810816        if (!prim.isNew() && prim.getId() == history.getId()) {
    811817            setLatest(new HistoryPrimitiveBuilder().build(prim));
     
    813819    }
    814820
    815     public void wayNodesChanged(Way way) {
     821    public void wayNodesChanged(WayNodesChangedEvent event) {
     822        Way way = event.getChangedWay();
    816823        if (!way.isNew() && way.getId() == history.getId()) {
    817824            setLatest(new HistoryPrimitiveBuilder().build(way));
     
    819826    }
    820827
    821     public void dataChanged() {
     828    public void dataChanged(DataChangedEvent event) {
    822829        dataChanged(getEditLayer());
    823830    }
    824831
    825832    /* ---------------------------------------------------------------------- */
    826     /* DataChangeListener                                                    */
     833    /* DataChangeListener                                                     */
    827834    /* ---------------------------------------------------------------------- */
    828835    public void dataChanged(OsmDataLayer l) {
Note: See TracChangeset for help on using the changeset viewer.