]> de.git.xonotic.org Git - voretournament/voretournament.git/blob - data/qcsrc/menu/voret/cvarlist.c
Initial checkout of Vore Tournament 0.1.alpha.
[voretournament/voretournament.git] / data / qcsrc / menu / voret / cvarlist.c
1 #ifdef INTERFACE\r
2 CLASS(VoretCvarList) EXTENDS(VoretListBox)\r
3         METHOD(VoretCvarList, configureVoretCvarList, void(entity))\r
4         ATTRIB(VoretCvarList, rowsPerItem, float, 1)\r
5         METHOD(VoretCvarList, drawListBoxItem, void(entity, float, vector, float))\r
6         METHOD(VoretCvarList, resizeNotify, void(entity, vector, vector, vector, vector))\r
7         METHOD(VoretCvarList, keyDown, float(entity, float, float, float))\r
8 \r
9         METHOD(VoretCvarList, destroy, void(entity))\r
10 \r
11         ATTRIB(VoretCvarList, realFontSize, vector, '0 0 0')\r
12         ATTRIB(VoretCvarList, realUpperMargin, float, 0)\r
13         ATTRIB(VoretCvarList, columnNameOrigin, float, 0)\r
14         ATTRIB(VoretCvarList, columnNameSize, float, 0)\r
15         ATTRIB(VoretCvarList, columnValueOrigin, float, 0)\r
16         ATTRIB(VoretCvarList, columnValueSize, float, 0)\r
17 \r
18         METHOD(VoretCvarList, setSelected, void(entity, float))\r
19         ATTRIB(VoretCvarList, controlledTextbox, entity, NULL)\r
20         ATTRIB(VoretCvarList, cvarNameBox, entity, NULL)\r
21         ATTRIB(VoretCvarList, cvarDescriptionBox, entity, NULL)\r
22         ATTRIB(VoretCvarList, cvarTypeBox, entity, NULL)\r
23         ATTRIB(VoretCvarList, cvarValueBox, entity, NULL)\r
24         ATTRIB(VoretCvarList, cvarDefaultBox, entity, NULL)\r
25 \r
26         ATTRIB(VoretCvarList, handle, float, -1)\r
27         ATTRIB(VoretCvarList, cvarName, string, string_null)\r
28         ATTRIB(VoretCvarList, cvarDescription, string, string_null)\r
29         ATTRIB(VoretCvarList, cvarType, string, string_null)\r
30         ATTRIB(VoretCvarList, cvarDefault, string, string_null)\r
31 ENDCLASS(VoretCvarList)\r
32 entity makeVoretCvarList();\r
33 void CvarList_Filter_Change(entity box, entity me);\r
34 void CvarList_Value_Change(entity box, entity me);\r
35 void CvarList_Revert_Click(entity btn, entity me);\r
36 #endif\r
37 \r
38 #ifdef IMPLEMENTATION\r
39 entity makeVoretCvarList()\r
40 {\r
41         entity me;\r
42         me = spawnVoretCvarList();\r
43         me.configureVoretCvarList(me);\r
44         return me;\r
45 }\r
46 void configureVoretCvarListVoretCvarList(entity me)\r
47 {\r
48         me.configureVoretListBox(me);\r
49 \r
50         me.handle = buf_create();\r
51         buf_cvarlist(me.handle, "", "_");\r
52         me.nItems = buf_getsize(me.handle);\r
53 }\r
54 void destroyVoretCvarList(entity me)\r
55 {\r
56         buf_del(me.handle);\r
57 }\r
58 void setSelectedVoretCvarList(entity me, float i)\r
59 {\r
60         string s;\r
61 \r
62         setSelectedListBox(me, i);\r
63         if(me.nItems == 0)\r
64                 return;\r
65         \r
66         if(me.cvarName)\r
67                 strunzone(me.cvarName);\r
68         if(me.cvarDescription)\r
69                 strunzone(me.cvarDescription);\r
70         if(me.cvarType)\r
71                 strunzone(me.cvarType);\r
72         if(me.cvarDefault)\r
73                 strunzone(me.cvarDefault);\r
74         me.cvarName = strzone(bufstr_get(me.handle, me.selectedItem));\r
75         me.cvarDescription = strzone(cvar_description(me.cvarName));\r
76         me.cvarDefault = strzone(cvar_defstring(me.cvarName));\r
77 \r
78         float t;\r
79         t = cvar_type(me.cvarName);\r
80         me.cvarType = "";\r
81         if(t & CVAR_TYPEFLAG_SAVED)\r
82                 me.cvarType = strcat(me.cvarType, ", will be saved to config.cfg");\r
83         else\r
84                 me.cvarType = strcat(me.cvarType, ", will not be saved");\r
85         if(t & CVAR_TYPEFLAG_PRIVATE)\r
86                 me.cvarType = strcat(me.cvarType, ", private");\r
87         if(t & CVAR_TYPEFLAG_ENGINE)\r
88                 me.cvarType = strcat(me.cvarType, ", engine setting");\r
89         if(t & CVAR_TYPEFLAG_READONLY)\r
90                 me.cvarType = strcat(me.cvarType, ", read only");\r
91         me.cvarType = strzone(substring(me.cvarType, 2, strlen(me.cvarType) - 2));\r
92 \r
93         me.cvarNameBox.setText(me.cvarNameBox, me.cvarName);\r
94         me.cvarDescriptionBox.setText(me.cvarDescriptionBox, me.cvarDescription);\r
95         me.cvarTypeBox.setText(me.cvarTypeBox, me.cvarType);\r
96         me.cvarDefaultBox.setText(me.cvarDefaultBox, me.cvarDefault);\r
97 \r
98         // this one can handle tempstrings\r
99         s = cvar_string(me.cvarName);\r
100         me.cvarValueBox.setText(me.cvarValueBox, s);\r
101         me.cvarValueBox.cursorPos = strlen(s);\r
102 }\r
103 void CvarList_Filter_Change(entity box, entity me)\r
104 {\r
105         buf_cvarlist(me.handle, box.text, "_");\r
106         me.nItems = buf_getsize(me.handle);\r
107 \r
108         me.setSelected(me, 0);\r
109 }\r
110 void resizeNotifyVoretCvarList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)\r
111 {\r
112         resizeNotifyVoretListBox(me, relOrigin, relSize, absOrigin, absSize);\r
113 \r
114         me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);\r
115         me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));\r
116         me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);\r
117 \r
118         me.columnNameOrigin = 0;\r
119         me.columnValueSize = me.realFontSize_x * 20;\r
120         me.columnNameSize = 1 - me.columnValueSize - me.realFontSize_x;\r
121         me.columnValueOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x;\r
122 \r
123         me.setSelected(me, me.selectedItem);\r
124 }\r
125 void drawListBoxItemVoretCvarList(entity me, float i, vector absSize, float isSelected)\r
126 {\r
127         string k, v, d;\r
128         float t;\r
129 \r
130         vector theColor;\r
131         float theAlpha;\r
132 \r
133         string s;\r
134 \r
135         if(isSelected)\r
136                 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);\r
137         \r
138         k = bufstr_get(me.handle, i);\r
139 \r
140         v = cvar_string(k);\r
141         d = cvar_defstring(k);\r
142         t = cvar_type(k);\r
143         if(t & CVAR_TYPEFLAG_SAVED)\r
144                 theAlpha = SKINALPHA_CVARLIST_SAVED;\r
145         else\r
146                 theAlpha = SKINALPHA_CVARLIST_TEMPORARY;\r
147         if(v == d)\r
148                 theColor = SKINCOLOR_CVARLIST_UNCHANGED;\r
149         else\r
150                 theColor = SKINCOLOR_CVARLIST_CHANGED;\r
151 \r
152         s = draw_TextShortenToWidth(k, me.columnNameSize, 0, me.realFontSize);\r
153         draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, me.realFontSize, theColor, theAlpha, 0);\r
154         s = draw_TextShortenToWidth(v, me.columnValueSize, 0, me.realFontSize);\r
155         draw_Text(me.realUpperMargin * eY + me.columnValueOrigin * eX, s, me.realFontSize, theColor, theAlpha, 0);\r
156 }\r
157 \r
158 float keyDownVoretCvarList(entity me, float scan, float ascii, float shift)\r
159 {\r
160         if(keyDownListBox(me, scan, ascii, shift))\r
161                 return 1;\r
162         else if(!me.controlledTextbox)\r
163                 return 0;\r
164         else\r
165                 return me.controlledTextbox.keyDown(me.controlledTextbox, scan, ascii, shift);\r
166 }\r
167 \r
168 void CvarList_Value_Change(entity box, entity me)\r
169 {\r
170         cvar_set(me.cvarNameBox.text, box.text);\r
171 }\r
172 \r
173 void CvarList_Revert_Click(entity btn, entity me)\r
174 {\r
175         me.cvarValueBox.setText(me.cvarValueBox, me.cvarDefault);\r
176         me.cvarValueBox.cursorPos = strlen(me.cvarDefault);\r
177 }\r
178 #endif\r