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

Last change on this file since 2621 was 2621, checked in by Gubaer, 14 years ago

Moved layer listener management from Layer to MapView
Made sure that listeners also unregister when they register for layer change events.

This will certainly break plugins. Plugin updates will follow later.

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