1 package net.systemeD.potlatch2.controller {
4 import net.systemeD.potlatch2.EditController;
5 import net.systemeD.halcyon.connection.*;
6 import net.systemeD.halcyon.Elastic;
8 public class DrawWay extends SelectedWay {
9 private var elastic:Elastic;
10 private var editEnd:Boolean;
12 public function DrawWay(way:Way, editEnd:Boolean) {
14 this.editEnd = editEnd;
17 override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
20 var focus:Entity = NoSelection.getTopLevelFocusEntity(entity);
21 if ( event.type == MouseEvent.CLICK ) {
22 if ( focus == null ) {
23 node = createAndAddNode(event);
25 } else if ( focus is Node ) {
26 appendNode(focus as Node);
27 } else if ( focus is Way ) {
28 node = createAndAddNode(event);
29 Way(focus).insertNodeAtClosestPosition(node, true);
32 } else if ( event.type == MouseEvent.MOUSE_MOVE ) {
34 controller.map.coord2lon(event.localX),
35 controller.map.coord2latp(event.localY));
42 protected function resetElastic(node:Node):void {
43 var mouse:Point = new Point(node.lon, node.latp);
44 elastic.start = mouse;
48 override public function processKeyboardEvent(event:KeyboardEvent):ControllerState {
49 if ( event.keyCode == 13 || event.keyCode == 27 )
50 return new SelectedWay(selectedWay);
54 public function createAndAddNode(event:MouseEvent):Node {
55 var lat:Number = controller.map.coord2lat(event.localY);
56 var lon:Number = controller.map.coord2lon(event.localX);
57 var node:Node = controller.connection.createNode({}, lat, lon);
62 protected function appendNode(node:Node):void {
64 selectedWay.appendNode(node);
66 selectedWay.insertNode(0, node);
69 override public function enterState():void {
72 var node:Node = selectedWay.getNode(editEnd ? selectedWay.length - 1 : 0);
73 var start:Point = new Point(node.lon, node.latp);
74 elastic = new Elastic(controller.map, start, start);
76 override public function exitState():void {
78 elastic.removeSprites();
81 override public function toString():String {