Ticket #1937: look ma, no modes!.patch

File look ma, no modes!.patch, 6.2 KB (added by xeen, 17 years ago)
  • src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

     
    3333import javax.swing.JOptionPane;
    3434
    3535import org.openstreetmap.josm.Main;
    36 import org.openstreetmap.josm.actions.mapmode.SelectAction;
    3736import org.openstreetmap.josm.command.AddCommand;
    3837import org.openstreetmap.josm.command.ChangeCommand;
    3938import org.openstreetmap.josm.command.Command;
     
    4847import org.openstreetmap.josm.data.osm.WaySegment;
    4948import org.openstreetmap.josm.gui.MapFrame;
    5049import org.openstreetmap.josm.gui.MapView;
     50import org.openstreetmap.josm.gui.layer.Layer;
    5151import org.openstreetmap.josm.gui.layer.MapViewPaintable;
    52 import org.openstreetmap.josm.gui.layer.Layer;
    5352import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    5453import org.openstreetmap.josm.tools.ImageProvider;
    5554import org.openstreetmap.josm.tools.Pair;
     
    6867    private boolean shift;
    6968    private boolean mouseOnExistingNode;
    7069    private boolean drawHelperLine;
     70    private boolean wayIsFinished = false;
    7171    private Point mousePos;
    7272    private Color selectedColor;
    7373
     
    9696        super.enterMode();
    9797        selectedColor = Main.pref.getColor(marktr("selected"), Color.red);
    9898        drawHelperLine = Main.pref.getBoolean("draw.helper-line", true);
    99 
     99        wayIsFinished = false;
     100       
    100101        Main.map.mapView.addMouseListener(this);
    101102        Main.map.mapView.addMouseMotionListener(this);
    102103        Main.map.mapView.addTemporaryLayer(this);
     
    160161        if(e.getClickCount() > 1) {
    161162            // A double click equals "user clicked last node again, finish way"
    162163            lastUsedNode = null;
     164            wayIsFinished = true;
     165            Main.map.selectSelectTool(true);
    163166            return;
    164167        }
    165168        // we copy ctrl/alt/shift from the event just in case our global
     
    177180            replacedWays = new ArrayList<Way>();
    178181        boolean newNode = false;
    179182        Node n = null;
    180         boolean wayIsFinished = false;
    181183
    182184        if (!ctrl)
    183185            n = Main.map.mapView.getNearestNode(mousePos);
     
    251253
    252254        // If the above does not apply, the selection is cleared and a new try is started
    253255        boolean extendedWay = false;
    254         if (!shift && selection.size() > 0) {
     256        boolean wayIsFinishedTemp = wayIsFinished;
     257        wayIsFinished = false;
     258        if (!shift && selection.size() > 0 && !wayIsFinishedTemp) {
    255259            Node selectedNode = null;
    256260            Way selectedWay = null;
    257261           
     
    325329            // User clicked last node again, finish way
    326330            if(n0 == n) {
    327331                lastUsedNode = null;
     332                wayIsFinished = true;
     333                Main.map.selectSelectTool(true);
    328334                return;
    329335            }
    330336
     
    372378            extendedWay = true;
    373379            Main.ds.setSelected(way);
    374380        }
    375                
     381     
    376382        String title;
    377383        if (!extendedWay) {
    378384            if (!newNode) {
     
    504510        Main.map.statusLine.setDist(distance);
    505511        updateStatusLine();
    506512
    507         if (!drawHelperLine) return;
     513        if (!drawHelperLine || wayIsFinished) return;
    508514
    509515        Main.map.mapView.repaint();
    510516    }
  • src/org/openstreetmap/josm/actions/mapmode/SelectAction.java

     
    1818import org.openstreetmap.josm.Main;
    1919import org.openstreetmap.josm.actions.MergeNodesAction;
    2020import org.openstreetmap.josm.command.AddCommand;
     21import org.openstreetmap.josm.command.ChangeCommand;
    2122import org.openstreetmap.josm.command.Command;
    22 import org.openstreetmap.josm.command.ChangeCommand;
    2323import org.openstreetmap.josm.command.MoveCommand;
    2424import org.openstreetmap.josm.command.RotateCommand;
    2525import org.openstreetmap.josm.command.SequenceCommand;
     
    3131import org.openstreetmap.josm.data.osm.WaySegment;
    3232import org.openstreetmap.josm.data.osm.visitor.AllNodesVisitor;
    3333import org.openstreetmap.josm.data.osm.visitor.SimplePaintVisitor;
    34 import org.openstreetmap.josm.gui.layer.Layer;
    35 import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    3634import org.openstreetmap.josm.gui.MapFrame;
    3735import org.openstreetmap.josm.gui.MapView;
    3836import org.openstreetmap.josm.gui.SelectionManager;
    3937import org.openstreetmap.josm.gui.SelectionManager.SelectionEnded;
     38import org.openstreetmap.josm.gui.layer.Layer;
     39import org.openstreetmap.josm.gui.layer.OsmDataLayer;
    4040import org.openstreetmap.josm.tools.ImageProvider;
    4141import org.openstreetmap.josm.tools.Shortcut;
    4242
     
    328328    @Override public void mouseReleased(MouseEvent e) {
    329329        if (mode == Mode.select) {
    330330            selectionManager.unregister(Main.map.mapView);
     331            if(Main.ds.getSelected().size() == 0)
     332                Main.map.selectDrawTool(true);
     333                return;
    331334        }
    332335        restoreCursor();
    333336
  • src/org/openstreetmap/josm/gui/MapFrame.java

     
    111111        // status line below the map
    112112        statusLine = new MapStatus(this);
    113113    }
     114   
     115    public void selectSelectTool(boolean onlyIfModeless) {
     116        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
     117            return;
     118       
     119        selectMapMode((MapMode)getDefaultButtonAction());
     120    }
     121   
     122    public void selectDrawTool(boolean onlyIfModeless) {
     123        if(onlyIfModeless && !Main.pref.getBoolean("modeless", false))
     124            return;
     125       
     126        Action drawAction = ((AbstractButton)toolBarActions.getComponent(1)).getAction();
     127        selectMapMode((MapMode)drawAction);
     128    }
    114129
    115130    /**
    116131     * Called as some kind of destructor when the last layer has been removed.