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 '' +
+ '' + 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;
+ }
+ },
+ // 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
+
+
+