1 <?xml version="1.0" encoding="utf-8"?>
3 xmlns:mx="http://www.adobe.com/2006/mxml"
4 xmlns:potlatch2="net.systemeD.potlatch2.*"
5 height="46" width="219"
6 headerHeight="6" headerColors="[black, gray]"
7 borderThicknessRight="0" borderThicknessLeft="0" borderThicknessBottom="0"
8 paddingLeft="4" paddingTop="4" layout="absolute" >
10 <mx:Image data="@Embed('../../../embedded/close_small.png')"
11 includeInLayout="false" id="toolboxClose" click="toggle();"
14 <mx:Button icon="@Embed('../../../embedded/delete.svg')"
16 enabled="{canDo('delete')}"
17 alpha="{getAlpha('delete')}"
19 width="28" height="28" textAlign="left" y="4" x="6" paddingLeft="6" paddingRight="0" />
20 <mx:Button icon="@Embed('../../../embedded/direction.svg')"
21 click='doReverseDirection();'
22 enabled="{canDo('reverseDirection')}"
23 alpha="{getAlpha('reverseDirection')}"
24 toolTip="Reverse direction"
25 width="28" height="28" textAlign="left" y="4" x="36" paddingLeft="8" paddingRight="0" />
26 <mx:Button icon="@Embed('../../../embedded/cut.svg')"
28 enabled="{canDo('split')}"
29 alpha="{getAlpha('split')}"
31 width="28" height="28" textAlign="left" y="4" x="66" paddingLeft="8" paddingRight="0" />
32 <mx:Button icon="@Embed('../../../embedded/straighten.svg')"
33 click='doStraighten();'
34 enabled="{canDo('straighten')}"
35 alpha="{getAlpha('straighten')}"
36 toolTip="Straighten way"
37 width="28" height="28" textAlign="left" y="4" x="96" paddingLeft="5" paddingRight="0" />
38 <mx:Button icon="@Embed('../../../embedded/circle.svg')"
39 click='doCircularise();'
40 enabled="{canDo('circularise')}"
41 alpha="{getAlpha('circularise')}"
42 toolTip="Make circular"
43 width="28" height="28" textAlign="left" y="4" x="126" paddingLeft="4" paddingRight="0" />
44 <mx:Button icon="@Embed('../../../embedded/quadrilateralise.svg')"
45 click='doQuadrilateralise();'
46 enabled="{canDo('quadrilateralise')}"
47 alpha="{getAlpha('quadrilateralise')}"
48 toolTip="Make right-angled"
49 width="28" height="28" textAlign="left" y="4" x="156" paddingLeft="6" paddingRight="0" />
50 <mx:Button icon="@Embed('../../../embedded/parallel.svg')"
51 click='doParallelise();'
52 enabled="{canDo('parallelise')}"
53 alpha="{getAlpha('parallelise')}"
54 toolTip="Create parallel way"
55 width="28" height="28" textAlign="left" y="4" x="186" paddingLeft="8" paddingRight="0" />
59 import flash.events.Event;
60 import flash.events.MouseEvent;
61 import net.systemeD.halcyon.connection.*;
62 import net.systemeD.potlatch2.controller.*;
63 import net.systemeD.potlatch2.tools.*;
65 private var entity:Entity;
66 private var controller:EditController;
68 public function init(controller:EditController):void {
69 this.controller=controller;
72 override protected function createChildren():void {
73 super.createChildren();
74 super.titleBar.addEventListener(MouseEvent.MOUSE_DOWN,handleDown);
75 super.titleBar.addEventListener(MouseEvent.MOUSE_UP,handleUp);
78 public function setEntity(entity:Entity):void {
80 dispatchEvent(new Event("updateSkin"));
81 dispatchEvent(new Event("updateAlpha"));
84 private function handleDown(e:Event):void {
88 private function handleUp(e:Event):void {
92 public function toggle():void {
93 this.visible=!this.visible;
96 // --------------------------------------------------------------------------------
97 // Enable/disable toolbox buttons
98 // (ideally we'd use CSS to set alpha in disabled state, but Flex's CSS
99 // capabilities aren't up to it)
101 [Bindable(event="updateSkin")]
102 public function canDo(op:String):Boolean {
104 case 'delete': return (entity is Way || entity is Node);
105 case 'reverseDirection': return (entity is Way);
106 case 'quadrilateralise': return (entity is Way && Way(entity).isArea());
107 case 'straighten': return (entity is Way && !Way(entity).isArea());
108 case 'circularise': return (entity is Way && Way(entity).isArea());
109 case 'split': return (entity is Node && controller.state is SelectedWayNode);
110 case 'parallelise': return (entity is Way);
115 [Bindable(event="updateAlpha")]
116 public function getAlpha(op:String):Number {
117 if (canDo(op)) { return 1; }
122 // --------------------------------------------------------------------------------
123 // Individual toolbox actions
125 public function doDelete():void {
126 if (entity is Node) { controller.connection.unregisterPOI(Node(entity)); }
127 entity.remove(MainUndoStack.getGlobalStack().addAction);
129 if (controller.state is SelectedWayNode) {
130 controller.setState(new SelectedWay(SelectedWayNode(controller.state).selectedWay));
132 controller.setState(new NoSelection());
136 public function doReverseDirection():void {
138 Way(entity).reverseNodes(MainUndoStack.getGlobalStack().addAction);
142 public function doQuadrilateralise():void {
144 Quadrilateralise.quadrilateralise(Way(entity));
148 public function doStraighten():void {
150 Straighten.straighten(Way(entity),controller.map);
154 public function doCircularise():void {
156 Circularise.circularise(Way(entity),controller.map);
160 public function doSplit():void {
161 if (entity is Node && controller.state is SelectedWayNode) {
162 controller.setState(SelectedWayNode(controller.state).splitWay());
166 public function doParallelise():void {
168 controller.setState(new SelectedParallelWay(Way(entity)));