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/data/osm
Files:
1 added
3 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}
Note: See TracChangeset for help on using the changeset viewer.