Changeset 2439 in josm


Ignore:
Timestamp:
Nov 11, 2009 9:34:54 PM (4 years ago)
Author:
jttt
Message:

Added DatasetListener, Dataset now fire events everytime one of its primitives is changed. Used new Dataset listener in RelationListDialog

Location:
trunk/src/org/openstreetmap/josm
Files:
1 added
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/data/osm/DataSet.java

    r2438 r2439  
    4747    private Storage<OsmPrimitive> allPrimitives = new Storage<OsmPrimitive>(new IdHash()); 
    4848    private Map<PrimitiveId, OsmPrimitive> primitivesMap = allPrimitives.foreignKey(new IdHash()); 
     49    private List<DataSetListener> listeners = new ArrayList<DataSetListener>(); 
    4950 
    5051    /** 
     
    191192        allPrimitives.add(primitive); 
    192193        primitive.setDataset(this); 
     194        firePrimitivesAdded(Collections.singletonList(primitive)); 
    193195    } 
    194196 
     
    232234        allPrimitives.remove(primitive); 
    233235        primitive.setDataset(null); 
     236        firePrimitivesRemoved(Collections.singletonList(primitive)); 
    234237    } 
    235238 
     
    784787    } 
    785788 
     789 
     790    public void addDataSetListener(DataSetListener dsl) { 
     791        listeners.add(dsl); 
     792    } 
     793 
     794    public void removeDataSetListener(DataSetListener dsl) { 
     795        listeners.remove(dsl); 
     796    } 
     797 
     798    void firePrimitivesAdded(Collection<? extends OsmPrimitive> added) { 
     799        for (DataSetListener dsl : listeners) { 
     800            dsl.primtivesAdded(added); 
     801        } 
     802    } 
     803 
     804    void firePrimitivesRemoved(Collection<? extends OsmPrimitive> removed) { 
     805        for (DataSetListener dsl : listeners) { 
     806            dsl.primtivesRemoved(removed); 
     807        } 
     808    } 
     809 
     810    void fireTagsChanged(OsmPrimitive prim) { 
     811        for (DataSetListener dsl : listeners) { 
     812            dsl.tagsChanged(prim); 
     813        } 
     814    } 
     815 
     816    void fireRelationMembersChanged(Relation r) { 
     817        for (DataSetListener dsl : listeners) { 
     818            dsl.relationMembersChanged(r); 
     819        } 
     820    } 
     821 
    786822    public void fireNodeMoved(Node node) { 
    787         // TODO Fire event 
    788823        reindexNode(node); 
     824        for (DataSetListener dsl : listeners) { 
     825            dsl.nodeMoved(node); 
     826        } 
    789827    } 
    790828 
    791829    public void fireWayNodesChanged(Way way) { 
    792         // TODO Fire event 
    793830        reindexWay(way); 
     831        for (DataSetListener dsl : listeners) { 
     832            dsl.wayNodesChanged(way); 
     833        } 
    794834    } 
    795835 
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2437 r2439  
    492492        } 
    493493        setModified(deleted); 
     494        if (dataSet != null) { 
     495            if (deleted) { 
     496                dataSet.firePrimitivesRemoved(Collections.singleton(this)); 
     497            } else { 
     498                dataSet.firePrimitivesAdded(Collections.singleton(this)); 
     499            } 
     500        } 
    494501    } 
    495502 
     
    774781        updateHasDirectionKeys(); 
    775782        updateTagged(); 
     783        if (dataSet != null) { 
     784            dataSet.fireTagsChanged(this); 
     785        } 
    776786    } 
    777787 
  • trunk/src/org/openstreetmap/josm/data/osm/Relation.java

    r2437 r2439  
    5252        } 
    5353 
     54        fireMembersChanged(); 
    5455    } 
    5556 
     
    8081        members.add(member); 
    8182        member.getMember().addReferrer(this); 
     83        fireMembersChanged(); 
    8284    } 
    8385 
     
    9193        members.add(index, member); 
    9294        member.getMember().addReferrer(this); 
     95        fireMembersChanged(); 
    9396    } 
    9497 
     
    105108            member.getMember().addReferrer(this); 
    106109            result.getMember().removeReferrer(this); 
     110            fireMembersChanged(); 
    107111        } 
    108112        return result; 
     
    123127        } 
    124128        result.getMember().removeReferrer(this); 
     129        fireMembersChanged(); 
    125130        return result; 
    126131    } 
     
    264269        primitive.removeReferrer(this); 
    265270        members.removeAll(todelete); 
     271        fireMembersChanged(); 
    266272    } 
    267273 
     
    298304            primitive.removeReferrer(this); 
    299305        } 
     306        fireMembersChanged(); 
    300307    } 
    301308 
     
    335342        // Do nothing for now 
    336343    } 
     344 
     345    private void fireMembersChanged() { 
     346        if (getDataSet() != null) { 
     347            getDataSet().fireRelationMembersChanged(this); 
     348        } 
     349    } 
    337350} 
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r2410 r2439  
    3535import org.openstreetmap.josm.Main; 
    3636import org.openstreetmap.josm.data.osm.DataSet; 
     37import org.openstreetmap.josm.data.osm.DataSetListener; 
    3738import org.openstreetmap.josm.data.osm.NameFormatter; 
     39import org.openstreetmap.josm.data.osm.Node; 
    3840import org.openstreetmap.josm.data.osm.OsmPrimitive; 
    3941import org.openstreetmap.josm.data.osm.Relation; 
    4042import org.openstreetmap.josm.data.osm.RelationMember; 
     43import org.openstreetmap.josm.data.osm.Way; 
    4144import org.openstreetmap.josm.gui.DefaultNameFormatter; 
    4245import org.openstreetmap.josm.gui.OsmPrimitivRenderer; 
     
    4447import org.openstreetmap.josm.gui.dialogs.relation.GenericRelationEditor; 
    4548import org.openstreetmap.josm.gui.dialogs.relation.RelationEditor; 
    46 import org.openstreetmap.josm.gui.layer.DataChangeListener; 
    4749import org.openstreetmap.josm.gui.layer.Layer; 
    4850import org.openstreetmap.josm.gui.layer.OsmDataLayer; 
     
    5961 * objects are visible on the map and can be selected there. Relations are not. 
    6062 */ 
    61 public class RelationListDialog extends ToggleDialog implements LayerChangeListener, DataChangeListener { 
     63public class RelationListDialog extends ToggleDialog implements LayerChangeListener, DataSetListener { 
    6264    private static final Logger logger = Logger.getLogger(RelationListDialog.class.getName()); 
    6365 
     
    201203    public void layerRemoved(Layer a) { 
    202204        if (a instanceof OsmDataLayer) { 
    203             ((OsmDataLayer)a).listenerDataChanged.remove(this); 
     205            ((OsmDataLayer)a).data.removeDataSetListener(this); 
    204206        } 
    205207        updateList(); 
     
    208210    public void layerAdded(Layer a) { 
    209211        if (a instanceof OsmDataLayer) { 
    210             ((OsmDataLayer)a).listenerDataChanged.add(this); 
    211         } 
    212     } 
    213  
    214     public void dataChanged(OsmDataLayer l) { 
    215         updateList(); 
     212            ((OsmDataLayer)a).data.addDataSetListener(this); 
     213        } 
    216214    } 
    217215 
     
    677675        } 
    678676    } 
     677 
     678    public void nodeMoved(Node node) { } 
     679 
     680    public void wayNodesChanged(Way way) { } 
     681 
     682    public void primtivesAdded(Collection<? extends OsmPrimitive> added) { 
     683        updateList(); 
     684    } 
     685 
     686    public void primtivesRemoved(Collection<? extends OsmPrimitive> removed) { 
     687        updateList(); 
     688    } 
     689 
     690    public void relationMembersChanged(Relation r) { 
     691        updateList(); 
     692    } 
     693 
     694    public void tagsChanged(OsmPrimitive prim) { 
     695        updateList(); 
     696    } 
    679697} 
Note: See TracChangeset for help on using the changeset viewer.