close Warning: HTML preview using PatchRenderer failed (ValueError: not enough values to unpack (expected 2, got 1))

Ticket #15802: circular_building_tool_2.patch

File circular_building_tool_2.patch, 71.1 KB (added by abalosc1, 6 years ago)

Patch File for Circular Building Tool with updated shortcuts

Line 
1From cef710deeff108c7d68e0e9befb7ae8cb349cab5 Mon Sep 17 00:00:00 2001
2From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
3Date: Wed, 3 Jan 2018 14:19:10 -0500
4Subject: [PATCH 01/23] 90 initial commit
5
6---
7 buildings_tools/src/buildings_tools/Building.java | 76 +++++++++++++++++++++-
8 .../src/buildings_tools/BuildingSizeDialog.java | 22 ++++++-
9 .../src/buildings_tools/DrawBuildingAction.java | 63 +++++++++++++-----
10 .../src/buildings_tools/ToolSettings.java | 14 ++++
11 4 files changed, 157 insertions(+), 18 deletions(-)
12
13diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
14index 939db54..ba8918d 100644
15--- a/buildings_tools/src/buildings_tools/Building.java
16+++ b/buildings_tools/src/buildings_tools/Building.java
17@@ -16,6 +16,7 @@ import java.util.Map.Entry;
18 import javax.swing.JOptionPane;
19
20 import org.openstreetmap.josm.Main;
21+import org.openstreetmap.josm.actions.CreateCircleAction;
22 import org.openstreetmap.josm.command.AddCommand;
23 import org.openstreetmap.josm.command.ChangeCommand;
24 import org.openstreetmap.josm.command.Command;
25@@ -70,7 +71,8 @@ class Building {
26 }
27
28 public boolean isRectDrawing() {
29- return drawingAngle != null && ToolSettings.getWidth() == 0 && ToolSettings.getLenStep() == 0;
30+ return drawingAngle != null && ToolSettings.getWidth() == 0 && ToolSettings.getLenStep() == 0
31+ && ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape());
32 }
33
34 public Double getDrawingAngle() {
35@@ -265,6 +267,78 @@ class Building {
36 return nodes.get(0);
37 }
38
39+ public Way createCircle() {
40+ if (len == 0)
41+ return null;
42+ final boolean[] created = new boolean[2];
43+ final Node[] nodes = new Node[2];
44+ for (int i = 0; i < 2; i++) {
45+
46+ Node n = findNode(en[i]);
47+ if (n == null) {
48+ nodes[i] = new Node(eastNorth2latlon(en[i]));
49+ created[i] = true;
50+ } else {
51+ nodes[i] = n;
52+ created[i] = false;
53+ }
54+ if (nodes[i].getCoor().isOutSideWorld()) {
55+ JOptionPane.showMessageDialog(Main.parent,
56+ tr("Cannot place building outside of the world."));
57+ return null;
58+ }
59+ }
60+ Way w = new Way();
61+ w.addNode(nodes[0]);
62+ w.addNode(nodes[1]);
63+
64+
65+ DataSet ds = MainApplication.getLayerManager().getEditDataSet();
66+ Collection<Command> cmds = new LinkedList<>();
67+ for (int i = 0; i < 2; i++) {
68+ if (created[i]) {
69+ ds.addPrimitive(nodes[i]);
70+ ds.addSelected(nodes[i]);
71+ }
72+ // cmds.add(new AddCommand(ds, nodes[i]));
73+ }
74+ cmds.add(new AddCommand(ds, w));
75+ // ds.addPrimitive(w);
76+
77+ if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
78+ Node addrNode = getAddressNode();
79+ if (addrNode != null) {
80+ for (Entry<String, String> entry : addrNode.getKeys().entrySet()) {
81+ w.put(entry.getKey(), entry.getValue());
82+ }
83+ for (OsmPrimitive p : addrNode.getReferrers()) {
84+ Relation r = (Relation) p;
85+ Relation rnew = new Relation(r);
86+ for (int i = 0; i < r.getMembersCount(); i++) {
87+ RelationMember member = r.getMember(i);
88+ if (addrNode.equals(member.getMember())) {
89+ rnew.removeMember(i);
90+ rnew.addMember(i, new RelationMember(member.getRole(), w));
91+ }
92+ }
93+ cmds.add(new ChangeCommand(r, rnew));
94+ }
95+ cmds.add(new DeleteCommand(addrNode));
96+ }
97+ }
98+
99+ Command c = new SequenceCommand(tr("Create building"), cmds);
100+ CreateCircleAction action = new CreateCircleAction();
101+ action.setEnabled(true);
102+ action.actionPerformed(null);
103+ ds.clearSelection();
104+ // ds.removePrimitive(w);
105+ w = ds.getWays().iterator().next();
106+ Main.main.undoRedo.add(c); // this may not undo changes to ds
107+
108+ return w;
109+ }
110+
111 public Way create() {
112 if (len == 0)
113 return null;
114diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
115index 9d70038..66d929b 100644
116--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
117+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
118@@ -8,9 +8,11 @@ import java.awt.event.ActionListener;
119 import java.text.NumberFormat;
120 import java.text.ParseException;
121
122+import javax.swing.ButtonGroup;
123 import javax.swing.JButton;
124 import javax.swing.JCheckBox;
125 import javax.swing.JFormattedTextField;
126+import javax.swing.JRadioButton;
127
128 import org.openstreetmap.josm.tools.GBC;
129
130@@ -21,9 +23,22 @@ public class BuildingSizeDialog extends MyDialog {
131 private final JCheckBox caddr = new JCheckBox(tr("Use Address dialog"));
132 private final JCheckBox cAutoSelect = new JCheckBox(tr("Auto-select building"));
133 private final JCheckBox cAddrNode = new JCheckBox(tr("Use address nodes under buildings"));
134+ private final JRadioButton circleRadio = new JRadioButton("Circle");
135+ private final JRadioButton rectangleRadio = new JRadioButton("Rectangle");
136
137 public BuildingSizeDialog() {
138- super(tr("Set buildings size"));
139+ super(tr("Set buildings size and shape"));
140+
141+ ButtonGroup shapeGroup = new ButtonGroup();
142+ shapeGroup.add(circleRadio);
143+ shapeGroup.add(rectangleRadio);
144+ if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
145+ circleRadio.setSelected(true);
146+ } else if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
147+ rectangleRadio.setSelected(true);
148+ }
149+ panel.add(rectangleRadio, GBC.eol().fill(GBC.HORIZONTAL));
150+ panel.add(circleRadio, GBC.eol().fill(GBC.HORIZONTAL));
151
152 addLabelled(tr("Buildings width:"), twidth);
153 addLabelled(tr("Length step:"), tlenstep);
154@@ -74,6 +89,11 @@ public class BuildingSizeDialog extends MyDialog {
155 }
156
157 public final void saveSettings() {
158+ if (circleRadio.isSelected()) {
159+ ToolSettings.setShape(ToolSettings.Shape.CIRCLE);
160+ } else if (rectangleRadio.isSelected()) {
161+ ToolSettings.setShape(ToolSettings.Shape.RECTANGLE);
162+ }
163 ToolSettings.setSizes(width(), lenstep());
164 ToolSettings.setAddrDialog(useAddr());
165 ToolSettings.setAutoSelect(cAutoSelect.isSelected());
166diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
167index 31ba318..d48628b 100644
168--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
169+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
170@@ -17,6 +17,7 @@ import java.awt.event.KeyEvent;
171 import java.awt.event.MouseEvent;
172 import java.awt.geom.GeneralPath;
173 import java.awt.image.BufferedImage;
174+import java.util.Arrays;
175 import java.util.Collection;
176 import java.util.LinkedList;
177 import java.util.Map.Entry;
178@@ -216,15 +217,27 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
179
180 private Mode modeDrawing() {
181 EastNorth p = getEastNorth();
182- if (isRectDrawing()) {
183- building.setPlaceRect(p);
184- return shift ? Mode.DrawingAngFix : Mode.None;
185- } else {
186- building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
187- MainApplication.getMap().statusLine.setDist(building.getLength());
188- this.nextMode = ToolSettings.getWidth() == 0 ? Mode.DrawingWidth : Mode.None;
189- return this.nextMode;
190- }
191+ // if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
192+ if (isRectDrawing()) {
193+ building.setPlaceRect(p);
194+ return shift ? Mode.DrawingAngFix : Mode.None;
195+ } else {
196+ building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
197+ MainApplication.getMap().statusLine.setDist(building.getLength());
198+ this.nextMode = ToolSettings.getWidth() == 0 ? Mode.DrawingWidth : Mode.None;
199+ return this.nextMode;
200+ }
201+ // } else if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape()))
202+ // {
203+ // // Node n1 = new Node();
204+ // // Node n2 = new Node();
205+ // //
206+ // // Way w = new Way(); // Way is Clockwize
207+ // // w.setNodes(Arrays.asList(new Node[] { n1, n2 }));
208+ // // getLayerManager().getEditDataSet().addPrimitive(w);
209+ // }
210+
211+ // return Mode.None;
212 }
213
214 private Mode modeDrawingWidth() {
215@@ -279,13 +292,27 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
216 drawStartPos = mousePos;
217
218 Node n = MainApplication.getMap().mapView.getNearestNode(mousePos, OsmPrimitive::isUsable);
219- if (n == null) {
220- building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
221+
222+ if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
223+ if (n == null) {
224+ building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
225+ } else {
226+ building.setBase(n);
227+ }
228+ mode = Mode.Drawing;
229+ updateStatusLine();
230 } else {
231- building.setBase(n);
232+ building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
233+ mode = Mode.Drawing;
234+ updateStatusLine();
235+
236+ // Node n1 = new Node();
237+ // Node n2 = new Node();
238+ //
239+ // Way w = new Way(); // Way is Clockwize
240+ // w.setNodes(Arrays.asList(new Node[] { n1, n2 }));
241+ // getLayerManager().getEditDataSet().addPrimitive(w);
242 }
243- mode = Mode.Drawing;
244- updateStatusLine();
245 }
246
247 private void drawingAdvance(MouseEvent e) {
248@@ -300,7 +327,12 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
249
250 private void drawingFinish() {
251 if (building.getLength() != 0) {
252- Way w = building.create();
253+ Way w;
254+ if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
255+ w = building.create();
256+ } else {
257+ w = building.createCircle();
258+ }
259 if (w != null) {
260 if (!alt || ToolSettings.isUsingAddr())
261 for (Entry<String, String> kv : ToolSettings.getTags().entrySet()) {
262@@ -421,7 +453,6 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
263 break;
264 }
265 }
266-
267 building.addAngleSnap(nodes.toArray(new Node[0]));
268 for (Way w : ways) {
269 building.addAngleSnap(w);
270diff --git a/buildings_tools/src/buildings_tools/ToolSettings.java b/buildings_tools/src/buildings_tools/ToolSettings.java
271index 2e14b4b..8e75862 100644
272--- a/buildings_tools/src/buildings_tools/ToolSettings.java
273+++ b/buildings_tools/src/buildings_tools/ToolSettings.java
274@@ -21,12 +21,26 @@ public final class ToolSettings {
275 }
276
277 public static final BooleanProperty PROP_USE_ADDR_NODE = new BooleanProperty("buildings_tools.addrNode", false);
278+
279+ public enum Shape {
280+ CIRCLE, RECTANGLE
281+ }
282+
283+ private static Shape shape = Shape.RECTANGLE;
284 private static double width = 0;
285 private static double lenstep = 0;
286 private static boolean useAddr;
287 private static final Map<String, String> TAGS = new HashMap<>();
288 private static boolean autoSelect;
289
290+ public static Shape getShape() {
291+ return shape;
292+ }
293+
294+ public static void setShape(Shape shape) {
295+ ToolSettings.shape = shape;
296+ }
297+
298 public static void setAddrDialog(boolean _useAddr) {
299 useAddr = _useAddr;
300 }
301--
3022.7.4
303
304
305From 18d89bfe3c06182e92a7c46db637d2473fc6809b Mon Sep 17 00:00:00 2001
306From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
307Date: Wed, 3 Jan 2018 15:37:25 -0500
308Subject: [PATCH 02/23] 90 remove nodes used to create circle
309
310---
311 buildings_tools/src/buildings_tools/Building.java | 28 +++++++++++++----------
312 1 file changed, 16 insertions(+), 12 deletions(-)
313
314diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
315index ba8918d..13e105b 100644
316--- a/buildings_tools/src/buildings_tools/Building.java
317+++ b/buildings_tools/src/buildings_tools/Building.java
318@@ -8,6 +8,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
319 import java.awt.Graphics2D;
320 import java.awt.Point;
321 import java.awt.geom.GeneralPath;
322+import java.util.Arrays;
323 import java.util.Collection;
324 import java.util.LinkedList;
325 import java.util.List;
326@@ -300,10 +301,19 @@ class Building {
327 ds.addPrimitive(nodes[i]);
328 ds.addSelected(nodes[i]);
329 }
330- // cmds.add(new AddCommand(ds, nodes[i]));
331 }
332- cmds.add(new AddCommand(ds, w));
333- // ds.addPrimitive(w);
334+
335+ CreateCircleAction action = new CreateCircleAction();
336+ action.setEnabled(true);
337+ action.actionPerformed(null);
338+
339+ for (int i = 0; i < 2; i++) {
340+ ds.removePrimitive(ds.getSelectedNodes().iterator().next());
341+ }
342+
343+ int lastWayIndex = ds.getWays().size() - 1;
344+ List<Object> ways = Arrays.asList(ds.getWays().toArray());
345+ w = (Way) ways.get(lastWayIndex);
346
347 if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
348 Node addrNode = getAddressNode();
349@@ -325,16 +335,10 @@ class Building {
350 }
351 cmds.add(new DeleteCommand(addrNode));
352 }
353- }
354+ Command c = new SequenceCommand(tr("Create building"), cmds);
355
356- Command c = new SequenceCommand(tr("Create building"), cmds);
357- CreateCircleAction action = new CreateCircleAction();
358- action.setEnabled(true);
359- action.actionPerformed(null);
360- ds.clearSelection();
361- // ds.removePrimitive(w);
362- w = ds.getWays().iterator().next();
363- Main.main.undoRedo.add(c); // this may not undo changes to ds
364+ Main.main.undoRedo.add(c);
365+ }
366
367 return w;
368 }
369--
3702.7.4
371
372
373From aee390012dfa08b83742262195d6cfb86cf6b89b Mon Sep 17 00:00:00 2001
374From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
375Date: Thu, 4 Jan 2018 11:38:31 -0500
376Subject: [PATCH 03/23] 90 load shape for building tool from preferences
377
378---
379 .../src/buildings_tools/BuildingSizeDialog.java | 2 ++
380 buildings_tools/src/buildings_tools/ToolSettings.java | 14 ++++++++++++++
381 2 files changed, 16 insertions(+)
382
383diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
384index 66d929b..3c5cf7c 100644
385--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
386+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
387@@ -91,8 +91,10 @@ public class BuildingSizeDialog extends MyDialog {
388 public final void saveSettings() {
389 if (circleRadio.isSelected()) {
390 ToolSettings.setShape(ToolSettings.Shape.CIRCLE);
391+ ToolSettings.saveShape("CIRCLE");
392 } else if (rectangleRadio.isSelected()) {
393 ToolSettings.setShape(ToolSettings.Shape.RECTANGLE);
394+ ToolSettings.saveShape("RECTANGLE");
395 }
396 ToolSettings.setSizes(width(), lenstep());
397 ToolSettings.setAddrDialog(useAddr());
398diff --git a/buildings_tools/src/buildings_tools/ToolSettings.java b/buildings_tools/src/buildings_tools/ToolSettings.java
399index 8e75862..49bd3e5 100644
400--- a/buildings_tools/src/buildings_tools/ToolSettings.java
401+++ b/buildings_tools/src/buildings_tools/ToolSettings.java
402@@ -34,6 +34,7 @@ public final class ToolSettings {
403 private static boolean autoSelect;
404
405 public static Shape getShape() {
406+ loadShape();
407 return shape;
408 }
409
410@@ -91,6 +92,19 @@ public final class ToolSettings {
411 }
412 }
413
414+ public static void saveShape(String shape) {
415+ Main.pref.put("buildings_tool.shape", shape);
416+ }
417+
418+ private static void loadShape() {
419+ String shape = Main.pref.get("buildings_tool.shape");
420+ if ("CIRCLE".equals(shape)) {
421+ setShape(Shape.CIRCLE);
422+ } else if ("RECTANGLE".equals(shape)) {
423+ setShape(Shape.RECTANGLE);
424+ }
425+ }
426+
427 public static void setBBMode(boolean bbmode) {
428 Main.pref.putBoolean("buildings_tools.bbmode", bbmode);
429 }
430--
4312.7.4
432
433
434From 77a5a283951de990f0013f2e7c32d4be064ad035 Mon Sep 17 00:00:00 2001
435From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
436Date: Thu, 4 Jan 2018 12:27:26 -0500
437Subject: [PATCH 04/23] 90 get rid of third click for circle tool. default to
438 rectangle if no pref
439
440---
441 .../src/buildings_tools/BuildingSizeDialog.java | 2 +-
442 .../src/buildings_tools/DrawBuildingAction.java | 41 ++++++++--------------
443 2 files changed, 15 insertions(+), 28 deletions(-)
444
445diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
446index 3c5cf7c..a990694 100644
447--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
448+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
449@@ -34,7 +34,7 @@ public class BuildingSizeDialog extends MyDialog {
450 shapeGroup.add(rectangleRadio);
451 if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
452 circleRadio.setSelected(true);
453- } else if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
454+ } else {
455 rectangleRadio.setSelected(true);
456 }
457 panel.add(rectangleRadio, GBC.eol().fill(GBC.HORIZONTAL));
458diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
459index d48628b..6cfc3c4 100644
460--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
461+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
462@@ -212,32 +212,26 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
463 }
464
465 private boolean isRectDrawing() {
466- return building.isRectDrawing() && (!shift || ToolSettings.isBBMode());
467+ return building.isRectDrawing() && (!shift || ToolSettings.isBBMode())
468+ && ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape());
469 }
470
471 private Mode modeDrawing() {
472 EastNorth p = getEastNorth();
473- // if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
474- if (isRectDrawing()) {
475+ if (isRectDrawing()) {
476 building.setPlaceRect(p);
477 return shift ? Mode.DrawingAngFix : Mode.None;
478- } else {
479- building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
480- MainApplication.getMap().statusLine.setDist(building.getLength());
481- this.nextMode = ToolSettings.getWidth() == 0 ? Mode.DrawingWidth : Mode.None;
482- return this.nextMode;
483- }
484- // } else if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape()))
485- // {
486- // // Node n1 = new Node();
487- // // Node n2 = new Node();
488- // //
489- // // Way w = new Way(); // Way is Clockwize
490- // // w.setNodes(Arrays.asList(new Node[] { n1, n2 }));
491- // // getLayerManager().getEditDataSet().addPrimitive(w);
492- // }
493-
494- // return Mode.None;
495+ } else if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
496+ building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
497+ MainApplication.getMap().statusLine.setDist(building.getLength());
498+ this.nextMode = Mode.None;
499+ return this.nextMode;
500+ } else {
501+ building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
502+ MainApplication.getMap().statusLine.setDist(building.getLength());
503+ this.nextMode = ToolSettings.getWidth() == 0 ? Mode.DrawingWidth : Mode.None;
504+ return this.nextMode;
505+ }
506 }
507
508 private Mode modeDrawingWidth() {
509@@ -305,13 +299,6 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
510 building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
511 mode = Mode.Drawing;
512 updateStatusLine();
513-
514- // Node n1 = new Node();
515- // Node n2 = new Node();
516- //
517- // Way w = new Way(); // Way is Clockwize
518- // w.setNodes(Arrays.asList(new Node[] { n1, n2 }));
519- // getLayerManager().getEditDataSet().addPrimitive(w);
520 }
521 }
522
523--
5242.7.4
525
526
527From c5f134559b9732e7331dd6bf8cdde2cd525e7ddc Mon Sep 17 00:00:00 2001
528From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
529Date: Thu, 4 Jan 2018 14:50:09 -0500
530Subject: [PATCH 05/23] 90 add circle tool diameter and length step
531
532---
533 buildings_tools/src/buildings_tools/Building.java | 11 +++++++++++
534 buildings_tools/src/buildings_tools/BuildingSizeDialog.java | 2 +-
535 buildings_tools/src/buildings_tools/DrawBuildingAction.java | 6 +++++-
536 3 files changed, 17 insertions(+), 2 deletions(-)
537
538diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
539index 13e105b..7b6fb1d 100644
540--- a/buildings_tools/src/buildings_tools/Building.java
541+++ b/buildings_tools/src/buildings_tools/Building.java
542@@ -175,6 +175,17 @@ class Building {
543 }
544 }
545
546+ public void setPlaceCircle(EastNorth p2, double width, boolean ignoreConstraints) {
547+ if (en[0] == null)
548+ throw new IllegalStateException("setPlace() called without the base point");
549+ this.heading = en[0].heading(p2);
550+ if (!ignoreConstraints)
551+ this.heading = angleSnap.snapAngle(this.heading);
552+ this.len = width;
553+
554+ updatePos();
555+ }
556+
557 public void setPlaceRect(EastNorth p2) {
558 if (en[0] == null)
559 throw new IllegalStateException("SetPlaceRect() called without the base point");
560diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
561index a990694..4af02ef 100644
562--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
563+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
564@@ -40,7 +40,7 @@ public class BuildingSizeDialog extends MyDialog {
565 panel.add(rectangleRadio, GBC.eol().fill(GBC.HORIZONTAL));
566 panel.add(circleRadio, GBC.eol().fill(GBC.HORIZONTAL));
567
568- addLabelled(tr("Buildings width:"), twidth);
569+ addLabelled(tr("Buildings width/diameter:"), twidth);
570 addLabelled(tr("Length step:"), tlenstep);
571 panel.add(caddr, GBC.eol().fill(GBC.HORIZONTAL));
572 panel.add(cAutoSelect, GBC.eol().fill(GBC.HORIZONTAL));
573diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
574index 6cfc3c4..ba03177 100644
575--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
576+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
577@@ -222,7 +222,11 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
578 building.setPlaceRect(p);
579 return shift ? Mode.DrawingAngFix : Mode.None;
580 } else if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
581- building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
582+ if (ToolSettings.getWidth() != 0) {
583+ building.setPlaceCircle(p, ToolSettings.getWidth(), shift);
584+ } else {
585+ building.setPlace(p, ToolSettings.getWidth(), ToolSettings.getLenStep(), shift);
586+ }
587 MainApplication.getMap().statusLine.setDist(building.getLength());
588 this.nextMode = Mode.None;
589 return this.nextMode;
590--
5912.7.4
592
593
594From 24b96b37be177551f6b6216e2fa9b9168c7f221e Mon Sep 17 00:00:00 2001
595From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
596Date: Thu, 4 Jan 2018 16:32:10 -0500
597Subject: [PATCH 06/23] 90 add keyboard shortcuts to switch between rectangle
598 and circle buildings
599
600---
601 buildings_tools/src/buildings_tools/BuildingSizeDialog.java | 7 +++++--
602 buildings_tools/src/buildings_tools/DrawBuildingAction.java | 7 ++++++-
603 buildings_tools/src/buildings_tools/ToolSettings.java | 4 ++--
604 3 files changed, 13 insertions(+), 5 deletions(-)
605
606diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
607index 4af02ef..1a1d776 100644
608--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
609+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
610@@ -29,6 +29,9 @@ public class BuildingSizeDialog extends MyDialog {
611 public BuildingSizeDialog() {
612 super(tr("Set buildings size and shape"));
613
614+ circleRadio.setToolTipText("Press 'O' when creating building");
615+ rectangleRadio.setToolTipText("Press 'Q' when creating building");
616+
617 ButtonGroup shapeGroup = new ButtonGroup();
618 shapeGroup.add(circleRadio);
619 shapeGroup.add(rectangleRadio);
620@@ -91,10 +94,10 @@ public class BuildingSizeDialog extends MyDialog {
621 public final void saveSettings() {
622 if (circleRadio.isSelected()) {
623 ToolSettings.setShape(ToolSettings.Shape.CIRCLE);
624- ToolSettings.saveShape("CIRCLE");
625+ ToolSettings.saveShape(ToolSettings.Shape.CIRCLE.name());
626 } else if (rectangleRadio.isSelected()) {
627 ToolSettings.setShape(ToolSettings.Shape.RECTANGLE);
628- ToolSettings.saveShape("RECTANGLE");
629+ ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE.name());
630 }
631 ToolSettings.setSizes(width(), lenstep());
632 ToolSettings.setAddrDialog(useAddr());
633diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
634index ba03177..263a404 100644
635--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
636+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
637@@ -191,6 +191,12 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
638
639 cancelDrawing();
640 }
641+ if (e.getKeyCode() == KeyEvent.VK_O) {
642+ ToolSettings.saveShape(ToolSettings.Shape.CIRCLE.name());
643+ }
644+ if (e.getKeyCode() == KeyEvent.VK_Q) {
645+ ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE.name());
646+ }
647 }
648
649 @Override
650@@ -258,7 +264,6 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
651 nextMode = Mode.None;
652 return;
653 }
654-
655 if (mode == Mode.Drawing) {
656 nextMode = modeDrawing();
657 } else if (mode == Mode.DrawingWidth) {
658diff --git a/buildings_tools/src/buildings_tools/ToolSettings.java b/buildings_tools/src/buildings_tools/ToolSettings.java
659index 49bd3e5..141355f 100644
660--- a/buildings_tools/src/buildings_tools/ToolSettings.java
661+++ b/buildings_tools/src/buildings_tools/ToolSettings.java
662@@ -98,9 +98,9 @@ public final class ToolSettings {
663
664 private static void loadShape() {
665 String shape = Main.pref.get("buildings_tool.shape");
666- if ("CIRCLE".equals(shape)) {
667+ if (ToolSettings.Shape.CIRCLE.name().equals(shape)) {
668 setShape(Shape.CIRCLE);
669- } else if ("RECTANGLE".equals(shape)) {
670+ } else if (ToolSettings.Shape.RECTANGLE.name().equals(shape)) {
671 setShape(Shape.RECTANGLE);
672 }
673 }
674--
6752.7.4
676
677
678From 0335cda56b42dfcc4ef733fc0e6a71b32ec1927b Mon Sep 17 00:00:00 2001
679From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
680Date: Thu, 4 Jan 2018 17:15:01 -0500
681Subject: [PATCH 07/23] 90 do not remove original nodes, clear selection
682 instead
683
684---
685 buildings_tools/src/buildings_tools/Building.java | 4 +---
686 1 file changed, 1 insertion(+), 3 deletions(-)
687
688diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
689index 7b6fb1d..0b28089 100644
690--- a/buildings_tools/src/buildings_tools/Building.java
691+++ b/buildings_tools/src/buildings_tools/Building.java
692@@ -318,9 +318,7 @@ class Building {
693 action.setEnabled(true);
694 action.actionPerformed(null);
695
696- for (int i = 0; i < 2; i++) {
697- ds.removePrimitive(ds.getSelectedNodes().iterator().next());
698- }
699+ ds.clearSelection();
700
701 int lastWayIndex = ds.getWays().size() - 1;
702 List<Object> ways = Arrays.asList(ds.getWays().toArray());
703--
7042.7.4
705
706
707From db1d07c056a9ed8cc9cd8296356fcb44a12b5b1c Mon Sep 17 00:00:00 2001
708From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
709Date: Fri, 5 Jan 2018 11:13:44 -0500
710Subject: [PATCH 08/23] 90 change check in drawingFInish, length might be 0 if
711 circle
712
713---
714 buildings_tools/src/buildings_tools/DrawBuildingAction.java | 2 +-
715 1 file changed, 1 insertion(+), 1 deletion(-)
716
717diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
718index 263a404..49425a8 100644
719--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
720+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
721@@ -322,7 +322,7 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
722 }
723
724 private void drawingFinish() {
725- if (building.getLength() != 0) {
726+ if (building.getLength() != 0 || ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
727 Way w;
728 if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
729 w = building.create();
730--
7312.7.4
732
733
734From 9b941924df1ca00e2fde2e30965308ec40568363 Mon Sep 17 00:00:00 2001
735From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
736Date: Fri, 5 Jan 2018 11:41:44 -0500
737Subject: [PATCH 09/23] 90 add rectangle conditions where actions NA for
738 cirlce. remove circle check since circles have len too
739
740---
741 buildings_tools/src/buildings_tools/Building.java | 21 ++++++++++++---------
742 .../src/buildings_tools/DrawBuildingAction.java | 2 +-
743 2 files changed, 13 insertions(+), 10 deletions(-)
744
745diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
746index 0b28089..1f04e77 100644
747--- a/buildings_tools/src/buildings_tools/Building.java
748+++ b/buildings_tools/src/buildings_tools/Building.java
749@@ -133,10 +133,12 @@ class Building {
750 return;
751 final EastNorth p1 = en[0];
752 en[1] = new EastNorth(p1.east() + Math.sin(heading) * len * meter, p1.north() + Math.cos(heading) * len * meter);
753- en[2] = new EastNorth(p1.east() + Math.sin(heading) * len * meter + Math.cos(heading) * width * meter,
754- p1.north() + Math.cos(heading) * len * meter - Math.sin(heading) * width * meter);
755- en[3] = new EastNorth(p1.east() + Math.cos(heading) * width * meter,
756- p1.north() - Math.sin(heading) * width * meter);
757+ if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
758+ en[2] = new EastNorth(p1.east() + Math.sin(heading) * len * meter + Math.cos(heading) * width * meter,
759+ p1.north() + Math.cos(heading) * len * meter - Math.sin(heading) * width * meter);
760+ en[3] = new EastNorth(p1.east() + Math.cos(heading) * width * meter,
761+ p1.north() - Math.sin(heading) * width * meter);
762+ }
763 }
764
765 public void setLengthWidth(double length, double width) {
766@@ -212,13 +214,14 @@ class Building {
767 GeneralPath b = new GeneralPath();
768 Point pp1 = mv.getPoint(eastNorth2latlon(en[0]));
769 Point pp2 = mv.getPoint(eastNorth2latlon(en[1]));
770- Point pp3 = mv.getPoint(eastNorth2latlon(en[2]));
771- Point pp4 = mv.getPoint(eastNorth2latlon(en[3]));
772-
773 b.moveTo(pp1.x, pp1.y);
774 b.lineTo(pp2.x, pp2.y);
775- b.lineTo(pp3.x, pp3.y);
776- b.lineTo(pp4.x, pp4.y);
777+ if(ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())){
778+ Point pp3 = mv.getPoint(eastNorth2latlon(en[2]));
779+ Point pp4 = mv.getPoint(eastNorth2latlon(en[3]));
780+ b.lineTo(pp3.x, pp3.y);
781+ b.lineTo(pp4.x, pp4.y);
782+ }
783 b.lineTo(pp1.x, pp1.y);
784 g.draw(b);
785 }
786diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
787index 49425a8..263a404 100644
788--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
789+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
790@@ -322,7 +322,7 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
791 }
792
793 private void drawingFinish() {
794- if (building.getLength() != 0 || ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
795+ if (building.getLength() != 0) {
796 Way w;
797 if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
798 w = building.create();
799--
8002.7.4
801
802
803From f95675f32a2ff9e0acaaa98b1ad2bf2d71c55574 Mon Sep 17 00:00:00 2001
804From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
805Date: Fri, 5 Jan 2018 13:58:26 -0500
806Subject: [PATCH 10/23] 90 group undo of adding nodes
807
808---
809 buildings_tools/src/buildings_tools/Building.java | 25 +++++++++++++++++------
810 1 file changed, 19 insertions(+), 6 deletions(-)
811
812diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
813index 1f04e77..66ccb68 100644
814--- a/buildings_tools/src/buildings_tools/Building.java
815+++ b/buildings_tools/src/buildings_tools/Building.java
816@@ -309,10 +309,22 @@ class Building {
817
818
819 DataSet ds = MainApplication.getLayerManager().getEditDataSet();
820- Collection<Command> cmds = new LinkedList<>();
821+ Collection<Command> addNodesCmd = new LinkedList<>();
822+
823+ for (int i = 0; i < 2; i++) {
824+ if (created[i]) {
825+ AddCommand addNode = new AddCommand(ds, nodes[i]);
826+ addNodesCmd.add(addNode);
827+ }
828+ }
829+
830+ if (addNodesCmd.size() > 0) {
831+ Command addNodes = new SequenceCommand(tr("Add nodes for building"), addNodesCmd);
832+ Main.main.undoRedo.add(addNodes);
833+ }
834+
835 for (int i = 0; i < 2; i++) {
836 if (created[i]) {
837- ds.addPrimitive(nodes[i]);
838 ds.addSelected(nodes[i]);
839 }
840 }
841@@ -328,6 +340,8 @@ class Building {
842 w = (Way) ways.get(lastWayIndex);
843
844 if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
845+ Collection<Command> addressCmds = new LinkedList<>();
846+
847 Node addrNode = getAddressNode();
848 if (addrNode != null) {
849 for (Entry<String, String> entry : addrNode.getKeys().entrySet()) {
850@@ -343,12 +357,11 @@ class Building {
851 rnew.addMember(i, new RelationMember(member.getRole(), w));
852 }
853 }
854- cmds.add(new ChangeCommand(r, rnew));
855+ addressCmds.add(new ChangeCommand(r, rnew));
856 }
857- cmds.add(new DeleteCommand(addrNode));
858+ addressCmds.add(new DeleteCommand(addrNode));
859 }
860- Command c = new SequenceCommand(tr("Create building"), cmds);
861-
862+ Command c = new SequenceCommand(tr("Add address for building"), addressCmds);
863 Main.main.undoRedo.add(c);
864 }
865
866--
8672.7.4
868
869
870From 550cdfa62732b34b3f90a174a2589bbecf17eae2 Mon Sep 17 00:00:00 2001
871From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
872Date: Fri, 5 Jan 2018 14:34:37 -0500
873Subject: [PATCH 11/23] 90 add conditional for rectangle in getAddressNode
874
875---
876 buildings_tools/src/buildings_tools/Building.java | 6 ++++--
877 1 file changed, 4 insertions(+), 2 deletions(-)
878
879diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
880index 66ccb68..a506faa 100644
881--- a/buildings_tools/src/buildings_tools/Building.java
882+++ b/buildings_tools/src/buildings_tools/Building.java
883@@ -250,8 +250,10 @@ class Building {
884 */
885 private Node getAddressNode() {
886 BBox bbox = new BBox(eastNorth2latlon(en[0]), eastNorth2latlon(en[1]));
887- bbox.add(eastNorth2latlon(en[2]));
888- bbox.add(eastNorth2latlon(en[3]));
889+ if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
890+ bbox.add(eastNorth2latlon(en[2]));
891+ bbox.add(eastNorth2latlon(en[3]));
892+ }
893 List<Node> nodes = new LinkedList<>();
894 nodesloop:
895 for (Node n : MainApplication.getLayerManager().getEditDataSet().searchNodes(bbox)) {
896--
8972.7.4
898
899
900From b89c763088b655113f480e9c7779b4b20079e300 Mon Sep 17 00:00:00 2001
901From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
902Date: Fri, 5 Jan 2018 14:38:49 -0500
903Subject: [PATCH 12/23] 90 move where address node commands added
904
905---
906 buildings_tools/src/buildings_tools/Building.java | 7 ++++---
907 1 file changed, 4 insertions(+), 3 deletions(-)
908
909diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
910index a506faa..1f0da89 100644
911--- a/buildings_tools/src/buildings_tools/Building.java
912+++ b/buildings_tools/src/buildings_tools/Building.java
913@@ -342,10 +342,11 @@ class Building {
914 w = (Way) ways.get(lastWayIndex);
915
916 if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
917- Collection<Command> addressCmds = new LinkedList<>();
918
919 Node addrNode = getAddressNode();
920 if (addrNode != null) {
921+ Collection<Command> addressCmds = new LinkedList<>();
922+
923 for (Entry<String, String> entry : addrNode.getKeys().entrySet()) {
924 w.put(entry.getKey(), entry.getValue());
925 }
926@@ -362,9 +363,9 @@ class Building {
927 addressCmds.add(new ChangeCommand(r, rnew));
928 }
929 addressCmds.add(new DeleteCommand(addrNode));
930+ Command c = new SequenceCommand(tr("Add address for building"), addressCmds);
931+ Main.main.undoRedo.add(c);
932 }
933- Command c = new SequenceCommand(tr("Add address for building"), addressCmds);
934- Main.main.undoRedo.add(c);
935 }
936
937 return w;
938--
9392.7.4
940
941
942From f0d489d5259a60814416bfa1f7b6f3378a88f5ee Mon Sep 17 00:00:00 2001
943From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
944Date: Tue, 9 Jan 2018 13:27:56 -0500
945Subject: [PATCH 13/23] 90 clear selected to create circle, keep selected after
946 created
947
948---
949 buildings_tools/src/buildings_tools/Building.java | 6 +++++-
950 1 file changed, 5 insertions(+), 1 deletion(-)
951
952diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
953index 1f0da89..2d34d91 100644
954--- a/buildings_tools/src/buildings_tools/Building.java
955+++ b/buildings_tools/src/buildings_tools/Building.java
956@@ -285,6 +285,10 @@ class Building {
957 }
958
959 public Way createCircle() {
960+ DataSet ds = MainApplication.getLayerManager().getEditDataSet();
961+ Collection<OsmPrimitive> selectedPrimitives = ds.getAllSelected();
962+ ds.clearSelection();
963+
964 if (len == 0)
965 return null;
966 final boolean[] created = new boolean[2];
967@@ -310,7 +314,6 @@ class Building {
968 w.addNode(nodes[1]);
969
970
971- DataSet ds = MainApplication.getLayerManager().getEditDataSet();
972 Collection<Command> addNodesCmd = new LinkedList<>();
973
974 for (int i = 0; i < 2; i++) {
975@@ -336,6 +339,7 @@ class Building {
976 action.actionPerformed(null);
977
978 ds.clearSelection();
979+ ds.addSelected(selectedPrimitives);
980
981 int lastWayIndex = ds.getWays().size() - 1;
982 List<Object> ways = Arrays.asList(ds.getWays().toArray());
983--
9842.7.4
985
986
987From 190afccdeded2a041c4e1c213227f32e32879877 Mon Sep 17 00:00:00 2001
988From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
989Date: Tue, 9 Jan 2018 15:48:05 -0500
990Subject: [PATCH 14/23] 90 add shift to shortcut for shape
991
992---
993 buildings_tools/src/buildings_tools/DrawBuildingAction.java | 5 +++--
994 1 file changed, 3 insertions(+), 2 deletions(-)
995
996diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
997index 263a404..751dd4c 100644
998--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
999+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1000@@ -191,10 +191,11 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1001
1002 cancelDrawing();
1003 }
1004- if (e.getKeyCode() == KeyEvent.VK_O) {
1005+
1006+ if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_C) {
1007 ToolSettings.saveShape(ToolSettings.Shape.CIRCLE.name());
1008 }
1009- if (e.getKeyCode() == KeyEvent.VK_Q) {
1010+ if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_R) {
1011 ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE.name());
1012 }
1013 }
1014--
10152.7.4
1016
1017
1018From 9fc8f653f408dd8c291e496ee7cb9756781bbe41 Mon Sep 17 00:00:00 2001
1019From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1020Date: Wed, 10 Jan 2018 12:43:39 -0500
1021Subject: [PATCH 15/23] 90 sort list of ways so always gets latest after circle
1022 created
1023
1024---
1025 buildings_tools/src/buildings_tools/Building.java | 17 +++++++++++++++--
1026 1 file changed, 15 insertions(+), 2 deletions(-)
1027
1028diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
1029index 2d34d91..f2ff02e 100644
1030--- a/buildings_tools/src/buildings_tools/Building.java
1031+++ b/buildings_tools/src/buildings_tools/Building.java
1032@@ -8,8 +8,11 @@ import static org.openstreetmap.josm.tools.I18n.tr;
1033 import java.awt.Graphics2D;
1034 import java.awt.Point;
1035 import java.awt.geom.GeneralPath;
1036+import java.util.ArrayList;
1037 import java.util.Arrays;
1038 import java.util.Collection;
1039+import java.util.Collections;
1040+import java.util.Comparator;
1041 import java.util.LinkedList;
1042 import java.util.List;
1043 import java.util.Map.Entry;
1044@@ -342,8 +345,18 @@ class Building {
1045 ds.addSelected(selectedPrimitives);
1046
1047 int lastWayIndex = ds.getWays().size() - 1;
1048- List<Object> ways = Arrays.asList(ds.getWays().toArray());
1049- w = (Way) ways.get(lastWayIndex);
1050+
1051+ List<Way> ways = new ArrayList(ds.getWays());
1052+ Comparator<Way> comparator = new Comparator<Way>() {
1053+ @Override
1054+ public int compare(Way left, Way right) {
1055+ return Long.compare(right.getUniqueId(), left.getUniqueId());
1056+ }
1057+ };
1058+
1059+ Collections.sort(ways, comparator);
1060+
1061+ w = ways.get(lastWayIndex);
1062
1063 if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
1064
1065--
10662.7.4
1067
1068
1069From d0dbc1539de2cfbd57e7f6c0e733225222c46f07 Mon Sep 17 00:00:00 2001
1070From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1071Date: Wed, 10 Jan 2018 13:40:29 -0500
1072Subject: [PATCH 16/23] 90 break out address logic, rename create
1073
1074---
1075 buildings_tools/src/buildings_tools/Building.java | 54 ++++++++--------------
1076 .../src/buildings_tools/DrawBuildingAction.java | 2 +-
1077 2 files changed, 19 insertions(+), 37 deletions(-)
1078
1079diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
1080index f2ff02e..6337337 100644
1081--- a/buildings_tools/src/buildings_tools/Building.java
1082+++ b/buildings_tools/src/buildings_tools/Building.java
1083@@ -316,7 +316,6 @@ class Building {
1084 w.addNode(nodes[0]);
1085 w.addNode(nodes[1]);
1086
1087-
1088 Collection<Command> addNodesCmd = new LinkedList<>();
1089
1090 for (int i = 0; i < 2; i++) {
1091@@ -331,6 +330,7 @@ class Building {
1092 Main.main.undoRedo.add(addNodes);
1093 }
1094
1095+ // Nodes must be selected for create circle action
1096 for (int i = 0; i < 2; i++) {
1097 if (created[i]) {
1098 ds.addSelected(nodes[i]);
1099@@ -345,7 +345,6 @@ class Building {
1100 ds.addSelected(selectedPrimitives);
1101
1102 int lastWayIndex = ds.getWays().size() - 1;
1103-
1104 List<Way> ways = new ArrayList(ds.getWays());
1105 Comparator<Way> comparator = new Comparator<Way>() {
1106 @Override
1107@@ -353,42 +352,15 @@ class Building {
1108 return Long.compare(right.getUniqueId(), left.getUniqueId());
1109 }
1110 };
1111-
1112 Collections.sort(ways, comparator);
1113-
1114 w = ways.get(lastWayIndex);
1115
1116- if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
1117-
1118- Node addrNode = getAddressNode();
1119- if (addrNode != null) {
1120- Collection<Command> addressCmds = new LinkedList<>();
1121-
1122- for (Entry<String, String> entry : addrNode.getKeys().entrySet()) {
1123- w.put(entry.getKey(), entry.getValue());
1124- }
1125- for (OsmPrimitive p : addrNode.getReferrers()) {
1126- Relation r = (Relation) p;
1127- Relation rnew = new Relation(r);
1128- for (int i = 0; i < r.getMembersCount(); i++) {
1129- RelationMember member = r.getMember(i);
1130- if (addrNode.equals(member.getMember())) {
1131- rnew.removeMember(i);
1132- rnew.addMember(i, new RelationMember(member.getRole(), w));
1133- }
1134- }
1135- addressCmds.add(new ChangeCommand(r, rnew));
1136- }
1137- addressCmds.add(new DeleteCommand(addrNode));
1138- Command c = new SequenceCommand(tr("Add address for building"), addressCmds);
1139- Main.main.undoRedo.add(c);
1140- }
1141- }
1142+ addAddress(w);
1143
1144 return w;
1145 }
1146
1147- public Way create() {
1148+ public Way createRectangle() {
1149 if (len == 0)
1150 return null;
1151 final boolean[] created = new boolean[4];
1152@@ -429,9 +401,20 @@ class Building {
1153 }
1154 cmds.add(new AddCommand(ds, w));
1155
1156+ addAddress(w);
1157+
1158+ Command c = new SequenceCommand(tr("Create building"), cmds);
1159+ Main.main.undoRedo.add(c);
1160+ return w;
1161+ }
1162+
1163+ private void addAddress(Way w) {
1164 if (ToolSettings.PROP_USE_ADDR_NODE.get()) {
1165+
1166 Node addrNode = getAddressNode();
1167 if (addrNode != null) {
1168+ Collection<Command> addressCmds = new LinkedList<>();
1169+
1170 for (Entry<String, String> entry : addrNode.getKeys().entrySet()) {
1171 w.put(entry.getKey(), entry.getValue());
1172 }
1173@@ -445,13 +428,12 @@ class Building {
1174 rnew.addMember(i, new RelationMember(member.getRole(), w));
1175 }
1176 }
1177- cmds.add(new ChangeCommand(r, rnew));
1178+ addressCmds.add(new ChangeCommand(r, rnew));
1179 }
1180- cmds.add(new DeleteCommand(addrNode));
1181+ addressCmds.add(new DeleteCommand(addrNode));
1182+ Command c = new SequenceCommand(tr("Add address for building"), addressCmds);
1183+ Main.main.undoRedo.add(c);
1184 }
1185 }
1186- Command c = new SequenceCommand(tr("Create building"), cmds);
1187- Main.main.undoRedo.add(c);
1188- return w;
1189 }
1190 }
1191diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1192index 751dd4c..ad1788e 100644
1193--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1194+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1195@@ -326,7 +326,7 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1196 if (building.getLength() != 0) {
1197 Way w;
1198 if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
1199- w = building.create();
1200+ w = building.createRectangle();
1201 } else {
1202 w = building.createCircle();
1203 }
1204--
12052.7.4
1206
1207
1208From 78ff8459e1c33fe0960dd2aa0308ed7326554edc Mon Sep 17 00:00:00 2001
1209From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1210Date: Wed, 10 Jan 2018 14:04:15 -0500
1211Subject: [PATCH 17/23] 90 update building size dialog tooltip, default to
1212 rectangle if no pref
1213
1214---
1215 buildings_tools/src/buildings_tools/BuildingSizeDialog.java | 12 +++++-------
1216 buildings_tools/src/buildings_tools/ToolSettings.java | 2 ++
1217 2 files changed, 7 insertions(+), 7 deletions(-)
1218
1219diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1220index 1a1d776..88e506b 100644
1221--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1222+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1223@@ -29,17 +29,15 @@ public class BuildingSizeDialog extends MyDialog {
1224 public BuildingSizeDialog() {
1225 super(tr("Set buildings size and shape"));
1226
1227- circleRadio.setToolTipText("Press 'O' when creating building");
1228- rectangleRadio.setToolTipText("Press 'Q' when creating building");
1229+ circleRadio.setToolTipText("Press SHIFT + 'C' when creating building");
1230+ rectangleRadio.setToolTipText("Press SHIFT + 'R' when creating building");
1231
1232 ButtonGroup shapeGroup = new ButtonGroup();
1233 shapeGroup.add(circleRadio);
1234 shapeGroup.add(rectangleRadio);
1235- if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
1236- circleRadio.setSelected(true);
1237- } else {
1238- rectangleRadio.setSelected(true);
1239- }
1240+ circleRadio.setSelected(ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape()));
1241+ rectangleRadio.setSelected(ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape()));
1242+
1243 panel.add(rectangleRadio, GBC.eol().fill(GBC.HORIZONTAL));
1244 panel.add(circleRadio, GBC.eol().fill(GBC.HORIZONTAL));
1245
1246diff --git a/buildings_tools/src/buildings_tools/ToolSettings.java b/buildings_tools/src/buildings_tools/ToolSettings.java
1247index 141355f..eacfb9f 100644
1248--- a/buildings_tools/src/buildings_tools/ToolSettings.java
1249+++ b/buildings_tools/src/buildings_tools/ToolSettings.java
1250@@ -102,6 +102,8 @@ public final class ToolSettings {
1251 setShape(Shape.CIRCLE);
1252 } else if (ToolSettings.Shape.RECTANGLE.name().equals(shape)) {
1253 setShape(Shape.RECTANGLE);
1254+ } else {
1255+ setShape(Shape.RECTANGLE);
1256 }
1257 }
1258
1259--
12602.7.4
1261
1262
1263From 9dfa9cfd3fc177105bab9d8930ffbf1f8dff3355 Mon Sep 17 00:00:00 2001
1264From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1265Date: Wed, 10 Jan 2018 14:10:23 -0500
1266Subject: [PATCH 18/23] 90 change tool tip text to match button
1267
1268---
1269 buildings_tools/src/buildings_tools/BuildingSizeDialog.java | 4 ++--
1270 1 file changed, 2 insertions(+), 2 deletions(-)
1271
1272diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1273index 88e506b..2771394 100644
1274--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1275+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1276@@ -29,8 +29,8 @@ public class BuildingSizeDialog extends MyDialog {
1277 public BuildingSizeDialog() {
1278 super(tr("Set buildings size and shape"));
1279
1280- circleRadio.setToolTipText("Press SHIFT + 'C' when creating building");
1281- rectangleRadio.setToolTipText("Press SHIFT + 'R' when creating building");
1282+ circleRadio.setToolTipText("Press SHIFT + 'C' when drawing building");
1283+ rectangleRadio.setToolTipText("Press SHIFT + 'R' when drawing building");
1284
1285 ButtonGroup shapeGroup = new ButtonGroup();
1286 shapeGroup.add(circleRadio);
1287--
12882.7.4
1289
1290
1291From 545b7a11f0ba77f06fdd6ae8329800e65ded4fc1 Mon Sep 17 00:00:00 2001
1292From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1293Date: Thu, 11 Jan 2018 11:36:44 -0500
1294Subject: [PATCH 19/23] 90 code cleanup
1295
1296---
1297 buildings_tools/src/buildings_tools/Building.java | 13 ++++-------
1298 .../src/buildings_tools/BuildingSizeDialog.java | 6 ++---
1299 .../src/buildings_tools/DrawBuildingAction.java | 26 +++++++++-------------
1300 .../src/buildings_tools/ToolSettings.java | 20 +++++++----------
1301 4 files changed, 25 insertions(+), 40 deletions(-)
1302
1303diff --git a/buildings_tools/src/buildings_tools/Building.java b/buildings_tools/src/buildings_tools/Building.java
1304index 6337337..eff21d1 100644
1305--- a/buildings_tools/src/buildings_tools/Building.java
1306+++ b/buildings_tools/src/buildings_tools/Building.java
1307@@ -344,16 +344,11 @@ class Building {
1308 ds.clearSelection();
1309 ds.addSelected(selectedPrimitives);
1310
1311- int lastWayIndex = ds.getWays().size() - 1;
1312+ // get the way with the smallest id with the assumption that it is
1313+ // newest way created by CreateCirclAction
1314 List<Way> ways = new ArrayList(ds.getWays());
1315- Comparator<Way> comparator = new Comparator<Way>() {
1316- @Override
1317- public int compare(Way left, Way right) {
1318- return Long.compare(right.getUniqueId(), left.getUniqueId());
1319- }
1320- };
1321- Collections.sort(ways, comparator);
1322- w = ways.get(lastWayIndex);
1323+ Collections.sort(ways);
1324+ w = ways.get(0);
1325
1326 addAddress(w);
1327
1328diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1329index 2771394..cc54304 100644
1330--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1331+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1332@@ -91,11 +91,9 @@ public class BuildingSizeDialog extends MyDialog {
1333
1334 public final void saveSettings() {
1335 if (circleRadio.isSelected()) {
1336- ToolSettings.setShape(ToolSettings.Shape.CIRCLE);
1337- ToolSettings.saveShape(ToolSettings.Shape.CIRCLE.name());
1338+ ToolSettings.saveShape(ToolSettings.Shape.CIRCLE);
1339 } else if (rectangleRadio.isSelected()) {
1340- ToolSettings.setShape(ToolSettings.Shape.RECTANGLE);
1341- ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE.name());
1342+ ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE);
1343 }
1344 ToolSettings.setSizes(width(), lenstep());
1345 ToolSettings.setAddrDialog(useAddr());
1346diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1347index ad1788e..f04514f 100644
1348--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1349+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1350@@ -193,10 +193,10 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1351 }
1352
1353 if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_C) {
1354- ToolSettings.saveShape(ToolSettings.Shape.CIRCLE.name());
1355+ ToolSettings.saveShape(ToolSettings.Shape.CIRCLE);
1356 }
1357 if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_R) {
1358- ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE.name());
1359+ ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE);
1360 }
1361 }
1362
1363@@ -294,22 +294,18 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1364 private void drawingStart(MouseEvent e) {
1365 mousePos = e.getPoint();
1366 drawStartPos = mousePos;
1367-
1368- Node n = MainApplication.getMap().mapView.getNearestNode(mousePos, OsmPrimitive::isUsable);
1369-
1370- if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
1371+ if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
1372+ building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
1373+ } else {
1374+ Node n = MainApplication.getMap().mapView.getNearestNode(mousePos, OsmPrimitive::isUsable);
1375 if (n == null) {
1376 building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
1377 } else {
1378 building.setBase(n);
1379 }
1380- mode = Mode.Drawing;
1381- updateStatusLine();
1382- } else {
1383- building.setBase(latlon2eastNorth(MainApplication.getMap().mapView.getLatLon(mousePos.x, mousePos.y)));
1384- mode = Mode.Drawing;
1385- updateStatusLine();
1386 }
1387+ mode = Mode.Drawing;
1388+ updateStatusLine();
1389 }
1390
1391 private void drawingAdvance(MouseEvent e) {
1392@@ -325,10 +321,10 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1393 private void drawingFinish() {
1394 if (building.getLength() != 0) {
1395 Way w;
1396- if (ToolSettings.Shape.RECTANGLE.equals(ToolSettings.getShape())) {
1397- w = building.createRectangle();
1398- } else {
1399+ if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
1400 w = building.createCircle();
1401+ } else {
1402+ w = building.createRectangle();
1403 }
1404 if (w != null) {
1405 if (!alt || ToolSettings.isUsingAddr())
1406diff --git a/buildings_tools/src/buildings_tools/ToolSettings.java b/buildings_tools/src/buildings_tools/ToolSettings.java
1407index eacfb9f..07c461a 100644
1408--- a/buildings_tools/src/buildings_tools/ToolSettings.java
1409+++ b/buildings_tools/src/buildings_tools/ToolSettings.java
1410@@ -26,7 +26,7 @@ public final class ToolSettings {
1411 CIRCLE, RECTANGLE
1412 }
1413
1414- private static Shape shape = Shape.RECTANGLE;
1415+ private static Shape shape = loadShape();
1416 private static double width = 0;
1417 private static double lenstep = 0;
1418 private static boolean useAddr;
1419@@ -38,10 +38,6 @@ public final class ToolSettings {
1420 return shape;
1421 }
1422
1423- public static void setShape(Shape shape) {
1424- ToolSettings.shape = shape;
1425- }
1426-
1427 public static void setAddrDialog(boolean _useAddr) {
1428 useAddr = _useAddr;
1429 }
1430@@ -92,18 +88,18 @@ public final class ToolSettings {
1431 }
1432 }
1433
1434- public static void saveShape(String shape) {
1435- Main.pref.put("buildings_tool.shape", shape);
1436+ public static void saveShape(Shape shape) {
1437+ Main.pref.put("buildings_tool.shape", shape.name());
1438 }
1439
1440- private static void loadShape() {
1441+ private static Shape loadShape() {
1442 String shape = Main.pref.get("buildings_tool.shape");
1443 if (ToolSettings.Shape.CIRCLE.name().equals(shape)) {
1444- setShape(Shape.CIRCLE);
1445- } else if (ToolSettings.Shape.RECTANGLE.name().equals(shape)) {
1446- setShape(Shape.RECTANGLE);
1447+ ToolSettings.shape = Shape.CIRCLE;
1448+ return Shape.CIRCLE;
1449 } else {
1450- setShape(Shape.RECTANGLE);
1451+ ToolSettings.shape = Shape.RECTANGLE;
1452+ return (Shape.RECTANGLE);
1453 }
1454 }
1455
1456--
14572.7.4
1458
1459
1460From 74d85c7d0a718269f4f57d12afb554cf936245fc Mon Sep 17 00:00:00 2001
1461From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1462Date: Thu, 11 Jan 2018 17:22:32 -0500
1463Subject: [PATCH 20/23] 90 add actions for shortcuts
1464
1465---
1466 .../src/buildings_tools/BuildingCircleAction.java | 27 ++++++++++++++++++++++
1467 .../buildings_tools/BuildingRectangleAction.java | 27 ++++++++++++++++++++++
1468 .../src/buildings_tools/BuildingSizeDialog.java | 9 ++++----
1469 .../src/buildings_tools/BuildingsToolsPlugin.java | 3 +++
1470 .../src/buildings_tools/DrawBuildingAction.java | 6 -----
1471 5 files changed, 61 insertions(+), 11 deletions(-)
1472 create mode 100644 buildings_tools/src/buildings_tools/BuildingCircleAction.java
1473 create mode 100644 buildings_tools/src/buildings_tools/BuildingRectangleAction.java
1474
1475diff --git a/buildings_tools/src/buildings_tools/BuildingCircleAction.java b/buildings_tools/src/buildings_tools/BuildingCircleAction.java
1476new file mode 100644
1477index 0000000..52281b4
1478--- /dev/null
1479+++ b/buildings_tools/src/buildings_tools/BuildingCircleAction.java
1480@@ -0,0 +1,27 @@
1481+// License: GPL. For details, see LICENSE file.
1482+package buildings_tools;
1483+
1484+import static org.openstreetmap.josm.tools.I18n.tr;
1485+
1486+import java.awt.event.ActionEvent;
1487+import java.awt.event.KeyEvent;
1488+
1489+import org.openstreetmap.josm.actions.JosmAction;
1490+import org.openstreetmap.josm.tools.Shortcut;
1491+
1492+@SuppressWarnings("serial")
1493+public class BuildingCircleAction extends JosmAction {
1494+
1495+ public BuildingCircleAction() {
1496+ super(tr("Set building shape to circle"), "mapmode/building", tr("Set buildings shape to circle"),
1497+ Shortcut.registerShortcut("buildings_tools:circle",
1498+ tr("Data: {0}", tr("Set buildings shape to circle")),
1499+ KeyEvent.VK_C, Shortcut.SHIFT),
1500+ true);
1501+ }
1502+
1503+ @Override
1504+ public void actionPerformed(ActionEvent arg0) {
1505+ ToolSettings.saveShape(ToolSettings.Shape.CIRCLE);
1506+ }
1507+}
1508diff --git a/buildings_tools/src/buildings_tools/BuildingRectangleAction.java b/buildings_tools/src/buildings_tools/BuildingRectangleAction.java
1509new file mode 100644
1510index 0000000..680a47c
1511--- /dev/null
1512+++ b/buildings_tools/src/buildings_tools/BuildingRectangleAction.java
1513@@ -0,0 +1,27 @@
1514+// License: GPL. For details, see LICENSE file.
1515+package buildings_tools;
1516+
1517+import static org.openstreetmap.josm.tools.I18n.tr;
1518+
1519+import java.awt.event.ActionEvent;
1520+import java.awt.event.KeyEvent;
1521+
1522+import org.openstreetmap.josm.actions.JosmAction;
1523+import org.openstreetmap.josm.tools.Shortcut;
1524+
1525+@SuppressWarnings("serial")
1526+public class BuildingRectangleAction extends JosmAction {
1527+
1528+ public BuildingRectangleAction() {
1529+ super(tr("Set building shape to rectangle"), "mapmode/building", tr("Set buildings shape to rectangle"),
1530+ Shortcut.registerShortcut("buildings_tools:rectangle",
1531+ tr("Data: {0}", tr("Set buildings shape to rectangle")),
1532+ KeyEvent.VK_R, Shortcut.SHIFT),
1533+ true);
1534+ }
1535+
1536+ @Override
1537+ public void actionPerformed(ActionEvent arg0) {
1538+ ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE);
1539+ }
1540+}
1541diff --git a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1542index cc54304..b6ddb09 100644
1543--- a/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1544+++ b/buildings_tools/src/buildings_tools/BuildingSizeDialog.java
1545@@ -5,6 +5,7 @@ import static org.openstreetmap.josm.tools.I18n.tr;
1546
1547 import java.awt.event.ActionEvent;
1548 import java.awt.event.ActionListener;
1549+import java.awt.event.KeyEvent;
1550 import java.text.NumberFormat;
1551 import java.text.ParseException;
1552
1553@@ -15,6 +16,7 @@ import javax.swing.JFormattedTextField;
1554 import javax.swing.JRadioButton;
1555
1556 import org.openstreetmap.josm.tools.GBC;
1557+import org.openstreetmap.josm.tools.Shortcut;
1558
1559 @SuppressWarnings("serial")
1560 public class BuildingSizeDialog extends MyDialog {
1561@@ -23,15 +25,12 @@ public class BuildingSizeDialog extends MyDialog {
1562 private final JCheckBox caddr = new JCheckBox(tr("Use Address dialog"));
1563 private final JCheckBox cAutoSelect = new JCheckBox(tr("Auto-select building"));
1564 private final JCheckBox cAddrNode = new JCheckBox(tr("Use address nodes under buildings"));
1565- private final JRadioButton circleRadio = new JRadioButton("Circle");
1566- private final JRadioButton rectangleRadio = new JRadioButton("Rectangle");
1567+ private final JRadioButton circleRadio = new JRadioButton(tr("Circle"));
1568+ private final JRadioButton rectangleRadio = new JRadioButton(tr("Rectangle"));
1569
1570 public BuildingSizeDialog() {
1571 super(tr("Set buildings size and shape"));
1572
1573- circleRadio.setToolTipText("Press SHIFT + 'C' when drawing building");
1574- rectangleRadio.setToolTipText("Press SHIFT + 'R' when drawing building");
1575-
1576 ButtonGroup shapeGroup = new ButtonGroup();
1577 shapeGroup.add(circleRadio);
1578 shapeGroup.add(rectangleRadio);
1579diff --git a/buildings_tools/src/buildings_tools/BuildingsToolsPlugin.java b/buildings_tools/src/buildings_tools/BuildingsToolsPlugin.java
1580index d74056f..1b62ceb 100644
1581--- a/buildings_tools/src/buildings_tools/BuildingsToolsPlugin.java
1582+++ b/buildings_tools/src/buildings_tools/BuildingsToolsPlugin.java
1583@@ -29,7 +29,10 @@ public class BuildingsToolsPlugin extends Plugin {
1584 super(info);
1585 JMenu dataMenu = MainApplication.getMenu().dataMenu;
1586 MainMenu.add(dataMenu, new BuildingSizeAction());
1587+ MainMenu.add(dataMenu, new BuildingCircleAction());
1588+ MainMenu.add(dataMenu, new BuildingRectangleAction());
1589 MainMenu.add(dataMenu, new MergeAddrPointsAction());
1590+
1591 }
1592
1593 @Override
1594diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1595index f04514f..5a48202 100644
1596--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1597+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1598@@ -192,12 +192,6 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1599 cancelDrawing();
1600 }
1601
1602- if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_C) {
1603- ToolSettings.saveShape(ToolSettings.Shape.CIRCLE);
1604- }
1605- if (e.isShiftDown() && e.getKeyCode() == KeyEvent.VK_R) {
1606- ToolSettings.saveShape(ToolSettings.Shape.RECTANGLE);
1607- }
1608 }
1609
1610 @Override
1611--
16122.7.4
1613
1614
1615From d7834529e4e8d6711a633d077b84c9d619b1b932 Mon Sep 17 00:00:00 2001
1616From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1617Date: Fri, 12 Jan 2018 12:45:39 -0500
1618Subject: [PATCH 21/23] 90: cursor changes on shape change
1619
1620---
1621 buildings_tools/images/cursor/modifier/silo.png | Bin 0 -> 594 bytes
1622 .../src/buildings_tools/DrawBuildingAction.java | 10 +++++++---
1623 2 files changed, 7 insertions(+), 3 deletions(-)
1624 create mode 100644 buildings_tools/images/cursor/modifier/silo.png
1625
1626diff --git a/buildings_tools/images/cursor/modifier/silo.png b/buildings_tools/images/cursor/modifier/silo.png
1627new file mode 100644
1628index 0000000000000000000000000000000000000000..7ac6200e68f75e41e2adf07053e33f500283c158
1629GIT binary patch
1630literal 594
1631zcmV-Y0<HatP)<h;3K|Lk000e1NJLTq000pH000pP1^@s7Olo&*00004XF*Lt006O%
1632z3;baP00006VoOIv00000008+zyMF)x010qNS#tmY3ljhU3ljkVnw%H_000McNliru
1633z;sFd1BmsNno>l+=0nbT9K~y-)tyH^?+CUUNGwg0`*=tNl<d_x=6j%xcMe+w!NKm^;
1634zL%|pD4@CI{A|W~`B5H)_s1iXMDufWiLfX{?K~Uty+%&tZtXW5!$LZ$YbIyItXn-I(
1635zoz4|P!7R(NIp=|}VHl<mf(*lW1ppiXG);Ta@At2DU4I$wIG@iqLI?tYGXQWL=Q5kk
1636z9`1cO=L}CmsZ{cZ!{K$MQaSz_zi-#FEL#Y{*XuP!qftMT$=D|(0PuYuoO47X5j^Uo
1637zs_I^rWk`}ljYh*$6lIUU!Q0VjB#7t$;LS<4-EPxnvmqe_wOTDY=_8#^V>}*vx~}8m
1638z;=(&25D}Wq<_-WDW9-p!N2AeYu=E2$wOZYW5@cD1ZQIWPAdyI%<9{Fy;6pN*`~=`V
1639zfaiZAmh1KU7sqj~dcEFmu~>L?i(0Mr8GsxVoCO1>X{IDedR-_KZiEn#!C*kDs$#WT
1640z9pdqL-ZagW>$+b<H+K6-P%IYF?RL+n(<u~1`BpBMF_}z|%jIq~O~Y^3{vg3Q^7;Ia
1641zr_3K}LPXeZxAe~@%jMF)JA0mY4E->IH^UhFm`bG#*LBG-4Dvkh7>mUsj4`&`?J%3o
1642g)<pCU!1p`RPr2N%D=;mnzW@LL07*qoM6N<$g2~(a9{>OV
1643
1644literal 0
1645HcmV?d00001
1646
1647diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1648index 5a48202..958d248 100644
1649--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1650+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1651@@ -78,7 +78,11 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1652
1653 private static Cursor getCursor() {
1654 try {
1655- return ImageProvider.getCursor("crosshair", "building");
1656+ if (ToolSettings.Shape.CIRCLE.equals(ToolSettings.getShape())) {
1657+ return ImageProvider.getCursor("crosshair", "silo");
1658+ }else{
1659+ return ImageProvider.getCursor("crosshair", "building");
1660+ }
1661 } catch (Exception e) {
1662 Logging.error(e);
1663 }
1664@@ -90,7 +94,7 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1665 *
1666 * @param c One of the available cursors
1667 */
1668- private void setCursor(final Cursor c) {
1669+ public void setCursor(final Cursor c) {
1670 if (currCursor.equals(c))
1671 return;
1672 try {
1673@@ -390,7 +394,7 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1674 if (customCursor != null && (!ctrl || isRectDrawing()))
1675 setCursor(customCursor);
1676 else
1677- setCursor(cursorCrosshair);
1678+ setCursor(getCursor());
1679 }
1680
1681 }
1682--
16832.7.4
1684
1685
1686From 34f58de95b5b915f338855d7bce04c54904031f7 Mon Sep 17 00:00:00 2001
1687From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1688Date: Fri, 12 Jan 2018 12:46:56 -0500
1689Subject: [PATCH 22/23] 90 keep setCursor private
1690
1691---
1692 buildings_tools/src/buildings_tools/DrawBuildingAction.java | 2 +-
1693 1 file changed, 1 insertion(+), 1 deletion(-)
1694
1695diff --git a/buildings_tools/src/buildings_tools/DrawBuildingAction.java b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1696index 958d248..8099276 100644
1697--- a/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1698+++ b/buildings_tools/src/buildings_tools/DrawBuildingAction.java
1699@@ -94,7 +94,7 @@ public class DrawBuildingAction extends MapMode implements MapViewPaintable, Sel
1700 *
1701 * @param c One of the available cursors
1702 */
1703- public void setCursor(final Cursor c) {
1704+ private void setCursor(final Cursor c) {
1705 if (currCursor.equals(c))
1706 return;
1707 try {
1708--
17092.7.4
1710
1711
1712From d464f55e9c5e3c427d4974904600a3ef5a26a7e1 Mon Sep 17 00:00:00 2001
1713From: Clarisse Abalos <samantha.abalos@digitalglobe.com>
1714Date: Fri, 19 Jan 2018 16:14:10 -0500
1715Subject: [PATCH 23/23] 90 change shortcuts to ctrl and shift
1716
1717---
1718 buildings_tools/src/buildings_tools/BuildingCircleAction.java | 2 +-
1719 buildings_tools/src/buildings_tools/BuildingRectangleAction.java | 2 +-
1720 2 files changed, 2 insertions(+), 2 deletions(-)
1721
1722diff --git a/buildings_tools/src/buildings_tools/BuildingCircleAction.java b/buildings_tools/src/buildings_tools/BuildingCircleAction.java
1723index 52281b4..42fa9f9 100644
1724--- a/buildings_tools/src/buildings_tools/BuildingCircleAction.java
1725+++ b/buildings_tools/src/buildings_tools/BuildingCircleAction.java
1726@@ -16,7 +16,7 @@ public class BuildingCircleAction extends JosmAction {
1727 super(tr("Set building shape to circle"), "mapmode/building", tr("Set buildings shape to circle"),
1728 Shortcut.registerShortcut("buildings_tools:circle",
1729 tr("Data: {0}", tr("Set buildings shape to circle")),
1730- KeyEvent.VK_C, Shortcut.SHIFT),
1731+ KeyEvent.VK_C, Shortcut.CTRL_SHIFT),
1732 true);
1733 }
1734
1735diff --git a/buildings_tools/src/buildings_tools/BuildingRectangleAction.java b/buildings_tools/src/buildings_tools/BuildingRectangleAction.java
1736index 680a47c..431fff6 100644
1737--- a/buildings_tools/src/buildings_tools/BuildingRectangleAction.java
1738+++ b/buildings_tools/src/buildings_tools/BuildingRectangleAction.java
1739@@ -16,7 +16,7 @@ public class BuildingRectangleAction extends JosmAction {
1740 super(tr("Set building shape to rectangle"), "mapmode/building", tr("Set buildings shape to rectangle"),
1741 Shortcut.registerShortcut("buildings_tools:rectangle",
1742 tr("Data: {0}", tr("Set buildings shape to rectangle")),
1743- KeyEvent.VK_R, Shortcut.SHIFT),
1744+ KeyEvent.VK_R, Shortcut.CTRL_SHIFT),
1745 true);
1746 }
1747
1748--
17492.7.4
1750