| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | /*! * Ext JS Library 4.0 * Copyright(c) 2006-2011 Sencha Inc. * licensing@sencha.com * http://www.sencha.com/license */Ext.define('Ext.ux.desktop.StartMenu', {    extend: 'Ext.panel.Panel',    requires: [        'Ext.menu.Menu',        'Ext.toolbar.Toolbar'    ],    ariaRole: 'menu',    cls: 'x-menu ux-start-menu',    defaultAlign: 'bl-tl',    iconCls: 'user',    floating: true,    shadow: true,    // We have to hardcode a width because the internal Menu cannot drive our width.    // This is combined with changing the align property of the menu's layout from the    // typical 'stretchmax' to 'stretch' which allows the the items to fill the menu    // area.    width: 300,    initComponent: function() {        var me = this, menu = me.menu;        me.menu = new Ext.menu.Menu({            cls: 'ux-start-menu-body',            border: false,            floating: false,            items: menu        });        me.menu.layout.align = 'stretch';        me.items = [me.menu];        me.layout = 'fit';        Ext.menu.Manager.register(me);        me.callParent();        // TODO - relay menu events        me.toolbar = new Ext.toolbar.Toolbar(Ext.apply({            dock: 'right',            cls: 'ux-start-menu-toolbar',            vertical: true,            width: 100        }, me.toolConfig));        me.toolbar.layout.align = 'stretch';        me.addDocked(me.toolbar);        delete me.toolItems;        me.on('deactivate', function () {            me.hide();        });    },    addMenuItem: function() {        var cmp = this.menu;        cmp.add.apply(cmp, arguments);    },    addToolItem: function() {        var cmp = this.toolbar;        cmp.add.apply(cmp, arguments);    },    showBy: function(cmp, pos, off) {        var me = this;        if (me.floating && cmp) {            me.layout.autoSize = true;            me.show();            // Component or Element            cmp = cmp.el || cmp;            // Convert absolute to floatParent-relative coordinates if necessary.            var xy = me.el.getAlignToXY(cmp, pos || me.defaultAlign, off);            if (me.floatParent) {                var r = me.floatParent.getTargetEl().getViewRegion();                xy[0] -= r.x;                xy[1] -= r.y;            }            me.showAt(xy);            me.doConstrain();        }        return me;    }}); // StartMenu
 |