<!DOCTYPE html>
|
<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>
|
<style type="text/css">
|
.highlight { display: block; background-color: #ddd; }
|
</style>
|
<script type="text/javascript">
|
function highlight() {
|
document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
|
}
|
</script>
|
</head>
|
<body onload="prettyPrint(); highlight();">
|
<pre class="prettyprint lang-js"><span id='Ext-grid-locking-HeaderContainer'>/**
|
</span> * Private class which acts as a HeaderContainer for the Lockable which aggregates all columns
|
* from both sides of the Loackable. It is never rendered, it's just used to interrogate the
|
* column collection.
|
* @private
|
*/
|
Ext.define('Ext.grid.locking.HeaderContainer', {
|
extend: 'Ext.grid.header.Container',
|
requires: [
|
'Ext.grid.ColumnManager'
|
],
|
|
<span id='Ext-grid-locking-HeaderContainer-method-constructor'> constructor: function(lockable) {
|
</span> var me = this,
|
events,
|
event,
|
eventNames = [],
|
lockedGrid = lockable.lockedGrid,
|
normalGrid = lockable.normalGrid;
|
|
me.lockable = lockable;
|
me.callParent();
|
|
// Create the unified column manager for the lockable grid assembly
|
lockedGrid.columnManager.rootColumns =
|
normalGrid.columnManager.rootColumns =
|
lockable.columnManager =
|
me.columnManager = new Ext.grid.ColumnManager(lockedGrid.headerCt, normalGrid.headerCt);
|
|
// Relay events from both sides' headerCts
|
events = lockedGrid.headerCt.events;
|
for (event in events) {
|
if (events.hasOwnProperty(event)) {
|
eventNames.push(event);
|
}
|
}
|
me.relayEvents(lockedGrid.headerCt, eventNames);
|
me.relayEvents(normalGrid.headerCt, eventNames);
|
},
|
|
<span id='Ext-grid-locking-HeaderContainer-method-getRefItems'> getRefItems: function() {
|
</span> return this.lockable.lockedGrid.headerCt.getRefItems().concat(this.lockable.normalGrid.headerCt.getRefItems());
|
},
|
|
<span id='Ext-grid-locking-HeaderContainer-method-getGridColumns'> // This is the function which all other column access methods are based upon
|
</span> // Return the full column set for the whole Lockable assembly
|
getGridColumns: function() {
|
return this.lockable.lockedGrid.headerCt.getGridColumns().concat(this.lockable.normalGrid.headerCt.getGridColumns());
|
},
|
|
<span id='Ext-grid-locking-HeaderContainer-method-getColumnsState'> // Lockable uses its headerCt to gather column state
|
</span> getColumnsState: function () {
|
var me = this,
|
locked = me.lockable.lockedGrid.headerCt.getColumnsState(),
|
normal = me.lockable.normalGrid.headerCt.getColumnsState();
|
|
return locked.concat(normal);
|
},
|
|
<span id='Ext-grid-locking-HeaderContainer-method-applyColumnsState'> // Lockable uses its headerCt to apply column state
|
</span> applyColumnsState: function (columns) {
|
var me = this,
|
lockedGrid = me.lockable.lockedGrid,
|
lockedHeaderCt = lockedGrid.headerCt,
|
normalHeaderCt = me.lockable.normalGrid.headerCt,
|
lockedCols = Ext.Array.toValueMap(lockedHeaderCt.items.items, 'headerId'),
|
normalCols = Ext.Array.toValueMap(normalHeaderCt.items.items, 'headerId'),
|
locked = [],
|
normal = [],
|
lockedWidth = 1,
|
length = columns.length,
|
i, existing,
|
lockedDefault,
|
col;
|
|
for (i = 0; i < length; i++) {
|
col = columns[i];
|
|
lockedDefault = lockedCols[col.id];
|
existing = lockedDefault || normalCols[col.id];
|
|
if (existing) {
|
if (existing.applyColumnState) {
|
existing.applyColumnState(col);
|
}
|
if (existing.locked === undefined) {
|
existing.locked = !!lockedDefault;
|
}
|
if (existing.locked) {
|
locked.push(existing);
|
if (!existing.hidden && typeof existing.width == 'number') {
|
lockedWidth += existing.width;
|
}
|
} else {
|
normal.push(existing);
|
}
|
}
|
}
|
|
// state and config must have the same columns (compare counts for now):
|
if (locked.length + normal.length == lockedHeaderCt.items.getCount() + normalHeaderCt.items.getCount()) {
|
lockedHeaderCt.removeAll(false);
|
normalHeaderCt.removeAll(false);
|
|
lockedHeaderCt.add(locked);
|
normalHeaderCt.add(normal);
|
|
lockedGrid.setWidth(lockedWidth);
|
}
|
}
|
});</pre>
|
</body>
|
</html>
|