Changeset 2497 in josm for trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
- Timestamp:
- 2009-11-22T12:06:30+01:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/data/osm/DataSet.java
r2472 r2497 47 47 private Map<PrimitiveId, OsmPrimitive> primitivesMap = allPrimitives.foreignKey(new IdHash()); 48 48 private List<DataSetListener> listeners = new ArrayList<DataSetListener>(); 49 // Number of open calls to beginUpdate 50 private int updateCount; 49 51 50 52 /** … … 796 798 } 797 799 800 /** 801 * Can be called before bigger changes on dataset. Events are disabled until {@link #endUpdate()}. 802 * {@link DataSetListener#dataChanged()} event is triggered after end of changes 803 * <br> 804 * Typical usecase should look like this: 805 * <pre> 806 * ds.beginUpdate(); 807 * try { 808 * ... 809 * } finally { 810 * ds.endUpdate(); 811 * } 812 * </pre> 813 */ 814 public void beginUpdate() { 815 updateCount++; 816 } 817 818 /** 819 * @see DataSet#beginUpdate() 820 */ 821 public void endUpdate() { 822 if (updateCount > 0) { 823 updateCount--; 824 if (updateCount == 0) { 825 fireDataChanged(); 826 } 827 } else 828 throw new AssertionError("endUpdate called without beginUpdate"); 829 } 830 831 private void fireDataChanged() { 832 if (updateCount == 0) { 833 for (DataSetListener dsl : listeners) { 834 dsl.dataChanged(); 835 } 836 } 837 } 838 798 839 void firePrimitivesAdded(Collection<? extends OsmPrimitive> added) { 799 for (DataSetListener dsl : listeners) { 800 dsl.primtivesAdded(added); 840 if (updateCount == 0) { 841 for (DataSetListener dsl : listeners) { 842 dsl.primtivesAdded(added); 843 } 801 844 } 802 845 } 803 846 804 847 void firePrimitivesRemoved(Collection<? extends OsmPrimitive> removed) { 805 for (DataSetListener dsl : listeners) { 806 dsl.primtivesRemoved(removed); 848 if (updateCount == 0) { 849 for (DataSetListener dsl : listeners) { 850 dsl.primtivesRemoved(removed); 851 } 807 852 } 808 853 } 809 854 810 855 void fireTagsChanged(OsmPrimitive prim) { 811 for (DataSetListener dsl : listeners) { 812 dsl.tagsChanged(prim); 856 if (updateCount == 0) { 857 for (DataSetListener dsl : listeners) { 858 dsl.tagsChanged(prim); 859 } 813 860 } 814 861 } 815 862 816 863 void fireRelationMembersChanged(Relation r) { 817 for (DataSetListener dsl : listeners) { 818 dsl.relationMembersChanged(r); 819 } 820 } 821 822 public void fireNodeMoved(Node node) { 864 if (updateCount == 0) { 865 for (DataSetListener dsl : listeners) { 866 dsl.relationMembersChanged(r); 867 } 868 } 869 } 870 871 void fireNodeMoved(Node node) { 823 872 reindexNode(node); 824 for (DataSetListener dsl : listeners) { 825 dsl.nodeMoved(node); 826 } 827 } 828 829 public void fireWayNodesChanged(Way way) { 873 if (updateCount == 0) { 874 for (DataSetListener dsl : listeners) { 875 dsl.nodeMoved(node); 876 } 877 } 878 } 879 880 void fireWayNodesChanged(Way way) { 830 881 reindexWay(way); 831 for (DataSetListener dsl : listeners) { 832 dsl.wayNodesChanged(way); 882 if (updateCount == 0) { 883 for (DataSetListener dsl : listeners) { 884 dsl.wayNodesChanged(way); 885 } 833 886 } 834 887 }
Note:
See TracChangeset
for help on using the changeset viewer.