Upgrade to ExtJS 3.0.3 - Released 10/11/2009
[extjs.git] / pkgs / data-list-views-debug.js
index ec0ac8e..639e95c 100644 (file)
@@ -1,5 +1,5 @@
 /*!
- * Ext JS Library 3.0.0
+ * Ext JS Library 3.0.3
  * Copyright(c) 2006-2009 Ext JS, LLC
  * licensing@extjs.com
  * http://www.extjs.com/license
@@ -317,16 +317,18 @@ Ext.DataView = Ext.extend(Ext.BoxComponent, {
     // private
     onUpdate : function(ds, record){
         var index = this.store.indexOf(record);
-        var sel = this.isSelected(index);
-        var original = this.all.elements[index];
-        var node = this.bufferRender([record], index)[0];
+        if(index > -1){
+            var sel = this.isSelected(index);
+            var original = this.all.elements[index];
+            var node = this.bufferRender([record], index)[0];
 
-        this.all.replaceElement(index, node, true);
-        if(sel){
-            this.selected.replaceElement(original, node);
-            this.all.item(index).addClass(this.selectedClass);
+            this.all.replaceElement(index, node, true);
+            if(sel){
+                this.selected.replaceElement(original, node);
+                this.all.item(index).addClass(this.selectedClass);
+            }
+            this.updateIndexes(index, index);
         }
-        this.updateIndexes(index, index);
     },
 
     // private
@@ -388,14 +390,18 @@ Ext.DataView = Ext.extend(Ext.BoxComponent, {
      */
     bindStore : function(store, initial){
         if(!initial && this.store){
-            this.store.un("beforeload", this.onBeforeLoad, this);
-            this.store.un("datachanged", this.refresh, this);
-            this.store.un("add", this.onAdd, this);
-            this.store.un("remove", this.onRemove, this);
-            this.store.un("update", this.onUpdate, this);
-            this.store.un("clear", this.refresh, this);
             if(store !== this.store && this.store.autoDestroy){
                 this.store.destroy();
+            }else{
+                this.store.un("beforeload", this.onBeforeLoad, this);
+                this.store.un("datachanged", this.refresh, this);
+                this.store.un("add", this.onAdd, this);
+                this.store.un("remove", this.onRemove, this);
+                this.store.un("update", this.onUpdate, this);
+                this.store.un("clear", this.refresh, this);
+            }
+            if(!store){
+                this.store = null;
             }
         }
         if(store){
@@ -880,9 +886,10 @@ Ext.ListView = Ext.extend(Ext.DataView, {
      */\r
     /**\r
      * @cfg {Number} scrollOffset The amount of space to reserve for the scrollbar (defaults to\r
-     * <tt>19</tt> pixels)\r
+     * <tt>undefined</tt>). If an explicit value isn't specified, this will be automatically\r
+     * calculated.\r
      */\r
-    scrollOffset : 19,\r
+    scrollOffset : undefined,\r
     /**\r
      * @cfg {Boolean/Object} columnResize\r
      * Specify <tt>true</tt> or specify a configuration object for {@link Ext.ListView.ColumnResizer}\r
@@ -930,6 +937,11 @@ Ext.ListView = Ext.extend(Ext.DataView, {
      * The template to be used for the header row.  See {@link #tpl} for more details.\r
      */\r
 \r
+    /*\r
+     * IE has issues when setting percentage based widths to 100%. Default to 99.\r
+     */\r
+    maxWidth: Ext.isIE ? 99 : 100,\r
+    \r
     initComponent : function(){\r
         if(this.columnResize){\r
             this.colResizer = new Ext.ListView.ColumnResizer(this.colResizer);\r
@@ -967,9 +979,13 @@ Ext.ListView = Ext.extend(Ext.DataView, {
                 '</tpl>'\r
             );\r
         };\r
-        var cs = this.columns, allocatedWidth = 0, colsWithWidth = 0, len = cs.length;\r
+        var cs = this.columns, \r
+            allocatedWidth = 0, \r
+            colsWithWidth = 0, \r
+            len = cs.length, \r
+            columns = [];\r
         for(var i = 0; i < len; i++){\r
-            var c = cs[i];\r
+            var c = Ext.apply({}, cs[i]);\r
             if(!c.tpl){\r
                 c.tpl = new Ext.XTemplate('{' + c.dataIndex + '}');\r
             }else if(Ext.isString(c.tpl)){\r
@@ -981,12 +997,14 @@ Ext.ListView = Ext.extend(Ext.DataView, {
                 allocatedWidth += c.width;\r
                 colsWithWidth++;\r
             }\r
+            columns.push(c);\r
         }\r
+        cs = this.columns = columns;\r
         // auto calculate missing column widths\r
         if(colsWithWidth < len){\r
             var remaining = len - colsWithWidth;\r
-            if(allocatedWidth < 100){\r
-                var perCol = ((100-allocatedWidth) / remaining);\r
+            if(allocatedWidth < this.maxWidth){\r
+                var perCol = ((this.maxWidth-allocatedWidth) / remaining);\r
                 for(var j = 0; j < len; j++){\r
                     var c = cs[j];\r
                     if(!Ext.isNumber(c.width)){\r
@@ -999,6 +1017,9 @@ Ext.ListView = Ext.extend(Ext.DataView, {
     },\r
 \r
     onRender : function(){\r
+        this.autoEl = {\r
+            cls: 'x-list-wrap'  \r
+        };\r
         Ext.ListView.superclass.onRender.apply(this, arguments);\r
 \r
         this.internalTpl.overwrite(this.el, {columns: this.columns});\r
@@ -1052,7 +1073,7 @@ Ext.ListView = Ext.extend(Ext.DataView, {
         }\r
         var bdp = bd.parentNode;\r
         if(Ext.isNumber(w)){\r
-            var sw = w - this.scrollOffset;\r
+            var sw = w - Ext.num(this.scrollOffset, Ext.getScrollBarWidth());\r
             if(this.reserveScrollOffset || ((bdp.offsetWidth - bdp.clientWidth) > 10)){\r
                 bd.style.width = sw + 'px';\r
                 hd.style.width = sw + 'px';\r
@@ -1067,7 +1088,7 @@ Ext.ListView = Ext.extend(Ext.DataView, {
                 }, 10);\r
             }\r
         }\r
-        if(Ext.isNumber(h == 'number')){\r
+        if(Ext.isNumber(h)){\r
             bdp.style.height = (h - hd.parentNode.offsetHeight) + 'px';\r
         }\r
     },\r
@@ -1133,13 +1154,13 @@ Ext.ListView.ColumnResizer = Ext.extend(Ext.util.Observable, {
     },\r
 \r
     handleHdMove : function(e, t){\r
-        var hw = 5;\r
-        var x = e.getPageX();\r
-        var hd = e.getTarget('em', 3, true);\r
+        var hw = 5,\r
+            x = e.getPageX(),\r
+            hd = e.getTarget('em', 3, true);\r
         if(hd){\r
-            var r = hd.getRegion();\r
-            var ss = hd.dom.style;\r
-            var pn = hd.dom.parentNode;\r
+            var r = hd.getRegion(),\r
+                ss = hd.dom.style,\r
+                pn = hd.dom.parentNode;\r
 \r
             if(x - r.left <= hw && pn != pn.parentNode.firstChild){\r
                 this.activeHd = Ext.get(pn.previousSibling.firstChild);\r
@@ -1164,8 +1185,8 @@ Ext.ListView.ColumnResizer = Ext.extend(Ext.util.Observable, {
         this.proxy = this.view.el.createChild({cls:'x-list-resizer'});\r
         this.proxy.setHeight(this.view.el.getHeight());\r
 \r
-        var x = this.tracker.getXY()[0];\r
-        var w = this.view.innerHd.getWidth();\r
+        var x = this.tracker.getXY()[0],\r
+            w = this.view.innerHd.getWidth();\r
 \r
         this.hdX = this.dragHd.getX();\r
         this.hdIndex = this.view.findHeaderIndex(this.dragHd);\r
@@ -1186,18 +1207,20 @@ Ext.ListView.ColumnResizer = Ext.extend(Ext.util.Observable, {
         var nw = this.proxy.getWidth();\r
         this.proxy.remove();\r
 \r
-        var index = this.hdIndex;\r
-        var vw = this.view, cs = vw.columns, len = cs.length;\r
-        var w = this.view.innerHd.getWidth(), minPct = this.minPct * 100;\r
-\r
-        var pct = Math.ceil((nw*100) / w);\r
-        var diff = cs[index].width - pct;\r
-        var each = Math.floor(diff / (len-1-index));\r
-        var mod = diff - (each * (len-1-index));\r
+        var index = this.hdIndex,\r
+            vw = this.view, \r
+            cs = vw.columns, \r
+            len = cs.length,\r
+            w = this.view.innerHd.getWidth(), \r
+            minPct = this.minPct * 100;\r
+            pct = Math.ceil((nw * vw.maxWidth) / w),\r
+            diff = cs[index].width - pct,\r
+            each = Math.floor(diff / (len-1-index)),\r
+            mod = diff - (each * (len-1-index));\r
 \r
         for(var i = index+1; i < len; i++){\r
-            var cw = cs[i].width + each;\r
-            var ncw = Math.max(minPct, cw);\r
+            var cw = cs[i].width + each,\r
+                ncw = Math.max(minPct, cw);\r
             if(cw != ncw){\r
                 mod += cw - ncw;\r
             }\r
@@ -1206,8 +1229,8 @@ Ext.ListView.ColumnResizer = Ext.extend(Ext.util.Observable, {
         cs[index].width = pct;\r
         cs[index+1].width += mod;\r
         delete this.dragHd;\r
-        this.view.setHdWidths();\r
-        this.view.refresh();\r
+        vw.setHdWidths();\r
+        vw.refresh();\r
         setTimeout(function(){\r
             vw.disableHeaders = false;\r
         }, 100);\r