1 package net.systemeD.potlatch2.controller {
3 import flash.display.*;
4 import flash.ui.Keyboard;
5 import net.systemeD.potlatch2.EditController;
6 import net.systemeD.halcyon.connection.*;
7 import net.systemeD.halcyon.MapPaint;
9 public class SelectedPOINode extends ControllerState {
10 protected var initNode:Node;
12 public function SelectedPOINode(node:Node, layer:MapPaint=null) {
13 if (layer) this.layer=layer;
17 protected function selectNode(node:Node):void {
18 if ( firstSelected is Node && Node(firstSelected)==node )
22 layer.setHighlight(node, { selected: true });
24 controller.updateSelectionUI();
28 protected function clearSelection(newState:ControllerState):void {
30 layer.setHighlight(firstSelected, { selected: false });
32 if (!newState.isSelectionState()) { controller.updateSelectionUI(); }
36 override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
37 if (event.type==MouseEvent.MOUSE_MOVE) { return this; }
38 var paint:MapPaint = getMapPaint(DisplayObject(event.target));
40 if (event.type==MouseEvent.MOUSE_DOWN && event.ctrlKey && !event.altKey && entity && entity!=firstSelected && paint==layer) {
41 return new SelectedMultiple([firstSelected,entity],layer);
42 } else if (event.type==MouseEvent.MOUSE_DOWN && event.shiftKey && !entity && !layer.isBackground) {
43 return new DrawQuadrilateral(firstSelected as Node);
44 } else if ( event.type == MouseEvent.MOUSE_UP && entity==firstSelected ) {
47 var cs:ControllerState = sharedMouseEvents(event, entity);
48 return cs ? cs : this;
51 override public function processKeyboardEvent(event:KeyboardEvent):ControllerState {
52 switch (event.keyCode) {
53 case Keyboard.BACKSPACE: return deletePOI();
54 case Keyboard.DELETE: return deletePOI();
55 case 82: repeatTags(firstSelected); return this; // 'R'
57 var cs:ControllerState = sharedKeyboardEvents(event);
58 return cs ? cs : this;
61 public function deletePOI():ControllerState {
62 firstSelected.connection.unregisterPOI(firstSelected as Node);
63 firstSelected.remove(MainUndoStack.getGlobalStack().addAction);
64 return new NoSelection();
67 override public function enterState():void {
69 layer.setPurgable(selection,false);
71 override public function exitState(newState:ControllerState):void {
72 if(firstSelected.hasTags()) {
73 controller.clipboards['node']=firstSelected.getTagsCopy();
75 layer.setPurgable(selection,true);
76 clearSelection(newState);
79 override public function toString():String {
80 return "SelectedPOINode";