]> git.argeo.org Git - gpl/argeo-slc.git/commitdiff
Better way to handle commands'submenus, to be able to duplicate them in context menus.
authorCharles du Jeu <charles.dujeu@gmail.com>
Mon, 8 Dec 2008 15:08:22 +0000 (15:08 +0000)
committerCharles du Jeu <charles.dujeu@gmail.com>
Mon, 8 Dec 2008 15:08:22 +0000 (15:08 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@1955 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/event/Command.js
org.argeo.slc.webapp/src/main/webapp/source/class/org/argeo/ria/event/CommandsManager.js

index 0026170ade614afde3cd200de47ce08ff78dd2a9..b42fd4338505471e389c4bf2f0b370d00e10a740 100644 (file)
@@ -48,7 +48,7 @@
        this.base(arguments, shortcut);\r
        this.setId(id);\r
        this.setLabel(label);\r
-       this.setIcon(icon);     \r
+       this.setIcon(icon);     \r
   },\r
   \r
   members :\r
@@ -67,8 +67,9 @@
                this.addTooltip(button);\r
                if(this.getMenu()){\r
                        this.addListener("changeMenu", function(event){\r
-                               this.setMenu(event.getData());\r
-                       }, button);\r
+                               button.setMenu(this.getMenuClone());\r
+                       }, this);\r
+                       this.menuClones = [];\r
                }\r
                return button;\r
        },\r
         * @return {qx.ui.menu.Menu}\r
         */\r
        getMenuClone : function(){\r
-               if(!this.menuClone){\r
-                       this.menuClone = new qx.ui.menu.Menu();\r
-                       this.menuClone.setMinWidth(110);\r
+               var menuClone = new qx.ui.menu.Menu();\r
+               var submenus = this.getMenu();\r
+               for(var i=0;i<submenus.length;i++){\r
+                       var button = new qx.ui.menu.Button(submenus[i].label, submenus[i].icon);\r
+                       button.setUserData("commandId", submenus[i].commandId);\r
+                       button.addListener("execute", this.executeSubMenuCallback, this);\r
+                       menuClone.add(button);\r
                }\r
-               return this.menuClone;\r
+               this.menuClones.push(menuClone);\r
+               return menuClone;\r
        },\r
        \r
        /**\r
         * Remove all existing menus and their clones.\r
         */\r
        clearMenus : function(){\r
-               this.getMenu().removeAll();\r
-               this.getMenuClone().removeAll();\r
+               if(!this.getMenu()) return;\r
+               for(var i=0;i<this.menuClones.length;i++){\r
+                       this.menuClones[i].destroy();\r
+               }\r
+               this.menuClones = [];\r
        },\r
        \r
        /**\r
                        menu.add(button);\r
                }else{\r
                        this.getMenu().add(button);\r
-                       this.addSubMenuButton(label, icon, commandId, this.menuClone);\r
                }\r
        },\r
        \r
index 7bd0957dd7d430605674f4ad9c1cc7456b497f87..bf6f6a3f713d25572dd1868e16ba66f89c0aaeb7 100644 (file)
@@ -109,8 +109,7 @@ qx.Class.define("org.argeo.ria.event.CommandsManager",
                        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
+                                       command.setMenu(definition.submenu);\r
                                        if(definition.submenuCallback){\r
                                                command.setMenuCallback(definition.submenuCallback);\r
                                                command.setMenuContext((definition.callbackContext?definition.callbackContext:null));\r
@@ -118,6 +117,10 @@ qx.Class.define("org.argeo.ria.event.CommandsManager",
                                }\r
                                command.setEnabled(definition.enabled);\r
                                command.addListener("execute", definition.callback, (definition.callbackContext?definition.callbackContext:this));\r
+                               if(definition.init){\r
+                                       var binded = qx.lang.Function.bind(definition.init, command);\r
+                                       binded();\r
+                               }\r
                                definition.command = command;\r
                        }else{\r
                                command = definition.command;\r