/**
* Project : AMDA-NG4
* Name : AmdaApp.js
* @class amdaApp.AmdaApp
* @extends Ext.ux.desktop.App
* @brief Main class defining Amda Desktop and its Modules
* @author Ext JS Library 4.0 Copyright(c) 2006-2011 Sencha Inc. licensing@sencha.com
*/
Ext.define('amdaApp.AmdaApp', {
extend: 'Ext.ux.desktop.App',
requires: [
'Ext.window.MessageBox',
'Ext.ux.desktop.ShortcutModel',
'amdaUI.SampToolBarUI',
'amdaDesktop.DynamicModule',
'MyDesktop.Settings'
],
dynamicModules: {
visu : {
id : 'visu-win',
icon : 'icon-visu_catalog',
title : 'Visualization',
source : 'amdaDesktop.VisuModule',
useLauncher : true
},
statistics : {
id : 'statistics-win',
icon : 'icon-statistics',
title : 'Statistics',
source : 'amdaDesktop.StatisticsModule',
useLauncher : true
},
catalog : {
id : 'catalog-win',
icon : 'icon-catalog',
title : 'Manage catalogs',
source : 'amdaDesktop.CatalogModule',
useLauncher : true
},
param : {
id : 'param-win',
icon : 'icon-parameters',
title : 'Create/modify parameters',
source : 'amdaDesktop.ParameterModule',
useLauncher : true
},
tt : {
id : 'timetab-win',
icon : 'icon-manage-tt',
title : 'Manage Time Tables',
source : 'amdaDesktop.TimeTableModule',
useLauncher : true
},
tt_op : {
id : 'ttsOpe-win',
icon : 'icon-tts',
title : 'Operations on Time Tables',
source : 'amdaDesktop.TimeTableOperationModule',
useLauncher : true
},
plot : {
id : 'plot-win',
icon : 'icon-plot',
title : 'Plot Manager',
source : 'amdaDesktop.PlotModule',
useLauncher : true
},
search : {
id : 'search-win',
icon : 'icon-search',
title : 'Data Mining',
source : 'amdaDesktop.SearchModule',
useLauncher : true
},
download : {
id : 'down-win',
icon : 'icon-download',
title : 'Download data',
source : 'amdaDesktop.DownloadModule',
useLauncher : true
},
upload : {
id : 'up-win',
icon : 'icon-mydata',
title : 'Upload data',
source : 'amdaDesktop.UploadModule',
useLauncher : true
},
interop : {
id : 'interop-win',
icon : 'icon-interop',
title : 'Interoperability',
source : 'amdaDesktop.InteropModule',
useLauncher : true
},
epntap : {
id : 'epntap-win',
icon : 'icon-interop',
title : 'EPN-TAP data',
source : 'amdaDesktop.EpnTapModule',
useLauncher : false
},
info : {
id : 'info-win',
icon : 'icon-information',
title : 'About AMDA',
source : 'amdaDesktop.AboutModule',
useLauncher : false
},
explorer : {
id : 'explorer-win',
icon : 'icon-elements',
title : 'Workspace Explorer',
source : 'amdaDesktop.ExplorerModule',
useLauncher : false
},
my_data : {
id : 'mydata-win',
icon : 'icon-mydata',
title : 'Define parameter',
source : 'amdaDesktop.MyDataModule',
useLauncher : false
},
help : {
id : 'help-win',
icon : 'icon-help',
title : 'Help',
source : 'amdaDesktop.HelpModule',
useLauncher : false
},
feedback : {
id : 'feed-win',
icon : 'icon-feedback',
title : 'Feedback',
source : 'amdaDesktop.FeedbackModule',
useLauncher : false
},
filters : {
id : 'filters-win',
icon : 'icon-filter',
title : 'Filters',
source : 'amdaDesktop.FiltersModule',
useLauncher : false
},
result : {
id : 'result-win',
contentId : 'resultUI',
icon : 'icon-results',
title : 'Results',
source : 'amdaDesktop.ResultModule',
useLauncher : false
},
astro : {
id : 'astroimages-win',
icon : 'icon-interop',
title : 'Astronomical Images',
source : 'amdaDesktop.AstroImagesModule',
useLauncher : false
}
},
// IDs of Modules working with parameters; used in Alias Node
//TODO stats-win
paramModulesID : ['plot-win', 'param-win', 'search-win', 'down-win'],
// Important system constants
MAX_UPLOADED_FILE_SIZE : max_uploaded_file_size, // in B, from my_config.php
listeners : {
scope : this,
beforeunload : function ()
{
var interopModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id);
if (interopModule)
interopModule.forceSampDisconnect();
return true;
},
ready : function ()
{
AmdaAction.cleanUserWS(function(res,e){},this);
}
},
init: function()
{
// custom logic before getXYZ methods get called...
this.callParent();
// now ready...
//override createWindow method of desktop
Ext.override(Ext.ux.desktop.Desktop, {
createWindow: function (config, cls) {
var me = this;
var win = this.callParent([config,cls]);
win.on({
boxready: function (w) {
w.dd.xTickSize = me.xTickSize;
w.dd.yTickSize = me.yTickSize;
if (w.resizer) {
w.resizer.widthIncrement = me.xTickSize;
w.resizer.heightIncrement = me.yTickSize;
}
if (w.y < 0)
w.el.setY(0);
if (w.x + w.width > me.el.getWidth())
w.el.setX(me.el.getWidth()-w.width);
if (w.y + w.height > me.el.getHeight())
w.el.setY((me.el.getHeight()-w.height > 0) ? me.el.getHeight()-w.height : 0);
},
single: true
});
return win;
}
});
},
//create InfoBox
infoMsg : function(msg) {
Ext.Msg.show({
title: 'AMDA Info',
cls: 'infoMsg',
msg: msg,
modal: false,
autoScroll: true,
resizable: true,
icon: Ext.Msg.INFO,
buttons: Ext.Msg.OK
});
},
//create InfoBox
infoMsgLong : function(msg) {
Ext.Msg.show({
title: 'AMDA Info',
cls: 'infoMsgLong',
msg: msg,
modal: false,
autoScroll: true,
resizable: true,
icon: Ext.Msg.INFO,
buttons: Ext.Msg.OK
});
},
//create WarningBox
warningMsg : function(msg) {
Ext.Msg.show({
title: 'Attention',
msg: msg,
icon: Ext.Msg.WARNING,
buttons: Ext.Msg.OK
});
},
//create ErrorBox
errorMsg : function(msg) {
Ext.Msg.show({
title: 'Failure',
msg: msg,
icon: Ext.Msg.ERROR,
buttons: Ext.Msg.OK
});
},
// add info icon; onCick AmdaHelp is shown
addAmdaInfo : function(help, style) {
if (style) {
help += '" style="' + style;
}
var html = '';
msg += (' Name : '+result['first_name']+' '+result['name']+'
');
msg += ('Groups : '+result['group']+'
');
msg += ('Email : '+result['email']+'
');
msg += ('Registration date : '+result['date']+'
');
msg += ('Disk space total / used / available : '+result['total']+' / '+result['used']+' / '+result['available']+' MB
');
this.infoMsg(msg);
}
else
{
//ERROR
this.errorMsg('Cannot get user info');
}
}
else
{
// FAILURE
this.errorMsg('Cannot get user info : '+e.message);
}
},
guestLogout: function() {
Ext.Msg.show({
title : 'Logout',
msg :'Your guest workspace is to be deleted. Continue logout ?',
buttons : Ext.Msg.YESNO,
iconCls : 'logout',
fn : function(btn) {
if (btn == 'yes'){
AmdaAction.logout(true, function(){
sessionID = '';
window.location.href ='index.html';
});
}
}
});
},
forceLogout: function(){
// myDesktopApp.warningMsg('Your guest session is finished');
AmdaAction.logout(true, function(){
sessionID = '';
window.location.href ='index.html';
});
},
saveSessionState : function()
{
var me = this;
Ext.Msg.show({
title : 'Logout',
msg :'Do you want to keep current windows sizes and locations
for the next sessions?',
buttons : Ext.Msg.YESNOCANCEL,
iconCls : 'logout',
fn : function(btn) {
if (btn == 'yes'){
//set wallpaper
Ext.state.Manager.getProvider().set(me.desktop.id+'_wallpaper',me.desktop.getWallpaper());
Ext.state.Manager.getProvider().on({
scope : this,
aftersave : function(provider) {
sessionID = '';
window.location.href ='index.html';
}
});
Ext.state.Manager.getProvider().saveState();
AmdaAction.logout(false);
}
else if (btn == 'no')
{
Ext.state.Manager.getProvider().on({
scope : this,
aftersave : function(provider) {
sessionID = '';
window.location.href ='index.html';
}
});
Ext.state.Manager.getProvider().set(me.desktop.id+'_wallpaper',me.desktop.getWallpaper());
Ext.state.Manager.getProvider().saveLastTime();
AmdaAction.logout(false);
}
}
});
},
onSettings: function () {
var dlg = new MyDesktop.Settings({
desktop: this.desktop
});
dlg.show();
},
/**
* initialization at the start of AMDA-NG webApplication
*/
initProject : function()
{
moduleIds = new Ext.util.MixedCollection();
// Adding Workspace Explorer Id
moduleIds.add(this.dynamicModules.explorer.id);
moduleIds.each(function(item) {
this.getLoadedModule(item, true, function (module) {
module.createWindow();
});
}, this);
if (freeSpace < diskQuota / 20) {
myDesktopApp.warningMsg('Think of cleaning up your work space.
Only ' +
Math.round(freeSpace/1024/1024)+ 'MB of '+Math.round(diskQuota/1024/1024) +
'MB rests');
}
if (isFirstVisit && !isGuest) {
if (isMigration) { // isSpecialInfo
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function(module) {
module.createWindow(isSpecialInfo, 'Welcome to AMDA', true);
if ( isOldWS ) {
var win = myDesktopApp.getDesktop().getWindow(myDesktopApp.dynamicModules.info.id);
win.on({
show : function() {
Ext.Msg.show({
title:'Welcome to new AMDA',
msg: 'It is your first visit to the new version of AMDA.
'+
'Do you want to copy here your workspace from the old AMDA ?',
buttons: Ext.Msg.YESNO,
icon: Ext.Msg.QUESTION,
fn : function (btn) {
if (btn == 'yes') {
loadMask.show();
AmdaAction.convertWS(function(res,e){
var explorerModule = myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.explorer.id);
explorerModule.filtersStore.reload();
loadMask.hide();
if (res.success == true) {
myDesktopApp.infoMsgLong('Your Wokspace has been copied to new AMDA
' + res.msg);
}
else {
myDesktopApp.errorMsg(res.error);
}
});
}
}
});
},
scope : this });
var yy = Ext.getBody().getViewSize().height / 3;
win.setPosition(0,yy,true);
}
})
}
else {
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.help.id, true, function(module) {
module.createWindow();
});
}
}
else {
if (isSpecialInfo && !isNewInfo) {
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function(module) {
module.createWindow(isSpecialInfo, 'Welcome on AMDA', true);
});
}
}
if (isNewInfo) {
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.info.id, true, function(module) {
// module.createWindow('releaseNotes.' + AMDAVERSION, 'New Release V'+ AMDAVERSION);
module.createWindow(news, 'Amda Latest News');
});
}
if (isGuest) {
myDesktopApp.warningMsg("Welcome to Guest Session
Guest session lasts for "+
guestSessionDuration/3600+" h maximum
"+
"For extended use time and functionalities (saved sessions)
please register at amda@irap.omp.eu");
Ext.Function.defer(myDesktopApp.warningMsg,(guestSessionDuration-300)*1000, this, ["Your session will be closed in 5 min!"]);
Ext.Function.defer(myDesktopApp.forceLogout, guestSessionDuration*1000);
}
this.desktop.taskbar.tray.width = 130;
this.desktop.taskbar.insert(4,new amdaUI.SampToolBarUI({id : 'samptb', onSwitchConnect : function () {
myDesktopApp.getLoadedModule(myDesktopApp.dynamicModules.interop.id, true, function(module) {
module.switchSampConnect();
});
}}));
}
});