app/assets/javascripts/ext_extensions/TreeGrid/src/GridPanel.js
Ext.ux.maximgb.tg.GridPanel = Ext.extend(Ext.grid.GridPanel,
{
/**
* @cfg {String|Integer} master_column_id Master column id. Master column cells are nested.
* Master column cell values are used to build breadcrumbs.
*/
master_column_id : 0,
/**
* @cfg {Stirng} TreeGrid panel custom class.
*/
tg_cls : 'ux-maximgb-tg-panel',
// Private
initComponent : function()
{
this.initComponentPreOverride();
Ext.ux.maximgb.tg.GridPanel.superclass.initComponent.call(this);
this.getSelectionModel().on('selectionchange', this.onTreeGridSelectionChange, this);
this.initComponentPostOverride();
},
initComponentPreOverride : Ext.emptyFn,
initComponentPostOverride : Ext.emptyFn,
// Private
onRender : function(ct, position)
{
Ext.ux.maximgb.tg.GridPanel.superclass.onRender.call(this, ct, position);
this.el.addClass(this.tg_cls);
},
/**
* Returns view instance.
*
* @access private
* @return {GridView}
*/
getView : function()
{
if (!this.view) {
this.view = new Ext.ux.maximgb.tg.GridView(this.viewConfig);
}
return this.view;
},
/**
* @access private
*/
onClick : function(e)
{
var target = e.getTarget(),
view = this.getView(),
row = view.findRowIndex(target),
store = this.getStore(),
sm = this.getSelectionModel(),
record, record_id, do_default = true;
// Row click
if (row !== false) {
if (Ext.fly(target).hasClass('ux-maximgb-tg-elbow-active')) {
record = store.getAt(row);
if (store.isExpandedNode(record)) {
store.collapseNode(record);
}
else {
store.expandNode(record);
}
do_default = false;
}
}
if (do_default) {
Ext.ux.maximgb.tg.GridPanel.superclass.onClick.call(this, e);
}
},
/**
* @access private
*/
onMouseDown : function(e)
{
var target = e.getTarget();
if (!Ext.fly(target).hasClass('ux-maximgb-tg-elbow-active')) {
Ext.ux.maximgb.tg.GridPanel.superclass.onMouseDown.call(this, e);
}
},
/**
* @access private
*/
onTreeGridSelectionChange : function(sm, selection)
{
var record, ancestors, store = this.getStore();
// Row selection model
if (sm.getSelected) {
record = sm.getSelected();
store.setActiveNode(record);
}
// Cell selection model
else if (sm.getSelectedCell && selection) {
record = selection.record;
store.setActiveNode(record);
}
// Ensuring that selected node is visible.
if (record) {
if (!store.isVisibleNode(record)) {
ancestors = store.getNodeAncestors(record);
while (ancestors.length > 0) {
store.expandNode(ancestors.pop());
}
}
}
}
});