Ticket #8549: remove_offset_server.patch
| File remove_offset_server.patch, 13.9 KB (added by , 13 years ago) |
|---|
-
trunk/src/org/openstreetmap/josm/actions/ImageryAdjustAction.java
144 144 if (offsetDialog != null || layer == null || Main.map == null) 145 145 return; 146 146 oldMapMode = Main.map.mapMode; 147 layer.enableOffsetServer(false);148 147 super.actionPerformed(e); 149 148 } 150 149 -
trunk/src/org/openstreetmap/josm/gui/layer/ImageryLayer.java
25 25 import javax.swing.JMenuItem; 26 26 import javax.swing.JPopupMenu; 27 27 import javax.swing.JSeparator; 28 import javax.swing.SwingUtilities;29 28 30 29 import org.openstreetmap.josm.Main; 31 30 import org.openstreetmap.josm.actions.ImageryAdjustAction; 32 31 import org.openstreetmap.josm.data.ProjectionBounds; 33 import org.openstreetmap.josm.data.coor.EastNorth;34 32 import org.openstreetmap.josm.data.imagery.ImageryInfo; 35 33 import org.openstreetmap.josm.data.imagery.ImageryInfo.ImageryType; 36 34 import org.openstreetmap.josm.data.imagery.OffsetBookmark; 37 35 import org.openstreetmap.josm.data.preferences.ColorProperty; 38 36 import org.openstreetmap.josm.data.preferences.IntegerProperty; 39 37 import org.openstreetmap.josm.gui.MenuScroller; 40 import org.openstreetmap.josm.io.imagery.OffsetServer;41 import org.openstreetmap.josm.io.imagery.OsmosnimkiOffsetServer;42 38 import org.openstreetmap.josm.tools.ImageProvider; 43 39 44 40 public abstract class ImageryLayer extends Layer { … … 65 61 66 62 protected int sharpenLevel; 67 63 68 protected boolean offsetServerSupported;69 protected boolean offsetServerUsed;70 protected OffsetServerThread offsetServerThread;71 72 64 private final ImageryAdjustAction adjustAction = new ImageryAdjustAction(this); 73 private final AbstractAction useServerOffsetAction = new AbstractAction(tr("(use server offset)")) {74 @Override75 public void actionPerformed(ActionEvent e) {76 enableOffsetServer(true);77 }78 };79 65 80 protected OffsetServerThread createoffsetServerThread() {81 return new OffsetServerThread(new OsmosnimkiOffsetServer(82 OsmosnimkiOffsetServer.PROP_SERVER_URL.get()));83 }84 85 66 public ImageryLayer(ImageryInfo info) { 86 67 super(info.getName()); 87 68 this.info = info; … … 93 74 icon = ImageProvider.get("imagery_small"); 94 75 } 95 76 this.sharpenLevel = PROP_SHARPEN_LEVEL.get(); 96 if (OffsetServer.PROP_SERVER_ENABLED.get()) {97 offsetServerThread = createoffsetServerThread();98 offsetServerThread.start();99 }100 77 } 101 78 102 79 public double getPPD(){ … … 163 140 @Override 164 141 public void actionPerformed(ActionEvent ev) { 165 142 setOffset(b.dx, b.dy); 166 enableOffsetServer(false);167 143 Main.main.menu.imageryMenu.refreshOffsetMenu(); 168 144 Main.map.repaint(); 169 145 } … … 185 161 } 186 162 } 187 163 188 public void enableOffsetServer(boolean enable) {189 offsetServerUsed = enable;190 if (offsetServerUsed && !offsetServerThread.isAlive()) {191 offsetServerThread = createoffsetServerThread();192 offsetServerThread.start();193 }194 }195 196 164 public JMenuItem getOffsetMenuItem() { 197 165 JMenu subMenu = new JMenu(trc("layer", "Offset")); 198 166 subMenu.setIcon(ImageProvider.get("mapmode", "adjustimg")); … … 201 169 202 170 public JComponent getOffsetMenuItem(JComponent subMenu) { 203 171 JMenuItem adjustMenuItem = new JMenuItem(adjustAction); 204 if (OffsetBookmark.allBookmarks.isEmpty() && !offsetServerSupported) return adjustMenuItem;172 if (OffsetBookmark.allBookmarks.isEmpty()) return adjustMenuItem; 205 173 206 174 subMenu.add(adjustMenuItem); 207 if (offsetServerSupported) {208 JCheckBoxMenuItem item = new JCheckBoxMenuItem(useServerOffsetAction);209 if (offsetServerUsed) {210 item.setSelected(true);211 }212 subMenu.add(item);213 }214 175 subMenu.add(new JSeparator()); 215 176 boolean hasBookmarks = false; 216 177 int menuItemHeight = 0; … … 219 180 continue; 220 181 } 221 182 JCheckBoxMenuItem item = new JCheckBoxMenuItem(new ApplyOffsetAction(b)); 222 if (b.dx == dx && b.dy == dy && !offsetServerUsed) {183 if (b.dx == dx && b.dy == dy) { 223 184 item.setSelected(true); 224 185 } 225 186 subMenu.add(item); … … 234 195 MenuScroller.setScrollerFor((JPopupMenu)subMenu, scrollcount); 235 196 } 236 197 } 237 return (hasBookmarks || offsetServerSupported)? subMenu : adjustMenuItem;198 return hasBookmarks ? subMenu : adjustMenuItem; 238 199 } 239 200 240 201 public BufferedImage sharpenImage(BufferedImage img) { … … 264 225 g.drawString(text, (img.getWidth() + g.getFontMetrics().stringWidth(text)) / 2, img.getHeight()/2); 265 226 } 266 227 267 protected class OffsetServerThread extends Thread {268 OffsetServer offsetServer;269 EastNorth oldCenter = new EastNorth(Double.NaN, Double.NaN);270 271 public OffsetServerThread(OffsetServer offsetServer) {272 this.offsetServer = offsetServer;273 setDaemon(true);274 }275 276 private void updateOffset() {277 if (Main.map == null || Main.map.mapView == null) return;278 EastNorth center = Main.map.mapView.getCenter();279 if (center.equals(oldCenter)) return;280 oldCenter = center;281 282 EastNorth offset = offsetServer.getOffset(getInfo(), center);283 if (offset != null) {284 setOffset(offset.east(),offset.north());285 }286 }287 288 @Override289 public void run() {290 if (!offsetServerSupported) {291 if (!offsetServer.isLayerSupported(info)) return;292 offsetServerSupported = true;293 }294 offsetServerUsed = true;295 SwingUtilities.invokeLater(new Runnable() {296 @Override297 public void run() {298 Main.main.menu.imageryMenu.refreshOffsetMenu();299 }300 });301 try {302 while (offsetServerUsed) {303 updateOffset();304 Thread.sleep(1000);305 }306 } catch (InterruptedException e) {307 }308 offsetServerUsed = false;309 }310 }311 312 228 /* (non-Javadoc) 313 229 * @see org.openstreetmap.josm.gui.layer.Layer#destroy() 314 230 */ -
trunk/src/org/openstreetmap/josm/gui/preferences/imagery/CommonSettingsPanel.java
9 9 import java.awt.event.ActionListener; 10 10 11 11 import javax.swing.JButton; 12 import javax.swing.JCheckBox;13 12 import javax.swing.JColorChooser; 14 13 import javax.swing.JLabel; 15 14 import javax.swing.JOptionPane; 16 15 import javax.swing.JPanel; 17 16 import javax.swing.JSlider; 18 import javax.swing.JTextField;19 import javax.swing.event.ChangeEvent;20 import javax.swing.event.ChangeListener;21 17 22 18 import org.openstreetmap.josm.gui.layer.ImageryLayer; 23 19 import org.openstreetmap.josm.gui.widgets.JosmComboBox; 24 import org.openstreetmap.josm.io.imagery.OffsetServer;25 import org.openstreetmap.josm.io.imagery.OsmosnimkiOffsetServer;26 20 import org.openstreetmap.josm.tools.ColorHelper; 27 21 import org.openstreetmap.josm.tools.GBC; 28 22 … … 36 30 private final JButton btnFadeColor; 37 31 private final JSlider fadeAmount = new JSlider(0, 100); 38 32 private final JosmComboBox sharpen; 39 private final JCheckBox useOffsetServer;40 private final JTextField offsetServerUrl;41 33 42 34 /** 43 35 * Constructs a new {@code CommonSettingsPanel}. … … 79 71 add(new JLabel(tr("Sharpen (requires layer re-add): "))); 80 72 add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL)); 81 73 add(this.sharpen, GBC.eol().fill(GBC.HORIZONTAL)); 82 83 this.useOffsetServer = new JCheckBox(tr("Use offset server: "));84 this.offsetServerUrl = new JTextField();85 this.useOffsetServer.addChangeListener(new ChangeListener() {86 @Override87 public void stateChanged(ChangeEvent e) {88 offsetServerUrl.setEnabled(useOffsetServer.isSelected());89 }90 });91 offsetServerUrl.setEnabled(useOffsetServer.isSelected());92 add(this.useOffsetServer, GBC.eol().fill(GBC.HORIZONTAL));93 add(this.offsetServerUrl, GBC.eol().fill(GBC.HORIZONTAL));94 74 } 95 75 96 76 /** … … 102 82 this.btnFadeColor.setText(ColorHelper.color2html(colFadeColor)); 103 83 this.fadeAmount.setValue(ImageryLayer.PROP_FADE_AMOUNT.get()); 104 84 this.sharpen.setSelectedIndex(Math.max(0, Math.min(2, ImageryLayer.PROP_SHARPEN_LEVEL.get()))); 105 this.useOffsetServer.setSelected(OffsetServer.PROP_SERVER_ENABLED.get());106 this.offsetServerUrl.setText(OsmosnimkiOffsetServer.PROP_SERVER_URL.get());107 85 } 108 86 109 87 /** … … 111 89 * @return true when restart is required 112 90 */ 113 91 public boolean saveSettings() { 114 OffsetServer.PROP_SERVER_ENABLED.put(useOffsetServer.isSelected());115 OsmosnimkiOffsetServer.PROP_SERVER_URL.put(offsetServerUrl.getText());116 117 92 ImageryLayer.PROP_FADE_AMOUNT.put(this.fadeAmount.getValue()); 118 93 ImageryLayer.PROP_FADE_COLOR.put(this.btnFadeColor.getBackground()); 119 94 ImageryLayer.PROP_SHARPEN_LEVEL.put(sharpen.getSelectedIndex()); -
trunk/src/org/openstreetmap/josm/io/imagery/OffsetServer.java
1 // License: GPL. For details, see LICENSE file.2 package org.openstreetmap.josm.io.imagery;3 4 import org.openstreetmap.josm.data.coor.EastNorth;5 import org.openstreetmap.josm.data.imagery.ImageryInfo;6 import org.openstreetmap.josm.data.preferences.BooleanProperty;7 8 public interface OffsetServer {9 public static BooleanProperty PROP_SERVER_ENABLED = new BooleanProperty("imagery.offsetserver.enabled",false);10 abstract boolean isLayerSupported(ImageryInfo info);11 abstract EastNorth getOffset(ImageryInfo info, EastNorth en);12 } -
trunk/src/org/openstreetmap/josm/io/imagery/OsmosnimkiOffsetServer.java
1 // License: GPL. For details, see LICENSE file.2 package org.openstreetmap.josm.io.imagery;3 4 import static org.openstreetmap.josm.tools.I18n.tr;5 6 import java.io.BufferedReader;7 import java.io.InputStreamReader;8 import java.net.URL;9 import java.net.URLEncoder;10 11 import org.openstreetmap.josm.Main;12 import org.openstreetmap.josm.data.coor.EastNorth;13 import org.openstreetmap.josm.data.coor.LatLon;14 import org.openstreetmap.josm.data.imagery.ImageryInfo;15 import org.openstreetmap.josm.data.preferences.StringProperty;16 import org.openstreetmap.josm.tools.Utils;17 18 public class OsmosnimkiOffsetServer implements OffsetServer {19 public static final StringProperty PROP_SERVER_URL = new StringProperty("imagery.offsetserver.url","http://offset.osmosnimki.ru/offset/v0?");20 private String url;21 22 public OsmosnimkiOffsetServer(String url) {23 this.url = url;24 }25 26 @Override27 public boolean isLayerSupported(ImageryInfo info) {28 try {29 URL url = new URL(this.url + "action=CheckAvailability&id=" + URLEncoder.encode(info.getUrl(), "UTF-8"));30 System.out.println(tr("Querying offset availability: {0}", url));31 final BufferedReader rdr = new BufferedReader(new InputStreamReader(Utils.openHttpConnection(url).getInputStream(), "UTF-8"));32 String response = rdr.readLine();33 System.out.println(tr("Offset server response: {0}", response));34 if (response == null)35 return false;36 if (response.contains("\"offsets_available\": true")) return true;37 } catch (Exception e) {38 e.printStackTrace();39 }40 return false;41 }42 43 @Override44 public EastNorth getOffset(ImageryInfo info, EastNorth en) {45 LatLon ll = Main.getProjection().eastNorth2latlon(en);46 try {47 URL url = new URL(this.url + "action=GetOffsetForPoint&lat=" + ll.lat() + "&lon=" + ll.lon() + "&id=" + URLEncoder.encode(info.getUrl(), "UTF-8"));48 System.out.println(tr("Querying offset: {0}", url.toString()));49 final BufferedReader rdr = new BufferedReader(new InputStreamReader(Utils.openHttpConnection(url).getInputStream(), "UTF-8"));50 String s = rdr.readLine();51 if (s == null)52 return null;53 int i = s.indexOf(',');54 if (i == -1) return null;55 String sLon = s.substring(1,i);56 String sLat = s.substring(i+1,s.length()-1);57 return Main.getProjection().latlon2eastNorth(new LatLon(Double.valueOf(sLat),Double.valueOf(sLon))).sub(en);58 } catch (Exception e) {59 e.printStackTrace();60 return null;61 }62 }63 64 }
