Changeset 2439 in josm for trunk/src/org/openstreetmap


Ignore:
Timestamp:
2009-11-11T21:34:54+01:00 (15 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.