]> icculus.org git repositories - divverent/nexuiz.git/blob - menusrc/mcontrols.qc
First commit (this actually is a copy of the dpmod qc from 30.10.03 22:55)
[divverent/nexuiz.git] / menusrc / mcontrols.qc
1 ///////////////////////////////////////////////
2 // Controls/Item Source File
3 ///////////////////////
4 // This file belongs to dpmod/darkplaces
5 // AK contains all item specific stuff
6 ////////////////////////////////////////////////
7
8 ////////////////
9 // ITEM_WINDOW
10 //
11
12 void(void) ITEM_WINDOW =
13 {
14         self.flag = self.flag | FLAG_NOSELECT | FLAG_DRAWONLY;
15
16         item_init(
17                 defct_reinit,
18                 defct_destroy,
19                 defct_key,
20                 defct_draw,
21                 defct_mouse_enter,
22                 defct_mouse_leave,
23                 defct_action,
24                 defct_refresh);
25 };
26
27 //////////////////
28 // ITEM_REFERENCE
29 ///
30
31 void(void) ITEM_REFERENCE_REINIT =
32 {
33         self._child = menu_getitem(self.link);
34         if(self._child == null_entity)
35         {
36                 print(self.name, " removed, cause link ", self.link, " not found\n");
37                 remove(self);   // no need to call terminate
38                 return;
39         }
40
41         ctcall_init();
42
43         self._reinit = defct_reinit;
44 };
45
46 void(void) ITEM_REFERENCE =
47 {
48         self.flag = self.flag | FLAG_NOSELECT | FLAG_DRAWONLY;
49
50         if(self.link == "")
51         {
52                 remove(self);   // no need to call terminate
53                 return;
54         }
55
56         item_init(
57                 ITEM_REFERENCE_REINIT,
58                 defct_destroy,
59                 defct_key,
60                 defct_draw,
61                 defct_mouse_enter,
62                 defct_mouse_leave,
63                 defct_action,
64                 defct_refresh);
65 };
66
67 ////////////////
68 // ITEM_CUSTOM
69 ////
70
71 void(void) ITEM_CUSTOM =
72 {
73         item_init(defct_reinit, defct_destroy, defct_key, defct_draw, defct_mouse_enter, defct_mouse_leave, defct_action, defct_refresh);
74 };
75
76 /////////////////
77 // ITEM_PICTURE
78 ///
79
80 // ITEM_PICTURE has a special draw function
81 void(void) ITEM_PICTURE_DRAW =
82 {
83         menu_drawpic(self.pos, self.picture, self.size, self.color, self.alpha, self.drawflag);
84
85         ctcall_draw();
86 };
87
88 void(void) ITEM_PICTURE =
89 {
90         if(self.picture == "")
91                 // a picture has to have a picture
92                 remove(self);           // no need to call terminate
93
94         // load the picture if it isnt loaded already
95         gfx_loadpic(self.picture, MENU_ENFORCELOADING);
96
97         // if flag wasnt set yet, then set it to FLAG_DRAWONLY
98         if(self.flag == 0)
99                 self.flag = FLAG_DRAWONLY;
100
101         if(self.color == '0 0 0')
102                 self.color = ITEM_PICTURE_NORMAL_COLOR;
103         if(self.alpha == 0)
104                 self.alpha = ITEM_PICTURE_NORMAL_ALPHA;
105
106         item_init(
107                 defct_reinit,
108                 defct_destroy,
109                 defct_key,
110                 ITEM_PICTURE_DRAW,
111                 defct_mouse_enter,
112                 defct_mouse_leave,
113                 defct_action,
114                 defct_refresh);
115 };
116
117 /////////////
118 // ITEM_TEXT
119 ///
120
121 void(void) ITEM_TEXT_REFRESH =
122 {
123         // first do own refresh, *then* call the default refresh !
124         if(self.size == '0 0 0')
125         {
126                 if(self.font_size == '0 0 0')
127                         self.font_size = ITEM_TEXT_FONT_SIZE;
128
129                 self.size_x = self.font_size_x * strlen(self.text);
130                 self.size_y = self.font_size_y;
131         } else if(self.font_size == '0 0 0')
132         {
133                         self.font_size_x = self.size_x / strlen(self.text);
134                         self.font_size_y = self.size_y;
135         }
136
137         def_refresh();
138         ctcall_refresh();
139 };
140
141 void(void) ITEM_TEXT_DRAW =
142 {
143         if(self.text)
144         {
145                 // align to the rect pos - (pos + size)
146                 vector alignpos;
147                 // now check the alignement
148                 if(self.alignment & TEXT_ALIGN_CENTER)
149                         alignpos_x = self.pos_x + (self.size_x - strlen(self.text) * self.font_size_x) / 2;
150                 else if(self.alignment & TEXT_ALIGN_RIGHT)
151                         alignpos_x = self.pos_x + self.size_x - strlen(self.text) * self.font_size_x;
152                 else
153                         alignpos_x = self.pos_x;
154                 alignpos_y = self.pos_y;
155
156                 menu_drawstring(alignpos, self.text, self.font_size, self.color, self.alpha, self.drawflag);
157         }
158         ctcall_draw();
159 };
160
161 void(void) ITEM_TEXT =
162 {
163         if(self.flag == 0)
164                 self.flag = FLAG_DRAWONLY;
165
166         if(self.color == '0 0 0')
167                 self.color = ITEM_TEXT_NORMAL_COLOR;
168         if(self.alpha == 0)
169                 self.alpha = ITEM_TEXT_NORMAL_ALPHA;
170
171         ITEM_TEXT_REFRESH();
172         if(self.alignment & TEXT_ALIGN_CENTERPOS)
173         {
174                 self.pos_x = self.pos_x - self.size_x / 2;
175         } else  if(self.alignment & TEXT_ALIGN_LEFTPOS)
176         {
177                 self.pos_x = self.pos_x - self.size_x;
178         }
179
180         item_init(
181                 defct_reinit,
182                 defct_destroy,
183                 defct_key,
184                 ITEM_TEXT_DRAW,
185                 defct_mouse_enter,
186                 defct_mouse_leave,
187                 defct_action,
188                 ITEM_TEXT_REFRESH);
189 };
190
191 /////////////////
192 // ITEM_RECTANLE
193 ///
194
195 void(void) ITEM_RECTANGLE_DRAW =
196 {
197         menu_fillarea(self.pos, self.size, self.color, self.alpha, self.drawflag);
198 };
199
200 void(void) ITEM_RECTANGLE =
201 {
202         if(self.flag == 0)
203                 self.flag = FLAG_DRAWONLY;
204
205         item_init(
206                 defct_reinit,
207                 defct_destroy,
208                 defct_key,
209                 ITEM_RECTANGLE_DRAW,
210                 defct_mouse_enter,
211                 defct_mouse_leave,
212                 defct_action,
213                 defct_refresh);
214 };
215
216 ////////////////
217 // ITEM_BUTTON
218 ///
219
220 void(void) ITEM_BUTTON_DRAW =
221 {
222         if(self._button_state == BUTTON_NORMAL)
223                 menu_drawpic(self.pos, self.picture, self.size, self.color, self.alpha, self.drawflag);
224         else if(self._button_state == BUTTON_SELECTED)
225                 menu_drawpic(self.pos, self.picture_selected, self.size, self.color_selected, self.alpha_selected, self.drawflag_selected);
226         else
227                 menu_drawpic(self.pos, self.picture_pressed, self.size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
228
229         ctcall_draw();
230 };
231
232 void(void) ITEM_BUTTON_REFRESH =
233 {
234
235         if((self.hold_pressed + self._press_time < time && self._button_state == BUTTON_PRESSED) || (menu_selected != self && self._button_state == BUTTON_SELECTED))
236         {
237                 self._button_state = BUTTON_NORMAL;
238         }
239         if(menu_selected == self && self._button_state == BUTTON_NORMAL)
240         {
241                 self._button_state = BUTTON_SELECTED;
242                 if(self.sound_selected)
243                         snd_play(self.sound_selected);
244         }
245         def_refresh();
246         ctcall_refresh();
247 };
248
249 void(float keynr, float ascii) ITEM_BUTTON_KEY =
250 {
251         if(ctcall_key(keynr, ascii))
252                 return;
253
254         if(keynr == K_ENTER || keynr == K_MOUSE1)
255         {
256                 self._action();
257         } else
258                 def_keyevent(keynr, ascii);
259 };
260
261 void(void) ITEM_BUTTON_ACTION =
262 {
263         self._press_time = time;
264         self._button_state = BUTTON_PRESSED;
265         if(self.sound_pressed)
266                 snd_play(self.sound_pressed);
267
268         ctcall_action();
269 };
270 void(void) ITEM_BUTTON_REINIT =
271 {
272         self._button_state = BUTTON_NORMAL;
273
274         ctcall_reinit();
275 };
276
277 void(void) ITEM_BUTTON =
278 {
279         if(self.picture == "" || self.picture_selected == "" || self.picture_pressed == "")
280                 // a picture has to have a picture
281                 remove(self);   // no need to call terminate
282
283         // load the picture if it isnt loaded already
284         gfx_loadpic(self.picture, MENU_ENFORCELOADING);
285
286         if(self.sound_selected != "")
287                 snd_loadsound(self.sound_selected, SOUND_ENFORCELOADING);
288         else
289                 self.sound_selected = SOUND_SELECT;
290
291         if(self.sound_pressed != "")
292                 snd_loadsound(self.sound_pressed, SOUND_ENFORCELOADING);
293         else
294                 self.sound_pressed = SOUND_ACTION;
295
296         // if flag wasnt set yet, then set it to FLAG_DRAWONLY
297         if(self.flag == 0)
298                 self.flag = FLAG_AUTOSETCLICK;
299
300         if(self.color == '0 0 0')
301                 self.color = ITEM_PICTURE_NORMAL_COLOR;
302         if(self.alpha == 0)
303                 self.alpha = ITEM_PICTURE_NORMAL_ALPHA;
304         if(self.color_selected == '0 0 0')
305                 self.color_selected = ITEM_PICTURE_SELECTED_COLOR;
306         if(self.alpha_selected == 0)
307                 self.alpha_selected = ITEM_PICTURE_SELECTED_ALPHA;
308         if(self.color_pressed == '0 0 0')
309                 self.color_pressed = ITEM_PICTURE_PRESSED_COLOR;
310         if(self.alpha_pressed == 0)
311                 self.alpha_pressed = ITEM_PICTURE_PRESSED_ALPHA;
312
313         if(self.hold_pressed == 0)
314                 self.hold_pressed = ITEM_BUTTON_HOLD_PRESSED;
315
316         item_init(
317                 ITEM_BUTTON_REINIT,
318                 defct_destroy,
319                 ITEM_BUTTON_KEY,
320                 ITEM_BUTTON_DRAW,
321                 defct_mouse_enter,
322                 defct_mouse_leave,
323                 defct_action,
324                 ITEM_BUTTON_REFRESH);
325 };
326
327 ////////////////////
328 // ITEM_TEXTBUTTON
329 ///
330
331 void(void) ITEM_TEXTBUTTON_REFRESH =
332 {
333         // first do own refresh, *then* call the default refresh !
334         if(self.size == '0 0 0')
335         {
336                 if(self.font_size == '0 0 0')
337                         self.font_size = ITEM_TEXT_FONT_SIZE;
338
339                 self.size_x = self.font_size_x * strlen(self.text);
340                 self.size_y = self.font_size_y;
341         } else if(self.font_size == '0 0 0')
342         {
343                         self.font_size_x = self.size_x / strlen(self.text);
344                         self.font_size_y = self.size_y;
345         }
346
347         if((self.hold_pressed + self._press_time < time && self._button_state == BUTTON_PRESSED) || (menu_selected != self && self._button_state == BUTTON_SELECTED))
348         {
349                 self._button_state = BUTTON_NORMAL;
350         }
351         if(menu_selected == self && self._button_state == BUTTON_NORMAL)
352         {
353                 self._button_state = BUTTON_SELECTED;
354                 if(self.sound_selected)
355                         snd_play(self.sound_selected);
356         }
357
358         def_refresh();
359         ctcall_refresh();
360 };
361
362 void(void) ITEM_TEXTBUTTON_DRAW =
363 {
364         if(self.text == "")
365                 return;
366
367         // align to the rect pos - (pos + size)
368         vector alignpos;
369         // now check the alignement
370         if(self.alignment & TEXT_ALIGN_CENTER)
371                 alignpos_x = self.pos_x + (self.size_x - strlen(self.text) * self.font_size_x) / 2;
372         else if(self.alignment & TEXT_ALIGN_RIGHT)
373                 alignpos_x = self.pos_x + self.size_x - strlen(self.text) * self.font_size_x;
374         else
375                 alignpos_x = self.pos_x;
376                 alignpos_y = self.pos_y;
377
378         if(self.style == TEXTBUTTON_STYLE_OUTLINE && self._button_state != BUTTON_NORMAL)
379         {
380                 vector p,s;
381                 // left
382                 p_x = self.pos_x;
383                 p_y = self.pos_y;
384                 s_x = TEXTBUTTON_OUTLINE_WIDTH;
385                 s_y = self.size_y;
386                 if(self._button_state == BUTTON_PRESSED)
387                 {
388                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
389                 }
390                 else if(self._button_state == BUTTON_SELECTED)
391                 {
392                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
393                 }
394                 // right
395                 p_x = self.pos_x + self.size_x - TEXTBUTTON_OUTLINE_WIDTH;
396                 p_y = self.pos_y;
397                 s_x = TEXTBUTTON_OUTLINE_WIDTH;
398                 s_y = self.size_y;
399                 if(self._button_state == BUTTON_PRESSED)
400                 {
401                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
402                 }
403                 else if(self._button_state == BUTTON_SELECTED)
404                 {
405                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
406                 }
407                 // top
408                 p_x = self.pos_x;
409                 p_y = self.pos_y;
410                 s_y = TEXTBUTTON_OUTLINE_WIDTH;
411                 s_x = self.size_x;
412                 if(self._button_state == BUTTON_PRESSED)
413                 {
414                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
415                 }
416                 else if(self._button_state == BUTTON_SELECTED)
417                 {
418                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
419                 }
420                 // bottom
421                 p_x = self.pos_x;
422                 p_y = self.pos_y + self.size_y - TEXTBUTTON_OUTLINE_WIDTH;
423                 s_y = TEXTBUTTON_OUTLINE_WIDTH;
424                 s_x = self.size_x;
425                 if(self._button_state == BUTTON_PRESSED)
426                 {
427                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
428                 }
429                 else if(self._button_state == BUTTON_SELECTED)
430                 {
431                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
432                 }
433         } else  if(self.style == TEXTBUTTON_STYLE_BOX)
434         {
435                 if(self._button_state == BUTTON_PRESSED)
436                 {
437                         menu_fillarea(alignpos, self.size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
438                 }
439                 else if(self._button_state == BUTTON_SELECTED)
440                 {
441                         menu_fillarea(alignpos, self.size, self.color_selected, self.alpha_selected, self.drawflag_selected);
442                 }
443         }
444
445         if(self._button_state == BUTTON_NORMAL || self.style == TEXTBUTTON_STYLE_BOX || self.style == TEXTBUTTON_STYLE_OUTLINE)
446                 menu_drawstring(alignpos, self.text, self.font_size, self.color, self.alpha, self.drawflag);
447
448         if(self.style == TEXTBUTTON_STYLE_TEXT)
449         {
450                 if(self._button_state == BUTTON_PRESSED)
451                 {
452                         menu_drawstring(alignpos, self.text, self.font_size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
453                 }
454                 else if(self._button_state == BUTTON_SELECTED)
455                 {
456                         menu_drawstring(alignpos, self.text, self.font_size, self.color_selected, self.alpha_selected, self.drawflag_selected);
457                 }
458         }
459
460         ctcall_draw();
461 };
462
463 void(void) ITEM_TEXTBUTTON_ACTION =
464 {
465         self._press_time = time;
466         self._button_state = BUTTON_PRESSED;
467         if(self.sound_pressed)
468                 snd_play(self.sound_pressed);
469
470         ctcall_action();
471 };
472
473 void(float keynr, float ascii) ITEM_TEXTBUTTON_KEY =
474 {
475         if(ctcall_key(keynr, ascii))
476                 return;
477
478         if(keynr == K_ENTER || keynr == K_MOUSE1)
479         {
480                 self._action();
481         } else
482                 def_keyevent(keynr, ascii);
483 };
484
485 void(void) ITEM_TEXTBUTTON_REINIT =
486 {
487         self._button_state = BUTTON_NORMAL;
488
489         ctcall_init();
490 };
491
492 void(void) ITEM_TEXTBUTTON =
493 {
494         if(self.flag == 0)
495                 self.flag = FLAG_AUTOSETCLICK;
496
497         if(self.color == '0 0 0')
498                 self.color = ITEM_TEXT_NORMAL_COLOR;
499         if(self.alpha == 0)
500                 self.alpha = ITEM_TEXT_NORMAL_ALPHA;
501         if(self.color_selected == '0 0 0')
502                 self.color_selected = ITEM_TEXT_SELECTED_COLOR;
503         if(self.alpha_selected == 0)
504                 self.alpha_selected = ITEM_TEXT_SELECTED_ALPHA;
505         if(self.color_pressed == '0 0 0')
506                 self.color_pressed = ITEM_TEXT_PRESSED_COLOR;
507         if(self.alpha_pressed == 0)
508                 self.alpha_pressed = ITEM_TEXT_PRESSED_ALPHA;
509
510         if(self.hold_pressed == 0)
511                 self.hold_pressed = ITEM_BUTTON_HOLD_PRESSED;
512
513         if(self.sound_selected != "")
514                 snd_loadsound(self.sound_selected, SOUND_ENFORCELOADING);
515         else
516                 self.sound_selected = SOUND_SELECT;
517
518         if(self.sound_pressed != "")
519                 snd_loadsound(self.sound_pressed, SOUND_ENFORCELOADING);
520         else
521                 self.sound_pressed = SOUND_ACTION;
522
523         ITEM_TEXTBUTTON_REFRESH();
524         if(self.alignment & TEXT_ALIGN_CENTERPOS)
525         {
526                 self.pos_x = self.pos_x - self.size_x / 2;
527         } else  if(self.alignment & TEXT_ALIGN_LEFTPOS)
528         {
529                 self.pos_x = self.pos_x - self.size_x;
530         }
531
532         item_init(
533                 ITEM_TEXTBUTTON_REINIT,
534                 defct_destroy,
535                 ITEM_TEXTBUTTON_KEY,
536                 ITEM_TEXTBUTTON_DRAW,
537                 defct_mouse_enter,
538                 defct_mouse_leave,
539                 ITEM_TEXTBUTTON_ACTION,
540                 ITEM_TEXTBUTTON_REFRESH);
541 };
542
543 // ITEM_SLIDER
544
545 void(void) ITEM_SLIDER_DRAW =
546 {
547         vector slider_pos;
548         string t;
549
550         // draw the bar
551         if(self.picture_bar != "")
552         {
553                 menu_drawpic(self.pos, self.picture_bar, self.size, self.color, self.alpha, self.drawflag);
554         }
555         else
556         {
557                 menu_fillarea(self.pos, self.size, self.color, self.alpha, self.drawflag);
558         }
559
560         // draw the slider
561         slider_pos = self.pos;
562         slider_pos_x = slider_pos_x + ((self.size_x - self.slider_size_x) / (self.max_value - self.min_value)) * (self.value - self.min_value);
563         if(self.picture != "")
564         {
565                 menu_drawpic(slider_pos, self.picture, self.slider_size, self.color, self.alpha, self.drawflag);
566         }
567         else
568         {
569                 menu_fillarea(slider_pos, self.slider_size, self.color + ITEM_SLIDER_BAR_COLOR_DELTA, self.alpha, self.drawflag);
570         }
571 };
572
573 void(void) ITEM_SLIDER_UPDATESLIDER =
574 {
575         self.value = bound(self.min_value, self.value, self.max_value);
576         if(self.slidermove)
577                 self.slidermove();
578 };
579
580 void(float keynr, float ascii) ITEM_SLIDER_KEY =
581 {
582         if(ctcall_key(keynr, ascii))
583                 return;
584
585         if(keynr == K_LEFTARROW)
586         {
587                 self.value = (rint(self.value / self.step) - 1) * self.step;
588                 ITEM_SLIDER_UPDATESLIDER();
589         }
590         else if(keynr == K_RIGHTARROW)
591         {
592                 self.value = (rint(self.value / self.step) + 1)* self.step;
593                 ITEM_SLIDER_UPDATESLIDER();
594         }
595         else if(keynr == K_MOUSE1)
596         {
597                 if(inrect(menu_cursor, self.pos, self.size))
598                 {
599                         self.value = self.min_value + ((menu_cursor_x - self.slider_size_x / 2) - self.pos_x) * ((self.max_value - self.min_value) / (self.size_x - self.slider_size_x));
600                 }
601         }
602         else
603         {
604                 def_keyevent(keynr, ascii);
605                 return;
606         }
607         // play sound
608         snd_play(self.sound_changed);
609         ITEM_SLIDER_UPDATESLIDER();
610 };
611
612 void(void) ITEM_SLIDER =
613 {
614         if(self.picture != "")
615                 self.picture = gfx_loadpic(self.picture, MENU_ENFORCELOADING);
616         if(self.picture_bar != "")
617                 self.picture_bar = gfx_loadpic(self.picture_bar, MENU_ENFORCELOADING);
618         if(self.sound_changed == "")
619                 self.sound_changed = SOUND_CHANGE;
620
621         if(self.color == '0 0 0')
622                 self.color = ITEM_SLIDER_COLOR;
623         if(self.alpha == 0)
624                 self.alpha = ITEM_SLIDER_ALPHA;
625         if(self.step == 0)
626                 self.step = ITEM_SLIDER_STEP;
627         if(self.slider_size == '0 0 0')
628         {
629                 if(self.picture != "")
630                         self.slider_size = gfx_getimagesize(self.picture);
631                 else
632                         self.slider_size = ITEM_SLIDER_SIZE;
633         }
634
635         item_init(
636                 defct_reinit,
637                 defct_destroy,
638                 ITEM_SLIDER_KEY,
639                 ITEM_SLIDER_DRAW,
640                 defct_mouse_enter,
641                 defct_mouse_leave,
642                 defct_action,
643                 defct_refresh);
644 };
645
646 // ITEM_TEXTSWITCH
647
648 void(void) ITEM_TEXTSWITCH_DRAW =
649 {
650         string temp;
651
652         // get the current text
653         temp = self.text;
654         self.text = getaltstring(self.value, self.text);
655         // call ITEM_TEXT
656         ITEM_TEXT_DRAW();
657         self.text = temp;
658 };
659
660 void(void) ITEM_TEXTSWITCH_REFRESH =
661 {
662         string temp;
663
664         temp = self.text;
665         self.text = getaltstring(self.value, self.text);
666
667         ITEM_TEXT_REFRESH();
668
669         self.text = temp;
670 };
671
672 void(float keynr, float ascii)  ITEM_TEXTSWITCH_KEY =
673 {
674         if(ctcall_key(keynr, ascii))
675                 return;
676
677         if(keynr == K_LEFTARROW || keynr == K_MOUSE2)
678         {
679                 self.value = self.value - 1;
680                 if(self.value < 0)
681                         self.value = getaltstringcount(self.text) - 1;
682         }
683         else if(keynr == K_RIGHTARROW || keynr == K_MOUSE1 || keynr == K_ENTER)
684         {
685                 self.value = self.value + 1;
686                 if(self.value > getaltstringcount(self.text) - 1)
687                         self.value = 0;
688         } else
689         {
690                 def_keyevent(keynr, ascii);
691                 return;
692         }
693         snd_play(self.sound_changed);
694         if(self.switchchange)
695                 self.switchchange();
696 };
697
698 void(void) ITEM_TEXTSWITCH =
699 {
700         string temp;
701
702         if(self.sound_changed != "")
703                 snd_loadsound(self.sound_changed, SOUND_ENFORCELOADING);
704         else
705                 self.sound_changed = SOUND_CHANGE;
706
707         temp = self.text;
708         self.text = getaltstring(self.value, self.text);
709         ITEM_TEXT();
710         self.text = temp;
711
712         item_init(
713                 defct_reinit,
714                 defct_destroy,
715                 ITEM_TEXTSWITCH_KEY,
716                 ITEM_TEXTSWITCH_DRAW,
717                 defct_mouse_enter,
718                 defct_mouse_leave,
719                 defct_action,
720                 ITEM_TEXTSWITCH_REFRESH);
721 };
722
723 /*
724 /////////////////////////////////////////////////////////////////////////
725 // The "actual" funtions
726
727 void(void) ctinit_picture =
728 {
729
730 };
731
732 // draws a text (uses the std. way)
733 void(string text, vector pos, vector size, float alignment, float style, float state) ctdrawtext =
734 {
735         vector alignpos;
736
737         if(text == "")
738                 return;
739
740         // align to the rect pos - (pos + size)
741
742         // now check the alignement
743         if(alignment & TEXT_ALIGN_CENTER)
744                 alignpos_x = pos_x + (size_x - strlen(text) * self.font_size_x) / 2;
745         else if(alignment & TEXT_ALIGN_RIGHT)
746                 alignpos_x = pos_x + size_x - strlen(text) * self.font_size_x;
747         else
748                 alignpos_x = pos_x;
749                 alignpos_y = pos_y;
750
751         if(style == TEXTBUTTON_STYLE_OUTLINE && state != BUTTON_NORMAL)
752         {
753                 vector p,s;
754                 // left
755                 p_x = pos_x;
756                 p_y = pos_y;
757                 s_x = TEXTBUTTON_OUTLINE_WIDTH;
758                 s_y = size_y;
759                 if(state == BUTTON_PRESSED)
760                 {
761                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
762                 }
763                 else if(state == BUTTON_SELECTED)
764                 {
765                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
766                 }
767                 // right
768                 p_x = pos_x + size_x - TEXTBUTTON_OUTLINE_WIDTH;
769                 p_y = pos_y;
770                 s_x = TEXTBUTTON_OUTLINE_WIDTH;
771                 s_y = size_y;
772                 if(state == BUTTON_PRESSED)
773                 {
774                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
775                 }
776                 else if(state == BUTTON_SELECTED)
777                 {
778                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
779                 }
780                 // top
781                 p_x = pos_x;
782                 p_y = pos_y;
783                 s_y = TEXTBUTTON_OUTLINE_WIDTH;
784                 s_x = size_x;
785                 if(state == BUTTON_PRESSED)
786                 {
787                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
788                 }
789                 else if(self._button_state == BUTTON_SELECTED)
790                 {
791                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
792                 }
793                 // bottom
794                 p_x = pos_x;
795                 p_y = pos_y + size_y - TEXTBUTTON_OUTLINE_WIDTH;
796                 s_y = TEXTBUTTON_OUTLINE_WIDTH;
797                 s_x = size_x;
798                 if(state == BUTTON_PRESSED)
799                 {
800                         menu_fillarea(p, s, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
801                 }
802                 else if(state == BUTTON_SELECTED)
803                 {
804                         menu_fillarea(p, s, self.color_selected, self.alpha_selected, self.drawflag_selected);
805                 }
806         } else  if(style == TEXTBUTTON_STYLE_BOX)
807         {
808                 if(state == BUTTON_PRESSED)
809                 {
810                         menu_fillarea(alignpos, size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
811                 }
812                 else if(self._button_state == BUTTON_SELECTED)
813                 {
814                         menu_fillarea(alignpos, size, self.color_selected, self.alpha_selected, self.drawflag_selected);
815                 }
816         }
817
818         if(state == BUTTON_NORMAL || style == TEXTBUTTON_STYLE_BOX || style == TEXTBUTTON_STYLE_OUTLINE)
819                 menu_drawstring(alignpos, text, self.font_size, self.color, self.alpha, self.drawflag);
820
821         if(style == TEXTBUTTON_STYLE_TEXT)
822         {
823                 if(state == BUTTON_PRESSED)
824                 {
825                         menu_drawstring(alignpos, text, self.font_size, self.color_pressed, self.alpha_pressed, self.drawflag_pressed);
826                 }
827                 else if(state == BUTTON_SELECTED)
828                 {
829                         menu_drawstring(alignpos, text, self.font_size, self.color_selected, self.alpha_selected, self.drawflag_selected);
830                 }
831         }
832 };*/