X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/c930e9176a5a85509c5b0230e2bff5c22a591432..7a654f8d43fdb43d78b63d90528bed6e86b608cc:/examples/ux/CheckColumn.js diff --git a/examples/ux/CheckColumn.js b/examples/ux/CheckColumn.js index e5827ba5..bbe3421c 100644 --- a/examples/ux/CheckColumn.js +++ b/examples/ux/CheckColumn.js @@ -1,80 +1,77 @@ -/*! - * Ext JS Library 3.0.0 - * Copyright(c) 2006-2009 Ext JS, LLC - * licensing@extjs.com - * http://www.extjs.com/license +/** + * @class Ext.ux.CheckColumn + * @extends Ext.grid.column.Column + *

A Header subclass which renders a checkbox in each column cell which toggles the truthiness of the associated data field on click.

+ *

Note. As of ExtJS 3.3 this no longer has to be configured as a plugin of the GridPanel.

+ *

Example usage:

+ *

+// create the grid
+var grid = Ext.create('Ext.grid.Panel', {
+    ...
+    columns: [{
+           text: 'Foo',
+           ...
+        },{
+           xtype: 'checkcolumn',
+           text: 'Indoor?',
+           dataIndex: 'indoor',
+           width: 55
+        }
+    ]
+    ...
+});
+ * 
+ * In addition to toggling a Boolean value within the record data, this + * class adds or removes a css class 'x-grid-checked' on the td + * based on whether or not it is checked to alter the background image used + * for a column. */ -Ext.ns('Ext.ux.grid'); - -/** - * @class Ext.ux.grid.CheckColumn - * @extends Object - * GridPanel plugin to add a column with check boxes to a grid. - *

Example usage:

- *

-// create the column
-var checkColumn = new Ext.grid.CheckColumn({
-   header: 'Indoor?',
-   dataIndex: 'indoor',
-   id: 'check',
-   width: 55
-});
-
-// add the column to the column model
-var cm = new Ext.grid.ColumnModel([{
-       header: 'Foo',
-       ...
-    },
-    checkColumn
-]);
-
-// create the grid
-var grid = new Ext.grid.EditorGridPanel({
-    ...
-    cm: cm,
-    plugins: [checkColumn], // include plugin
-    ...
-});
- * 
- * In addition to storing a Boolean value within the record data, this - * class toggles a css class between 'x-grid3-check-col' and - * 'x-grid3-check-col-on' to alter the background image used for - * a column. - */ -Ext.ux.grid.CheckColumn = function(config){ - Ext.apply(this, config); - if(!this.id){ - this.id = Ext.id(); - } - this.renderer = this.renderer.createDelegate(this); -}; - -Ext.ux.grid.CheckColumn.prototype ={ - init : function(grid){ - this.grid = grid; - this.grid.on('render', function(){ - var view = this.grid.getView(); - view.mainBody.on('mousedown', this.onMouseDown, this); - }, this); - }, - - onMouseDown : function(e, t){ - if(t.className && t.className.indexOf('x-grid3-cc-'+this.id) != -1){ - e.stopEvent(); - var index = this.grid.getView().findRowIndex(t); - var record = this.grid.store.getAt(index); - record.set(this.dataIndex, !record.data[this.dataIndex]); - } - }, - - renderer : function(v, p, record){ - p.css += ' x-grid3-check-col-td'; - return '
 
'; - } -}; - -// register ptype -Ext.preg('checkcolumn', Ext.ux.grid.CheckColumn); - -// backwards compat -Ext.grid.CheckColumn = Ext.ux.grid.CheckColumn; \ No newline at end of file +Ext.define('Ext.ux.CheckColumn', { + extend: 'Ext.grid.column.Column', + alias: 'widget.checkcolumn', + + constructor: function() { + this.addEvents( + /** + * @event checkchange + * Fires when the checked state of a row changes + * @param {Ext.ux.CheckColumn} this + * @param {Number} rowIndex The row index + * @param {Boolean} checked True if the box is checked + */ + 'checkchange' + ); + this.callParent(arguments); + }, + + /** + * @private + * Process and refire events routed from the GridView's processEvent method. + */ + processEvent: function(type, view, cell, recordIndex, cellIndex, e) { + if (type == 'mousedown' || (type == 'keydown' && (e.getKey() == e.ENTER || e.getKey() == e.SPACE))) { + var record = view.panel.store.getAt(recordIndex), + dataIndex = this.dataIndex, + checked = !record.get(dataIndex); + + record.set(dataIndex, checked); + this.fireEvent('checkchange', this, recordIndex, checked); + // cancel selection. + return false; + } else { + return this.callParent(arguments); + } + }, + + // Note: class names are not placed on the prototype bc renderer scope + // is not in the header. + renderer : function(value){ + var cssPrefix = Ext.baseCSSPrefix, + cls = [cssPrefix + 'grid-checkheader']; + + if (value) { + cls.push(cssPrefix + 'grid-checkheader-checked'); + } + return '
 
'; + } +});