source: josm/src/org/openstreetmap/josm/gui/layer/RawGpsDataLayer.java@ 98

Last change on this file since 98 was 98, checked in by imi, 18 years ago
  • added Applet version of JOSM (unfinished)
  • fixed display bug if --no-fullscreen and --geometry was specified
File size: 4.7 KB
Line 
1package org.openstreetmap.josm.gui.layer;
2
3import java.awt.Color;
4import java.awt.Graphics;
5import java.awt.Point;
6import java.awt.event.ActionEvent;
7import java.awt.event.ActionListener;
8import java.util.Collection;
9
10import javax.swing.Icon;
11import javax.swing.JColorChooser;
12import javax.swing.JMenuItem;
13import javax.swing.JOptionPane;
14import javax.swing.JPopupMenu;
15
16import org.openstreetmap.josm.Main;
17import org.openstreetmap.josm.actions.GpxExportAction;
18import org.openstreetmap.josm.data.Preferences.PreferenceChangedListener;
19import org.openstreetmap.josm.data.coor.EastNorth;
20import org.openstreetmap.josm.data.coor.LatLon;
21import org.openstreetmap.josm.data.osm.visitor.BoundingXYVisitor;
22import org.openstreetmap.josm.gui.MapView;
23import org.openstreetmap.josm.gui.dialogs.LayerListPopup;
24import org.openstreetmap.josm.tools.ColorHelper;
25import org.openstreetmap.josm.tools.ImageProvider;
26
27/**
28 * A layer holding data from a gps source.
29 * The data is read only.
30 *
31 * @author imi
32 */
33public class RawGpsDataLayer extends Layer {
34
35 private static Icon icon;
36
37 public static class GpsPoint {
38 public final LatLon latlon;
39 public final EastNorth eastNorth;
40 public final String time;
41 public GpsPoint(LatLon ll, String t) {
42 latlon = ll;
43 eastNorth = Main.proj.latlon2eastNorth(ll);
44 time = t;
45 }
46 }
47
48 /**
49 * A list of ways which containing a list of points.
50 */
51 public final Collection<Collection<GpsPoint>> data;
52
53 public RawGpsDataLayer(Collection<Collection<GpsPoint>> data, String name) {
54 super(name);
55 this.data = data;
56 Main.pref.listener.add(new PreferenceChangedListener(){
57 public void preferenceChanged(String key, String newValue) {
58 if (Main.map != null && (key.equals("drawRawGpsLines") || key.equals("forceRawGpsLines")))
59 Main.map.repaint();
60 }
61 });
62 }
63
64 /**
65 * Return a static icon.
66 */
67 @Override public Icon getIcon() {
68 if (icon == null)
69 icon = ImageProvider.get("layer", "rawgps");
70 return icon;
71 }
72
73 @Override public void paint(Graphics g, MapView mv) {
74 String gpsCol = Main.pref.get("color.gps point");
75 String gpsColSpecial = Main.pref.get("color.layer "+name);
76 if (!gpsColSpecial.equals(""))
77 g.setColor(ColorHelper.html2color(gpsColSpecial));
78 else if (!gpsCol.equals(""))
79 g.setColor(ColorHelper.html2color(gpsCol));
80 else
81 g.setColor(Color.GRAY);
82 Point old = null;
83 for (Collection<GpsPoint> c : data) {
84 if (!Main.pref.getBoolean("forceRawGpsLines"))
85 old = null;
86 for (GpsPoint p : c) {
87 Point screen = mv.getPoint(p.eastNorth);
88 if (Main.pref.getBoolean("drawRawGpsLines") && old != null)
89 g.drawLine(old.x, old.y, screen.x, screen.y);
90 else
91 g.drawRect(screen.x, screen.y, 0, 0);
92 old = screen;
93 }
94 }
95 }
96
97 @Override public String getToolTipText() {
98 int points = 0;
99 for (Collection<GpsPoint> c : data)
100 points += c.size();
101 return data.size()+" tracks, "+points+" points.";
102 }
103
104 @Override public void mergeFrom(Layer from) {
105 RawGpsDataLayer layer = (RawGpsDataLayer)from;
106 data.addAll(layer.data);
107 }
108
109 @Override public boolean isMergable(Layer other) {
110 return other instanceof RawGpsDataLayer;
111 }
112
113 @Override public void visitBoundingBox(BoundingXYVisitor v) {
114 for (Collection<GpsPoint> c : data)
115 for (GpsPoint p : c)
116 v.visit(p.eastNorth);
117 }
118
119 @Override public Object getInfoComponent() {
120 StringBuilder b = new StringBuilder();
121 int points = 0;
122 for (Collection<GpsPoint> c : data) {
123 b.append("&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;a track with "+c.size()+" points<br>");
124 points += c.size();
125 }
126 b.append("</html>");
127 return "<html>"+name+" consists of "+data.size()+" tracks ("+points+" points)<br>"+b.toString();
128 }
129
130 @Override public void addMenuEntries(JPopupMenu menu) {
131 menu.add(new JMenuItem(new GpxExportAction(this)));
132
133 JMenuItem color = new JMenuItem("Customize Color", ImageProvider.get("colorchooser"));
134 color.addActionListener(new ActionListener(){
135 public void actionPerformed(ActionEvent e) {
136 String col = Main.pref.get("color.layer "+name, Main.pref.get("color.gps point", ColorHelper.color2html(Color.gray)));
137 JColorChooser c = new JColorChooser(ColorHelper.html2color(col));
138 Object[] options = new Object[]{"OK", "Cancel", "Default"};
139 int answer = JOptionPane.showOptionDialog(Main.parent, c, "Choose a color", JOptionPane.OK_CANCEL_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);
140 switch (answer) {
141 case 0:
142 Main.pref.put("color.layer "+name, ColorHelper.color2html(c.getColor()));
143 break;
144 case 1:
145 return;
146 case 2:
147 Main.pref.put("color.layer "+name, null);
148 break;
149 }
150 Main.map.repaint();
151 }
152 });
153 menu.add(color);
154
155 menu.addSeparator();
156 menu.add(new LayerListPopup.InfoAction(this));
157 }
158}
Note: See TracBrowser for help on using the repository browser.