Ticket #6629: coloring2.patch
File coloring2.patch, 49.3 KB (added by , 13 years ago) |
---|
-
org/openstreetmap/josm/gui/layer/CustomizeColor.java
62 62 63 63 @Override 64 64 public void actionPerformed(ActionEvent e) { 65 JColorChooser c = new JColorChooser(layers.get(0).getColor(false)); 65 Color cl=layers.get(0).getColor(false); if (cl==null) cl=Color.gray; 66 JColorChooser c = new JColorChooser(cl); 66 67 Object[] options = new Object[]{tr("OK"), tr("Cancel"), tr("Default")}; 67 68 int answer = JOptionPane.showOptionDialog( 68 69 Main.parent, -
org/openstreetmap/josm/gui/layer/GpxLayer.java
25 25 import java.util.Collection; 26 26 import java.util.Collections; 27 27 import java.util.Comparator; 28 import java.util.Date; 29 import java.util.HashMap; 28 30 import java.util.LinkedList; 29 31 import java.util.List; 32 import java.util.Map; 30 33 import java.util.concurrent.Future; 31 34 32 35 import javax.swing.AbstractAction; 33 36 import javax.swing.Action; 34 37 import javax.swing.Box; 35 38 import javax.swing.ButtonGroup; 39 import javax.swing.ButtonModel; 36 40 import javax.swing.Icon; 37 41 import javax.swing.JFileChooser; 38 42 import javax.swing.JLabel; … … 69 73 import org.openstreetmap.josm.gui.dialogs.LayerListPopup; 70 74 import org.openstreetmap.josm.gui.layer.markerlayer.AudioMarker; 71 75 import org.openstreetmap.josm.gui.layer.markerlayer.MarkerLayer; 76 import org.openstreetmap.josm.gui.preferences.GPXSettingsPanel; 72 77 import org.openstreetmap.josm.gui.progress.NullProgressMonitor; 73 78 import org.openstreetmap.josm.gui.progress.PleaseWaitProgressMonitor; 74 79 import org.openstreetmap.josm.gui.widgets.HtmlPanel; … … 229 234 230 235 public colorModes getColorMode() { 231 236 try { 232 return colorModes.values()[Main.pref.getInteger("draw.rawgps.colors", "layer "+getName(), 0)]; 237 int i=Main.pref.getInteger("draw.rawgps.colors", "layer " + getName(), 0); 238 return colorModes.values()[i]; 233 239 } catch (Exception e) { 234 240 } 235 241 return colorModes.none; … … 248 254 LayerListDialog.getInstance().createDeleteLayerAction(), 249 255 SeparatorLayerAction.INSTANCE, 250 256 new CustomizeColor(this), 251 new Customize LineDrawing(this),257 new CustomizeDrawing(this), 252 258 new ConvertToDataLayerAction(), 253 259 SeparatorLayerAction.INSTANCE, 254 260 new RenameLayerAction(getAssociatedFile(), this), … … 261 267 new LayerSaveAction(this), 262 268 new LayerSaveAsAction(this), 263 269 new CustomizeColor(this), 264 new Customize LineDrawing(this),270 new CustomizeDrawing(this), 265 271 new ImportImages(), 266 272 new ImportAudio(), 267 273 new MarkersFromNamedPoins(), … … 375 381 376 382 // the different color modes 377 383 enum colorModes { 378 none, velocity, dilution, direction 384 none, velocity, dilution, direction, time 379 385 } 380 386 381 387 @Override … … 393 399 ****************************************************************/ 394 400 // Long startTime = System.currentTimeMillis(); 395 401 Color neutralColor = getColor(true); 402 String spec="layer "+getName(); 403 396 404 // also draw lines between points belonging to different segments 397 boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force", "layer "+getName(), false);405 boolean forceLines = Main.pref.getBoolean("draw.rawgps.lines.force", spec, false); 398 406 // draw direction arrows on the lines 399 boolean direction = Main.pref.getBoolean("draw.rawgps.direction", "layer "+getName(), false);407 boolean direction = Main.pref.getBoolean("draw.rawgps.direction", spec, false); 400 408 // don't draw lines if longer than x meters 401 int lineWidth = Main.pref.getInteger("draw.rawgps.linewidth", "layer "+getName(), 0);409 int lineWidth = Main.pref.getInteger("draw.rawgps.linewidth", spec, 0); 402 410 403 411 int maxLineLength; 404 412 boolean lines; 405 413 if (this.isLocalFile) { 406 maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", "layer "+getName(), -1);407 lines = Main.pref.getBoolean("draw.rawgps.lines.local", "layer "+getName(), true);414 maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length.local", spec, -1); 415 lines = Main.pref.getBoolean("draw.rawgps.lines.local", spec, true); 408 416 } else { 409 maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", "layer "+getName(), 200);410 lines = Main.pref.getBoolean("draw.rawgps.lines", "layer "+getName(), true);417 maxLineLength = Main.pref.getInteger("draw.rawgps.max-line-length", spec, 200); 418 lines = Main.pref.getBoolean("draw.rawgps.lines", spec, true); 411 419 } 412 420 // paint large dots for points 413 boolean large = Main.pref.getBoolean("draw.rawgps.large", "layer "+getName(), false);414 int largesize = Main.pref.getInteger("draw.rawgps.large.size", "layer "+getName(), 3);415 boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", "layer "+getName(), false);421 boolean large = Main.pref.getBoolean("draw.rawgps.large", spec, false); 422 int largesize = Main.pref.getInteger("draw.rawgps.large.size", spec, 3); 423 boolean hdopcircle = Main.pref.getBoolean("draw.rawgps.hdopcircle", spec, false); 416 424 // color the lines 417 425 colorModes colored = getColorMode(); 418 426 // paint direction arrow with alternate math. may be faster 419 boolean alternatedirection = Main.pref.getBoolean("draw.rawgps.alternatedirection", "layer "+getName(), false);427 boolean alternatedirection = Main.pref.getBoolean("draw.rawgps.alternatedirection", spec, false); 420 428 // don't draw arrows nearer to each other than this 421 int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", "layer "+getName(), 40);429 int delta = Main.pref.getInteger("draw.rawgps.min-arrow-distance", spec, 40); 422 430 // allows to tweak line coloring for different speed levels. 423 int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", "layer "+getName(), 45);424 boolean colorModeDynamic = Main.pref.getBoolean("draw.rawgps.colors.dynamic", "layer "+getName(), false);431 int colorTracksTune = Main.pref.getInteger("draw.rawgps.colorTracksTune", spec, 45); 432 boolean colorModeDynamic = Main.pref.getBoolean("draw.rawgps.colors.dynamic", spec, false); 425 433 int hdopfactor = Main.pref.getInteger("hdop.factor", 25); 426 434 427 435 if(lineWidth != 0) … … 447 455 ********** STEP 2b - RE-COMPUTE CACHE DATA ********************* 448 456 ****************************************************************/ 449 457 if (!computeCacheInSync) { // don't compute if the cache is good 450 Float minval = null;451 Float maxval = null;458 double minval = +1e10; 459 double maxval = -1e10; 452 460 WayPoint oldWp = null; 453 461 if (colorModeDynamic) { 454 462 if (colored == colorModes.velocity) { … … 461 469 continue; 462 470 } 463 471 if (oldWp != null && trkPnt.time > oldWp.time) { 464 Float vel = new Float(c.greatCircleDistance(oldWp.getCoor()) / (trkPnt.time - oldWp.time)); 465 if(maxval == null || vel > maxval) maxval = vel; 466 if(minval == null || vel < minval) minval = vel; 472 double vel = c.greatCircleDistance(oldWp.getCoor()) 473 / (trkPnt.time - oldWp.time); 474 if(vel > maxval) maxval = vel; 475 if(vel < minval) minval = vel; 467 476 } 468 477 oldWp = trkPnt; 469 478 } … … 475 484 for (WayPoint trkPnt : segment.getWayPoints()) { 476 485 Object val = trkPnt.attr.get("hdop"); 477 486 if (val != null) { 478 Float hdop = (Float) val;479 if( maxval == null ||hdop > maxval) maxval = hdop;480 if( minval == null ||hdop < minval) minval = hdop;487 double hdop = ((Float) val).doubleValue(); 488 if(hdop > maxval) maxval = hdop; 489 if(hdop < minval) minval = hdop; 481 490 } 482 491 } 483 492 } … … 485 494 } 486 495 oldWp = null; 487 496 } 497 if (colored == colorModes.time) { 498 for (GpxTrack trk : data.tracks) { 499 for (GpxTrackSegment segment : trk.getSegments()) { 500 for (WayPoint trkPnt : segment.getWayPoints()) { 501 double t=trkPnt.time; 502 if (t==0) continue; // skip non-dated trackpoints 503 if(t > maxval) maxval = t; 504 if(t < minval) minval = t; 505 } 506 } 507 } 508 } 509 488 510 for (GpxTrack trk : data.tracks) { 489 511 for (GpxTrackSegment segment : trk.getSegments()) { 490 512 if (!forceLines) { // don't draw lines between segments, unless forced to … … 498 520 trkPnt.customColoring = neutralColor; 499 521 if(colored == colorModes.dilution && trkPnt.attr.get("hdop") != null) { 500 522 float hdop = ((Float) trkPnt.attr.get("hdop")).floatValue(); 501 int hdoplvl = Math.round(colorModeDynamic ? ((hdop-minval)*255/(maxval-minval))523 int hdoplvl =(int) Math.round(colorModeDynamic ? ((hdop-minval)*255/(maxval-minval)) 502 524 : (hdop <= 0 ? 0 : hdop * hdopfactor)); 503 525 // High hdop is bad, but high values in colors are green. 504 526 // Therefore inverse the logic … … 507 529 } 508 530 if (oldWp != null) { 509 531 double dist = c.greatCircleDistance(oldWp.getCoor()); 510 532 boolean noDraw=false; 511 533 switch (colored) { 512 534 case velocity: 513 535 double dtime = trkPnt.time - oldWp.time; 514 536 if(dtime > 0) { 515 537 float vel = (float) (dist / dtime); 516 int velColor = Math.round(colorModeDynamic ? ((vel-minval)*255/(maxval-minval))538 int velColor =(int) Math.round(colorModeDynamic ? ((vel-minval)*255/(maxval-minval)) 517 539 : (vel <= 0 ? 0 : vel / colorTracksTune * 255)); 518 540 trkPnt.customColoring = colors[velColor > 255 ? 255 : velColor]; 519 541 } else { … … 529 551 trkPnt.customColoring = colors_cyclic[(int) (dirColor)]; 530 552 } 531 553 break; 554 case time: 555 if (trkPnt.time>0){ 556 int tColor = (int) Math.round((trkPnt.time-minval)*255/(maxval-minval)); 557 trkPnt.customColoring = colors[tColor]; 558 } else { 559 trkPnt.customColoring = neutralColor; 560 } 561 break; 532 562 } 533 534 if ( maxLineLength == -1 || dist <= maxLineLength) {563 564 if (!noDraw && (maxLineLength == -1 || dist <= maxLineLength)) { 535 565 trkPnt.drawLine = true; 536 566 trkPnt.dir = (int) oldWp.getCoor().heading(trkPnt.getCoor()); 537 567 } else { … … 1337 1367 return best; 1338 1368 } 1339 1369 1340 private class Customize LineDrawing extends AbstractAction implements LayerAction, MultiLayerAction {1370 private class CustomizeDrawing extends AbstractAction implements LayerAction, MultiLayerAction { 1341 1371 List<Layer> layers; 1342 1372 1343 public Customize LineDrawing(List<Layer> l) {1373 public CustomizeDrawing(List<Layer> l) { 1344 1374 this(); 1345 1375 layers = l; 1346 1376 } 1347 1377 1348 public Customize LineDrawing(Layer l) {1378 public CustomizeDrawing(Layer l) { 1349 1379 this(); 1350 1380 layers = new LinkedList<Layer>(); 1351 1381 layers.add(l); 1352 1382 } 1353 1383 1354 private Customize LineDrawing() {1355 super(tr("Customize linedrawing"), ImageProvider.get("mapmode/addsegment"));1384 private CustomizeDrawing() { 1385 super(tr("Customize track drawing"), ImageProvider.get("mapmode/addsegment")); 1356 1386 } 1357 1387 1358 1388 @Override … … 1371 1401 1372 1402 @Override 1373 1403 public Action getMultiLayerAction(List<Layer> layers) { 1374 return new Customize LineDrawing(layers);1404 return new CustomizeDrawing(layers); 1375 1405 } 1376 1406 1377 1407 @Override 1378 1408 public void actionPerformed(ActionEvent e) { 1379 /* FIXME: Add all the other GPX settings here as well. Unify with DrawingPreferences 1380 Each option should be able to "use global settings". Attention with the handling 1381 of local layer for the two local layer options! */ 1382 JRadioButton[] r = new JRadioButton[3]; 1383 r[0] = new JRadioButton(tr("Use global settings.")); 1384 r[1] = new JRadioButton(tr("Draw lines between points for this layer.")); 1385 r[2] = new JRadioButton(tr("Do not draw lines between points for this layer.")); 1386 ButtonGroup group = new ButtonGroup(); 1387 Box panel = Box.createVerticalBox(); 1388 for (JRadioButton b : r) { 1389 group.add(b); 1390 panel.add(b); 1391 } 1392 String propbase = isLocalFile ? "draw.rawgps.lines.local" : "draw.rawgps.lines"; 1393 String propName = propbase + ".layer " + layers.get(0).getName(); 1394 if (Main.pref.hasKey(propName)) { 1395 group.setSelected(r[Main.pref.getBoolean(propName) ? 1 : 2].getModel(), true); 1396 } else { 1397 group.setSelected(r[0].getModel(), true); 1398 } 1409 GPXSettingsPanel panel=new GPXSettingsPanel(getName()); 1399 1410 int answer = JOptionPane.showConfirmDialog(Main.parent, panel, 1400 tr("Select line drawing options"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 1401 switch (answer) { 1402 case JOptionPane.CANCEL_OPTION: 1403 case JOptionPane.CLOSED_OPTION: 1404 return; 1405 default: 1406 // continue 1407 } 1411 tr("Customize track drawing"), JOptionPane.OK_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE); 1412 if (answer == JOptionPane.CANCEL_OPTION || answer == JOptionPane.CLOSED_OPTION) return; 1408 1413 for(Layer layer : layers) { 1409 propName = propbase + ".layer " + layer.getName(); 1410 if (group.getSelection() == r[0].getModel()) { 1411 Main.pref.put(propName, null); 1412 } else { 1413 Main.pref.put(propName, group.getSelection() == r[1].getModel()); 1414 } 1414 // save preferences for all layers 1415 panel.savePreferences(layer.getName()); 1415 1416 } 1416 1417 Main.map.repaint(); 1417 1418 } 1418 1419 } 1419 1420 1420 private class MarkersFromNamedPoins extends AbstractAction {1421 private class MarkersFromNamedPoins extends AbstractAction { 1421 1422 1422 1423 public MarkersFromNamedPoins() { 1423 1424 super(tr("Markers From Named Points"), ImageProvider.get("addmarkers")); -
org/openstreetmap/josm/gui/preferences/GPXSettingsPanel.java
1 package org.openstreetmap.josm.gui.preferences; 2 3 import javax.swing.AbstractButton; 4 import javax.swing.Box; 5 import javax.swing.event.ChangeEvent; 6 import javax.swing.event.ChangeListener; 7 import java.awt.event.ActionEvent; 8 import javax.swing.JLabel; 9 import javax.swing.BorderFactory; 10 import org.openstreetmap.josm.Main; 11 import org.openstreetmap.josm.tools.GBC; 12 import java.awt.GridBagLayout; 13 import java.awt.event.ActionListener; 14 import javax.swing.ButtonGroup; 15 import javax.swing.JCheckBox; 16 import javax.swing.JComboBox; 17 import javax.swing.JPanel; 18 import javax.swing.JRadioButton; 19 import javax.swing.JTextField; 20 21 import static org.openstreetmap.josm.tools.I18n.tr; 22 import static org.openstreetmap.josm.tools.I18n.trc; 23 24 public class GPXSettingsPanel extends JPanel { 25 private JRadioButton drawRawGpsLinesGlobal = new JRadioButton(tr("Use global settings.")); 26 private JRadioButton drawRawGpsLinesAll = new JRadioButton(tr("All")); 27 private JRadioButton drawRawGpsLinesLocal = new JRadioButton(tr("Local files")); 28 private JRadioButton drawRawGpsLinesNone = new JRadioButton(tr("None")); 29 private ActionListener drawRawGpsLinesActionListener; 30 private JTextField drawRawGpsMaxLineLength = new JTextField(8); 31 private JTextField drawRawGpsMaxLineLengthLocal = new JTextField(8); 32 private JCheckBox forceRawGpsLines = new JCheckBox(tr("Force lines if no segments imported.")); 33 private JCheckBox largeGpsPoints = new JCheckBox(tr("Draw large GPS points.")); 34 private JCheckBox hdopCircleGpsPoints = new JCheckBox(tr("Draw a circle form HDOP value.")); 35 private ButtonGroup colorGroup; 36 private JRadioButton colorTypeVelocity = new JRadioButton(tr("Velocity (red = slow, green = fast)")); 37 private JRadioButton colorTypeDirection = new JRadioButton(tr("Direction (red = west, yellow = north, green = east, blue = south)")); 38 private JRadioButton colorTypeDilution = new JRadioButton(tr("Dilution of Position (red = high, green = low, if available)")); 39 private JRadioButton colorTypeTime = new JRadioButton(tr("Track date")); 40 private JRadioButton colorTypeNone = new JRadioButton(tr("Single Color (can be customized for named layers)")); 41 private JRadioButton colorTypeGlobal = new JRadioButton(tr("Use global settings.")); 42 private JComboBox colorTypeVelocityTune = new JComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")}); 43 private JCheckBox makeAutoMarkers = new JCheckBox(tr("Create markers when reading GPX.")); 44 private JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows")); 45 private JCheckBox drawGpsArrowsFast = new JCheckBox(tr("Fast drawing (looks uglier)")); 46 private JTextField drawGpsArrowsMinDist = new JTextField(8); 47 private JCheckBox colorDynamic = new JCheckBox(tr("Dynamic color range based on data limits")); 48 private JComboBox waypointLabel = new JComboBox(new String[] {tr("Auto"), /* gpx data field name */ trc("gpx_field", "Name"), 49 /* gpx data field name */ trc("gpx_field", "Desc(ription)"), tr("Both"), tr("None"), tr("Global settings")}); 50 private String spec; 51 52 public GPXSettingsPanel(String layerName) { 53 super(new GridBagLayout()); 54 this.spec="layer "+layerName; 55 initComponents(); 56 loadPreferences(); 57 } 58 59 public GPXSettingsPanel() { 60 super(new GridBagLayout()); 61 initComponents(); 62 loadPreferences(); // preferences -> controls 63 } 64 private void initComponents() { 65 setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 66 67 // makeAutoMarkers 68 makeAutoMarkers.setToolTipText(tr("Automatically make a marker layer from any waypoints when opening a GPX layer.")); 69 add(makeAutoMarkers, GBC.eol().insets(20,0,0,5)); 70 71 // drawRawGpsLines 72 ButtonGroup gpsLinesGroup = new ButtonGroup(); 73 if (spec!=null) gpsLinesGroup.add(drawRawGpsLinesGlobal); 74 gpsLinesGroup.add(drawRawGpsLinesNone); 75 gpsLinesGroup.add(drawRawGpsLinesLocal); 76 gpsLinesGroup.add(drawRawGpsLinesAll); 77 78 /* ensure that default is in data base */ 79 80 add(new JLabel(tr("Draw lines between raw GPS points")), GBC.eol().insets(20,0,0,0)); 81 if (spec!=null) add(drawRawGpsLinesGlobal, GBC.eol().insets(40,0,0,0)); 82 add(drawRawGpsLinesNone, GBC.eol().insets(40,0,0,0)); 83 add(drawRawGpsLinesLocal, GBC.eol().insets(40,0,0,0)); 84 add(drawRawGpsLinesAll, GBC.eol().insets(40,0,0,0)); 85 86 drawRawGpsLinesActionListener = new ActionListener(){ 87 public void actionPerformed(ActionEvent e) { 88 boolean f=drawRawGpsLinesNone.isSelected()||drawRawGpsLinesGlobal.isSelected(); 89 forceRawGpsLines.setEnabled(!f); 90 drawRawGpsMaxLineLength.setEnabled(!(f || drawRawGpsLinesLocal.isSelected())); 91 drawRawGpsMaxLineLengthLocal.setEnabled(!f); 92 drawGpsArrows.setEnabled(!f); 93 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 94 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 95 } 96 }; 97 98 drawRawGpsLinesGlobal.addActionListener(drawRawGpsLinesActionListener); 99 drawRawGpsLinesNone.addActionListener(drawRawGpsLinesActionListener); 100 drawRawGpsLinesLocal.addActionListener(drawRawGpsLinesActionListener); 101 drawRawGpsLinesAll.addActionListener(drawRawGpsLinesActionListener); 102 103 // drawRawGpsMaxLineLengthLocal 104 drawRawGpsMaxLineLengthLocal.setToolTipText(tr("Maximum length (in meters) to draw lines for local files. Set to ''-1'' to draw all lines.")); 105 add(new JLabel(tr("Maximum length for local files (meters)")), GBC.std().insets(40,0,0,0)); 106 add(drawRawGpsMaxLineLengthLocal, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 107 108 // drawRawGpsMaxLineLength 109 drawRawGpsMaxLineLength.setToolTipText(tr("Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines.")); 110 add(new JLabel(tr("Maximum length (meters)")), GBC.std().insets(40,0,0,0)); 111 add(drawRawGpsMaxLineLength, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 112 113 // forceRawGpsLines 114 forceRawGpsLines.setToolTipText(tr("Force drawing of lines if the imported data contain no line information.")); 115 add(forceRawGpsLines, GBC.eop().insets(40,0,0,0)); 116 117 // drawGpsArrows 118 drawGpsArrows.addActionListener(new ActionListener(){ 119 public void actionPerformed(ActionEvent e) { 120 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 121 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 122 } 123 }); 124 drawGpsArrows.setToolTipText(tr("Draw direction arrows for lines, connecting GPS points.")); 125 add(drawGpsArrows, GBC.eop().insets(40,0,0,0)); 126 127 // drawGpsArrowsFast 128 drawGpsArrowsFast.setToolTipText(tr("Draw the direction arrows using table lookups instead of complex math.")); 129 add(drawGpsArrowsFast, GBC.eop().insets(60,0,0,0)); 130 131 // drawGpsArrowsMinDist 132 drawGpsArrowsMinDist.setToolTipText(tr("Do not draw arrows if they are not at least this distance away from the last one.")); 133 add(new JLabel(tr("Minimum distance (pixels)")), GBC.std().insets(60,0,0,0)); 134 add(drawGpsArrowsMinDist, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 135 136 // hdopCircleGpsPoints 137 hdopCircleGpsPoints.setToolTipText(tr("Draw a circle form HDOP value.")); 138 add(hdopCircleGpsPoints, GBC.eop().insets(20,0,0,0)); 139 140 // largeGpsPoints 141 largeGpsPoints.setToolTipText(tr("Draw larger dots for the GPS points.")); 142 add(largeGpsPoints, GBC.eop().insets(20,0,0,0)); 143 144 // colorTracks 145 colorGroup = new ButtonGroup(); 146 if (spec!=null) colorGroup.add(colorTypeGlobal); 147 colorGroup.add(colorTypeNone); 148 colorGroup.add(colorTypeVelocity); 149 colorGroup.add(colorTypeDirection); 150 colorGroup.add(colorTypeDilution); 151 colorGroup.add(colorTypeTime); 152 153 colorTypeVelocity.addChangeListener(new ChangeListener(){ 154 public void stateChanged(ChangeEvent e) { 155 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected()); 156 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected()); 157 } 158 }); 159 colorTypeDilution.addChangeListener(new ChangeListener(){ 160 public void stateChanged(ChangeEvent e) { 161 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected()); 162 } 163 }); 164 165 colorTypeNone.setToolTipText(tr("All points and track segments will have the same color. Can be customized in Layer Manager.")); 166 colorTypeVelocity.setToolTipText(tr("Colors points and track segments by velocity.")); 167 colorTypeDirection.setToolTipText(tr("Colors points and track segments by direction.")); 168 colorTypeDilution.setToolTipText(tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information.")); 169 colorTypeTime.setToolTipText(tr("Colors points and track segments by its timestamp.")); 170 171 // color Tracks by Velocity Tune 172 colorTypeVelocityTune.setToolTipText(tr("Allows to tune the track coloring for different average speeds.")); 173 174 add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0)); 175 176 add(new JLabel(tr("Track and Point Coloring")), GBC.eol().insets(20,0,0,0)); 177 if (spec!=null) add(colorTypeGlobal, GBC.eol().insets(40,0,0,0)); 178 add(colorTypeNone, GBC.eol().insets(40,0,0,0)); 179 add(colorTypeVelocity, GBC.std().insets(40,0,0,0)); 180 add(colorTypeVelocityTune, GBC.eop().insets(5,0,0,5)); 181 add(colorTypeDirection, GBC.eol().insets(40,0,0,0)); 182 add(colorTypeDilution, GBC.eol().insets(40,0,0,0)); 183 add(colorTypeTime, GBC.eol().insets(40,0,0,0)); 184 185 colorDynamic.setToolTipText(tr("Draw direction arrows for lines, connecting GPS points.")); 186 add(colorDynamic, GBC.eop().insets(40,0,0,0)); 187 188 // waypointLabel 189 add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0)); 190 add(new JLabel(tr("Waypoint labelling")), GBC.std().insets(20,0,0,0)); 191 add(waypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 192 add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH)); 193 } 194 195 /** 196 * Loads preferences to UI controls 197 */ 198 public void loadPreferences () { 199 makeAutoMarkers.setSelected(Main.pref.getBoolean("marker.makeautomarkers", true)); 200 if(spec!=null && !Main.pref.hasKey("draw.rawgps.lines."+spec) 201 && !Main.pref.hasKey("draw.rawgps.lines.local"+spec)){ 202 // no line preferences for layer is found 203 drawRawGpsLinesGlobal.setSelected(true); 204 } else { 205 Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.local",spec, true); 206 if(Main.pref.getBoolean("draw.rawgps.lines",spec, true)) { 207 drawRawGpsLinesAll.setSelected(true); 208 } else if (lf) { 209 drawRawGpsLinesLocal.setSelected(true); 210 } else { 211 drawRawGpsLinesNone.setSelected(true); 212 } 213 } 214 215 drawRawGpsMaxLineLengthLocal.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length.local",spec, -1))); 216 drawRawGpsMaxLineLengthLocal.setEnabled(!drawRawGpsLinesNone.isSelected()); 217 drawRawGpsMaxLineLength.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length",spec, 200))); 218 drawRawGpsMaxLineLength.setEnabled(!drawRawGpsLinesNone.isSelected()); 219 forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force",spec, false)); 220 forceRawGpsLines.setEnabled(!drawRawGpsLinesNone.isSelected()); 221 drawGpsArrows.setSelected(Main.pref.getBoolean("draw.rawgps.direction",spec, false)); 222 drawGpsArrows.setEnabled(!drawRawGpsLinesNone.isSelected()); 223 drawGpsArrowsFast.setSelected(Main.pref.getBoolean("draw.rawgps.alternatedirection",spec, false)); 224 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 225 drawGpsArrowsMinDist.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.min-arrow-distance",spec, 40))); 226 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 227 hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle",spec, false)); 228 largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large",spec, false)); 229 230 if(spec!=null && !Main.pref.hasKey("draw.rawgps.colors."+spec)) { 231 colorTypeGlobal.setSelected(true); 232 colorDynamic.setSelected(false); 233 colorDynamic.setEnabled(false); 234 } else { 235 switch(Main.pref.getInteger("draw.rawgps.colors",spec, 0)) { 236 case 0: colorTypeNone.setSelected(true); break; 237 case 1: colorTypeVelocity.setSelected(true); break; 238 case 2: colorTypeDilution.setSelected(true); break; 239 case 3: colorTypeDirection.setSelected(true); break; 240 case 4: colorTypeTime.setSelected(true); break; 241 } 242 int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune",spec, 45); 243 colorTypeVelocityTune.setSelectedIndex(ccts==10 ? 2 : (ccts==20 ? 1 : 0)); 244 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected() && colorTypeVelocity.isEnabled()); 245 colorDynamic.setSelected(Main.pref.getBoolean("draw.rawgps.colors.dynamic",spec, false)); 246 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected()); 247 } 248 waypointLabel.setSelectedIndex(Main.pref.getInteger("draw.rawgps.layer.wpt",spec, 5 )); 249 } 250 251 252 /** 253 * Save preferences from UI controls for specified layer 254 * if spec==null, global preferences are written 255 */ 256 public boolean savePreferences (String spec) { 257 String specSp; 258 if (spec!=null) specSp=".layer "+spec; else specSp=""; 259 Main.pref.put("marker.makeautomarkers"+specSp, makeAutoMarkers.isSelected()); 260 if (drawRawGpsLinesGlobal.isSelected()) { 261 Main.pref.put("draw.rawgps.lines"+specSp, null); 262 Main.pref.put("draw.rawgps.lines.local"+specSp, null); 263 Main.pref.put("draw.rawgps.max-line-length"+specSp, null); 264 Main.pref.put("draw.rawgps.max-line-length.local"+specSp, null); 265 Main.pref.put("draw.rawgps.lines.force"+specSp, null); 266 Main.pref.put("draw.rawgps.direction"+specSp, null); 267 Main.pref.put("draw.rawgps.alternatedirection"+specSp, null); 268 Main.pref.put("draw.rawgps.min-arrow-distance"+specSp, null); 269 } else { 270 Main.pref.put("draw.rawgps.lines"+specSp, drawRawGpsLinesAll.isSelected()); 271 Main.pref.put("draw.rawgps.lines.local"+specSp, drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected()); 272 Main.pref.put("draw.rawgps.max-line-length"+specSp, drawRawGpsMaxLineLength.getText()); 273 Main.pref.put("draw.rawgps.max-line-length.local"+specSp, drawRawGpsMaxLineLengthLocal.getText()); 274 Main.pref.put("draw.rawgps.lines.force"+specSp, forceRawGpsLines.isSelected()); 275 Main.pref.put("draw.rawgps.direction"+specSp, drawGpsArrows.isSelected()); 276 Main.pref.put("draw.rawgps.alternatedirection"+specSp, drawGpsArrowsFast.isSelected()); 277 Main.pref.put("draw.rawgps.min-arrow-distance"+specSp, drawGpsArrowsMinDist.getText()); 278 } 279 280 Main.pref.put("draw.rawgps.hdopcircle"+specSp, hdopCircleGpsPoints.isSelected()); 281 Main.pref.put("draw.rawgps.large"+specSp, largeGpsPoints.isSelected()); 282 if (waypointLabel.getSelectedIndex()==5) Main.pref.put("draw.rawgps.layer.wpt"+specSp,null); 283 else Main.pref.putInteger("draw.rawgps.layer.wpt"+specSp, waypointLabel.getSelectedIndex()); 284 285 if(colorTypeGlobal.isSelected()) { 286 Main.pref.put("draw.rawgps.colors"+specSp, null); 287 Main.pref.put("draw.rawgps.colors.dynamic"+specSp, null); 288 Main.pref.put("draw.rawgps.colorTracksTunec"+specSp, null); 289 return false; 290 } else if(colorTypeVelocity.isSelected()) { 291 Main.pref.putInteger("draw.rawgps.colors"+specSp, 1); 292 } else if(colorTypeDilution.isSelected()) { 293 Main.pref.putInteger("draw.rawgps.colors"+specSp, 2); 294 } else if(colorTypeDirection.isSelected()) { 295 Main.pref.putInteger("draw.rawgps.colors"+specSp, 3); 296 } else if(colorTypeTime.isSelected()) { 297 Main.pref.putInteger("draw.rawgps.colors"+specSp, 4); 298 } else { 299 Main.pref.putInteger("draw.rawgps.colors"+specSp, 0); 300 } 301 Main.pref.put("draw.rawgps.colors.dynamic"+specSp, colorDynamic.isSelected()); 302 int ccti=colorTypeVelocityTune.getSelectedIndex(); 303 Main.pref.putInteger("draw.rawgps.colorTracksTune"+specSp, ccti==2 ? 10 : (ccti==1 ? 20 : 45)); 304 return false; 305 } 306 307 /** 308 * Save preferences from UI controls for initial layer or globally 309 */ 310 public void savePreferences() { 311 savePreferences(null); 312 } 313 } -
org/openstreetmap/josm/gui/preferences/DrawingPreference.java
33 33 } 34 34 } 35 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 colorTypeDirection = new JRadioButton(tr("Direction (red = west, yellow = north, green = east, blue = south)")); 48 private JRadioButton colorTypeDilution = new JRadioButton(tr("Dilution of Position (red = high, green = low, if available)")); 49 private JRadioButton colorTypeNone = new JRadioButton(tr("Single Color (can be customized for named layers)")); 50 private JComboBox colorTypeVelocityTune = new JComboBox(new String[] {tr("Car"), tr("Bicycle"), tr("Foot")}); 36 private GPXSettingsPanel gpxPanel; 51 37 private JCheckBox directionHint = new JCheckBox(tr("Draw Direction Arrows")); 52 private JCheckBox drawGpsArrows = new JCheckBox(tr("Draw Direction Arrows"));53 private JCheckBox drawGpsArrowsFast = new JCheckBox(tr("Fast drawing (looks uglier)"));54 private JTextField drawGpsArrowsMinDist = new JTextField(8);55 38 private JCheckBox headArrow = new JCheckBox(tr("Only on the head of a way.")); 56 39 private JCheckBox onewayArrow = new JCheckBox(tr("Draw oneway arrows.")); 57 40 private JCheckBox segmentOrderNumber = new JCheckBox(tr("Draw segment order numbers")); … … 59 42 private JCheckBox virtualNodes = new JCheckBox(tr("Draw virtual nodes in select mode")); 60 43 private JCheckBox inactive = new JCheckBox(tr("Draw inactive layers in other color")); 61 44 private JCheckBox useAntialiasing = new JCheckBox(tr("Smooth map graphics (antialiasing)")); 62 private JCheckBox makeAutoMarkers = new JCheckBox(tr("Create markers when reading GPX."));63 45 private JCheckBox outlineOnly = new JCheckBox(tr("Draw only outlines of areas")); 64 private JCheckBox colorDynamic = new JCheckBox(tr("Dynamic color range based on data limits"));65 private JComboBox waypointLabel = new JComboBox(new String[] {tr("Auto"), /* gpx data field name */ trc("gpx_field", "Name"),66 /* gpx data field name */ trc("gpx_field", "Desc(ription)"), tr("Both"), tr("None")});67 46 68 47 public void addGui(PreferenceTabbedPane gui) { 69 48 gui.display.setPreferredSize(new Dimension(400,600)); 70 JPanel panel = new JPanel(new GridBagLayout()); 71 panel.setBorder(BorderFactory.createEmptyBorder(5,5,5,5)); 72 73 // makeAutoMarkers 74 makeAutoMarkers.setSelected(Main.pref.getBoolean("marker.makeautomarkers", true)); 75 makeAutoMarkers.setToolTipText(tr("Automatically make a marker layer from any waypoints when opening a GPX layer.")); 76 panel.add(makeAutoMarkers, GBC.eol().insets(20,0,0,5)); 77 78 // drawRawGpsLines 79 ButtonGroup gpsLinesGroup = new ButtonGroup(); 80 gpsLinesGroup.add(drawRawGpsLinesNone); 81 gpsLinesGroup.add(drawRawGpsLinesLocal); 82 gpsLinesGroup.add(drawRawGpsLinesAll); 83 84 85 /* ensure that default is in data base */ 86 Boolean lf = Main.pref.getBoolean("draw.rawgps.lines.local", true); 87 if(Main.pref.getBoolean("draw.rawgps.lines", true)) { 88 drawRawGpsLinesAll.setSelected(true); 89 } else if (lf) { 90 drawRawGpsLinesLocal.setSelected(true); 91 } else { 92 drawRawGpsLinesNone.setSelected(true); 93 } 94 95 panel.add(new JLabel(tr("Draw lines between raw GPS points")), GBC.eol().insets(20,0,0,0)); 96 panel.add(drawRawGpsLinesNone, GBC.eol().insets(40,0,0,0)); 97 panel.add(drawRawGpsLinesLocal, GBC.eol().insets(40,0,0,0)); 98 panel.add(drawRawGpsLinesAll, GBC.eol().insets(40,0,0,0)); 99 100 drawRawGpsLinesActionListener = new ActionListener(){ 101 public void actionPerformed(ActionEvent e) { 102 forceRawGpsLines.setEnabled(!drawRawGpsLinesNone.isSelected()); 103 drawRawGpsMaxLineLength.setEnabled(!(drawRawGpsLinesNone.isSelected() || drawRawGpsLinesLocal.isSelected())); 104 drawRawGpsMaxLineLengthLocal.setEnabled(!drawRawGpsLinesNone.isSelected()); 105 drawGpsArrows.setEnabled(!drawRawGpsLinesNone.isSelected() ); 106 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 107 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 108 } 109 }; 110 111 drawRawGpsLinesNone.addActionListener(drawRawGpsLinesActionListener); 112 drawRawGpsLinesLocal.addActionListener(drawRawGpsLinesActionListener); 113 drawRawGpsLinesAll.addActionListener(drawRawGpsLinesActionListener); 114 115 // drawRawGpsMaxLineLengthLocal 116 drawRawGpsMaxLineLengthLocal.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length.local", -1))); 117 drawRawGpsMaxLineLengthLocal.setToolTipText(tr("Maximum length (in meters) to draw lines for local files. Set to ''-1'' to draw all lines.")); 118 drawRawGpsMaxLineLengthLocal.setEnabled(!drawRawGpsLinesNone.isSelected()); 119 panel.add(new JLabel(tr("Maximum length for local files (meters)")), GBC.std().insets(40,0,0,0)); 120 panel.add(drawRawGpsMaxLineLengthLocal, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 121 122 // drawRawGpsMaxLineLength 123 drawRawGpsMaxLineLength.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.max-line-length", 200))); 124 drawRawGpsMaxLineLength.setToolTipText(tr("Maximum length (in meters) to draw lines. Set to ''-1'' to draw all lines.")); 125 drawRawGpsMaxLineLength.setEnabled(!drawRawGpsLinesNone.isSelected()); 126 panel.add(new JLabel(tr("Maximum length (meters)")), GBC.std().insets(40,0,0,0)); 127 panel.add(drawRawGpsMaxLineLength, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 128 129 // forceRawGpsLines 130 forceRawGpsLines.setToolTipText(tr("Force drawing of lines if the imported data contain no line information.")); 131 forceRawGpsLines.setSelected(Main.pref.getBoolean("draw.rawgps.lines.force", false)); 132 forceRawGpsLines.setEnabled(!drawRawGpsLinesNone.isSelected()); 133 panel.add(forceRawGpsLines, GBC.eop().insets(40,0,0,0)); 134 135 // drawGpsArrows 136 drawGpsArrows.addActionListener(new ActionListener(){ 137 public void actionPerformed(ActionEvent e) { 138 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 139 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 140 } 141 }); 142 drawGpsArrows.setToolTipText(tr("Draw direction arrows for lines, connecting GPS points.")); 143 drawGpsArrows.setSelected(Main.pref.getBoolean("draw.rawgps.direction", false)); 144 drawGpsArrows.setEnabled(!drawRawGpsLinesNone.isSelected()); 145 panel.add(drawGpsArrows, GBC.eop().insets(40,0,0,0)); 146 147 // drawGpsArrowsFast 148 drawGpsArrowsFast.setToolTipText(tr("Draw the direction arrows using table lookups instead of complex math.")); 149 drawGpsArrowsFast.setSelected(Main.pref.getBoolean("draw.rawgps.alternatedirection", false)); 150 drawGpsArrowsFast.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 151 panel.add(drawGpsArrowsFast, GBC.eop().insets(60,0,0,0)); 152 153 // drawGpsArrowsMinDist 154 drawGpsArrowsMinDist.setToolTipText(tr("Do not draw arrows if they are not at least this distance away from the last one.")); 155 drawGpsArrowsMinDist.setText(Integer.toString(Main.pref.getInteger("draw.rawgps.min-arrow-distance", 40))); 156 drawGpsArrowsMinDist.setEnabled(drawGpsArrows.isSelected() && drawGpsArrows.isEnabled()); 157 panel.add(new JLabel(tr("Minimum distance (pixels)")), GBC.std().insets(60,0,0,0)); 158 panel.add(drawGpsArrowsMinDist, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 159 160 // hdopCircleGpsPoints 161 hdopCircleGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.hdopcircle", false)); 162 hdopCircleGpsPoints.setToolTipText(tr("Draw a circle form HDOP value.")); 163 panel.add(hdopCircleGpsPoints, GBC.eop().insets(20,0,0,0)); 164 165 // largeGpsPoints 166 largeGpsPoints.setSelected(Main.pref.getBoolean("draw.rawgps.large", false)); 167 largeGpsPoints.setToolTipText(tr("Draw larger dots for the GPS points.")); 168 panel.add(largeGpsPoints, GBC.eop().insets(20,0,0,0)); 169 170 // colorTracks 171 colorGroup = new ButtonGroup(); 172 colorGroup.add(colorTypeNone); 173 colorGroup.add(colorTypeVelocity); 174 colorGroup.add(colorTypeDirection); 175 colorGroup.add(colorTypeDilution); 176 177 colorTypeVelocity.addChangeListener(new ChangeListener(){ 178 public void stateChanged(ChangeEvent e) { 179 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected()); 180 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected()); 181 } 182 }); 183 colorTypeDilution.addChangeListener(new ChangeListener(){ 184 public void stateChanged(ChangeEvent e) { 185 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected()); 186 } 187 }); 188 189 switch(Main.pref.getInteger("draw.rawgps.colors", 0)) { 190 case 0: 191 colorTypeNone.setSelected(true); 192 break; 193 case 1: 194 colorTypeVelocity.setSelected(true); 195 break; 196 case 2: 197 colorTypeDilution.setSelected(true); 198 break; 199 case 3: 200 colorTypeDirection.setSelected(true); 201 break; 202 } 203 204 colorTypeNone.setToolTipText(tr("All points and track segments will have the same color. Can be customized in Layer Manager.")); 205 colorTypeVelocity.setToolTipText(tr("Colors points and track segments by velocity.")); 206 colorTypeDirection.setToolTipText(tr("Colors points and track segments by direction.")); 207 colorTypeDilution.setToolTipText(tr("Colors points and track segments by dilution of position (HDOP). Your capture device needs to log that information.")); 208 209 // color Tracks by Velocity Tune 210 int ccts = Main.pref.getInteger("draw.rawgps.colorTracksTune", 45); 211 colorTypeVelocityTune.setSelectedIndex(ccts==10 ? 2 : (ccts==20 ? 1 : 0)); 212 colorTypeVelocityTune.setToolTipText(tr("Allows to tune the track coloring for different average speeds.")); 213 colorTypeVelocityTune.setEnabled(colorTypeVelocity.isSelected() && colorTypeVelocity.isEnabled()); 214 215 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0)); 216 217 panel.add(new JLabel(tr("Track and Point Coloring")), GBC.eol().insets(20,0,0,0)); 218 panel.add(colorTypeNone, GBC.eol().insets(40,0,0,0)); 219 panel.add(colorTypeVelocity, GBC.std().insets(40,0,0,0)); 220 panel.add(colorTypeVelocityTune, GBC.eop().insets(5,0,0,5)); 221 panel.add(colorTypeDirection, GBC.eol().insets(40,0,0,0)); 222 panel.add(colorTypeDilution, GBC.eol().insets(40,0,0,0)); 223 colorDynamic.setToolTipText(tr("Draw direction arrows for lines, connecting GPS points.")); 224 colorDynamic.setSelected(Main.pref.getBoolean("draw.rawgps.colors.dynamic", false)); 225 colorDynamic.setEnabled(colorTypeVelocity.isSelected() || colorTypeDilution.isSelected()); 226 panel.add(colorDynamic, GBC.eop().insets(40,0,0,0)); 227 228 // waypointLabel 229 panel.add(Box.createVerticalGlue(), GBC.eol().insets(0, 20, 0, 0)); 230 231 waypointLabel.setSelectedIndex(Main.pref.getInteger("draw.rawgps.layer.wpt", 0 )); 232 panel.add(new JLabel(tr("Waypoint labelling")), GBC.std().insets(20,0,0,0)); 233 panel.add(waypointLabel, GBC.eol().fill(GBC.HORIZONTAL).insets(5,0,0,5)); 234 235 panel.add(Box.createVerticalGlue(), GBC.eol().fill(GBC.BOTH)); 49 gpxPanel = new GPXSettingsPanel(); 50 JPanel panel = gpxPanel; 51 236 52 JScrollPane scrollpane = new JScrollPane(panel); 237 53 scrollpane.setBorder(BorderFactory.createEmptyBorder( 0, 0, 0, 0 )); 238 54 gui.displaycontent.addTab(tr("GPS Points"), scrollpane); … … 302 118 } 303 119 304 120 public boolean ok() { 305 Main.pref.put("marker.makeautomarkers", makeAutoMarkers.isSelected());121 gpxPanel.savePreferences(); 306 122 Main.pref.put("draw.data.area_outline_only", outlineOnly.isSelected()); 307 Main.pref.put("draw.rawgps.lines", drawRawGpsLinesAll.isSelected());308 Main.pref.put("draw.rawgps.lines.local", drawRawGpsLinesAll.isSelected() || drawRawGpsLinesLocal.isSelected());309 Main.pref.put("draw.rawgps.max-line-length", drawRawGpsMaxLineLength.getText());310 Main.pref.put("draw.rawgps.max-line-length.local", drawRawGpsMaxLineLengthLocal.getText());311 Main.pref.put("draw.rawgps.lines.force", forceRawGpsLines.isSelected());312 Main.pref.put("draw.rawgps.direction", drawGpsArrows.isSelected());313 Main.pref.put("draw.rawgps.alternatedirection", drawGpsArrowsFast.isSelected());314 Main.pref.put("draw.rawgps.min-arrow-distance", drawGpsArrowsMinDist.getText());315 Main.pref.put("draw.rawgps.colors.dynamic", colorDynamic.isSelected());316 if(colorTypeVelocity.isSelected()) {317 Main.pref.putInteger("draw.rawgps.colors", 1);318 } else if(colorTypeDilution.isSelected()) {319 Main.pref.putInteger("draw.rawgps.colors", 2);320 } else if(colorTypeDirection.isSelected()) {321 Main.pref.putInteger("draw.rawgps.colors", 3);322 } else {323 Main.pref.putInteger("draw.rawgps.colors", 0);324 }325 int ccti=colorTypeVelocityTune.getSelectedIndex();326 Main.pref.putInteger("draw.rawgps.colorTracksTune", ccti==2 ? 10 : (ccti==1 ? 20 : 45));327 Main.pref.put("draw.rawgps.hdopcircle", hdopCircleGpsPoints.isSelected());328 Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected());329 123 Main.pref.put("draw.segment.direction", directionHint.isSelected()); 330 124 Main.pref.put("draw.segment.head_only", headArrow.isSelected()); 331 125 Main.pref.put("draw.oneway", onewayArrow.isSelected()); … … 343 137 vn = 0; 344 138 } 345 139 Main.pref.putInteger("mappaint.node.virtual-size", vn); 346 Main.pref.putInteger("draw.rawgps.layer.wpt", waypointLabel.getSelectedIndex());347 140 return false; 348 141 } 349 142 }