/**
* A special type of Grid {@link Ext.grid.column.Column} that provides automatic
* row numbering.
*
* Usage:
*
* columns: [
* {xtype: 'rownumberer'},
* {text: "Company", flex: 1, sortable: true, dataIndex: 'company'},
* {text: "Price", width: 120, sortable: true, renderer: Ext.util.Format.usMoney, dataIndex: 'price'},
* {text: "Change", width: 120, sortable: true, dataIndex: 'change'},
* {text: "% Change", width: 120, sortable: true, dataIndex: 'pctChange'},
* {text: "Last Updated", width: 120, sortable: true, renderer: Ext.util.Format.dateRenderer('m/d/Y'), dataIndex: 'lastChange'}
* ]
*
*/
Ext.define('Ext.grid.column.RowNumberer', {
extend: 'Ext.grid.column.Column',
alternateClassName: 'Ext.grid.RowNumberer',
alias: 'widget.rownumberer',
/**
* @cfg {String} text
* Any valid text or HTML fragment to display in the header cell for the row number column.
*/
text: " ",
/**
* @cfg {Number} width
* The default width in pixels of the row number column.
*/
width: 23,
/**
* @cfg {Boolean} sortable
* @hide
*/
sortable: false,
/**
* @cfg {Boolean} [draggable=false]
* False to disable drag-drop reordering of this column.
*/
draggable: false,
// Flag to Lockable to move instances of this column to the locked side.
autoLock: true,
// May not be moved from its preferred locked side when grid is enableLocking:true
lockable: false,
align: 'right',
constructor : function(config){
var me = this;
// Copy the prototype's default width setting into an instance property to provide
// a default width which will not be overridden by AbstractContainer.applyDefaults use of Ext.applyIf
me.width = me.width;
me.callParent(arguments);
me.scope = me;
},
// private
resizable: false,
hideable: false,
menuDisabled: true,
dataIndex: '',
cls: Ext.baseCSSPrefix + 'row-numberer',
tdCls: Ext.baseCSSPrefix + 'grid-cell-row-numberer ' + Ext.baseCSSPrefix + 'grid-cell-special',
innerCls: Ext.baseCSSPrefix + 'grid-cell-inner-row-numberer',
rowspan: undefined,
// private
renderer: function(value, metaData, record, rowIdx, colIdx, store) {
var rowspan = this.rowspan,
page = store.currentPage,
result = record.index;
if (rowspan) {
metaData.tdAttr = 'rowspan="' + rowspan + '"';
}
if (result == null) {
result = rowIdx;
if (page > 1) {
result += (page - 1) * store.pageSize;
}
}
return result + 1;
}
});