== Core geometry ==
-* Undo/redo: split, draw
-* Drag ways
+* Undo/redo: split, drag
+* Remove node from this way only
+* Backspace
== Vector background layers ==
-* Remove existing interaction and add alt-click
* TagTransform (cf http://wiki.openstreetmap.org/wiki/Osmosis/TagTransform)
-* Import from GPX
+* Simplify (e.g. GPX files)
* Import from OSM (is this worth sharing with the XML API stuff?)
listenSprite.hitArea=null;
}
+ protected function offsetSprites(x:Number, y:Number):void {
+ for each (var d:DisplayObject in sprites) {
+ d.x=x; d.y=y;
+ }
+ }
+
protected function setListenSprite(hitzone:Sprite):void {
if (!listenSprite.parent) { addToLayer(listenSprite, CLICKSPRITE); }
listenSprite.hitArea = hitzone;
way.addEventListener(Connection.WAY_NODE_REMOVED, wayNodeRemoved);
way.addEventListener(Connection.WAY_REORDERED, wayReordered);
way.addEventListener(Connection.WAY_DELETED, wayDeleted);
+ way.addEventListener(Connection.WAY_DRAGGED, wayDragged);
way.addEventListener(Connection.ADDED_TO_RELATION, wayRelationAdded);
way.addEventListener(Connection.REMOVED_FROM_RELATION, wayRelationRemoved);
way.addEventListener(Connection.SUSPEND_REDRAW, suspendRedraw);
private function wayDeleted(event:EntityEvent):void {
redraw();
}
-
private function wayReordered(event:EntityEvent):void {
redraw();
}
+ private function wayDragged(event:WayDraggedEvent):void {
+ offsetSprites(event.xDelta,event.yDelta);
+ }
private function init():void {
recalculate();
public static var WAY_NODE_ADDED:String = "way_node_added";
public static var WAY_NODE_REMOVED:String = "way_node_removed";
public static var WAY_REORDERED:String = "way_reordered";
+ public static var WAY_DRAGGED:String = "way_dragged";
public static var NODE_DELETED:String = "node_deleted";
public static var WAY_DELETED:String = "way_deleted";
public static var RELATION_DELETED:String = "relation_deleted";
--- /dev/null
+package net.systemeD.halcyon.connection {
+
+ import flash.events.Event;
+
+ public class WayDraggedEvent extends EntityEvent {
+ private var _way:Way;
+ private var _xDelta:Number;
+ private var _yDelta:Number;
+
+ public function WayDraggedEvent(type:String, way:Way, xDelta:Number, yDelta:Number) {
+ super(type, way);
+ this._way = way;
+ this._xDelta = xDelta;
+ this._yDelta = yDelta;
+ }
+
+ public function get way():Way { return _way; }
+ public function get xDelta():Number { return _xDelta; }
+ public function get yDelta():Number { return _yDelta; }
+
+ public override function toString():String {
+ return super.toString() + " in "+_way+" by "+_xDelta+","+_yDelta;
+ }
+ }
+
+}
+
if ( entity is Way && event.altKey && paint.isBackground ) {
return new SelectedWay(paint.findSource().pullThrough(entity,controller.connection));
} else if ( entity is Way ) {
- return new SelectedWay(focus as Way);
+ return new DragWay(focus as Way,event);
} else if ( focus is Node ) {
return new DragPOINode(entity as Node,event,false);
} else if ( entity is Node && focus is Way ) {
} else if ( entity is Way && event.ctrlKey ) {
// merge way
mergeWith(entity as Way);
- } else if ( entity is Way ) {
- // select way
- selectWay(entity as Way);
} else if ( focus == null && map.dragstate!=map.DRAGGING ) {
return new NoSelection();
}
var d:DragWayNode=new DragWayNode(selectedWay, addNode(event), event, true);
d.forceDragStart();
return d;
+ } else if ( entity is Way ) {
+ return new DragWay(focus as Way, event);
} else if ( entity is Node && entity.hasParent(selectedWay) ) {
// select node within this way
return new DragWayNode(selectedWay, Node(entity), event, false);