source: Dev/trunk/src/client/dojox/grid/_Events.js @ 532

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

Added Dojo 1.9.3 release.

File size: 14.4 KB
Line 
1define([
2        "dojo/keys",
3        "dojo/dom-class",
4        "dojo/_base/declare",
5        "dojo/_base/event",
6        "dojo/_base/sniff"
7], function(keys, domClass, declare, event, has){
8
9return declare("dojox.grid._Events", null, {
10        // summary:
11        //              _Grid mixin that provides default implementations for grid events.
12        // description:
13        //              Default synthetic events dispatched for _Grid. dojo.connect to events to
14        //              retain default implementation or override them for custom handling.
15       
16        // cellOverClass: String
17        //              css class to apply to grid cells over which the cursor is placed.
18        cellOverClass: "dojoxGridCellOver",
19       
20        onKeyEvent: function(e){
21                // summary:
22                //              top level handler for Key Events
23                this.dispatchKeyEvent(e);
24        },
25
26        onContentEvent: function(e){
27                // summary:
28                //              Top level handler for Content events
29                this.dispatchContentEvent(e);
30        },
31
32        onHeaderEvent: function(e){
33                // summary:
34                //              Top level handler for header events
35                this.dispatchHeaderEvent(e);
36        },
37
38        onStyleRow: function(inRow){
39                // summary:
40                //              Perform row styling on a given row. Called whenever row styling is updated.
41                // inRow: Object
42                //              Object containing row state information: selected, true if the row is selcted; over:
43                //              true of the mouse is over the row; odd: true if the row is odd. Use customClasses and
44                //              customStyles to control row css classes and styles; both properties are strings.
45                // example:
46                // |    onStyleRow({ selected: true, over:true, odd:false })
47                var i = inRow;
48                i.customClasses += (i.odd?" dojoxGridRowOdd":"") + (i.selected?" dojoxGridRowSelected":"") + (i.over?" dojoxGridRowOver":"");
49                this.focus.styleRow(inRow);
50                this.edit.styleRow(inRow);
51        },
52       
53        onKeyDown: function(e){
54                // summary:
55                //              Grid key event handler. By default enter begins editing and applies edits, escape cancels an edit,
56                //              tab, shift-tab, and arrow keys move grid cell focus.
57                if(e.altKey || e.metaKey){
58                        return;
59                }
60                var colIdx;
61                switch(e.keyCode){
62                        case keys.ESCAPE:
63                                this.edit.cancel();
64                                break;
65                        case keys.ENTER:
66                                if(!this.edit.isEditing()){
67                                        colIdx = this.focus.getHeaderIndex();
68                                        if(colIdx >= 0) {
69                                                this.setSortIndex(colIdx);
70                                                break;
71                                        }else {
72                                                this.selection.clickSelect(this.focus.rowIndex, dojo.isCopyKey(e), e.shiftKey);
73                                        }
74                                        event.stop(e);
75                                }
76                                if(!e.shiftKey){
77                                        var isEditing = this.edit.isEditing();
78                                        this.edit.apply();
79                                        if(!isEditing){
80                                                this.edit.setEditCell(this.focus.cell, this.focus.rowIndex);
81                                        }
82                                }
83                                if (!this.edit.isEditing()){
84                                        var curView = this.focus.focusView || this.views.views[0];  //if no focusView than only one view
85                                        curView.content.decorateEvent(e);
86                                        this.onRowClick(e);
87                                        event.stop(e);
88                                }
89                                break;
90                        case keys.SPACE:
91                                if(!this.edit.isEditing()){
92                                        colIdx = this.focus.getHeaderIndex();
93                                        if(colIdx >= 0) {
94                                                this.setSortIndex(colIdx);
95                                                break;
96                                        }else {
97                                                this.selection.clickSelect(this.focus.rowIndex, dojo.isCopyKey(e), e.shiftKey);
98                                        }
99                                        event.stop(e);
100                                }
101                                break;
102                        case keys.TAB:
103                                this.focus[e.shiftKey ? 'previousKey' : 'nextKey'](e);
104                                break;
105                        case keys.LEFT_ARROW:
106                        case keys.RIGHT_ARROW:
107                                if(!this.edit.isEditing()){
108                                        var keyCode = e.keyCode;  // IE seems to lose after stopEvent when modifier keys
109                                        event.stop(e);
110                                        colIdx = this.focus.getHeaderIndex();
111                                        if (colIdx >= 0 && (e.shiftKey && e.ctrlKey)){
112                                                this.focus.colSizeAdjust(e, colIdx, (keyCode == keys.LEFT_ARROW ? -1 : 1)*5);
113                                        }
114                                        else{
115                                                var offset = (keyCode == keys.LEFT_ARROW) ? 1 : -1;
116                                                if(this.isLeftToRight()){ offset *= -1; }
117                                                this.focus.move(0, offset);
118                                        }
119                                }
120                                break;
121                        case keys.UP_ARROW:
122                                if(!this.edit.isEditing() && this.focus.rowIndex !== 0){
123                                        event.stop(e);
124                                        this.focus.move(-1, 0);
125                                }
126                                break;
127                        case keys.DOWN_ARROW:
128                                if(!this.edit.isEditing() && this.focus.rowIndex+1 != this.rowCount){
129                                        event.stop(e);
130                                        this.focus.move(1, 0);
131                                }
132                                break;
133                        case keys.PAGE_UP:
134                                if(!this.edit.isEditing() && this.focus.rowIndex !== 0){
135                                        event.stop(e);
136                                        if(this.focus.rowIndex != this.scroller.firstVisibleRow+1){
137                                                this.focus.move(this.scroller.firstVisibleRow-this.focus.rowIndex, 0);
138                                        }else{
139                                                this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex-1));
140                                                this.focus.move(this.scroller.firstVisibleRow-this.scroller.lastVisibleRow+1, 0);
141                                        }
142                                }
143                                break;
144                        case keys.PAGE_DOWN:
145                                if(!this.edit.isEditing() && this.focus.rowIndex+1 != this.rowCount){
146                                        event.stop(e);
147                                        if(this.focus.rowIndex != this.scroller.lastVisibleRow-1){
148                                                this.focus.move(this.scroller.lastVisibleRow-this.focus.rowIndex-1, 0);
149                                        }else{
150                                                this.setScrollTop(this.scroller.findScrollTop(this.focus.rowIndex+1));
151                                                this.focus.move(this.scroller.lastVisibleRow-this.scroller.firstVisibleRow-1, 0);
152                                        }
153                                }
154                                break;
155                        default:
156                                break;
157                }
158        },
159       
160        onMouseOver: function(e){
161                // summary:
162                //              Event fired when mouse is over the grid.
163                // e: Event
164                //              Decorated event object contains reference to grid, cell, and rowIndex
165                e.rowIndex == -1 ? this.onHeaderCellMouseOver(e) : this.onCellMouseOver(e);
166        },
167       
168        onMouseOut: function(e){
169                // summary:
170                //              Event fired when mouse moves out of the grid.
171                // e: Event
172                //              Decorated event object that contains reference to grid, cell, and rowIndex
173                e.rowIndex == -1 ? this.onHeaderCellMouseOut(e) : this.onCellMouseOut(e);
174        },
175       
176        onMouseDown: function(e){
177                // summary:
178                //              Event fired when mouse is down inside grid.
179                // e: Event
180                //              Decorated event object that contains reference to grid, cell, and rowIndex
181                e.rowIndex == -1 ? this.onHeaderCellMouseDown(e) : this.onCellMouseDown(e);
182        },
183       
184        onMouseOverRow: function(e){
185                // summary:
186                //              Event fired when mouse is over any row (data or header).
187                // e: Event
188                //              Decorated event object contains reference to grid, cell, and rowIndex
189                if(!this.rows.isOver(e.rowIndex)){
190                        this.rows.setOverRow(e.rowIndex);
191                        e.rowIndex == -1 ? this.onHeaderMouseOver(e) : this.onRowMouseOver(e);
192                }
193        },
194        onMouseOutRow: function(e){
195                // summary:
196                //              Event fired when mouse moves out of any row (data or header).
197                // e: Event
198                //              Decorated event object contains reference to grid, cell, and rowIndex
199                if(this.rows.isOver(-1)){
200                        this.onHeaderMouseOut(e);
201                }else if(!this.rows.isOver(-2)){
202                        this.rows.setOverRow(-2);
203                        this.onRowMouseOut(e);
204                }
205        },
206       
207        onMouseDownRow: function(e){
208                // summary:
209                //              Event fired when mouse is down inside grid row
210                // e: Event
211                //              Decorated event object that contains reference to grid, cell, and rowIndex
212                if(e.rowIndex != -1)
213                        this.onRowMouseDown(e);
214        },
215
216        // cell events
217        onCellMouseOver: function(e){
218                // summary:
219                //              Event fired when mouse is over a cell.
220                // e: Event
221                //              Decorated event object contains reference to grid, cell, and rowIndex
222                if(e.cellNode){
223                        domClass.add(e.cellNode, this.cellOverClass);
224                }
225        },
226       
227        onCellMouseOut: function(e){
228                // summary:
229                //              Event fired when mouse moves out of a cell.
230                // e: Event
231                //              Decorated event object which contains reference to grid, cell, and rowIndex
232                if(e.cellNode){
233                        domClass.remove(e.cellNode, this.cellOverClass);
234                }
235        },
236       
237        onCellMouseDown: function(e){
238                // summary:
239                //              Event fired when mouse is down in a header cell.
240                // e: Event
241                //              Decorated event object which contains reference to grid, cell, and rowIndex
242        },
243
244        onCellClick: function(e){
245                // summary:
246                //              Event fired when a cell is clicked.
247                // e: Event
248                //              Decorated event object which contains reference to grid, cell, and rowIndex
249                this._click[0] = this._click[1];
250                this._click[1] = e;
251                if(!this.edit.isEditCell(e.rowIndex, e.cellIndex)){
252                        this.focus.setFocusCell(e.cell, e.rowIndex);
253                }
254                // in some cases click[0] is null which causes false doubeClicks. Fixes #100703
255                if(this._click.length > 1 && this._click[0] == null){
256                        this._click.shift();
257                }
258                this.onRowClick(e);
259        },
260
261        onCellDblClick: function(e){
262                // summary:
263                //              Event fired when a cell is double-clicked.
264                // e: Event
265                //              Decorated event object contains reference to grid, cell, and rowIndex
266                var event;
267                if(this._click.length > 1 && has('ie')){
268                        event = this._click[1];
269                }else if(this._click.length > 1 && this._click[0].rowIndex != this._click[1].rowIndex){
270                        event = this._click[0];
271                }else{
272                        event = e;
273                }
274                this.focus.setFocusCell(event.cell, event.rowIndex);
275                this.edit.setEditCell(event.cell, event.rowIndex);
276                this.onRowDblClick(e);
277        },
278
279        onCellContextMenu: function(e){
280                // summary:
281                //              Event fired when a cell context menu is accessed via mouse right click.
282                // e: Event
283                //              Decorated event object which contains reference to grid, cell, and rowIndex
284                this.onRowContextMenu(e);
285        },
286
287        onCellFocus: function(inCell, inRowIndex){
288                // summary:
289                //              Event fired when a cell receives focus.
290                // inCell: Object
291                //              Cell object containing properties of the grid column.
292                // inRowIndex: Integer
293                //              Index of the grid row
294                this.edit.cellFocus(inCell, inRowIndex);
295        },
296
297        // row events
298        onRowClick: function(e){
299                // summary:
300                //              Event fired when a row is clicked.
301                // e: Event
302                //              Decorated event object which contains reference to grid, cell, and rowIndex
303                this.edit.rowClick(e);
304                this.selection.clickSelectEvent(e);
305        },
306
307        onRowDblClick: function(e){
308                // summary:
309                //              Event fired when a row is double clicked.
310                // e: Event
311                //              decorated event object which contains reference to grid, cell, and rowIndex
312        },
313
314        onRowMouseOver: function(e){
315                // summary:
316                //              Event fired when mouse moves over a data row.
317                // e: Event
318                //              Decorated event object which contains reference to grid, cell, and rowIndex
319        },
320
321        onRowMouseOut: function(e){
322                // summary:
323                //              Event fired when mouse moves out of a data row.
324                // e: Event
325                //              Decorated event object contains reference to grid, cell, and rowIndex
326        },
327       
328        onRowMouseDown: function(e){
329                // summary:
330                //              Event fired when mouse is down in a row.
331                // e: Event
332                //              Decorated event object which contains reference to grid, cell, and rowIndex
333        },
334
335        onRowContextMenu: function(e){
336                // summary:
337                //              Event fired when a row context menu is accessed via mouse right click.
338                // e: Event
339                //              Decorated event object which contains reference to grid, cell, and rowIndex
340                event.stop(e);
341        },
342
343        // header events
344        onHeaderMouseOver: function(e){
345                // summary:
346                //              Event fired when mouse moves over the grid header.
347                // e: Event
348                //              Decorated event object contains reference to grid, cell, and rowIndex
349        },
350
351        onHeaderMouseOut: function(e){
352                // summary:
353                //              Event fired when mouse moves out of the grid header.
354                // e: Event
355                //              Decorated event object which contains reference to grid, cell, and rowIndex
356        },
357
358        onHeaderCellMouseOver: function(e){
359                // summary:
360                //              Event fired when mouse moves over a header cell.
361                // e: Event
362                //              Decorated event object which contains reference to grid, cell, and rowIndex
363                if(e.cellNode){
364                        domClass.add(e.cellNode, this.cellOverClass);
365                }
366        },
367
368        onHeaderCellMouseOut: function(e){
369                // summary:
370                //              Event fired when mouse moves out of a header cell.
371                // e: Event
372                //              Decorated event object which contains reference to grid, cell, and rowIndex
373                if(e.cellNode){
374                        domClass.remove(e.cellNode, this.cellOverClass);
375                }
376        },
377       
378        onHeaderCellMouseDown: function(e) {
379                // summary:
380                //              Event fired when mouse is down in a header cell.
381                // e: Event
382                //              Decorated event object which contains reference to grid, cell, and rowIndex
383        },
384
385        onHeaderClick: function(e){
386                // summary:
387                //              Event fired when the grid header is clicked.
388                // e: Event
389                //              Decorated event object which contains reference to grid, cell, and rowIndex
390        },
391
392        onHeaderCellClick: function(e){
393                // summary:
394                //              Event fired when a header cell is clicked.
395                // e: Event
396                //              Decorated event object which contains reference to grid, cell, and rowIndex
397                this.setSortIndex(e.cell.index);
398                this.onHeaderClick(e);
399        },
400
401        onHeaderDblClick: function(e){
402                // summary:
403                //              Event fired when the grid header is double clicked.
404                // e: Event
405                //              Decorated event object which contains reference to grid, cell, and rowIndex
406        },
407
408        onHeaderCellDblClick: function(e){
409                // summary:
410                //              Event fired when a header cell is double clicked.
411                // e: Event
412                //              Decorated event object which contains reference to grid, cell, and rowIndex
413                this.onHeaderDblClick(e);
414        },
415
416        onHeaderCellContextMenu: function(e){
417                // summary:
418                //              Event fired when a header cell context menu is accessed via mouse right click.
419                // e: Event
420                //              Decorated event object which contains reference to grid, cell, and rowIndex
421                this.onHeaderContextMenu(e);
422        },
423
424        onHeaderContextMenu: function(e){
425                // summary:
426                //              Event fired when the grid header context menu is accessed via mouse right click.
427                // e: Event
428                //              Decorated event object which contains reference to grid, cell, and rowIndex
429                if(!this.headerMenu){
430                        event.stop(e);
431                }
432        },
433
434        // editing
435        onStartEdit: function(inCell, inRowIndex){
436                // summary:
437                //              Event fired when editing is started for a given grid cell
438                // inCell: Object
439                //              Cell object containing properties of the grid column.
440                // inRowIndex: Integer
441                //              Index of the grid row
442        },
443
444        onApplyCellEdit: function(inValue, inRowIndex, inFieldIndex){
445                // summary:
446                //              Event fired when editing is applied for a given grid cell
447                // inValue: String
448                //              Value from cell editor
449                // inRowIndex: Integer
450                //              Index of the grid row
451                // inFieldIndex: Integer
452                //              Index in the grid's data store
453        },
454
455        onCancelEdit: function(inRowIndex){
456                // summary:
457                //              Event fired when editing is cancelled for a given grid cell
458                // inRowIndex: Integer
459                //              Index of the grid row
460        },
461
462        onApplyEdit: function(inRowIndex){
463                // summary:
464                //              Event fired when editing is applied for a given grid row
465                // inRowIndex: Integer
466                //              Index of the grid row
467        },
468
469        onCanSelect: function(inRowIndex){
470                // summary:
471                //              Event to determine if a grid row may be selected
472                // inRowIndex: Integer
473                //              Index of the grid row
474                // returns: Boolean
475                //              true if the row can be selected
476                return true;
477        },
478
479        onCanDeselect: function(inRowIndex){
480                // summary:
481                //              Event to determine if a grid row may be deselected
482                // inRowIndex: Integer
483                //              Index of the grid row
484                // returns: Boolean
485                //              true if the row can be deselected
486                return true;
487        },
488
489        onSelected: function(inRowIndex){
490                // summary:
491                //              Event fired when a grid row is selected
492                // inRowIndex: Integer
493                //              Index of the grid row
494                this.updateRowStyles(inRowIndex);
495        },
496
497        onDeselected: function(inRowIndex){
498                // summary:
499                //              Event fired when a grid row is deselected
500                // inRowIndex: Integer
501                //              Index of the grid row
502                this.updateRowStyles(inRowIndex);
503        },
504
505        onSelectionChanged: function(){
506        }
507});
508});
Note: See TracBrowser for help on using the repository browser.