Changeset 5137 in josm


Ignore:
Timestamp:
Mar 30, 2012 8:52:30 PM (15 months 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.