From 35719f77887c27bb45b00d72e183931a5205bf1a Mon Sep 17 00:00:00 2001 From: elexis Date: Mon, 28 Oct 2019 13:55:54 +0000 Subject: [PATCH] Toggle mainmenu submenus instead of opening the same submenu on repeated clicks. git-svn-id: https://svn.wildfiregames.com/public/ps/trunk@23105 3db68df2-c116-0410-a063-a993310a9797 --- .../mods/public/gui/pregame/MainMenuItemHandler.js | 43 ++++++++++++++++++---- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/binaries/data/mods/public/gui/pregame/MainMenuItemHandler.js b/binaries/data/mods/public/gui/pregame/MainMenuItemHandler.js index ae2e467a99..94fba1e298 100644 --- a/binaries/data/mods/public/gui/pregame/MainMenuItemHandler.js +++ b/binaries/data/mods/public/gui/pregame/MainMenuItemHandler.js @@ -9,6 +9,8 @@ class MainMenuItemHandler this.menuItems = menuItems; this.lastTickTime = Date.now(); + this.lastOpenItem = undefined; + this.mainMenu = Engine.GetGUIObjectByName("mainMenu"); this.mainMenuButtons = Engine.GetGUIObjectByName("mainMenuButtons"); this.submenu = Engine.GetGUIObjectByName("submenu"); @@ -37,14 +39,7 @@ class MainMenuItemHandler button.caption = item.caption; button.tooltip = item.tooltip; button.enabled = item.enabled === undefined || item.enabled; - button.onPress = () => { - this.closeSubmenu(); - - if (item.onPress) - item.onPress(); - else - this.openSubmenu(i); - }; + button.onPress = this.pressButton.bind(this, item, i); button.hidden = false; }); @@ -52,6 +47,38 @@ class MainMenuItemHandler error("GUI page has space for " + buttons.length + " menu buttons, but " + menuItems.length + " items are provided!"); } + /** + * Expand selected submenu, or collapse if it already is expanded. + */ + pressButton(item, i) + { + if (this.submenu.hidden) + { + this.performButtonAction(item, i); + } + else + { + this.closeSubmenu(); + if (this.lastOpenItem && this.lastOpenItem != item) + this.performButtonAction(item, i); + else + this.lastOpenItem = undefined; + } + } + + /** + * Expand submenu or perform action specified by the button object. + */ + performButtonAction(item, i) + { + this.lastOpenItem = item; + + if (item.onPress) + item.onPress(); + else + this.openSubmenu(i); + } + setupHotkeys(menuItems) { for (let i in menuItems) -- 2.11.4.GIT