2 CLASS(VoretSkinList) EXTENDS(VoretListBox)
\r
3 METHOD(VoretSkinList, configureVoretSkinList, void(entity))
\r
4 ATTRIB(VoretSkinList, rowsPerItem, float, 4)
\r
5 METHOD(VoretSkinList, resizeNotify, void(entity, vector, vector, vector, vector))
\r
6 METHOD(VoretSkinList, drawListBoxItem, void(entity, float, vector, float))
\r
7 METHOD(VoretSkinList, getSkins, void(entity))
\r
8 METHOD(VoretSkinList, setSkin, void(entity))
\r
9 METHOD(VoretSkinList, loadCvars, void(entity))
\r
10 METHOD(VoretSkinList, saveCvars, void(entity))
\r
11 METHOD(VoretSkinList, skinParameter, string(entity, float, float))
\r
12 METHOD(VoretSkinList, clickListBoxItem, void(entity, float, vector))
\r
13 METHOD(VoretSkinList, keyDown, float(entity, float, float, float))
\r
14 METHOD(VoretSkinList, destroy, void(entity))
\r
16 ATTRIB(VoretSkinList, skinlist, float, -1)
\r
17 ATTRIB(VoretSkinList, realFontSize, vector, '0 0 0')
\r
18 ATTRIB(VoretSkinList, columnPreviewOrigin, float, 0)
\r
19 ATTRIB(VoretSkinList, columnPreviewSize, float, 0)
\r
20 ATTRIB(VoretSkinList, columnNameOrigin, float, 0)
\r
21 ATTRIB(VoretSkinList, columnNameSize, float, 0)
\r
22 ATTRIB(VoretSkinList, realUpperMargin1, float, 0)
\r
23 ATTRIB(VoretSkinList, realUpperMargin2, float, 0)
\r
24 ATTRIB(VoretSkinList, origin, vector, '0 0 0')
\r
25 ATTRIB(VoretSkinList, itemAbsSize, vector, '0 0 0')
\r
27 ATTRIB(VoretSkinList, lastClickedSkin, float, -1)
\r
28 ATTRIB(VoretSkinList, lastClickedTime, float, 0)
\r
30 ATTRIB(VoretSkinList, name, string, "skinselector")
\r
31 ENDCLASS(VoretSkinList)
\r
33 entity makeVoretSkinList();
\r
34 void SetSkin_Click(entity btn, entity me);
\r
37 #ifdef IMPLEMENTATION
\r
39 #define SKINPARM_NAME 0
\r
40 #define SKINPARM_TITLE 1
\r
41 #define SKINPARM_AUTHOR 2
\r
42 #define SKINPARM_PREVIEW 3
\r
43 #define SKINPARM_COUNT 4
\r
45 entity makeVoretSkinList()
\r
48 me = spawnVoretSkinList();
\r
49 me.configureVoretSkinList(me);
\r
53 void configureVoretSkinListVoretSkinList(entity me)
\r
55 me.configureVoretListBox(me);
\r
60 void loadCvarsVoretSkinList(entity me)
\r
64 s = cvar_string("menu_skin");
\r
66 for(i = 0; i < n; ++i)
\r
68 if(me.skinParameter(me, i, SKINPARM_NAME) == s)
\r
70 me.selectedItem = i;
\r
76 void saveCvarsVoretSkinList(entity me)
\r
78 cvar_set("menu_skin", me.skinParameter(me, me.selectedItem, SKINPARM_NAME));
\r
81 string skinParameterVoretSkinList(entity me, float i, float key)
\r
83 return bufstr_get(me.skinlist, i * SKINPARM_COUNT + key);
\r
86 void getSkinsVoretSkinList(entity me)
\r
88 float glob, buf, i, n, fh;
\r
92 glob = search_begin("gfx/menu/*/skinvalues.txt", TRUE, TRUE);
\r
100 n = search_getsize(glob);
\r
101 for(i = 0; i < n; ++i)
\r
103 s = search_getfilename(glob, i);
\r
104 bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_NAME, substring(s, 9, strlen(s) - 24)); // the * part
\r
105 bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_TITLE, "<TITLE>");
\r
106 bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_AUTHOR, "<AUTHOR>");
\r
107 bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_PREVIEW, strcat("/gfx/menu/", substring(s, 9, strlen(s) - 24), "/skinpreview"));
\r
108 fh = fopen(s, FILE_READ);
\r
111 print("Warning: can't open skinvalues.txt file\n");
\r
114 while((s = fgets(fh)))
\r
116 // these two are handled by skinlist.qc
\r
117 if(substring(s, 0, 6) == "title ")
\r
118 bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_TITLE, substring(s, 6, strlen(s) - 6));
\r
119 else if(substring(s, 0, 7) == "author ")
\r
120 bufstr_set(buf, i * SKINPARM_COUNT + SKINPARM_AUTHOR, substring(s, 7, strlen(s) - 7));
\r
131 void destroyVoretSkinList(entity me)
\r
133 buf_del(me.skinlist);
\r
136 void resizeNotifyVoretSkinList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
\r
138 me.itemAbsSize = '0 0 0';
\r
139 resizeNotifyVoretListBox(me, relOrigin, relSize, absOrigin, absSize);
\r
141 me.realFontSize_y = me.fontSize / (me.itemAbsSize_y = (absSize_y * me.itemHeight));
\r
142 me.realFontSize_x = me.fontSize / (me.itemAbsSize_x = (absSize_x * (1 - me.controlWidth)));
\r
143 me.realUpperMargin1 = 0.5 * (1 - 2.5 * me.realFontSize_y);
\r
144 me.realUpperMargin2 = me.realUpperMargin1 + 1.5 * me.realFontSize_y;
\r
146 me.columnPreviewOrigin = 0;
\r
147 me.columnPreviewSize = me.itemAbsSize_y / me.itemAbsSize_x * 4 / 3;
\r
148 me.columnNameOrigin = me.columnPreviewOrigin + me.columnPreviewSize + me.realFontSize_x;
\r
149 me.columnNameSize = 1 - me.columnPreviewSize - 2 * me.realFontSize_x;
\r
152 void drawListBoxItemVoretSkinList(entity me, float i, vector absSize, float isSelected)
\r
157 draw_Fill('0 0 0', '1 1 0', SKINCOLOR_LISTBOX_SELECTED, SKINALPHA_LISTBOX_SELECTED);
\r
159 s = me.skinParameter(me, i, SKINPARM_PREVIEW);
\r
160 draw_Picture(me.columnPreviewOrigin * eX, s, me.columnPreviewSize * eX + eY, '1 1 1', 1);
\r
162 s = me.skinParameter(me, i, SKINPARM_NAME);
\r
163 s = strcat(s, ": ", me.skinParameter(me, i, SKINPARM_TITLE));
\r
164 s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize);
\r
165 draw_Text(me.realUpperMargin1 * eY + (me.columnNameOrigin + 0.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_SKINLIST_TITLE, SKINALPHA_TEXT, 0);
\r
167 s = me.skinParameter(me, i, SKINPARM_AUTHOR);
\r
168 s = draw_TextShortenToWidth(s, me.columnNameSize, 0, me.realFontSize);
\r
169 draw_Text(me.realUpperMargin2 * eY + (me.columnNameOrigin + 1.00 * (me.columnNameSize - draw_TextWidth(s, 0, me.realFontSize))) * eX, s, me.realFontSize, SKINCOLOR_SKINLIST_AUTHOR, SKINALPHA_TEXT, 0);
\r
172 void setSkinVoretSkinList(entity me)
\r
175 localcmd("\nmenu_restart\ntogglemenu\ndefer 0.1 \"menu_cmd skinselect\"\n");
\r
178 void SetSkin_Click(entity btn, entity me)
\r
183 void clickListBoxItemVoretSkinList(entity me, float i, vector where)
\r
185 if(i == me.lastClickedSkin)
\r
186 if(time < me.lastClickedTime + 0.3)
\r
189 me.setSelected(me, i);
\r
192 me.lastClickedSkin = i;
\r
193 me.lastClickedTime = time;
\r
196 float keyDownVoretSkinList(entity me, float scan, float ascii, float shift)
\r
198 if(scan == K_ENTER) {
\r
203 return keyDownListBox(me, scan, ascii, shift);
\r