Changeset 10571 in josm for trunk


Ignore:
Timestamp:
2016-07-20T19:34:37+02:00 (4 years ago)
Author:
Don-vip
Message:

fix #13172 - Move ImageryLayer.d[xy] to the settings (patch by michael2402) - gsoc-core

Location:
trunk
Files:
7 edited

Legend:

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

    r10467 r10571  
    2828import org.openstreetmap.josm.data.imagery.OffsetBookmark;
    2929import org.openstreetmap.josm.gui.ExtendedDialog;
    30 import org.openstreetmap.josm.gui.layer.ImageryLayer;
     30import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
     31import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
    3132import org.openstreetmap.josm.gui.widgets.JMultilineLabel;
    3233import org.openstreetmap.josm.gui.widgets.JosmTextField;
     
    4243    private static Cursor cursor = ImageProvider.getCursor("normal", "move");
    4344
    44     private double oldDx, oldDy;
     45    private EastNorth old;
    4546    private EastNorth prevEastNorth;
    46     private transient ImageryLayer layer;
     47    private transient AbstractTileSourceLayer<?> layer;
    4748    private MapMode oldMapMode;
    4849
     
    5152     * @param layer The imagery layer
    5253     */
    53     public ImageryAdjustAction(ImageryLayer layer) {
     54    public ImageryAdjustAction(AbstractTileSourceLayer<?> layer) {
    5455        super(tr("New offset"), "adjustimg",
    5556                tr("Adjust the position of this imagery layer"), Main.map,
     
    6768            layer.setVisible(true);
    6869        }
    69         oldDx = layer.getDx();
    70         oldDy = layer.getDy();
     70        old = layer.getDisplaySettings().getDisplacement();
    7171        addListeners();
    7272        offsetDialog = new ImageryOffsetDialog();
     
    8989        if (offsetDialog != null) {
    9090            if (layer != null) {
    91                 layer.setOffset(oldDx, oldDy);
     91                layer.getDisplaySettings().setDisplacement(old);
    9292            }
    9393            offsetDialog.setVisible(false);
     
    155155    public void mouseDragged(MouseEvent e) {
    156156        if (layer == null || prevEastNorth == null) return;
    157         EastNorth eastNorth =
    158             Main.map.mapView.getEastNorth(e.getX(), e.getY());
    159         double dx = layer.getDx()+eastNorth.east()-prevEastNorth.east();
    160         double dy = layer.getDy()+eastNorth.north()-prevEastNorth.north();
    161         layer.setOffset(dx, dy);
     157        EastNorth eastNorth = Main.map.mapView.getEastNorth(e.getX(), e.getY());
     158        EastNorth d = layer.getDisplaySettings().getDisplacement().add(eastNorth).subtract(prevEastNorth);
     159        layer.getDisplaySettings().setDisplacement(d);
    162160        if (offsetDialog != null) {
    163161            offsetDialog.updateOffset();
     
    234232                    double dx = Double.parseDouble(easting);
    235233                    double dy = Double.parseDouble(northing);
    236                     layer.setOffset(dx, dy);
     234                    layer.getDisplaySettings().setDisplacement(new EastNorth(dx, dy));
    237235                } catch (NumberFormatException nfe) {
    238236                    // we repaint offset numbers in any case
     
    259257            // US locale to force decimal separator to be '.'
    260258            try (Formatter us = new Formatter(Locale.US)) {
     259                TileSourceDisplaySettings ds = layer.getDisplaySettings();
    261260                tOffset.setText(us.format(new StringBuilder()
    262261                    .append("%1.").append(precision).append("f; %1.").append(precision).append('f').toString(),
    263                     layer.getDx(), layer.getDy()).toString());
     262                    ds.getDx(), ds.getDy()).toString());
    264263            }
    265264        }
     
    298297            if (layer != null) {
    299298                if (getValue() != 1) {
    300                     layer.setOffset(oldDx, oldDy);
     299                    layer.getDisplaySettings().setDisplacement(old);
    301300                } else if (tBookmarkName.getText() != null && !tBookmarkName.getText().isEmpty()) {
    302301                    OffsetBookmark.bookmarkOffset(tBookmarkName.getText(), layer);
  • trunk/src/org/openstreetmap/josm/gui/layer/AbstractTileSourceLayer.java

    r10568 r10571  
    6464import org.openstreetmap.gui.jmapviewer.tilesources.AbstractTMSTileSource;
    6565import org.openstreetmap.josm.Main;
     66import org.openstreetmap.josm.actions.ImageryAdjustAction;
    6667import org.openstreetmap.josm.actions.RenameLayerAction;
    6768import org.openstreetmap.josm.actions.SaveActionBase;
     
    165166    private final TileSourceDisplaySettings displaySettings = createDisplaySettings();
    166167
     168    private final ImageryAdjustAction adjustAction = new ImageryAdjustAction(this);
     169
    167170    /**
    168171     * Creates Tile Source based Imagery Layer based on Imagery Info
     
    286289    }
    287290
     291    @Override
     292    public double getDx() {
     293        return getDisplaySettings().getDx();
     294    }
     295
     296    @Override
     297    public double getDy() {
     298        return getDisplaySettings().getDy();
     299    }
     300
     301    @Override
     302    public void displace(double dx, double dy) {
     303        getDisplaySettings().addDisplacement(new EastNorth(dx, dy));
     304    }
     305
    288306    /**
    289307     * Marks layer as needing redraw on offset change
     
    291309    @Override
    292310    public void setOffset(double dx, double dy) {
    293         super.setOffset(dx, dy);
    294         needRedraw = true;
    295     }
    296 
     311        getDisplaySettings().setDisplacement(new EastNorth(dx, dy));
     312    }
     313
     314    @Override
     315    public Object getInfoComponent() {
     316        JPanel panel = (JPanel) super.getInfoComponent();
     317        EastNorth offset = getDisplaySettings().getDisplacement();
     318        if (offset.distanceSq(0, 0) > 1e-10) {
     319            panel.add(new JLabel(tr("Offset: ") + offset.east() + ';' + offset.north()), GBC.eol().insets(0, 5, 10, 0));
     320        }
     321        return panel;
     322    }
     323
     324    @Override
     325    protected Action getAdjustAction() {
     326        return adjustAction;
     327    }
    297328
    298329    /**
     
    18821913        return SaveActionBase.createAndOpenSaveFileChooser(tr("Save WMS file"), WMSLayerImporter.FILE_FILTER);
    18831914    }
     1915
     1916    @Override
     1917    public void destroy() {
     1918        super.destroy();
     1919        adjustAction.destroy();
     1920    }
    18841921}
  • trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java

    r10547 r10571  
    1616
    1717import javax.swing.AbstractAction;
     18import javax.swing.Action;
    1819import javax.swing.Icon;
    1920import javax.swing.JCheckBoxMenuItem;
     
    2728
    2829import org.openstreetmap.josm.Main;
    29 import org.openstreetmap.josm.actions.ImageryAdjustAction;
    3030import org.openstreetmap.josm.data.ProjectionBounds;
    3131import org.openstreetmap.josm.data.imagery.ImageryInfo;
     
    3535import org.openstreetmap.josm.gui.MenuScroller;
    3636import org.openstreetmap.josm.gui.layer.imagery.ImageryFilterSettings;
     37import org.openstreetmap.josm.gui.layer.imagery.TileSourceDisplaySettings;
    3738import org.openstreetmap.josm.gui.widgets.UrlLabel;
    3839import org.openstreetmap.josm.tools.GBC;
     
    6162
    6263    protected Icon icon;
    63 
    64     protected double dx;
    65     protected double dy;
    66 
    67     private final ImageryAdjustAction adjustAction = new ImageryAdjustAction(this);
    6864
    6965    private final ImageryFilterSettings filterSettings = new ImageryFilterSettings();
     
    9692    }
    9793
     94    /**
     95     * Gets the x displacement of this layer.
     96     * To be removed end of 2016
     97     * @return The x displacement.
     98     * @deprecated Use {@link TileSourceDisplaySettings#getDx()}
     99     */
     100    @Deprecated
    98101    public double getDx() {
    99         return dx;
    100     }
    101 
     102        // moved to AbstractTileSourceLayer/TileSourceDisplaySettings. Remains until all actions migrate.
     103        return 0;
     104    }
     105
     106    /**
     107     * Gets the y displacement of this layer.
     108     * To be removed end of 2016
     109     * @return The y displacement.
     110     * @deprecated Use {@link TileSourceDisplaySettings#getDy()}
     111     */
     112    @Deprecated
    102113    public double getDy() {
    103         return dy;
     114        // moved to AbstractTileSourceLayer/TileSourceDisplaySettings. Remains until all actions migrate.
     115        return 0;
    104116    }
    105117
    106118    /**
    107119     * Sets the displacement offset of this layer. The layer is automatically invalidated.
     120     * To be removed end of 2016
    108121     * @param dx The x offset
    109122     * @param dy The y offset
    110      */
     123     * @deprecated Use {@link TileSourceDisplaySettings}
     124     */
     125    @Deprecated
    111126    public void setOffset(double dx, double dy) {
    112         this.dx = dx;
    113         this.dy = dy;
    114         invalidate();
    115     }
    116 
     127        // moved to AbstractTileSourceLayer/TileSourceDisplaySettings. Remains until all actions migrate.
     128    }
     129
     130    /**
     131     * To be removed end of 2016
     132     * @param dx deprecated
     133     * @param dy deprecated
     134     * @deprecated Use {@link TileSourceDisplaySettings}
     135     */
     136    @Deprecated
    117137    public void displace(double dx, double dy) {
    118         this.dx += dx;
    119         this.dy += dy;
    120         setOffset(this.dx, this.dy);
     138        // moved to AbstractTileSourceLayer/TileSourceDisplaySettings. Remains until all actions migrate.
    121139    }
    122140
     
    152170                panel.add(new JLabel(tr("URL: ")), GBC.std().insets(0, 5, 2, 0));
    153171                panel.add(new UrlLabel(url), GBC.eol().insets(2, 5, 10, 0));
    154             }
    155             if (dx != 0 || dy != 0) {
    156                 panel.add(new JLabel(tr("Offset: ") + dx + ';' + dy), GBC.eol().insets(0, 5, 10, 0));
    157172            }
    158173        }
     
    216231
    217232    public JComponent getOffsetMenuItem(JComponent subMenu) {
    218         JMenuItem adjustMenuItem = new JMenuItem(adjustAction);
     233        JMenuItem adjustMenuItem = new JMenuItem(getAdjustAction());
    219234        if (OffsetBookmark.allBookmarks.isEmpty()) return adjustMenuItem;
    220235
     
    228243            }
    229244            JCheckBoxMenuItem item = new JCheckBoxMenuItem(new ApplyOffsetAction(b));
    230             if (Utils.equalsEpsilon(b.dx, dx) && Utils.equalsEpsilon(b.dy, dy)) {
     245            if (Utils.equalsEpsilon(b.dx, getDx()) && Utils.equalsEpsilon(b.dy, getDy())) {
    231246                item.setSelected(true);
    232247            }
     
    245260    }
    246261
     262    protected abstract Action getAdjustAction();
     263
    247264    /**
    248265     * Gets the settings for the filter that is applied to this layer.
     
    314331        return img;
    315332    }
    316 
    317     @Override
    318     public void destroy() {
    319         super.destroy();
    320         adjustAction.destroy();
    321     }
    322333}
  • trunk/src/org/openstreetmap/josm/gui/layer/imagery/TileSourceDisplaySettings.java

    r10568 r10571  
    77import org.openstreetmap.gui.jmapviewer.interfaces.TileSource;
    88import org.openstreetmap.josm.Main;
     9import org.openstreetmap.josm.data.coor.EastNorth;
    910import org.openstreetmap.josm.data.preferences.BooleanProperty;
    1011import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
     12import org.openstreetmap.josm.tools.CheckParameterUtil;
     13import org.openstreetmap.josm.tools.bugreport.BugReport;
    1114
    1215/**
     
    3639    private static final String SHOW_ERRORS = "show-errors";
    3740
     41    private static final String DISPLACEMENT = "displacement";
     42
    3843    private static final String PREFERENCE_PREFIX = "imagery.generic";
    3944
     
    4752     */
    4853    public static final BooleanProperty PROP_AUTO_ZOOM = new BooleanProperty(PREFERENCE_PREFIX + ".default_autozoom", true);
     54
    4955
    5056    /** if layers changes automatically, when user zooms in */
     
    5460    /** if layer should show errors on tiles */
    5561    private boolean showErrors;
     62
     63    /**
     64     * The displacement
     65     */
     66    private EastNorth displacement = new EastNorth(0, 0);
    5667
    5768    private final CopyOnWriteArrayList<DisplaySettingsChangeListener> listeners = new CopyOnWriteArrayList<>();
     
    150161
    151162    /**
     163     * Gets the displacement in x (east) direction
     164     * @return The displacement.
     165     * @since 10571
     166     */
     167    public double getDx() {
     168        return displacement.east();
     169    }
     170
     171    /**
     172     * Gets the displacement in y (north) direction
     173     * @return The displacement.
     174     * @since 10571
     175     */
     176    public double getDy() {
     177        return displacement.north();
     178    }
     179
     180    /**
     181     * Gets the displacement of the image
     182     * @return The displacement.
     183     * @since xxx
     184     */
     185    public EastNorth getDisplacement() {
     186        return displacement;
     187    }
     188
     189    /**
     190     * Set the displacement
     191     * @param displacement The new displacement
     192     * @since xxx
     193     */
     194    public void setDisplacement(EastNorth displacement) {
     195        CheckParameterUtil.ensureValidCoordinates(displacement, "displacement");
     196        this.displacement = displacement;
     197        fireSettingsChange(DISPLACEMENT);
     198    }
     199
     200    /**
     201     * Adds the given value to the displacement.
     202     * @param displacement The value to add.
     203     * @since xxx
     204     */
     205    public void addDisplacement(EastNorth displacement) {
     206        CheckParameterUtil.ensureValidCoordinates(displacement, "displacement");
     207        setDisplacement(this.displacement.add(displacement));
     208    }
     209
     210    /**
    152211     * Notifies all listeners that the paint settings have changed
    153212     * @param changedSetting The setting name
     
    185244        data.put(AUTO_ZOOM, Boolean.toString(autoZoom));
    186245        data.put(SHOW_ERRORS, Boolean.toString(showErrors));
     246        data.put("dx", String.valueOf(getDx()));
     247        data.put("dy", String.valueOf(getDy()));
    187248    }
    188249
     
    193254     */
    194255    public void loadFrom(Map<String, String> data) {
    195         String doAutoLoad = data.get(AUTO_LOAD);
    196         if (doAutoLoad != null) {
    197             setAutoLoad(Boolean.parseBoolean(doAutoLoad));
    198         }
    199 
    200         String doAutoZoom = data.get(AUTO_ZOOM);
    201         if (doAutoZoom != null) {
    202             setAutoZoom(Boolean.parseBoolean(doAutoZoom));
    203         }
    204 
    205         String doShowErrors = data.get(SHOW_ERRORS);
    206         if (doShowErrors != null) {
    207             setShowErrors(Boolean.parseBoolean(doShowErrors));
     256        try {
     257            String doAutoLoad = data.get(AUTO_LOAD);
     258            if (doAutoLoad != null) {
     259                setAutoLoad(Boolean.parseBoolean(doAutoLoad));
     260            }
     261
     262            String doAutoZoom = data.get(AUTO_ZOOM);
     263            if (doAutoZoom != null) {
     264                setAutoZoom(Boolean.parseBoolean(doAutoZoom));
     265            }
     266
     267            String doShowErrors = data.get(SHOW_ERRORS);
     268            if (doShowErrors != null) {
     269                setShowErrors(Boolean.parseBoolean(doShowErrors));
     270            }
     271
     272            String dx = data.get("dx");
     273            String dy = data.get("dy");
     274            if (dx != null && dy != null) {
     275                setDisplacement(new EastNorth(Double.parseDouble(dx), Double.parseDouble(dy)));
     276            }
     277        } catch (RuntimeException e) {
     278            throw BugReport.intercept(e).put("data", data);
    208279        }
    209280    }
  • trunk/src/org/openstreetmap/josm/io/session/ImagerySessionImporter.java

    r10568 r10571  
    5454            tsLayer.getDisplaySettings().loadFrom(attributes);
    5555        }
    56         if (attributes.containsKey("dx") && attributes.containsKey("dy")) {
    57             layer.setOffset(Double.parseDouble(attributes.get("dx")), Double.parseDouble(attributes.get("dy")));
    58         }
    5956        return layer;
    6057    }
  • trunk/test/unit/org/openstreetmap/josm/io/session/SessionReaderTest.java

    r10396 r10571  
    1515import org.openstreetmap.josm.Main;
    1616import org.openstreetmap.josm.TestUtils;
     17import org.openstreetmap.josm.gui.layer.AbstractTileSourceLayer;
    1718import org.openstreetmap.josm.gui.layer.GpxLayer;
    1819import org.openstreetmap.josm.gui.layer.ImageryLayer;
     
    125126        assertEquals(layers.size(), 1);
    126127        assertTrue(layers.get(0) instanceof ImageryLayer);
    127         final ImageryLayer image = (ImageryLayer) layers.get(0);
     128        final AbstractTileSourceLayer<?> image = (AbstractTileSourceLayer<?>) layers.get(0);
    128129        assertEquals("Bing aerial imagery", image.getName());
    129         assertEquals(image.getDx(), 12.34, 1e-9);
    130         assertEquals(image.getDy(), -56.78, 1e-9);
     130        assertEquals(image.getDisplaySettings().getDx(), 12.34, 1e-9);
     131        assertEquals(image.getDisplaySettings().getDy(), -56.78, 1e-9);
    131132    }
    132133
  • trunk/test/unit/org/openstreetmap/josm/io/session/SessionWriterTest.java

    r9753 r10571  
    1515import org.junit.Test;
    1616import org.openstreetmap.josm.JOSMFixture;
     17import org.openstreetmap.josm.data.coor.EastNorth;
    1718import org.openstreetmap.josm.data.coor.LatLon;
    1819import org.openstreetmap.josm.data.gpx.GpxData;
     
    136137
    137138    private ImageryLayer createImageryLayer() {
    138         ImageryLayer layer = new TMSLayer(new ImageryInfo("the name", "http://www.url.com/"));
    139         layer.setOffset(12, 34);
     139        TMSLayer layer = new TMSLayer(new ImageryInfo("the name", "http://www.url.com/"));
     140        layer.getDisplaySettings().setDisplacement(new EastNorth(12, 34));
    140141        return layer;
    141142    }
Note: See TracChangeset for help on using the changeset viewer.