Grid HeaderContextMenu

Na komunitním fóru byla poptávka po kontextovém menu pro Ext.grid.Panel. V tuto chvíli již existuje modifikace přímo od jednoho z vývojářů Sencha Evanta Trimboli. Nicméně v téže době jsem na fórum publikoval další plugin, který umožňoval právě tuto funkčnost.

Obdobně jako v pluginu pro Extj.tab.Panel zde vytváříme událost headercontextmenu opět kompatibilní s ExtJS 3.

Ext.define('Ext.ux.grid.HeaderContextMenu', {
    alias : 'plugin.headercontextmenu',
    mixins : {
        observable : 'Ext.util.Observable'
    },

    init : function(grid) {
        this.gridPanel = grid;
        this.headerCt = grid.headerCt;
        this.headerCt.addEvents('contextmenu');
        this.gridPanel.addEvents('headercontextmenu');

        this.mon(this.headerCt, {
            scope : this,
            afterlayout : this.onAfterLayout,
            single : true
        });
    },

    onAfterLayout : function() {
        this.mon(this.headerCt.el, {
            scope : this,
            contextmenu : this.onContextMenu,
            delegate : 'div.x-column-header'
        });
    },

    onContextMenu : function(event, target) {
        var me = this,
        column = this.headerCt.getChildByElement(target);

        event.preventDefault();

        this.gridPanel.fireEvent(
            'headercontextmenu', this.gridPanel, 
            column.getIndex(), column, event, target
        );
    }
});