Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / examples / docs / source / LockingGridView.html
diff --git a/examples/docs/source/LockingGridView.html b/examples/docs/source/LockingGridView.html
deleted file mode 100644 (file)
index d147d18..0000000
+++ /dev/null
@@ -1,943 +0,0 @@
-<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.0
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-/*!
- * Ext JS Library 3.3.0
- * Copyright(c) 2006-2010 Ext JS, Inc.
- * licensing@extjs.com
- * http://www.extjs.com/license
- */
-Ext.ns('Ext.ux.grid');
-
-Ext.ux.grid.LockingGridView = Ext.extend(Ext.grid.GridView, {
-    lockText : 'Lock',
-    unlockText : 'Unlock',
-    rowBorderWidth : 1,
-    lockedBorderWidth : 1,
-
-    /*
-     * This option ensures that height between the rows is synchronized
-     * between the locked and unlocked sides. This option only needs to be used
-     * when the row heights aren't predictable.
-     */
-    syncHeights: false,
-
-    initTemplates : function(){
-        var ts = this.templates || {};
-
-        if (!ts.masterTpl) {
-            ts.masterTpl = new Ext.Template(
-                '<div class="x-grid3" hidefocus="true">',
-                    '<div class="x-grid3-locked">',
-                        '<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset" style="{lstyle}">{lockedHeader}</div></div><div class="x-clear"></div></div>',
-                        '<div class="x-grid3-scroller"><div class="x-grid3-body" style="{lstyle}">{lockedBody}</div><div class="x-grid3-scroll-spacer"></div></div>',
-                    '</div>',
-                    '<div class="x-grid3-viewport x-grid3-unlocked">',
-                        '<div class="x-grid3-header"><div class="x-grid3-header-inner"><div class="x-grid3-header-offset" style="{ostyle}">{header}</div></div><div class="x-clear"></div></div>',
-                        '<div class="x-grid3-scroller"><div class="x-grid3-body" style="{bstyle}">{body}</div><a href="#" class="x-grid3-focus" tabIndex="-1"></a></div>',
-                    '</div>',
-                    '<div class="x-grid3-resize-marker">&#160;</div>',
-                    '<div class="x-grid3-resize-proxy">&#160;</div>',
-                '</div>'
-            );
-        }
-
-        this.templates = ts;
-
-        Ext.ux.grid.LockingGridView.superclass.initTemplates.call(this);
-    },
-
-    getEditorParent : function(ed){
-        return this.el.dom;
-    },
-
-    initElements : function(){
-        var el             = Ext.get(this.grid.getGridEl().dom.firstChild),
-            lockedWrap     = el.child('div.x-grid3-locked'),
-            lockedHd       = lockedWrap.child('div.x-grid3-header'),
-            lockedScroller = lockedWrap.child('div.x-grid3-scroller'),
-            mainWrap       = el.child('div.x-grid3-viewport'),
-            mainHd         = mainWrap.child('div.x-grid3-header'),
-            scroller       = mainWrap.child('div.x-grid3-scroller');
-            
-        if (this.grid.hideHeaders) {
-            lockedHd.setDisplayed(false);
-            mainHd.setDisplayed(false);
-        }
-        
-        if(this.forceFit){
-            scroller.setStyle('overflow-x', 'hidden');
-        }
-        
-        Ext.apply(this, {
-            el      : el,
-            mainWrap: mainWrap,
-            mainHd  : mainHd,
-            innerHd : mainHd.dom.firstChild,
-            scroller: scroller,
-            mainBody: scroller.child('div.x-grid3-body'),
-            focusEl : scroller.child('a'),
-            resizeMarker: el.child('div.x-grid3-resize-marker'),
-            resizeProxy : el.child('div.x-grid3-resize-proxy'),
-            lockedWrap: lockedWrap,
-            lockedHd: lockedHd,
-            lockedScroller: lockedScroller,
-            lockedBody: lockedScroller.child('div.x-grid3-body'),
-            lockedInnerHd: lockedHd.child('div.x-grid3-header-inner', true)
-        });
-        
-        this.focusEl.swallowEvent('click', true);
-    },
-
-    getLockedRows : function(){
-        return this.hasRows() ? this.lockedBody.dom.childNodes : [];
-    },
-
-    getLockedRow : function(row){
-        return this.getLockedRows()[row];
-    },
-
-    getCell : function(row, col){
-        var lockedLen = this.cm.getLockedCount();
-        if(col < lockedLen){
-            return this.getLockedRow(row).getElementsByTagName('td')[col];
-        }
-        return Ext.ux.grid.LockingGridView.superclass.getCell.call(this, row, col - lockedLen);
-    },
-
-    getHeaderCell : function(index){
-        var lockedLen = this.cm.getLockedCount();
-        if(index < lockedLen){
-            return this.lockedHd.dom.getElementsByTagName('td')[index];
-        }
-        return Ext.ux.grid.LockingGridView.superclass.getHeaderCell.call(this, index - lockedLen);
-    },
-
-    addRowClass : function(row, cls){
-        var lockedRow = this.getLockedRow(row);
-        if(lockedRow){
-            this.fly(lockedRow).addClass(cls);
-        }
-        Ext.ux.grid.LockingGridView.superclass.addRowClass.call(this, row, cls);
-    },
-
-    removeRowClass : function(row, cls){
-        var lockedRow = this.getLockedRow(row);
-        if(lockedRow){
-            this.fly(lockedRow).removeClass(cls);
-        }
-        Ext.ux.grid.LockingGridView.superclass.removeRowClass.call(this, row, cls);
-    },
-
-    removeRow : function(row) {
-        Ext.removeNode(this.getLockedRow(row));
-        Ext.ux.grid.LockingGridView.superclass.removeRow.call(this, row);
-    },
-
-    removeRows : function(firstRow, lastRow){
-        var lockedBody = this.lockedBody.dom,
-            rowIndex = firstRow;
-        for(; rowIndex <= lastRow; rowIndex++){
-            Ext.removeNode(lockedBody.childNodes[firstRow]);
-        }
-        Ext.ux.grid.LockingGridView.superclass.removeRows.call(this, firstRow, lastRow);
-    },
-
-    syncScroll : function(e){
-        this.lockedScroller.dom.scrollTop = this.scroller.dom.scrollTop;
-        Ext.ux.grid.LockingGridView.superclass.syncScroll.call(this, e);
-    },
-
-    updateSortIcon : function(col, dir){
-        var sortClasses = this.sortClasses,
-            lockedHeaders = this.lockedHd.select('td').removeClass(sortClasses),
-            headers = this.mainHd.select('td').removeClass(sortClasses),
-            lockedLen = this.cm.getLockedCount(),
-            cls = sortClasses[dir == 'DESC' ? 1 : 0];
-            
-        if(col < lockedLen){
-            lockedHeaders.item(col).addClass(cls);
-        }else{
-            headers.item(col - lockedLen).addClass(cls);
-        }
-    },
-
-    updateAllColumnWidths : function(){
-        var tw = this.getTotalWidth(),
-            clen = this.cm.getColumnCount(),
-            lw = this.getLockedWidth(),
-            llen = this.cm.getLockedCount(),
-            ws = [], len, i;
-        this.updateLockedWidth();
-        for(i = 0; i < clen; i++){
-            ws[i] = this.getColumnWidth(i);
-            var hd = this.getHeaderCell(i);
-            hd.style.width = ws[i];
-        }
-        var lns = this.getLockedRows(), ns = this.getRows(), row, trow, j;
-        for(i = 0, len = ns.length; i < len; i++){
-            row = lns[i];
-            row.style.width = lw;
-            if(row.firstChild){
-                row.firstChild.style.width = lw;
-                trow = row.firstChild.rows[0];
-                for (j = 0; j < llen; j++) {
-                   trow.childNodes[j].style.width = ws[j];
-                }
-            }
-            row = ns[i];
-            row.style.width = tw;
-            if(row.firstChild){
-                row.firstChild.style.width = tw;
-                trow = row.firstChild.rows[0];
-                for (j = llen; j < clen; j++) {
-                   trow.childNodes[j - llen].style.width = ws[j];
-                }
-            }
-        }
-        this.onAllColumnWidthsUpdated(ws, tw);
-        this.syncHeaderHeight();
-    },
-
-    updateColumnWidth : function(col, width){
-        var w = this.getColumnWidth(col),
-            llen = this.cm.getLockedCount(),
-            ns, rw, c, row;
-        this.updateLockedWidth();
-        if(col < llen){
-            ns = this.getLockedRows();
-            rw = this.getLockedWidth();
-            c = col;
-        }else{
-            ns = this.getRows();
-            rw = this.getTotalWidth();
-            c = col - llen;
-        }
-        var hd = this.getHeaderCell(col);
-        hd.style.width = w;
-        for(var i = 0, len = ns.length; i < len; i++){
-            row = ns[i];
-            row.style.width = rw;
-            if(row.firstChild){
-                row.firstChild.style.width = rw;
-                row.firstChild.rows[0].childNodes[c].style.width = w;
-            }
-        }
-        this.onColumnWidthUpdated(col, w, this.getTotalWidth());
-        this.syncHeaderHeight();
-    },
-
-    updateColumnHidden : function(col, hidden){
-        var llen = this.cm.getLockedCount(),
-            ns, rw, c, row,
-            display = hidden ? 'none' : '';
-        this.updateLockedWidth();
-        if(col < llen){
-            ns = this.getLockedRows();
-            rw = this.getLockedWidth();
-            c = col;
-        }else{
-            ns = this.getRows();
-            rw = this.getTotalWidth();
-            c = col - llen;
-        }
-        var hd = this.getHeaderCell(col);
-        hd.style.display = display;
-        for(var i = 0, len = ns.length; i < len; i++){
-            row = ns[i];
-            row.style.width = rw;
-            if(row.firstChild){
-                row.firstChild.style.width = rw;
-                row.firstChild.rows[0].childNodes[c].style.display = display;
-            }
-        }
-        this.onColumnHiddenUpdated(col, hidden, this.getTotalWidth());
-        delete this.lastViewWidth;
-        this.layout();
-    },
-
-    doRender : function(cs, rs, ds, startRow, colCount, stripe){
-        var ts = this.templates, ct = ts.cell, rt = ts.row, last = colCount-1,
-            tstyle = 'width:'+this.getTotalWidth()+';',
-            lstyle = 'width:'+this.getLockedWidth()+';',
-            buf = [], lbuf = [], cb, lcb, c, p = {}, rp = {}, r;
-        for(var j = 0, len = rs.length; j < len; j++){
-            r = rs[j]; cb = []; lcb = [];
-            var rowIndex = (j+startRow);
-            for(var i = 0; i < colCount; i++){
-                c = cs[i];
-                p.id = c.id;
-                p.css = (i === 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '')) +
-                    (this.cm.config[i].cellCls ? ' ' + this.cm.config[i].cellCls : '');
-                p.attr = p.cellAttr = '';
-                p.value = c.renderer(r.data[c.name], p, r, rowIndex, i, ds);
-                p.style = c.style;
-                if(Ext.isEmpty(p.value)){
-                    p.value = '&#160;';
-                }
-                if(this.markDirty && r.dirty && Ext.isDefined(r.modified[c.name])){
-                    p.css += ' x-grid3-dirty-cell';
-                }
-                if(c.locked){
-                    lcb[lcb.length] = ct.apply(p);
-                }else{
-                    cb[cb.length] = ct.apply(p);
-                }
-            }
-            var alt = [];
-            if(stripe && ((rowIndex+1) % 2 === 0)){
-                alt[0] = 'x-grid3-row-alt';
-            }
-            if(r.dirty){
-                alt[1] = ' x-grid3-dirty-row';
-            }
-            rp.cols = colCount;
-            if(this.getRowClass){
-                alt[2] = this.getRowClass(r, rowIndex, rp, ds);
-            }
-            rp.alt = alt.join(' ');
-            rp.cells = cb.join('');
-            rp.tstyle = tstyle;
-            buf[buf.length] = rt.apply(rp);
-            rp.cells = lcb.join('');
-            rp.tstyle = lstyle;
-            lbuf[lbuf.length] = rt.apply(rp);
-        }
-        return [buf.join(''), lbuf.join('')];
-    },
-    processRows : function(startRow, skipStripe){
-        if(!this.ds || this.ds.getCount() < 1){
-            return;
-        }
-        var rows = this.getRows(),
-            lrows = this.getLockedRows(),
-            row, lrow;
-        skipStripe = skipStripe || !this.grid.stripeRows;
-        startRow = startRow || 0;
-        for(var i = 0, len = rows.length; i < len; ++i){
-            row = rows[i];
-            lrow = lrows[i];
-            row.rowIndex = i;
-            lrow.rowIndex = i;
-            if(!skipStripe){
-                row.className = row.className.replace(this.rowClsRe, ' ');
-                lrow.className = lrow.className.replace(this.rowClsRe, ' ');
-                if ((i + 1) % 2 === 0){
-                    row.className += ' x-grid3-row-alt';
-                    lrow.className += ' x-grid3-row-alt';
-                }
-            }
-            this.syncRowHeights(row, lrow);
-        }
-        if(startRow === 0){
-            Ext.fly(rows[0]).addClass(this.firstRowCls);
-            Ext.fly(lrows[0]).addClass(this.firstRowCls);
-        }
-        Ext.fly(rows[rows.length - 1]).addClass(this.lastRowCls);
-        Ext.fly(lrows[lrows.length - 1]).addClass(this.lastRowCls);
-    },
-    
-    syncRowHeights: function(row1, row2){
-        if(this.syncHeights){
-            var el1 = Ext.get(row1),
-                el2 = Ext.get(row2),
-                h1 = el1.getHeight(),
-                h2 = el2.getHeight();
-
-            if(h1 > h2){
-                el2.setHeight(h1);
-            }else if(h2 > h1){
-                el1.setHeight(h2);
-            }
-        }
-    },
-
-    afterRender : function(){
-        if(!this.ds || !this.cm){
-            return;
-        }
-        var bd = this.renderRows() || ['&#160;', '&#160;'];
-        this.mainBody.dom.innerHTML = bd[0];
-        this.lockedBody.dom.innerHTML = bd[1];
-        this.processRows(0, true);
-        if(this.deferEmptyText !== true){
-            this.applyEmptyText();
-        }
-        this.grid.fireEvent('viewready', this.grid);
-    },
-
-    renderUI : function(){        
-        var templates = this.templates,
-            header = this.renderHeaders(),
-            body = templates.body.apply({rows:'&#160;'});
-
-        return templates.masterTpl.apply({
-            body  : body,
-            header: header[0],
-            ostyle: 'width:' + this.getOffsetWidth() + ';',
-            bstyle: 'width:' + this.getTotalWidth()  + ';',
-            lockedBody: body,
-            lockedHeader: header[1],
-            lstyle: 'width:'+this.getLockedWidth()+';'
-        });
-    },
-    
-    afterRenderUI: function(){
-        var g = this.grid;
-        this.initElements();
-        Ext.fly(this.innerHd).on('click', this.handleHdDown, this);
-        Ext.fly(this.lockedInnerHd).on('click', this.handleHdDown, this);
-        this.mainHd.on({
-            scope: this,
-            mouseover: this.handleHdOver,
-            mouseout: this.handleHdOut,
-            mousemove: this.handleHdMove
-        });
-        this.lockedHd.on({
-            scope: this,
-            mouseover: this.handleHdOver,
-            mouseout: this.handleHdOut,
-            mousemove: this.handleHdMove
-        });
-        this.scroller.on('scroll', this.syncScroll,  this);
-        if(g.enableColumnResize !== false){
-            this.splitZone = new Ext.grid.GridView.SplitDragZone(g, this.mainHd.dom);
-            this.splitZone.setOuterHandleElId(Ext.id(this.lockedHd.dom));
-            this.splitZone.setOuterHandleElId(Ext.id(this.mainHd.dom));
-        }
-        if(g.enableColumnMove){
-            this.columnDrag = new Ext.grid.GridView.ColumnDragZone(g, this.innerHd);
-            this.columnDrag.setOuterHandleElId(Ext.id(this.lockedInnerHd));
-            this.columnDrag.setOuterHandleElId(Ext.id(this.innerHd));
-            this.columnDrop = new Ext.grid.HeaderDropZone(g, this.mainHd.dom);
-        }
-        if(g.enableHdMenu !== false){
-            this.hmenu = new Ext.menu.Menu({id: g.id + '-hctx'});
-            this.hmenu.add(
-                {itemId: 'asc', text: this.sortAscText, cls: 'xg-hmenu-sort-asc'},
-                {itemId: 'desc', text: this.sortDescText, cls: 'xg-hmenu-sort-desc'}
-            );
-            if(this.grid.enableColLock !== false){
-                this.hmenu.add('-',
-                    {itemId: 'lock', text: this.lockText, cls: 'xg-hmenu-lock'},
-                    {itemId: 'unlock', text: this.unlockText, cls: 'xg-hmenu-unlock'}
-                );
-            }
-            if(g.enableColumnHide !== false){
-                this.colMenu = new Ext.menu.Menu({id:g.id + '-hcols-menu'});
-                this.colMenu.on({
-                    scope: this,
-                    beforeshow: this.beforeColMenuShow,
-                    itemclick: this.handleHdMenuClick
-                });
-                this.hmenu.add('-', {
-                    itemId:'columns',
-                    hideOnClick: false,
-                    text: this.columnsText,
-                    menu: this.colMenu,
-                    iconCls: 'x-cols-icon'
-                });
-            }
-            this.hmenu.on('itemclick', this.handleHdMenuClick, this);
-        }
-        if(g.trackMouseOver){
-            this.mainBody.on({
-                scope: this,
-                mouseover: this.onRowOver,
-                mouseout: this.onRowOut
-            });
-            this.lockedBody.on({
-                scope: this,
-                mouseover: this.onRowOver,
-                mouseout: this.onRowOut
-            });
-        }
-
-        if(g.enableDragDrop || g.enableDrag){
-            this.dragZone = new Ext.grid.GridDragZone(g, {
-                ddGroup : g.ddGroup || 'GridDD'
-            });
-        }
-        this.updateHeaderSortState();    
-    },
-
-    layout : function(){
-        if(!this.mainBody){
-            return;
-        }
-        var g = this.grid;
-        var c = g.getGridEl();
-        var csize = c.getSize(true);
-        var vw = csize.width;
-        if(!g.hideHeaders && (vw < 20 || csize.height < 20)){
-            return;
-        }
-        this.syncHeaderHeight();
-        if(g.autoHeight){
-            this.scroller.dom.style.overflow = 'visible';
-            this.lockedScroller.dom.style.overflow = 'visible';
-            if(Ext.isWebKit){
-                this.scroller.dom.style.position = 'static';
-                this.lockedScroller.dom.style.position = 'static';
-            }
-        }else{
-            this.el.setSize(csize.width, csize.height);
-            var hdHeight = this.mainHd.getHeight();
-            var vh = csize.height - (hdHeight);
-        }
-        this.updateLockedWidth();
-        if(this.forceFit){
-            if(this.lastViewWidth != vw){
-                this.fitColumns(false, false);
-                this.lastViewWidth = vw;
-            }
-        }else {
-            this.autoExpand();
-            this.syncHeaderScroll();
-        }
-        this.onLayout(vw, vh);
-    },
-
-    getOffsetWidth : function() {
-        return (this.cm.getTotalWidth() - this.cm.getTotalLockedWidth() + this.getScrollOffset()) + 'px';
-    },
-
-    renderHeaders : function(){
-        var cm = this.cm,
-            ts = this.templates,
-            ct = ts.hcell,
-            cb = [], lcb = [],
-            p = {},
-            len = cm.getColumnCount(),
-            last = len - 1;
-        for(var i = 0; i < len; i++){
-            p.id = cm.getColumnId(i);
-            p.value = cm.getColumnHeader(i) || '';
-            p.style = this.getColumnStyle(i, true);
-            p.tooltip = this.getColumnTooltip(i);
-            p.css = (i === 0 ? 'x-grid3-cell-first ' : (i == last ? 'x-grid3-cell-last ' : '')) +
-                (cm.config[i].headerCls ? ' ' + cm.config[i].headerCls : '');
-            if(cm.config[i].align == 'right'){
-                p.istyle = 'padding-right:16px';
-            } else {
-                delete p.istyle;
-            }
-            if(cm.isLocked(i)){
-                lcb[lcb.length] = ct.apply(p);
-            }else{
-                cb[cb.length] = ct.apply(p);
-            }
-        }
-        return [ts.header.apply({cells: cb.join(''), tstyle:'width:'+this.getTotalWidth()+';'}),
-                ts.header.apply({cells: lcb.join(''), tstyle:'width:'+this.getLockedWidth()+';'})];
-    },
-
-    updateHeaders : function(){
-        var hd = this.renderHeaders();
-        this.innerHd.firstChild.innerHTML = hd[0];
-        this.innerHd.firstChild.style.width = this.getOffsetWidth();
-        this.innerHd.firstChild.firstChild.style.width = this.getTotalWidth();
-        this.lockedInnerHd.firstChild.innerHTML = hd[1];
-        var lw = this.getLockedWidth();
-        this.lockedInnerHd.firstChild.style.width = lw;
-        this.lockedInnerHd.firstChild.firstChild.style.width = lw;
-    },
-
-    getResolvedXY : function(resolved){
-        if(!resolved){
-            return null;
-        }
-        var c = resolved.cell, r = resolved.row;
-        return c ? Ext.fly(c).getXY() : [this.scroller.getX(), Ext.fly(r).getY()];
-    },
-
-    syncFocusEl : function(row, col, hscroll){
-        Ext.ux.grid.LockingGridView.superclass.syncFocusEl.call(this, row, col, col < this.cm.getLockedCount() ? false : hscroll);
-    },
-
-    ensureVisible : function(row, col, hscroll){
-        return Ext.ux.grid.LockingGridView.superclass.ensureVisible.call(this, row, col, col < this.cm.getLockedCount() ? false : hscroll);
-    },
-
-    insertRows : function(dm, firstRow, lastRow, isUpdate){
-        var last = dm.getCount() - 1;
-        if(!isUpdate && firstRow === 0 && lastRow >= last){
-            this.refresh();
-        }else{
-            if(!isUpdate){
-                this.fireEvent('beforerowsinserted', this, firstRow, lastRow);
-            }
-            var html = this.renderRows(firstRow, lastRow),
-                before = this.getRow(firstRow);
-            if(before){
-                if(firstRow === 0){
-                    this.removeRowClass(0, this.firstRowCls);
-                }
-                Ext.DomHelper.insertHtml('beforeBegin', before, html[0]);
-                before = this.getLockedRow(firstRow);
-                Ext.DomHelper.insertHtml('beforeBegin', before, html[1]);
-            }else{
-                this.removeRowClass(last - 1, this.lastRowCls);
-                Ext.DomHelper.insertHtml('beforeEnd', this.mainBody.dom, html[0]);
-                Ext.DomHelper.insertHtml('beforeEnd', this.lockedBody.dom, html[1]);
-            }
-            if(!isUpdate){
-                this.fireEvent('rowsinserted', this, firstRow, lastRow);
-                this.processRows(firstRow);
-            }else if(firstRow === 0 || firstRow >= last){
-                this.addRowClass(firstRow, firstRow === 0 ? this.firstRowCls : this.lastRowCls);
-            }
-        }
-        this.syncFocusEl(firstRow);
-    },
-
-    getColumnStyle : function(col, isHeader){
-        var style = !isHeader ? this.cm.config[col].cellStyle || this.cm.config[col].css || '' : this.cm.config[col].headerStyle || '';
-        style += 'width:'+this.getColumnWidth(col)+';';
-        if(this.cm.isHidden(col)){
-            style += 'display:none;';
-        }
-        var align = this.cm.config[col].align;
-        if(align){
-            style += 'text-align:'+align+';';
-        }
-        return style;
-    },
-
-    getLockedWidth : function() {
-        return this.cm.getTotalLockedWidth() + 'px';
-    },
-
-    getTotalWidth : function() {
-        return (this.cm.getTotalWidth() - this.cm.getTotalLockedWidth()) + 'px';
-    },
-
-    getColumnData : function(){
-        var cs = [], cm = this.cm, colCount = cm.getColumnCount();
-        for(var i = 0; i < colCount; i++){
-            var name = cm.getDataIndex(i);
-            cs[i] = {
-                name : (!Ext.isDefined(name) ? this.ds.fields.get(i).name : name),
-                renderer : cm.getRenderer(i),
-                id : cm.getColumnId(i),
-                style : this.getColumnStyle(i),
-                locked : cm.isLocked(i)
-            };
-        }
-        return cs;
-    },
-
-    renderBody : function(){
-        var markup = this.renderRows() || ['&#160;', '&#160;'];
-        return [this.templates.body.apply({rows: markup[0]}), this.templates.body.apply({rows: markup[1]})];
-    },
-    
-    refreshRow: function(record){
-        var store = this.ds, 
-            colCount = this.cm.getColumnCount(), 
-            columns = this.getColumnData(), 
-            last = colCount - 1, 
-            cls = ['x-grid3-row'], 
-            rowParams = {
-                tstyle: String.format("width: {0};", this.getTotalWidth())
-            }, 
-            lockedRowParams = {
-                tstyle: String.format("width: {0};", this.getLockedWidth())
-            }, 
-            colBuffer = [], 
-            lockedColBuffer = [], 
-            cellTpl = this.templates.cell, 
-            rowIndex, 
-            row, 
-            lockedRow, 
-            column, 
-            meta, 
-            css, 
-            i;
-        
-        if (Ext.isNumber(record)) {
-            rowIndex = record;
-            record = store.getAt(rowIndex);
-        } else {
-            rowIndex = store.indexOf(record);
-        }
-        
-        if (!record || rowIndex < 0) {
-            return;
-        }
-        
-        for (i = 0; i < colCount; i++) {
-            column = columns[i];
-            
-            if (i == 0) {
-                css = 'x-grid3-cell-first';
-            } else {
-                css = (i == last) ? 'x-grid3-cell-last ' : '';
-            }
-            
-            meta = {
-                id: column.id,
-                style: column.style,
-                css: css,
-                attr: "",
-                cellAttr: ""
-            };
-            
-            meta.value = column.renderer.call(column.scope, record.data[column.name], meta, record, rowIndex, i, store);
-            
-            if (Ext.isEmpty(meta.value)) {
-                meta.value = ' ';
-            }
-            
-            if (this.markDirty && record.dirty && typeof record.modified[column.name] != 'undefined') {
-                meta.css += ' x-grid3-dirty-cell';
-            }
-            
-            if (column.locked) {
-                lockedColBuffer[i] = cellTpl.apply(meta);
-            } else {
-                colBuffer[i] = cellTpl.apply(meta);
-            }
-        }
-        
-        row = this.getRow(rowIndex);
-        row.className = '';
-        lockedRow = this.getLockedRow(rowIndex);
-        lockedRow.className = '';
-        
-        if (this.grid.stripeRows && ((rowIndex + 1) % 2 === 0)) {
-            cls.push('x-grid3-row-alt');
-        }
-        
-        if (this.getRowClass) {
-            rowParams.cols = colCount;
-            cls.push(this.getRowClass(record, rowIndex, rowParams, store));
-        }
-        
-        // Unlocked rows
-        this.fly(row).addClass(cls).setStyle(rowParams.tstyle);
-        rowParams.cells = colBuffer.join("");
-        row.innerHTML = this.templates.rowInner.apply(rowParams);
-        
-        // Locked rows
-        this.fly(lockedRow).addClass(cls).setStyle(lockedRowParams.tstyle);
-        lockedRowParams.cells = lockedColBuffer.join("");
-        lockedRow.innerHTML = this.templates.rowInner.apply(lockedRowParams);
-        lockedRow.rowIndex = rowIndex;
-        this.syncRowHeights(row, lockedRow);  
-        this.fireEvent('rowupdated', this, rowIndex, record);
-    },
-
-    refresh : function(headersToo){
-        this.fireEvent('beforerefresh', this);
-        this.grid.stopEditing(true);
-        var result = this.renderBody();
-        this.mainBody.update(result[0]).setWidth(this.getTotalWidth());
-        this.lockedBody.update(result[1]).setWidth(this.getLockedWidth());
-        if(headersToo === true){
-            this.updateHeaders();
-            this.updateHeaderSortState();
-        }
-        this.processRows(0, true);
-        this.layout();
-        this.applyEmptyText();
-        this.fireEvent('refresh', this);
-    },
-
-    onDenyColumnLock : function(){
-
-    },
-
-    initData : function(ds, cm){
-        if(this.cm){
-            this.cm.un('columnlockchange', this.onColumnLock, this);
-        }
-        Ext.ux.grid.LockingGridView.superclass.initData.call(this, ds, cm);
-        if(this.cm){
-            this.cm.on('columnlockchange', this.onColumnLock, this);
-        }
-    },
-
-    onColumnLock : function(){
-        this.refresh(true);
-    },
-
-    handleHdMenuClick : function(item){
-        var index = this.hdCtxIndex,
-            cm = this.cm,
-            id = item.getItemId(),
-            llen = cm.getLockedCount();
-        switch(id){
-            case 'lock':
-                if(cm.getColumnCount(true) <= llen + 1){
-                    this.onDenyColumnLock();
-                    return undefined;
-                }
-                cm.setLocked(index, true);
-                if(llen != index){
-                    cm.moveColumn(index, llen);
-                    this.grid.fireEvent('columnmove', index, llen);
-                }
-            break;
-            case 'unlock':
-                if(llen - 1 != index){
-                    cm.setLocked(index, false, true);
-                    cm.moveColumn(index, llen - 1);
-                    this.grid.fireEvent('columnmove', index, llen - 1);
-                }else{
-                    cm.setLocked(index, false);
-                }
-            break;
-            default:
-                return Ext.ux.grid.LockingGridView.superclass.handleHdMenuClick.call(this, item);
-        }
-        return true;
-    },
-
-    handleHdDown : function(e, t){
-        Ext.ux.grid.LockingGridView.superclass.handleHdDown.call(this, e, t);
-        if(this.grid.enableColLock !== false){
-            if(Ext.fly(t).hasClass('x-grid3-hd-btn')){
-                var hd = this.findHeaderCell(t),
-                    index = this.getCellIndex(hd),
-                    ms = this.hmenu.items, cm = this.cm;
-                ms.get('lock').setDisabled(cm.isLocked(index));
-                ms.get('unlock').setDisabled(!cm.isLocked(index));
-            }
-        }
-    },
-
-    syncHeaderHeight: function(){
-        var hrow = Ext.fly(this.innerHd).child('tr', true),
-            lhrow = Ext.fly(this.lockedInnerHd).child('tr', true);
-            
-        hrow.style.height = 'auto';
-        lhrow.style.height = 'auto';
-        var hd = hrow.offsetHeight,
-            lhd = lhrow.offsetHeight,
-            height = Math.max(lhd, hd) + 'px';
-            
-        hrow.style.height = height;
-        lhrow.style.height = height;
-
-    },
-
-    updateLockedWidth: function(){
-        var lw = this.cm.getTotalLockedWidth(),
-            tw = this.cm.getTotalWidth() - lw,
-            csize = this.grid.getGridEl().getSize(true),
-            lp = Ext.isBorderBox ? 0 : this.lockedBorderWidth,
-            rp = Ext.isBorderBox ? 0 : this.rowBorderWidth,
-            vw = (csize.width - lw - lp - rp) + 'px',
-            so = this.getScrollOffset();
-        if(!this.grid.autoHeight){
-            var vh = (csize.height - this.mainHd.getHeight()) + 'px';
-            this.lockedScroller.dom.style.height = vh;
-            this.scroller.dom.style.height = vh;
-        }
-        this.lockedWrap.dom.style.width = (lw + rp) + 'px';
-        this.scroller.dom.style.width = vw;
-        this.mainWrap.dom.style.left = (lw + lp + rp) + 'px';
-        if(this.innerHd){
-            this.lockedInnerHd.firstChild.style.width = lw + 'px';
-            this.lockedInnerHd.firstChild.firstChild.style.width = lw + 'px';
-            this.innerHd.style.width = vw;
-            this.innerHd.firstChild.style.width = (tw + rp + so) + 'px';
-            this.innerHd.firstChild.firstChild.style.width = tw + 'px';
-        }
-        if(this.mainBody){
-            this.lockedBody.dom.style.width = (lw + rp) + 'px';
-            this.mainBody.dom.style.width = (tw + rp) + 'px';
-        }
-    }
-});
-
-Ext.ux.grid.LockingColumnModel = Ext.extend(Ext.grid.ColumnModel, {
-    <div id="method-Ext.ux.grid.RowExpander-isLocked"></div>/**
-     * Returns true if the given column index is currently locked
-     * @param {Number} colIndex The column index
-     * @return {Boolean} True if the column is locked
-     */
-    isLocked : function(colIndex){
-        return this.config[colIndex].locked === true;
-    },
-
-    <div id="method-Ext.ux.grid.RowExpander-setLocked"></div>/**
-     * Locks or unlocks a given column
-     * @param {Number} colIndex The column index
-     * @param {Boolean} value True to lock, false to unlock
-     * @param {Boolean} suppressEvent Pass false to cause the columnlockchange event not to fire
-     */
-    setLocked : function(colIndex, value, suppressEvent){
-        if (this.isLocked(colIndex) == value) {
-            return;
-        }
-        this.config[colIndex].locked = value;
-        if (!suppressEvent) {
-            this.fireEvent('columnlockchange', this, colIndex, value);
-        }
-    },
-
-    <div id="method-Ext.ux.grid.RowExpander-getTotalLockedWidth"></div>/**
-     * Returns the total width of all locked columns
-     * @return {Number} The width of all locked columns
-     */
-    getTotalLockedWidth : function(){
-        var totalWidth = 0;
-        for (var i = 0, len = this.config.length; i < len; i++) {
-            if (this.isLocked(i) && !this.isHidden(i)) {
-                totalWidth += this.getColumnWidth(i);
-            }
-        }
-
-        return totalWidth;
-    },
-
-    <div id="method-Ext.ux.grid.RowExpander-getLockedCount"></div>/**
-     * Returns the total number of locked columns
-     * @return {Number} The number of locked columns
-     */
-    getLockedCount : function() {
-        var len = this.config.length;
-
-        for (var i = 0; i < len; i++) {
-            if (!this.isLocked(i)) {
-                return i;
-            }
-        }
-
-        //if we get to this point all of the columns are locked so we return the total
-        return len;
-    },
-
-    <div id="method-Ext.ux.grid.RowExpander-moveColumn"></div>/**
-     * Moves a column from one position to another
-     * @param {Number} oldIndex The current column index
-     * @param {Number} newIndex The destination column index
-     */
-    moveColumn : function(oldIndex, newIndex){
-        var oldLocked = this.isLocked(oldIndex),
-            newLocked = this.isLocked(newIndex);
-
-        if (oldIndex < newIndex && oldLocked && !newLocked) {
-            this.setLocked(oldIndex, false, true);
-        } else if (oldIndex > newIndex && !oldLocked && newLocked) {
-            this.setLocked(oldIndex, true, true);
-        }
-
-        Ext.ux.grid.LockingColumnModel.superclass.moveColumn.apply(this, arguments);
-    }
-});</pre>    
-</body>
-</html>
\ No newline at end of file