Ticket #8802: 8802.diff

File 8802.diff, 8.6 KB (added by Don-vip, 11 years ago)

patch that replaces "zoom to gap" by a proper and simpler selection and zoom button

  • core/src/org/openstreetmap/josm/actions/ZoomToAction.java

     
    1919import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    2020import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
    2121import org.openstreetmap.josm.tools.CheckParameterUtil;
     22import org.openstreetmap.josm.tools.ImageProvider;
    2223
    2324public class ZoomToAction extends AbstractAction implements LayerChangeListener, ListSelectionListener {
    2425
     
    2930    private final String descriptionNoSelection;
    3031   
    3132    public ZoomToAction(OsmPrimitivesTable table, String descriptionNominal, String descriptionInactiveLayer, String descriptionNoSelection) {
     33        super(tr("Zoom to"), ImageProvider.get("dialogs/autoscale/selection"));
    3234        CheckParameterUtil.ensureParameterNotNull(table);
    3335        this.table = table;
    3436        this.descriptionNominal = descriptionNominal;
    3537        this.descriptionInactiveLayer = descriptionInactiveLayer;
    3638        this.descriptionNoSelection = descriptionNoSelection;
    37         putValue(NAME, tr("Zoom to"));
    3839        putValue(SHORT_DESCRIPTION, descriptionNominal);
    3940        updateEnabledState();
    4041    }
  • core/src/org/openstreetmap/josm/gui/dialogs/relation/GenericRelationEditor.java

     
    529529        inputMap.put((KeyStroke) moveUpAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveUp");
    530530        inputMap.put((KeyStroke) moveDownAction.getValue(AbstractAction.ACCELERATOR_KEY),"moveDown");
    531531        inputMap.put((KeyStroke) downloadIncompleteMembersAction.getValue(AbstractAction.ACCELERATOR_KEY),"downloadIncomplete");
    532        
     532
     533        tb.addSeparator();
     534        tb.add(memberTable.getZoomToAction());
     535
    533536        return tb;
    534537    }
    535538
  • core/src/org/openstreetmap/josm/gui/dialogs/relation/MemberTable.java

     
    55
    66import java.awt.Container;
    77import java.awt.Dimension;
     8import java.awt.Rectangle;
    89import java.awt.event.ActionEvent;
    910import java.awt.event.KeyEvent;
    10 import java.util.Arrays;
    11 import java.util.Collection;
    1211
    1312import javax.swing.AbstractAction;
    1413import javax.swing.JComponent;
     
    1716import javax.swing.JViewport;
    1817import javax.swing.KeyStroke;
    1918import javax.swing.ListSelectionModel;
    20 import javax.swing.event.ListSelectionEvent;
    21 import javax.swing.event.ListSelectionListener;
    2219
    23 import org.openstreetmap.josm.Main;
    24 import org.openstreetmap.josm.actions.AutoScaleAction;
    2520import 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;
    3221import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3322import org.openstreetmap.josm.gui.widgets.OsmPrimitivesTable;
    3423
    3524public class MemberTable extends OsmPrimitivesTable implements IMemberModelListener {
    3625
    37     /** the additional actions in popup menu */
    38     private ZoomToGapAction zoomToGap;
    39 
    4026    /**
    4127     * constructor for relation member table
    4228     *
     
    7965    @Override
    8066    protected JPopupMenu buildPopupMenu() {
    8167        JPopupMenu menu = super.buildPopupMenu();
    82         zoomToGap = new ZoomToGapAction();
    83         MapView.addLayerChangeListener(zoomToGap);
    84         getSelectionModel().addListSelectionListener(zoomToGap);
    85         menu.add(zoomToGap);
    8668        menu.addSeparator();
    8769        menu.add(new SelectPreviousGapAction());
    8870        menu.add(new SelectNextGapAction());
     
    161143        }
    162144    }
    163145
    164     @Override
    165     public void unlinkAsListener() {
    166         super.unlinkAsListener();
    167         MapView.removeLayerChangeListener(zoomToGap);
    168     }
    169 
    170146    private class SelectPreviousGapAction extends AbstractAction {
    171147
    172148        public SelectPreviousGapAction() {
     
    180156            while (i >= 0 && getMemberTableModel().getWayConnection(i).linkPrev) {
    181157                i--;
    182158            }
    183             if (i >= 0) {
    184                 getSelectionModel().setSelectionInterval(i, i);
    185             }
     159            selectRow(i);
    186160        }
    187161    }
    188162
     
    199173            while (i < getRowCount() && getMemberTableModel().getWayConnection(i).linkNext) {
    200174                i++;
    201175            }
    202             if (i < getRowCount()) {
    203                 getSelectionModel().setSelectionInterval(i, i);
    204             }
     176            selectRow(i);
    205177        }
    206178    }
    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);
    240186            }
    241187        }
    242 
    243         private void updateEnabledState() {
    244             setEnabled(Main.main != null
    245                     && Main.main.getEditLayer() == getLayer()
    246                     && getSelectedRowCount() == 1
    247                     && hasGap());
    248         }
    249 
    250         @Override
    251         public void valueChanged(ListSelectionEvent e) {
    252             updateEnabledState();
    253         }
    254 
    255         @Override
    256         public void activeLayerChange(Layer oldLayer, Layer newLayer) {
    257             updateEnabledState();
    258         }
    259 
    260         @Override
    261         public void layerAdded(Layer newLayer) {
    262             updateEnabledState();
    263         }
    264 
    265         @Override
    266         public void layerRemoved(Layer oldLayer) {
    267             updateEnabledState();
    268         }
    269188    }
    270189
    271190    protected MemberTableModel getMemberTableModel() {
  • core/src/org/openstreetmap/josm/gui/widgets/OsmPrimitivesTable.java

     
    5656        return popupMenu;
    5757    }
    5858   
     59    /**
     60     * Replies the "Zoom to" action
     61     * @return the "Zoom to" action
     62     */
     63    public final ZoomToAction getZoomToAction() {
     64        return zoomToAction;
     65    }
     66
    5967    protected abstract ZoomToAction buildZoomToAction();
    6068
    6169    protected JPopupMenu buildPopupMenu() {