source: josm/trunk/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java@ 10386

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

gsoc-core - remove more deprecation warnings

  • Property svn:eol-style set to native
File size: 4.1 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.widgets;
3
4import java.awt.event.MouseAdapter;
5import java.awt.event.MouseEvent;
6
7import javax.swing.JPopupMenu;
8import javax.swing.ListSelectionModel;
9import javax.swing.SwingUtilities;
10import javax.swing.table.TableColumnModel;
11
12import org.openstreetmap.josm.Main;
13import org.openstreetmap.josm.actions.ZoomToAction;
14import org.openstreetmap.josm.data.osm.OsmPrimitive;
15import org.openstreetmap.josm.gui.layer.OsmDataLayer;
16
17/**
18 * Table displaying OSM primitives.
19 * @since 5297
20 */
21public abstract class OsmPrimitivesTable extends JosmTable {
22
23 /**
24 * the data layer in whose context primitives are edited in this table
25 */
26 private transient OsmDataLayer layer;
27
28 /** the popup menu */
29 private JPopupMenu popupMenu;
30 private ZoomToAction zoomToAction;
31
32 /**
33 * Constructs a new {@code OsmPrimitivesTable}.
34 * @param dm table model
35 * @param cm column model
36 * @param sm selection model
37 */
38 public OsmPrimitivesTable(OsmPrimitivesTableModel dm, TableColumnModel cm, ListSelectionModel sm) {
39 super(dm, cm, sm);
40 addMouseListener(new PopupMenuLauncher(getPopUpMenu()));
41 addMouseListener(new DblClickHandler());
42 }
43
44 /**
45 * Returns the table model.
46 * @return the table model
47 */
48 public OsmPrimitivesTableModel getOsmPrimitivesTableModel() {
49 return (OsmPrimitivesTableModel) getModel();
50 }
51
52 /**
53 * Returns the data layer.
54 * @return the data layer
55 */
56 public final OsmDataLayer getLayer() {
57 return layer;
58 }
59
60 /**
61 * Sets the data layer.
62 * @param layer the data layer
63 */
64 public final void setLayer(OsmDataLayer layer) {
65 this.layer = layer;
66 }
67
68 /**
69 * Replies the popup menu for this table
70 *
71 * @return the popup menu
72 */
73 protected final JPopupMenu getPopUpMenu() {
74 if (popupMenu == null) {
75 popupMenu = buildPopupMenu();
76 }
77 return popupMenu;
78 }
79
80 protected abstract ZoomToAction buildZoomToAction();
81
82 protected JPopupMenu buildPopupMenu() {
83 JPopupMenu menu = new JPopupMenu();
84 zoomToAction = buildZoomToAction();
85 Main.getLayerManager().addLayerChangeListener(zoomToAction);
86 Main.getLayerManager().addActiveLayerChangeListener(zoomToAction);
87 getSelectionModel().addListSelectionListener(zoomToAction);
88 menu.add(zoomToAction);
89 return menu;
90 }
91
92 public void unlinkAsListener() {
93 Main.getLayerManager().removeLayerChangeListener(zoomToAction);
94 Main.getLayerManager().removeActiveLayerChangeListener(zoomToAction);
95 }
96
97 /**
98 * Returns primitive at the specified row.
99 * @param row table row
100 * @param layer unused in this implementation, can be useful for subclasses
101 * @return primitive at the specified row
102 */
103 public OsmPrimitive getPrimitiveInLayer(int row, OsmDataLayer layer) {
104 return getOsmPrimitivesTableModel().getReferredPrimitive(row);
105 }
106
107 protected class DblClickHandler extends MouseAdapter {
108
109 protected void setSelection(MouseEvent e) {
110 int row = rowAtPoint(e.getPoint());
111 if (row < 0) return;
112 OsmPrimitive primitive = getPrimitiveInLayer(row, layer);
113 if (layer != null && primitive != null) {
114 layer.data.setSelected(primitive.getPrimitiveId());
115 }
116 }
117
118 protected void addSelection(MouseEvent e) {
119 int row = rowAtPoint(e.getPoint());
120 if (row < 0) return;
121 OsmPrimitive primitive = getPrimitiveInLayer(row, layer);
122 getSelectionModel().addSelectionInterval(row, row);
123 if (layer != null && primitive != null) {
124 layer.data.addSelected(primitive.getPrimitiveId());
125 }
126 }
127
128 @Override
129 public void mouseClicked(MouseEvent e) {
130 if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() > 1) {
131 if (e.isControlDown()) {
132 addSelection(e);
133 } else {
134 setSelection(e);
135 }
136 }
137 }
138 }
139}
Note: See TracBrowser for help on using the repository browser.