discordmessengercustom-servicesmacoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teams
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
218 lines
6.8 KiB
218 lines
6.8 KiB
/** |
|
* @private |
|
* |
|
* Manages and provides information about a TablePanel's *visible leaf* columns. |
|
*/ |
|
Ext.define('Ext.grid.ColumnManager', { |
|
alternateClassName: ['Ext.grid.ColumnModel'], |
|
|
|
columns: null, |
|
|
|
constructor: function(visibleOnly, headerCt, secondHeaderCt) { |
|
//<debug> |
|
if (!headerCt.isRootHeader && !headerCt.isGroupHeader) { |
|
Ext.Error.raise('ColumnManager must be passed an instantiated HeaderContainer or group header'); |
|
} |
|
//</debug> |
|
this.headerCt = headerCt; |
|
|
|
// We are managing columns for a lockable grid... |
|
if (secondHeaderCt) { |
|
//<debug> |
|
if (!headerCt.isRootHeader && !headerCt.isGroupHeader) { |
|
Ext.Error.raise('ColumnManager must be passed an instantiated HeaderContainer or group header'); |
|
} |
|
//</debug> |
|
this.secondHeaderCt = secondHeaderCt; |
|
} |
|
this.visibleOnly = !!visibleOnly; |
|
}, |
|
|
|
getColumns: function() { |
|
if (!this.columns) { |
|
this.cacheColumns(); |
|
} |
|
return this.columns; |
|
}, |
|
|
|
hasVariableRowHeight: function() { |
|
var me = this, |
|
columns = me.getColumns(), |
|
len = columns.length, |
|
i; |
|
|
|
if (me.variableRowHeight == null) { |
|
me.variableRowHeight = false; |
|
for (i = 0; !me.variableRowHeight && i < len; i++) { |
|
me.variableRowHeight = !!columns[i].variableRowHeight; |
|
} |
|
} |
|
|
|
return me.variableRowHeight; |
|
}, |
|
|
|
/** |
|
* If called from a root header, returns the index of a leaf level header regardless of what the nesting |
|
* structure is. |
|
* |
|
* If called from a group header, returns the index of a leaf level header relative to the group header. |
|
* |
|
* If a group header is passed, the index of the first leaf level header within it is returned. |
|
* |
|
* @param {Ext.grid.column.Column} header The header to find the index of |
|
* @return {Number} The index of the specified column header |
|
*/ |
|
getHeaderIndex: function (header) { |
|
if (header.isGroupHeader) { |
|
// Get the first header for the particular group header. The .getHeaderColumns API |
|
// will sort out if it's to be just visible columns or all columns. |
|
header = this.getHeaderColumns(header)[0]; |
|
} |
|
|
|
return Ext.Array.indexOf(this.getColumns(), header); |
|
}, |
|
|
|
/** |
|
* If called from a root header, gets a leaf level header by index regardless of what the nesting |
|
* structure is. |
|
* |
|
* If called from a group header, returns the index of a leaf level header relative to the group header. |
|
* |
|
* @param {Number} index The column index for which to retrieve the column. |
|
* @return {Ext.grid.column.Column} The header. `null` if it doesn't exist. |
|
*/ |
|
getHeaderAtIndex: function(index) { |
|
var columns = this.getColumns(), |
|
col = columns[index]; |
|
|
|
return col || null; |
|
}, |
|
|
|
getPreviousSibling: function(header){ |
|
var index = this.getHeaderIndex(header), |
|
col = null; |
|
|
|
if (index > 0) { |
|
col = this.getColumns()[index - 1]; |
|
} |
|
return col; |
|
}, |
|
|
|
getNextSibling: function(header) { |
|
var index = this.getHeaderIndex(header), |
|
col; |
|
|
|
if (index !== -1) { |
|
col = this.getColumns()[index + 1]; |
|
} |
|
return col || null; |
|
}, |
|
|
|
/** |
|
* Get the first column. |
|
* @return {Ext.grid.column.Column} The header. `null` if it doesn't exist |
|
*/ |
|
getFirst: function() { |
|
var columns = this.getColumns(); |
|
return columns.length > 0 ? columns[0] : null; |
|
}, |
|
|
|
/** |
|
* Get the last column. |
|
* @return {Ext.grid.column.Column} The header. `null` if it doesn't exist |
|
*/ |
|
getLast: function(){ |
|
var columns = this.getColumns(), |
|
len = columns.length; |
|
|
|
return len > 0 ? columns[len - 1] : null; |
|
}, |
|
|
|
/** |
|
* Get a leaf level header by data index regardless of what the nesting |
|
* structure is. |
|
* @param {String} dataIndex The data index |
|
* @return {Ext.grid.column.Column} The header. `null` if it doesn't exist. |
|
*/ |
|
getHeaderByDataIndex: function (dataIndex) { |
|
var columns = this.getColumns(), |
|
len = columns.length, |
|
i, header; |
|
|
|
for (i = 0; i < len; ++i) { |
|
header = columns[i]; |
|
if (header.dataIndex === dataIndex) { |
|
return header; |
|
} |
|
} |
|
return null; |
|
}, |
|
|
|
/** |
|
* Get a leaf level header by index regardless of what the nesting |
|
* structure is. |
|
* @param {String} id The id |
|
* @return {Ext.grid.column.Column} The header. `null` if it doesn't exist. |
|
*/ |
|
getHeaderById: function(id) { |
|
var columns = this.getColumns(), |
|
len = columns.length, |
|
i, header; |
|
|
|
for (i = 0; i < len; ++i) { |
|
header = columns[i]; |
|
if (header.getItemId() === id) { |
|
return header; |
|
} |
|
} |
|
return null; |
|
}, |
|
|
|
/** |
|
* When passed a column index, returns the closet *visible* column to that. If the column at the passed index is visible, |
|
* that is returned. If it is hidden, either the next visible, or the previous visible column is returned. |
|
* |
|
* If called from a group header, returns the visible index of a leaf level header relative to the group header with the |
|
* same stipulations as outlined above. |
|
* |
|
* @param {Number} index Position at which to find the closest visible column. |
|
*/ |
|
getVisibleHeaderClosestToIndex: function(index) { |
|
var result = this.getHeaderAtIndex(index); |
|
if (result && result.hidden) { |
|
result = result.next(':not([hidden])') || result.prev(':not([hidden])'); |
|
} |
|
return result; |
|
}, |
|
|
|
cacheColumns: function() { |
|
var columns = this.getHeaderColumns(this.headerCt), |
|
second = this.secondHeaderCt; |
|
|
|
if (second) { |
|
columns = columns.concat(this.getHeaderColumns(second)); |
|
} |
|
this.columns = columns; |
|
}, |
|
|
|
getHeaderColumns: function(header) { |
|
var result = this.visibleOnly ? header.getVisibleGridColumns() : header.getGridColumns(); |
|
return Ext.Array.clone(result); |
|
}, |
|
|
|
invalidate: function() { |
|
var root = this.rootColumns; |
|
this.columns = this.variableRowHeight = null; |
|
|
|
// If we are part of a lockable assembly, invalidate the root column manager |
|
if (root) { |
|
root.invalidate(); |
|
} |
|
}, |
|
|
|
destroy: function(){ |
|
this.columns = this.rootColumns = null; |
|
} |
|
}, function() { |
|
this.createAlias('indexOf', 'getHeaderIndex'); |
|
});
|
|
|