/*!
- * 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
// 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
*/
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){
*/\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
* 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
'</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
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
},\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
}\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
}, 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
},\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
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
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
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