From f069d099df912f1a8ce508691e51364bcac55105 Mon Sep 17 00:00:00 2001 From: terencehill Date: Mon, 3 Mar 2014 23:12:08 +0100 Subject: [PATCH] Apply the selected language, restarting the menu, only if it's different from the current one; display a warning dialog when switching language while connected --- qcsrc/menu/classes.c | 1 + qcsrc/menu/xonotic/dialog_firstrun.c | 8 +++++- .../dialog_settings_user_languagewarning.c | 26 +++++++++++++++++++ qcsrc/menu/xonotic/languagelist.c | 10 ++++--- qcsrc/menu/xonotic/mainwindow.c | 5 ++++ 5 files changed, 46 insertions(+), 4 deletions(-) create mode 100644 qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c diff --git a/qcsrc/menu/classes.c b/qcsrc/menu/classes.c index 1de86b6474..ff1210c747 100644 --- a/qcsrc/menu/classes.c +++ b/qcsrc/menu/classes.c @@ -35,6 +35,7 @@ #include "xonotic/dialog_settings_effects.c" #include "xonotic/dialog_settings_audio.c" #include "xonotic/dialog_settings_user.c" +#include "xonotic/dialog_settings_user_languagewarning.c" #include "xonotic/dialog_settings_misc.c" #include "xonotic/dialog_multiplayer.c" #include "xonotic/dialog_multiplayer_playersetup.c" diff --git a/qcsrc/menu/xonotic/dialog_firstrun.c b/qcsrc/menu/xonotic/dialog_firstrun.c index 01ce7ba434..1b975da2b1 100644 --- a/qcsrc/menu/xonotic/dialog_firstrun.c +++ b/qcsrc/menu/xonotic/dialog_firstrun.c @@ -29,6 +29,12 @@ float CheckFirstRunButton(entity me) return 0; } +void firstRun_setLanguage(entity me) +{ + if(prvm_language != cvar_string("_menu_prvm_language")) + localcmd("\nprvm_language \"$_menu_prvm_language\"; saveconfig; menu_restart\n"); +} + void XonoticFirstRunDialog_fill(entity me) { entity e; @@ -69,7 +75,7 @@ void XonoticFirstRunDialog_fill(entity me) me.TR(me); me.TD(me, 6, 2, e = makeXonoticLanguageList()); e.name = "languageselector_firstrun"; - e.doubleClickCommand = "prvm_language \"$_menu_prvm_language\"; saveconfig; menu_restart"; + e.setLanguage = firstRun_setLanguage; me.TR(me); me.TR(me); diff --git a/qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c b/qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c new file mode 100644 index 0000000000..c830b5583a --- /dev/null +++ b/qcsrc/menu/xonotic/dialog_settings_user_languagewarning.c @@ -0,0 +1,26 @@ +#ifdef INTERFACE +CLASS(XonoticLanguageWarningDialog) EXTENDS(XonoticDialog) + METHOD(XonoticLanguageWarningDialog, fill, void(entity)) // to be overridden by user to fill the dialog with controls + ATTRIB(XonoticLanguageWarningDialog, title, string, _("Warning")) + ATTRIB(XonoticLanguageWarningDialog, color, vector, SKINCOLOR_DIALOG_HUDCONFIRM) + ATTRIB(XonoticLanguageWarningDialog, intendedWidth, float, 0.6) + ATTRIB(XonoticLanguageWarningDialog, rows, float, 5) + ATTRIB(XonoticLanguageWarningDialog, columns, float, 4) +ENDCLASS(XonoticLanguageWarningDialog) +#endif + +#ifdef IMPLEMENTATION +void XonoticLanguageWarningDialog_fill(entity me) +{ + entity e; + me.TR(me); + me.TD(me, 1, 4, e = makeXonoticTextLabel(0, _("While connected language changes will be applied only to the menu,"))); + me.TR(me); + me.TD(me, 1, 4, e = makeXonoticTextLabel(0, _("full language changes will take effect starting from the next game"))); + me.TR(me); + me.TR(me); + // reconnect command doesn't work properly, otherwise it would replace disconnect + me.TD(me, 1, 2, e = makeXonoticCommandButton(_("Disconnect now"), '0 0 0', "disconnect", 0)); + me.TD(me, 1, 2, e = makeXonoticCommandButton(_("Switch language"), '0 0 0', "prvm_language \"$_menu_prvm_language\"; menu_restart; menu_cmd languageselect", 0)); +} +#endif diff --git a/qcsrc/menu/xonotic/languagelist.c b/qcsrc/menu/xonotic/languagelist.c index 5be639a075..6e18506db8 100644 --- a/qcsrc/menu/xonotic/languagelist.c +++ b/qcsrc/menu/xonotic/languagelist.c @@ -26,8 +26,6 @@ CLASS(XonoticLanguageList) EXTENDS(XonoticListBox) METHOD(XonoticLanguageList, languageParameter, string(entity, float, float)) ATTRIB(XonoticLanguageList, name, string, "languageselector") // change this to make it noninteractive (for first run dialog) - - ATTRIB(XonoticLanguageList, doubleClickCommand, string, "prvm_language \"$_menu_prvm_language\"\nmenu_restart\nmenu_cmd languageselect") ENDCLASS(XonoticLanguageList) entity makeXonoticLanguageList(); @@ -172,7 +170,13 @@ void XonoticLanguageList_getLanguages(entity me) void XonoticLanguageList_setLanguage(entity me) { - localcmd(sprintf("\n%s\n", me.doubleClickCommand)); + if(prvm_language != cvar_string("_menu_prvm_language")) + { + if(!(gamestatus & GAME_CONNECTED)) + localcmd("\nprvm_language \"$_menu_prvm_language\"; menu_restart; menu_cmd languageselect\n"); + else + DialogOpenButton_Click(me, main.languageWarningDialog); + } } string XonoticLanguageList_languageParameter(entity me, float i, float key) diff --git a/qcsrc/menu/xonotic/mainwindow.c b/qcsrc/menu/xonotic/mainwindow.c index 72cecea19c..debe6bd975 100644 --- a/qcsrc/menu/xonotic/mainwindow.c +++ b/qcsrc/menu/xonotic/mainwindow.c @@ -16,6 +16,7 @@ CLASS(MainWindow) EXTENDS(ModalController) ATTRIB(MainWindow, crosshairDialog, entity, NULL) ATTRIB(MainWindow, hudDialog, entity, NULL) ATTRIB(MainWindow, hudconfirmDialog, entity, NULL) + ATTRIB(MainWindow, languageWarningDialog, entity, NULL) ATTRIB(MainWindow, mainNexposee, entity, NULL) ATTRIB(MainWindow, fadedAlpha, float, SKINALPHA_BEHIND) ATTRIB(MainWindow, dialogToShow, entity, NULL) @@ -135,6 +136,10 @@ void MainWindow_configureMainWindow(entity me) i.configureDialog(i); me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); + me.languageWarningDialog = i = spawnXonoticLanguageWarningDialog(); + i.configureDialog(i); + me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, SKINALPHAS_MAINMENU_z); + // dialog used by singleplayer me.winnerDialog = i = spawnXonoticWinnerDialog(); -- 2.39.2