| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262 | /*! * Ext JS Library 4.0 * Copyright(c) 2006-2011 Sencha Inc. * licensing@sencha.com * http://www.sencha.com/license *//** * @class Ext.ux.desktop.TaskBar * @extends Ext.toolbar.Toolbar */Ext.define('Ext.ux.desktop.TaskBar', {    extend: 'Ext.toolbar.Toolbar', // TODO - make this a basic hbox panel...    requires: [        'Ext.button.Button',        'Ext.resizer.Splitter',        'Ext.menu.Menu',        'Ext.ux.desktop.StartMenu'    ],    alias: 'widget.taskbar',    cls: 'ux-taskbar',    /**     * @cfg {String} startBtnText     * The text for the Start Button.     */    startBtnText: 'Start',    initComponent: function () {        var me = this;        me.startMenu = new Ext.ux.desktop.StartMenu(me.startConfig);        me.quickStart = new Ext.toolbar.Toolbar(me.getQuickStart());        me.windowBar = new Ext.toolbar.Toolbar(me.getWindowBarConfig());        me.tray = new Ext.toolbar.Toolbar(me.getTrayConfig());        me.items = [            {                xtype: 'button',                cls: 'ux-start-button',                iconCls: 'ux-start-button-icon',                menu: me.startMenu,                menuAlign: 'bl-tl',                text: me.startBtnText            },            me.quickStart,            {                xtype: 'splitter', html: ' ',                height: 14, width: 2, // TODO - there should be a CSS way here                cls: 'x-toolbar-separator x-toolbar-separator-horizontal'            },            //'-',            me.windowBar,            '-',            me.tray        ];        me.callParent();    },    afterLayout: function () {        var me = this;        me.callParent();        me.windowBar.el.on('contextmenu', me.onButtonContextMenu, me);    },    /**     * This method returns the configuration object for the Quick Start toolbar. A derived     * class can override this method, call the base version to build the config and     * then modify the returned object before returning it.     */    getQuickStart: function () {        var me = this, ret = {            minWidth: 20,            width: 60,            items: [],            enableOverflow: true        };        Ext.each(this.quickStart, function (item) {            ret.items.push({                tooltip: { text: item.name, align: 'bl-tl' },                //tooltip: item.name,                overflowText: item.name,                iconCls: item.iconCls,                module: item.module,                handler: me.onQuickStartClick,                scope: me            });        });        return ret;    },    /**     * This method returns the configuration object for the Tray toolbar. A derived     * class can override this method, call the base version to build the config and     * then modify the returned object before returning it.     */    getTrayConfig: function () {        var ret = {            width: 80,            items: this.trayItems        };        delete this.trayItems;        return ret;    },    getWindowBarConfig: function () {        return {            flex: 1,            cls: 'ux-desktop-windowbar',            items: [ ' ' ],            layout: { overflowHandler: 'Scroller' }        };    },    getWindowBtnFromEl: function (el) {        var c = this.windowBar.getChildByElement(el);        return c || null;    },    onQuickStartClick: function (btn) {        var module = this.app.getModule(btn.module),            window;        if (module) {            window = module.createWindow();            window.show();        }    },        onButtonContextMenu: function (e) {        var me = this, t = e.getTarget(), btn = me.getWindowBtnFromEl(t);        if (btn) {            e.stopEvent();            me.windowMenu.theWin = btn.win;            me.windowMenu.showBy(t);        }    },    onWindowBtnClick: function (btn) {        var win = btn.win;        if (win.minimized || win.hidden) {            win.show();        } else if (win.active) {            win.minimize();        } else {            win.toFront();        }    },    addTaskButton: function(win) {        var config = {            iconCls: win.iconCls,            enableToggle: true,            toggleGroup: 'all',            width: 140,            margins: '0 2 0 3',            text: Ext.util.Format.ellipsis(win.title, 20),            listeners: {                click: this.onWindowBtnClick,                scope: this            },            win: win        };        var cmp = this.windowBar.add(config);        cmp.toggle(true);        return cmp;    },    removeTaskButton: function (btn) {        var found, me = this;        me.windowBar.items.each(function (item) {            if (item === btn) {                found = item;            }            return !found;        });        if (found) {            me.windowBar.remove(found);        }        return found;    },    setActiveButton: function(btn) {        if (btn) {            btn.toggle(true);        } else {            this.windowBar.items.each(function (item) {                if (item.isButton) {                    item.toggle(false);                }            });        }    }});/** * @class Ext.ux.desktop.TrayClock * @extends Ext.toolbar.TextItem * This class displays a clock on the toolbar. */Ext.define('Ext.ux.desktop.TrayClock', {    extend: 'Ext.toolbar.TextItem',    alias: 'widget.trayclock',    cls: 'ux-desktop-trayclock',    html: ' ',    timeFormat: 'g:i A',    tpl: '{time}',    initComponent: function () {        var me = this;        me.callParent();        if (typeof(me.tpl) == 'string') {            me.tpl = new Ext.XTemplate(me.tpl);        }    },    afterRender: function () {        var me = this;        Ext.Function.defer(me.updateTime, 100, me);        me.callParent();    },    onDestroy: function () {        var me = this;        if (me.timer) {            window.clearTimeout(me.timer);            me.timer = null;        }        me.callParent();    },    updateTime: function () {        var me = this, time = Ext.Date.format(new Date(), me.timeFormat),            text = me.tpl.apply({ time: time });        if (me.lastText != text) {            me.setText(text);            me.lastText = text;        }        me.timer = Ext.Function.defer(me.updateTime, 10000, me);    }});
 |