]> icculus.org git repositories - divverent/nexuiz.git/blob - data/qcsrc/menu-div0test/nexuiz/util.qc
fix selection bugs when enabling/disabling the checkboxes
[divverent/nexuiz.git] / data / qcsrc / menu-div0test / nexuiz / util.qc
1 void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass)
2 {
3         depthfirst(root, parent, firstChild, nextSibling, funcPre, funcPost, pass);
4 }
5
6 .string cvarName;
7 void SUB_Null_ee(entity e1, entity e2)
8 {
9 }
10 void saveCvarsOf(entity ignore, entity e)
11 {
12         if(e.cvarName)
13                 e.saveCvars(e);
14 }
15 void loadCvarsOf(entity ignore, entity e)
16 {
17         if(e.cvarName)
18                 e.loadCvars(e);
19 }
20 void saveAllCvars(entity root)
21 {
22         forAllDescendants(root, saveCvarsOf, SUB_Null_ee, NULL);
23 }
24 void loadAllCvars(entity root)
25 {
26         forAllDescendants(root, loadCvarsOf, SUB_Null_ee, NULL);
27 }
28
29 .void(entity) draw_setDependent;
30 .string cvar_setDependent;
31 .float cvarMin_setDependent;
32 .float cvarMax_setDependent;
33 .string cvar2_setDependent;
34 .float cvar2Min_setDependent;
35 .float cvar2Max_setDependent;
36 .float op_setDependent;
37 void setDependent_Check(entity e)
38 {
39         float f;
40         f = cvar(e.cvar_setDependent);
41         if(e.cvarMin_setDependent <= e.cvarMax_setDependent)
42                 e.disabled = ((f < e.cvarMin_setDependent) || (f > e.cvarMax_setDependent));
43         else
44                 e.disabled = ((f >= e.cvarMax_setDependent) && (f <= e.cvarMin_setDependent));
45         if(e.cvar2_setDependent)
46         {
47                 f = cvar(e.cvar2_setDependent);
48                 if(e.cvar2Min_setDependent <= e.cvar2Max_setDependent)
49                         e.disabled = (e.disabled + ((f < e.cvar2Min_setDependent) || (f > e.cvar2Max_setDependent)) > e.op_setDependent);
50                 else
51                         e.disabled = (e.disabled + ((f >= e.cvar2Max_setDependent) && (f <= e.cvar2Min_setDependent)) > e.op_setDependent);
52         }
53 }
54 void setDependent_Draw(entity e)
55 {
56         setDependent_Check(e);
57         e.draw_setDependent(e);
58 }
59 void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax)
60 {
61         e.draw_setDependent = e.draw;
62         e.cvar_setDependent = theCvarName;
63         e.cvarMin_setDependent = theCvarMin;
64         e.cvarMax_setDependent = theCvarMax;
65         e.cvar2_setDependent = string_null;
66         e.draw = setDependent_Draw;
67         setDependent_Check(e);
68 }
69 void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
70 {
71         e.draw_setDependent = e.draw;
72         e.cvar_setDependent = theCvarName;
73         e.cvarMin_setDependent = theCvarMin;
74         e.cvarMax_setDependent = theCvarMax;
75         e.cvar2_setDependent = theCvar2Name;
76         e.cvar2Min_setDependent = theCvar2Min;
77         e.cvar2Max_setDependent = theCvar2Max;
78         e.op_setDependent = 0;
79         e.draw = setDependent_Draw;
80         setDependent_Check(e);
81 }
82 void setDependentOR(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
83 {
84         e.draw_setDependent = e.draw;
85         e.cvar_setDependent = theCvarName;
86         e.cvarMin_setDependent = theCvarMin;
87         e.cvarMax_setDependent = theCvarMax;
88         e.cvar2_setDependent = theCvar2Name;
89         e.cvar2Min_setDependent = theCvar2Min;
90         e.cvar2Max_setDependent = theCvar2Max;
91         e.op_setDependent = 1;
92         e.draw = setDependent_Draw;
93         setDependent_Check(e);
94 }