source: Dev/trunk/src/client/dojox/gfx/Moveable.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: 4.4 KB
Line 
1define(["dojo/_base/lang","dojo/_base/declare","dojo/_base/array","dojo/_base/event","dojo/topic","dojo/touch",
2        "dojo/dom-class","dojo/_base/window","./Mover"],
3  function(lang,declare,arr,event,topic,touch,domClass,win,Mover){
4
5        /*=====
6        var __MoveableCtorArgs = declare("dojox.gfx.__MoveableCtorArgs", null, {
7                // summary:
8                //              The arguments used for dojox/gfx/Moveable constructor.
9
10                // delay: Number
11                //              delay move by this number of pixels
12                delay:0,
13
14                // mover: Object
15                //              a constructor of custom Mover
16                mover:Mover
17        });
18        =====*/
19
20        return declare("dojox.gfx.Moveable", null, {
21                constructor: function(shape, params){
22                        // summary:
23                        //              an object, which makes a shape moveable
24                        // shape: dojox/gfx.Shape
25                        //              a shape object to be moved.
26                        // params: __MoveableCtorArgs
27                        //              an optional configuration object.
28
29                        this.shape = shape;
30                        this.delay = (params && params.delay > 0) ? params.delay : 0;
31                        this.mover = (params && params.mover) ? params.mover : Mover;
32                        this.events = [
33                                this.shape.on(touch.press, lang.hitch(this, "onMouseDown"))
34                                // cancel text selection and text dragging
35                                //, dojo.connect(this.handle, "ondragstart",   dojo, "stopEvent")
36                                //, dojo.connect(this.handle, "onselectstart", dojo, "stopEvent")
37                        ];
38                },
39
40                // methods
41                destroy: function(){
42                        // summary:
43                        //              stops watching for possible move, deletes all references, so the object can be garbage-collected
44                        arr.forEach(this.events, function(handle){
45                                handle.remove();
46                        });
47                        this.events = this.shape = null;
48                },
49
50                // mouse event processors
51                onMouseDown: function(e){
52                        // summary:
53                        //              event processor for onmousedown, creates a Mover for the shape
54                        // e: Event
55                        //              mouse event
56                        if(this.delay){
57                                this.events.push(
58                                        this.shape.on(touch.move, lang.hitch(this, "onMouseMove")),
59                                        this.shape.on(touch.release, lang.hitch(this, "onMouseUp")));
60                                this._lastX = e.clientX;
61                                this._lastY = e.clientY;
62                        }else{
63                                new this.mover(this.shape, e, this);
64                        }
65                        event.stop(e);
66                },
67                onMouseMove: function(e){
68                        // summary:
69                        //              event processor for onmousemove, used only for delayed drags
70                        // e: Event
71                        //              mouse event
72                        var clientX = e.clientX,
73                                clientY = e.clientY;
74
75                        if(Math.abs(clientX - this._lastX) > this.delay || Math.abs(clientY - this._lastY) > this.delay){
76                                this.onMouseUp(e);
77                                new this.mover(this.shape, e, this);
78                        }
79                        event.stop(e);
80                },
81                onMouseUp: function(e){
82                        // summary:
83                        //              event processor for onmouseup, used only for delayed delayed drags
84                        // e: Event
85                        //              mouse event
86                        this.events.pop().remove();
87                },
88
89                // local events
90                onMoveStart: function(/* dojox/gfx/Mover */ mover){
91                        // summary:
92                        //              called before every move operation
93                        // mover:
94                        //              A Mover instance that fired the event.
95                        topic.publish("/gfx/move/start", mover);
96                        domClass.add(win.body(), "dojoMove");
97                },
98                onMoveStop: function(/* dojox/gfx/Mover */ mover){
99                        // summary:
100                        //              called after every move operation
101                        // mover:
102                        //              A Mover instance that fired the event.
103                        topic.publish("/gfx/move/stop", mover);
104                        domClass.remove(win.body(), "dojoMove");
105                },
106                onFirstMove: function(/* dojox/gfx/Mover */ mover){
107                        // summary:
108                        //              called during the very first move notification,
109                        //              can be used to initialize coordinates, can be overwritten.
110                        // mover:
111                        //              A Mover instance that fired the event.
112
113                        // default implementation does nothing
114                },
115                onMove: function(/* dojox/gfx/Mover */ mover, /* Object */ shift){
116                        // summary:
117                        //              called during every move notification,
118                        //              should actually move the node, can be overwritten.
119                        // mover:
120                        //              A Mover instance that fired the event.
121                        // shift:
122                        //              An object as {dx,dy} that represents the shift.
123                        this.onMoving(mover, shift);
124                        this.shape.applyLeftTransform(shift);
125                        this.onMoved(mover, shift);
126                },
127                onMoving: function(/* dojox/gfx/Mover */ mover, /* Object */ shift){
128                        // summary:
129                        //              called before every incremental move,
130                        //              can be overwritten.
131                        // mover:
132                        //              A Mover instance that fired the event.
133                        // shift:
134                        //              An object as {dx,dy} that represents the shift.
135
136                        // default implementation does nothing
137                },
138                onMoved: function(/* dojox/gfx/Mover */ mover, /* Object */ shift){
139                        // summary:
140                        //              called after every incremental move,
141                        //              can be overwritten.
142                        // mover:
143                        //              A Mover instance that fired the event.
144                        // shift:
145                        //              An object as {dx,dy} that represents the shift.
146
147                        // default implementation does nothing
148                }
149        });
150});
Note: See TracBrowser for help on using the repository browser.