package com.github.pfichtner.jrunalyser.ui.map.painter; import static com.github.pfichtner.jrunalyser.ui.map.util.GeoUtil.toGeoPoint; import java.awt.Graphics2D; import java.util.Collection; import java.util.Set; import org.jdesktop.swingx.JXMapViewer; import org.jdesktop.swingx.mapviewer.DefaultWaypointRenderer; import org.jdesktop.swingx.mapviewer.Waypoint; import org.jdesktop.swingx.mapviewer.WaypointPainter; import org.jdesktop.swingx.mapviewer.WaypointRenderer; import com.github.pfichtner.jrunalyser.base.data.WayPoint; import com.github.pfichtner.jrunalyser.base.data.track.Track; import com.github.pfichtner.jrunalyser.base.datasource.DatasourceFascade; import com.github.pfichtner.jrunalyser.ui.map.wp.MarkedWaypoint; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; public class MarkedWaypointPainter extends WaypointPainter<JXMapViewer> { public class MarkedWaypointRenderer implements WaypointRenderer { private final DefaultWaypointRenderer delegate = new DefaultWaypointRenderer(); @Override public boolean paintWaypoint(Graphics2D g, JXMapViewer map, Waypoint wp) { boolean b = this.delegate.paintWaypoint(g, map, wp); g.drawString(((MarkedWaypoint) wp).getName(), 15, -15); return b; } } public MarkedWaypointPainter(DatasourceFascade dsf, Track track) { setWaypoints(ImmutableSet.<Waypoint> builder() .addAll(convert(track.getWaypoints())) .addAll(convert(dsf.getCommonWaypoints())).build()); setRenderer(new MarkedWaypointRenderer()); } private Set<Waypoint> convert(Collection<? extends WayPoint> commonWaypoints) { Set<Waypoint> waypoints = Sets.newHashSet(); for (WayPoint wp : commonWaypoints) { waypoints.add(convert(wp)); } return waypoints; } private MarkedWaypoint convert(WayPoint wp) { return new MarkedWaypoint(toGeoPoint(wp), wp.getName()); } }