Changeset 5137 in josm


Ignore:
Timestamp:
2012-03-30T20:52:30+02:00 (12 years ago)
Author:
akks
Message:

Andle Snapping improvements: activation on A (Tab can be disabled, see #7438), better projections, show activation in status line

Location:
trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/mapmode/DrawAction.java

    r5106 r5137  
    22package org.openstreetmap.josm.actions.mapmode;
    33
     4import java.awt.*;
    45import static org.openstreetmap.josm.gui.help.HelpUtil.ht;
    56import static org.openstreetmap.josm.tools.I18n.marktr;
     
    78import static org.openstreetmap.josm.tools.I18n.trn;
    89
    9 import java.awt.AWTEvent;
    10 import java.awt.BasicStroke;
    11 import java.awt.Color;
    12 import java.awt.Cursor;
    13 import java.awt.Graphics2D;
    14 import java.awt.Point;
    15 import java.awt.Stroke;
    16 import java.awt.Toolkit;
    1710import java.awt.event.AWTEventListener;
    1811import java.awt.event.ActionEvent;
     
    3629import java.util.TreeSet;
    3730
    38 import javax.swing.AbstractAction;
    39 import javax.swing.JCheckBoxMenuItem;
    40 import javax.swing.JMenuItem;
    41 import javax.swing.JOptionPane;
    42 import javax.swing.JPopupMenu;
    43 import javax.swing.Timer;
     31import javax.swing.*;
    4432
    4533import org.openstreetmap.josm.Main;
     
    238226        snapHelper.unsetFixedMode();
    239227        snapCheckboxMenuItem.getAction().setEnabled(false);
     228       
    240229        Main.map.statusLine.getAnglePanel().removeMouseListener(snapHelper.anglePopupListener);
     230        Main.map.statusLine.activateAnglePanel(false);
    241231
    242232        removeHighlighting();
     
    262252            return;
    263253        if (event instanceof KeyEvent) {
    264             processKeyEvent((KeyEvent) event);
     254            KeyEvent e = (KeyEvent) event;
     255            if (snappingShortcut.isEvent(e) || getShortcut().isEvent(e)) {
     256                Component focused = KeyboardFocusManager.getCurrentKeyboardFocusManager().getFocusOwner();
     257                if (SwingUtilities.getWindowAncestor(focused) instanceof JFrame)
     258                    processKeyEvent(e);
     259            }
    265260        } //  toggle angle snapping
    266261        updateKeyModifiers((InputEvent) event);
     
    275270    private Timer timer;
    276271    void processKeyEvent(KeyEvent e) {
    277         if (!snappingShortcut.isEvent(e))
    278             return;
    279 
     272        if (!snappingShortcut.isEvent(e) && !getShortcut().isEvent(e))
     273            return;
     274       
    280275        if (e.getID() == KeyEvent.KEY_PRESSED) {
    281276            if (timer.isRunning()) {
     
    764759        mouseOnExistingWays = new HashSet<Way>();
    765760
    766         showStatusInfo(-1, -1, -1);
     761        showStatusInfo(-1, -1, -1, snapHelper.isSnapOn());
    767762
    768763        if (!ctrl && mousePos != null) {
     
    809804    }
    810805
    811     private void showStatusInfo(double angle, double hdg, double distance) {
     806    private void showStatusInfo(double angle, double hdg, double distance, boolean activeFlag) {
    812807        Main.map.statusLine.setAngle(angle);
     808        Main.map.statusLine.activateAnglePanel(activeFlag);
    813809        Main.map.statusLine.setHeading(hdg);
    814810        Main.map.statusLine.setDist(distance);
     
    14201416                if (angle > 360) angle=0;
    14211417            }
    1422             showStatusInfo(angle, hdg, distance);
     1418            showStatusInfo(angle, hdg, distance, isSnapOn());
    14231419        }
    14241420
     
    14651461                if (selectedWays.size()==1) {
    14661462                    Way w = selectedWays.iterator().next();
    1467                     for (Node n: w.getNodes()) {
    1468                         EastNorth en=n.getEastNorth();
     1463                    Collection <EastNorth> pointsToProject = new ArrayList<EastNorth>();
     1464                    if (w.getNodesCount()<1000) for (Node n: w.getNodes()) {
     1465                        pointsToProject.add(n.getEastNorth());
     1466                    }
     1467                    if (customBaseHeading >=0 ) {
     1468                        pointsToProject.add(segmentPoint1);
     1469                        pointsToProject.add(segmentPoint2);
     1470                    }
     1471                    EastNorth enOpt=null;
     1472                    double dOpt=1e5;
     1473                    for (EastNorth en: pointsToProject) { // searching for besht projection
    14691474                        double l1 = (en.east()-e0)*pe+(en.north()-n0)*pn;
    1470                         if (Math.abs(l1-l) < delta) {
     1475                        double d1 = Math.abs(l1-l);
     1476                        if (d1 < delta && d1 < dOpt) {
    14711477                            l=l1;
    1472                             projectionSource = en;
    1473                             break;
     1478                            enOpt = en;
     1479                            dOpt = d1;
    14741480                        }
     1481                    }
     1482                    if (enOpt!=null) {
     1483                        projectionSource =  enOpt;
    14751484                    }
    14761485                }
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r5129 r5137  
    7676     */
    7777    static class ImageLabel extends JPanel {
     78        static Color backColor = Color.decode("#b8cfe5");
     79        static Color backColorActive = Color.decode("#aaff5e");
     80           
    7881        private JLabel tf;
    7982        private int chars;
     
    8184            super();
    8285            setLayout(new GridBagLayout());
    83             setBackground(Color.decode("#b8cfe5"));
     86            setBackground(backColor);
    8487            add(new JLabel(ImageProvider.get("statusline/"+img+".png")), GBC.std().anchor(GBC.WEST).insets(0,1,1,0));
    8588            add(tf = new JLabel(), GBC.std().fill(GBC.BOTH).anchor(GBC.WEST).insets(2,1,1,0));
     
    788791        distText.setText(dist < 0 ? "--" : NavigatableComponent.getDistText(dist));
    789792    }
     793    public void activateAnglePanel(boolean activeFlag) {
     794        angleText.setBackground(activeFlag ? ImageLabel.backColorActive : ImageLabel.backColor);
     795    }
    790796}
Note: See TracChangeset for help on using the changeset viewer.