source: josm/trunk/src/org/openstreetmap/josm/gui/dialogs/relation/SelectionTableModel.java@ 1839

Last change on this file since 1839 was 1839, checked in by Gubaer, 15 years ago

fixed #3022: Add confirmation dialog if adding way twice in a relation

File size: 3.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3import static org.openstreetmap.josm.tools.I18n.tr;
4import java.util.ArrayList;
5import java.util.Collection;
6import java.util.List;
7
8import javax.swing.table.AbstractTableModel;
9
10import org.openstreetmap.josm.Main;
11import org.openstreetmap.josm.data.SelectionChangedListener;
12import org.openstreetmap.josm.data.osm.DataSet;
13import org.openstreetmap.josm.data.osm.OsmPrimitive;
14import org.openstreetmap.josm.gui.layer.Layer;
15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
16import org.openstreetmap.josm.gui.layer.Layer.LayerChangeListener;
17
18public class SelectionTableModel extends AbstractTableModel implements SelectionChangedListener, LayerChangeListener{
19
20 /** this selection table model only displays selected primitives in this layer */
21 private OsmDataLayer layer;
22 private ArrayList<OsmPrimitive> cache;
23
24 /**
25 * constructor
26 *
27 * @param layer the data layer. Must not be null.
28 * @exception IllegalArgumentException thrown if layer is null
29 */
30 public SelectionTableModel(OsmDataLayer layer) throws IllegalArgumentException {
31 if (layer == null)
32 throw new IllegalArgumentException(tr("parameter ''{0}'' must not be null", "layer"));
33 this.layer = layer;
34 cache = new ArrayList<OsmPrimitive>();
35 DataSet.selListeners.add(this);
36 Layer.listeners.add(this);
37 populateSelectedPrimitives(layer);
38 }
39
40
41 public void unregister() {
42 DataSet.selListeners.remove(this);
43 Layer.listeners.remove(this);
44 }
45
46 public int getColumnCount() {
47 return 1;
48 }
49
50 public int getRowCount() {
51 if (Main.map.mapView.getEditLayer() != layer)
52 return 0;
53 return cache.size();
54 }
55
56 public Object getValueAt(int rowIndex, int columnIndex) {
57 return cache.get(rowIndex);
58 }
59
60 public void activeLayerChange(Layer oldLayer, Layer newLayer) {
61 if (oldLayer == layer) {
62 cache.clear();
63 }
64 if (newLayer == layer) {
65 cache.addAll(((OsmDataLayer)newLayer).data.getSelected());
66 }
67 fireTableDataChanged();
68 }
69
70 public void layerAdded(Layer newLayer) {
71 // do nothing
72 }
73
74 public void layerRemoved(Layer oldLayer) {
75 if (oldLayer == layer) {
76 unregister();
77 }
78 this.cache.clear();
79 fireTableDataChanged();
80 }
81
82 public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
83 if (layer == Main.map.mapView.getEditLayer()) {
84 cache.clear();
85 cache.addAll(newSelection);
86 } else {
87 cache.clear();
88 }
89 fireTableDataChanged();
90 }
91
92 public List<OsmPrimitive> getSelection() {
93 return cache;
94 }
95
96 /**
97 * populates the model with the primitives currently selected in
98 * <code>layer</code>
99 *
100 * @param layer the data layer
101 */
102 protected void populateSelectedPrimitives(OsmDataLayer layer) {
103 selectionChanged(layer.data.getSelected());
104 }
105}
Note: See TracBrowser for help on using the repository browser.