- /**\r
- * Call GuiLoader to load default perspective and associated views.\r
- */\r
- var perspectiveClassName = qx.core.Setting.get("ria.Perspective")\r
- if(!perspectiveClassName){\r
- this.error("Cannot find default perspective setting ! Please check your config.json file! (CUSTOM_PERSPECTIVE, line 23).");\r
- return;\r
- }\r
- var perspectiveClass = qx.Class.getByName(perspectiveClassName);\r
- if(!perspectiveClass){\r
- this.error("Cannot find class for default perspective ("+perspectiveClassName+"). Please check your config.json file! (CUSTOM_PERSPECTIVE, line 23).");\r
- return;\r
- }\r
- var perspective = new perspectiveClass;\r
- perspective.initViewPanes(viewsManager);\r
- perspective.initViews(viewsManager); \r
+ this.loadPerspective();\r
+ },\r
+ \r
+ /**\r
+ * Load a given perspective by its name.\r
+ * @param perspectiveName {String} Perspective to load\r
+ */\r
+ loadPerspective : function(perspectiveName){\r
+ if(perspectiveName){\r
+ this.setActivePerspectiveName(perspectiveName);\r
+ this.rebuildPerspectiveMenus();\r
+ }else{\r
+ perspectiveName = this.getActivePerspectiveName();\r
+ }\r
+ var viewsManager = org.argeo.ria.components.ViewsManager.getInstance();\r
+ if(this.getActivePerspective()){\r
+ this.getActivePerspective().remove(viewsManager);\r
+ }\r
+ var allPerspectives = this.getPerspectives(); \r
+ var perspectiveClass = allPerspectives[perspectiveName];\r
+ if(!perspectiveClass){\r
+ this.error("Cannot find class for startup perspective : "+perspectiveName);\r
+ return;\r
+ }\r
+ var perspective = new perspectiveClass;\r
+ perspective.initViewPanes(viewsManager);\r
+ perspective.initViews(viewsManager);\r
+ this.setActivePerspective(perspective);\r
+ },\r
+ \r
+ /**\r
+ * After switching perspective, call this function to rebuild menu with the right selected.\r
+ */\r
+ rebuildPerspectiveMenus : function(){\r
+ var switchCommand = this.getCommandsDefinitions()["switchperspective"];\r
+ switchCommand.submenu = [];\r
+ var allPerspectives = this.getPerspectives();\r
+ for(var key in allPerspectives){\r
+ switchCommand.submenu.push({\r
+ "label":(allPerspectives[key].LABEL || key)+(key==this.getActivePerspectiveName()?" (current)":""),\r
+ "icon" :(allPerspectives[key].ICON || null),\r
+ "commandId":key,\r
+ "disabled" : (key==this.getActivePerspectiveName()?true:false)\r
+ });\r
+ }\r
+ if(switchCommand.command){ // Command already created : force reload\r
+ switchCommand.command.clearMenus();\r
+ switchCommand.command.setMenu(switchCommand.submenu);\r
+ }\r
+ },\r
+\r
+ /**\r
+ * Specific action of calling an external URL without triggering the "close()" method\r
+ * of Application.\r
+ * @param hrefValue {String} A download url that should reply with specific "attachment" header to avoid leaving the application.\r
+ */\r
+ javascriptDownloadLocation: function(hrefValue){\r
+ this.interruptClose = true;\r
+ document.location.href = hrefValue;\r
+ this.interruptClose = false;\r
+ },\r
+ \r
+ /**\r
+ * Called at Application ending (closing the browser).\r
+ */\r
+ close : function(){\r
+ if(this.interruptClose) return ; \r
+ if(this.getActivePerspective()){\r
+ this.getActivePerspective().remove(org.argeo.ria.components.ViewsManager.getInstance());\r
+ } \r
+ this.base(arguments);\r
+\r