From e0337f438d7d95da53232fe06c4d4da36192b95a Mon Sep 17 00:00:00 2001 From: otta8634 Date: Sun, 9 Mar 2025 14:00:44 +0800 Subject: [PATCH] Add a confirmation dialog for changing HUD skin For a button that overrides almost all often-changed HUD settings, it really deserves a confirmation dialog. Such dialogs are also used by the factory reset button, and the reset keybindings button. Decided to create the dialog in the same file as the hudsetup exit dialog since they're tied together. --- qcsrc/menu/xonotic/dialog_hudsetup_exit.qc | 33 +++++++++++++++++++--- qcsrc/menu/xonotic/dialog_hudsetup_exit.qh | 10 +++++++ qcsrc/menu/xonotic/mainwindow.qc | 4 +++ qcsrc/menu/xonotic/mainwindow.qh | 1 + 4 files changed, 44 insertions(+), 4 deletions(-) diff --git a/qcsrc/menu/xonotic/dialog_hudsetup_exit.qc b/qcsrc/menu/xonotic/dialog_hudsetup_exit.qc index 6888db546..40a115e64 100644 --- a/qcsrc/menu/xonotic/dialog_hudsetup_exit.qc +++ b/qcsrc/menu/xonotic/dialog_hudsetup_exit.qc @@ -9,13 +9,38 @@ #include "hudskinlist.qh" #include "colorpicker_string.qh" #include "checkbox.qh" +#include "mainwindow.qh" #include "commandbutton.qh" +void HUDSkinList_Reset_Click(entity me, entity btn) +{ + DialogOpenButton_Click(me, main.skinResetDialog); +} + +void XonoticSkinResetDialog_fill(entity me) +{ + entity e; + if (!hudskinlist) + hudskinlist = makeXonoticHUDSkinList(); + + me.TR(me); + me.TD(me, 1, 2, makeXonoticTextLabel(0.5, _("Are you sure you want to reset your HUD to this skin?"))); + me.TR(me); + me.TR(me); + me.TD(me, 1, 1, e = makeXonoticButton(_("Yes"), '1 0 0')); + e.onClick = SetHUDSkin_Click; + e.onClickEntity = hudskinlist; + me.TD(me, 1, 1, e = makeXonoticButton(_("No"), '0 1 0')); + e.onClick = Dialog_Close; + e.onClickEntity = me; +} + void XonoticHUDExitDialog_fill(entity me) { entity e; int i; - hudskinlist = makeXonoticHUDSkinList(); + if (!hudskinlist) + hudskinlist = makeXonoticHUDSkinList(); me.TR(me); me.TD(me, 1, 4, makeXonoticHeaderLabel(_("HUD skins"))); @@ -33,11 +58,11 @@ void XonoticHUDExitDialog_fill(entity me) e.onClick = HUDSkinList_Refresh_Click; e.onClickEntity = hudskinlist; me.TD(me, 1, 2.2, e = makeXonoticButton(_("Set skin"), '0 0 0')); - e.onClick = SetHUDSkin_Click; - e.onClickEntity = hudskinlist; + e.onClick = HUDSkinList_Reset_Click; + e.onClickEntity = me; me.gotoRC(me, me.rows - 2.5, 0); me.TD(me, 1, 2, e = makeXonoticButton_T(_("Save current skin"), '0 0 0', - "Note: HUD skins are saved in data/data/ directory and can be manually renamed/deleted from there")); + _("Note: HUD skins are saved in data/data/ directory and can be manually renamed/deleted from there"))); e.onClick = SaveHUDSkin_Click; e.onClickEntity = hudskinlist; me.TD(me, 1, 2, e = makeXonoticInputBox(0, string_null)); diff --git a/qcsrc/menu/xonotic/dialog_hudsetup_exit.qh b/qcsrc/menu/xonotic/dialog_hudsetup_exit.qh index 8a4479c6f..f58cd0618 100644 --- a/qcsrc/menu/xonotic/dialog_hudsetup_exit.qh +++ b/qcsrc/menu/xonotic/dialog_hudsetup_exit.qh @@ -11,3 +11,13 @@ CLASS(XonoticHUDExitDialog, XonoticRootDialog) ATTRIB(XonoticHUDExitDialog, name, string, "HUDExit"); ATTRIB(XonoticHUDExitDialog, requiresConnection, float, true); ENDCLASS(XonoticHUDExitDialog) + +#include "dialog.qh" +CLASS(XonoticSkinResetDialog, XonoticDialog) + METHOD(XonoticSkinResetDialog, fill, void(entity)); + ATTRIB(XonoticSkinResetDialog, title, string, _("Reset HUD skin")); + ATTRIB(XonoticSkinResetDialog, color, vector, SKINCOLOR_DIALOG_QUIT); + ATTRIB(XonoticSkinResetDialog, intendedWidth, float, 0.5); + ATTRIB(XonoticSkinResetDialog, rows, float, 3); + ATTRIB(XonoticSkinResetDialog, columns, float, 2); +ENDCLASS(XonoticSkinResetDialog) diff --git a/qcsrc/menu/xonotic/mainwindow.qc b/qcsrc/menu/xonotic/mainwindow.qc index 039d3452f..a4d6ec5e5 100644 --- a/qcsrc/menu/xonotic/mainwindow.qc +++ b/qcsrc/menu/xonotic/mainwindow.qc @@ -196,6 +196,10 @@ void MainWindow_configureMainWindow(entity me) i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); + me.skinResetDialog = i = NEW(XonoticSkinResetDialog); + i.configureDialog(i); + me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); + me.cvarsDialog = i = NEW(XonoticCvarsDialog); i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); diff --git a/qcsrc/menu/xonotic/mainwindow.qh b/qcsrc/menu/xonotic/mainwindow.qh index 24adc3701..536632b51 100644 --- a/qcsrc/menu/xonotic/mainwindow.qh +++ b/qcsrc/menu/xonotic/mainwindow.qh @@ -12,6 +12,7 @@ CLASS(MainWindow, ModalController) ATTRIB(MainWindow, mapInfoDialog, entity); ATTRIB(MainWindow, userbindEditDialog, entity); ATTRIB(MainWindow, bindingsResetDialog, entity); + ATTRIB(MainWindow, skinResetDialog, entity); ATTRIB(MainWindow, winnerDialog, entity); ATTRIB(MainWindow, serverInfoDialog, entity); ATTRIB(MainWindow, cvarsDialog, entity); -- 2.39.5