123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 |
- /*
- 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._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 '<table style="width:' + w + 'px;" ' +
- 'border="0" cellspacing="0" cellpadding="0" ' +
- 'role="presentation"><tr><th style="text-align: center;">' +
- '<div class="dojoxGridCheckSelector dijitReset dijitInline dijitCheckBox' + checked + '"></div></th></tr></table>';
- },
- 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 '<table class="dojoxGridRowbarTable" style="width:' + w + 'px;" border="0" ' +
- 'cellspacing="0" cellpadding="0" role="presentation"><tr>' +
- '<td style="text-align: center;" class="dojoxGridRowbarInner">' + this.getCellContent(inRowIndex) + '</td></tr></table>';
- },
- 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 '<div class="dojoxGridCheckSelector dijitReset dijitInline dijit' + type + checked + '"></div>';
- }
- });
- 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);
- }
- });
- })();
- }
|