Ticket #3617: WaypointConfigurableTextPreferences.patch
| File WaypointConfigurableTextPreferences.patch, 12.1 KB (added by , 16 years ago) |
|---|
-
src/org/openstreetmap/josm/gui/layer/markerlayer/ButtonMarker.java
# This patch file was generated by NetBeans IDE # This patch can be applied using context Tools: Patch action on respective folder. # It uses platform neutral UTF-8 encoding and \n newlines. # Above lines and this line are ignored by the patching process.
25 25 private Rectangle buttonRectangle; 26 26 27 27 public ButtonMarker(LatLon ll, String buttonImage, MarkerLayer parentLayer, double time, double offset) { 28 super(ll, null, buttonImage, parentLayer, time, offset);28 super(ll, "", buttonImage, parentLayer, time, offset); 29 29 buttonRectangle = new Rectangle(0, 0, symbol.getIconWidth(), symbol.getIconHeight()); 30 30 } 31 31 … … 61 61 Rectangle r = new Rectangle(buttonRectangle); 62 62 r.grow((inset.top+inset.bottom)/2, (inset.left+inset.right)/2); 63 63 b.paintBorder(mv, g, r.x, r.y, r.width, r.height); 64 if ((text != null) && showTextOrIcon && Main.pref.getBoolean("marker.buttonlabels", true)) { 65 g.drawString(text, screen.x+4, screen.y+2); 64 65 String labelText = getText(); 66 if ((labelText != null) && showTextOrIcon && Main.pref.getBoolean("marker.buttonlabels", true)) { 67 g.drawString(labelText, screen.x+4, screen.y+2); 66 68 } 67 69 } 68 70 } -
src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
9 9 import java.net.MalformedURLException; 10 10 import java.net.URL; 11 11 import java.util.Collection; 12 import java.util.HashMap; 12 13 import java.util.LinkedList; 13 14 15 import java.util.Map; 14 16 import javax.swing.Icon; 15 17 16 18 import org.openstreetmap.josm.data.coor.CachedLatLon; … … 19 21 import org.openstreetmap.josm.data.gpx.GpxData; 20 22 import org.openstreetmap.josm.data.gpx.GpxLink; 21 23 import org.openstreetmap.josm.data.gpx.WayPoint; 22 import org.openstreetmap.josm.data.preferences. StringProperty;24 import org.openstreetmap.josm.data.preferences.IntegerProperty; 23 25 import org.openstreetmap.josm.gui.MapView; 24 26 import org.openstreetmap.josm.tools.ImageProvider; 25 27 … … 60 62 */ 61 63 public class Marker implements ActionListener { 62 64 public final String text; 65 public final Map<String,String> textMap = new HashMap<String,String>(); 63 66 public final Icon symbol; 64 67 public final MarkerLayer parentLayer; 65 68 public double time; /* absolute time of marker since epoch */ … … 95 98 */ 96 99 public static LinkedList<MarkerProducers> markerProducers = new LinkedList<MarkerProducers>(); 97 100 98 private static final StringProperty PROP_NAME_DESC = new StringProperty( "draw.gpx.layer.wpt", "nameordesc" ); 101 private static final IntegerProperty PROP_LABEL = new IntegerProperty( "draw.rawgps.layer.wpt", 0 ); 102 private static final String[] labelAttributes = new String[]{"name", "desc"}; 99 103 100 104 // Add one Maker specifying the default behaviour. 101 105 static { … … 117 121 uri = new File(relativePath.getParentFile(), uri).toURI().toString(); 118 122 } 119 123 120 String name_desc = ""; 121 if (PROP_NAME_DESC.get() == null || "nameordesc".equals(PROP_NAME_DESC.get())) 122 { 123 if (wpt.attr.containsKey("name")) { 124 name_desc = wpt.getString("name"); 125 } else if (wpt.attr.containsKey("desc")) { 126 name_desc = wpt.getString("desc"); 124 Map<String,String> name_desc = new HashMap<String,String>(); 125 for(String attribute:labelAttributes) { 126 if (wpt.attr.containsKey(attribute)) { 127 name_desc.put(attribute,wpt.getString(attribute)); 127 128 } 128 } else if ("name".equals(PROP_NAME_DESC.get())) {129 if (wpt.attr.containsKey("name")) {130 name_desc = wpt.getString("name");131 129 } 132 }133 else if ("desc".equals(PROP_NAME_DESC.get())) {134 if (wpt.attr.containsKey("desc")) {135 name_desc = wpt.getString("desc");136 }137 }138 else if ("both".equals(PROP_NAME_DESC.get()) ) {139 if (wpt.attr.containsKey("name")) {140 name_desc = wpt.getString("name");141 130 142 if (wpt.attr.containsKey("desc")) {143 name_desc += " (" + wpt.getString("desc") + ")" ;144 }145 } else if (wpt.attr.containsKey("desc")) {146 name_desc = wpt.getString("desc");147 }148 }149 150 131 if (uri == null) { 151 132 String symbolName = wpt.getString("symbol"); 152 133 if (symbolName == null) { … … 155 136 return new Marker(wpt.getCoor(), name_desc, symbolName, parentLayer, time, offset); 156 137 } 157 138 else if (uri.endsWith(".wav")) 158 return AudioMarker.create(wpt.getCoor(), name_desc, uri, parentLayer, time, offset);139 return AudioMarker.create(wpt.getCoor(), getText(name_desc), uri, parentLayer, time, offset); 159 140 else if (uri.endsWith(".png") || uri.endsWith(".jpg") || uri.endsWith(".jpeg") || uri.endsWith(".gif")) 160 141 return ImageMarker.create(wpt.getCoor(), uri, parentLayer, time, offset); 161 142 else … … 175 156 176 157 public Marker(LatLon ll, String text, String iconName, MarkerLayer parentLayer, double time, double offset) { 177 158 setCoor(ll); 159 if (text != null && text.length() == 0) { 160 this.text = null; 161 } 162 else { 178 163 this.text = text; 164 } 179 165 this.offset = offset; 180 166 this.time = time; 181 167 this.symbol = ImageProvider.getIfAvailable("markers",iconName); 182 168 this.parentLayer = parentLayer; 183 169 } 184 170 171 public Marker(LatLon ll, Map<String,String> textMap, String iconName, MarkerLayer parentLayer, double time, double offset) { 172 setCoor(ll); 173 if (textMap!=null) { 174 for(String txt:textMap.keySet()) { 175 String tmpText = textMap.get(txt); 176 if (tmpText!=null) { 177 this.textMap.put(txt,tmpText); 178 } 179 } 180 } 181 this.text = null; 182 this.offset = offset; 183 this.time = time; 184 this.symbol = ImageProvider.getIfAvailable("markers",iconName); 185 this.parentLayer = parentLayer; 186 } 187 185 188 /** 186 189 * Checks whether the marker display area contains the given point. 187 190 * Markers not interested in mouse clicks may always return false. … … 217 220 g.drawLine(screen.x+2, screen.y-2, screen.x-2, screen.y+2); 218 221 } 219 222 220 if ((text != null) && showTextOrIcon) { 221 g.drawString(text, screen.x+4, screen.y+2); 223 String labelText = getText(); 224 if ((labelText != null) && showTextOrIcon) { 225 g.drawString(labelText, screen.x+4, screen.y+2); 222 226 } 223 227 } 224 228 … … 253 257 */ 254 258 255 259 public AudioMarker audioMarkerFromMarker(String uri) { 256 AudioMarker audioMarker = AudioMarker.create(getCoor(), this. text, uri, this.parentLayer, this.time, this.offset);260 AudioMarker audioMarker = AudioMarker.create(getCoor(), this.getText(), uri, this.parentLayer, this.time, this.offset); 257 261 return audioMarker; 258 262 } 263 264 /** 265 * Returns the Text which should be displayed, depending on chosen preference 266 * @return Text 267 */ 268 public String getText() { 269 if (this.text != null ) { 270 return this.text; 259 271 } 272 else { 273 return getText(this.textMap); 274 } 275 } 276 277 /** 278 * Returns the Text which should be displayed, depending on chosen preference. 279 * The possible attributes are read from textMap. 280 * 281 * @param textMap A map with available texts/attributes 282 * @return Text 283 */ 284 private static String getText(Map<String,String> textMap) { 285 String text = ""; 286 287 if (textMap != null && !textMap.isEmpty()) { 288 switch(PROP_LABEL.get()) 289 { 290 // name 291 case 1: 292 { 293 if (textMap.containsKey("name")) { 294 text = textMap.get("name"); 295 } 296 break; 297 } 298 299 // desc 300 case 2: 301 { 302 if (textMap.containsKey("desc")) { 303 text = textMap.get("desc"); 304 } 305 break; 306 } 307 308 // auto 309 case 0: 310 // both 311 case 3: 312 { 313 if (textMap.containsKey("name")) { 314 text = textMap.get("name"); 315 316 if (textMap.containsKey("desc")) { 317 if (PROP_LABEL.get() != 0 || !text.equals(textMap.get("desc"))) { 318 text += " - " + textMap.get("desc"); 319 } 320 } 321 } 322 else if (textMap.containsKey("desc")) { 323 text = textMap.get("desc"); 324 } 325 break; 326 } 327 328 // none 329 case 4: 330 default: 331 { 332 text = ""; 333 break; 334 } 335 } 336 } 337 338 return text; 339 } 340 } -
src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
58 58 private JCheckBox inactive = new JCheckBox(tr("Draw inactive layers in other color")); 59 59 private JCheckBox useAntialiasing = new JCheckBox(tr("Smooth map graphics (antialiasing)")); 60 60 private JCheckBox makeAutoMarkers = new JCheckBox(tr("Create markers when reading GPX.")); 61 private JComboBox waypointLabel = new JComboBox(new String[] {tr("Auto"), tr("Name"), tr("Desc"), tr("Both"), tr("None")}); 61 62 62 63 public void addGui(PreferenceTabbedPane gui) { 63 64 gui.display.setPreferredSize(new Dimension(400,600)); … … 203 204 panel.add(colorTypeVelocityTune, GBC.eop().insets(5,0,0,5)); 204 205 panel.add(colorTypeDilution, GBC.eol().insets(40,0,0,0)); 205 206 207 // waypointLabel 208 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0)); 209 210 waypointLabel.setSelectedIndex(Main.pref.getInteger("draw.rawgps.layer.wpt", 0 )); 211 colorTypeDilution.setToolTipText(tr("Allows to change the labelling of track waypoints.")); 212 panel.add(new JLabel(tr("Waypoint labelling")), GBC.std().insets(20,0,0,0)); 213 panel.add(waypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 214 206 215 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH)); 207 216 JScrollPane scrollpane = new JScrollPane(panel); 208 217 scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 )); … … 305 314 } } 306 315 else { vn = 0; } 307 316 Main.pref.putInteger("mappaint.node.virtual-size", vn); 317 if (Main.pref.getInteger("draw.rawgps.layer.wpt",-1) != waypointLabel.getSelectedIndex()) { 318 Main.pref.putInteger( "draw.rawgps.layer.wpt", waypointLabel.getSelectedIndex()); 319 Main.map.repaint(); 320 } 308 321 return false; 309 322 } 310 323 }
