select and move POI nodes, and a handful of smaller fixes too
[potlatch2.git] / net / systemeD / potlatch2 / controller / NoSelection.as
index 2de2e2165e00f9fcb0c5169e38d251b421178059..c82c24475f9f09787fb976f97b9afb344309f4a7 100644 (file)
@@ -1,38 +1,65 @@
 package net.systemeD.potlatch2.controller {
        import flash.events.*;
-    import net.systemeD.potlatch2.EditController;
-    import net.systemeD.halcyon.connection.*;
+       import net.systemeD.potlatch2.EditController;
+       import net.systemeD.halcyon.connection.*;
+       import net.systemeD.halcyon.Map;
+       import net.systemeD.halcyon.Globals;
 
-    public class NoSelection extends ControllerState {
-        public function NoSelection() {
-        }
+       public class NoSelection extends ControllerState {
+
+               public function NoSelection() {
+               }
  
-        override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
-            var focus:Entity = getTopLevelFocusEntity(entity);
-            if ( event.type == MouseEvent.CLICK )
-                if ( focus is Way )
-                    return new SelectedWay(focus as Way);
-                else if ( focus is Node )
-                    trace("select poi");
-            else if ( event.type == MouseEvent.MOUSE_OVER )
-                controller.map.setHighlight(focus, "hover", true);
-            else if ( event.type == MouseEvent.MOUSE_OUT )
-                controller.map.setHighlight(focus, "hover", false);
-                
-            return this;
+               override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
+                       var focus:Entity = getTopLevelFocusEntity(entity);
+
+                       if ( event.type == MouseEvent.MOUSE_DOWN ) {
+                               if ( entity is Way ) {
+                                       return new SelectedWay(focus as Way);
+                } else if ( focus is Node ) {
+                                       return new DragPOINode(entity as Node,event,false);
+                } else if ( entity is Node && focus is Way ) {
+                                       return new DragWayNode(focus as Way,entity as Node,event,false);
+                               }
+                       } else if (event.type==MouseEvent.MOUSE_UP && focus==null && map.dragstate!=map.DRAGGING) {
+                               map.dragstate=map.NOT_DRAGGING;
+                               var startNode:Node = controller.connection.createNode(
+                                       {}, 
+                                       controller.map.coord2lat(event.localY),
+                                       controller.map.coord2lon(event.localX));
+                               var way:Way = controller.connection.createWay({}, [startNode]);
+                               return new DrawWay(way, true, false);
+                       } else if ( event.type == MouseEvent.MOUSE_OVER ) {
+                               controller.map.setHighlight(focus, { hover: true });
+                       } else if ( event.type == MouseEvent.MOUSE_OUT ) {
+                               controller.map.setHighlight(focus, { hover: false });
+                       } else if ( event.type == MouseEvent.MOUSE_DOWN ) {
+                       }
+                       return this;
+               }
+               
+               public static function getTopLevelFocusEntity(entity:Entity):Entity {
+                       if ( entity is Node ) {
+                               for each (var parent:Entity in entity.parentWays) {
+                                       return parent;
+                               }
+                               return entity;
+                       } else if ( entity is Way ) {
+                               return entity;
+                       } else {
+                               return null;
+                       }
+               }
+
+        override public function enterState():void {
+                       Globals.vars.root.addDebug("**** -> "+this);
         }
-        
-        public static function getTopLevelFocusEntity(entity:Entity):Entity {
-            if ( entity is Node ) {
-                for each (var parent:Entity in entity.parentWays) {
-                    return parent;
-                }
-                return entity;
-            } else if ( entity is Way ) {
-                return entity;
-            } else {
-                return null;
-            }
+        override public function exitState():void {
+                       Globals.vars.root.addDebug("**** <- "+this);
         }
-    }
+               override public function toString():String {
+                       return "NoSelection";
+               }
+
+       }
 }