Index: dojo-release-1.3.2-src/dojox/grid/_CheckBoxSelector.js =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ dojo-release-1.3.2-src/dojox/grid/_CheckBoxSelector.js 2010-01-05 16:10:31.000000000 -0800 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2009, 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._CheckBoxSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.grid._CheckBoxSelector"] = true; +dojo.provide("dojox.grid._CheckBoxSelector"); + +dojo.require("dojox.grid._Selector"); + +} Index: dojo-release-1.3.2-src/dojox/grid/_RadioSelector.js =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ dojo-release-1.3.2-src/dojox/grid/_RadioSelector.js 2010-01-05 16:10:31.000000000 -0800 @@ -0,0 +1,14 @@ +/* + Copyright (c) 2004-2009, 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._RadioSelector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.grid._RadioSelector"] = true; +dojo.provide("dojox.grid._RadioSelector"); + +dojo.require("dojox.grid._Selector"); + +} Index: dojo-release-1.3.2-src/dojox/grid/_Selector.js =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ dojo-release-1.3.2-src/dojox/grid/_Selector.js 2009-12-07 07:58:11.000000000 -0800 @@ -0,0 +1,227 @@ +/* + Copyright (c) 2004-2009, 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._Selector"]){ //_hasResource checks added by build. Do not use _hasResource directly in your code. +dojo._hasResource["dojox.grid._Selector"] = true; +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 '
' + + '
'; + }, + 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 '' + + ''; + }, + 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; + } + }, + // styling + doStyleRowNode: function(inRowIndex, inRowNode){ + var n = [ "dojoxGridRowbar dojoxGridNonNormalizedCell" ]; + if(this.grid.rows.isOver(inRowIndex)){ + n.push("dojoxGridRowbarOver"); + } + if(this.grid.selection.isSelected(inRowIndex)){ + n.push("dojoxGridRowbarSelected"); + } + inRowNode.className = n.join(" "); + }, + // event handlers + onSelected: function(inIndex){ + this.grid.updateRow(inIndex); + }, + onDeselected: function(inIndex){ + this.grid.updateRow(inIndex); + } + }); + if(!dojox.grid._View.prototype._headerBuilderClass && + !dojox.grid._View.prototype._contentBuilderClass){ + dojox.grid._Selector.prototype.postCreate = function(){ + this.connect(this.scrollboxNode,"onscroll","doscroll"); + dojox.grid.util.funnelEvents(this.contentNode, this, "doContentEvent", [ 'mouseover', 'mouseout', 'click', 'dblclick', 'contextmenu', 'mousedown' ]); + dojox.grid.util.funnelEvents(this.headerNode, this, "doHeaderEvent", [ 'dblclick', 'mouseover', 'mouseout', 'mousemove', 'mousedown', 'click', 'contextmenu' ]); + if(this._contentBuilderClass){ + this.content = new this._contentBuilderClass(this); + }else{ + this.content = new dojox.grid._ContentBuilder(this); + } + if(this._headerBuilderClass){ + this.header = new this._headerBuilderClass(this); + }else{ + this.header = new dojox.grid._HeaderBuilder(this); + } + //BiDi: in RTL case, style width='9000em' causes scrolling problem in head node + if(!dojo._isBodyLtr()){ + this.headerNodeContainer.style.width = ""; + } + this.connect(this.grid.selection, 'onSelected', 'onSelected'); + this.connect(this.grid.selection, 'onDeselected', 'onDeselected'); + }; + } + + dojo.declare("dojox.grid._RadioSelector", dojox.grid._Selector, { + inputType: 'radio', + selectionMode: 'single', + + _contentBuilderClass: dojox.grid._InputSelectorContentBuilder, + + buildRendering: function(){ + this.inherited(arguments); + this.headerNode.style.visibility = "hidden"; + }, + + renderHeader: function(){} + }); + + dojo.declare("dojox.grid._CheckBoxSelector", dojox.grid._Selector, { + inputType: 'checkbox', + _headerBuilderClass: dojox.grid._InputSelectorHeaderBuilder, + _contentBuilderClass: dojox.grid._InputSelectorContentBuilder, + postCreate: function(){ + this.inherited(arguments); + this.connect(this.grid, 'onSelectionChanged', 'onSelectionChanged'); + this.connect(this.grid, 'updateRowCount', '_updateVisibility'); + }, + renderHeader: function(){ + this.inherited(arguments); + this._updateVisibility(this.grid.rowCount); + }, + _updateVisibility: function(rowCount){ + this.headerNode.style.visibility = rowCount ? "" : "hidden"; + }, + onSelectionChanged: function(){ + if(this._selectionChanging){ return; } + var inputDiv = dojo.query('.dojoxGridCheckSelector', this.headerNode)[0]; + var g = this.grid; + var s = (g.rowCount && g.rowCount == g.selection.getSelectedCount()); + g.allItemsSelected = s||false; + dojo.toggleClass(inputDiv, "dijitChecked", g.allItemsSelected); + dojo.toggleClass(inputDiv, "dijitCheckBoxChecked", g.allItemsSelected); + } + }); +})(); + +} Index: dojo-release-1.3.2-src/dojox/grid/tests/test_grid_selectors.html =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ dojo-release-1.3.2-src/dojox/grid/tests/test_grid_selectors.html 2009-12-07 07:56:47.000000000 -0800 @@ -0,0 +1,85 @@ + + + + Test dojox.grid.Grid Basic + + + + + + + + +
dojox.grid.Grid CheckBox Selector
+
+
dojox.grid.Grid Radio Selector
+
+
dojox.grid.Grid CheckBox Selector - no data
+
+ +