mirror of
https://gitea.wildfiregames.com/0ad/0ad
synced 2026-08-15 14:43:32 -07:00
75 lines
2.2 KiB
JavaScript
75 lines
2.2 KiB
JavaScript
/**
|
|
* @class TimedConfirmation
|
|
* This class displays confirmation box, which will be closed after defined time in miliseconds.
|
|
*/
|
|
class TimedConfirmation
|
|
{
|
|
messageObject = Engine.GetGUIObjectByName("tmcText");
|
|
panel = Engine.GetGUIObjectByName("tmcMain");
|
|
|
|
constructor()
|
|
{
|
|
this.panel.onTick = this.onTick.bind(this);
|
|
}
|
|
|
|
/**
|
|
* @param {Object} data
|
|
* @param {Number} data.width - The width of the confirmation box
|
|
* @param {Number} data.height - The height of the confirmation box
|
|
* @param {String} data.message - The message to be displayed with parameter for time which will be displayed in seconds
|
|
* @param {String} data.timeParameter - The string used in 'message' for time, e.g 'time' with %(time)s in message
|
|
* @param {Number} data.timeout - The time in miliseconds after which confirmation box closes itself
|
|
* @param {String} data.title - The string displayed in header
|
|
* @param {String|undefined} data.buttonCaptions - The captions used for buttons (if not defined, defaults to 'OK')
|
|
* @param {String|undefined} data.font - The used font
|
|
*/
|
|
setup(data)
|
|
{
|
|
Engine.GetGUIObjectByName("tmcTitleBar").caption = data.title;
|
|
|
|
this.timeout = +data.timeout + Date.now();
|
|
this.message = data.message;
|
|
this.timeParameter = data.timeParameter;
|
|
|
|
if (data.font)
|
|
this.messageObject.font = data.font;
|
|
|
|
this.updateDisplayedTimer(data.timeout);
|
|
|
|
const cancelHotkey = Engine.GetGUIObjectByName("tmcCancelHotkey");
|
|
|
|
const lRDiff = data.width / 2;
|
|
const uDDiff = data.height / 2;
|
|
this.panel.size = "50%-" + lRDiff + " 50%-" + uDDiff + " 50%+" + lRDiff + " 50%+" + uDDiff;
|
|
|
|
const captions = data.buttonCaptions || [translate("OK")];
|
|
|
|
const button = [];
|
|
const closePromise =
|
|
setButtonCaptionsAndVisibility(button, captions, cancelHotkey, "tmcButton");
|
|
distributeButtonsHorizontally(button, captions);
|
|
return closePromise;
|
|
}
|
|
|
|
onTick()
|
|
{
|
|
const remaining = this.timeout - Date.now();
|
|
if (remaining < 1)
|
|
Engine.GetGUIObjectByName("tmcButton1").onPress();
|
|
|
|
this.updateDisplayedTimer(remaining);
|
|
}
|
|
|
|
updateDisplayedTimer(time)
|
|
{
|
|
this.messageObject.caption = sprintf(
|
|
this.message,
|
|
{ [this.timeParameter]: Math.ceil(time / 1000) }
|
|
);
|
|
}
|
|
}
|
|
|
|
export function init(data)
|
|
{
|
|
return new TimedConfirmation().setup(data);
|
|
}
|