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);
- }
- });
|