/**
* That's a base class for the {@link Ext.grid.plugin.GroupingPanel} plugin
* and it's shared by both toolkits.
* @private
*/
Ext.define('Ext.grid.plugin.BaseGroupingPanel', {
extend: 'Ext.plugin.Abstract',
config: {
panel: {
xtype: 'groupingpanel',
columnConfig: {
xtype: 'groupingpanelcolumn'
}
},
grid: null,
bar: null,
gridListeners: null
},
init: function(grid) {
this.setGrid(grid);
},
/**
* @private
* AbstractComponent calls destroy on all its plugins at destroy time.
*/
destroy: function() {
this.setConfig({
grid: null,
bar: null,
panel: null
});
this.callParent();
},
enable: function() {
this.disabled = false;
this.showGroupingPanel();
},
disable: function() {
this.disabled = true;
this.hideGroupingPanel();
},
/**
* Show the grouping panel
*/
showGroupingPanel: function() {
var bar;
this.setup();
bar = this.getBar();
bar.show();
},
/**
* Hide the grouping panel
*/
hideGroupingPanel: function() {
var bar;
this.setup();
bar = this.getBar();
bar.hide();
},
toggleGroupingPanel: function() {
var bar;
this.setup();
bar = this.getBar();
bar.setHidden(!bar.getHidden());
},
updateGrid: function(grid, oldGrid) {
var me = this;
Ext.destroy(me.listenersGrid);
if (oldGrid) {
oldGrid.showGroupingPanel = oldGrid.hideGroupingPanel = null;
}
if (grid) {
grid.showGroupingPanel = Ext.bind(me.showGroupingPanel, me);
grid.hideGroupingPanel = Ext.bind(me.hideGroupingPanel, me);
if (grid.rendered) {
me.onAfterGridRendered();
}
else {
me.listenersGrid = grid.on(Ext.apply({
scope: me,
destroyable: true
}, me.getGridListeners()));
}
}
},
updateBar: function(bar, oldBar) {
var panel;
Ext.destroy(oldBar);
if (bar) {
panel = bar.isXType('groupingpanel') ? bar : bar.down('groupingpanel');
if (panel) {
panel.setConfig({
grid: this.getGrid()
});
}
//<debug>
else {
Ext.raise('Wrong grouping panel configuration! ' +
'No "groupingpanel" component available');
}
//</debug>
}
},
onAfterGridRendered: function() {
var me = this;
if (me.disabled === true) {
me.disable();
}
else {
me.enable();
}
},
addGroupingPanel: Ext.emptyFn,
privates: {
setup: function() {
var me = this;
if (me.doneSetup) {
return;
}
me.doneSetup = true;
me.setBar(me.addGroupingPanel());
}
}
});