source: Dev/trunk/src/client/dojox/calendar/Mouse.js @ 485

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

Added Dojo 1.9.3 release.

  • Property svn:executable set to *
File size: 7.7 KB
Line 
1define([
2        "dojo/_base/array",
3        "dojo/_base/declare",
4        "dojo/_base/event",
5        "dojo/_base/lang",
6        "dojo/_base/window",
7        "dojo/dom-geometry",
8        "dojo/mouse",
9        "dojo/on",     
10        "dojo/keys"],
11       
12function(
13        arr,   
14        declare,
15        event,
16        lang,   
17        win,
18        domGeometry,
19        mouse,
20        on,     
21        keys){
22       
23        /*=====
24        var __ItemMouseEventArgs = {
25                // summary:
26                //              The event dispatched when an item is clicked, double-clicked or context-clicked.
27                // item: Object
28                //              The item clicked.
29                // renderer: dojox/calendar/_RendererMixin
30                //              The item renderer clicked.
31                // triggerEvent: Event
32                //              The event at the origin of this event.
33        };
34        =====*/
35                       
36        return declare("dojox.calendar.Mouse", null, {
37
38                // summary:
39                //              This plugin is managing the mouse interactions on item renderers displayed by a calendar view.         
40                               
41                // triggerExtent: Number
42                //              The distance in pixels along the vertical or horizontal axis to cover with the
43                //              mouse button down before triggering the editing gesture.
44                triggerExtent: 3,
45                                       
46                postMixInProperties: function(){
47                        this.inherited(arguments);
48                       
49                        this.on("rendererCreated", lang.hitch(this, function(irEvent){
50                               
51                                var renderer = irEvent.renderer.renderer;
52
53                                this.own(on(renderer.domNode, "click", lang.hitch(this, function(e){
54                                        event.stop(e);
55                                        this._onItemClick({
56                                                triggerEvent: e,
57                                                renderer: renderer,
58                                                item: renderer.item._item
59                                        });
60                                })));
61                               
62                                this.own(on(renderer.domNode, "dblclick", lang.hitch(this, function(e){
63                                        event.stop(e);
64                                        this._onItemDoubleClick({
65                                                triggerEvent: e,
66                                                renderer: renderer,
67                                                item: renderer.item._item
68                                        });
69                                })));
70                               
71                                this.own(on(renderer.domNode, "contextmenu", lang.hitch(this, function(e){
72                                        this._onItemContextMenu({
73                                                triggerEvent: e,
74                                                renderer: renderer,
75                                                item:renderer.item._item
76                                        });
77                                })));
78                               
79                                if(renderer.resizeStartHandle){
80                                        this.own(on(renderer.resizeStartHandle, "mousedown", lang.hitch(this, function(e){
81                                                this._onRendererHandleMouseDown(e, renderer, "resizeStart");
82                                        })));
83                                }
84                               
85                                if(renderer.moveHandle){
86                                        this.own(on(renderer.moveHandle, "mousedown", lang.hitch(this, function(e){
87                                                this._onRendererHandleMouseDown(e, renderer, "move");
88                                        })));
89                                       
90                                }
91                               
92                                if(renderer.resizeEndHandle){
93                                        this.own(on(renderer.resizeEndHandle, "mousedown", lang.hitch(this, function(e){
94                                                this._onRendererHandleMouseDown(e, renderer, "resizeEnd");
95                                        })));
96                                }                               
97                               
98                                this.own(on(renderer.domNode, "mousedown", lang.hitch(this, function(e){
99                                        this._rendererMouseDownHandler(e, renderer);
100                                })));
101                               
102                               
103                                this.own(on(irEvent.renderer.container, mouse.enter, lang.hitch(this, function(e){
104                                        if(!renderer.item) return;
105                                       
106                                        if(!this._editingGesture){
107                                                this._setHoveredItem(renderer.item.item, renderer);
108                                                this._onItemRollOver(this.__fixEvt({
109                                                        item: renderer.item._item,
110                                                        renderer: renderer,
111                                                        triggerEvent: e
112                                                }));
113                                        }                                       
114                                })));
115                               
116                                this.own(on(renderer.domNode, mouse.leave, lang.hitch(this, function(e){
117                                        if(!renderer.item) return;
118                                        if(!this._editingGesture){                                             
119                                                this._setHoveredItem(null);
120                                               
121                                                this._onItemRollOut(this.__fixEvt({
122                                                        item: renderer.item._item,
123                                                        renderer: renderer,
124                                                        triggerEvent: e
125                                                }));
126                                        }
127                                })));
128                               
129                        }));                   
130                },
131               
132                _onItemRollOver: function(e){
133                        // tags:
134                        //              private
135
136                        this._dispatchCalendarEvt(e, "onItemRollOver");
137                },
138               
139                onItemRollOver: function(e){
140                        // summary:
141                        //              Event dispatched when the mouse cursor in going over an item renderer.
142                        // e: __ItemMouseEventArgs
143                        //              The event dispatched when the mouse cursor enters in the item renderer.
144                        // tags:
145                        //              callback
146
147                },
148               
149                _onItemRollOut: function(e){
150                        // tags:
151                        //              private
152
153                        this._dispatchCalendarEvt(e, "onItemRollOut");
154                },
155               
156                onItemRollOut: function(e){
157                        // summary:
158                        //              Event dispatched when the mouse cursor in leaving an item renderer.
159                        // e: __ItemMouseEventArgs
160                        //              The event dispatched when the mouse cursor enters in the item renderer.
161                        // tags:
162                        //              protected
163
164                },
165               
166                _rendererMouseDownHandler: function(e, renderer){
167                       
168                        // summary:
169                        //              Callback if the user clicked on the item renderer but not on a handle.
170                        //              Manages item selection.
171                        // tags:
172                        //              private
173
174                        event.stop(e);                         
175                       
176                        var item = renderer.item._item;
177                       
178                        this.selectFromEvent(e, item, renderer, true);
179                       
180                        if(this._setTabIndexAttr){
181                                this[this._setTabIndexAttr].focus();
182                        }
183                },
184               
185                _onRendererHandleMouseDown: function(e, renderer, editKind){
186                        // summary:
187                        //              Callback if the user clicked on a handle of an item renderer.
188                        //              Manages item selection and editing gesture. If editing is not allowed,
189                        //              resize handles are not displayed and so this callback will never be called.
190                        //              In that case selected is managed by the _rendererMouseDownHandler function.
191                        // tags:
192                        //              private
193
194                       
195                        event.stop(e);                         
196                       
197                        this.showFocus = false;
198                       
199                        // save item here as calling endItemEditing may call a relayout and changes the item.
200                        var ritem = renderer.item;
201                        var item = ritem.item;
202                       
203                        if(!this.isItemBeingEdited(item)){
204                                               
205                                if(this._isEditing){                                                           
206                                        this._endItemEditing("mouse", false);                                                           
207                                }
208                               
209                                this.selectFromEvent(e, renderer.item._item, renderer, true);
210                               
211                                if(this._setTabIndexAttr){
212                                        this[this._setTabIndexAttr].focus();
213                                }
214                               
215                                this._edProps = {
216                                        editKind: editKind,
217                                        editedItem: item,
218                                        rendererKind: renderer.rendererKind,
219                                        tempEditedItem: item,                                   
220                                        liveLayout: this.liveLayout                             
221                                };
222                                                       
223                                this.set("focusedItem", this._edProps.editedItem);     
224                        }
225                                                                                                                                                                               
226                        var handles = [];
227                        handles.push(on(win.doc, "mouseup", lang.hitch(this, this._editingMouseUpHandler)));
228                        handles.push(on(win.doc, "mousemove", lang.hitch(this, this._editingMouseMoveHandler)));
229                       
230                        var p = this._edProps;
231                        p.handles = handles;
232                        p.eventSource = "mouse";
233                        p.editKind = editKind;
234                       
235                        this._startPoint = {x: e.screenX, y: e.screenY};                                                                                               
236                },
237               
238                _editingMouseMoveHandler: function(e){
239                        // tags:
240                        //              private
241
242                        var p = this._edProps;
243                                       
244                        if(this._editingGesture){
245                               
246                                if(!this._autoScroll(e.pageX, e.pageY, true)){
247                                        this._moveOrResizeItemGesture([this.getTime(e)], "mouse", e);   
248                                }
249                                                                                       
250                        }else if(Math.abs(this._startPoint.x - e.screenX) >= this.triggerExtent || // moved enough to trigger editing
251                                                         Math.abs(this._startPoint.y - e.screenY) >= this.triggerExtent){
252                                                               
253                                if(!this._isEditing){
254                                        this._startItemEditing(p.editedItem, "mouse"); 
255                                }
256                               
257                                p = this._edProps;
258                                                               
259                                this._startItemEditingGesture([this.getTime(e)], p.editKind, "mouse", e);
260                        }
261                },             
262               
263                _editingMouseUpHandler: function(e){
264                        // tags:
265                        //              private
266                       
267                        var p = this._edProps;
268                       
269                        this._stopAutoScroll();
270                                                                       
271                        if(this._isEditing){                   
272                               
273                                if(this._editingGesture){ // a gesture is ongoing.                                     
274                                        this._endItemEditingGesture("mouse", e);                                       
275                                }
276                               
277                                this._endItemEditing("mouse", false);
278                                                               
279                        }else{ // handlers were not removed by endItemEditing
280                                arr.forEach(p.handles, function(handle){
281                                        handle.remove();
282                                });
283                        }
284                },
285               
286                _autoScroll: function(globalX, globalY, isVertical){
287                       
288                        if (!this.scrollable || !this.autoScroll) {
289                                return false;
290                        }
291                                                               
292                        var scrollerPos = domGeometry.position(this.scrollContainer, true);
293                       
294                        var p = isVertical ? globalY - scrollerPos.y : globalX - scrollerPos.x;
295                        var max = isVertical ? scrollerPos.h : scrollerPos.w;
296                       
297                        if (p < 0 || p > max) {
298                               
299                                var step = Math.floor((p < 0    ? p : p - max)/2)/3;
300                               
301                                this._startAutoScroll(step);
302                                               
303                                return true;
304                               
305                        } else {
306                               
307                                this._stopAutoScroll();                         
308                        }
309                        return false;
310                }                                                       
311        });
312
313});
Note: See TracBrowser for help on using the repository browser.