1 package net.systemeD.potlatch2.controller {
3 import net.systemeD.potlatch2.EditController;
4 import net.systemeD.halcyon.connection.*;
5 import net.systemeD.halcyon.Globals;
7 public class SelectedWayNode extends SelectedWay {
8 protected var selectedNode:Node;
9 protected var initNode:Node;
11 public function SelectedWayNode(way:Way,node:Node) {
16 protected function selectNode(way:Way,node:Node):void {
17 if ( way == selectedWay && node == selectedNode )
21 controller.setTagViewer(node);
22 controller.map.setHighlight(way, { showNodes: true, nodeSelected: node.id });
23 selectedWay = way; initWay = way;
24 selectedNode = node; initNode = node;
27 override protected function clearSelection():void {
28 if ( selectedNode != null ) {
29 controller.map.setHighlight(selectedWay, { selected: false, showNodes: false, nodeSelected: null });
30 controller.setTagViewer(null);
36 override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
37 if (event.type==MouseEvent.MOUSE_MOVE || event.type==MouseEvent.MOUSE_OVER || event.type==MouseEvent.MOUSE_OUT) { return this; }
38 var focus:Entity = NoSelection.getTopLevelFocusEntity(entity);
40 if ( event.type == MouseEvent.MOUSE_UP ) {
41 if ( entity is Node && event.shiftKey ) {
43 var way:Way = controller.connection.createWay({}, [entity]);
44 return new DrawWay(way, true, false);
45 } else if ( entity is Node && focus == selectedWay ) {
46 // select node within way
47 return selectOrEdit(selectedWay, Node(entity));
48 } else if ( entity is Way ) {
50 return new SelectedWay(Way(entity));
51 } else if ( focus == null && map.dragstate!=map.DRAGGING ) {
52 return new NoSelection();
54 } else if ( event.type == MouseEvent.MOUSE_DOWN ) {
55 if ( entity is Way && focus==selectedWay && event.shiftKey) {
56 // insert node within way (shift-click)
57 var d:DragWayNode=new DragWayNode(selectedWay, addNode(event), event, true);
60 } else if ( entity is Node && entity.hasParent(selectedWay) ) {
61 return new DragWayNode(selectedWay, Node(entity), event, false);
62 } else if ( focus is Node ) {
63 return new DragPOINode(entity as Node,event,false);
70 override public function enterState():void {
71 selectNode(initWay,initNode);
72 Globals.vars.root.addDebug("**** -> "+this);
74 override public function exitState():void {
76 Globals.vars.root.addDebug("**** <- "+this);
79 override public function toString():String {
80 return "SelectedWayNode";
83 public static function selectOrEdit(selectedWay:Way, entity:Node):ControllerState {
84 var isFirst:Boolean = false;
85 var isLast:Boolean = false;
86 isFirst = selectedWay.getNode(0) == entity;
87 isLast = selectedWay.getNode(selectedWay.length - 1) == entity;
88 if ( isFirst == isLast ) // both == looped, none == central node
89 return new SelectedWayNode(selectedWay, entity);
91 return new DrawWay(selectedWay, isLast, true);