source: josm/trunk/src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java@ 3994

Last change on this file since 3994 was 3994, checked in by mjulius, 13 years ago

fix #6113 - removing "mandatory" arrows on some types of ways
Since oneway arrows are now different from way direction arrows they need to be treated separately.
They now can be turned on and off independently.

  • Property svn:eol-style set to native
File size: 18.0 KB
Line 
1// License: GPL. Copyright 2007 by Immanuel Scholz and others
2package org.openstreetmap.josm.gui.preferences;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5import static org.openstreetmap.josm.tools.I18n.trc;
6
7import java.awt.Dimension;
8import java.awt.GridBagLayout;
9import java.awt.event.ActionEvent;
10import java.awt.event.ActionListener;
11
12import javax.swing.BorderFactory;
13import javax.swing.Box;
14import javax.swing.ButtonGroup;
15import javax.swing.JCheckBox;
16import javax.swing.JComboBox;
17import javax.swing.JLabel;
18import javax.swing.JPanel;
19import javax.swing.JRadioButton;
20import javax.swing.JScrollPane;
21import javax.swing.JTextField;
22import javax.swing.event.ChangeEvent;
23import javax.swing.event.ChangeListener;
24
25import org.openstreetmap.josm.Main;
26import org.openstreetmap.josm.tools.GBC;
27
28public class DrawingPreference implements PreferenceSetting {
29
30 public static class Factory implements PreferenceSettingFactory {
31 public PreferenceSetting createPreferenceSetting() {
32 return new DrawingPreference();
33 }
34 }
35
36 private JRadioButton drawRawGpsLinesAll = new JRadioButton(tr("All"));
37 private JRadioButton drawRawGpsLinesLocal = new JRadioButton(tr("Local files"));
38 private JRadioButton drawRawGpsLinesNone = new JRadioButton(tr("None"));
39 private ActionListener drawRawGpsLinesActionListener;
40 private JTextField drawRawGpsMaxLineLength = new JTextField(8);
41 private JTextField drawRawGpsMaxLineLengthLocal = new JTextField(8);
42 private JCheckBox forceRawGpsLines = new JCheckBox(tr("Force lines if no segments imported."));
43 private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points."));
44 private JCheckBox hdopCircleGpsPoints = new JCheckBox(tr("Draw a circle form HDOP value."));
45 private ButtonGroup colorGroup;
46 private JRadioButton colorTypeVelocity = new JRadioButton(tr("Velocity (red = slow, green = fast)"));
47 private JRadioButton colorTypeDilution = new JRadioButton(tr("Dilution of Position (red = high, green = low, if available)"));
48 private JRadioButton colorTypeNone = new JRadioButton(tr("Single Color (can be customized for named layers)"));
49 private JComboBox colorTypeVelocityTune = new JComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")});
50 private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows"));
51 private JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows"));
52 private JCheckBox drawGpsArrowsFast = new JCheckBox(tr("Fast drawing (looks uglier)"));
53 private JTextField drawGpsArrowsMinDist = new JTextField(8);
54 private JCheckBox headArrow = new JCheckBox(tr("Only on the head of a way."));
55 private JCheckBox onewayArrow = new JCheckBox(tr("Draw oneway arrows."));
56 private JCheckBox segmentOrderNumber = new JCheckBox(tr("Draw segment order numbers"));
57 private JCheckBox sourceBounds = new JCheckBox(tr("Draw boundaries of downloaded data"));
58 private JCheckBox virtualNodes = new JCheckBox(tr("Draw virtual nodes in select mode"));
59 private JCheckBox inactive = new JCheckBox(tr("Draw inactive layers in other color"));
60 private JCheckBox useAntialiasing = new JCheckBox(tr("Smooth map graphics (antialiasing)"));
61 private JCheckBox makeAutoMarkers = new JCheckBox(tr("Create markers when reading GPX."));
62 private JCheckBox outlineOnly = new JCheckBox(tr("Draw only outlines of areas"));
63 private JComboBox waypointLabel = new JComboBox(new String[] {tr("Auto"), /* gpx data field name */ trc("gpx_field", "Name"),
64 /* gpx data field name */ trc("gpx_field", "Desc(ription)"), tr("Both"), tr("None")});
65
66 public void addGui(PreferenceTabbedPane gui) {
67 gui.display.setPreferredSize(new Dimension(400,600));
68 JPanel panel = new JPanel(new GridBagLayout());
69 panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
70
71 // makeAutoMarkers
72 makeAutoMarkers.setSelected(Main.pref.getBoolean("marker.makeautomarkers", true));
73 makeAutoMarkers.setToolTipText(tr("Automatically make a marker layer from any waypoints when opening a GPX layer."));
74 panel.add(makeAutoMarkers, GBC.eol().insets(20,0,0,5));
75
76 // drawRawGpsLines
77 ButtonGroup gpsLinesGroup = new ButtonGroup();
78 gpsLinesGroup.add(drawRawGpsLinesNone);
79 gpsLinesGroup.add(drawRawGpsLinesLocal);
80 gpsLinesGroup.add(drawRawGpsLinesAll);
81
82
83 /* ensure that default is in data base */
84 Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.localfiles", false);
85 if(Main.pref.getBoolean("draw.rawgps.lines", true)) {
86 drawRawGpsLinesAll.setSelected(true);
87 } else if (lf) {
88 drawRawGpsLinesLocal.setSelected(true);
89 } else {
90 drawRawGpsLinesNone.setSelected(true);
91 }
92
93 panel.add(new JLabel(tr("Draw lines between raw GPS points")), GBC.eol().insets(20,0,0,0));
94 panel.add(drawRawGpsLinesNone, GBC.eol().insets(40,0,0,0));
95 panel.add(drawRawGpsLinesLocal, GBC.eol().insets(40,0,0,0));
96 panel.add(drawRawGpsLinesAll, GBC.eol().insets(40,0,0,0));
97
98 drawRawGpsLinesActionListener = new ActionListener(){
99 public void actionPerformed(ActionEvent e) {
100 forceRawGpsLines.setEnabled(!drawRawGpsLinesNone.isSelected());
101 drawRawGpsMaxLineLength.setEnabled(!(drawRawGpsLinesNone.isSelected() || drawRawGpsLinesLocal.isSelected()));
102 drawRawGpsMaxLineLengthLocal.setEnabled(!drawRawGpsLinesNone.isSelected());
103 drawGpsArrows.setEnabled(!drawRawGpsLinesNone.isSelected() );
104 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
105 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
106 }
107 };
108
109 drawRawGpsLinesNone.addActionListener(drawRawGpsLinesActionListener);
110 drawRawGpsLinesLocal.addActionListener(drawRawGpsLinesActionListener);
111 drawRawGpsLinesAll.addActionListener(drawRawGpsLinesActionListener);
112
113 // drawRawGpsMaxLineLengthLocal
114 drawRawGpsMaxLineLengthLocal.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length.local", -1)));
115 drawRawGpsMaxLineLengthLocal.setToolTipText(tr("Maximum length (in meters) to draw lines for local files. Set to ''-1'' to draw all lines."));
116 drawRawGpsMaxLineLengthLocal.setEnabled(!drawRawGpsLinesNone.isSelected());
117 panel.add(new JLabel(tr("Maximum length for local files (meters)")), GBC.std().insets(40,0,0,0));
118 panel.add(drawRawGpsMaxLineLengthLocal, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
119
120 // drawRawGpsMaxLineLength
121 drawRawGpsMaxLineLength.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length", 200)));
122 drawRawGpsMaxLineLength.setToolTipText(tr("Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines."));
123 drawRawGpsMaxLineLength.setEnabled(!drawRawGpsLinesNone.isSelected());
124 panel.add(new JLabel(tr("Maximum length (meters)")), GBC.std().insets(40,0,0,0));
125 panel.add(drawRawGpsMaxLineLength, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
126
127 // forceRawGpsLines
128 forceRawGpsLines.setToolTipText(tr("Force drawing of lines if the imported data contain no line information."));
129 forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force", false));
130 forceRawGpsLines.setEnabled(!drawRawGpsLinesNone.isSelected());
131 panel.add(forceRawGpsLines, GBC.eop().insets(40,0,0,0));
132
133 // drawGpsArrows
134 drawGpsArrows.addActionListener(new ActionListener(){
135 public void actionPerformed(ActionEvent e) {
136 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
137 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
138 }
139 });
140 drawGpsArrows.setToolTipText(tr("Draw direction arrows for lines, connecting GPS points."));
141 drawGpsArrows.setSelected(Main.pref.getBoolean("draw.rawgps.direction", false));
142 drawGpsArrows.setEnabled(!drawRawGpsLinesNone.isSelected());
143 panel.add(drawGpsArrows, GBC.eop().insets(40,0,0,0));
144
145 // drawGpsArrowsFast
146 drawGpsArrowsFast.setToolTipText(tr("Draw the direction arrows using table lookups instead of complex math."));
147 drawGpsArrowsFast.setSelected(Main.pref.getBoolean("draw.rawgps.alternatedirection", false));
148 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
149 panel.add(drawGpsArrowsFast, GBC.eop().insets(60,0,0,0));
150
151 // drawGpsArrowsMinDist
152 drawGpsArrowsMinDist.setToolTipText(tr("Do not draw arrows if they are not at least this distance away from the last one."));
153 drawGpsArrowsMinDist.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.min-arrow-distance", 0)));
154 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled());
155 panel.add(new JLabel(tr("Minimum distance (pixels)")), GBC.std().insets(60,0,0,0));
156 panel.add(drawGpsArrowsMinDist, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
157
158 // hdopCircleGpsPoints
159 hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle", true));
160 hdopCircleGpsPoints.setToolTipText(tr("Draw a circle form HDOP value."));
161 panel.add(hdopCircleGpsPoints, GBC.eop().insets(20,0,0,0));
162
163 // largeGpsPoints
164 largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large", false));
165 largeGpsPoints.setToolTipText(tr("Draw larger dots for the GPS points."));
166 panel.add(largeGpsPoints, GBC.eop().insets(20,0,0,0));
167
168 // colorTracks
169 colorGroup = new ButtonGroup();
170 colorGroup.add(colorTypeNone);
171 colorGroup.add(colorTypeVelocity);
172 colorGroup.add(colorTypeDilution);
173
174 colorTypeVelocity.addChangeListener(new ChangeListener(){
175 public void stateChanged(ChangeEvent e) {
176 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected());
177 }
178 });
179
180 switch(Main.pref.getInteger("draw.rawgps.colors", 0)) {
181 case 0:
182 colorTypeNone.setSelected(true);
183 break;
184 case 1:
185 colorTypeVelocity.setSelected(true);
186 break;
187 case 2:
188 colorTypeDilution.setSelected(true);
189 break;
190 }
191
192 colorTypeNone.setToolTipText(tr("All points and track segments will have the same color. Can be customized in Layer Manager."));
193 colorTypeVelocity.setToolTipText(tr("Colors points and track segments by velocity."));
194 colorTypeDilution.setToolTipText(tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information."));
195
196 // color Tracks by Velocity Tune
197 int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune", 45);
198 colorTypeVelocityTune.setSelectedIndex(ccts==10 ? 2 : (ccts==20 ? 1 : 0));
199 colorTypeVelocityTune.setToolTipText(tr("Allows to tune the track coloring for different average speeds."));
200 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected() && colorTypeVelocity.isEnabled());
201
202 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
203
204 panel.add(new JLabel(tr("Track and Point Coloring")), GBC.eol().insets(20,0,0,0));
205 panel.add(colorTypeNone, GBC.eol().insets(40,0,0,0));
206 panel.add(colorTypeVelocity, GBC.std().insets(40,0,0,0));
207 panel.add(colorTypeVelocityTune, GBC.eop().insets(5,0,0,5));
208 panel.add(colorTypeDilution, GBC.eol().insets(40,0,0,0));
209
210 // waypointLabel
211 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0));
212
213 waypointLabel.setSelectedIndex(Main.pref.getInteger("draw.rawgps.layer.wpt", 0 ));
214 colorTypeDilution.setToolTipText(tr("Allows to change the labelling of track waypoints."));
215 panel.add(new JLabel(tr("Waypoint labelling")), GBC.std().insets(20,0,0,0));
216 panel.add(waypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5));
217
218 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
219 JScrollPane scrollpane = new JScrollPane(panel);
220 scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
221 gui.displaycontent.addTab(tr("GPS Points"), scrollpane);
222 panel = new JPanel(new GridBagLayout());
223 panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5));
224
225 // directionHint
226 directionHint.addActionListener(new ActionListener(){
227 public void actionPerformed(ActionEvent e) {
228 if (directionHint.isSelected()){
229 headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
230 }else{
231 headArrow.setSelected(false);
232 }
233 headArrow.setEnabled(directionHint.isSelected());
234 }
235 });
236 directionHint.setToolTipText(tr("Draw direction hints for way segments."));
237 directionHint.setSelected(Main.pref.getBoolean("draw.segment.direction", true));
238 panel.add(directionHint, GBC.eop().insets(20,0,0,0));
239
240 // only on the head of a way
241 headArrow.setToolTipText(tr("Only on the head of a way."));
242 headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false));
243 headArrow.setEnabled(directionHint.isSelected());
244 panel.add(headArrow, GBC.eop().insets(40, 0, 0, 0));
245
246 // draw oneway arrows
247 onewayArrow.setToolTipText(tr("Draw arrows in the direction of oneways and other directed features."));
248 onewayArrow.setSelected(Main.pref.getBoolean("draw.oneway", true));
249 panel.add(onewayArrow, GBC.eop().insets(20,0,0,0));
250
251 // segment order number
252 segmentOrderNumber.setToolTipText(tr("Draw the order numbers of all segments within their way."));
253 segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number", false));
254 panel.add(segmentOrderNumber, GBC.eop().insets(20,0,0,0));
255
256 // antialiasing
257 useAntialiasing.setToolTipText(tr("Apply antialiasing to the map view resulting in a smoother appearance."));
258 useAntialiasing.setSelected(Main.pref.getBoolean("mappaint.use-antialiasing", true));
259 panel.add(useAntialiasing, GBC.eop().insets(20,0,0,0));
260
261 // downloaded area
262 sourceBounds.setToolTipText(tr("Draw the boundaries of data loaded from the server."));
263 sourceBounds.setSelected(Main.pref.getBoolean("draw.data.downloaded_area", true));
264 panel.add(sourceBounds, GBC.eop().insets(20,0,0,0));
265
266 // virtual nodes
267 virtualNodes.setToolTipText(tr("Draw virtual nodes in select mode for easy way modification."));
268 virtualNodes.setSelected(Main.pref.getInteger("mappaint.node.virtual-size", 8) != 0);
269 panel.add(virtualNodes, GBC.eop().insets(20,0,0,0));
270
271 // background layers in inactive color
272 inactive.setToolTipText(tr("Draw the inactive data layers in a different color."));
273 inactive.setSelected(Main.pref.getBoolean("draw.data.inactive_color", true));
274 panel.add(inactive, GBC.eop().insets(20,0,0,0));
275
276 // outlineOnly
277 outlineOnly.setSelected(Main.pref.getBoolean("draw.data.area_outline_only", false));
278 outlineOnly.setToolTipText(tr("This option suppresses the filling of areas, overriding anything specified in the selected style."));
279 panel.add(outlineOnly, GBC.eol().insets(20,0,0,5));
280
281 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH));
282 scrollpane = new JScrollPane(panel);
283 scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 ));
284 gui.displaycontent.addTab(tr("OSM Data"), scrollpane);
285 }
286
287 public boolean ok() {
288 Main.pref.put("marker.makeautomarkers", makeAutoMarkers.isSelected());
289 Main.pref.put("draw.data.area_outline_only", outlineOnly.isSelected());
290 Main.pref.put("draw.rawgps.lines", drawRawGpsLinesAll.isSelected());
291 Main.pref.put("draw.rawgps.lines.localfiles", drawRawGpsLinesLocal.isSelected());
292 Main.pref.put("draw.rawgps.max-line-length", drawRawGpsMaxLineLength.getText());
293 Main.pref.put("draw.rawgps.max-line-length.local", drawRawGpsMaxLineLengthLocal.getText());
294 Main.pref.put("draw.rawgps.lines.force", forceRawGpsLines.isSelected());
295 Main.pref.put("draw.rawgps.direction", drawGpsArrows.isSelected());
296 Main.pref.put("draw.rawgps.alternatedirection", drawGpsArrowsFast.isSelected());
297 Main.pref.put("draw.rawgps.min-arrow-distance", drawGpsArrowsMinDist.getText());
298 if(colorTypeVelocity.isSelected()) {
299 Main.pref.putInteger("draw.rawgps.colors", 1);
300 } else if(colorTypeDilution.isSelected()) {
301 Main.pref.putInteger("draw.rawgps.colors", 2);
302 } else {
303 Main.pref.putInteger("draw.rawgps.colors", 0);
304 }
305 int ccti=colorTypeVelocityTune.getSelectedIndex();
306 Main.pref.putInteger("draw.rawgps.colorTracksTune", ccti==2 ? 10 : (ccti==1 ? 20 : 45));
307 Main.pref.put("draw.rawgps.hdopcircle", hdopCircleGpsPoints.isSelected());
308 Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected());
309 Main.pref.put("draw.segment.direction", directionHint.isSelected());
310 Main.pref.put("draw.segment.head_only", headArrow.isSelected());
311 Main.pref.put("draw.oneway", onewayArrow.isSelected());
312 Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected());
313 Main.pref.put("draw.data.downloaded_area", sourceBounds.isSelected());
314 Main.pref.put("draw.data.inactive_color", inactive.isSelected());
315 Main.pref.put("mappaint.use-antialiasing", useAntialiasing.isSelected());
316 int vn = Main.pref.getInteger("mappaint.node.virtual-size", 8);
317 if (virtualNodes.isSelected()) {
318 if (vn < 1) {
319 vn = 8;
320 }
321 }
322 else {
323 vn = 0;
324 }
325 Main.pref.putInteger("mappaint.node.virtual-size", vn);
326 Main.pref.putInteger("draw.rawgps.layer.wpt", waypointLabel.getSelectedIndex());
327 return false;
328 }
329}
Note: See TracBrowser for help on using the repository browser.