Changeset 5684 in josm for trunk/src/org/openstreetmap/josm/gui
- Timestamp:
- 2013-01-28T14:06:52+01:00 (13 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/gui/layer/markerlayer
- Files:
-
- 6 edited
-
AudioMarker.java (modified) (2 diffs)
-
ImageMarker.java (modified) (3 diffs)
-
Marker.java (modified) (11 diffs)
-
MarkerLayer.java (modified) (2 diffs)
-
MarkerProducers.java (modified) (1 diff)
-
WebMarker.java (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/AudioMarker.java
r4282 r5684 4 4 import java.awt.event.ActionEvent; 5 5 import java.net.URL; 6 import java.util.Collections; 6 7 7 8 import org.openstreetmap.josm.Main; 8 9 import org.openstreetmap.josm.data.coor.LatLon; 10 import org.openstreetmap.josm.data.gpx.GpxConstants; 11 import org.openstreetmap.josm.data.gpx.GpxLink; 12 import org.openstreetmap.josm.data.gpx.WayPoint; 9 13 import org.openstreetmap.josm.tools.AudioPlayer; 10 14 import org.openstreetmap.josm.tools.template_engine.TemplateEngineDataProvider; … … 77 81 return TemplateEntryProperty.forAudioMarker(parentLayer.getName()); 78 82 } 83 84 @Override 85 public WayPoint convertToWayPoint() { 86 WayPoint wpt = super.convertToWayPoint(); 87 GpxLink link = new GpxLink(audioUrl.toString()); 88 link.type = "audio"; 89 wpt.attr.put(GpxConstants.META_LINKS, Collections.singleton(link)); 90 wpt.addExtension("offset", Double.toString(offset)); 91 wpt.addExtension("sync-offset", Double.toString(syncOffset)); 92 return wpt; 93 } 79 94 } -
trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/ImageMarker.java
r4282 r5684 8 8 import java.awt.event.ActionListener; 9 9 import java.net.URL; 10 import java.util.Collections; 10 11 11 12 import javax.swing.Icon; … … 21 22 import org.openstreetmap.josm.Main; 22 23 import org.openstreetmap.josm.data.coor.LatLon; 24 import org.openstreetmap.josm.data.gpx.GpxConstants; 25 import org.openstreetmap.josm.data.gpx.GpxLink; 26 import org.openstreetmap.josm.data.gpx.WayPoint; 23 27 import org.openstreetmap.josm.tools.ImageProvider; 24 28 … … 83 87 } 84 88 89 @Override 90 public WayPoint convertToWayPoint() { 91 WayPoint wpt = super.convertToWayPoint(); 92 GpxLink link = new GpxLink(imageUrl.toString()); 93 link.type = "image"; 94 wpt.attr.put(GpxConstants.META_LINKS, Collections.singleton(link)); 95 return wpt; 96 } 97 85 98 } -
trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/Marker.java
r5681 r5684 8 8 import java.net.MalformedURLException; 9 9 import java.net.URL; 10 import java.text.DateFormat; 11 import java.text.SimpleDateFormat; 10 12 import java.util.ArrayList; 11 13 import java.util.Collection; 14 import java.util.Date; 12 15 import java.util.HashMap; 13 16 import java.util.LinkedList; 14 17 import java.util.List; 15 18 import java.util.Map; 19 import java.util.TimeZone; 16 20 17 21 import javax.swing.Icon; … … 23 27 import org.openstreetmap.josm.data.coor.EastNorth; 24 28 import org.openstreetmap.josm.data.coor.LatLon; 29 import org.openstreetmap.josm.data.gpx.Extensions; 25 30 import org.openstreetmap.josm.data.gpx.GpxConstants; 26 31 import org.openstreetmap.josm.data.gpx.GpxLink; … … 181 186 Marker.markerProducers.add(new MarkerProducers() { 182 187 @SuppressWarnings("unchecked") 188 @Override 183 189 public Marker createMarker(WayPoint wpt, File relativePath, MarkerLayer parentLayer, double time, double offset) { 184 190 String uri = null; … … 217 223 } 218 224 else if (url.toString().endsWith(".wav")) { 219 return new AudioMarker(wpt.getCoor(), wpt, url, parentLayer, time, offset); 225 AudioMarker audioMarker = new AudioMarker(wpt.getCoor(), wpt, url, parentLayer, time, offset); 226 Extensions exts = (Extensions) wpt.get(GpxConstants.META_EXTENSIONS); 227 if (exts != null && exts.containsKey("offset")) { 228 try { 229 double syncOffset = Double.parseDouble(exts.get("sync-offset")); 230 audioMarker.syncOffset = syncOffset; 231 } catch (NumberFormatException nfe) {} 232 } 233 return audioMarker; 220 234 } else if (url.toString().endsWith(".png") || url.toString().endsWith(".jpg") || url.toString().endsWith(".jpeg") || url.toString().endsWith(".gif")) { 221 235 return new ImageMarker(wpt.getCoor(), url, parentLayer, time, offset); … … 234 248 * @param relativePath An path to use for constructing relative URLs or 235 249 * <code>null</code> for no relative URLs 250 * @param parentLayer the <code>MarkerLayer</code> that will contain the created <code>Marker</code> 251 * @param time time of the marker in seconds since epoch 236 252 * @param offset double in seconds as the time offset of this marker from 237 253 * the GPX file from which it was derived (if any). … … 247 263 } 248 264 265 private static final DateFormat timeFormatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 266 static { 267 TimeZone tz = TimeZone.getTimeZone("UTC"); 268 timeFormatter.setTimeZone(tz); 269 } 270 249 271 public static final String MARKER_OFFSET = "waypointOffset"; 250 272 public static final String MARKER_FORMATTED_OFFSET = "formattedWaypointOffset"; … … 254 276 public static final String LABEL_PATTERN_DESC = "{desc}"; 255 277 256 257 278 private final TemplateEngineDataProvider dataProvider; 258 279 private final String text; … … 260 281 public final Icon symbol; 261 282 public final MarkerLayer parentLayer; 262 public double time; /* absolute time of marker since epoch */ 283 public double time; /* absolute time of marker in seconds since epoch */ 263 284 public double offset; /* time offset in seconds from the gpx point from which it was derived, 264 285 may be adjusted later to sync with other data, so not final */ … … 296 317 } 297 318 319 /** 320 * Convert Marker to WayPoint so it can be exported to a GPX file. 321 * 322 * Override in subclasses to add all necessary attributes. 323 * 324 * @return the corresponding WayPoint with all relevant attributes 325 */ 326 public WayPoint convertToWayPoint() { 327 WayPoint wpt = new WayPoint(getCoor()); 328 wpt.put("time", timeFormatter.format(new Date(Math.round(time * 1000)))); 329 if (text != null) { 330 wpt.addExtension("text", text); 331 } else if (dataProvider != null) { 332 for (String key : dataProvider.getTemplateKeys()) { 333 Object value = dataProvider.getTemplateValue(key, false); 334 if (value != null && GpxConstants.WPT_KEYS.contains(key)) { 335 wpt.put(key, value); 336 } 337 } 338 } 339 return wpt; 340 } 341 298 342 public final void setCoor(LatLon coor) { 299 343 if(this.coor == null) { … … 343 387 * @param mv map view 344 388 * @param mousePressed true if the left mouse button is pressed 389 * @param showTextOrIcon true if text and icon shall be drawn 345 390 */ 346 391 public void paint(Graphics g, MapView mv, boolean mousePressed, boolean showTextOrIcon) { … … 398 443 } 399 444 400 private String formatOffset () {445 private String formatOffset() { 401 446 int wholeSeconds = (int)(offset + 0.5); 402 447 if (wholeSeconds < 60) -
trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerLayer.java
r5681 r5684 32 32 import org.openstreetmap.josm.data.Bounds; 33 33 import org.openstreetmap.josm.data.coor.LatLon; 34 import org.openstreetmap.josm.data.gpx.Extensions; 34 35 import org.openstreetmap.josm.data.gpx.GpxConstants; 35 36 import org.openstreetmap.josm.data.gpx.GpxData; … … 108 109 } 109 110 } 110 Marker m = Marker.createMarker(wpt, indata.storageFile, this, time, time - firstTime); 111 Double offset = null; 112 // If we have an explicit offset, take it. 113 // Otherwise, for a group of markers with the same Link-URI (e.g. an 114 // audio file) calculate the offset relative to the first marker of 115 // that group. This way the user can jump to the corresponding 116 // playback positions in a long audio track. 117 Extensions exts = (Extensions) wpt.get(GpxConstants.META_EXTENSIONS); 118 if (exts != null && exts.containsKey("offset")) { 119 try { 120 offset = Double.parseDouble(exts.get("offset")); 121 } catch (NumberFormatException nfe) {} 122 } 123 if (offset == null) { 124 offset = time - firstTime; 125 } 126 Marker m = Marker.createMarker(wpt, indata.storageFile, this, time, offset); 111 127 if (m != null) { 112 128 data.add(m); -
trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/MarkerProducers.java
r1169 r5684 24 24 * @return A Marker object, or <code>null</code>. 25 25 */ 26 publicMarker createMarker(WayPoint wp, File relativePath, MarkerLayer parentLayer, double time, double offset);26 Marker createMarker(WayPoint wp, File relativePath, MarkerLayer parentLayer, double time, double offset); 27 27 } -
trunk/src/org/openstreetmap/josm/gui/layer/markerlayer/WebMarker.java
r4282 r5684 6 6 import java.awt.event.ActionEvent; 7 7 import java.net.URL; 8 import java.util.Collections; 8 9 9 10 import javax.swing.JOptionPane; … … 11 12 import org.openstreetmap.josm.Main; 12 13 import org.openstreetmap.josm.data.coor.LatLon; 14 import org.openstreetmap.josm.data.gpx.GpxConstants; 15 import org.openstreetmap.josm.data.gpx.GpxLink; 16 import org.openstreetmap.josm.data.gpx.WayPoint; 13 17 import org.openstreetmap.josm.tools.OpenBrowser; 14 18 … … 38 42 } 39 43 } 44 45 @Override 46 public WayPoint convertToWayPoint() { 47 WayPoint wpt = super.convertToWayPoint(); 48 GpxLink link = new GpxLink(webUrl.toString()); 49 link.type = "web"; 50 wpt.attr.put(GpxConstants.META_LINKS, Collections.singleton(link)); 51 return wpt; 52 } 40 53 }
Note:
See TracChangeset
for help on using the changeset viewer.
