You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
6.1 KiB
215 lines
6.1 KiB
define([ |
|
"dojo/_base/kernel", |
|
"dojo/_base/declare", |
|
"dojo/keys", |
|
"dojo/_base/html", |
|
"dojo/_base/event", |
|
"dojox/grid/_Events" |
|
], function(dojo, declare, keys, html, event, _Events){ |
|
|
|
return 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){ |
|
//TODO - extend dojox.grid._Events rather than mixin for 1.8 |
|
this._events = new _Events(); |
|
//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 focus = this.focus; |
|
var editing = this.edit.isEditing(); |
|
switch(e.keyCode){ |
|
case keys.TAB: |
|
if(e.ctrlKey){ return; } |
|
focus.tab(e.shiftKey ? -1:1,e); |
|
break; |
|
case keys.UP_ARROW: |
|
case keys.DOWN_ARROW: |
|
if(editing){ return; } |
|
focus.currentArea().move(e.keyCode == keys.UP_ARROW ? -1 : 1, 0, e); |
|
break; |
|
case keys.LEFT_ARROW: |
|
case keys.RIGHT_ARROW: |
|
if(editing){ return; } |
|
var offset = (e.keyCode == keys.LEFT_ARROW) ? 1 : -1; |
|
if(html._isBodyLtr()){ offset *= -1; } |
|
focus.currentArea().move(0, offset, e); |
|
break; |
|
case keys.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() |
|
html.addClass(e.cellNode, this.cellActiveClass); |
|
html.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 |
|
html.removeClass(e.cellNode, this.cellActiveClass); |
|
html.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); |
|
}, |
|
onRowClick: function(e){ |
|
// summary: |
|
// Overwritten, see dojox.grid._Events.onRowClick() |
|
this.edit.rowClick(e); |
|
if(!e.cell || !this.plugin('indirectSelection')){ |
|
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 !== keys.F10 && "pageX" in e ? { |
|
x: e.pageX, |
|
y: e.pageY |
|
} : null |
|
}); |
|
event.stop(e); |
|
} |
|
}, |
|
onHeaderCellMouseOut: function(e){ |
|
// summary: |
|
// Overwritten, see dojox.grid._Events.onHeaderCellMouseOut() |
|
if(e.cellNode){ |
|
html.removeClass(e.cellNode, this.cellOverClass); |
|
html.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? |
|
html.addClass(e.cellNode, this.headerCellActiveClass); |
|
} |
|
}, |
|
onHeaderCellMouseUp: function(e){ |
|
// summary: |
|
// New event |
|
if(e.cellNode){ |
|
html.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){} |
|
}); |
|
}); |