/*!
- * Ext JS Library 3.1.0
- * Copyright(c) 2006-2009 Ext JS, LLC
+ * Ext JS Library 3.2.2
+ * Copyright(c) 2006-2010 Ext JS, Inc.
* licensing@extjs.com
* http://www.extjs.com/license
*/
-/**\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 = Ext.extend(Ext.util.Observable, {\r
- /**\r
- * The GridPanel for which this SelectionModel is handling selection. Read-only.\r
- * @type Object\r
- * @property grid\r
- */\r
- \r
- constructor : function(){\r
- this.locked = false;\r
- Ext.grid.AbstractSelectionModel.superclass.constructor.call(this);\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
- /**\r
- * Locks the selections.\r
- */\r
- lock : function(){\r
- this.locked = true;\r
- },\r
-\r
- /**\r
- * Unlocks the selections.\r
- */\r
- unlock : function(){\r
- this.locked = false;\r
- },\r
-\r
- /**\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
+/**
+ * @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, {
+ /**
+ * 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();
+ },
+
+ /**
+ * 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;
+ },
+
+ /**
+ * 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;
+ }
+ }
+ },
+
+ /**
+ * Returns true if the selections are locked.
+ * @return {Boolean}
+ */
+ isLocked : function(){
+ return this.locked;
+ },
+
+ destroy: function(){
+ this.unlock();
+ this.purgeListeners();
+ }
});
\ No newline at end of file