X-Git-Url: http://git.ithinksw.org/extjs.git/blobdiff_plain/7a654f8d43fdb43d78b63d90528bed6e86b608cc..HEAD:/docs/source/CheckboxModel.html diff --git a/docs/source/CheckboxModel.html b/docs/source/CheckboxModel.html index 313eee3e..910dd3ae 100644 --- a/docs/source/CheckboxModel.html +++ b/docs/source/CheckboxModel.html @@ -1,4 +1,21 @@ -Sencha Documentation Project
/**
+
+
+
+  
+  The source code
+  
+  
+  
+  
+
+
+  
/**
  * @class Ext.selection.CheckboxModel
  * @extends Ext.selection.RowModel
  *
@@ -9,53 +26,86 @@
  * and according to the 'injectCheckbox' configuration.
  */
 Ext.define('Ext.selection.CheckboxModel', {
+    alias: 'selection.checkboxmodel',
     extend: 'Ext.selection.RowModel',
 
-    /**
+    /**
      * @cfg {String} mode
      * Modes of selection.
      * Valid values are SINGLE, SIMPLE, and MULTI. Defaults to 'MULTI'
      */
     mode: 'MULTI',
 
-    /**
-     * @cfg {Mixed} injectCheckbox
+    /**
+     * @cfg {Number/Boolean/String} injectCheckbox
      * Instructs the SelectionModel whether or not to inject the checkbox header
      * automatically or not. (Note: By not placing the checkbox in manually, the
      * grid view will need to be rendered 2x on initial render.)
      * Supported values are a Number index, false and the strings 'first' and 'last'.
-     * Default is 0.
      */
     injectCheckbox: 0,
 
-    /**
+    /**
      * @cfg {Boolean} checkOnly <tt>true</tt> if rows can only be selected by clicking on the
-     * checkbox column (defaults to <tt>false</tt>).
+     * checkbox column.
      */
     checkOnly: false,
 
+    headerWidth: 24,
+
     // private
     checkerOnCls: Ext.baseCSSPrefix + 'grid-hd-checker-on',
 
-    bindComponent: function() {
-        this.sortable = false;
-        this.callParent(arguments);
+    bindComponent: function(view) {
+        var me = this;
 
-        var view     = this.views[0],
+        me.sortable = false;
+        me.callParent(arguments);
+        if (!me.hasLockedHeader() || view.headerCt.lockedCt) {
+            // if we have a locked header, only hook up to the first
+            view.headerCt.on('headerclick', me.onHeaderClick, me);
+            me.addCheckbox(true);
+            me.mon(view.ownerCt, 'reconfigure', me.addCheckbox, me);
+        }
+    },
+
+    hasLockedHeader: function(){
+        var hasLocked = false;
+        Ext.each(this.views, function(view){
+            if (view.headerCt.lockedCt) {
+                hasLocked = true;
+                return false;
+            }
+        });
+        return hasLocked;
+    },
+
+    /**
+     * Add the header checkbox to the header row
+     * @private
+     * @param {Boolean} initial True if we're binding for the first time.
+     */
+    addCheckbox: function(initial){
+        var me = this,
+            checkbox = me.injectCheckbox,
+            view = me.views[0],
             headerCt = view.headerCt;
 
-        if (this.injectCheckbox !== false) {
-            if (this.injectCheckbox == 'first') {
-                this.injectCheckbox = 0;
-            } else if (this.injectCheckbox == 'last') {
-                this.injectCheckbox = headerCt.getColumnCount();
+        if (checkbox !== false) {
+            if (checkbox == 'first') {
+                checkbox = 0;
+            } else if (checkbox == 'last') {
+                checkbox = headerCt.getColumnCount();
             }
-            headerCt.add(this.injectCheckbox,  this.getHeaderConfig());
+            headerCt.add(checkbox,  me.getHeaderConfig());
+        }
+
+        if (initial !== true) {
+            view.refresh();
         }
-        headerCt.on('headerclick', this.onHeaderClick, this);
     },
 
-    /**
+    /**
      * Toggle the ui header between checked and unchecked state.
      * @param {Boolean} isChecked
      * @private
@@ -74,7 +124,7 @@ Ext.define('Ext.selection.CheckboxModel', {
         }
     },
 
-    /**
+    /**
      * Toggle between selecting all and deselecting all when clicking on
      * a checkbox header.
      */
@@ -92,26 +142,30 @@ Ext.define('Ext.selection.CheckboxModel', {
         }
     },
 
-    /**
+    /**
      * Retrieve a configuration to be used in a HeaderContainer.
      * This should be used when injectCheckbox is set to false.
      */
     getHeaderConfig: function() {
+        var me = this;
+
         return {
             isCheckerHd: true,
             text : '&#160;',
-            width: 24,
+            width: me.headerWidth,
             sortable: false,
-            fixed: true,
+            draggable: false,
+            resizable: false,
             hideable: false,
             menuDisabled: true,
             dataIndex: '',
             cls: Ext.baseCSSPrefix + 'column-header-checkbox ',
-            renderer: Ext.Function.bind(this.renderer, this)
+            renderer: Ext.Function.bind(me.renderer, me),
+            locked: me.hasLockedHeader()
         };
     },
 
-    /**
+    /**
      * Generates the HTML to be rendered in the injected checkbox column for each row.
      * Creates the standard checkbox markup by default; can be overridden to provide custom rendering.
      * See {@link Ext.grid.column.Column#renderer} for description of allowed parameters.
@@ -126,6 +180,10 @@ Ext.define('Ext.selection.CheckboxModel', {
         view.el.focus();
         var me = this,
             checker = e.getTarget('.' + Ext.baseCSSPrefix + 'grid-row-checker');
+            
+        if (!me.allowRightMouseSelection(e)) {
+            return;
+        }
 
         // checkOnly set, but we didn't click on a checker.
         if (me.checkOnly && !checker) {
@@ -146,15 +204,18 @@ Ext.define('Ext.selection.CheckboxModel', {
         }
     },
 
-    /**
+    /**
      * Synchronize header checker value as selection changes.
      * @private
      */
-    onSelectChange: function(record, isSelected) {
-        this.callParent([record, isSelected]);
+    onSelectChange: function() {
+        this.callParent(arguments);
+
         // check to see if all records are selected
         var hdSelectStatus = this.selected.getCount() === this.store.getCount();
         this.toggleUiHeader(hdSelectStatus);
     }
 });
-
\ No newline at end of file +
+ +