This is an automated email from the git hooks/post-receive script. sebastic-guest pushed a commit to branch master in repository josm-plugins.
commit 2d3e40973c8d066ce908852bdf92201b4a845413 Author: David Paleino <da...@debian.org> Date: Wed Dec 8 19:45:03 2010 +0100 Imported Upstream version 0.0.svn24632 --- editgpx/build.xml | 8 +- imagery/sources.cfg | 69 ----- .../josm/plugins/imagery/ImageryLayer.java | 134 +++++++- .../josm/plugins/imagery/ImageryLayerInfo.java | 5 + .../josm/plugins/imagery/ImageryPlugin.java | 7 +- .../plugins/imagery/ImageryPreferenceEditor.java | 337 +++------------------ .../josm/plugins/imagery/ImageryPreferences.java | 6 +- .../plugins/imagery/ImageryProvidersPanel.java | 218 ++++--------- .../josm/plugins/imagery/OffsetBookmark.java | 75 +++++ .../josm/plugins/imagery/OffsetBookmarksPanel.java | 155 ++++++++++ .../josm/plugins/imagery/tms/TMSLayer.java | 24 +- .../josm/plugins/imagery/tms/TMSPreferences.java | 17 ++ .../josm/plugins/imagery/tms/TMSTileSource.java | 2 +- .../plugins/imagery/tms/TMSTileSourceProvider.java | 41 +++ .../josm/plugins/imagery/wms/GeorefImage.java | 1 + .../josm/plugins/imagery/wms/HTMLGrabber.java | 4 +- .../josm/plugins/imagery/wms/WMSAdapter.java | 10 +- .../josm/plugins/imagery/wms/WMSGrabber.java | 12 +- .../josm/plugins/imagery/wms/WMSLayer.java | 11 +- svn-info.xml | 8 +- wmsplugin/src/wmsplugin/WMSPreferenceEditor.java | 2 + wmsplugin/webkit-image.cpp | 6 +- 22 files changed, 579 insertions(+), 573 deletions(-) diff --git a/editgpx/build.xml b/editgpx/build.xml index 2801816..0810b6a 100644 --- a/editgpx/build.xml +++ b/editgpx/build.xml @@ -31,10 +31,8 @@ <property name="plugin.main.version" value="3408" /> - <!-- <property name="josm" location="../../core/dist/josm-custom.jar"/> --> - <property name="josm" location="../JOSM/dist/josm-custom.jar"/> - <!-- <property name="plugin.dist.dir" value="../../dist"/>--> - <property name="plugin.dist.dir" value=".."/> + <property name="josm" location="../../core/dist/josm-custom.jar"/> + <property name="plugin.dist.dir" value="../../dist"/> <property name="plugin.build.dir" value="build"/> <property name="plugin.jar" value="${plugin.dist.dir}/${ant.project.name}.jar"/> <property name="ant.build.javac.target" value="1.5"/> @@ -58,7 +56,7 @@ <attribute name="Plugin-Class" value="org.openstreetmap.josm.plugins.editgpx.EditGpxPlugin" /> <attribute name="Plugin-Date" value="${version.entry.commit.date}"/> <attribute name="Plugin-Description" value="Allows the user to anonymize timestamps and delete parts of huge GPX tracks very fast." /> - <attribute name="Plugin-Icon" value="images/mapmode/editgpx_mode.png"/> + <attribute name="Plugin-Icon" value="images/mapmode/editgpx_mode.png"/> <attribute name="Plugin-Link" value="http://wiki.openstreetmap.org/wiki/JOSM/Plugins/EditGpx" /> <attribute name="Plugin-Mainversion" value="${plugin.main.version}" /> <attribute name="Plugin-Version" value="${version.entry.commit.revision}"/> diff --git a/imagery/sources.cfg b/imagery/sources.cfg deleted file mode 100644 index 3fd66c2..0000000 --- a/imagery/sources.cfg +++ /dev/null @@ -1,69 +0,0 @@ -# OUTDATED - only for old plugins -# See http://josm.openstreetmap.de/wiki/Maps for newer data. -# -# FORMAT -# default(true or false);Name;URL -# NOTE: default items should be common and worldwide -# -true;Landsat;wms:http://onearth.jpl.nasa.gov/wms.cgi?request=GetMap&layers=global_mosaic&styles=&format=image/jpeg& -true;Landsat (mirror);wms:http://irs.gis-lab.info/?layers=landsat& -false;Open Aerial Map;wms:http://openaerialmap.org/wms/?VERSION=1.0&request=GetMap&layers=world&styles=&format=image/jpeg& -# -# different forms of imagery -true;Bing sat;bing:bing -true;Yahoo Sat;html:http://josm.openstreetmap.de/wmsplugin/YahooDirect.html? -true;OpenStreetMap;tms:http://tile.openstreetmap.org/ -false;OpenCycleMap;tms:http://tile.opencyclemap.org/cycle/ -false;TilesAtHome;tms:http://tah.openstreetmap.org/Tiles/tile/ -# -# -# only for Germany -false;Streets NRW Geofabrik.de;wms:http://tools.geofabrik.de/osmi/view/strassennrw/josmwms? -# -# -# only for North America -# Terraserver USCG - High resolution maps -false;Terraserver Topo;wms:http://terraservice.net/ogcmap.ashx?version=1.1.1&request=GetMap&Layers=drg&styles=&format=image/jpeg& -false;Terraserver Urban;wms:http://terraservice.net/ogcmap.ashx?version=1.1.1&request=GetMap&Layers=urbanarea&styles=&format=image/jpeg& -# -# -# only for Czech Republic -false;Czech CUZK:KM;wms:http://wms.cuzk.cz/wms.asp?service=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&LAYERS=parcelni_cisla_i,obrazy_parcel_i,RST_KMD_I,hranice_parcel_i,DEF_BUDOVY,RST_KN_I,dalsi_p_mapy_i,prehledka_kat_prac,prehledka_kat_uz,prehledka_kraju-linie&FORMAT=image/png&transparent=TRUE& -false;Czech UHUL:ORTOFOTO;wms:http://geoportal2.uhul.cz/cgi-bin/oprl.asp?SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&LAYERS=Ortofoto_cb&STYLES=default&FORMAT=image/jpeg&TRANSPARENT=TRUE& -# -# -# only for GB -# fails with division by zero error -false;NPE Maps;wms:http://nick.dev.openstreetmap.org/openpaths/freemap.php?layers=npe& -false;NPE Maps (Tim);wms:http://dev.openstreetmap.org/~timsc/wms2/map.php? -false;7th Series (OS7);wms:http://ooc.openstreetmap.org/wms/map.php?source=os7& -# -# -# only for Japan -false;MLIT Japan (ORTHO);wms:http://orthophoto.mlit.go.jp:8888/wms/service/wmsRasterTileMap?VERSION=1.3.0&REQUEST=GetMap&LAYERS=ORTHO&STYLES=Default&CRS=EPSG:4612&BBOX={s},{w},{n},{e}&WIDTH={width}&HEIGHT={height}&FORMAT=image/png&BGCOLOR=OxFFFFFF -false;MLIT Japan (ORTHO01);wms:http://orthophoto.mlit.go.jp:8888/wms/service/wmsRasterTileMap?VERSION=1.3.0&REQUEST=GetMap&LAYERS=ORTHO01&STYLES=Default&CRS=EPSG:4612&BBOX={s},{w},{n},{e}&WIDTH={width}&HEIGHT={height}&FORMAT=image/png&BGCOLOR=OxFFFFFF -false;MLIT Japan (ORTHO02);wms:http://orthophoto.mlit.go.jp:8888/wms/service/wmsRasterTileMap?VERSION=1.3.0&REQUEST=GetMap&LAYERS=ORTHO02&STYLES=Default&CRS=EPSG:4612&BBOX={s},{w},{n},{e}&WIDTH={width}&HEIGHT={height}&FORMAT=image/png&BGCOLOR=OxFFFFFF -false;MLIT Japan (ORTHO03);wms:http://orthophoto.mlit.go.jp:8888/wms/service/wmsRasterTileMap?VERSION=1.3.0&REQUEST=GetMap&LAYERS=ORTHO03&STYLES=Default&CRS=EPSG:4612&BBOX={s},{w},{n},{e}&WIDTH={width}&HEIGHT={height}&FORMAT=image/png&BGCOLOR=OxFFFFFF -# -# -# only for Italy -false;Lodi - Italy;wms:http://sit.provincia.lodi.it/mapserver/mapserv.exe?map=ortofoto_wgs84.map&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap&SRS=EPSG:4326&LAYERS=Terraitaly%20Ortofoto%202007&STYLES=%2C%2C&FORMAT=image/png&TRANSPARENT=TRUE& -false;Sicily - Italy;wms:http://88.53.214.52/sitr/services/WGS84_F33/Ortofoto_ATA20072008_f33/MapServer/WMSServer?SERVICE=WMS&VERSION=1.3.0&REQUEST=GetMap&CRS=CRS:84&LAYERS=0&STYLES=default&FORMAT=image/jpeg& -false;PCN 2006 - Italy;wms:http://wms.pcn.minambiente.it/cgi-bin/mapserv.exe?map=/ms_ogc/service/ortofoto_colore_06.map&LAYERS=ortofoto_colore_06_32,ortofoto_colore_06_33&REQUEST=GetMap&VERSION=1.1.1&FORMAT=image%2Fjpeg& -# -# only for France -false;SPOTMaps (France);wms:http://spotmaps.youmapps.org/cgi-bin/mapserv?map=/home/ortho/ortho.map&service=wms&version=1.1.1&srs=EPSG:4326&request=GetMap&layers=spotmaps4osm&format=image/jpeg&FORMAT=image/jpeg&VERSION=1.1.1&SERVICE=WMS&REQUEST=GetMap&Layers=demo&;http://www.youmapps.org/licenses/EULA-OSM-J-{lang}.html -# -# -# URLS must be designed to append arguments directly behind. So the URLS should either end with '?' or '&' -# Following arguments are added: width, height, bbox, srs (projection method) -# srs is only added when no srs is given already (In this case the projection is checked -# and an error is issued when they mismatch). -# -# If more specific URL design is needed, then patterns are supported as well. If -# patterns are found no other arguments are added: -# {proj} is replaced by projection -# {bbox} is replaced by bounding box using projected coordinates -# {width} is requested display width -# {height} is requested display height -# {w},{s},{n},{e} are replaced by corresponding coordinates diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayer.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayer.java index 3187256..39a6241 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayer.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayer.java @@ -1,9 +1,28 @@ package org.openstreetmap.josm.plugins.imagery; -import java.awt.Toolkit; +import static org.openstreetmap.josm.tools.I18n.tr; +import static org.openstreetmap.josm.tools.I18n.trc; +import java.awt.Component; +import java.awt.GridBagLayout; +import java.awt.Toolkit; +import java.awt.event.ActionEvent; +import java.awt.image.BufferedImage; +import java.awt.image.BufferedImageOp; +import java.awt.image.ConvolveOp; +import java.awt.image.Kernel; +import java.util.List; + +import javax.swing.AbstractAction; +import javax.swing.Action; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.JCheckBoxMenuItem; +import javax.swing.JLabel; +import javax.swing.JMenu; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JTextField; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.data.ProjectionBounds; @@ -12,34 +31,33 @@ import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; import org.openstreetmap.josm.plugins.imagery.tms.TMSLayer; import org.openstreetmap.josm.plugins.imagery.wms.WMSLayer; +import org.openstreetmap.josm.tools.GBC; +import org.openstreetmap.josm.tools.ImageProvider; public abstract class ImageryLayer extends Layer { protected static final Icon icon = new ImageIcon(Toolkit.getDefaultToolkit().createImage(ImageryPlugin.class.getResource("/images/imagery_small.png"))); - protected ImageryInfo info; + protected final ImageryInfo info; protected MapView mv; protected double dx = 0.0; protected double dy = 0.0; + protected int sharpenLevel; + public ImageryLayer(ImageryInfo info) { super(info.getName()); this.info = info; this.mv = Main.map.mapView; + this.sharpenLevel = ImageryPreferences.PROP_SHARPEN_LEVEL.get(); } - public double getPPD(){ ProjectionBounds bounds = mv.getProjectionBounds(); return mv.getWidth() / (bounds.max.east() - bounds.min.east()); } - public void displace(double dx, double dy) { - this.dx += dx; - this.dy += dy; - } - public double getDx() { return dx; } @@ -48,6 +66,15 @@ public abstract class ImageryLayer extends Layer { return dy; } + public void setOffset(double dx, double dy) { + this.dx = dx; + this.dy = dy; + } + + public void displace(double dx, double dy) { + setOffset(this.dx += dx, this.dy += dy); + } + public ImageryInfo getInfo() { return info; } @@ -78,4 +105,95 @@ public abstract class ImageryLayer extends Layer { return new TMSLayer(info); } else throw new AssertionError(); } + + class ApplyOffsetAction extends AbstractAction { + private OffsetBookmark b; + ApplyOffsetAction(OffsetBookmark b) { + super(b.name); + this.b = b; + } + + @Override + public void actionPerformed(ActionEvent arg0) { + setOffset(b.dx, b.dy); + Main.map.repaint(); + } + } + + class NewBookmarkAction extends AbstractAction { + private class BookmarkNamePanel extends JPanel { + public JTextField text = new JTextField(); + public BookmarkNamePanel() { + super(new GridBagLayout()); + add(new JLabel(tr("Bookmark name: ")),GBC.eol()); + add(text,GBC.eol().fill(GBC.HORIZONTAL)); + } + } + public NewBookmarkAction() { + super(tr("(save current)")); + } + @Override + public void actionPerformed(ActionEvent arg0) { + BookmarkNamePanel p = new BookmarkNamePanel(); + int answer = JOptionPane.showConfirmDialog( + Main.parent, p, + tr("Add offset bookmark"), + JOptionPane.OK_CANCEL_OPTION); + if (answer == JOptionPane.OK_OPTION) { + OffsetBookmark b = + new OffsetBookmark(Main.proj,info.getName(),p.text.getText(),getDx(),getDy()); + OffsetBookmark.allBookmarks.add(b); + OffsetBookmark.saveBookmarks(); + } + } + } + + class OffsetAction extends AbstractAction implements LayerAction { + @Override + public void actionPerformed(ActionEvent e) { + } + @Override + public Component createMenuComponent() { + JMenu menu = new JMenu(trc("layer", "Offset")); + menu.setIcon(ImageProvider.get("mapmode", "adjustimg")); + boolean haveCurrent = false; + for (OffsetBookmark b : OffsetBookmark.allBookmarks) { + if (!b.isUsable(ImageryLayer.this)) continue; + JCheckBoxMenuItem item = new JCheckBoxMenuItem(new ApplyOffsetAction(b)); + if (b.dx == dx && b.dy == dy) { + item.setSelected(true); + haveCurrent = true; + } + menu.add(item); + } + if (!haveCurrent) { + menu.insert(new NewBookmarkAction(), 0); + } + return menu; + } + @Override + public boolean supportLayers(List<Layer> layers) { + return false; + } + } + + public Action getOffsetAction() { + return new OffsetAction(); + } + + public BufferedImage sharpenImage(BufferedImage img) { + if (sharpenLevel <= 0) return img; + int width = img.getWidth(null); + int height = img.getHeight(null); + BufferedImage tmp = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB); + tmp.getGraphics().drawImage(img, 0, 0, null); + Kernel kernel; + if (sharpenLevel == 1) { + kernel = new Kernel(2, 2, new float[] { 4, -1, -1, -1}); + } else { + kernel = new Kernel(3, 3, new float[] { -1, -1, -1, -1, 9, -1, -1, -1, -1}); + } + BufferedImageOp op = new ConvolveOp(kernel, ConvolveOp.EDGE_NO_OP, null); + return op.filter(tmp, null); + } } diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayerInfo.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayerInfo.java index a648566..83147d4 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayerInfo.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryLayerInfo.java @@ -11,6 +11,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; +import java.util.List; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.io.MirroredInputStream; @@ -101,4 +102,8 @@ public class ImageryLayerInfo { } Main.pref.putArray("imagery.layers", coll); } + + public List<ImageryInfo> getLayers() { + return Collections.unmodifiableList(layers); + } } diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPlugin.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPlugin.java index 393a8be..8204b13 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPlugin.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPlugin.java @@ -20,11 +20,13 @@ import org.openstreetmap.josm.actions.JosmAction; import org.openstreetmap.josm.gui.IconToggleButton; import org.openstreetmap.josm.gui.MainMenu; import org.openstreetmap.josm.gui.MapFrame; +import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser; import org.openstreetmap.josm.gui.preferences.PreferenceSetting; import org.openstreetmap.josm.plugins.Plugin; import org.openstreetmap.josm.plugins.PluginHandler; import org.openstreetmap.josm.plugins.PluginInformation; import org.openstreetmap.josm.plugins.PluginProxy; +import org.openstreetmap.josm.plugins.imagery.tms.TMSTileSourceProvider; import org.openstreetmap.josm.plugins.imagery.wms.Map_Rectifier_WMSmenuAction; import org.openstreetmap.josm.plugins.imagery.wms.WMSAdapter; import org.openstreetmap.josm.plugins.imagery.wms.WMSLayer; @@ -39,7 +41,6 @@ public class ImageryPlugin extends Plugin { public static WMSAdapter wmsAdapter = new WMSAdapter(); public ImageryLayerInfo info = new ImageryLayerInfo(); - // remember state of menu item to restore on changed preferences private boolean menuEnabled = false; @@ -57,7 +58,7 @@ public class ImageryPlugin extends Plugin { /** RemoteControlPlugin older than this SVN revision is not compatible */ final int REMOTECONTROL_MIN_REVISION = 22734; - /** WMSPlugin needs this specific API major version of RemoteControlPlugin */ + /** Imagery Plugin needs this specific API major version of RemoteControlPlugin */ final int REMOTECONTROL_NEED_API_MAJOR = 1; /** All API minor versions starting from this should be compatible */ final int REMOTECONTROL_MIN_API_MINOR = 0; @@ -204,8 +205,10 @@ public class ImageryPlugin extends Plugin { super(info); instance = this; this.info.load(); + OffsetBookmark.loadBookmarks(); refreshMenu(); initRemoteControl(); + SlippyMapBBoxChooser.addTileSourceProvider(new TMSTileSourceProvider()); } public void addLayer(ImageryInfo info) { diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferenceEditor.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferenceEditor.java index 92e1a43..2c99c48 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferenceEditor.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferenceEditor.java @@ -1,22 +1,14 @@ package org.openstreetmap.josm.plugins.imagery; import static org.openstreetmap.josm.tools.I18n.tr; -import static org.openstreetmap.josm.tools.I18n.trc; import java.awt.Color; import java.awt.Component; -import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Font; -import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; -import java.awt.event.MouseEvent; -import java.io.IOException; -import java.net.MalformedURLException; -import java.net.URL; -import java.util.Locale; import javax.swing.BorderFactory; import javax.swing.Box; @@ -24,7 +16,6 @@ import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JColorChooser; import javax.swing.JComboBox; -import javax.swing.JEditorPane; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; @@ -33,165 +24,43 @@ import javax.swing.JSeparator; import javax.swing.JSlider; import javax.swing.JSpinner; import javax.swing.JTabbedPane; -import javax.swing.JTable; import javax.swing.SpinnerNumberModel; -import javax.swing.table.DefaultTableModel; -import javax.swing.table.TableColumnModel; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.preferences.PreferenceSetting; import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; -import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; import org.openstreetmap.josm.plugins.imagery.tms.TMSPreferences; -import org.openstreetmap.josm.plugins.imagery.wms.AddWMSLayerPanel; import org.openstreetmap.josm.plugins.imagery.wms.WMSAdapter; import org.openstreetmap.josm.tools.ColorHelper; import org.openstreetmap.josm.tools.GBC; public class ImageryPreferenceEditor implements PreferenceSetting { - private ImageryLayerTableModel model; - private JComboBox browser; + ImageryProvidersPanel imageryProviders; + + WMSAdapter wmsAdapter = ImageryPlugin.wmsAdapter; + ImageryPlugin plugin = ImageryPlugin.instance; // Common settings private Color colFadeColor; private JButton btnFadeColor; private JSlider fadeAmount = new JSlider(0, 100); private JCheckBox remoteCheckBox; - boolean allowRemoteControl = true; + private JComboBox sharpen; + private boolean allowRemoteControl = true; // WMS Settings + private JComboBox browser; JCheckBox overlapCheckBox; JSpinner spinEast; JSpinner spinNorth; JSpinner spinSimConn; - WMSAdapter wmsAdapter = ImageryPlugin.wmsAdapter; - ImageryPlugin plugin = ImageryPlugin.instance; //TMS settings controls private JCheckBox autozoomActive = new JCheckBox(); private JCheckBox autoloadTiles = new JCheckBox(); private JSpinner minZoomLvl; private JSpinner maxZoomLvl; - - - private JPanel buildImageryProvidersPanel(final PreferenceTabbedPane gui) { - final JPanel p = new JPanel(new GridBagLayout()); - model = new ImageryLayerTableModel(); - final JTable list = new JTable(model) { - @Override - public String getToolTipText(MouseEvent e) { - java.awt.Point p = e.getPoint(); - return model.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString(); - } - }; - JScrollPane scroll = new JScrollPane(list); - p.add(scroll, GBC.eol().fill(GridBagConstraints.BOTH)); - scroll.setPreferredSize(new Dimension(200, 200)); - - final ImageryDefaultLayerTableModel modeldef = new ImageryDefaultLayerTableModel(); - final JTable listdef = new JTable(modeldef) { - @Override - public String getToolTipText(MouseEvent e) { - java.awt.Point p = e.getPoint(); - return (String) modeldef.getValueAt(rowAtPoint(p), columnAtPoint(p)); - } - }; - JScrollPane scrolldef = new JScrollPane(listdef); - // scrolldef is added after the buttons so it's clearer the buttons - // control the top list and not the default one - scrolldef.setPreferredSize(new Dimension(200, 200)); - - TableColumnModel mod = listdef.getColumnModel(); - mod.getColumn(1).setPreferredWidth(800); - mod.getColumn(0).setPreferredWidth(200); - mod = list.getColumnModel(); - mod.getColumn(2).setPreferredWidth(50); - mod.getColumn(1).setPreferredWidth(800); - mod.getColumn(0).setPreferredWidth(200); - - JPanel buttonPanel = new JPanel(new FlowLayout()); - - JButton add = new JButton(tr("Add")); - buttonPanel.add(add, GBC.std().insets(0, 5, 0, 0)); - add.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - AddWMSLayerPanel p = new AddWMSLayerPanel(); - int answer = JOptionPane.showConfirmDialog( - gui, p, - tr("Add Imagery URL"), - JOptionPane.OK_CANCEL_OPTION); - if (answer == JOptionPane.OK_OPTION) { - model.addRow(new ImageryInfo(p.getUrlName(), p.getUrl())); - } - } - }); - - JButton delete = new JButton(tr("Delete")); - buttonPanel.add(delete, GBC.std().insets(0, 5, 0, 0)); - delete.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - if (list.getSelectedRow() == -1) - JOptionPane.showMessageDialog(gui, tr("Please select the row to delete.")); - else { - Integer i; - while ((i = list.getSelectedRow()) != -1) - model.removeRow(i); - } - } - }); - - JButton copy = new JButton(tr("Copy Selected Default(s)")); - buttonPanel.add(copy, GBC.std().insets(0, 5, 0, 0)); - copy.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - int[] lines = listdef.getSelectedRows(); - if (lines.length == 0) { - JOptionPane.showMessageDialog( - gui, - tr("Please select at least one row to copy."), - tr("Information"), - JOptionPane.INFORMATION_MESSAGE); - return; - } - - outer: for (int i = 0; i < lines.length; i++) { - ImageryInfo info = modeldef.getRow(lines[i]); - - // Check if an entry with exactly the same values already - // exists - for (int j = 0; j < model.getRowCount(); j++) { - if (info.equalsBaseValues(model.getRow(j))) { - // Select the already existing row so the user has - // some feedback in case an entry exists - list.getSelectionModel().setSelectionInterval(j, j); - list.scrollRectToVisible(list.getCellRect(j, 0, true)); - continue outer; - } - } - - if (info.eulaAcceptanceRequired != null) { - if (!confirmeEulaAcceptance(gui, info.eulaAcceptanceRequired)) - continue outer; - } - - model.addRow(new ImageryInfo(info)); - int lastLine = model.getRowCount() - 1; - list.getSelectionModel().setSelectionInterval(lastLine, lastLine); - list.scrollRectToVisible(list.getCellRect(lastLine, 0, true)); - } - } - }); - - p.add(buttonPanel); - p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); - // Add default item list - p.add(scrolldef, GBC.eol().insets(0, 5, 0, 0).fill(GridBagConstraints.BOTH)); - - return p; - } + private JCheckBox addToSlippyMapChosser = new JCheckBox(); private JPanel buildCommonSettingsPanel(final PreferenceTabbedPane gui) { final JPanel p = new JPanel(new GridBagLayout()); @@ -231,6 +100,15 @@ public class ImageryPreferenceEditor implements PreferenceSetting { remoteCheckBox = new JCheckBox(tr("Allow remote control (reqires remotecontrol plugin)"), allowRemoteControl); p.add(remoteCheckBox,GBC.eol().fill(GBC.HORIZONTAL)); + this.sharpen = new JComboBox(new String[] { + tr("None"), + tr("Soft"), + tr("Strong")}); + p.add(new JLabel(tr("Sharpen (requires layer re-add): "))); + p.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL)); + p.add(this.sharpen, GBC.std().fill(GBC.HORIZONTAL)); + this.sharpen.setSelectedIndex(ImageryPreferences.PROP_SHARPEN_LEVEL.get()); + return p; } @@ -242,7 +120,7 @@ public class ImageryPreferenceEditor implements PreferenceSetting { "gnome-web-photo-fixed {0}", "webkit-image-gtk {0}"}); browser.setEditable(true); - browser.setSelectedItem(Main.pref.get("wmsplugin.browser", "webkit-image {0}")); + browser.setSelectedItem(wmsAdapter.PROP_BROWSER.get()); p.add(new JLabel(tr("Downloader:")), GBC.eol().fill(GBC.HORIZONTAL)); p.add(browser); @@ -278,6 +156,7 @@ public class ImageryPreferenceEditor implements PreferenceSetting { private JPanel buildTMSSettingsPanel() { JPanel tmsTab = new JPanel(new GridBagLayout()); + minZoomLvl = new JSpinner(new SpinnerNumberModel(TMSPreferences.DEFAULT_MIN_ZOOM, TMSPreferences.MIN_ZOOM, TMSPreferences.MAX_ZOOM, 1)); maxZoomLvl = new JSpinner(new SpinnerNumberModel(TMSPreferences.DEFAULT_MAX_ZOOM, TMSPreferences.MIN_ZOOM, TMSPreferences.MAX_ZOOM, 1)); @@ -297,10 +176,13 @@ public class ImageryPreferenceEditor implements PreferenceSetting { tmsTab.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL)); tmsTab.add(this.maxZoomLvl, GBC.eol().fill(GBC.HORIZONTAL)); - tmsTab.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.VERTICAL)); + tmsTab.add(new JLabel(tr("Add to slippymap chooser: ")), GBC.std()); + tmsTab.add(GBC.glue(5, 0), GBC.std().fill(GBC.HORIZONTAL)); + tmsTab.add(addToSlippyMapChosser, GBC.eol().fill(GBC.HORIZONTAL)); this.autozoomActive.setSelected(TMSPreferences.PROP_DEFAULT_AUTOZOOM.get()); this.autoloadTiles.setSelected(TMSPreferences.PROP_DEFAULT_AUTOLOAD.get()); + this.addToSlippyMapChosser.setSelected(TMSPreferences.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get()); this.maxZoomLvl.setValue(TMSPreferences.getMaxZoomLvl(null)); this.minZoomLvl.setValue(TMSPreferences.getMinZoomLvl(null)); return tmsTab; @@ -330,17 +212,22 @@ public class ImageryPreferenceEditor implements PreferenceSetting { public void addGui(final PreferenceTabbedPane gui) { JPanel p = gui.createPreferenceTab("imagery", tr("Imagery Preferences"), tr("Modify list of imagery layers displayed in the Imagery menu")); JTabbedPane pane = new JTabbedPane(); - pane.add(buildImageryProvidersPanel(gui)); + imageryProviders = new ImageryProvidersPanel(gui, plugin.info); + pane.add(imageryProviders); pane.add(buildSettingsPanel(gui)); + pane.add(new OffsetBookmarksPanel(gui)); pane.setTitleAt(0, tr("Imagery providers")); pane.setTitleAt(1, tr("Settings")); + pane.setTitleAt(2, tr("Offset bookmarks")); p.add(pane,GBC.std().fill(GBC.BOTH)); } @Override public boolean ok() { + boolean restartRequired = false; plugin.info.save(); plugin.refreshMenu(); + OffsetBookmark.saveBookmarks(); wmsAdapter.PROP_OVERLAP.put(overlapCheckBox.getModel().isSelected()); wmsAdapter.PROP_OVERLAP_EAST.put((Integer) spinEast.getModel().getValue()); @@ -348,19 +235,22 @@ public class ImageryPreferenceEditor implements PreferenceSetting { wmsAdapter.PROP_SIMULTANEOUS_CONNECTIONS.put((Integer) spinSimConn.getModel().getValue()); allowRemoteControl = remoteCheckBox.getModel().isSelected(); - Main.pref.put("wmsplugin.browser", browser.getEditor().getItem().toString()); - + Main.pref.put("imagery.wms.browser", browser.getEditor().getItem().toString()); + if (TMSPreferences.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get() != this.addToSlippyMapChosser.isSelected()) + restartRequired = true; + TMSPreferences.PROP_ADD_TO_SLIPPYMAP_CHOOSER.put(this.addToSlippyMapChosser.isSelected()); TMSPreferences.PROP_DEFAULT_AUTOZOOM.put(this.autozoomActive.isSelected()); TMSPreferences.PROP_DEFAULT_AUTOLOAD.put(this.autoloadTiles.isSelected()); TMSPreferences.setMaxZoomLvl((Integer)this.maxZoomLvl.getValue()); TMSPreferences.setMinZoomLvl((Integer)this.minZoomLvl.getValue()); - ImageryPreferences.PROP_REMOTE_CONTROL.put(allowRemoteControl); ImageryPreferences.PROP_FADE_AMOUNT.put(this.fadeAmount.getValue()); ImageryPreferences.setFadeColor(this.colFadeColor); + ImageryPreferences.PROP_REMOTE_CONTROL.put(allowRemoteControl); + ImageryPreferences.PROP_SHARPEN_LEVEL.put(sharpen.getSelectedIndex()); - return false; + return restartRequired; } /** @@ -372,13 +262,13 @@ public class ImageryPreferenceEditor implements PreferenceSetting { * The server URL */ public void setServerUrl(String server, String url) { - for (int i = 0; i < model.getRowCount(); i++) { - if (server.equals(model.getValueAt(i, 0).toString())) { - model.setValueAt(url, i, 1); + for (int i = 0; i < imageryProviders.model.getRowCount(); i++) { + if (server.equals(imageryProviders.model.getValueAt(i, 0).toString())) { + imageryProviders.model.setValueAt(url, i, 1); return; } } - model.addRow(new String[] { server, url }); + imageryProviders.model.addRow(new String[] { server, url }); } /** @@ -389,152 +279,11 @@ public class ImageryPreferenceEditor implements PreferenceSetting { * @return The server URL */ public String getServerUrl(String server) { - for (int i = 0; i < model.getRowCount(); i++) { - if (server.equals(model.getValueAt(i, 0).toString())) { - return model.getValueAt(i, 1).toString(); + for (int i = 0; i < imageryProviders.model.getRowCount(); i++) { + if (server.equals(imageryProviders.model.getValueAt(i, 0).toString())) { + return imageryProviders.model.getValueAt(i, 1).toString(); } } return null; } - - /** - * The table model for the WMS layer - * - */ - class ImageryLayerTableModel extends DefaultTableModel { - public ImageryLayerTableModel() { - setColumnIdentifiers(new String[] { tr("Menu Name"), tr("Imagery URL"), trc("layer", "Zoom") }); - } - - public ImageryInfo getRow(int row) { - return plugin.info.layers.get(row); - } - - public void addRow(ImageryInfo i) { - plugin.info.add(i); - int p = getRowCount() - 1; - fireTableRowsInserted(p, p); - } - - @Override - public void removeRow(int i) { - plugin.info.remove(getRow(i)); - fireTableRowsDeleted(i, i); - } - - @Override - public int getRowCount() { - return plugin.info.layers.size(); - } - - @Override - public Object getValueAt(int row, int column) { - ImageryInfo info = plugin.info.layers.get(row); - switch (column) { - case 0: - return info.name; - case 1: - return info.getFullURL(); - case 2: - return (info.imageryType == ImageryType.WMS) ? (info.pixelPerDegree == 0.0 ? "" : info.pixelPerDegree) - : (info.maxZoom == 0 ? "" : info.maxZoom); - } - return null; - } - - @Override - public void setValueAt(Object o, int row, int column) { - ImageryInfo info = plugin.info.layers.get(row); - switch (column) { - case 0: - info.name = (String) o; - case 1: - info.setURL((String)o); - case 2: - info.pixelPerDegree = 0; - info.maxZoom = 0; - try { - if(info.imageryType == ImageryType.WMS) - info.pixelPerDegree = Double.parseDouble((String) o); - else - info.maxZoom = Integer.parseInt((String) o); - } catch (NumberFormatException e) { - } - } - } - - @Override - public boolean isCellEditable(int row, int column) { - return true; - } - } - - /** - * The table model for the WMS layer - * - */ - class ImageryDefaultLayerTableModel extends DefaultTableModel { - public ImageryDefaultLayerTableModel() { - setColumnIdentifiers(new String[] { tr("Menu Name (Default)"), tr("Imagery URL (Default)") }); - } - - public ImageryInfo getRow(int row) { - return plugin.info.defaultLayers.get(row); - } - - @Override - public int getRowCount() { - return plugin.info.defaultLayers.size(); - } - - @Override - public Object getValueAt(int row, int column) { - ImageryInfo info = plugin.info.defaultLayers.get(row); - switch (column) { - case 0: - return info.name; - case 1: - return info.getFullURL(); - } - return null; - } - - @Override - public boolean isCellEditable(int row, int column) { - return false; - } - } - - private boolean confirmeEulaAcceptance(PreferenceTabbedPane gui, String eulaUrl) { - URL url = null; - try { - url = new URL(eulaUrl.replaceAll("\\{lang\\}", Locale.getDefault().toString())); - JEditorPane htmlPane = null; - try { - htmlPane = new JEditorPane(url); - } catch (IOException e1) { - // give a second chance with a default Locale 'en' - try { - url = new URL(eulaUrl.replaceAll("\\{lang\\}", "en")); - htmlPane = new JEditorPane(url); - } catch (IOException e2) { - JOptionPane.showMessageDialog(gui ,tr("EULA license URL not available: {0}", eulaUrl)); - return false; - } - } - Box box = Box.createVerticalBox(); - htmlPane.setEditable(false); - JScrollPane scrollPane = new JScrollPane(htmlPane); - scrollPane.setPreferredSize(new Dimension(400, 400)); - box.add(scrollPane); - int option = JOptionPane.showConfirmDialog(Main.parent, box, tr("Please abort if you are not sure"), JOptionPane.YES_NO_OPTION, - JOptionPane.WARNING_MESSAGE); - if (option == JOptionPane.YES_OPTION) { - return true; - } - } catch (MalformedURLException e2) { - JOptionPane.showMessageDialog(gui ,tr("Malformed URL for the EULA licence: {0}", eulaUrl)); - } - return false; - } } diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferences.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferences.java index c55505d..39620a1 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferences.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryPreferences.java @@ -7,9 +7,9 @@ import org.openstreetmap.josm.data.preferences.BooleanProperty; import org.openstreetmap.josm.data.preferences.IntegerProperty; public class ImageryPreferences { - public static final BooleanProperty PROP_REMOTE_CONTROL = new BooleanProperty("imagery.remotecontrol", true); public static final IntegerProperty PROP_FADE_AMOUNT = new IntegerProperty("imagery.fade_amount", 0); + public static final IntegerProperty PROP_SHARPEN_LEVEL = new IntegerProperty("imagery.sharpen_level", 0); public static Color getFadeColor() { return Main.pref.getColor("imagery.fade", Color.white); @@ -24,5 +24,7 @@ public class ImageryPreferences { Main.pref.putColor("imagery.fade", color); } - + public static boolean isUrlWithPatterns(String url) { + return url != null && url.contains("{") && url.contains("}"); + } } diff --git a/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryProvidersPanel.java similarity index 54% copy from wmsplugin/src/wmsplugin/WMSPreferenceEditor.java copy to imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryProvidersPanel.java index 7e2af13..f9744d6 100644 --- a/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/ImageryProvidersPanel.java @@ -1,4 +1,4 @@ -package wmsplugin; +package org.openstreetmap.josm.plugins.imagery; import static org.openstreetmap.josm.tools.I18n.tr; import static org.openstreetmap.josm.tools.I18n.trc; @@ -6,6 +6,7 @@ import static org.openstreetmap.josm.tools.I18n.trc; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseEvent; @@ -16,52 +17,41 @@ import java.util.Locale; import javax.swing.Box; import javax.swing.JButton; -import javax.swing.JCheckBox; -import javax.swing.JComboBox; import javax.swing.JEditorPane; -import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JScrollPane; -import javax.swing.JSpinner; import javax.swing.JTable; -import javax.swing.SpinnerNumberModel; import javax.swing.table.DefaultTableModel; import javax.swing.table.TableColumnModel; import org.openstreetmap.josm.Main; -import org.openstreetmap.josm.gui.preferences.PreferenceSetting; import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; +import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; +import org.openstreetmap.josm.plugins.imagery.wms.AddWMSLayerPanel; import org.openstreetmap.josm.tools.GBC; -public class WMSPreferenceEditor implements PreferenceSetting { - private WMSLayerTableModel model; - private JComboBox browser; +public class ImageryProvidersPanel extends JPanel { + final ImageryLayerTableModel model; + private final ImageryLayerInfo layerInfo; - JCheckBox overlapCheckBox; - JSpinner spinEast; - JSpinner spinNorth; - JSpinner spinSimConn; - JCheckBox remoteCheckBox; - boolean allowRemoteControl = true; - WMSPlugin plugin = WMSPlugin.instance; + public ImageryProvidersPanel(final PreferenceTabbedPane gui, ImageryLayerInfo layerInfo) { + super(new GridBagLayout()); + this.layerInfo = layerInfo; + this.model = new ImageryLayerTableModel(); - public void addGui(final PreferenceTabbedPane gui) { - JPanel p = gui.createPreferenceTab("wms", tr("WMS Plugin Preferences"), tr("Modify list of WMS servers displayed in the WMS plugin menu")); - - model = new WMSLayerTableModel(); final JTable list = new JTable(model) { @Override public String getToolTipText(MouseEvent e) { java.awt.Point p = e.getPoint(); - return (String) model.getValueAt(rowAtPoint(p), columnAtPoint(p)); + return model.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString(); } }; JScrollPane scroll = new JScrollPane(list); - p.add(scroll, GBC.eol().fill(GridBagConstraints.BOTH)); + add(scroll, GBC.eol().fill(GridBagConstraints.BOTH)); scroll.setPreferredSize(new Dimension(200, 200)); - final WMSDefaultLayerTableModel modeldef = new WMSDefaultLayerTableModel(); + final ImageryDefaultLayerTableModel modeldef = new ImageryDefaultLayerTableModel(); final JTable listdef = new JTable(modeldef) { @Override public String getToolTipText(MouseEvent e) { @@ -87,14 +77,15 @@ public class WMSPreferenceEditor implements PreferenceSetting { JButton add = new JButton(tr("Add")); buttonPanel.add(add, GBC.std().insets(0, 5, 0, 0)); add.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { AddWMSLayerPanel p = new AddWMSLayerPanel(); int answer = JOptionPane.showConfirmDialog( gui, p, - tr("Add WMS URL"), + tr("Add Imagery URL"), JOptionPane.OK_CANCEL_OPTION); if (answer == JOptionPane.OK_OPTION) { - model.addRow(new WMSInfo(p.getUrlName(), p.getUrl())); + model.addRow(new ImageryInfo(p.getUrlName(), p.getUrl())); } } }); @@ -102,6 +93,7 @@ public class WMSPreferenceEditor implements PreferenceSetting { JButton delete = new JButton(tr("Delete")); buttonPanel.add(delete, GBC.std().insets(0, 5, 0, 0)); delete.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { if (list.getSelectedRow() == -1) JOptionPane.showMessageDialog(gui, tr("Please select the row to delete.")); @@ -116,6 +108,7 @@ public class WMSPreferenceEditor implements PreferenceSetting { JButton copy = new JButton(tr("Copy Selected Default(s)")); buttonPanel.add(copy, GBC.std().insets(0, 5, 0, 0)); copy.addActionListener(new ActionListener() { + @Override public void actionPerformed(ActionEvent e) { int[] lines = listdef.getSelectedRows(); if (lines.length == 0) { @@ -128,7 +121,7 @@ public class WMSPreferenceEditor implements PreferenceSetting { } outer: for (int i = 0; i < lines.length; i++) { - WMSInfo info = modeldef.getRow(lines[i]); + ImageryInfo info = modeldef.getRow(lines[i]); // Check if an entry with exactly the same values already // exists @@ -143,11 +136,11 @@ public class WMSPreferenceEditor implements PreferenceSetting { } if (info.eulaAcceptanceRequired != null) { - if (!confirmeEulaAcceptance(gui, info.eulaAcceptanceRequired)) + if (!confirmEulaAcceptance(gui, info.eulaAcceptanceRequired)) continue outer; } - model.addRow(new WMSInfo(info)); + model.addRow(new ImageryInfo(info)); int lastLine = model.getRowCount() - 1; list.getSelectionModel().setSelectionInterval(lastLine, lastLine); list.scrollRectToVisible(list.getCellRect(lastLine, 0, true)); @@ -155,188 +148,109 @@ public class WMSPreferenceEditor implements PreferenceSetting { } }); - p.add(buttonPanel); - p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); + add(buttonPanel); + add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); // Add default item list - p.add(scrolldef, GBC.eol().insets(0, 5, 0, 0).fill(GridBagConstraints.BOTH)); - - browser = new JComboBox(new String[] { - "webkit-image {0}", - "gnome-web-photo --mode=photo --format=png {0} /dev/stdout", - "gnome-web-photo-fixed {0}", - "webkit-image-gtk {0}"}); - browser.setEditable(true); - browser.setSelectedItem(Main.pref.get("wmsplugin.browser", "webkit-image {0}")); - p.add(new JLabel(tr("Downloader:")), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); - p.add(browser); - - // Overlap - p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); - - overlapCheckBox = new JCheckBox(tr("Overlap tiles"), plugin.PROP_OVERLAP.get()); - JLabel labelEast = new JLabel(tr("% of east:")); - JLabel labelNorth = new JLabel(tr("% of north:")); - spinEast = new JSpinner(new SpinnerNumberModel(plugin.PROP_OVERLAP_EAST.get(), 1, 50, 1)); - spinNorth = new JSpinner(new SpinnerNumberModel(plugin.PROP_OVERLAP_NORTH.get(), 1, 50, 1)); - - JPanel overlapPanel = new JPanel(new FlowLayout()); - overlapPanel.add(overlapCheckBox); - overlapPanel.add(labelEast); - overlapPanel.add(spinEast); - overlapPanel.add(labelNorth); - overlapPanel.add(spinNorth); - - p.add(overlapPanel); - - // Simultaneous connections - p.add(Box.createHorizontalGlue(), GBC.eol().fill(GridBagConstraints.HORIZONTAL)); - JLabel labelSimConn = new JLabel(tr("Simultaneous connections")); - spinSimConn = new JSpinner(new SpinnerNumberModel(plugin.PROP_SIMULTANEOUS_CONNECTIONS.get(), 1, 30, 1)); - JPanel overlapPanelSimConn = new JPanel(new FlowLayout()); - overlapPanelSimConn.add(labelSimConn); - overlapPanelSimConn.add(spinSimConn); - p.add(overlapPanelSimConn, GBC.eol().fill(GridBagConstraints.HORIZONTAL)); - - allowRemoteControl = Main.pref.getBoolean("wmsplugin.remotecontrol", true); - remoteCheckBox = new JCheckBox(tr("Allow remote control (reqires remotecontrol plugin)"), allowRemoteControl); - JPanel remotePanel = new JPanel(new FlowLayout()); - remotePanel.add(remoteCheckBox); - - p.add(remotePanel); - } - - public boolean ok() { - plugin.info.save(); - plugin.refreshMenu(); - - plugin.PROP_OVERLAP.put(overlapCheckBox.getModel().isSelected()); - plugin.PROP_OVERLAP_EAST.put((Integer) spinEast.getModel().getValue()); - plugin.PROP_OVERLAP_NORTH.put((Integer) spinNorth.getModel().getValue()); - plugin.PROP_SIMULTANEOUS_CONNECTIONS.put((Integer) spinSimConn.getModel().getValue()); - allowRemoteControl = remoteCheckBox.getModel().isSelected(); - - Main.pref.put("wmsplugin.browser", browser.getEditor().getItem().toString()); - - Main.pref.put("wmsplugin.remotecontrol", String.valueOf(allowRemoteControl)); - return false; - } - - /** - * Updates a server URL in the preferences dialog. Used by other plugins. - * - * @param server - * The server name - * @param url - * The server URL - */ - public void setServerUrl(String server, String url) { - for (int i = 0; i < model.getRowCount(); i++) { - if (server.equals(model.getValueAt(i, 0).toString())) { - model.setValueAt(url, i, 1); - return; - } - } - model.addRow(new String[] { server, url }); + add(scrolldef, GBC.eol().insets(0, 5, 0, 0).fill(GridBagConstraints.BOTH)); } /** - * Gets a server URL in the preferences dialog. Used by other plugins. - * - * @param server - * The server name - * @return The server URL + * The table model for imagery layer list */ - public String getServerUrl(String server) { - for (int i = 0; i < model.getRowCount(); i++) { - if (server.equals(model.getValueAt(i, 0).toString())) { - return model.getValueAt(i, 1).toString(); - } + class ImageryLayerTableModel extends DefaultTableModel { + public ImageryLayerTableModel() { + setColumnIdentifiers(new String[] { tr("Menu Name"), tr("Imagery URL"), trc("layer", "Zoom") }); } - return null; - } - /** - * The table model for the WMS layer - * - */ - class WMSLayerTableModel extends DefaultTableModel { - public WMSLayerTableModel() { - setColumnIdentifiers(new String[] { tr("Menu Name"), tr("WMS URL"), trc("layer", "Zoom") }); + public ImageryInfo getRow(int row) { + return layerInfo.layers.get(row); } - public WMSInfo getRow(int row) { - return plugin.info.layers.get(row); - } - - public void addRow(WMSInfo i) { - plugin.info.add(i); + public void addRow(ImageryInfo i) { + layerInfo.add(i); int p = getRowCount() - 1; fireTableRowsInserted(p, p); } @Override public void removeRow(int i) { - plugin.info.remove(getRow(i)); + layerInfo.remove(getRow(i)); fireTableRowsDeleted(i, i); } @Override public int getRowCount() { - return plugin.info.layers.size(); + return layerInfo.layers.size(); } @Override public Object getValueAt(int row, int column) { - WMSInfo info = plugin.info.layers.get(row); + ImageryInfo info = layerInfo.layers.get(row); switch (column) { case 0: return info.name; case 1: return info.getFullURL(); case 2: - return info.pixelPerDegree == 0.0 ? "" : info.pixelPerDegree; + return (info.imageryType == ImageryType.WMS) ? (info.pixelPerDegree == 0.0 ? "" : info.pixelPerDegree) + : (info.maxZoom == 0 ? "" : info.maxZoom); + default: + throw new ArrayIndexOutOfBoundsException(); } - return null; } @Override public void setValueAt(Object o, int row, int column) { - WMSInfo info = plugin.info.layers.get(row); + ImageryInfo info = layerInfo.layers.get(row); switch (column) { case 0: info.name = (String) o; + break; case 1: info.setURL((String)o); + break; + case 2: + info.pixelPerDegree = 0; + info.maxZoom = 0; + try { + if(info.imageryType == ImageryType.WMS) + info.pixelPerDegree = Double.parseDouble((String) o); + else + info.maxZoom = Integer.parseInt((String) o); + } catch (NumberFormatException e) { + } + break; + default: + throw new ArrayIndexOutOfBoundsException(); } } @Override public boolean isCellEditable(int row, int column) { - return (column != 2); + return true; } } /** - * The table model for the WMS layer - * + * The table model for the default imagery layer list */ - class WMSDefaultLayerTableModel extends DefaultTableModel { - public WMSDefaultLayerTableModel() { - setColumnIdentifiers(new String[] { tr("Menu Name (Default)"), tr("WMS URL (Default)") }); + class ImageryDefaultLayerTableModel extends DefaultTableModel { + public ImageryDefaultLayerTableModel() { + setColumnIdentifiers(new String[] { tr("Menu Name (Default)"), tr("Imagery URL (Default)") }); } - public WMSInfo getRow(int row) { - return plugin.info.defaultLayers.get(row); + public ImageryInfo getRow(int row) { + return layerInfo.defaultLayers.get(row); } @Override public int getRowCount() { - return plugin.info.defaultLayers.size(); + return layerInfo.defaultLayers.size(); } @Override public Object getValueAt(int row, int column) { - WMSInfo info = plugin.info.defaultLayers.get(row); + ImageryInfo info = layerInfo.defaultLayers.get(row); switch (column) { case 0: return info.name; @@ -352,7 +266,7 @@ public class WMSPreferenceEditor implements PreferenceSetting { } } - private boolean confirmeEulaAcceptance(PreferenceTabbedPane gui, String eulaUrl) { + private boolean confirmEulaAcceptance(PreferenceTabbedPane gui, String eulaUrl) { URL url = null; try { url = new URL(eulaUrl.replaceAll("\\{lang\\}", Locale.getDefault().toString())); diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/OffsetBookmark.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/OffsetBookmark.java new file mode 100644 index 0000000..a1a4cca --- /dev/null +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/OffsetBookmark.java @@ -0,0 +1,75 @@ +package org.openstreetmap.josm.plugins.imagery; + +import static org.openstreetmap.josm.tools.I18n.tr; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedList; +import java.util.List; + +import org.openstreetmap.josm.Main; +import org.openstreetmap.josm.data.projection.Projection; + +public class OffsetBookmark { + public static List<OffsetBookmark> allBookmarks = new ArrayList<OffsetBookmark>(); + + public Projection proj; + public String layerName; + public String name; + public double dx, dy; + + public boolean isUsable(ImageryLayer layer) { + return Main.proj.getClass() == proj.getClass() && + layer.getInfo().getName().equals(layerName); + } + public OffsetBookmark(Projection proj, String layerName, String name, double dx, double dy) { + this.proj = proj; + this.layerName = layerName; + this.name = name; + this.dx = dx; + this.dy = dy; + } + + public OffsetBookmark(Collection<String> list) { + ArrayList<String> array = new ArrayList<String>(list); + String projectionName = array.get(0); + for (Projection proj : Projection.allProjections) { + if (proj.getCacheDirectoryName().equals(projectionName)) { + this.proj = proj; + break; + } + } + if (this.proj == null) + throw new IllegalStateException(tr("Projection ''{0}'' not found", projectionName)); + this.layerName = array.get(1); + this.name = array.get(2); + this.dx = Double.valueOf(array.get(3)); + this.dy = Double.valueOf(array.get(4)); + } + + public ArrayList<String> getInfoArray() { + ArrayList<String> res = new ArrayList<String>(5); + res.add(proj.getCacheDirectoryName()); // we should use non-localized projection name + res.add(layerName); + res.add(name); + res.add(String.valueOf(dx)); + res.add(String.valueOf(dy)); + return res; + } + + public static void loadBookmarks() { + for(Collection<String> c : Main.pref.getArray("imagery.offsets", + Collections.<Collection<String>>emptySet())) { + allBookmarks.add(new OffsetBookmark(c)); + } + } + + public static void saveBookmarks() { + LinkedList<Collection<String>> coll = new LinkedList<Collection<String>>(); + for (OffsetBookmark b : allBookmarks) { + coll.add(b.getInfoArray()); + } + Main.pref.putArray("imagery.offsets", coll); + } +} diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/OffsetBookmarksPanel.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/OffsetBookmarksPanel.java new file mode 100644 index 0000000..c261058 --- /dev/null +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/OffsetBookmarksPanel.java @@ -0,0 +1,155 @@ +package org.openstreetmap.josm.plugins.imagery; + +import static org.openstreetmap.josm.tools.I18n.tr; + +import java.awt.Dimension; +import java.awt.FlowLayout; +import java.awt.GridBagConstraints; +import java.awt.GridBagLayout; +import java.awt.event.ActionEvent; +import java.awt.event.ActionListener; +import java.awt.event.MouseEvent; +import java.util.List; + +import javax.swing.JButton; +import javax.swing.JOptionPane; +import javax.swing.JPanel; +import javax.swing.JScrollPane; +import javax.swing.JTable; +import javax.swing.table.DefaultTableModel; +import javax.swing.table.TableColumnModel; + +import org.openstreetmap.josm.Main; +import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; +import org.openstreetmap.josm.tools.GBC; + + +public class OffsetBookmarksPanel extends JPanel { + List<OffsetBookmark> bookmarks = OffsetBookmark.allBookmarks; + OffsetsBookmarksModel model = new OffsetsBookmarksModel(); + + public OffsetBookmarksPanel(final PreferenceTabbedPane gui) { + super(new GridBagLayout()); + final JTable list = new JTable(model) { + @Override + public String getToolTipText(MouseEvent e) { + java.awt.Point p = e.getPoint(); + return model.getValueAt(rowAtPoint(p), columnAtPoint(p)).toString(); + } + }; + JScrollPane scroll = new JScrollPane(list); + add(scroll, GBC.eol().fill(GridBagConstraints.BOTH)); + scroll.setPreferredSize(new Dimension(200, 200)); + + TableColumnModel mod = list.getColumnModel(); + mod.getColumn(0).setPreferredWidth(150); + mod.getColumn(1).setPreferredWidth(200); + mod.getColumn(2).setPreferredWidth(300); + mod.getColumn(3).setPreferredWidth(150); + mod.getColumn(4).setPreferredWidth(150); + + JPanel buttonPanel = new JPanel(new FlowLayout()); + + JButton add = new JButton(tr("Add")); + buttonPanel.add(add, GBC.std().insets(0, 5, 0, 0)); + add.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + OffsetBookmark b = new OffsetBookmark(Main.proj,"","",0,0); + model.addRow(b); + } + }); + + JButton delete = new JButton(tr("Delete")); + buttonPanel.add(delete, GBC.std().insets(0, 5, 0, 0)); + delete.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (list.getSelectedRow() == -1) + JOptionPane.showMessageDialog(gui, tr("Please select the row to delete.")); + else { + Integer i; + while ((i = list.getSelectedRow()) != -1) + model.removeRow(i); + } + } + }); + + add(buttonPanel,GBC.eol()); + } + + /** + * The table model for imagery offsets list + */ + class OffsetsBookmarksModel extends DefaultTableModel { + public OffsetsBookmarksModel() { + setColumnIdentifiers(new String[] { tr("Projection"), tr("Layer"), tr("Name"), tr("Easting"), tr("Northing"),}); + } + + public OffsetBookmark getRow(int row) { + return bookmarks.get(row); + } + + public void addRow(OffsetBookmark i) { + bookmarks.add(i); + int p = getRowCount() - 1; + fireTableRowsInserted(p, p); + } + + @Override + public void removeRow(int i) { + bookmarks.remove(getRow(i)); + fireTableRowsDeleted(i, i); + } + + @Override + public int getRowCount() { + return bookmarks.size(); + } + + @Override + public Object getValueAt(int row, int column) { + OffsetBookmark info = bookmarks.get(row); + switch (column) { + case 0: + return info.proj.toString(); + case 1: + return info.layerName; + case 2: + return info.name; + case 3: + return info.dx; + case 4: + return info.dy; + default: + throw new ArrayIndexOutOfBoundsException(); + } + } + + @Override + public void setValueAt(Object o, int row, int column) { + OffsetBookmark info = bookmarks.get(row); + switch (column) { + case 1: + info.layerName = o.toString(); + break; + case 2: + info.name = o.toString(); + break; + case 3: + info.dx = Double.parseDouble((String) o);; + break; + case 4: + info.dy = Double.parseDouble((String) o);; + break; + default: + throw new ArrayIndexOutOfBoundsException(); + } + } + + @Override + public boolean isCellEditable(int row, int column) { + return column >= 1; + } + } +} diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java index 173a8da..4de7f35 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSLayer.java @@ -54,7 +54,6 @@ import org.openstreetmap.josm.gui.layer.Layer; import org.openstreetmap.josm.plugins.imagery.ImageryInfo; import org.openstreetmap.josm.plugins.imagery.ImageryLayer; import org.openstreetmap.josm.plugins.imagery.ImageryPreferences; -import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; /** * Class that displays a slippy map layer. @@ -84,6 +83,7 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL needRedraw = true; Main.map.repaint(100); tileRequestsOutstanding.remove(tile); + if (sharpenLevel != 0) tile.setImage(sharpenImage(tile.getImage())); if (debug) out("tileLoadingFinished() tile: " + tile + " success: " + success); } @@ -160,8 +160,8 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL } @Override - public void displace(double dx, double dy) { - super.displace(dx, dy); + public void setOffset(double dx, double dy) { + super.setOffset(dx, dy); needRedraw = true; } @@ -182,15 +182,10 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL setBackgroundLayer(true); this.setVisible(true); - if (info.getImageryType() == ImageryType.TMS) { - if(isUrlWithPatterns(info.getURL())) { - initTileSource(new TemplatedTMSTileSource(info.getName(), info.getURL(), info.getMaxZoom())); - } else { - initTileSource(new TMSTileSource(info.getName(),info.getURL(), info.getMaxZoom())); - } - } else if (info.getImageryType() == ImageryType.BING) { - initTileSource(new BingAerialTileSource()); - } else throw new IllegalStateException("cannot create TMSLayer with non-TMS ImageryInfo"); + TileSource source = TMSPreferences.getTileSource(info); + if (source == null) + throw new IllegalStateException("cannot create TMSLayer with non-TMS ImageryInfo"); + initTileSource(source); tileOptionMenu = new JPopupMenu(); @@ -364,10 +359,6 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL }); } - public static boolean isUrlWithPatterns(String url) { - return url != null && url.contains("{") && url.contains("}"); - } - void zoomChanged() { if (debug) @@ -1137,6 +1128,7 @@ public class TMSLayer extends ImageryLayer implements ImageObserver, TileLoaderL LayerListDialog.getInstance().createDeleteLayerAction(), SeparatorLayerAction.INSTANCE, // color, + getOffsetAction(), new RenameLayerAction(this.getAssociatedFile(), this), SeparatorLayerAction.INSTANCE, new LayerListPopup.InfoAction(this) }; diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSPreferences.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSPreferences.java index b2d62a3..abca2b8 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSPreferences.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSPreferences.java @@ -3,6 +3,9 @@ package org.openstreetmap.josm.plugins.imagery.tms; import org.openstreetmap.gui.jmapviewer.interfaces.TileSource; import org.openstreetmap.josm.data.preferences.BooleanProperty; import org.openstreetmap.josm.data.preferences.IntegerProperty; +import org.openstreetmap.josm.plugins.imagery.ImageryInfo; +import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; +import org.openstreetmap.josm.plugins.imagery.ImageryPreferences; /** * Preferences for Slippy Map Tiles @@ -26,6 +29,7 @@ public class TMSPreferences public static final IntegerProperty PROP_MIN_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".min_zoom_lvl", DEFAULT_MIN_ZOOM); public static final IntegerProperty PROP_MAX_ZOOM_LVL = new IntegerProperty(PREFERENCE_PREFIX + ".max_zoom_lvl", DEFAULT_MAX_ZOOM); public static final BooleanProperty PROP_DRAW_DEBUG = new BooleanProperty(PREFERENCE_PREFIX + ".draw_debug", false); + public static final BooleanProperty PROP_ADD_TO_SLIPPYMAP_CHOOSER = new BooleanProperty(PREFERENCE_PREFIX + ".add_to_slippymap_chooser", true); static int checkMaxZoomLvl(int maxZoomLvl, TileSource ts) { @@ -79,4 +83,17 @@ public class TMSPreferences minZoomLvl = checkMinZoomLvl(minZoomLvl, null); PROP_MIN_ZOOM_LVL.put(minZoomLvl); } + + public static TileSource getTileSource(ImageryInfo info) { + if (info.getImageryType() == ImageryType.TMS) { + if(ImageryPreferences.isUrlWithPatterns(info.getURL())) { + return new TemplatedTMSTileSource(info.getName(), info.getURL(), info.getMaxZoom()); + } else { + return new TMSTileSource(info.getName(),info.getURL(), info.getMaxZoom()); + } + } else if (info.getImageryType() == ImageryType.BING) { + return new BingAerialTileSource(); + } + return null; + } } diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSource.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSource.java index fcd2878..3e5b81a 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSource.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSource.java @@ -19,4 +19,4 @@ public class TMSTileSource extends OsmTileSource.AbstractOsmTileSource { public TileUpdate getTileUpdate() { return TileUpdate.IfNoneMatch; } -} \ No newline at end of file +} diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSourceProvider.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSourceProvider.java new file mode 100644 index 0000000..29d21f2 --- /dev/null +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/tms/TMSTileSourceProvider.java @@ -0,0 +1,41 @@ +package org.openstreetmap.josm.plugins.imagery.tms; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; + +import org.openstreetmap.gui.jmapviewer.interfaces.TileSource; +import org.openstreetmap.josm.gui.bbox.SlippyMapBBoxChooser.TileSourceProvider; +import org.openstreetmap.josm.plugins.imagery.ImageryInfo; +import org.openstreetmap.josm.plugins.imagery.ImageryPlugin; + +/** + * TMS TileSource provider for the slippymap chooser + * @author Upliner + */ +public class TMSTileSourceProvider implements TileSourceProvider { + static final HashSet<String> existingSlippyMapUrls = new HashSet<String>(); + static { + // Urls that already exist in the slippymap chooser + existingSlippyMapUrls.add("http://tile.openstreetmap.org"); + existingSlippyMapUrls.add("http://tah.openstreetmap.org/Tiles"); + existingSlippyMapUrls.add("http://tile.opencyclemap.org/cycle"); + } + + @Override + public List<TileSource> getTileSources() { + if (!TMSPreferences.PROP_ADD_TO_SLIPPYMAP_CHOOSER.get()) return Collections.<TileSource>emptyList(); + List<TileSource> sources = new ArrayList<TileSource>(); + for (ImageryInfo info : ImageryPlugin.instance.info.getLayers()) { + if (existingSlippyMapUrls.contains(info.getURL())) continue; + TileSource source = TMSPreferences.getTileSource(info); + if (source != null) sources.add(source); + } + return sources; + } + + public static void addExistingSlippyMapUrl(String url) { + existingSlippyMapUrls.add(url); + } +} diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/GeorefImage.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/GeorefImage.java index a18639b..9cddc61 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/GeorefImage.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/GeorefImage.java @@ -96,6 +96,7 @@ public class GeorefImage implements Serializable { break; } default: + this.image = layer.sharpenImage(this.image); break; } } diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/HTMLGrabber.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/HTMLGrabber.java index 16c9bcb..b66cab9 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/HTMLGrabber.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/HTMLGrabber.java @@ -9,9 +9,9 @@ import java.util.StringTokenizer; import javax.imageio.ImageIO; -import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.MapView; import org.openstreetmap.josm.io.CacheFiles; +import org.openstreetmap.josm.plugins.imagery.ImageryPlugin; public class HTMLGrabber extends WMSGrabber { HTMLGrabber(MapView mv, WMSLayer layer, CacheFiles cache) { @@ -26,7 +26,7 @@ public class HTMLGrabber extends WMSGrabber { ArrayList<String> cmdParams = new ArrayList<String>(); StringTokenizer st = new StringTokenizer(MessageFormat.format( - Main.pref.get("wmsplugin.browser", "webkit-image {0}"), urlstring)); + ImageryPlugin.wmsAdapter.PROP_BROWSER.get(), urlstring)); while( st.hasMoreTokens() ) cmdParams.add(st.nextToken()); diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSAdapter.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSAdapter.java index cebf2ef..c6c3c9f 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSAdapter.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSAdapter.java @@ -3,6 +3,7 @@ package org.openstreetmap.josm.plugins.imagery.wms; import org.openstreetmap.josm.actions.ExtensionFileFilter; import org.openstreetmap.josm.data.preferences.BooleanProperty; import org.openstreetmap.josm.data.preferences.IntegerProperty; +import org.openstreetmap.josm.data.preferences.StringProperty; import org.openstreetmap.josm.gui.MapView; import org.openstreetmap.josm.io.CacheFiles; import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; @@ -13,10 +14,11 @@ import org.openstreetmap.josm.plugins.imagery.wms.io.WMSLayerImporter; public class WMSAdapter { CacheFiles cache = new CacheFiles("wmsplugin"); - public final IntegerProperty PROP_SIMULTANEOUS_CONNECTIONS = new IntegerProperty("wmsplugin.simultaneousConnections", 3); - public final BooleanProperty PROP_OVERLAP = new BooleanProperty("wmsplugin.url.overlap", false); - public final IntegerProperty PROP_OVERLAP_EAST = new IntegerProperty("wmsplugin.url.overlapEast", 14); - public final IntegerProperty PROP_OVERLAP_NORTH = new IntegerProperty("wmsplugin.url.overlapNorth", 4); + public final StringProperty PROP_BROWSER = new StringProperty("imagery.wms.browser", "webkit-image {0}"); + public final IntegerProperty PROP_SIMULTANEOUS_CONNECTIONS = new IntegerProperty("imagery.wms.simultaneousConnections", 3); + public final BooleanProperty PROP_OVERLAP = new BooleanProperty("imagery.wms.overlap", false); + public final IntegerProperty PROP_OVERLAP_EAST = new IntegerProperty("imagery.wms.overlapEast", 14); + public final IntegerProperty PROP_OVERLAP_NORTH = new IntegerProperty("imagery.wms.overlapNorth", 4); protected void initExporterAndImporter() { ExtensionFileFilter.exporters.add(new WMSLayerExporter()); diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSGrabber.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSGrabber.java index d0d199c..661f159 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSGrabber.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSGrabber.java @@ -30,13 +30,11 @@ import org.openstreetmap.josm.gui.MapView; import org.openstreetmap.josm.io.CacheFiles; import org.openstreetmap.josm.io.OsmTransferException; import org.openstreetmap.josm.io.ProgressInputStream; +import org.openstreetmap.josm.plugins.imagery.ImageryPreferences; import org.openstreetmap.josm.plugins.imagery.wms.GeorefImage.State; public class WMSGrabber extends Grabber { - public static boolean isUrlWithPatterns(String url) { - return url != null && url.contains("{") && url.contains("}"); - } protected String baseURL; private final boolean urlWithPatterns; @@ -45,7 +43,7 @@ public class WMSGrabber extends Grabber { super(mv, layer, cache); this.baseURL = layer.getInfo().getURL(); /* URL containing placeholders? */ - urlWithPatterns = isUrlWithPatterns(baseURL); + urlWithPatterns = ImageryPreferences.isUrlWithPatterns(baseURL); } @Override @@ -169,9 +167,9 @@ public class WMSGrabber extends Grabber { HttpURLConnection conn = (HttpURLConnection) url.openConnection(); if(layer.getInfo().getCookies() != null && !layer.getInfo().getCookies().equals("")) conn.setRequestProperty("Cookie", layer.getInfo().getCookies()); - conn.setRequestProperty("User-Agent", Main.pref.get("wmsplugin.user_agent", Version.getInstance().getAgentString())); - conn.setConnectTimeout(Main.pref.getInteger("wmsplugin.timeout.connect", 30) * 1000); - conn.setReadTimeout(Main.pref.getInteger("wmsplugin.timeout.read", 30) * 1000); + conn.setRequestProperty("User-Agent", Main.pref.get("imagery.wms.user_agent", Version.getInstance().getAgentString())); + conn.setConnectTimeout(Main.pref.getInteger("imagery.wms.timeout.connect", 30) * 1000); + conn.setReadTimeout(Main.pref.getInteger("imagery.wms.timeout.read", 30) * 1000); String contentType = conn.getHeaderField("Content-Type"); if( conn.getResponseCode() != 200 diff --git a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSLayer.java b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSLayer.java index de20cbc..f751f2a 100644 --- a/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSLayer.java +++ b/imagery/src/org/openstreetmap/josm/plugins/imagery/wms/WMSLayer.java @@ -44,6 +44,7 @@ import org.openstreetmap.josm.plugins.imagery.ImageryInfo; import org.openstreetmap.josm.plugins.imagery.ImageryInfo.ImageryType; import org.openstreetmap.josm.plugins.imagery.ImageryLayer; import org.openstreetmap.josm.plugins.imagery.ImageryPlugin; +import org.openstreetmap.josm.plugins.imagery.ImageryPreferences; import org.openstreetmap.josm.plugins.imagery.wms.GeorefImage.State; import org.openstreetmap.josm.tools.ImageProvider; @@ -53,7 +54,7 @@ import org.openstreetmap.josm.tools.ImageProvider; */ public class WMSLayer extends ImageryLayer implements PreferenceChangedListener { - public static final BooleanProperty PROP_ALPHA_CHANNEL = new BooleanProperty("wmsplugin.alpha_channel", true); + public static final BooleanProperty PROP_ALPHA_CHANNEL = new BooleanProperty("imagery.wms.alpha_channel", true); WMSAdapter plugin = ImageryPlugin.wmsAdapter; public int messageNum = 5; //limit for messages per layer @@ -68,6 +69,7 @@ public class WMSLayer extends ImageryLayer implements PreferenceChangedListener protected final int serializeFormatVersion = 5; protected boolean autoDownloadEnabled = true; protected boolean settingsChanged; + protected ImageryInfo info; // Image index boundary for current view private volatile int bminx; @@ -110,7 +112,7 @@ public class WMSLayer extends ImageryLayer implements PreferenceChangedListener if(info.getURL() != null) { WMSGrabber.getProjection(info.getURL(), true); startGrabberThreads(); - if(info.getImageryType() == ImageryType.WMS && !WMSGrabber.isUrlWithPatterns(info.getURL())) { + if(info.getImageryType() == ImageryType.WMS && !ImageryPreferences.isUrlWithPatterns(info.getURL())) { if (!(info.getURL().endsWith("&") || info.getURL().endsWith("?"))) { if (!confirmMalformedUrl(info.getURL())) { System.out.println(tr("Warning: WMS layer deactivated because of malformed base url ''{0}''", info.getURL())); @@ -241,8 +243,8 @@ public class WMSLayer extends ImageryLayer implements PreferenceChangedListener } @Override - public void displace(double dx, double dy) { - super.displace(dx, dy); + public void setOffset(double dx, double dy) { + super.setOffset(dx, dy); settingsChanged = true; } @@ -356,6 +358,7 @@ public class WMSLayer extends ImageryLayer implements PreferenceChangedListener LayerListDialog.getInstance().createShowHideLayerAction(), LayerListDialog.getInstance().createDeleteLayerAction(), SeparatorLayerAction.INSTANCE, + getOffsetAction(), new LoadWmsAction(), new SaveWmsAction(), new BookmarkWmsAction(), diff --git a/svn-info.xml b/svn-info.xml index bb78072..7b483a4 100644 --- a/svn-info.xml +++ b/svn-info.xml @@ -3,16 +3,16 @@ <entry kind="dir" path="plugins" - revision="24608"> + revision="24657"> <url>http://svn.openstreetmap.org/applications/editors/josm/plugins</url> <repository> <root>http://svn.openstreetmap.org</root> <uuid>b9d5c4c9-76e1-0310-9c85-f3177eceb1e4</uuid> </repository> <commit - revision="24602"> -<author>malcolmh</author> -<date>2010-12-05T20:42:28.719021Z</date> + revision="24654"> +<author>extropy</author> +<date>2010-12-08T14:53:35.122571Z</date> </commit> </entry> </info> diff --git a/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java b/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java index 7e2af13..98d09e7 100644 --- a/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java +++ b/wmsplugin/src/wmsplugin/WMSPreferenceEditor.java @@ -305,8 +305,10 @@ public class WMSPreferenceEditor implements PreferenceSetting { switch (column) { case 0: info.name = (String) o; + break; case 1: info.setURL((String)o); + break; } } diff --git a/wmsplugin/webkit-image.cpp b/wmsplugin/webkit-image.cpp index fddb51c..10ab76a 100644 --- a/wmsplugin/webkit-image.cpp +++ b/wmsplugin/webkit-image.cpp @@ -151,9 +151,9 @@ int main(int argc, char **argv) QObject::connect(page, SIGNAL(loadFinished(bool)), s, SLOT(loaded(bool))); QObject::connect(s, SIGNAL(finish(void)), &a, SLOT(quit())); /* set some useful defaults for a webpage */ -// page->setViewportSize(QSize(1280,1024)); -// page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); -// page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); + page->setViewportSize(QSize(1280,1024)); + page->mainFrame()->setScrollBarPolicy(Qt::Horizontal, Qt::ScrollBarAlwaysOff); + page->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff); page->mainFrame()->load (QUrl(url)); return a.exec(); } -- Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/josm-plugins.git _______________________________________________ Pkg-grass-devel mailing list Pkg-grass-devel@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-grass-devel