Changeset 4001 in josm


Ignore:
Timestamp:
Mar 22, 2011 9:31:53 PM (2 years ago)
Author:
Upliner
Message:

applied #5787 Display and read offset as one line (patch by Zverik), fixes #6098

File:
1 edited

Legend:

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

    r3948 r4001  
    8989        if (event.getID() != KeyEvent.KEY_PRESSED) return; 
    9090        if (layer == null) return; 
     91        if (offsetDialog != null && offsetDialog.areFieldsInFocus()) return; 
    9192        KeyEvent kev = (KeyEvent)event; 
    9293        double dx = 0, dy = 0; 
     
    148149 
    149150    class ImageryOffsetDialog extends ExtendedDialog implements FocusListener { 
    150         public final JTextField easting = new JTextField(); 
    151         public final JTextField northing = new JTextField(); 
     151        public final JTextField tOffset = new JTextField(); 
    152152        JTextField tBookmarkName = new JTextField(); 
    153153        private boolean ignoreListener; 
     
    163163                    "You can also enter east and north offset in the {0} coordinates.\n" + 
    164164                    "If you want to save the offset as bookmark, enter the bookmark name below",Main.proj.toString())), GBC.eop()); 
    165             pnl.add(new JLabel(tr("Easting") + ": "),GBC.std()); 
    166             pnl.add(easting,GBC.std().fill(GBC.HORIZONTAL).insets(0, 0, 5, 0)); 
    167             pnl.add(new JLabel(tr("Northing") + ": "),GBC.std()); 
    168             pnl.add(northing,GBC.eol().fill(GBC.HORIZONTAL)); 
    169             pnl.add(new JLabel(tr("Bookmark name: ")),GBC.eol().insets(0,5,0,0)); 
     165            pnl.add(new JLabel(tr("Offset: ")),GBC.std()); 
     166            pnl.add(tOffset,GBC.eol().fill(GBC.HORIZONTAL).insets(0,0,0,5)); 
     167            pnl.add(new JLabel(tr("Bookmark name: ")),GBC.std()); 
    170168            pnl.add(tBookmarkName,GBC.eol().fill(GBC.HORIZONTAL)); 
    171             easting.setColumns(8); 
    172             northing.setColumns(8); 
    173             easting.setText(String.valueOf(layer.getDx())); 
    174             northing.setText(String.valueOf(layer.getDy())); 
    175             easting.addFocusListener(this); 
    176             northing.addFocusListener(this); 
     169            tOffset.setColumns(16); 
     170            updateOffsetIntl(); 
     171            tOffset.addFocusListener(this); 
    177172            setContent(pnl); 
    178173            setupDialog(); 
    179174        } 
    180175 
     176        public boolean areFieldsInFocus() { 
     177            return tOffset.hasFocus(); 
     178        } 
     179 
    181180        @Override 
    182181        public void focusGained(FocusEvent e) { 
     
    186185        public void focusLost(FocusEvent e) { 
    187186            if (ignoreListener) return; 
    188             double dx = oldDx; 
    189             try { 
    190                 dx = Double.parseDouble(easting.getText()); 
    191             } catch (NumberFormatException nfe) { 
    192                 easting.setText(String.valueOf(oldDx)); 
    193             } 
    194             double dy = oldDy; 
    195             try { 
    196                 dy = Double.parseDouble(northing.getText()); 
    197             } catch (NumberFormatException nfe) { 
    198                 northing.setText(String.valueOf(oldDy)); 
    199             } 
    200             layer.setOffset(dx, dy); 
     187            String ostr = tOffset.getText(); 
     188            int semicolon = ostr.indexOf(';'); 
     189            if( semicolon >= 0 && semicolon + 1 < ostr.length() ) { 
     190                try { 
     191                    // here we assume that Double.parseDouble() needs '.' as a decimal separator 
     192                    String easting = ostr.substring(0, semicolon).trim().replace(',', '.'); 
     193                    String northing = ostr.substring(semicolon + 1).trim().replace(',', '.'); 
     194                    double dx = Double.parseDouble(easting); 
     195                    double dy = Double.parseDouble(northing); 
     196                    layer.setOffset(dx, dy); 
     197                } catch (NumberFormatException nfe) { 
     198                    // we repaint offset numbers in any case 
     199                } 
     200            } 
     201            updateOffsetIntl(); 
    201202            Main.map.repaint(); 
    202203        } 
     
    204205        public void updateOffset() { 
    205206            ignoreListener = true; 
    206             easting.setText(String.valueOf(layer.getDx())); 
    207             northing.setText(String.valueOf(layer.getDy())); 
     207            updateOffsetIntl(); 
    208208            ignoreListener = false; 
     209        } 
     210 
     211        public void updateOffsetIntl() { 
     212            // Support projections with very small numbers (e.g. 4326) 
     213            int precision = Main.proj.getDefaultZoomInPPD() >= 1.0 ? 2 : 7; 
     214            // US locale to force decimal separator to be '.' 
     215            tOffset.setText(new java.util.Formatter(java.util.Locale.US).format( 
     216                    "%1." + precision + "f; %1." + precision + "f", 
     217                    layer.getDx(), layer.getDy()).toString()); 
    209218        } 
    210219 
Note: See TracChangeset for help on using the changeset viewer.