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

Last change on this file since 12636 was 12636, checked in by Don-vip, 7 years ago

see #15182 - deprecate Main.getLayerManager(). Replacement: gui.MainApplication.getLayerManager()

  • Property svn:eol-style set to native
File size: 4.2 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.dialogs.relation;
3import java.util.ArrayList;
4import java.util.Collection;
5import java.util.List;
6
7import javax.swing.table.AbstractTableModel;
8
9import org.openstreetmap.josm.data.SelectionChangedListener;
10import org.openstreetmap.josm.data.osm.DataSet;
11import org.openstreetmap.josm.data.osm.OsmPrimitive;
12import org.openstreetmap.josm.gui.MainApplication;
13import org.openstreetmap.josm.gui.layer.LayerManager.LayerAddEvent;
14import org.openstreetmap.josm.gui.layer.LayerManager.LayerChangeListener;
15import org.openstreetmap.josm.gui.layer.LayerManager.LayerOrderChangeEvent;
16import org.openstreetmap.josm.gui.layer.LayerManager.LayerRemoveEvent;
17import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeEvent;
18import org.openstreetmap.josm.gui.layer.MainLayerManager.ActiveLayerChangeListener;
19import org.openstreetmap.josm.gui.layer.OsmDataLayer;
20import org.openstreetmap.josm.tools.CheckParameterUtil;
21
22public class SelectionTableModel extends AbstractTableModel implements SelectionChangedListener, ActiveLayerChangeListener, LayerChangeListener {
23
24 /** this selection table model only displays selected primitives in this layer */
25 private final transient OsmDataLayer layer;
26 private final transient List<OsmPrimitive> cache;
27
28 /**
29 * constructor
30 *
31 * @param layer the data layer. Must not be null.
32 * @throws IllegalArgumentException if layer is null
33 */
34 public SelectionTableModel(OsmDataLayer layer) {
35 CheckParameterUtil.ensureParameterNotNull(layer, "layer");
36 this.layer = layer;
37 cache = new ArrayList<>();
38 populateSelectedPrimitives(layer);
39 }
40
41 /**
42 * Registers listeners (selection change and layer change).
43 */
44 public void register() {
45 DataSet.addSelectionListener(this);
46 MainApplication.getLayerManager().addActiveLayerChangeListener(this);
47 }
48
49 /**
50 * Unregisters listeners (selection change and layer change).
51 */
52 public void unregister() {
53 DataSet.removeSelectionListener(this);
54 MainApplication.getLayerManager().removeActiveLayerChangeListener(this);
55 }
56
57 @Override
58 public int getColumnCount() {
59 return 1;
60 }
61
62 @Override
63 public int getRowCount() {
64 if (MainApplication.getLayerManager().getEditLayer() != layer)
65 return 0;
66 return cache.size();
67 }
68
69 @Override
70 public Object getValueAt(int rowIndex, int columnIndex) {
71 return cache.get(rowIndex);
72 }
73
74 @Override
75 public void activeOrEditLayerChanged(ActiveLayerChangeEvent e) {
76 if (e.getPreviousActiveLayer() == layer) {
77 cache.clear();
78 }
79 if (e.getSource().getActiveLayer() == layer) {
80 cache.addAll(layer.data.getAllSelected());
81 }
82 fireTableDataChanged();
83 }
84
85 @Override
86 public void layerAdded(LayerAddEvent e) {
87 // do nothing
88 }
89
90 @Override
91 public void layerRemoving(LayerRemoveEvent e) {
92 if (e.getRemovedLayer() == layer) {
93 unregister();
94 }
95 this.cache.clear();
96 fireTableDataChanged();
97 }
98
99 @Override
100 public void layerOrderChanged(LayerOrderChangeEvent e) {
101 // do nothing
102 }
103
104 @Override
105 public void selectionChanged(Collection<? extends OsmPrimitive> newSelection) {
106 if (layer == MainApplication.getLayerManager().getEditLayer()) {
107 cache.clear();
108 cache.addAll(newSelection);
109 } else {
110 cache.clear();
111 }
112 fireTableDataChanged();
113 }
114
115 public List<OsmPrimitive> getSelection() {
116 return cache;
117 }
118
119 /**
120 * populates the model with the primitives currently selected in
121 * <code>layer</code>
122 *
123 * @param layer the data layer
124 */
125 protected void populateSelectedPrimitives(OsmDataLayer layer) {
126 selectionChanged(layer.data.getAllSelected());
127 }
128
129 /**
130 * Replies the primitive at row <code>row</code> in this model
131 *
132 * @param row the row
133 * @return the primitive at row <code>row</code> in this model
134 * @throws ArrayIndexOutOfBoundsException if index is invalid
135 */
136 public OsmPrimitive getPrimitive(int row) {
137 return cache.get(row);
138 }
139
140}
Note: See TracBrowser for help on using the repository browser.