source: Dev/trunk/src/client/dojox/sketch/UndoStack.js @ 529

Last change on this file since 529 was 483, checked in by hendrikvanantwerpen, 11 years ago

Added Dojo 1.9.3 release.

File size: 2.6 KB
Line 
1define([
2        "dojo/_base/kernel",
3        "dojo/_base/lang",
4        "dojo/_base/declare",
5        "../xml/DomParser"
6], function(dojo){
7        dojo.getObject("sketch", true, dojox);
8        var ta=dojox.sketch;
9        ta.CommandTypes={ Create:"Create", Move:"Move", Modify:"Modify", Delete:"Delete", Convert:"Convert"};
10
11        dojo.declare("dojox.sketch.UndoStack",null,{
12                constructor: function(figure){
13                        this.figure=figure;
14                        this._steps=[];
15                        this._undoedSteps=[];
16                },
17                apply: function(state, from, to){
18                        //      the key here is to neutrally move from one state to another.
19                        //      we let the individual functions (i.e. undo and redo) actually
20                        //      determine the from and to; all we do here is implement it.
21
22                        //      check whether this is a fullText step
23                        if(!from && !to && state.fullText){
24                                this.figure.setValue(state.fullText);
25                                return;
26                        }
27
28                        var fromText=from.shapeText;
29                        var toText=to.shapeText;
30                       
31                        if(fromText.length==0&&toText.length==0){
32                                //      nothing to reapply?
33                                return;
34                        }
35                        if(fromText.length==0){
36                                //      We are creating.
37                                var o=dojox.xml.DomParser.parse(toText).documentElement;
38                                var a=this.figure._loadAnnotation(o);
39                                if(a) this.figure._add(a);
40                                return;
41                        }
42                        if(toText.length==0){
43                                //      we are deleting.
44                                var ann=this.figure.getAnnotator(from.shapeId);
45                                this.figure._delete([ann],true);
46                                return;
47                        }
48                       
49                        //      we can simply reinit and draw from the shape itself,
50                        //              regardless of the actual command.
51                        var nann=this.figure.getAnnotator(to.shapeId);
52                        var no=dojox.xml.DomParser.parse(toText).documentElement;
53                        nann.draw(no);
54                        this.figure.select(nann);
55                        return;
56                },
57                //      stack methods.
58                add: function(/*String*/cmd, /*ta.Annotation?*/ann, /*String?*/before){
59                        var id=ann?ann.id:'';
60                        //var bbox=ann?ann.getBBox():{};
61                        var after=ann?ann.serialize():"";
62                        if(cmd==ta.CommandTypes.Delete){ after=""; }
63                       
64                        /*if(ann){
65                                //      fix the bbox x/y coords
66                                var t=ann.transform;
67                                bbox.x+=t.dx;
68                                bbox.y+=t.dy;
69                        }*/
70                        var state={
71                                cmdname:cmd,
72                                //bbox:bbox,
73//                                      fullText:fullText,
74                                before:{
75                                        shapeId: id,
76                                        shapeText:before||''
77                                },
78                                after:{
79                                        shapeId: id,
80                                        shapeText:after
81                                }
82                        };
83                        //console.log('dojox.sketch history add',state);
84                        this._steps.push(state);
85                        this._undoedSteps = [];
86                },
87                destroy: function(){},
88                undo: function(){
89                        var state=this._steps.pop();
90                        if(state){
91                                this._undoedSteps.push(state);
92                                this.apply(state,state.after,state.before);
93                        }
94                },
95                redo: function(){
96                        var state=this._undoedSteps.pop();
97                        if(state){
98                                this._steps.push(state);
99                                this.apply(state,state.before,state.after);
100                        }
101                }
102        });
103
104        return dojox.sketch.UndoStack;
105});
Note: See TracBrowser for help on using the repository browser.