/**
* Ext JS Library
* Copyright(c) 2006-2020 Sencha Inc.
* licensing@sencha.com
* http://www.sencha.com/license
* @class Ext.ux.desktop.App
*/
Ext.define('Ext.ux.desktop.App', {
mixins: {
observable: 'Ext.util.Observable'
},
requires: [
'Ext.container.Viewport',
'Ext.ux.desktop.Desktop'
],
isReady: false,
modules: null,
useQuickTips: true,
constructor: function(config) {
var me = this;
me.mixins.observable.constructor.call(this, config);
if (Ext.isReady) {
Ext.defer(me.init, 10, me);
}
else {
Ext.onReady(me.init, me);
}
},
init: function() {
var me = this,
desktopCfg;
if (me.useQuickTips) {
Ext.QuickTips.init();
}
me.modules = me.getModules();
if (me.modules) {
me.initModules(me.modules);
}
desktopCfg = me.getDesktopConfig();
me.desktop = new Ext.ux.desktop.Desktop(desktopCfg);
me.viewport = new Ext.container.Viewport({
layout: 'fit',
items: [ me.desktop ]
});
Ext.getWin().on('beforeunload', me.onUnload, me);
me.isReady = true;
me.fireEvent('ready', me);
},
/**
* This method returns the configuration object for the Desktop object. A derived
* class can override this method, call the base version to build the config and
* then modify the returned object before returning it.
*/
getDesktopConfig: function() {
var me = this,
cfg = {
app: me,
taskbarConfig: me.getTaskbarConfig()
};
Ext.apply(cfg, me.desktopConfig);
return cfg;
},
getModules: Ext.emptyFn,
/**
* This method returns the configuration object for the Start Button. A derived
* class can override this method, call the base version to build the config and
* then modify the returned object before returning it.
*/
getStartConfig: function() {
var me = this,
cfg = {
app: me,
menu: []
},
launcher;
Ext.apply(cfg, me.startConfig);
Ext.each(me.modules, function(module) {
launcher = module.launcher;
if (launcher) {
launcher.handler = launcher.handler || Ext.bind(me.createWindow, me, [module]);
cfg.menu.push(module.launcher);
}
});
return cfg;
},
createWindow: function(module) {
var window = module.createWindow();
window.show();
},
/**
* This method returns the configuration object for the TaskBar. A derived class
* can override this method, call the base version to build the config and then
* modify the returned object before returning it.
*/
getTaskbarConfig: function() {
var me = this,
cfg = {
app: me,
startConfig: me.getStartConfig()
};
Ext.apply(cfg, me.taskbarConfig);
return cfg;
},
initModules: function(modules) {
var me = this;
Ext.each(modules, function(module) {
module.app = me;
});
},
getModule: function(name) {
var ms = this.modules,
i, len, m;
for (i = 0, len = ms.length; i < len; i++) {
m = ms[i];
// eslint-disable-next-line eqeqeq
if (m.id == name || m.appType == name) {
return m;
}
}
return null;
},
onReady: function(fn, scope) {
if (this.isReady) {
fn.call(scope, this);
}
else {
this.on({
ready: fn,
scope: scope,
single: true
});
}
},
getDesktop: function() {
return this.desktop;
},
onUnload: function(e) {
if (this.fireEvent('beforeunload', this) === false) {
e.stopEvent();
}
}
});