Changeset 3847 in josm


Ignore:
Timestamp:
2011-02-02T19:43:23+01:00 (14 years ago)
Author:
Upliner
Message:

Initial support for Komzpa's osmosnimki imagery offset server

Location:
trunk/src/org/openstreetmap/josm
Files:
2 added
3 edited

Legend:

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

    r3780 r3847  
    146146            return;
    147147        oldMapMode = Main.map.mapMode;
     148        layer.enableOffsetServer(false);
    148149        super.actionPerformed(e);
    149150    }
  • trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java

    r3808 r3847  
    2323import javax.swing.JMenuItem;
    2424import javax.swing.JSeparator;
     25import javax.swing.SwingUtilities;
    2526
    2627import org.openstreetmap.josm.Main;
    2728import org.openstreetmap.josm.actions.ImageryAdjustAction;
    2829import org.openstreetmap.josm.data.ProjectionBounds;
     30import org.openstreetmap.josm.data.coor.EastNorth;
    2931import org.openstreetmap.josm.data.imagery.ImageryInfo;
    3032import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    3133import org.openstreetmap.josm.data.imagery.OffsetBookmark;
    3234import org.openstreetmap.josm.data.preferences.IntegerProperty;
     35import org.openstreetmap.josm.io.imagery.OffsetServer;
     36import org.openstreetmap.josm.io.imagery.OsmosnimkiOffsetServer;
    3337import org.openstreetmap.josm.tools.ImageProvider;
    3438
     
    5862
    5963    protected int sharpenLevel;
     64
     65    protected boolean offsetServerSupported;
     66    protected boolean offsetServerUsed;
     67    protected OffsetServerThread offsetServerThread;
     68
     69    protected OffsetServerThread createoffsetServerThread() {
     70        return new OffsetServerThread(new OsmosnimkiOffsetServer(
     71                OsmosnimkiOffsetServer.PROP_SERVER_URL.get()));
     72    }
    6073
    6174    public ImageryLayer(ImageryInfo info) {
     
    6376        this.info = info;
    6477        this.sharpenLevel = PROP_SHARPEN_LEVEL.get();
     78        if (OffsetServer.PROP_SERVER_ENABLED.get()) {
     79            offsetServerThread = createoffsetServerThread();
     80            offsetServerThread.start();
     81        }
    6582    }
    6683
     
    129146        public void actionPerformed(ActionEvent ev) {
    130147            setOffset(b.dx, b.dy);
     148            enableOffsetServer(false);
    131149            Main.main.menu.imageryMenu.refreshOffsetMenu();
    132150            Main.map.repaint();
     
    151169
    152170    ImageryAdjustAction adjustAction = new ImageryAdjustAction(this);
     171    AbstractAction useServerOffsetAction = new AbstractAction(tr("(use server offset)")) {
     172        @Override
     173        public void actionPerformed(ActionEvent e) {
     174            enableOffsetServer(true);
     175        }
     176    };
     177
     178    public void enableOffsetServer(boolean enable) {
     179        offsetServerUsed = enable;
     180        if (offsetServerUsed && !offsetServerThread.isAlive()) {
     181            offsetServerThread = createoffsetServerThread();
     182            offsetServerThread.start();
     183        }
     184    }
    153185
    154186    public JMenuItem getOffsetMenuItem() {
     
    160192    public JComponent getOffsetMenuItem(JComponent subMenu) {
    161193        JMenuItem adjustMenuItem = new JMenuItem(adjustAction);
    162         if (OffsetBookmark.allBookmarks.isEmpty()) return adjustMenuItem;
     194        if (OffsetBookmark.allBookmarks.isEmpty() && !offsetServerSupported) return adjustMenuItem;
    163195
    164196        subMenu.add(adjustMenuItem);
     197        if (offsetServerSupported) {
     198            JCheckBoxMenuItem item = new JCheckBoxMenuItem(useServerOffsetAction);
     199            if (offsetServerUsed) {
     200                item.setSelected(true);
     201            }
     202            subMenu.add(item);
     203        }
    165204        subMenu.add(new JSeparator());
    166205        boolean hasBookmarks = false;
     
    170209            }
    171210            JCheckBoxMenuItem item = new JCheckBoxMenuItem(new ApplyOffsetAction(b));
    172             if (b.dx == dx && b.dy == dy) {
     211            if (b.dx == dx && b.dy == dy && !offsetServerUsed) {
    173212                item.setSelected(true);
    174213            }
     
    176215            hasBookmarks = true;
    177216        }
    178         return hasBookmarks ? subMenu : adjustMenuItem;
     217        return (hasBookmarks || offsetServerSupported) ? subMenu : adjustMenuItem;
    179218    }
    180219
     
    205244        g.drawString(text, (img.getWidth() + g.getFontMetrics().stringWidth(text)) / 2, img.getHeight()/2);
    206245    }
     246
     247    protected class OffsetServerThread extends Thread {
     248        OffsetServer offsetServer;
     249        EastNorth oldCenter = new EastNorth(Double.NaN, Double.NaN);
     250
     251        public OffsetServerThread(OffsetServer offsetServer) {
     252            this.offsetServer = offsetServer;
     253            setDaemon(true);
     254        }
     255
     256        private void updateOffset() {
     257            if (Main.map == null || Main.map.mapView == null) return;
     258            EastNorth center = Main.map.mapView.getCenter();
     259            if (center.equals(oldCenter)) return;
     260            oldCenter = center;
     261
     262            EastNorth offset = offsetServer.getOffset(getInfo(), center);
     263            if (offset != null) {
     264                setOffset(offset.east(),offset.north());
     265            }
     266        }
     267
     268        @Override
     269        public void run() {
     270            if (!offsetServerSupported) {
     271                if (!offsetServer.isLayerSupported(getInfo())) return;
     272                offsetServerSupported = true;
     273            }
     274            offsetServerUsed = true;
     275            SwingUtilities.invokeLater(new Runnable() {
     276                @Override
     277                public void run() {
     278                    Main.main.menu.imageryMenu.refreshOffsetMenu();
     279                }
     280            });
     281            try {
     282                while (offsetServerUsed) {
     283                    updateOffset();
     284                    Thread.sleep(1000);
     285                }
     286            } catch (InterruptedException e) {
     287            }
     288            offsetServerUsed = false;
     289        }
     290    }
    207291}
  • trunk/src/org/openstreetmap/josm/gui/preferences/ImageryPreference.java

    r3826 r3847  
    4141import javax.swing.JToolBar;
    4242import javax.swing.SpinnerNumberModel;
     43import javax.swing.event.ChangeEvent;
     44import javax.swing.event.ChangeListener;
    4345import javax.swing.event.ListSelectionEvent;
    4446import javax.swing.event.ListSelectionListener;
     
    4850import org.openstreetmap.josm.Main;
    4951import org.openstreetmap.josm.data.imagery.ImageryInfo;
     52import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    5053import org.openstreetmap.josm.data.imagery.ImageryLayerInfo;
    5154import org.openstreetmap.josm.data.imagery.OffsetBookmark;
    52 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType;
    5355import org.openstreetmap.josm.gui.layer.ImageryLayer;
    5456import org.openstreetmap.josm.gui.layer.TMSLayer;
    5557import org.openstreetmap.josm.gui.layer.WMSLayer;
    5658import org.openstreetmap.josm.io.imagery.HTMLGrabber;
     59import org.openstreetmap.josm.io.imagery.OffsetServer;
     60import org.openstreetmap.josm.io.imagery.OsmosnimkiOffsetServer;
    5761import org.openstreetmap.josm.tools.ColorHelper;
    5862import org.openstreetmap.josm.tools.GBC;
     
    7579    private JSlider fadeAmount = new JSlider(0, 100);
    7680    private JComboBox sharpen;
     81    private JCheckBox useOffsetServer;
     82    private JTextField offsetServerUrl;
    7783
    7884    // WMS Settings
     
    147153            p.add(btnSettingsMigration,GBC.eol().insets(0,5,0,5));
    148154        }
     155        this.useOffsetServer = new JCheckBox(tr("Use offset server: "));
     156        this.offsetServerUrl = new JTextField();
     157        this.useOffsetServer.addChangeListener(new ChangeListener() {
     158            @Override
     159            public void stateChanged(ChangeEvent e) {
     160                offsetServerUrl.setEnabled(useOffsetServer.isSelected());
     161            }
     162        });
     163        offsetServerUrl.setEnabled(useOffsetServer.isSelected());
     164        p.add(this.useOffsetServer, GBC.eol().fill(GBC.HORIZONTAL));
     165        p.add(this.offsetServerUrl, GBC.eol().fill(GBC.HORIZONTAL));
    149166        return p;
    150167    }
     
    269286        this.fadeAmount.setValue(ImageryLayer.PROP_FADE_AMOUNT.get());
    270287        this.sharpen.setSelectedIndex(Math.max(0, Math.min(2, ImageryLayer.PROP_SHARPEN_LEVEL.get())));
     288        this.useOffsetServer.setSelected(OffsetServer.PROP_SERVER_ENABLED.get());
     289        this.offsetServerUrl.setText(OsmosnimkiOffsetServer.PROP_SERVER_URL.get());
    271290
    272291        // WMS Settings
     
    300319
    301320        HTMLGrabber.PROP_BROWSER.put(browser.getEditor().getItem().toString());
     321        OffsetServer.PROP_SERVER_ENABLED.put(useOffsetServer.isSelected());
     322        OsmosnimkiOffsetServer.PROP_SERVER_URL.put(offsetServerUrl.getText());
    302323
    303324        if (TMSLayer.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get() != this.addToSlippyMapChosser.isSelected()) {
Note: See TracChangeset for help on using the changeset viewer.