// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.plugins.lakewalker; import static org.openstreetmap.josm.tools.I18n.marktr; import static org.openstreetmap.josm.tools.I18n.tr; import java.awt.GridBagConstraints; import javax.swing.Box; import javax.swing.JLabel; import javax.swing.JPanel; import org.openstreetmap.josm.Main; import org.openstreetmap.josm.gui.preferences.DefaultTabPreferenceSetting; import org.openstreetmap.josm.gui.preferences.PreferenceTabbedPane; import org.openstreetmap.josm.tools.GBC; import org.openstreetmap.josm.tools.I18n; public class LakewalkerPreferences extends DefaultTabPreferenceSetting { public static final String[] DIRECTIONS = new String[] {marktr("east"), marktr("northeast"), marktr("north"), marktr("northwest"), marktr("west"), marktr("southwest"), marktr("south"), marktr("southeast")}; public static final String[] WAYTYPES = new String[] {marktr("water"), marktr("coastline"), marktr("land"), marktr("none")}; public static final String[] WMSLAYERS = new String[] {"IR1", "IR2", "IR3"}; public static final String PREF_MAX_SEG = "lakewalker.max_segs_in_way"; public static final String PREF_MAX_NODES = "lakewalker.max_nodes"; public static final String PREF_THRESHOLD_VALUE = "lakewalker.thresholdvalue"; public static final String PREF_EPSILON = "lakewalker.epsilon"; public static final String PREF_LANDSAT_RES = "lakewalker.landsat_res"; public static final String PREF_LANDSAT_SIZE = "lakewalker.landsat_size"; public static final String PREF_EAST_OFFSET = "lakewalker.east_offset"; public static final String PREF_NORTH_OFFSET = "lakewalker.north_offset"; public static final String PREF_START_DIR = "lakewalker.startdir"; public static final String PREF_WAYTYPE = "lakewalker.waytype"; public static final String PREF_WMS = "lakewalker.wms"; public static final String PREF_SOURCE = "lakewalker.source"; public static final String PREF_MAXCACHESIZE = "lakewalker.maxcachesize"; public static final String PREF_MAXCACHEAGE = "lakewalker.maxcacheage"; protected IntConfigurer maxSegsConfig = new IntConfigurer(); protected JLabel maxSegsLabel = new JLabel(tr("Maximum number of segments per way")); protected IntConfigurer maxNodesConfig = new IntConfigurer(); protected JLabel maxNodesLabel = new JLabel(tr("Maximum number of nodes in initial trace")); protected IntConfigurer thresholdConfig = new IntConfigurer(); protected JLabel thresholdLabel = new JLabel(tr("Maximum gray value to count as water (0-255)")); protected DoubleConfigurer epsilonConfig = new DoubleConfigurer(); protected JLabel epsilonLabel = new JLabel(tr("Line simplification accuracy (degrees)")); protected IntConfigurer landsatResConfig = new IntConfigurer(); protected JLabel landsatResLabel = new JLabel(tr("Resolution of Landsat tiles (pixels per degree)")); protected IntConfigurer landsatSizeConfig = new IntConfigurer(); protected JLabel landsatSizeLabel = new JLabel(tr("Size of Landsat tiles (pixels)")); protected DoubleConfigurer eastOffsetConfig = new DoubleConfigurer(); protected JLabel eastOffsetLabel = new JLabel(tr("Shift all traces to east (degrees)")); protected DoubleConfigurer northOffsetConfig = new DoubleConfigurer(); protected JLabel northOffsetLabel = new JLabel(tr("Shift all traces to north (degrees)")); protected StringEnumConfigurer startDirConfig = new StringEnumConfigurer(DIRECTIONS); protected JLabel startDirLabel = new JLabel(tr("Direction to search for land")); protected StringEnumConfigurer lakeTypeConfig = new StringEnumConfigurer(WAYTYPES); protected JLabel lakeTypeLabel = new JLabel(tr("Tag ways as")); protected StringEnumConfigurer wmsConfig = new StringEnumConfigurer(WMSLAYERS); protected JLabel wmsLabel = new JLabel(tr("WMS Layer")); protected IntConfigurer maxCacheSizeConfig = new IntConfigurer(); protected JLabel maxCacheSizeLabel = new JLabel(tr("Maximum cache size (MB)")); protected IntConfigurer maxCacheAgeConfig = new IntConfigurer(); protected JLabel maxCacheAgeLabel = new JLabel(tr("Maximum cache age (days)")); protected StringConfigurer sourceConfig = new StringConfigurer(); protected JLabel sourceLabel = new JLabel(tr("Source text")); public LakewalkerPreferences() { super("lakewalker.png", I18n.tr("Lakewalker Plugin Preferences"), tr("A plugin to trace water bodies on Landsat imagery.")); } @Override public void addGui(PreferenceTabbedPane gui) { //CHECKSTYLE.OFF: LineLength maxSegsConfig.setToolTipText(tr("Maximum number of segments allowed in each generated way. Default 250.")); maxNodesConfig.setToolTipText(tr("Maximum number of nodes to generate before bailing out (before simplifying lines). Default 50000.")); thresholdConfig.setToolTipText(tr("Maximum gray value to accept as water (based on Landsat IR-1 data). Can be in the range 0-255. Default 90.")); epsilonConfig.setToolTipText("<html>" + tr("Accuracy of Douglas-Peucker line simplification, measured in degrees.<br>Lower values give more nodes, and more accurate lines. Default 0.0003.") + "</html>"); landsatResConfig.setToolTipText(tr("Resolution of Landsat tiles, measured in pixels per degree. Default 4000.")); landsatSizeConfig.setToolTipText(tr("Size of one landsat tile, measured in pixels. Default 2000.")); eastOffsetConfig.setToolTipText(tr("Offset all points in East direction (degrees). Default 0.")); northOffsetConfig.setToolTipText(tr("Offset all points in North direction (degrees). Default 0.")); startDirConfig.setToolTipText(tr("Direction to search for land. Default east.")); lakeTypeConfig.setToolTipText(tr("Tag ways as water, coastline, land or nothing. Default is water.")); wmsConfig.setToolTipText(tr("Which WMS layer to use for tracing against. Default is IR1.")); maxCacheSizeConfig.setToolTipText(tr("Maximum size of each cache directory in bytes. Default is 300MB")); maxCacheAgeConfig.setToolTipText(tr("Maximum age of each cached file in days. Default is 100")); sourceConfig.setToolTipText(tr("Data source text. Default is Landsat.")); //CHECKSTYLE.ON: LineLength /*String description =*/ tr("A plugin to trace water bodies on Landsat imagery."); JPanel prefPanel = gui.createPreferenceTab(this); buildPreferences(prefPanel); maxSegsConfig.setValue(Main.pref.getInteger(PREF_MAX_SEG, 500)); maxNodesConfig.setValue(Main.pref.getInteger(PREF_MAX_NODES, 50000)); thresholdConfig.setValue(Main.pref.getInteger(PREF_THRESHOLD_VALUE, 90)); epsilonConfig.setValue(Main.pref.getDouble(PREF_EPSILON, 0.0003)); landsatResConfig.setValue(Main.pref.getInteger(PREF_LANDSAT_RES, 4000)); landsatSizeConfig.setValue(Main.pref.getInteger(PREF_LANDSAT_SIZE, 2000)); eastOffsetConfig.setValue(Main.pref.getDouble(PREF_EAST_OFFSET, 0.0)); northOffsetConfig.setValue(Main.pref.getDouble(PREF_NORTH_OFFSET, 0.0)); startDirConfig.setValue(Main.pref.get(PREF_START_DIR, "east")); lakeTypeConfig.setValue(Main.pref.get(PREF_WAYTYPE, "water")); wmsConfig.setValue(Main.pref.get(PREF_WMS, "IR1")); sourceConfig.setValue(Main.pref.get(PREF_SOURCE, "Landsat")); maxCacheSizeConfig.setValue(Main.pref.getInteger(PREF_MAXCACHESIZE, 300)); maxCacheAgeConfig.setValue(Main.pref.getInteger(PREF_MAXCACHEAGE, 100)); } public void buildPreferences(JPanel prefPanel) { GBC labelConstraints = GBC.std().insets(10, 5, 5, 0); GBC dataConstraints = GBC.eol().insets(0, 5, 0, 0).fill(GridBagConstraints.HORIZONTAL); prefPanel.add(maxSegsLabel, labelConstraints); prefPanel.add(maxSegsConfig.getControls(), dataConstraints); prefPanel.add(maxNodesLabel, labelConstraints); prefPanel.add(maxNodesConfig.getControls(), dataConstraints); prefPanel.add(thresholdLabel, labelConstraints); prefPanel.add(thresholdConfig.getControls(), dataConstraints); prefPanel.add(epsilonLabel, labelConstraints); prefPanel.add(epsilonConfig.getControls(), dataConstraints); prefPanel.add(landsatResLabel, labelConstraints); prefPanel.add(landsatResConfig.getControls(), dataConstraints); prefPanel.add(landsatSizeLabel, labelConstraints); prefPanel.add(landsatSizeConfig.getControls(), dataConstraints); prefPanel.add(eastOffsetLabel, labelConstraints); prefPanel.add(eastOffsetConfig.getControls(), dataConstraints); prefPanel.add(northOffsetLabel, labelConstraints); prefPanel.add(northOffsetConfig.getControls(), dataConstraints); prefPanel.add(startDirLabel, labelConstraints); prefPanel.add(startDirConfig.getControls(), dataConstraints); prefPanel.add(lakeTypeLabel, labelConstraints); prefPanel.add(lakeTypeConfig.getControls(), dataConstraints); prefPanel.add(wmsLabel, labelConstraints); prefPanel.add(wmsConfig.getControls(), dataConstraints); prefPanel.add(maxCacheSizeLabel, labelConstraints); prefPanel.add(maxCacheSizeConfig.getControls(), dataConstraints); prefPanel.add(maxCacheAgeLabel, labelConstraints); prefPanel.add(maxCacheAgeConfig.getControls(), dataConstraints); prefPanel.add(sourceLabel, labelConstraints); prefPanel.add(sourceConfig.getControls(), dataConstraints); prefPanel.add(Box.createVerticalGlue(), GBC.eol().fill(GridBagConstraints.VERTICAL)); } /* * Save entered preference values on OK button */ @Override public boolean ok() { Main.pref.put(PREF_MAX_SEG, maxSegsConfig.getValueString()); Main.pref.put(PREF_MAX_NODES, maxNodesConfig.getValueString()); Main.pref.put(PREF_THRESHOLD_VALUE, thresholdConfig.getValueString()); Main.pref.put(PREF_EPSILON, epsilonConfig.getValueString()); Main.pref.put(PREF_LANDSAT_RES, landsatResConfig.getValueString()); Main.pref.put(PREF_LANDSAT_SIZE, landsatSizeConfig.getValueString()); Main.pref.put(PREF_EAST_OFFSET, eastOffsetConfig.getValueString()); Main.pref.put(PREF_NORTH_OFFSET, northOffsetConfig.getValueString()); Main.pref.put(PREF_START_DIR, startDirConfig.getValueString()); Main.pref.put(PREF_WAYTYPE, lakeTypeConfig.getValueString()); Main.pref.put(PREF_WMS, wmsConfig.getValueString()); Main.pref.put(PREF_MAXCACHESIZE, maxCacheSizeConfig.getValueString()); Main.pref.put(PREF_MAXCACHEAGE, maxCacheAgeConfig.getValueString()); Main.pref.put(PREF_SOURCE, sourceConfig.getValueString()); return false; } }