]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/menu/xonotic/languagelist.qc
take3: format 903 files
[xonotic/xonotic-data.pk3dir.git] / qcsrc / menu / xonotic / languagelist.qc
1 #include "languagelist.qh"
2
3 #include "../item/modalcontroller.qh"
4 #include "mainwindow.qh"
5
6 const float LANGPARM_ID = 0;
7 const float LANGPARM_NAME = 1;
8 const float LANGPARM_NAME_LOCALIZED = 2;
9 const float LANGPARM_PERCENTAGE = 3;
10 const float LANGPARM_COUNT = 4;
11
12 entity makeXonoticLanguageList()
13 {
14         entity me;
15         me = NEW(XonoticLanguageList);
16         me.configureXonoticLanguageList(me);
17         return me;
18 }
19
20 void XonoticLanguageList_configureXonoticLanguageList(entity me)
21 {
22         me.configureXonoticListBox(me);
23         me.getLanguages(me);
24         me.loadCvars(me);
25 }
26
27 void XonoticLanguageList_drawListBoxItem(entity me, int i, vector absSize, bool isSelected, bool isFocused)
28 {
29         string s, p;
30         if (isSelected) {
31                 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
32         } else if (isFocused) {
33                 me.focusedItemAlpha = getFadedAlpha(me.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED);
34                 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha);
35         }
36
37         s = me.languageParameter(me, i, LANGPARM_NAME_LOCALIZED);
38
39         vector save_fontscale = draw_fontscale;
40         float f = draw_CondensedFontFactor(s, false, me.realFontSize, 1);
41         draw_fontscale.x *= f;
42         vector fs = me.realFontSize;
43         fs.x *= f;
44         draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
45         draw_fontscale = save_fontscale;
46
47         p = me.languageParameter(me, i, LANGPARM_PERCENTAGE);
48         if (p != "") {
49                 vector save_fontscale = draw_fontscale;
50                 float f = draw_CondensedFontFactor(p, false, me.realFontSize, 1);
51                 draw_fontscale.x *= f;
52                 vector fs = me.realFontSize;
53                 fs.x *= f;
54                 draw_Text(me.realUpperMargin * eY + (me.columnPercentageOrigin + (me.columnPercentageSize - draw_TextWidth(p, 0, fs))) * eX, p, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT, 0);
55                 draw_fontscale = save_fontscale;
56         }
57 }
58
59 void XonoticLanguageList_resizeNotify(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
60 {
61         SUPER(XonoticLanguageList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
62         me.realFontSize_y = me.fontSize / (absSize.y * me.itemHeight);
63         me.realFontSize_x = me.fontSize / (absSize.x * (1 - me.controlWidth));
64         me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
65         me.columnPercentageSize = me.realFontSize.x * 3;
66         me.columnPercentageOrigin = 1 - me.columnPercentageSize;
67         me.columnNameOrigin = 0;
68         me.columnNameSize = me.columnPercentageOrigin;
69 }
70
71 void XonoticLanguageList_setSelected(entity me, float i)
72 {
73         SUPER(XonoticLanguageList).setSelected(me, i);
74         me.saveCvars(me);
75 }
76
77 void XonoticLanguageList_loadCvars(entity me)
78 {
79         string s;
80         float i, n;
81         s = cvar_string("_menu_prvm_language");
82         n = me.nItems;
83
84         // default to English
85         for (i = 0; i < n; ++i) {
86                 if (me.languageParameter(me, i, LANGPARM_ID) == "en") {
87                         SUPER(XonoticLanguageList).setSelected(me, i);
88                         break;
89                 }
90         }
91
92         // otherwise, find the language
93         for (i = 0; i < n; ++i) {
94                 if (me.languageParameter(me, i, LANGPARM_ID) == s) {
95                         SUPER(XonoticLanguageList).setSelected(me, i);
96                         break;
97                 }
98         }
99
100         // save it off (turning anything unknown into "en")
101         me.saveCvars(me);
102 }
103
104 void XonoticLanguageList_saveCvars(entity me)
105 {
106         cvar_set("_menu_prvm_language", me.languageParameter(me, me.selectedItem, LANGPARM_ID));
107 }
108
109 void XonoticLanguageList_doubleClickListBoxItem(entity me, float i, vector where)
110 {
111         m_play_click_sound(MENU_SOUND_EXECUTE);
112         me.setLanguage(me);
113 }
114
115 float XonoticLanguageList_keyDown(entity me, float scan, float ascii, float shift)
116 {
117         if (scan == K_ENTER || scan == K_KP_ENTER) {
118                 m_play_click_sound(MENU_SOUND_EXECUTE);
119                 me.setLanguage(me);
120                 return 1;
121         } else {
122                 return SUPER(XonoticLanguageList).keyDown(me, scan, ascii, shift);
123         }
124 }
125
126 void XonoticLanguageList_destroy(entity me)
127 {
128         buf_del(me.languagelist);
129 }
130
131 void XonoticLanguageList_getLanguages(entity me)
132 {
133         float buf, i, n, fh;
134         string s;
135
136         buf = buf_create();
137
138         fh = fopen("languages.txt", FILE_READ);
139         i = 0;
140         while ((s = fgets(fh))) {
141                 n = tokenize_console(s);
142                 if (n < 3) {
143                         continue;
144                 }
145                 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_ID, argv(0));
146                 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME, argv(1));
147                 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME_LOCALIZED, argv(2));
148                 string percent = argv(3);
149                 if (percent && percent != "100%") {
150                         bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_PERCENTAGE, percent);
151                 }
152                 ++i;
153         }
154         fclose(fh);
155
156         me.languagelist = buf;
157         me.nItems = i;
158 }
159
160 void XonoticLanguageList_setLanguage(entity me)
161 {
162         if (prvm_language != cvar_string("_menu_prvm_language")) {
163                 if (!(gamestatus & GAME_CONNECTED)) {
164                         localcmd("\nprvm_language \"$_menu_prvm_language\"; menu_restart; menu_cmd languageselect\n");
165                 } else {
166                         DialogOpenButton_Click(me, main.languageWarningDialog);
167                 }
168         }
169 }
170
171 string XonoticLanguageList_languageParameter(entity me, float i, float key)
172 {
173         return bufstr_get(me.languagelist, i * LANGPARM_COUNT + key);
174 }
175
176 void SetLanguage_Click(entity btn, entity me)
177 {
178         me.setLanguage(me);
179 }