Upgrade to ExtJS 3.3.1 - Released 11/30/2010
[extjs.git] / docs / source / AbstractSelectionModel.html
index 3c40025..8b9dca6 100644 (file)
-<html>\r
-<head>\r
-  <title>The source code</title>\r
-    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
-    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
-</head>\r
-<body  onload="prettyPrint();">\r
-    <pre class="prettyprint lang-js"><div id="cls-Ext.grid.AbstractSelectionModel"></div>/**\r
- * @class Ext.grid.AbstractSelectionModel\r
- * @extends Ext.util.Observable\r
- * Abstract base class for grid SelectionModels.  It provides the interface that should be\r
- * implemented by descendant classes.  This class should not be directly instantiated.\r
- * @constructor\r
- */\r
-Ext.grid.AbstractSelectionModel = function(){\r
-    this.locked = false;\r
-    Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);\r
-};\r
-\r
-Ext.extend(Ext.grid.AbstractSelectionModel, Ext.util.Observable,  {\r
-    <div id="prop-Ext.grid.AbstractSelectionModel-grid"></div>/**\r
-     * The GridPanel for which this SelectionModel is handling selection. Read-only.\r
-     * @type Object\r
-     * @property grid\r
-     */\r
-\r
-    /** @ignore Called by the grid automatically. Do not call directly. */\r
-    init : function(grid){\r
-        this.grid = grid;\r
-        this.initEvents();\r
-    },\r
-\r
-    <div id="method-Ext.grid.AbstractSelectionModel-lock"></div>/**\r
-     * Locks the selections.\r
-     */\r
-    lock : function(){\r
-        this.locked = true;\r
-    },\r
-\r
-    <div id="method-Ext.grid.AbstractSelectionModel-unlock"></div>/**\r
-     * Unlocks the selections.\r
-     */\r
-    unlock : function(){\r
-        this.locked = false;\r
-    },\r
-\r
-    <div id="method-Ext.grid.AbstractSelectionModel-isLocked"></div>/**\r
-     * Returns true if the selections are locked.\r
-     * @return {Boolean}\r
-     */\r
-    isLocked : function(){\r
-        return this.locked;\r
-    },\r
-    \r
-    destroy: function(){\r
-        this.purgeListeners();\r
-    }\r
-});</pre>    \r
-</body>\r
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
+  <title>The source code</title>
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
+</head>
+<body  onload="prettyPrint();">
+    <pre class="prettyprint lang-js">/*!
+ * Ext JS Library 3.3.1
+ * Copyright(c) 2006-2010 Sencha Inc.
+ * licensing@sencha.com
+ * http://www.sencha.com/license
+ */
+<div id="cls-Ext.grid.AbstractSelectionModel"></div>/**
+ * @class Ext.grid.AbstractSelectionModel
+ * @extends Ext.util.Observable
+ * Abstract base class for grid SelectionModels.  It provides the interface that should be
+ * implemented by descendant classes.  This class should not be directly instantiated.
+ * @constructor
+ */
+Ext.grid.AbstractSelectionModel = Ext.extend(Ext.util.Observable,  {
+    <div id="prop-Ext.grid.AbstractSelectionModel-grid"></div>/**
+     * The GridPanel for which this SelectionModel is handling selection. Read-only.
+     * @type Object
+     * @property grid
+     */
+
+    constructor : function(){
+        this.locked = false;
+        Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);
+    },
+
+    /** @ignore Called by the grid automatically. Do not call directly. */
+    init : function(grid){
+        this.grid = grid;
+        if(this.lockOnInit){
+            delete this.lockOnInit;
+            this.locked = false;
+            this.lock();
+        }
+        this.initEvents();
+    },
+
+    <div id="method-Ext.grid.AbstractSelectionModel-lock"></div>/**
+     * Locks the selections.
+     */
+    lock : function(){
+        if(!this.locked){
+            this.locked = true;
+            // If the grid has been set, then the view is already initialized.
+            var g = this.grid;
+            if(g){
+                g.getView().on({
+                    scope: this,
+                    beforerefresh: this.sortUnLock,
+                    refresh: this.sortLock
+                });
+            }else{
+                this.lockOnInit = true;
+            }
+        }
+    },
+
+    // set the lock states before and after a view refresh
+    sortLock : function() {
+        this.locked = true;
+    },
+
+    // set the lock states before and after a view refresh
+    sortUnLock : function() {
+        this.locked = false;
+    },
+
+    <div id="method-Ext.grid.AbstractSelectionModel-unlock"></div>/**
+     * Unlocks the selections.
+     */
+    unlock : function(){
+        if(this.locked){
+            this.locked = false;
+            var g = this.grid,
+                gv;
+                
+            // If the grid has been set, then the view is already initialized.
+            if(g){
+                gv = g.getView();
+                gv.un('beforerefresh', this.sortUnLock, this);
+                gv.un('refresh', this.sortLock, this);    
+            }else{
+                delete this.lockOnInit;
+            }
+        }
+    },
+
+    <div id="method-Ext.grid.AbstractSelectionModel-isLocked"></div>/**
+     * Returns true if the selections are locked.
+     * @return {Boolean}
+     */
+    isLocked : function(){
+        return this.locked;
+    },
+
+    destroy: function(){
+        this.unlock();
+        this.purgeListeners();
+    }
+});</pre>    
+</body>
 </html>
\ No newline at end of file