123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226 |
- /*
- 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.grid.enhanced._Events"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code.
- dojo._hasResource["dojox.grid.enhanced._Events"] = true;
- dojo.provide("dojox.grid.enhanced._Events");
- dojo.declare("dojox.grid.enhanced._Events", null, {
- // summary:
- // Overwrite some default events of DataGrid
- //
- // description:
- // Methods are copied or replaced for overwriting, this might be refined once
- // an overall plugin architecture is set up for DataGrid.
- //_events: Object
- // Method map cached from dojox.grid._Events().
- _events: null,
- // headerCellActiveClass: String
- // css class to apply to grid header cells when activated(mouse down)
- headerCellActiveClass: 'dojoxGridHeaderActive',
-
- // cellActiveClass: String
- // css class to apply to grid content cells when activated(mouse down)
- cellActiveClass: 'dojoxGridCellActive',
-
- // rowActiveClass: String
- // css class to apply to grid rows when activated(mouse down)
- rowActiveClass: 'dojoxGridRowActive',
- constructor: function(inGrid){
- //get the default Grid events
- this._events = new dojox.grid._Events();
- //for methods that won't be overwritten, copy them to "this" scope
- for(var p in this._events){
- if(!this[p]){
- this.p = this._events.p;
- }
- }
- //mixin "this" to Grid
- inGrid.mixin(inGrid, this);
- },
- dokeyup: function(e){
- // summary:
- // Grid key up event handler.
- // e: Event
- // Un-decorated event object
- this.focus.currentArea().keyup(e);
- },
- onKeyDown: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onKeyDown();
- if(e.altKey || e.metaKey){ return; }
- var dk = dojo.keys;
- var focus = this.focus;
- var editing = this.edit.isEditing();
- switch(e.keyCode){
- case dk.TAB:
- if(e.ctrlKey){ return; }
- focus.tab(e.shiftKey ? -1:1,e);
- break;
- case dk.UP_ARROW:
- case dk.DOWN_ARROW:
- if(editing){ return; }
- focus.currentArea().move(e.keyCode == dk.UP_ARROW ? -1 : 1, 0, e);
- break;
- case dk.LEFT_ARROW:
- case dk.RIGHT_ARROW:
- if(editing){ return; }
- var offset = (e.keyCode == dk.LEFT_ARROW) ? 1 : -1;
- if(dojo._isBodyLtr()){ offset *= -1; }
- focus.currentArea().move(0, offset, e);
- break;
- case dk.F10:
- if(this.menus && e.shiftKey){
- this.onRowContextMenu(e);
- }
- break;
- default:
- focus.currentArea().keydown(e);
- break;
- }
- },
- //TODO - make the following events more reasonalble - e.g. more accurate conditions
- //events for row selectors
- domouseup: function(e){
- if(e.cellNode){
- this.onMouseUp(e);
- }else{
- this.onRowSelectorMouseUp(e);
- }
- },
- domousedown: function(e){
- if(!e.cellNode){
- this.onRowSelectorMouseDown(e);
- }
- },
- onMouseUp: function(e){
- // summary:
- // New - Event fired when mouse is up inside grid.
- // e: Event
- // Decorated event object that contains reference to grid, cell, and rowIndex
- this[e.rowIndex == -1 ? "onHeaderCellMouseUp" : "onCellMouseUp"](e);
- },
- onCellMouseDown: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onCellMouseDown()
- dojo.addClass(e.cellNode, this.cellActiveClass);
- dojo.addClass(e.rowNode, this.rowActiveClass);
- },
- onCellMouseUp: function(e){
- // summary:
- // New - Event fired when mouse is up inside content cell.
- // e: Event
- // Decorated event object that contains reference to grid, cell, and rowIndex
- dojo.removeClass(e.cellNode, this.cellActiveClass);
- dojo.removeClass(e.rowNode, this.rowActiveClass);
- },
- onCellClick: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onCellClick()
- //invoke dojox.grid._Events.onCellClick()
- this._events.onCellClick.call(this, e);
- //move mouse events to the focus manager.
- this.focus.contentMouseEvent(e);//TODO
- },
- onCellDblClick: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onCellDblClick()
- if(this.pluginMgr.isFixedCell(e.cell)){ return; }
- if(this._click.length > 1 && (!this._click[0] || !this._click[1])){
- this._click[0] = this._click[1] = e;
- }
- //invoke dojox.grid._Events.onCellDblClick()
- this._events.onCellDblClick.call(this, e);
- //now focus.setFocusCell need isEditing info, so call it after that is set.
- //this.focus.setFocusCell(e.cell, e.rowIndex);
- },
- onRowClick: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onRowClick()
- this.edit.rowClick(e);
- if(!e.cell || (!e.cell.isRowSelector && (!this.rowSelectCell || !this.rowSelectCell.disabled(e.rowIndex)))){
- this.selection.clickSelectEvent(e);
- }
- },
- onRowContextMenu: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onRowContextMenu()
- if(!this.edit.isEditing() && this.menus){
- this.showMenu(e);
- }
- },
- onSelectedRegionContextMenu: function(e){
- // summary:
- // New - Event fired when a selected region context menu is accessed via mouse right click.
- // e: Event
- // Decorated event object which contains reference to grid and info of selected
- // regions(selection type - row|column, selected index - [...])
- if(this.selectedRegionMenu){
- this.selectedRegionMenu._openMyself({
- target: e.target,
- coords: e.keyCode !== dojo.keys.F10 && "pageX" in e ? {
- x: e.pageX,
- y: e.pageY
- } : null
- });
- dojo.stopEvent(e);
- }
- },
- onHeaderCellMouseOut: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onHeaderCellMouseOut()
- if(e.cellNode){
- dojo.removeClass(e.cellNode, this.cellOverClass);
- dojo.removeClass(e.cellNode, this.headerCellActiveClass);
- }
- },
- onHeaderCellMouseDown: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onHeaderCellMouseDown()
- if(e.cellNode){//TBD - apply to selection region for nested sorting?
- dojo.addClass(e.cellNode, this.headerCellActiveClass);
- }
- },
- onHeaderCellMouseUp: function(e){
- // summary:
- // New event
- if(e.cellNode){
- dojo.removeClass(e.cellNode, this.headerCellActiveClass);
- }
- },
- onHeaderCellClick: function(e){
- // summary:
- // Overwritten, see dojox.grid._Events.onHeaderCellClick()
- //move focus to header.
- this.focus.currentArea("header");
- //invoke dojox.grid._Events.onHeaderCellClick()
- if(!e.cell.isRowSelector){
- this._events.onHeaderCellClick.call(this, e);
- }
- //move mouse events to the focus manager.
- this.focus.headerMouseEvent(e);
- },
- onRowSelectorMouseDown: function(e){
- this.focus.focusArea("rowHeader", e);
- },
-
- onRowSelectorMouseUp: function(e){},
-
- //triggered in _View, see Selector plugin
- onMouseUpRow: function(e){
- if(e.rowIndex != -1){
- this.onRowMouseUp(e);
- }
- },
- onRowMouseUp: function(e){}
- });
- }
|