dojo.provide("dojox.grid._Selector");
dojo.require("dojox.grid.Selection");
dojo.require("dojox.grid._View");
dojo.require("dojox.grid._Builder");
(function(){
dojox.grid._InputSelectorHeaderBuilder = dojo.extend(function(view){
dojox.grid._HeaderBuilder.call(this, view);
},dojox.grid._HeaderBuilder.prototype,{
generateHtml: function(){
var w = this.view.contentWidth || 0;
var selectedCount = this.view.grid.selection.getSelectedCount();
var checked = (selectedCount && selectedCount == this.view.grid.rowCount) ? ' dijitCheckBoxChecked dijitChecked' : '';
return '
'border="0" cellspacing="0" cellpadding="0" ' +
'role="presentation">' + ' |
---|
';
},
doclick: function(e){
var selectedCount = this.view.grid.selection.getSelectedCount();
this.view._selectionChanging = true;
if(selectedCount==this.view.grid.rowCount){
this.view.grid.selection.deselectAll();
}else{
this.view.grid.selection.selectRange(0, this.view.grid.rowCount-1);
}
this.view._selectionChanging = false;
this.view.onSelectionChanged();
return true;
}
});
dojox.grid._SelectorContentBuilder = dojo.extend(function(view){
dojox.grid._ContentBuilder.call(this, view);
},dojox.grid._ContentBuilder.prototype,{
generateHtml: function(inDataIndex, inRowIndex){
var w = this.view.contentWidth || 0;
return '
'cellspacing="0" cellpadding="0" role="presentation">' +
'' + this.getCellContent(inRowIndex) + ' |
';
},
getCellContent: function(inRowIndex){
return ' ';
},
findTarget: function(){
var t = dojox.grid._ContentBuilder.prototype.findTarget.apply(this, arguments);
return t;
},
domouseover: function(e){
this.view.grid.onMouseOverRow(e);
},
domouseout: function(e){
if(!this.isIntraRowEvent(e)){
this.view.grid.onMouseOutRow(e);
}
},
doclick: function(e){
var idx = e.rowIndex;
var selected = this.view.grid.selection.isSelected(idx);
var mode = this.view.grid.selection.mode;
if(!selected){
if(mode == 'single'){
this.view.grid.selection.select(idx);
}else if(mode != 'none'){
this.view.grid.selection.addToSelection(idx);
}
}else{
this.view.grid.selection.deselect(idx);
}
return true;
}
});
dojox.grid._InputSelectorContentBuilder = dojo.extend(function(view){
dojox.grid._SelectorContentBuilder.call(this, view);
},dojox.grid._SelectorContentBuilder.prototype,{
getCellContent: function(rowIndex){
var v = this.view;
var type = v.inputType == "checkbox" ? "CheckBox" : "Radio";
var checked = !!v.grid.selection.isSelected(rowIndex) ? ' dijit' + type + 'Checked dijitChecked' : '';
return '
';
}
});
dojo.declare("dojox.grid._Selector", dojox.grid._View, {
inputType: '',
selectionMode: '',
// summary:
// Custom grid view. If used in a grid structure, provides a small selectable region for grid rows.
defaultWidth: "2em",
noscroll: true,
padBorderWidth: 2,
_contentBuilderClass: dojox.grid._SelectorContentBuilder,
postCreate: function(){
this.inherited(arguments);
if(this.selectionMode){
this.grid.selection.mode = this.selectionMode;
}
this.connect(this.grid.selection, 'onSelected', 'onSelected');
this.connect(this.grid.selection, 'onDeselected', 'onDeselected');
},
buildRendering: function(){
this.inherited(arguments);
this.scrollboxNode.style.overflow = "hidden";
},
getWidth: function(){
return this.viewWidth || this.defaultWidth;
},
resize: function(){
this.adaptHeight();
},
setStructure: function(s){
this.inherited(arguments);
if(s.defaultWidth){
this.defaultWidth = s.defaultWidth;
}
},
adaptWidth: function(){
// Only calculate this here - rather than every call to buildRowContent
if(!("contentWidth" in this) && this.contentNode){
this.contentWidth = this.contentNode.offsetWidth - this.padBorderWidth;
}