1 package net.systemeD.potlatch2 {
2 import net.systemeD.halcyon.Map;
3 import net.systemeD.halcyon.MapController;
4 import net.systemeD.halcyon.connection.*;
5 import net.systemeD.potlatch2.controller.*;
6 import mx.managers.CursorManager;
10 public class EditController implements MapController {
13 public var tagViewer:TagViewer;
14 private var toolbox:Toolbox;
16 public var state:ControllerState;
17 private var _connection:Connection;
19 private var keys:Object={};
20 public var clipboards:Object={};
21 public var imagery:Array=[];
22 public var stylesheets:Array=[];
23 public var cursorsEnabled:Boolean=true;
25 [Embed(source="../../../embedded/pen.png")] public var pen:Class;
26 [Embed(source="../../../embedded/pen_x.png")] public var pen_x:Class;
27 [Embed(source="../../../embedded/pen_o.png")] public var pen_o:Class;
28 [Embed(source="../../../embedded/pen_so.png")] public var pen_so:Class;
29 [Embed(source="../../../embedded/pen_plus.png")] public var pen_plus:Class;
31 public function EditController(map:Map, tagViewer:TagViewer, toolbox:Toolbox) {
33 this.tagViewer = tagViewer;
34 this.toolbox = toolbox;
35 this.toolbox.init(this);
36 setState(new NoSelection());
38 map.parent.addEventListener(MouseEvent.MOUSE_MOVE, mapMouseEvent);
39 map.parent.addEventListener(MouseEvent.MOUSE_UP, mapMouseEvent);
40 map.parent.addEventListener(MouseEvent.MOUSE_DOWN, mapMouseEvent);
41 map.parent.addEventListener(MouseEvent.MOUSE_WHEEL, mapMouseEvent);
42 map.parent.addEventListener(MouseEvent.CLICK, mapMouseEvent);
43 map.parent.addEventListener(KeyboardEvent.KEY_DOWN, keyDownHandler);
44 map.parent.addEventListener(KeyboardEvent.KEY_UP, keyUpHandler);
47 public function setActive():void {
48 map.setController(this);
49 _connection = map.connection;
52 public function get map():Map {
56 public function get connection():Connection {
60 public function updateSelectionUI():void {
61 tagViewer.setEntity(state.selection);
62 toolbox.updateSelectionUI();
65 private function keyDownHandler(event:KeyboardEvent):void {
66 keys[event.keyCode]=true;
69 private function keyUpHandler(event:KeyboardEvent):void {
70 trace("key code "+event.keyCode);
71 if (keys[event.keyCode]) { delete keys[event.keyCode]; }
72 var newState:ControllerState = state.processKeyboardEvent(event);
76 public function keyDown(key:Number):Boolean {
77 return Boolean(keys[key]);
80 private function mapMouseEvent(event:MouseEvent):void {
81 if (event.type!=MouseEvent.ROLL_OVER) map.stage.focus = map.parent;
82 if (event.type==MouseEvent.MOUSE_UP && map.dragstate==map.DRAGGING) { return; }
84 var mapLoc:Point = map.globalToLocal(new Point(event.stageX, event.stageY));
85 event.localX = mapLoc.x;
86 event.localY = mapLoc.y;
88 var newState:ControllerState = state.processMouseEvent(event, null);
92 public function entityMouseEvent(event:MouseEvent, entity:Entity):void {
93 if (event.type!=MouseEvent.ROLL_OVER) map.stage.focus = map.parent;
94 //if ( event.type == MouseEvent.MOUSE_DOWN )
95 event.stopPropagation();
97 var mapLoc:Point = map.globalToLocal(new Point(event.stageX, event.stageY));
98 event.localX = mapLoc.x;
99 event.localY = mapLoc.y;
101 var newState:ControllerState = state.processMouseEvent(event, entity);
105 public function setState(newState:ControllerState):void {
106 if ( newState == state )
110 state.exitState(newState);
111 newState.setController(this);
112 newState.setPreviousState(state);
117 public function setCursor(cursor:Class):void {
118 CursorManager.removeAllCursors();
119 if (cursor && cursorsEnabled) { CursorManager.setCursor(cursor,2,-4,0); }