123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- /*
- Copyright (c) 2004-2012, The Dojo Foundation All Rights Reserved.
- Available via Academic Free License >= 2.1 OR the modified BSD license.
- see: http://dojotoolkit.org/license for details
- */
- if(!dojo._hasResource["dojox.sketch.UndoStack"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.sketch.UndoStack"] = true;
- dojo.provide("dojox.sketch.UndoStack");
- dojo.require("dojox.xml.DomParser");
- (function(){
- var ta=dojox.sketch;
- ta.CommandTypes={ Create:"Create", Move:"Move", Modify:"Modify", Delete:"Delete", Convert:"Convert"};
- dojo.declare("dojox.sketch.UndoStack",null,{
- constructor: function(figure){
- this.figure=figure;
- this._steps=[];
- this._undoedSteps=[];
- },
- apply: function(state, from, to){
- // the key here is to neutrally move from one state to another.
- // we let the individual functions (i.e. undo and redo) actually
- // determine the from and to; all we do here is implement it.
- // check whether this is a fullText step
- if(!from && !to && state.fullText){
- this.figure.setValue(state.fullText);
- return;
- }
- var fromText=from.shapeText;
- var toText=to.shapeText;
-
- if(fromText.length==0&&toText.length==0){
- // nothing to reapply?
- return;
- }
- if(fromText.length==0){
- // We are creating.
- var o=dojox.xml.DomParser.parse(toText).documentElement;
- var a=this.figure._loadAnnotation(o);
- if(a) this.figure._add(a);
- return;
- }
- if(toText.length==0){
- // we are deleting.
- var ann=this.figure.getAnnotator(from.shapeId);
- this.figure._delete([ann],true);
- return;
- }
-
- // we can simply reinit and draw from the shape itself,
- // regardless of the actual command.
- var nann=this.figure.getAnnotator(to.shapeId);
- var no=dojox.xml.DomParser.parse(toText).documentElement;
- nann.draw(no);
- this.figure.select(nann);
- return;
- },
- // stack methods.
- add: function(/*String*/cmd, /*ta.Annotation?*/ann, /*String?*/before){
- var id=ann?ann.id:'';
- //var bbox=ann?ann.getBBox():{};
- var after=ann?ann.serialize():"";
- if(cmd==ta.CommandTypes.Delete){ after=""; }
-
- /*if(ann){
- // fix the bbox x/y coords
- var t=ann.transform;
- bbox.x+=t.dx;
- bbox.y+=t.dy;
- }*/
- var state={
- cmdname:cmd,
- //bbox:bbox,
- // fullText:fullText,
- before:{
- shapeId: id,
- shapeText:before||''
- },
- after:{
- shapeId: id,
- shapeText:after
- }
- };
- //console.log('dojox.sketch history add',state);
- this._steps.push(state);
- this._undoedSteps = [];
- },
- destroy: function(){},
- undo: function(){
- var state=this._steps.pop();
- if(state){
- this._undoedSteps.push(state);
- this.apply(state,state.after,state.before);
- }
- },
- redo: function(){
- var state=this._undoedSteps.pop();
- if(state){
- this._steps.push(state);
- this.apply(state,state.before,state.after);
- }
- }
- });
- })();
- }
|