Changeset 5297 in josm for trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
- Timestamp:
- 2012-06-24T19:14:38+02:00 (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
r5081 r5297 8 8 import java.awt.event.ActionEvent; 9 9 import java.awt.event.KeyEvent; 10 import java.awt.event.MouseAdapter;11 import java.awt.event.MouseEvent;12 10 import java.util.Arrays; 13 11 import java.util.Collection; … … 20 18 import javax.swing.KeyStroke; 21 19 import javax.swing.ListSelectionModel; 22 import javax.swing.SwingUtilities;23 20 import javax.swing.event.ListSelectionEvent; 24 21 import javax.swing.event.ListSelectionListener; … … 26 23 import org.openstreetmap.josm.Main; 27 24 import org.openstreetmap.josm.actions.AutoScaleAction; 28 import org.openstreetmap.josm. data.osm.OsmPrimitive;25 import org.openstreetmap.josm.actions.ZoomToAction; 29 26 import org.openstreetmap.josm.data.osm.Way; 30 27 import org.openstreetmap.josm.gui.MapView; … … 33 30 import org.openstreetmap.josm.gui.layer.Layer; 34 31 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 35 36 public class MemberTable extends JTable implements IMemberModelListener { 37 38 /** 39 * the data layer in whose context relation members are edited in this table 40 */ 41 protected OsmDataLayer layer; 42 43 /** the popup menu */ 44 protected JPopupMenu popupMenu; 45 private ZoomToAction zoomToAction; 32 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable; 33 34 public class MemberTable extends OsmPrimitivesTable implements IMemberModelListener { 35 36 /** the additional actions in popup menu */ 46 37 private ZoomToGapAction zoomToGap; 47 38 … … 54 45 public MemberTable(OsmDataLayer layer, MemberTableModel model) { 55 46 super(model, new MemberTableColumnModel(layer.data), model.getSelectionModel()); 56 this.layer = layer;47 setLayer(layer); 57 48 model.addMemberModelListener(this); 58 49 init(); 59 60 50 } 61 51 … … 79 69 getActionMap().put("selectNextColumnCell", new SelectNextColumnCellAction()); 80 70 getActionMap().put("selectPreviousColumnCell", new SelectPreviousColumnCellAction()); 81 82 addMouseListener(new PopupListener()); 83 addMouseListener(new DblClickHandler()); 71 } 72 73 @Override 74 protected ZoomToAction buildZoomToAction() { 75 return new ZoomToAction(this); 76 } 77 78 @Override 79 protected JPopupMenu buildPopupMenu() { 80 JPopupMenu menu = super.buildPopupMenu(); 81 zoomToGap = new ZoomToGapAction(); 82 MapView.addLayerChangeListener(zoomToGap); 83 getSelectionModel().addListSelectionListener(zoomToGap); 84 menu.add(zoomToGap); 85 menu.addSeparator(); 86 menu.add(new SelectPreviousGapAction()); 87 menu.add(new SelectNextGapAction()); 88 return menu; 84 89 } 85 90 … … 156 161 } 157 162 158 /** 159 * Replies the popup menu for this table 160 * 161 * @return the popup menu 162 */ 163 protected JPopupMenu getPopUpMenu() { 164 if (popupMenu == null) { 165 popupMenu = new JPopupMenu(); 166 zoomToAction = new ZoomToAction(); 167 MapView.addLayerChangeListener(zoomToAction); 168 getSelectionModel().addListSelectionListener(zoomToAction); 169 popupMenu.add(zoomToAction); 170 zoomToGap = new ZoomToGapAction(); 171 MapView.addLayerChangeListener(zoomToGap); 172 getSelectionModel().addListSelectionListener(zoomToGap); 173 popupMenu.add(zoomToGap); 174 popupMenu.addSeparator(); 175 popupMenu.add(new SelectPreviousGapAction()); 176 popupMenu.add(new SelectNextGapAction()); 177 } 178 return popupMenu; 179 } 180 163 @Override 181 164 public void unlinkAsListener() { 182 MapView.removeLayerChangeListener(zoomToAction);165 super.unlinkAsListener(); 183 166 MapView.removeLayerChangeListener(zoomToGap); 184 }185 186 class PopupListener extends MouseAdapter {187 @Override188 public void mousePressed(MouseEvent e) {189 showPopup(e);190 }191 192 @Override193 public void mouseReleased(MouseEvent e) {194 showPopup(e);195 }196 197 private void showPopup(MouseEvent e) {198 if (e.isPopupTrigger()) {199 getPopUpMenu().show(e.getComponent(), e.getX(), e.getY());200 }201 }202 }203 204 private class ZoomToAction extends AbstractAction implements LayerChangeListener, ListSelectionListener {205 public ZoomToAction() {206 putValue(NAME, tr("Zoom to"));207 putValue(SHORT_DESCRIPTION, tr("Zoom to the object the first selected member refers to"));208 updateEnabledState();209 }210 211 public void actionPerformed(ActionEvent e) {212 if (! isEnabled())213 return;214 int rows[] = getSelectedRows();215 if (rows == null || rows.length == 0)216 return;217 int row = rows[0];218 OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row);219 layer.data.setSelected(primitive);220 AutoScaleAction.autoScale("selection");221 }222 223 protected void updateEnabledState() {224 if (Main.main == null || Main.main.getEditLayer() != layer) {225 setEnabled(false);226 putValue(SHORT_DESCRIPTION, tr("Zooming disabled because layer of this relation is not active"));227 return;228 }229 if (getSelectedRowCount() == 0) {230 setEnabled(false);231 putValue(SHORT_DESCRIPTION, tr("Zooming disabled because there is no selected member"));232 return;233 }234 setEnabled(true);235 putValue(SHORT_DESCRIPTION, tr("Zoom to the object the first selected member refers to"));236 }237 238 public void valueChanged(ListSelectionEvent e) {239 updateEnabledState();240 }241 242 public void activeLayerChange(Layer oldLayer, Layer newLayer) {243 updateEnabledState();244 }245 246 public void layerAdded(Layer newLayer) {247 updateEnabledState();248 }249 250 public void layerRemoved(Layer oldLayer) {251 updateEnabledState();252 }253 167 } 254 168 … … 316 230 Way way = (Way) getMemberTableModel().getReferredPrimitive(getSelectedRows()[0]); 317 231 if (!connectionType.linkPrev) { 318 layer.data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction)232 getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 319 233 ? way.firstNode() : way.lastNode()); 320 234 AutoScaleAction.autoScale("selection"); 321 235 } else if (!connectionType.linkNext) { 322 layer.data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction)236 getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 323 237 ? way.lastNode() : way.firstNode()); 324 238 AutoScaleAction.autoScale("selection"); … … 328 242 private void updateEnabledState() { 329 243 setEnabled(Main.main != null 330 && Main.main.getEditLayer() == layer244 && Main.main.getEditLayer() == getLayer() 331 245 && getSelectedRowCount() == 1 332 246 && hasGap()); … … 357 271 return (MemberTableModel) getModel(); 358 272 } 359 360 private class DblClickHandler extends MouseAdapter {361 362 protected void setSelection(MouseEvent e) {363 int row = rowAtPoint(e.getPoint());364 if (row < 0) return;365 OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row);366 getMemberTableModel().getLayer().data.setSelected(primitive.getPrimitiveId());367 }368 369 protected void addSelection(MouseEvent e) {370 int row = rowAtPoint(e.getPoint());371 if (row < 0) return;372 OsmPrimitive primitive = getMemberTableModel().getReferredPrimitive(row);373 getMemberTableModel().getSelectionModel().addSelectionInterval(row, row);374 getMemberTableModel().getLayer().data.addSelected(primitive.getPrimitiveId());375 376 }377 378 @Override379 public void mouseClicked(MouseEvent e) {380 if (SwingUtilities.isLeftMouseButton(e) && e.getClickCount() > 1) {381 if (e.isControlDown()) {382 addSelection(e);383 } else {384 setSelection(e);385 }386 }387 }388 }389 273 }
Note:
See TracChangeset
for help on using the changeset viewer.