From 78ef0c1682ad6c4438a5ac06540cc9315b0f2254 Mon Sep 17 00:00:00 2001 From: phosit Date: Sat, 24 Aug 2024 17:15:50 +0200 Subject: [PATCH] Return a promise from setButtonCaptionsAndVisibility Now It's not hardcoded what is done if a button is pressed. The caller can decide that. Previously one had to call this function and then overwrite the on Press attribute of each button. Rename "Visibitily" to "Visibility" in setButtonCaptionsAndVisibility. --- .../mods/mod/gui/colormixer/colormixer.js | 13 +++++++----- .../data/mods/mod/gui/common/utilities.js | 20 +++++++++---------- binaries/data/mods/mod/gui/msgbox/msgbox.js | 7 ++++--- .../timedconfirmation/timedconfirmation.js | 7 +++++-- 4 files changed, 27 insertions(+), 20 deletions(-) diff --git a/binaries/data/mods/mod/gui/colormixer/colormixer.js b/binaries/data/mods/mod/gui/colormixer/colormixer.js index 97690cdc0e..51f594b683 100644 --- a/binaries/data/mods/mod/gui/colormixer/colormixer.js +++ b/binaries/data/mods/mod/gui/colormixer/colormixer.js @@ -19,7 +19,7 @@ class ColorMixer this.setup(color); } - setup(color) + async setup(color) { Engine.GetGUIObjectByName("titleBar").caption = translate("Color"); Engine.GetGUIObjectByName("infoLabel").caption = translate("Move the sliders to change the Red, Green and Blue components of the Color"); @@ -31,7 +31,8 @@ class ColorMixer this.panel.size = "50%-" + lRDiff + " 50%-" + uDDiff + " 50%+" + lRDiff + " 50%+" + uDDiff; const button = []; - setButtonCaptionsAndVisibitily(button, this.captions, cancelHotkey, "cmButton"); + const closePromise = + setButtonCaptionsAndVisibility(button, this.captions, cancelHotkey, "cmButton"); distributeButtonsHorizontally(button, this.captions); const c = color.split(" "); @@ -67,9 +68,11 @@ class ColorMixer // Update return color on cancel to prevent malformed values from initial input. color = this.color.join(" "); - cancelHotkey.onPress = () => { Engine.PopGuiPage(color); }; - button[0].onPress = () => { Engine.PopGuiPage(color); }; - button[1].onPress = () => { Engine.PopGuiPage(this.color.join(" ")); }; + const buttonIndex = await closePromise; + if (buttonIndex === 0) + Engine.PopGuiPage(color); + else + Engine.PopGuiPage(this.color.join(" ")); } updateFromSlider(index) diff --git a/binaries/data/mods/mod/gui/common/utilities.js b/binaries/data/mods/mod/gui/common/utilities.js index 127c42239a..66dc8d4b0e 100644 --- a/binaries/data/mods/mod/gui/common/utilities.js +++ b/binaries/data/mods/mod/gui/common/utilities.js @@ -19,17 +19,17 @@ function distributeButtonsHorizontally(button, captions) } } -function setButtonCaptionsAndVisibitily(button, captions, cancelHotkey, name) +function setButtonCaptionsAndVisibility(button, captions, cancelHotkey, name) { - captions.forEach((caption, i) => { - button[i] = Engine.GetGUIObjectByName(name + (i + 1)); - button[i].caption = caption; - button[i].hidden = false; - button[i].onPress = () => { - Engine.PopGuiPage(i); - }; + return new Promise(resolve => { + captions.forEach((caption, i) => { + button[i] = Engine.GetGUIObjectByName(name + (i + 1)); + button[i].caption = caption; + button[i].hidden = false; + button[i].onPress = resolve.bind(null, i); - if (i == 0) - cancelHotkey.onPress = button[i].onPress; + if (i == 0) + cancelHotkey.onPress = button[i].onPress; + }); }); } diff --git a/binaries/data/mods/mod/gui/msgbox/msgbox.js b/binaries/data/mods/mod/gui/msgbox/msgbox.js index a52e34e0de..652dbc0566 100644 --- a/binaries/data/mods/mod/gui/msgbox/msgbox.js +++ b/binaries/data/mods/mod/gui/msgbox/msgbox.js @@ -2,7 +2,7 @@ * Currently limited to at most 3 buttons per message box. * The convention is to have "cancel" appear first. */ -function init(data) +async function init(data) { // Set title Engine.GetGUIObjectByName("mbTitleBar").caption = data.title; @@ -15,7 +15,6 @@ function init(data) // Default behaviour let mbCancelHotkey = Engine.GetGUIObjectByName("mbCancelHotkey"); - mbCancelHotkey.onPress = Engine.PopGuiPage; // Calculate size let mbLRDiff = data.width / 2; @@ -25,6 +24,8 @@ function init(data) let captions = data.buttonCaptions || [translate("OK")]; let mbButton = []; - setButtonCaptionsAndVisibitily(mbButton, captions, mbCancelHotkey, "mbButton"); + const closePromise = setButtonCaptionsAndVisibility(mbButton, captions, mbCancelHotkey, "mbButton"); distributeButtonsHorizontally(mbButton, captions); + + Engine.PopGuiPage(await closePromise); } diff --git a/binaries/data/mods/mod/gui/timedconfirmation/timedconfirmation.js b/binaries/data/mods/mod/gui/timedconfirmation/timedconfirmation.js index b6e99e7129..2a2c8f7435 100644 --- a/binaries/data/mods/mod/gui/timedconfirmation/timedconfirmation.js +++ b/binaries/data/mods/mod/gui/timedconfirmation/timedconfirmation.js @@ -23,7 +23,7 @@ class TimedConfirmation this.setup(data); } - setup(data) + async setup(data) { Engine.GetGUIObjectByName("tmcTitleBar").caption = data.title; @@ -46,8 +46,11 @@ class TimedConfirmation const captions = data.buttonCaptions || [translate("OK")]; const button = []; - setButtonCaptionsAndVisibitily(button, captions, cancelHotkey, "tmcButton"); + const closePromise = + setButtonCaptionsAndVisibility(button, captions, cancelHotkey, "tmcButton"); distributeButtonsHorizontally(button, captions); + + Engine.PopGuiPage(await closePromise); } onTick()