macoslinuxwindowsinboxwhatsappicloudtweetdeckhipchattelegramhangoutsslackgmailskypefacebook-workplaceoutlookemailmicrosoft-teamsdiscordmessengercustom-services
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
270 lines
6.7 KiB
270 lines
6.7 KiB
9 years ago
|
/*!
|
||
|
* Ext JS Library
|
||
|
* Copyright(c) 2006-2014 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', {
|
||
|
// This must be a toolbar. we rely on acquired toolbar classes and inherited toolbar methods for our
|
||
|
// child items to instantiate and render correctly.
|
||
|
extend: 'Ext.toolbar.Toolbar',
|
||
|
|
||
|
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: Ext.themeName === 'neptune' ? 70 : 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 = {
|
||
|
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) {
|
||
|
btn.disable();
|
||
|
win.show(null, function() {
|
||
|
btn.enable();
|
||
|
});
|
||
|
} else if (win.active) {
|
||
|
btn.disable();
|
||
|
win.on('hide', function() {
|
||
|
btn.enable();
|
||
|
}, null, {single: true});
|
||
|
win.minimize();
|
||
|
} else {
|
||
|
win.toFront();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
addTaskButton: function(win) {
|
||
|
var config = {
|
||
|
iconCls: win.iconCls,
|
||
|
enableToggle: true,
|
||
|
toggleGroup: 'all',
|
||
|
width: 140,
|
||
|
margin: '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);
|
||
|
}
|
||
|
});
|