MainUndoStack.getGlobalStack().addAction(new MoveNodeAction(this, _lat, lon, setLatLonImmediate));
}
- public function setLatLon(lat:Number, lon:Number):void {
- MainUndoStack.getGlobalStack().addAction(new MoveNodeAction(this, lat, lon, setLatLonImmediate));
+ public function setLatLon(lat:Number, lon:Number, performAction:Function):void {
+ performAction(new MoveNodeAction(this, lat, lon, setLatLonImmediate));
}
public function setLonLatp(lon:Number,latproj:Number, performAction:Function):void {
--- /dev/null
+package net.systemeD.halcyon.connection.actions {
+
+ import net.systemeD.halcyon.connection.*;
+ import net.systemeD.halcyon.Map;
+
+ public class MoveWayAction extends CompositeUndoableAction {
+
+ private var way:Way;
+ private var downX:Number;
+ private var downY:Number;
+ private var x:Number;
+ private var y:Number;
+ private var map:Map;
+
+ public function MoveWayAction(way:Way, downX:Number, downY:Number, x:Number, y:Number, map:Map) {
+ super("Drag way "+way.id);
+ this.way = way;
+ this.downX = downX;
+ this.downY = downY;
+ this.x = x;
+ this.y = y;
+ this.map = map;
+ }
+
+ public override function doAction():uint {
+ var lonDelta:Number = map.coord2lon(downX)-map.coord2lon(x);
+ var latDelta:Number = map.coord2lat(downY)-map.coord2lat(y);
+ var moved:Object = {};
+ way.suspend();
+ way.dispatchEvent(new WayDraggedEvent(Connection.WAY_DRAGGED, way, 0, 0));
+ for (var i:uint=0; i<way.length; i++) {
+ var n:Node=way.getNode(i);
+ if (!moved[n.id]) {
+ n.setLatLon(n.lat-latDelta, n.lon-lonDelta, push);
+ moved[n.id]=true;
+ }
+ }
+ super.doAction();
+ way.resume();
+ return SUCCESS;
+ }
+
+ public override function undoAction():uint {
+ way.suspend();
+ super.undoAction();
+ way.resume();
+ return SUCCESS;
+ }
+
+ }
+}
\ No newline at end of file
import flash.events.*;
import net.systemeD.potlatch2.EditController;
import net.systemeD.halcyon.connection.*;
+ import net.systemeD.halcyon.connection.actions.*;
import net.systemeD.halcyon.Globals;
public class DragWay extends ControllerState {
override public function processMouseEvent(event:MouseEvent, entity:Entity):ControllerState {
if (event.type==MouseEvent.MOUSE_UP) {
- if (dragstate==DRAGGING) { moveWay(event.localX, event.localY); }
- return new SelectedWay(selectedWay);
+ if (dragstate==DRAGGING) {
+ MainUndoStack.getGlobalStack().addAction(
+ new MoveWayAction(selectedWay, downX, downY, event.localX, event.localY, controller.map));
+ }
+ return new SelectedWay(selectedWay);
} else if ( event.type == MouseEvent.MOUSE_MOVE) {
// dragging
return "DragWay";
}
- private function moveWay(x:Number, y:Number):void {
- var lonDelta:Number = controller.map.coord2lon(downX)-controller.map.coord2lon(x);
- var latDelta:Number = controller.map.coord2lat(downY)-controller.map.coord2lat(y);
- var moved:Object = {};
- selectedWay.suspend();
- selectedWay.dispatchEvent(new WayDraggedEvent(Connection.WAY_DRAGGED, selectedWay, 0, 0));
- for (var i:uint=0; i<selectedWay.length; i++) {
- var n:Node=selectedWay.getNode(i);
- if (!moved[n.id]) {
- n.setLatLon(n.lat-latDelta, n.lon-lonDelta);
- moved[n.id]=true;
- }
- }
- selectedWay.resume();
- }
+
}
}
}
private function dragTo(event:MouseEvent):ControllerState {
- draggingNode.setLatLon( controller.map.coord2lat(event.localY), controller.map.coord2lon(event.localX) );
+ draggingNode.setLatLon( controller.map.coord2lat(event.localY),
+ controller.map.coord2lon(event.localX),
+ MainUndoStack.getGlobalStack().addAction );
return this;
}