--- /dev/null
+/**\r
+ * @author Charles\r
+ * \r
+ */\r
+qx.Class.define("org.argeo.ria.event.CommandsManager",\r
+{\r
+ type : "singleton",\r
+ extend : qx.core.Object,\r
+\r
+ construct : function(){\r
+ this.base(arguments);\r
+ this.setInitialDefinitions(qx.lang.Object.copy(this.getDefinitions()));\r
+ this.addListener("changedCommands", this.createCommands, this);\r
+ },\r
+\r
+ properties : \r
+ {\r
+ definitions : {\r
+ init : {\r
+ "stop" : {\r
+ label : "Stop", \r
+ icon : "resource/slc/process-stop.png",\r
+ shortcut : "Control+s",\r
+ enabled : false,\r
+ menu : null,\r
+ toolbar : "list",\r
+ callback : function(e){},\r
+ command : null\r
+ },\r
+ "quit" : {\r
+ label : "Quit", \r
+ icon : "resource/slc/system-shutdown.png",\r
+ shortcut : "Control+q",\r
+ enabled : true,\r
+ menu : "File",\r
+ toolbar : false,\r
+ callback : function(e){}, \r
+ command : null\r
+ },\r
+ "log" : {\r
+ label : "Show Console", \r
+ icon : "resource/slc/help-contents.png",\r
+ shortcut : "",\r
+ enabled : true,\r
+ menu : "Help",\r
+ menuPosition: "last",\r
+ toolbar : false,\r
+ callback : function(e){ \r
+ org.argeo.ria.components.Logger.getInstance().toggle();\r
+ }, \r
+ command : null\r
+ },\r
+ "help" : {\r
+ label : "About...", \r
+ icon : "resource/slc/help-about.png",\r
+ shortcut : "Control+h",\r
+ enabled : true,\r
+ menu : "Help",\r
+ toolbar : false,\r
+ callback : function(e){\r
+ var win = new org.argeo.ria.components.Modal("About SLC", null, "SLC is a product from Argeo.");\r
+ win.attachAndShow();\r
+ }, \r
+ command : null\r
+ }\r
+ }\r
+ },\r
+ initialDefinitions : {\r
+ init : {}\r
+ }\r
+ },\r
+\r
+ events : {\r
+ "changedCommands" : "qx.event.type.Event"\r
+ },\r
+ \r
+ /*\r
+ *****************************************************************************\r
+ MEMBERS\r
+ *****************************************************************************\r
+ */\r
+\r
+ members :\r
+ {\r
+ createCommands : function(){\r
+ this.menus = {};\r
+ this.toolbars = {};\r
+ var defs = this.getDefinitions();\r
+ for(var key in defs){\r
+ var definition = defs[key];\r
+ var command;\r
+ if(!definition.command){\r
+ command = new org.argeo.ria.event.Command(key, definition.label, definition.icon, definition.shortcut);\r
+ if(definition.submenu){\r
+ var menu = new qx.ui.menu.Menu();\r
+ command.setMenu(menu);\r
+ if(definition.submenuCallback){\r
+ command.setMenuCallback(definition.submenuCallback);\r
+ command.setMenuContext((definition.callbackContext?definition.callbackContext:null));\r
+ }\r
+ }\r
+ command.setEnabled(definition.enabled);\r
+ command.addListener("execute", definition.callback, (definition.callbackContext?definition.callbackContext:this));\r
+ definition.command = command;\r
+ }else{\r
+ command = definition.command;\r
+ }\r
+ if(definition.menu){\r
+ if(!this.menus[definition.menu]) this.menus[definition.menu] = [];\r
+ this.menus[definition.menu].push(definition);\r
+ }\r
+ if(definition.toolbar){\r
+ if(!this.toolbars[definition.toolbar]) this.toolbars[definition.toolbar] = [];\r
+ this.toolbars[definition.toolbar].push(command);\r
+ }\r
+ }\r
+ this.setDefinitions(defs);\r
+ },\r
+ \r
+ refreshCommands : function(viewSelection){\r
+ var defs = this.getDefinitions();\r
+ var xmlNodes = null;\r
+ if(viewSelection.getCount() > 0){\r
+ var xmlNodes = viewSelection.getNodes();\r
+ }\r
+ for(var key in defs){\r
+ var definition = defs[key];\r
+ if(!definition.selectionChange) continue;\r
+ var binded = qx.lang.Function.bind(definition.selectionChange, definition.command);\r
+ binded(viewSelection.getViewId(), xmlNodes);\r
+ }\r
+ },\r
+ \r
+ registerMenuBar : function(menuBar){\r
+ this.addListener("changedCommands", function(){\r
+ this.createMenuButtons(menuBar);\r
+ }, this);\r
+ this.createMenuButtons(menuBar);\r
+ },\r
+\r
+ registerToolBar : function(toolBar){\r
+ this.addListener("changedCommands", function(){\r
+ this.createToolbarParts(toolBar);\r
+ }, this);\r
+ this.createToolbarParts(toolBar);\r
+ }, \r
+ \r
+ createMenuButtons : function(menuBar){\r
+ menuBar.removeAll();\r
+ var anchors = {};\r
+ for(var key in this.menus){\r
+ var menu = new qx.ui.menu.Menu();\r
+ var button = new qx.ui.menubar.Button(key, null, menu);\r
+ var anchorDetected = false;\r
+ for(var i=0; i<this.menus[key].length;i++){\r
+ var def = this.menus[key][i]; \r
+ menu.add(def.command.getMenuButton());\r
+ if(!anchorDetected && def.menuPosition){\r
+ anchorDetected = true;\r
+ anchors[def.menuPosition] = button;\r
+ }\r
+ }\r
+ if(!anchorDetected){\r
+ menuBar.add(button);\r
+ }\r
+ }\r
+ // Add specific anchored buttons\r
+ if(anchors.first) menuBar.addAt(anchors.first, 0);\r
+ else if(anchors.last){\r
+ menuBar.add(anchors.last);\r
+ }\r
+ },\r
+ createToolbarParts : function(toolbar){\r
+ toolbar.removeAll();\r
+ for(var key in this.toolbars){\r
+ var tPart = new qx.ui.toolbar.Part();\r
+ toolbar.add(tPart);\r
+ this.toolbars[key].map(function(command){\r
+ tPart.add(command.getToolbarButton());\r
+ });\r
+ }\r
+ },\r
+ createMenuFromIds : function(commandIdsArray){\r
+ var defs = this.getDefinitions();\r
+ var contextMenu = new qx.ui.menu.Menu();\r
+ for(var i=0;i<commandIdsArray.length;i++){\r
+ var definition = defs[commandIdsArray[i]];\r
+ if(definition){\r
+ var command = definition.command;\r
+ contextMenu.add(command.getMenuButton());\r
+ }\r
+ }\r
+ return contextMenu;\r
+ },\r
+ \r
+ addCommands : function(definitions, callbackContext){\r
+ var crtDefs = this.getDefinitions(); \r
+ for(var key in definitions){\r
+ if(callbackContext) definitions[key]['callbackContext'] = callbackContext;\r
+ crtDefs[key] = definitions[key];\r
+ }\r
+ this.setDefinitions(crtDefs);\r
+ this.fireEvent("changedCommands");\r
+ },\r
+ removeCommands : function(definitions){\r
+ var crtDefs = this.getDefinitions();\r
+ var initDefs = this.getInitialDefinitions();\r
+ for(var key in definitions){\r
+ if(!crtDefs[key]) continue;\r
+ if(initDefs[key]){\r
+ crtDefs[key] = initDefs[key];\r
+ }else{\r
+ delete crtDefs[key];\r
+ }\r
+ }\r
+ this.setDefinitions(crtDefs);\r
+ this.fireEvent("changedCommands");\r
+ },\r
+ \r
+ executeCommand : function(commandId){\r
+ var defs = this.getDefinitions();\r
+ if(defs[commandId] && defs[commandId].command.getEnabled()){\r
+ defs[commandId].command.execute();\r
+ }\r
+ },\r
+ getCommandById : function(commandId){\r
+ var defs = this.getDefinitions();\r
+ if(defs[commandId] && defs[commandId].command){\r
+ return defs[commandId].command;\r
+ } \r
+ },\r
+ addToolbarContextMenu : function(toolbar){\r
+ var menu = new qx.ui.menu.Menu();\r
+ var icon = new qx.ui.menu.RadioButton("Show Icons");\r
+ icon.setValue("icon");\r
+ var text = new qx.ui.menu.RadioButton("Show Text");\r
+ text.setValue("label");\r
+ var both = new qx.ui.menu.RadioButton("Show Both");\r
+ both.setValue("both");\r
+ var mgr = new qx.ui.form.RadioGroup(icon, text, both);\r
+ menu.add(icon);\r
+ menu.add(text);\r
+ menu.add(both);\r
+ toolbar.setContextMenu(menu); \r
+ mgr.addListener("changeValue", function(e){\r
+ this.setShow(e.getData());\r
+ }, toolbar);\r
+ \r
+ }\r
+ }\r
+});
\ No newline at end of file