X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.webapp%2Fsrc%2Fmain%2Fwebapp%2Fargeo-ria-src%2Fclass%2Forg%2Fargeo%2Fria%2FApplication.js;fp=org.argeo.slc.webapp%2Fsrc%2Fmain%2Fwebapp%2Fargeo-ria-src%2Fclass%2Forg%2Fargeo%2Fria%2FApplication.js;h=793bb90565078c88f9ffec1dcb554e179eb08c24;hb=78d566f3265acbf80ccc158c01377b49ecac3492;hp=ce299c444ea7ef0404c887f17a99aface1e9eb8b;hpb=7c33e2a8c6043abacba1f7a3e8bb0667cca7d742;p=gpl%2Fargeo-slc.git diff --git a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/Application.js b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/Application.js index ce299c444..793bb9056 100644 --- a/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/Application.js +++ b/org.argeo.slc.webapp/src/main/webapp/argeo-ria-src/class/org/argeo/ria/Application.js @@ -20,15 +20,82 @@ qx.Class.define("org.argeo.ria.Application", { extend : qx.application.Standalone, - settings : { - //"slc.Perspective" : "org.argeo.ria.custom.Perspective" + + statics : { + INSTANCE : null }, - /* - ***************************************************************************** - MEMBERS - ***************************************************************************** - */ + properties : { + perspectives : { + check : "Map", + init : {} + }, + activePerspectiveName : { + check : "String", + init : "" + }, + activePerspective : { + init : null + }, + commandsDefinitions : { + init : { + "stop" : { + label : "Stop", + icon : "resource/slc/process-stop.png", + shortcut : "Control+s", + enabled : false, + menu : null, + toolbar : "list", + callback : function(e){}, + command : null + }, + "switchperspective" : { + label : "Switch Perspective", + icon : "resource/slc/view-pane-tree.png", + shortcut : "", + enabled : true, + menu : "View", + toolbar : false, + submenu : [], + submenuCallback : function(commandId){ + // Defer execution to assure that the submenu is closed + // before it is rebuilt. + qx.event.Timer.once(function(){ + org.argeo.ria.Application.INSTANCE.loadPerspective(commandId); + }, this, 10); + }, + callback : function(e){}, + command : null + }, + "log" : { + label : "Show Console", + icon : "resource/slc/help-contents.png", + shortcut : "", + enabled : true, + menu : "View", + menuPosition: "last", + toolbar : false, + callback : function(e){ + org.argeo.ria.components.Logger.getInstance().toggle(); + }, + command : null + }, + "help" : { + label : "About...", + icon : "resource/slc/help-about.png", + shortcut : "Control+h", + enabled : true, + menu : "View", + toolbar : false, + callback : function(e){ + var win = new org.argeo.ria.components.Modal("About SLC", null, "SLC is a product from Argeo."); + win.attachAndShow(); + }, + command : null + } + } + } + }, members : { @@ -40,6 +107,7 @@ qx.Class.define("org.argeo.ria.Application", { // Call super class this.base(arguments); + this.self(arguments).INSTANCE = this; this.views = {}; var viewsManager = org.argeo.ria.components.ViewsManager.getInstance(); @@ -60,11 +128,43 @@ qx.Class.define("org.argeo.ria.Application", var container = new qx.ui.container.Composite(layout); viewsManager.setViewPanesContainer(container); // Document is the application root - this.getRoot().add(container, {left:0,right:0,top:0,bottom:0}); + this.getRoot().add(container, {left:0,right:0,top:0,bottom:0}); + + // Find available perspectives + var allPerspectives = {}; + for(var key in qx.Bootstrap.$$registry){ + if(qx.Class.hasInterface(qx.Bootstrap.$$registry[key], org.argeo.ria.components.IPerspective)){ + allPerspectives[key] = qx.Bootstrap.$$registry[key]; + } + } + var perspectiveNumber = qx.lang.Object.getLength(allPerspectives); + if(!perspectiveNumber){ + this.error("Cannot find a perspective for startup!"); + return; + } + this.setPerspectives(allPerspectives); + // Choose startup perspective, delete switch menu if only one perspective. + if(perspectiveNumber <= 1){ + delete this.getCommandsDefinitions()["switchperspective"]; + this.setActivePerspectiveName(qx.lang.Object.getKeys(allPerspectives)[0]); + } + else{ + var startupSetting; + try{ + startupSetting = qx.core.Setting.get("ria.StartupPerspective"); + }catch(e){} + if(startupSetting && allPerspectives[startupSetting]){ + this.setActivePerspectiveName(startupSetting); + }else{ + this.setActivePerspectiveName(qx.lang.Object.getKeys(allPerspectives)[0]); + } + this.rebuildPerspectiveMenus(); + } var menuBar = new qx.ui.menubar.MenuBar(); var toolbar = new qx.ui.toolbar.ToolBar(); var commandManager = org.argeo.ria.event.CommandsManager.getInstance(); + commandManager.init(this.getCommandsDefinitions()); commandManager.createCommands(); commandManager.registerMenuBar(menuBar); commandManager.registerToolBar(toolbar); @@ -78,22 +178,48 @@ qx.Class.define("org.argeo.ria.Application", container.add(menuBar); container.add(toolbar); - /** - * Call GuiLoader to load default perspective and associated views. - */ - var perspectiveClassName = qx.core.Setting.get("ria.Perspective") - if(!perspectiveClassName){ - this.error("Cannot find default perspective setting ! Please check your config.json file! (CUSTOM_PERSPECTIVE, line 23)."); - return; - } - var perspectiveClass = qx.Class.getByName(perspectiveClassName); - if(!perspectiveClass){ - this.error("Cannot find class for default perspective ("+perspectiveClassName+"). Please check your config.json file! (CUSTOM_PERSPECTIVE, line 23)."); - return; - } - var perspective = new perspectiveClass; - perspective.initViewPanes(viewsManager); - perspective.initViews(viewsManager); + this.loadPerspective(); + }, + + loadPerspective : function(perspectiveName){ + if(perspectiveName){ + this.setActivePerspectiveName(perspectiveName); + this.rebuildPerspectiveMenus(); + }else{ + perspectiveName = this.getActivePerspectiveName(); + } + var viewsManager = org.argeo.ria.components.ViewsManager.getInstance(); + if(this.getActivePerspective()){ + this.getActivePerspective().remove(viewsManager); + } + var allPerspectives = this.getPerspectives(); + var perspectiveClass = allPerspectives[perspectiveName]; + if(!perspectiveClass){ + this.error("Cannot find class for startup perspective : "+perspectiveName); + return; + } + var perspective = new perspectiveClass; + perspective.initViewPanes(viewsManager); + perspective.initViews(viewsManager); + this.setActivePerspective(perspective); + }, + + rebuildPerspectiveMenus : function(){ + var switchCommand = this.getCommandsDefinitions()["switchperspective"]; + switchCommand.submenu = []; + var allPerspectives = this.getPerspectives(); + for(var key in allPerspectives){ + switchCommand.submenu.push({ + "label":(allPerspectives[key].LABEL || key)+(key==this.getActivePerspectiveName()?" (current)":""), + "icon" :(allPerspectives[key].ICON || null), + "commandId":key, + "disabled" : (key==this.getActivePerspectiveName()?true:false) + }); + } + if(switchCommand.command){ // Command already created : force reload + switchCommand.command.clearMenus(); + switchCommand.command.setMenu(switchCommand.submenu); + } } }