undo
package {
import flash.display.MovieClip;
import flash.display.SimpleButton;
import flash.events.MouseEvent;
public class UndoRedo extends MovieClip {
private var UndoHistory:Array=new Array();
private var RedoHistory:Array=new Array();
private var draging:Boolean=new Boolean();
private var presentSelectedObject:MovieClip;
private var newObj:MovieClip;
private var beforeDrag:Object;
public function UndoRedo():void {
stage.addEventListener(MouseEvent.MOUSE_DOWN,moveObject);
stage.addEventListener(MouseEvent.MOUSE_UP,stopMoveObject);
increase.addEventListener(MouseEvent.CLICK,increaseSize);
decrease.addEventListener(MouseEvent.CLICK,decreaseSize);
undo.addEventListener(MouseEvent.CLICK,undoAction);
redo.addEventListener(MouseEvent.CLICK,redoAction);
create.addEventListener(MouseEvent.CLICK,createNew);
remove.addEventListener(MouseEvent.CLICK,removeSelected);
}
private function createNew(event:MouseEvent):void {
newObj=new object();
newObj.name="obj";
addChild(newObj);
presentSelectedObject=newObj;
RedoHistory.splice(0,RedoHistory.length);
UndoHistory.push({target:presentSelectedObject,Action:"Created",oldValue:null,newValue:(getObjectProperties(presentSelectedObject))});
}
private function removeSelected(event:MouseEvent):void {
RedoHistory.splice(0, RedoHistory.length);
UndoHistory.push({target:presentSelectedObject,Action:"Distroyed",oldValue:(getObjectProperties(presentSelectedObject)),newValue:null});
removeChildAt(getChildIndex(presentSelectedObject));
}
private function increaseSize(event:MouseEvent):void {
var temp:Object=getObjectProperties(presentSelectedObject);
presentSelectedObject.width+=5;
presentSelectedObject.height+=5;
RedoHistory.splice(0,RedoHistory.length);
UndoHistory.push({target:presentSelectedObject,Action:"Edited",oldValue:temp,newValue:(getObjectProperties(presentSelectedObject))});
}
private function decreaseSize(event:MouseEvent):void {
presentSelectedObject.width-=5;
presentSelectedObject.height-=5;
}
private function moveObject(event:MouseEvent):void {
if (event.target.name.indexOf("obj")!=-1) {
presentSelectedObject=MovieClip(event.target);
beforeDrag=getObjectProperties(presentSelectedObject);
MovieClip(event.target).startDrag(false);
draging=true;
}
}
private function stopMoveObject(event:MouseEvent):void {
if (draging) {
presentSelectedObject.stopDrag();
draging=false;
RedoHistory.splice(0,RedoHistory.length);
UndoHistory.push({target:presentSelectedObject,Action:"Edited",oldValue:beforeDrag,newValue:(getObjectProperties(presentSelectedObject))});
}
}
private function getObjectProperties(target:MovieClip):Object {
var prop:Object=new Object();
prop.x=target.x;
prop.y=target.y;
prop.width=target.width;
prop.height=target.height;
prop.scaleX=target.scaleX;
prop.scaleY=target.scaleY;
prop.rotation=target.rotation;
return prop;
}
private function setObject(target:MovieClip,prop:Object):void {
target.x=prop.x;
target.y=prop.y;
target.width=prop.width;
target.height=prop.height;
target.scaleX=prop.scaleX;
target.scaleY=prop.scaleY;
}
private function undoAction(event:MouseEvent):void {
if (UndoHistory.length) {
switch (UndoHistory[UndoHistory.length-1].Action) {
case "Edited" :
setObject(MovieClip(UndoHistory[UndoHistory.length-1].target),UndoHistory[UndoHistory.length-1].oldValue);
break;
case "Created" :
removeChildAt(getChildIndex(MovieClip(UndoHistory[UndoHistory.length-1].target)));
break;
case "Distroyed" :
addChild(MovieClip(UndoHistory[UndoHistory.length-1].target));
setObject(MovieClip(UndoHistory[UndoHistory.length-1].target),UndoHistory[UndoHistory.length-1].oldValue);
break;
}
//RedoHistory.splice(0,RedoHistory.length);
RedoHistory.push(UndoHistory[UndoHistory.length-1]);
UndoHistory.pop();
}
}
private function redoAction(event:MouseEvent):void {
if (RedoHistory.length) {
switch (RedoHistory[RedoHistory.length-1].Action) {
case "Edited" :
setObject(MovieClip(RedoHistory[RedoHistory.length-1].target),RedoHistory[RedoHistory.length-1].newValue);
break;
case "Created" :
addChild(MovieClip(RedoHistory[RedoHistory.length-1].target));
break;
case "Distroyed" :
removeChildAt(getChildIndex(MovieClip(RedoHistory[RedoHistory.length-1].target)));
break;
}
UndoHistory.push(RedoHistory[RedoHistory.length-1]);
RedoHistory.pop();
}
}
}
}
Subscribe to:
Posts (Atom)