enable the initial language selector
authorRudolf Polzer <divverent@alientrap.org>
Tue, 18 Jan 2011 08:27:27 +0000 (09:27 +0100)
committerRudolf Polzer <divverent@alientrap.org>
Tue, 18 Jan 2011 08:27:27 +0000 (09:27 +0100)
qcsrc/menu/menu.qc
qcsrc/menu/menu.qh
qcsrc/menu/xonotic/dialog_firstrun.c
qcsrc/menu/xonotic/languagelist.c
qcsrc/menu/xonotic/util.qc

index 8e95cc1dbd036ae6900074cbf219183689973dda..478dc39bc4b289fd07f07768f2709dcf5cd42de9 100644 (file)
@@ -21,6 +21,7 @@ void SUB_Null() { };
 void() m_init =
 {
        cvar_set("_menu_alpha", "0");
+       prvm_language = strzone(cvar_string("prvm_language"));
 
        check_unacceptable_compiler_bugs();
 
index e42595e58265e8ba3553a2a3fd698931f2b6a2c6..3188ef0b01e97bc3c0c771b5cdd3a68f12e0467d 100644 (file)
@@ -41,3 +41,5 @@ void SUB_Null();
 float preMenuInit(); // you have to define this for pre-menu initialization. Return 0 if initialization needs to be retried a frame later, 1 if it succeeded.
 void preMenuDraw(); // this is run before the menu is drawn. You may put some stuff there that has to be done every frame.
 void postMenuDraw(); // this is run just after the menu is drawn (or not). Useful to draw something over everything else.
+
+string prvm_language;
index 5b3e0d1077698f1c8155a013211ce166802a9819..b337d138b8ca93c63ede287fa5dd59392cf7440b 100644 (file)
@@ -4,7 +4,7 @@ CLASS(XonoticFirstRunDialog) EXTENDS(XonoticRootDialog)
        ATTRIB(XonoticFirstRunDialog, title, string, _("Welcome"))
        ATTRIB(XonoticFirstRunDialog, color, vector, SKINCOLOR_DIALOG_FIRSTRUN)
        ATTRIB(XonoticFirstRunDialog, intendedWidth, float, 0.6)
-       ATTRIB(XonoticFirstRunDialog, rows, float, 11)
+       ATTRIB(XonoticFirstRunDialog, rows, float, 14)
        ATTRIB(XonoticFirstRunDialog, columns, float, 3)
        ATTRIB(XonoticFirstRunDialog, name, string, "FirstRun")
        ATTRIB(XonoticFirstRunDialog, playerNameLabel, entity, NULL)
@@ -15,6 +15,15 @@ ENDCLASS(XonoticFirstRunDialog)
 #endif
 
 #ifdef IMPLEMENTATION
+float CheckFirstRunButton(entity me)
+{
+       if(cvar_string("_cl_name") != "Player")
+               return 1;
+       if(cvar_string("prvm_language") != prvm_language)
+               return 1; // OK will then reopen the dialog in another language
+       return 0;
+}
+
 void XonoticFirstRunDialog_fill(entity me)
 {
        entity e;
@@ -23,6 +32,15 @@ void XonoticFirstRunDialog_fill(entity me)
                me.TD(me, 2, 3, e = makeXonoticTextLabel(0, _("Please answer a few initial questions to enhance the game experience.")));
                e.allowWrap = 1;
        me.TR(me);
+       me.TR(me);
+               me.TD(me, 1, 3, e = makeXonoticTextLabel(0, _("Text language:")));
+       me.TR(me);
+               me.TD(me, 3, 3, e = makeXonoticLanguageList());
+                       e.name = "languageselector_firstrun";
+                       e.doubleClickCommand = "saveconfig; menu_restart; togglemenu";
+       me.TR(me);
+       me.TR(me);
+
        me.TR(me);
                me.TD(me, 1, 0.5, me.playerNameLabel = makeXonoticTextLabel(0, _("Name:")));
                        me.playerNameLabelAlpha = me.playerNameLabel.alpha;
@@ -42,12 +60,10 @@ void XonoticFirstRunDialog_fill(entity me)
        me.TR(me);
        me.TR(me);
        me.TR(me);
-       me.TR(me);
-       me.TR(me);
 
        // because of the language selector, this is a menu_restart!
        me.gotoRC(me, me.rows - 1, 0);
                me.TD(me, 1, me.columns, e = makeXonoticCommandButton(_("Save settings"), '0 0 0', "saveconfig; menu_restart; togglemenu", COMMANDBUTTON_APPLY));
-               setDependentStringNotEqual(e, "_cl_name", "Player");
+               setDependentWeird(e, CheckFirstRunButton);
 }
 #endif
index 510c7a9ea5e38a6b34f23cd644b280652304e16b..97bbfed46ba7d2ef08708ccb2b0a47246f12950d 100644 (file)
@@ -26,6 +26,7 @@ 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, "menu_restart\ntogglemenu\ndefer 0.1 \"menu_cmd languageselect\"")
 ENDCLASS(XonoticLanguageList)
 
 entity makeXonoticLanguageList();
@@ -114,8 +115,6 @@ void XonoticLanguageList_saveCvars(entity me)
 
 void XonoticLanguageList_clickListBoxItem(entity me, float i, vector where)
 {
-       if(me.name != "languageselector")
-               return;
        if(i == me.lastClickedLanguage)
                if(time < me.lastClickedTime + 0.3)
                {
@@ -129,8 +128,6 @@ void XonoticLanguageList_clickListBoxItem(entity me, float i, vector where)
 
 float XonoticLanguageList_keyDown(entity me, float scan, float ascii, float shift)
 {
-       if(me.name != "languageselector")
-               return SUPER(XonoticLanguageList).keyDown(me, scan, ascii, shift);
        if(scan == K_ENTER || scan == K_KP_ENTER) {
                me.setLanguage(me);
                return 1;
@@ -170,9 +167,7 @@ void XonoticLanguageList_getLanguages(entity me)
 
 void XonoticLanguageList_setLanguage(entity me)
 {
-       if(me.name != "languageselector")
-               return;
-       localcmd("\nmenu_restart\ntogglemenu\ndefer 0.1 \"menu_cmd languageselect\"\n");
+       localcmd(sprintf("\n%s\n", me.doubleClickCommand));
 }
 
 string XonoticLanguageList_languageParameter(entity me, float i, float key)
index 3053a903db69717cc07278df3d1d40cda1b5295c..26a9c9912b4382e0245982f5bf61dc3f21dc3e11 100644 (file)
@@ -571,7 +571,7 @@ string language_filename(string s)
 {
        string fn;
        float fh;
-       fn = cvar_string("prvm_language");
+       fn = prvm_language;
        if(fn == "" || fn == "dump")
                return s;
        fn = strcat(s, ".", fn);