]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/event/CommandsManager.js
Refactoring part I (src move)
[gpl/argeo-slc.git] / org.argeo.slc.webapp / src / main / webapp / source / class / org / argeo / ria / event / CommandsManager.js
diff --git a/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/event/CommandsManager.js b/org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/event/CommandsManager.js
new file mode 100644 (file)
index 0000000..280df75
--- /dev/null
@@ -0,0 +1,251 @@
+/**\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