Ticket #8802: 8802.diff
File 8802.diff, 8.6 KB (added by , 11 years ago) |
---|
-
core/src/org/openstreetmap/josm/actions/ZoomToAction.java
19 19 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 20 20 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable; 21 21 import org.openstreetmap.josm.tools.CheckParameterUtil; 22 import org.openstreetmap.josm.tools.ImageProvider; 22 23 23 24 public class ZoomToAction extends AbstractAction implements LayerChangeListener, ListSelectionListener { 24 25 … … 29 30 private final String descriptionNoSelection; 30 31 31 32 public ZoomToAction(OsmPrimitivesTable table, String descriptionNominal, String descriptionInactiveLayer, String descriptionNoSelection) { 33 super(tr("Zoom to"), ImageProvider.get("dialogs/autoscale/selection")); 32 34 CheckParameterUtil.ensureParameterNotNull(table); 33 35 this.table = table; 34 36 this.descriptionNominal = descriptionNominal; 35 37 this.descriptionInactiveLayer = descriptionInactiveLayer; 36 38 this.descriptionNoSelection = descriptionNoSelection; 37 putValue(NAME, tr("Zoom to"));38 39 putValue(SHORT_DESCRIPTION, descriptionNominal); 39 40 updateEnabledState(); 40 41 } -
core/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java
529 529 inputMap.put((KeyStroke) moveUpAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveUp"); 530 530 inputMap.put((KeyStroke) moveDownAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveDown"); 531 531 inputMap.put((KeyStroke) downloadIncompleteMembersAction.getValue(AbstractAction.ACCELERATOR_KEY),"downloadIncomplete"); 532 532 533 tb.addSeparator(); 534 tb.add(memberTable.getZoomToAction()); 535 533 536 return tb; 534 537 } 535 538 -
core/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java
5 5 6 6 import java.awt.Container; 7 7 import java.awt.Dimension; 8 import java.awt.Rectangle; 8 9 import java.awt.event.ActionEvent; 9 10 import java.awt.event.KeyEvent; 10 import java.util.Arrays;11 import java.util.Collection;12 11 13 12 import javax.swing.AbstractAction; 14 13 import javax.swing.JComponent; … … 17 16 import javax.swing.JViewport; 18 17 import javax.swing.KeyStroke; 19 18 import javax.swing.ListSelectionModel; 20 import javax.swing.event.ListSelectionEvent;21 import javax.swing.event.ListSelectionListener;22 19 23 import org.openstreetmap.josm.Main;24 import org.openstreetmap.josm.actions.AutoScaleAction;25 20 import org.openstreetmap.josm.actions.ZoomToAction; 26 import org.openstreetmap.josm.data.osm.Way;27 import org.openstreetmap.josm.gui.MapView;28 import org.openstreetmap.josm.gui.MapView.LayerChangeListener;29 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType;30 import org.openstreetmap.josm.gui.dialogs.relation.sort.WayConnectionType.Direction;31 import org.openstreetmap.josm.gui.layer.Layer;32 21 import org.openstreetmap.josm.gui.layer.OsmDataLayer; 33 22 import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable; 34 23 35 24 public class MemberTable extends OsmPrimitivesTable implements IMemberModelListener { 36 25 37 /** the additional actions in popup menu */38 private ZoomToGapAction zoomToGap;39 40 26 /** 41 27 * constructor for relation member table 42 28 * … … 79 65 @Override 80 66 protected JPopupMenu buildPopupMenu() { 81 67 JPopupMenu menu = super.buildPopupMenu(); 82 zoomToGap = new ZoomToGapAction();83 MapView.addLayerChangeListener(zoomToGap);84 getSelectionModel().addListSelectionListener(zoomToGap);85 menu.add(zoomToGap);86 68 menu.addSeparator(); 87 69 menu.add(new SelectPreviousGapAction()); 88 70 menu.add(new SelectNextGapAction()); … … 161 143 } 162 144 } 163 145 164 @Override165 public void unlinkAsListener() {166 super.unlinkAsListener();167 MapView.removeLayerChangeListener(zoomToGap);168 }169 170 146 private class SelectPreviousGapAction extends AbstractAction { 171 147 172 148 public SelectPreviousGapAction() { … … 180 156 while (i >= 0 && getMemberTableModel().getWayConnection(i).linkPrev) { 181 157 i--; 182 158 } 183 if (i >= 0) { 184 getSelectionModel().setSelectionInterval(i, i); 185 } 159 selectRow(i); 186 160 } 187 161 } 188 162 … … 199 173 while (i < getRowCount() && getMemberTableModel().getWayConnection(i).linkNext) { 200 174 i++; 201 175 } 202 if (i < getRowCount()) { 203 getSelectionModel().setSelectionInterval(i, i); 204 } 176 selectRow(i); 205 177 } 206 178 } 207 208 private class ZoomToGapAction extends AbstractAction implements LayerChangeListener, ListSelectionListener { 209 210 public ZoomToGapAction() { 211 putValue(NAME, tr("Zoom to Gap")); 212 putValue(SHORT_DESCRIPTION, tr("Zoom to the gap in the way sequence")); 213 updateEnabledState(); 214 } 215 216 private WayConnectionType getConnectionType() { 217 return getMemberTableModel().getWayConnection(getSelectedRows()[0]); 218 } 219 220 private final Collection<Direction> connectionTypesOfInterest = Arrays.asList(WayConnectionType.Direction.FORWARD, WayConnectionType.Direction.BACKWARD); 221 222 private boolean hasGap() { 223 WayConnectionType connectionType = getConnectionType(); 224 return connectionTypesOfInterest.contains(connectionType.direction) 225 && !(connectionType.linkNext && connectionType.linkPrev); 226 } 227 228 @Override 229 public void actionPerformed(ActionEvent e) { 230 WayConnectionType connectionType = getConnectionType(); 231 Way way = (Way) getMemberTableModel().getReferredPrimitive(getSelectedRows()[0]); 232 if (!connectionType.linkPrev) { 233 getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 234 ? way.firstNode() : way.lastNode()); 235 AutoScaleAction.autoScale("selection"); 236 } else if (!connectionType.linkNext) { 237 getLayer().data.setSelected(WayConnectionType.Direction.FORWARD.equals(connectionType.direction) 238 ? way.lastNode() : way.firstNode()); 239 AutoScaleAction.autoScale("selection"); 179 180 private void selectRow(int i) { 181 if (i >+ 0 && i < getRowCount()) { 182 getSelectionModel().setSelectionInterval(i, i); 183 Rectangle cellBounds = getCellRect(i, 1, true); 184 if (cellBounds != null) { 185 scrollRectToVisible(cellBounds); 240 186 } 241 187 } 242 243 private void updateEnabledState() {244 setEnabled(Main.main != null245 && Main.main.getEditLayer() == getLayer()246 && getSelectedRowCount() == 1247 && hasGap());248 }249 250 @Override251 public void valueChanged(ListSelectionEvent e) {252 updateEnabledState();253 }254 255 @Override256 public void activeLayerChange(Layer oldLayer, Layer newLayer) {257 updateEnabledState();258 }259 260 @Override261 public void layerAdded(Layer newLayer) {262 updateEnabledState();263 }264 265 @Override266 public void layerRemoved(Layer oldLayer) {267 updateEnabledState();268 }269 188 } 270 189 271 190 protected MemberTableModel getMemberTableModel() { -
core/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java
56 56 return popupMenu; 57 57 } 58 58 59 /** 60 * Replies the "Zoom to" action 61 * @return the "Zoom to" action 62 */ 63 public final ZoomToAction getZoomToAction() { 64 return zoomToAction; 65 } 66 59 67 protected abstract ZoomToAction buildZoomToAction(); 60 68 61 69 protected JPopupMenu buildPopupMenu() {