Ticket #2028: JOSM.HeadArrow.patch
| File JOSM.HeadArrow.patch, 7.4 KB (added by , 17 years ago) |
|---|
-
src/org/openstreetmap/josm/data/osm/visitor/SimplePaintVisitor.java
63 63 protected Color backgroundColor; 64 64 protected boolean showDirectionArrow; 65 65 protected boolean showRelevantDirectionsOnly; 66 protected boolean showHeadArrowOnly; 66 67 protected boolean showOrderNumber; 67 68 protected boolean fillSelectedNode; 68 69 protected boolean fillUnselectedNode; … … 100 101 protected void getSettings(Boolean virtual) { 101 102 showDirectionArrow = Main.pref.getBoolean("draw.segment.direction", true); 102 103 showRelevantDirectionsOnly = Main.pref.getBoolean("draw.segment.relevant_directions_only", true); 104 showHeadArrowOnly = Main.pref.getBoolean("draw.segment.head_only", false); 103 105 showOrderNumber = Main.pref.getBoolean("draw.segment.order_number", false); 104 106 selectedNodeRadius = Main.pref.getInteger("mappaint.node.selected-size", 5) / 2; 105 107 selectedNodeSize = selectedNodeRadius * 2; … … 291 293 292 294 boolean showThisDirectionArrow = w.selected 293 295 || (showDirectionArrow && (!showRelevantDirectionsOnly || w.hasDirectionKeys)); 296 // head only takes over control if the option is true, 297 // the direction should be shown at all and not only because it's selected 298 boolean showOnlyHeadArrowOnly = showThisDirectionArrow && !w.selected && showHeadArrowOnly; 294 299 Color wayColor; 295 300 296 301 if (inactive) { … … 306 311 Point lastP = nc.getPoint(it.next().eastNorth); 307 312 for (int orderNumber = 1; it.hasNext(); orderNumber++) { 308 313 Point p = nc.getPoint(it.next().eastNorth); 309 drawSegment(lastP, p, w.selected && !inactive ? selectedColor : wayColor, showThisDirectionArrow); 314 drawSegment(lastP, p, w.selected && !inactive ? selectedColor : wayColor, 315 showOnlyHeadArrowOnly ? !it.hasNext() : showThisDirectionArrow); 310 316 if (showOrderNumber) 311 317 drawOrderNumber(lastP, p, orderNumber); 312 318 lastP = p; -
src/org/openstreetmap/josm/data/osm/visitor/MapPaintVisitor.java
16 16 import java.util.Collection; 17 17 import java.util.LinkedList; 18 18 import java.util.Locale; 19 import java.util.Iterator; 19 20 20 21 import javax.swing.ImageIcon; 21 22 … … 196 197 // (even if the tag is negated as in oneway=false) or the way is selected 197 198 boolean showDirection = w.selected || ((!useRealWidth) && (showDirectionArrow 198 199 && (!showRelevantDirectionsOnly || w.hasDirectionKeys))); 200 // head only takes over control if the option is true, 201 // the direction should be shown at all and not only because it's selected 202 boolean showOnlyHeadArrowOnly = showDirection && !w.selected && showHeadArrowOnly; 199 203 int width = defaultSegmentWidth; 200 204 int realWidth = 0; //the real width of the element in meters 201 205 boolean dashed = false; … … 241 245 242 246 // draw the way 243 247 lastN = null; 244 for(Node n : w.nodes) 248 Iterator<Node> it = w.nodes.iterator(); 249 while (it.hasNext()) 245 250 { 251 Node n = it.next(); 246 252 if(lastN != null) 247 drawSeg(lastN, n, color, showDirection, width, dashed); 253 drawSeg(lastN, n, color, 254 showOnlyHeadArrowOnly ? !it.hasNext() : showDirection, width, dashed); 248 255 lastN = n; 249 256 } 250 257 -
src/org/openstreetmap/josm/gui/preferences/DrawingPreference.java
31 31 private JCheckBox drawGpsArrowsFast = new JCheckBox(tr("Fast drawing (looks uglier)")); 32 32 private JTextField drawGpsArrowsMinDist = new JTextField(8); 33 33 private JCheckBox interestingDirections = new JCheckBox(tr("Only interesting direction hints (e.g. with oneway tag).")); 34 private JCheckBox headArrow = new JCheckBox(tr("Only on the head of a way.")); 34 35 private JCheckBox segmentOrderNumber = new JCheckBox(tr("Draw segment order numbers")); 35 36 private JCheckBox sourceBounds = new JCheckBox(tr("Draw boundaries of downloaded data")); 36 37 private JCheckBox virtualNodes = new JCheckBox(tr("Draw virtual nodes in select mode")); … … 116 117 // directionHint 117 118 directionHint.addActionListener(new ActionListener(){ 118 119 public void actionPerformed(ActionEvent e) { 119 if (directionHint.isSelected()){ 120 interestingDirections.setSelected(Main.pref.getBoolean("draw.segment.relevant_directions_only", true)); 121 }else{ 122 interestingDirections.setSelected(false); 123 } 124 interestingDirections.setEnabled(directionHint.isSelected()); 120 if (directionHint.isSelected()){ 121 interestingDirections.setSelected(Main.pref.getBoolean("draw.segment.relevant_directions_only", true)); 122 headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false)); 123 }else{ 124 interestingDirections.setSelected(false); 125 headArrow.setSelected(false); 126 } 127 interestingDirections.setEnabled(directionHint.isSelected()); 128 headArrow.setEnabled(directionHint.isSelected()); 125 129 } 126 130 }); 127 131 directionHint.setToolTipText(tr("Draw direction hints for way segments.")); … … 134 138 interestingDirections.setEnabled(directionHint.isSelected()); 135 139 panel.add(interestingDirections, GBC.eop().insets(40,0,0,0)); 136 140 141 // only on the head of a way 142 headArrow.setToolTipText(tr("Only on the head of a way.")); 143 headArrow.setSelected(Main.pref.getBoolean("draw.segment.head_only", false)); 144 headArrow.setEnabled(directionHint.isSelected()); 145 panel.add(headArrow, GBC.eop().insets(40, 0, 0, 0)); 146 137 147 // segment order number 138 148 segmentOrderNumber.setToolTipText(tr("Draw the order numbers of all segments within their way.")); 139 149 segmentOrderNumber.setSelected(Main.pref.getBoolean("draw.segment.order_number", false)); … … 176 186 Main.pref.put("draw.rawgps.large", largeGpsPoints.isSelected()); 177 187 Main.pref.put("draw.segment.direction", directionHint.isSelected()); 178 188 Main.pref.put("draw.segment.relevant_directions_only", interestingDirections.isSelected()); 189 Main.pref.put("draw.segment.head_only", headArrow.isSelected()); 179 190 Main.pref.put("draw.segment.order_number", segmentOrderNumber.isSelected()); 180 191 Main.pref.put("draw.data.downloaded_area", sourceBounds.isSelected()); 181 192 Main.pref.put("draw.data.inactive_color", inactive.isSelected());
