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

Last change on this file since 13171 was 12657, checked in by michael2402, 7 years ago

See #14794: Add javadoc for gui/dialogs/relation package.

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