Xonotic QuakeC
The free, fast arena FPS with crisp movement and a wide array of weapons
languagelist.qc File Reference
#include "languagelist.qh"
#include "../item/modalcontroller.qh"
#include "mainwindow.qh"
Include dependency graph for languagelist.qc:
This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

entity makeXonoticLanguageList ()
void SetLanguage_Click (entity btn, entity me)
void XonoticLanguageList_configureXonoticLanguageList (entity me)
void XonoticLanguageList_destroy (entity me)
void XonoticLanguageList_doubleClickListBoxItem (entity me, float i, vector where)
void XonoticLanguageList_drawListBoxItem (entity me, int i, vector absSize, bool isSelected, bool isFocused)
void XonoticLanguageList_focusedItemChangeNotify (entity me)
void XonoticLanguageList_getLanguages (entity me)
float XonoticLanguageList_keyDown (entity me, float scan, float ascii, float shift)
string XonoticLanguageList_languageParameter (entity me, float i, float key)
void XonoticLanguageList_loadCvars (entity me)
void XonoticLanguageList_resizeNotify (entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
void XonoticLanguageList_saveCvars (entity me)
void XonoticLanguageList_setLanguage (entity me)
void XonoticLanguageList_setSelected (entity me, float i)

Variables

const int LANGPARM_COUNT = 4
const int LANGPARM_ID = 0
const int LANGPARM_NAME = 1
const int LANGPARM_NAME_LOCALIZED = 2
const int LANGPARM_PERCENTAGE = 3
const string PERCENTAGE_FULL_ICON = "/gfx/scoreboard/player_ready"

Function Documentation

◆ makeXonoticLanguageList()

entity makeXonoticLanguageList ( )

Definition at line 14 of file languagelist.qc.

15{
17 me.configureXonoticLanguageList(me);
18 return me;
19}
var entity(vector mins, vector maxs,.entity tofield) findbox_tofield_OrFallback
#define NEW(cname,...)
Definition oo.qh:117

References entity(), and NEW.

Referenced by XonoticFirstRunDialog_fill(), and XonoticUserSettingsTab_fill().

◆ SetLanguage_Click()

void SetLanguage_Click ( entity btn,
entity me )

Definition at line 211 of file languagelist.qc.

212{
213 me.setLanguage(me);
214}

References entity().

Referenced by XonoticUserSettingsTab_fill().

◆ XonoticLanguageList_configureXonoticLanguageList()

void XonoticLanguageList_configureXonoticLanguageList ( entity me)

Definition at line 21 of file languagelist.qc.

22{
23 me.configureXonoticListBox(me);
24 me.getLanguages(me);
25 me.loadCvars(me);
26}

References entity().

◆ XonoticLanguageList_destroy()

void XonoticLanguageList_destroy ( entity me)

Definition at line 162 of file languagelist.qc.

163{
164 buf_del(me.languagelist);
165}

References entity().

◆ XonoticLanguageList_doubleClickListBoxItem()

void XonoticLanguageList_doubleClickListBoxItem ( entity me,
float i,
vector where )

Definition at line 144 of file languagelist.qc.

145{
147 me.setLanguage(me);
148}
void m_play_click_sound(string soundfile)
Definition menu.qc:1111
const string MENU_SOUND_EXECUTE
Definition menu.qh:51

References entity(), m_play_click_sound(), MENU_SOUND_EXECUTE, and vector.

◆ XonoticLanguageList_drawListBoxItem()

void XonoticLanguageList_drawListBoxItem ( entity me,
int i,
vector absSize,
bool isSelected,
bool isFocused )

Definition at line 28 of file languagelist.qc.

29{
30 if(isSelected)
31 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
32 else if(isFocused)
33 {
34 me.focusedItemAlpha = getFadedAlpha(me.focusedItemAlpha, SKINALPHA_LISTBOX_FOCUSED, SKINFADEALPHA_LISTBOX_FOCUSED);
35 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_FOCUSED, me.focusedItemAlpha);
36 }
37
38 string p = me.languageParameter(me, i, LANGPARM_PERCENTAGE);
39 float alpha_factor;
40 if(p == "") // 100%
41 alpha_factor = 1;
42 else
43 {
44 float percent = stof(p);
45 if (percent >= 90)
46 alpha_factor = 1;
47 else if (percent >= 50)
48 alpha_factor = 0.65;
49 else
50 alpha_factor = 0.3;
51 p = ftos_decimals_percentage(percent / 100, 0); // make it translatable
52 }
53
54 string s = me.languageParameter(me, i, LANGPARM_NAME_LOCALIZED);
55
56 vector save_fontscale = draw_fontscale;
57 float f = draw_CondensedFontFactor(s, false, me.realFontSize, 1);
58 draw_fontscale.x *= f;
59 vector fs = me.realFontSize;
60 fs.x *= f;
61 draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, fs, SKINCOLOR_TEXT * alpha_factor, SKINALPHA_TEXT, 0);
62 draw_fontscale = save_fontscale;
63
64 if(p == "")
65 {
66 float x_ofs = me.columnPercentageOrigin + (me.columnPercentageSize - me.columnIconSize);
67 draw_Picture(me.realUpperMargin * eY + x_ofs * eX, PERCENTAGE_FULL_ICON, me.columnIconSize * eX + eY, '1 1 1', SKINALPHA_LISTBOX_SELECTED);
68 }
69 else
70 {
71 vector save_fontscale = draw_fontscale;
72 float f = draw_CondensedFontFactor(p, false, me.realFontSize, 1);
73 draw_fontscale.x *= f;
74 vector fs = me.realFontSize;
75 fs.x *= f;
76 float x_ofs = me.columnPercentageOrigin + (me.columnPercentageSize - draw_TextWidth(p, 0, fs));
77 draw_Text(me.realUpperMargin * eY + x_ofs * eX, p, fs, SKINCOLOR_TEXT, SKINALPHA_TEXT * alpha_factor, 0);
78 draw_fontscale = save_fontscale;
79 }
80}
const string PERCENTAGE_FULL_ICON
const int LANGPARM_PERCENTAGE
const int LANGPARM_NAME_LOCALIZED
void draw_Picture(vector theOrigin, string pic, vector theSize, vector theColor, float theAlpha)
Definition draw.qc:72
float draw_CondensedFontFactor(string theText, float ICanHasKallerz, vector SizeThxBye, float maxWidth)
Definition draw.qc:317
void draw_Text(vector theOrigin, string theText, vector theSize, vector theColor, float theAlpha, float ICanHasKallerz)
Definition draw.qc:282
float draw_TextWidth(string theText, float ICanHasKallerz, vector SizeThxBye)
Definition draw.qc:304
void draw_Fill(vector theOrigin, vector theSize, vector theColor, float theAlpha)
Definition draw.qc:97
#define draw_fontscale
Definition draw.qh:5
float getFadedAlpha(float currentAlpha, float startAlpha, float targetAlpha)
Definition util.qc:816
float stof(string val,...)
vector
Definition self.qh:92
ERASEABLE string ftos_decimals_percentage(float number, int decimals)
converts a percentage to a string with the indicated number of decimals
Definition string.qh:480
const vector eY
Definition vector.qh:45
const vector eX
Definition vector.qh:44

References draw_CondensedFontFactor(), draw_Fill(), draw_fontscale, draw_Picture(), draw_Text(), draw_TextWidth(), entity(), eX, eY, ftos_decimals_percentage(), getFadedAlpha(), LANGPARM_NAME_LOCALIZED, LANGPARM_PERCENTAGE, PERCENTAGE_FULL_ICON, stof(), and vector.

◆ XonoticLanguageList_focusedItemChangeNotify()

void XonoticLanguageList_focusedItemChangeNotify ( entity me)

Definition at line 216 of file languagelist.qc.

217{
218 if (me.focusedItem >= 0)
219 setZonedTooltip(me, me.languageParameter(me, me.focusedItem, LANGPARM_NAME), string_null);
220 else
221 clearTooltip(me);
222}
const int LANGPARM_NAME
void clearTooltip(entity e)
Definition util.qc:277
void setZonedTooltip(entity e, string theTooltip, string theCvar)
Definition util.qc:257
string string_null
Definition nil.qh:9

References clearTooltip(), entity(), LANGPARM_NAME, setZonedTooltip(), and string_null.

◆ XonoticLanguageList_getLanguages()

void XonoticLanguageList_getLanguages ( entity me)

Definition at line 167 of file languagelist.qc.

168{
169 float buf, i, n, fh;
170 string s;
171
172 buf = buf_create();
173
174 fh = fopen("languages.txt", FILE_READ);
175 i = 0;
176 while((s = fgets(fh)))
177 {
178 n = tokenize_console(s);
179 if(n < 3)
180 continue;
181 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_ID, argv(0));
182 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME, argv(1));
183 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_NAME_LOCALIZED, argv(2));
184 string percent = argv(3);
185 if(percent && percent != "100%")
186 bufstr_set(buf, i * LANGPARM_COUNT + LANGPARM_PERCENTAGE, percent);
187 ++i;
188 }
189 fclose(fh);
190
191 me.languagelist = buf;
192 me.nItems = i;
193}
const float FILE_READ
#define tokenize_console
#define buf_create
const int LANGPARM_ID
const int LANGPARM_COUNT
string fgets(float fhandle)
void fclose(float fhandle)
float fopen(string filename, float mode)
string argv(float n)

References argv(), buf_create, entity(), fclose(), fgets(), FILE_READ, fopen(), LANGPARM_COUNT, LANGPARM_ID, LANGPARM_NAME, LANGPARM_NAME_LOCALIZED, LANGPARM_PERCENTAGE, and tokenize_console.

◆ XonoticLanguageList_keyDown()

float XonoticLanguageList_keyDown ( entity me,
float scan,
float ascii,
float shift )

Definition at line 150 of file languagelist.qc.

151{
152 if(scan == K_ENTER || scan == K_KP_ENTER)
153 {
155 me.setLanguage(me);
156 return 1;
157 }
158 else
159 return SUPER(XonoticLanguageList).keyDown(me, scan, ascii, shift);
160}
float K_ENTER
Definition keycodes.qc:8
float K_KP_ENTER
Definition keycodes.qc:74
#define SUPER(cname)
Definition oo.qh:231

References entity(), K_ENTER, K_KP_ENTER, m_play_click_sound(), MENU_SOUND_EXECUTE, and SUPER.

◆ XonoticLanguageList_languageParameter()

string XonoticLanguageList_languageParameter ( entity me,
float i,
float key )

Definition at line 206 of file languagelist.qc.

207{
208 return bufstr_get(me.languagelist, i * LANGPARM_COUNT + key);
209}

References entity(), and LANGPARM_COUNT.

◆ XonoticLanguageList_loadCvars()

void XonoticLanguageList_loadCvars ( entity me)

Definition at line 108 of file languagelist.qc.

109{
110 string s;
111 float i, n;
112 s = cvar_string("_menu_prvm_language");
113 n = me.nItems;
114
115 // default to English
116 for(i = 0; i < n; ++i)
117 {
118 if(me.languageParameter(me, i, LANGPARM_ID) == "en")
119 {
120 SUPER(XonoticLanguageList).setSelected(me, i);
121 break;
122 }
123 }
124
125 // otherwise, find the language
126 for(i = 0; i < n; ++i)
127 {
128 if(me.languageParameter(me, i, LANGPARM_ID) == s)
129 {
130 SUPER(XonoticLanguageList).setSelected(me, i);
131 break;
132 }
133 }
134
135 // save it off (turning anything unknown into "en")
136 me.saveCvars(me);
137}
const string cvar_string(string name)

References cvar_string(), entity(), LANGPARM_ID, and SUPER.

◆ XonoticLanguageList_resizeNotify()

void XonoticLanguageList_resizeNotify ( entity me,
vector relOrigin,
vector relSize,
vector absOrigin,
vector absSize )

Definition at line 82 of file languagelist.qc.

83{
84 SUPER(XonoticLanguageList).resizeNotify(me, relOrigin, relSize, absOrigin, absSize);
85
86 me.itemAbsSize.y = absSize.y * me.itemHeight;
87 me.itemAbsSize.x = absSize.x * (1 - me.controlWidth);
88 me.realFontSize.y = me.fontSize / (absSize.y * me.itemHeight);
89 me.realFontSize.x = me.fontSize / (absSize.x * (1 - me.controlWidth));
90 me.realUpperMargin = 0.5 * (1 - me.realFontSize.y);
91
93 float aspect_ratio = sz.y ? sz.x / sz.y : 1;
94 me.columnIconSize = me.itemAbsSize.y / me.itemAbsSize.x * aspect_ratio;
95
96 me.columnPercentageSize = me.realFontSize.x * 3;
97 me.columnPercentageOrigin = 1 - me.columnPercentageSize - 0.5 * me.realFontSize.x;
98 me.columnNameOrigin = 0.5 * me.realFontSize.x;
99 me.columnNameSize = me.columnPercentageOrigin - me.columnNameOrigin;
100}
vector draw_PictureSize(string pic)
Definition draw.qc:80

References draw_PictureSize(), entity(), PERCENTAGE_FULL_ICON, SUPER, and vector.

◆ XonoticLanguageList_saveCvars()

void XonoticLanguageList_saveCvars ( entity me)

Definition at line 139 of file languagelist.qc.

140{
141 cvar_set("_menu_prvm_language", me.languageParameter(me, me.selectedItem, LANGPARM_ID));
142}
void cvar_set(string name, string value)

References cvar_set(), entity(), and LANGPARM_ID.

◆ XonoticLanguageList_setLanguage()

void XonoticLanguageList_setLanguage ( entity me)

Definition at line 195 of file languagelist.qc.

196{
197 if(prvm_language != cvar_string("_menu_prvm_language"))
198 {
200 localcmd("\nprvm_language \"$_menu_prvm_language\"; menu_restart; menu_cmd languageselect\n");
201 else
202 DialogOpenButton_Click(me, main.languageWarningDialog);
203 }
204}
string prvm_language
Definition i18n.qh:8
#define main
Definition _all.inc:202
const int GAME_CONNECTED
Definition menu.qh:12
int gamestatus
Definition menu.qh:16
void localcmd(string command,...)
void DialogOpenButton_Click(entity button, entity tab)

References cvar_string(), DialogOpenButton_Click(), entity(), GAME_CONNECTED, gamestatus, localcmd(), main, and prvm_language.

◆ XonoticLanguageList_setSelected()

void XonoticLanguageList_setSelected ( entity me,
float i )

Definition at line 102 of file languagelist.qc.

103{
104 SUPER(XonoticLanguageList).setSelected(me, i);
105 me.saveCvars(me);
106}

References entity(), and SUPER.

Variable Documentation

◆ LANGPARM_COUNT

const int LANGPARM_COUNT = 4

◆ LANGPARM_ID

const int LANGPARM_ID = 0

◆ LANGPARM_NAME

const int LANGPARM_NAME = 1

◆ LANGPARM_NAME_LOCALIZED

const int LANGPARM_NAME_LOCALIZED = 2

◆ LANGPARM_PERCENTAGE

const int LANGPARM_PERCENTAGE = 3

◆ PERCENTAGE_FULL_ICON

const string PERCENTAGE_FULL_ICON = "/gfx/scoreboard/player_ready"