r2887 - in trunk/data/qcsrc/menu-div0test: . item nexuiz oo

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Nov 2 05:23:11 EDT 2007


Author: div0
Date: 2007-11-02 05:23:10 -0400 (Fri, 02 Nov 2007)
New Revision: 2887

Added:
   trunk/data/qcsrc/menu-div0test/basecheckbox_d0.tga
   trunk/data/qcsrc/menu-div0test/basecheckbox_d1.tga
   trunk/data/qcsrc/menu-div0test/baseradiobutton_d0.tga
   trunk/data/qcsrc/menu-div0test/baseradiobutton_d1.tga
   trunk/data/qcsrc/menu-div0test/baseslider_d.tga
   trunk/data/qcsrc/menu-div0test/item/textslider.c
   trunk/data/qcsrc/menu-div0test/nexuiz/textslider.c
Removed:
   trunk/data/qcsrc/menu-div0test/nexuiz/slider_picmip.c
Modified:
   trunk/data/qcsrc/menu-div0test/classes.c
   trunk/data/qcsrc/menu-div0test/gamecommand.qc
   trunk/data/qcsrc/menu-div0test/item/checkbox.c
   trunk/data/qcsrc/menu-div0test/item/label.c
   trunk/data/qcsrc/menu-div0test/item/slider.c
   trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_effects.c
   trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_video.c
   trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c
   trunk/data/qcsrc/menu-div0test/nexuiz/slider.c
   trunk/data/qcsrc/menu-div0test/nexuiz/slider_resolution.c
   trunk/data/qcsrc/menu-div0test/nexuiz/textlabel.c
   trunk/data/qcsrc/menu-div0test/nexuiz/util.qc
   trunk/data/qcsrc/menu-div0test/nexuiz/util.qh
   trunk/data/qcsrc/menu-div0test/oo/classdefs.h
   trunk/data/qcsrc/menu-div0test/oo/constructors.h
   trunk/data/qcsrc/menu-div0test/oo/implementation.h
   trunk/data/qcsrc/menu-div0test/skin.qh
Log:
video and effects pane almost done


Added: trunk/data/qcsrc/menu-div0test/basecheckbox_d0.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/qcsrc/menu-div0test/basecheckbox_d0.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/qcsrc/menu-div0test/basecheckbox_d1.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/qcsrc/menu-div0test/basecheckbox_d1.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/qcsrc/menu-div0test/baseradiobutton_d0.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/qcsrc/menu-div0test/baseradiobutton_d0.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/qcsrc/menu-div0test/baseradiobutton_d1.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/qcsrc/menu-div0test/baseradiobutton_d1.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/data/qcsrc/menu-div0test/baseslider_d.tga
===================================================================
(Binary files differ)


Property changes on: trunk/data/qcsrc/menu-div0test/baseslider_d.tga
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/data/qcsrc/menu-div0test/classes.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/classes.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/classes.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -12,6 +12,7 @@
 #include "item/slider.c"
 #include "item/dialog.c"
 #include "item/tab.c"
+#include "item/textslider.c"
 #include "nexuiz/dialog.c"
 #include "nexuiz/tab.c"
 #include "nexuiz/mainwindow.c"
@@ -27,6 +28,6 @@
 #include "nexuiz/slider_resolution.c"
 #include "nexuiz/checkbox.c"
 #include "nexuiz/radiobutton.c"
-#include "nexuiz/slider_picmip.c"
 #include "nexuiz/nexposee.c"
 #include "nexuiz/rootdialog.c"
+#include "nexuiz/textslider.c"

Modified: trunk/data/qcsrc/menu-div0test/gamecommand.qc
===================================================================
--- trunk/data/qcsrc/menu-div0test/gamecommand.qc	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/gamecommand.qc	2007-11-02 09:23:10 UTC (rev 2887)
@@ -50,7 +50,7 @@
 
 	if(argv(0) == "sync")
 	{
-		// make changes in cvars known to the system
+		loadAllCvars(main);
 		return;
 	}
 

Modified: trunk/data/qcsrc/menu-div0test/item/checkbox.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/item/checkbox.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/item/checkbox.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -9,6 +9,7 @@
 	ATTRIB(CheckBox, checked, float, 0)
 	ATTRIB(CheckBox, onClick, void(entity, entity), CheckBox_Click)
 	ATTRIB(CheckBox, srcMulti, float, 0)
+	ATTRIB(CheckBox, disabled, float, 0)
 ENDCLASS(CheckBox)
 #endif
 
@@ -35,16 +36,26 @@
 	me.keepspaceLeft = min(0.8, absSize_y / absSize_x);
 	resizeNotifyButton(me, relOrigin, relSize, absOrigin, absSize);
 }
+void showNotifyCheckBox(entity me)
+{
+	me.focusable = !me.disabled;
+}
 void drawCheckBox(entity me)
 {
 	vector cbOrigin;
 	vector cbSize;
 
+	me.focusable = !me.disabled;
+	if(me.disabled)
+		draw_alpha *= 0.5;
+
 	cbOrigin = eY * (0.5 * (1 - me.realFontSize_y)) + eX * (0.5 * (me.keepspaceLeft - me.realFontSize_x));
 	cbSize = me.realFontSize;
 	if(me.checked)
 	{
-		if(me.forcePressed || me.pressed || me.clickTime > 0)
+		if(me.disabled)
+			draw_Picture(cbOrigin, strcat(me.src, "_d1"), cbSize, '1 1 1', 1);
+		else if(me.forcePressed || me.pressed || me.clickTime > 0)
 			draw_Picture(cbOrigin, strcat(me.src, "_c1"), cbSize, '1 1 1', 1);
 		else if(me.focused)
 			draw_Picture(cbOrigin, strcat(me.src, "_f1"), cbSize, '1 1 1', 1);
@@ -53,7 +64,9 @@
 	}
 	else
 	{
-		if(me.forcePressed || me.pressed || me.clickTime > 0)
+		if(me.disabled)
+			draw_Picture(cbOrigin, strcat(me.src, "_d0"), cbSize, '1 1 1', 1);
+		else if(me.forcePressed || me.pressed || me.clickTime > 0)
 			draw_Picture(cbOrigin, strcat(me.src, "_c0"), cbSize, '1 1 1', 1);
 		else if(me.focused)
 			draw_Picture(cbOrigin, strcat(me.src, "_f0"), cbSize, '1 1 1', 1);

Modified: trunk/data/qcsrc/menu-div0test/item/label.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/item/label.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/item/label.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -24,7 +24,7 @@
 void setTextLabel(entity me, string txt)
 {
 	me.text = txt;
-	me.realOrigin_x = me.align * (1 - me.realFontSize_x * draw_TextWidth(me.text));
+	me.realOrigin_x = me.align * (1 - me.keepspaceLeft - me.keepspaceRight - me.realFontSize_x * draw_TextWidth(me.text)) + me.keepspaceLeft;
 }
 void resizeNotifyLabel(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
 {

Modified: trunk/data/qcsrc/menu-div0test/item/slider.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/item/slider.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/item/slider.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -1,7 +1,9 @@
+// Note:
+//   to use this, you FIRST call configureSliderVisuals, then configureSliderValues
 #ifdef INTERFACE
 CLASS(Slider) EXTENDS(Label)
 	METHOD(Slider, resizeNotify, void(entity, vector, vector, vector, vector))
-	METHOD(Slider, configureSliderVisuals, void(entity, float, float, string))
+	METHOD(Slider, configureSliderVisuals, void(entity, float, float, float, string))
 	METHOD(Slider, configureSliderValues, void(entity, float, float, float, float, float, float))
 	METHOD(Slider, draw, void(entity))
 	METHOD(Slider, keyDown, float(entity, float, float, float))
@@ -11,19 +13,23 @@
 	METHOD(Slider, valueToText, string(entity, float))
 	METHOD(Slider, toString, string(entity))
 	METHOD(Slider, setValue, void(entity, float))
+	METHOD(Slider, showNotify, void(entity))
 	ATTRIB(Slider, src, string, "")
 	ATTRIB(Slider, focusable, float, 1)
 	ATTRIB(Slider, value, float, 0)
 	ATTRIB(Slider, valueMin, float, 0)
 	ATTRIB(Slider, valueMax, float, 0)
 	ATTRIB(Slider, valueStep, float, 0)
+	ATTRIB(Slider, valueDigits, float, 0)
 	ATTRIB(Slider, valueKeyStep, float, 0)
 	ATTRIB(Slider, valuePageStep, float, 0)
-	ATTRIB(Slider, valueSpace, float, 0)
+	ATTRIB(Slider, textSpace, float, 0)
 	ATTRIB(Slider, controlWidth, float, 0)
 	ATTRIB(Slider, pressed, float, 0)
 	ATTRIB(Slider, pressOffset, float, 0)
 	ATTRIB(Slider, previousValue, float, 0)
+	ATTRIB(Slider, tolerance, vector, '0 0 0')
+	ATTRIB(Slider, disabled, float, 0)
 ENDCLASS(Slider)
 #endif
 
@@ -43,12 +49,13 @@
 }
 string valueToTextSlider(entity me, float val)
 {
-	return ftos(val);
+	return ftos_decimals(val, me.valueDigits);
 }
-void configureSliderVisualsSlider(entity me, float sz, float theValueSpace, string gfx)
+void configureSliderVisualsSlider(entity me, float sz, float theAlign, float theTextSpace, string gfx)
 {
-	configureLabelLabel(me, "", sz, 1);
-	me.valueSpace = theValueSpace;
+	configureLabelLabel(me, "", sz, theAlign);
+	me.textSpace = theTextSpace;
+	me.keepspaceLeft = (theTextSpace == 0) ? 0 : (1 - theTextSpace);
 	me.src = gfx;
 }
 void configureSliderValuesSlider(entity me, float theValueMin, float theValue, float theValueMax, float theValueStep, float theValueKeyStep, float theValuePageStep)
@@ -59,10 +66,19 @@
 	me.valueMax = theValueMax;
 	me.valueKeyStep = theValueKeyStep;
 	me.valuePageStep = theValuePageStep;
+	me.valueDigits = 3;
+	if(fabs(floor(me.valueStep * 100 + 0.5) - (me.valueStep * 100)) < 0.01) // about a whole number of 100ths
+		me.valueDigits = 2;
+	if(fabs(floor(me.valueStep * 10 + 0.5) - (me.valueStep * 10)) < 0.01) // about a whole number of 10ths
+		me.valueDigits = 1;
+	if(fabs(floor(me.valueStep * 1 + 0.5) - (me.valueStep * 1)) < 0.01) // about a whole number
+		me.valueDigits = 0;
 }
 float keyDownSlider(entity me, float key, float ascii, float shift)
 {
 	float inRange;
+	if(me.disabled)
+		return 0;
 	inRange = (me.value == median(me.valueMin, me.value, me.valueMax));
 	if(key == K_LEFTARROW)
 	{
@@ -113,16 +129,18 @@
 {
 	float hit;
 	float v;
+	if(me.disabled)
+		return 0;
 	if(me.pressed)
 	{
 		hit = 1;
-		if(pos_x < 0) hit = 0;
-		if(pos_y < 0) hit = 0;
-		if(pos_x >= 1 - me.valueSpace) hit = 0;
-		if(pos_y >= 1) hit = 0;
+		if(pos_x < 0 - me.tolerance_x) hit = 0;
+		if(pos_y < 0 - me.tolerance_y) hit = 0;
+		if(pos_x >= 1 - me.textSpace + me.tolerance_x) hit = 0;
+		if(pos_y >= 1 + me.tolerance_y) hit = 0;
 		if(hit)
 		{
-			v = median(0, (pos_x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.valueSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
+			v = median(0, (pos_x - me.pressOffset - 0.5 * me.controlWidth) / (1 - me.textSpace - me.controlWidth), 1) * (me.valueMax - me.valueMin) + me.valueMin;
 			if(me.valueStep)
 				v = floor(0.5 + v / me.valueStep) * me.valueStep;
 			me.setValue(me, v);
@@ -135,11 +153,13 @@
 float mousePressSlider(entity me, vector pos)
 {
 	float controlCenter;
-	if(pos_x < 0) return 0;
-	if(pos_y < 0) return 0;
-	if(pos_x >= 1 - me.valueSpace) return 0;
-	if(pos_y < 0) return 0;
-	controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.valueSpace - me.controlWidth) + 0.5 * me.controlWidth;
+	if(me.disabled)
+		return 0;
+	if(pos_x < 0 - me.tolerance_x) return 0;
+	if(pos_y < 0 - me.tolerance_y) return 0;
+	if(pos_x >= 1 - me.textSpace + me.tolerance_x) return 0;
+	if(pos_y >= 1 + me.tolerance_y) return 0;
+	controlCenter = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth) + 0.5 * me.controlWidth;
 	if(fabs(pos_x - controlCenter) <= 0.5 * me.controlWidth)
 	{
 		me.pressed = 1;
@@ -159,16 +179,27 @@
 float mouseReleaseSlider(entity me, vector pos)
 {
 	me.pressed = 0;
+	if(me.disabled)
+		return 0;
 	return 1;
 }
+void showNotifySlider(entity me)
+{
+	me.focusable = !me.disabled;
+}
 void drawSlider(entity me)
 {
 	float controlLeft;
-	draw_ButtonPicture('0 0 0', strcat(me.src, "_s"), eX * (1 - me.valueSpace) + eY, '1 1 1', 1);
+	me.focusable = !me.disabled;
+	if(me.disabled)
+		draw_alpha *= 0.5;
+	draw_ButtonPicture('0 0 0', strcat(me.src, "_s"), eX * (1 - me.textSpace) + eY, '1 1 1', 1);
 	if(me.value == median(me.valueMin, me.value, me.valueMax))
 	{
-		controlLeft = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.valueSpace - me.controlWidth);
-		if(me.pressed)
+		controlLeft = (me.value - me.valueMin) / (me.valueMax - me.valueMin) * (1 - me.textSpace - me.controlWidth);
+		if(me.disabled)
+			draw_Picture(eX * controlLeft, strcat(me.src, "_d"), eX * me.controlWidth + eY, '1 1 1', 1);
+		else if(me.pressed)
 			draw_Picture(eX * controlLeft, strcat(me.src, "_c"), eX * me.controlWidth + eY, '1 1 1', 1);
 		else if(me.focused)
 			draw_Picture(eX * controlLeft, strcat(me.src, "_f"), eX * me.controlWidth + eY, '1 1 1', 1);

Added: trunk/data/qcsrc/menu-div0test/item/textslider.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/item/textslider.c	                        (rev 0)
+++ trunk/data/qcsrc/menu-div0test/item/textslider.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -0,0 +1,60 @@
+// Note:
+//   to use this, you FIRST call configureSliderVisuals, then multiple times addValue, then configureTextSlider
+#ifdef INTERFACE
+CLASS(TextSlider) EXTENDS(Slider)
+	METHOD(TextSlider, valueToText, string(entity, float))
+	METHOD(TextSlider, valueToIdentifier, string(entity, float))
+	METHOD(TextSlider, setValueFromIdentifier, void(entity, string))
+	METHOD(TextSlider, getIdentifier, string(entity))
+	METHOD(TextSlider, addValue, void(entity, string, string))
+	METHOD(TextSlider, configureTextSliderValues, void(entity, string))
+	ATTRIBARRAY(TextSlider, valueStrings, string, 16)
+	ATTRIBARRAY(TextSlider, valueIdentifiers, string, 16)
+	ATTRIB(TextSlider, nValues, float, 0)
+ENDCLASS(TextSlider)
+#endif
+
+#ifdef IMPLEMENTATION
+string valueToIdentifierTextSlider(entity me, float val)
+{
+	if(val >= me.nValues)
+		return "custom";
+	if(val < 0)
+		return "custom";
+	return me.(valueIdentifiers[val]);
+}
+string valueToTextTextSlider(entity me, float val)
+{
+	if(val >= me.nValues)
+		return "custom";
+	if(val < 0)
+		return "custom";
+	return me.(valueStrings[val]);
+}
+void setValueFromIdentifierTextSlider(entity me, string id)
+{
+	float i;
+	for(i = 0; i < me.nValues; ++i)
+		if(me.valueToIdentifier(me, i) == id)
+		{
+			me.value = i;
+			return;
+		}
+	me.value = -1;
+}
+string getIdentifierTextSlider(entity me)
+{
+	return me.valueToIdentifier(me, me.value);
+}
+void addValueTextSlider(entity me, string theString, string theIdentifier)
+{
+	me.(valueStrings[me.nValues]) = theString;
+	me.(valueIdentifiers[me.nValues]) = theIdentifier;
+	me.nValues += 1;
+}
+void configureTextSliderValuesTextSlider(entity me, string theDefault)
+{
+	me.configureSliderValues(me, 0, 0, me.nValues - 1, 1, 1, 1);
+	me.setValueFromIdentifier(me, theDefault);
+}
+#endif

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_effects.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_effects.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_effects.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -4,7 +4,7 @@
 	ATTRIB(NexuizEffectsSettingsTab, title, string, "Settings")
 	ATTRIB(NexuizEffectsSettingsTab, intendedWidth, float, 0.9)
 	ATTRIB(NexuizEffectsSettingsTab, rows, float, 15)
-	ATTRIB(NexuizEffectsSettingsTab, columns, float, 1)
+	ATTRIB(NexuizEffectsSettingsTab, columns, float, 6.5)
 ENDCLASS(NexuizEffectsSettingsTab)
 entity makeNexuizEffectsSettingsTab();
 #endif
@@ -17,7 +17,169 @@
 	me.configureDialog(me);
 	return me;
 }
+/*
+ * cl_decals 1
+ * cl_nogibs 0
+ * cl_particles_quality 1
+ * cl_particles_snow 1
+ * r_bloom 1
+ * r_coronas 1
+ * r_glsl_deluxemapping 1
+ * r_glsl_offsetmapping 1
+ * r_glsl_offsetmapping_reliefmapping 0
+ * r_hdr 0
+ * r_shadow_usenormalmap 1
+ * r_shadow_gloss 1
+ * r_shadow_realtime_dlight 1
+ * r_shadow_realtime_dlight_shadows 1
+ * r_shadow_realtime_world 1
+ * r_shadow_realtime_world_shadows 1
+ * r_depthfirst 2
+ * r_showsurfaces 0
+ * r_water 1
+ * r_water_resolutionmultiplier 0.5
+ *
+ *
+ * [X] cl_decals
+ * [X] !cl_nogibs
+ * Particles: |--v--|
+ * [X] Bloom [X] HDR
+ * [X] Coronas
+ * [X] Deluxemapping [X] Gloss
+ * [X] Offsetmapping [X] Reliefmapping
+ * [X] dlights [X] normalmaps [X] shadows
+ * [X] rtworld [X] shadows
+ * [X] depth first world [X] depth first models (?????)
+ * [X] OMGLOLWTFBBQ (showsurfaces)
+ * [X] water |----------v----|
+ *
+ *
+ */
 void fillNexuizEffectsSettingsTab(entity me)
 {
+	entity e;
+	float n;
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Quality preset:"));
+		n = 6 + !!cvar("developer");
+		if(cvar("developer"))
+			me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("OMG!", '1 0 1', "exec omg.cfg", 0));
+		me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("Low", '0 0 0', "exec low.cfg", 0));
+		me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("Medium", '0 0 0', "exec med.cfg", 0));
+		me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("Normal", '0 0 0', "exec normal.cfg", 0));
+		me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("High", '0 0 0', "exec high.cfg", 0));
+		me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("Ultra", '0 0 0', "exec ultra.cfg", 0));
+		me.TD(me, 1, 5.5 / n, e = makeNexuizCommandButton("Ultimate", '0 0 0', "exec ultimate.cfg", 0));
+
+	me.TR(me);
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Texture quality:"));
+		me.TD(me, 1, 2, e = makeNexuizTextSlider("gl_picmip"));
+			if(cvar("developer"))
+				e.addValue(e, "Leet", "1337");
+			e.addValue(e, "Lowest", "4");
+			e.addValue(e, "Low", "3");
+			e.addValue(e, "Normal", "2");
+			e.addValue(e, "Good", "1");
+			e.addValue(e, "Best", "0");
+			e.configureNexuizTextSliderValues(e);
+	me.TR(me);
+		me.TDempty(me, 0.2);
+		me.TD(me, 1, 2.8, e = makeNexuizCheckBox(1, "r_picmipworld", "Reduce model texture quality only"));
+			setDependent(e, "gl_picmip", 0.5, -0.5);
+
+	me.TR(me);
+
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Particle quality:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(0.1, 1.0, 0.05, "cl_particles_quality"));
+	me.TR(me);
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "cl_decals", "Decals"));
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Gibs:"));
+		n = 3 + !!cvar("developer");
+		me.TD(me, 1, 2 / n, e = makeNexuizRadioButton(2, "cl_nogibs", "0", "Lots"));
+		me.TD(me, 1, 2 / n, e = makeNexuizRadioButton(2, "cl_nogibs", "0.5", "Many"));
+		me.TD(me, 1, 2 / n, e = makeNexuizRadioButton(2, "cl_nogibs", "0.75", "Few"));
+		if(cvar("developer"))
+			me.TD(me, 1, 2 / n, e = makeNexuizRadioButton(2, "cl_nogibs", "1", "German"));
+
+	me.TR(me);
+
+	me.TR(me);
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "r_coronas", "Coronas"));
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizCheckBox(0, "r_bloom", "Bloom"));
+		me.TD(me, 1, 2, e = makeNexuizCheckBox(0, "r_hdr", "High Dynamic Range (HDR)"));
+			setDependent(e, "r_bloom", 1, 1);
+
+	me.TR(me);
+
+	me.TR(me);
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "showfps", "Show frames per second"));
+
+	me.gotoXY(me, 2, 3.5); me.setFirstColumn(me, me.currentColumn);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Anisotropy:"));
+		me.TD(me, 1, 2, e = makeNexuizTextSlider("gl_texture_anisotropy"));
+			e.addValue(e, "1x", "1");
+			e.addValue(e, "2x", "2");
+			e.addValue(e, "4x", "4");
+			e.addValue(e, "8x", "8");
+			e.addValue(e, "16x", "16");
+			e.configureNexuizTextSliderValues(e);
+	me.TR(me);
+		me.TD(me, 1, 1.5, e = makeNexuizCheckBox(0, "r_glsl_deluxemapping", "Deluxe mapping"));
+			setDependent(e, "r_glsl", 1, 1);
+		me.TD(me, 1, 1.5, e = makeNexuizCheckBox(0, "r_shadow_gloss", "Gloss"));
+			setDependentAND(e, "r_glsl", 1, 1, "r_glsl_deluxemapping", 1, 1);
+
+	me.TR(me);
+
+	me.TR(me);
+		me.TD(me, 1, 2, e = makeNexuizCheckBox(0, "r_shadow_realtime_dlight", "Realtime dynamic lighting"));
+		me.TD(me, 1, 1, e = makeNexuizCheckBox(0, "r_shadow_realtime_dlight_shadows", "Shadows"));
+			setDependent(e, "r_shadow_realtime_dlight", 1, 1);
+
+	me.TR(me);
+		me.TD(me, 1, 2, e = makeNexuizCheckBox(0, "r_shadow_realtime_world", "Realtime world lighting"));
+		me.TD(me, 1, 1, e = makeNexuizCheckBox(0, "r_shadow_realtime_world_shadows", "Shadows"));
+			setDependent(e, "r_shadow_realtime_world", 1, 1);
+
+	me.TR(me);
+		me.TDempty(me, 0.2);
+		me.TD(me, 1, 2.8, e = makeNexuizCheckBox(0, "r_shadow_usenormalmaps", "Use normal maps"));
+			setDependentOR(e, "r_shadow_realtime_dlight", 1, 1, "r_shadow_realtime_world", 1, 1);
+	
+	me.TR(me);
+
+	me.TR(me);
+		me.TD(me, 1, 1.5, e = makeNexuizCheckBox(0, "r_glsl_offsetmapping", "Offset mapping"));
+			setDependent(e, "r_glsl", 1, 1);
+		me.TD(me, 1, 1.5, e = makeNexuizCheckBox(0, "r_glsl_offsetmapping_reliefmapping", "Relief mapping"));
+			setDependentAND(e, "r_glsl", 1, 1, "r_glsl_offsetmapping", 1, 1);
+	me.TR(me);
+		me.TD(me, 1, 1, e = makeNexuizCheckBox(0, "r_water", "Reflections"));
+		me.TD(me, 1, 2, e = makeNexuizTextSlider("r_water_resolutionmultiplier"));
+			e.addValue(e, "Blurred", "0.25");
+			e.addValue(e, "Good", "0.5");
+			e.addValue(e, "Sharp", "1");
+			e.addValue(e, "Insane", "2");
+			e.configureNexuizTextSliderValues(e);
+			setDependent(e, "r_water", 1, 1);
+
+	me.TR(me);
+
+	me.TR(me);
+		if(cvar("developer"))
+			me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "r_showsurfaces", "Show surfaces"));
+
+	me.gotoXY(me, me.rows - 1, 0);
+		me.TD(me, 1, me.columns, makeNexuizCommandButton("Apply immediately", '0 0 0', "sendcvar cl_nogibs; r_restart", COMMANDBUTTON_APPLY));
 }
+/*
+ * [X] depth first world [X] depth first models (?????)
+ * [X] OMGLOLWTFBBQ (showsurfaces)
+ *
+ *
+ */
 #endif

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_video.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_video.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_video.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -19,59 +19,75 @@
 }
 void fillNexuizVideoSettingsTab(entity me)
 {
+	entity e;
+
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Resolution:"));
-		me.TD(me, 1, 2, makeNexuizResolutionSlider());
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Resolution:"));
+		me.TD(me, 1, 2, e = makeNexuizResolutionSlider());
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Color depth:"));
-		me.TD(me, 1, 2, makeNexuizSlider(16, 32, 16, "vid_bitsperpixel"));
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Color depth:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(16, 32, 16, "vid_bitsperpixel"));
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizCheckBox(0, "vid_fullscreen", "Full screen"));
-		me.TD(me, 1, 2, makeNexuizCheckBox(0, "vid_vsync", "Vertical synchronization"));
+		me.TD(me, 1, 1, e = makeNexuizCheckBox(0, "vid_fullscreen", "Full screen"));
+		me.TD(me, 1, 2, e = makeNexuizCheckBox(0, "vid_vsync", "Vertical synchronization"));
+
 	me.TR(me);
+
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Anisotropy:"));
-		me.TD(me, 1, 0.4, makeNexuizRadioButton(1, "gl_texture_anisotropy", "1", "Off"));
-		me.TD(me, 1, 0.4, makeNexuizRadioButton(1, "gl_texture_anisotropy", "2", "2x"));
-		me.TD(me, 1, 0.4, makeNexuizRadioButton(1, "gl_texture_anisotropy", "4", "4x"));
-		me.TD(me, 1, 0.4, makeNexuizRadioButton(1, "gl_texture_anisotropy", "8", "8x"));
-		me.TD(me, 1, 0.4, makeNexuizRadioButton(1, "gl_texture_anisotropy", "16", "16x"));
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "r_glsl", "Use OpenGL 2.0 shaders (GLSL)"));
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Texture quality:"));
-		me.TD(me, 1, 2, makeNexuizPicmipSlider());
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "gl_vbo", "Use Vertex Buffer Objects (VBO)"));
 	me.TR(me);
-		me.TDempty(me, 0.2);
-		me.TD(me, 1, 2.8, makeNexuizCheckBox(1, "r_picmipworld", "Reduce model texture quality only"));
+		me.TD(me, 1, 1.5, e = makeNexuizTextLabel(0, "Texture compression"));
+		me.TD(me, 1, 0.5, e = makeNexuizRadioButton(1, "gl_texturecompression", "0", "None"));
+		me.TD(me, 1, 0.5, e = makeNexuizRadioButton(1, "gl_texturecompression", "1", "Fast"));
+		me.TD(me, 1, 0.5, e = makeNexuizRadioButton(1, "gl_texturecompression", "2", "Good"));
+
 	me.TR(me);
+
 	me.TR(me);
-		me.TD(me, 1, 3, makeNexuizCheckBox(0, "r_glsl", "Use OpenGL 2.0 shaders (GLSL)"));
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Depth first:"));
+		me.TD(me, 1, 2, e = makeNexuizTextSlider("r_depthfirst"));
+			e.addValue(e, "Disabled", "0");
+			e.addValue(e, "World", "1");
+			e.addValue(e, "All", "2");
+			e.configureNexuizTextSliderValues(e);
+
 	me.TR(me);
-		me.TD(me, 1, 3, makeNexuizCheckBox(0, "gl_vbo", "Use Vertex Buffer Objects (VBO)"));
+		if(cvar_defstring("apple_multithreadedgl") != "")
+			me.TD(me, 1, 3, e = makeNexuizCheckBox(1, "apple_multithreadedgl", "Disable multithreaded OpenGL"));
+
 	me.TR(me);
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "gl_finish", "Wait for GPU to finish each frame"));
+
 	me.TR(me);
-		me.TD(me, 1, 3, makeNexuizCheckBox(0, "showfps", "Show frames per second"));
 
-	me.gotoXY(me, -1, 0);
-	me.setFirstColumn(me, 3.5);
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Brightness:"));
-		me.TD(me, 1, 2, makeNexuizSlider(0.0, 0.5, 0.02, "v_brightness"));
+		me.TD(me, 1, 3, e = makeNexuizCheckBox(0, "showfps", "Show frames per second"));
+
+	me.gotoXY(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Brightness:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(0.0, 0.5, 0.02, "v_brightness"));
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Contrast:"));
-		me.TD(me, 1, 2, makeNexuizSlider(1.0, 3.0, 0.05, "v_contrast"));
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Contrast:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(1.0, 3.0, 0.05, "v_contrast"));
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizCheckBox(0, "v_hwgamma", "HW Gamma:"));
-		me.TD(me, 1, 2, makeNexuizSlider(0.5, 2.0, 0.05, "v_gamma"));
+		me.TD(me, 1, 1, e = makeNexuizCheckBox(0, "v_hwgamma", "HW Gamma:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(0.5, 2.0, 0.05, "v_gamma"));
+			setDependent(e, "v_hwgamma", 1, 1);
 	me.TR(me);
+
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Ambient lighting:"));
-		me.TD(me, 1, 2, makeNexuizSlider(0, 20.0, 1.0, "r_ambient"));
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Ambient lighting:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(0, 20.0, 1.0, "r_ambient"));
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Scene brightness:"));
-		me.TD(me, 1, 2, makeNexuizSlider(0.5, 2.0, 0.05, "r_hdr_scenebrightness"));
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Scene brightness:"));
+		me.TD(me, 1, 2, e = makeNexuizSlider(0.5, 2.0, 0.05, "r_hdr_scenebrightness"));
 	me.TR(me);
-		me.TD(me, 1, 1, makeNexuizTextLabel(0, "Contrast boost:"));
-		me.TD(me, 1, 2, makeNexuizSlider(1.0, 5.0, 0.1, "r_glsl_contrastboost"));
+		me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Contrast boost:"));
+			setDependent(e, "r_glsl", 1, 1);
+		me.TD(me, 1, 2, e = makeNexuizSlider(1.0, 5.0, 0.1, "r_glsl_contrastboost"));
+			setDependent(e, "r_glsl", 1, 1);
 
 	me.gotoXY(me, me.rows - 1, 0);
 		me.TD(me, 1, me.columns, makeNexuizCommandButton("Apply immediately", '0 0 0', "vid_restart", COMMANDBUTTON_APPLY));

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/mainwindow.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -21,47 +21,6 @@
 	n = spawnNexuizNexposee();
 	me.addItem(me, n, '0 0 0', '1 1 0', 1);
 
-	dlg = spawnInputContainer();
-		cb = spawnButton();
-		cb.configureButton(cb, "", 12, "qcsrc/menu-div0test/baseclosebutton");
-		cb.onClick = DialogCloseButton_Click; cb.onClickEntity = dlg;
-		cb.srcMulti = 0;
-
-		i = spawnBorderImage();
-		i.configureBorderImage(i, "I told you...", 18, '0.5 0.5 1', "qcsrc/menu-div0test/baseborder", 18 * 1.5);
-		i.closeButton = cb;
-		dlg.addItem(dlg, i, '0 0 0', '1 1 0', 1);
-
-		i = spawnLabel();
-		i.configureLabel(i, "Swim swim hungry, swim swim hungry...", 10, 0.5);
-		dlg.addItem(dlg, i, '0 0.3 0', '1 0.1 0', 1);
-
-		i = spawnRadioButton();
-		i.configureRadioButton(i, "RadioButton1", 12, "qcsrc/menu-div0test/baseradiobutton", 1, 0);
-		dlg.addItem(dlg, i, '0.1 0.4 0', '0.4 0.1 0', 1);
-
-		i = spawnRadioButton();
-		i.configureRadioButton(i, "RadioButton2", 12, "qcsrc/menu-div0test/baseradiobutton", 1, 1);
-		dlg.addItem(dlg, i, '0.5 0.4 0', '0.8 0.1 0', 1);
-
-		i = spawnSlider();
-		i.configureSliderVisuals(i, 12, 0.2, "qcsrc/menu-div0test/baseslider");
-		i.configureSliderValues(i, 1, 50, 200, 1, 1, 20);
-		dlg.addItem(dlg, i, '0.1 0.5 0', '0.8 0.1 0', 1);
-
-		i = spawnCheckBox();
-		i.configureCheckBox(i, "Do not show this dialog again", 12, "qcsrc/menu-div0test/basecheckbox");
-		i.checked = 1;
-		dlg.addItem(dlg, i, '0.1 0.6 0', '0.8 0.1 0', 1);
-
-		i = spawnButton();
-		i.configureButton(i, "Close", 12, "qcsrc/menu-div0test/basebutton");
-		i.onClick = DialogCloseButton_Click; i.onClickEntity = dlg;
-		dlg.addItem(dlg, i, '0.3 0.7 0', '0.4 0.2 0', 1);
-
-		dlg.addItem(dlg, cb, '0.3 0.7 0', '0.4 0.2 0', 1);
-	me.addItem(me, dlg, '0.2 0.3 0', '0.6 0.4 0', 1);
-	
 	i = spawnNexuizTeamSelectDialog();
 	i.configureDialog(i);
 	me.addItemCentered(me, i, i.intendedWidth * eX + i.intendedHeight * eY, 1);

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/slider.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/slider.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/slider.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -5,6 +5,8 @@
 	ATTRIB(NexuizSlider, fontSize, float, SKINFONTSIZE_NORMAL)
 	ATTRIB(NexuizSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT)
 	ATTRIB(NexuizSlider, image, string, SKINGFX_SLIDER)
+	ATTRIB(NexuizSlider, tolerance, vector, SKINTOLERANCE_SLIDER)
+	ATTRIB(NexuizSlider, align, float, 0.5)
 
 	ATTRIB(NexuizSlider, cvarName, string, string_null)
 	METHOD(NexuizSlider, loadCvars, void(entity))
@@ -29,7 +31,7 @@
 	vp = theValueStep * 10;
 	while(fabs(vp) < fabs(theValueMax - theValueMin) / 40)
 		vp *= 10;
-	me.configureSliderVisuals(me, me.fontSize, me.valueSpace, me.image);
+	me.configureSliderVisuals(me, me.fontSize, me.align, me.valueSpace, me.image);
 	me.configureSliderValues(me, theValueMin, v, theValueMax, theValueStep, vk, vp);
 	if(theCvar != "")
 	{

Deleted: trunk/data/qcsrc/menu-div0test/nexuiz/slider_picmip.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/slider_picmip.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/slider_picmip.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -1,33 +0,0 @@
-#ifdef INTERFACE
-CLASS(NexuizPicmipSlider) EXTENDS(NexuizSlider)
-	METHOD(NexuizPicmipSlider, valueToText, string(entity, float))
-	METHOD(NexuizPicmipSlider, configureNexuizPicmipSlider, void(entity))
-ENDCLASS(NexuizPicmipSlider)
-entity makeNexuizPicmipSlider();
-#endif
-
-#ifdef IMPLEMENTATION
-entity makeNexuizPicmipSlider()
-{
-	entity me;
-	me = spawnNexuizPicmipSlider();
-	me.configureNexuizPicmipSlider(me);
-	return me;
-}
-string valueToTextNexuizPicmipSlider(entity me, float theValue)
-{
-	switch(floor(theValue + 0.5))
-	{
-		case 0:  return "best";
-		case 1:  return "good";
-		case 2:  return "medium";
-		case 3:  return "low";
-		case 4:  return "none";
-		default: return "custom";
-	}
-}
-void configureNexuizPicmipSliderNexuizPicmipSlider(entity me)
-{
-	me.configureNexuizSlider(me, 4, 0, -1, "gl_picmip");
-}
-#endif

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/slider_resolution.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/slider_resolution.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/slider_resolution.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -1,25 +1,9 @@
 #ifdef INTERFACE
-CLASS(NexuizResolutionSlider) EXTENDS(NexuizSlider)
-	METHOD(NexuizResolutionSlider, valueToText, string(entity, float))
+CLASS(NexuizResolutionSlider) EXTENDS(NexuizTextSlider)
 	METHOD(NexuizResolutionSlider, configureNexuizResolutionSlider, void(entity))
+	METHOD(NexuizResolutionSlider, addResolution, void(entity, float, float))
 	METHOD(NexuizResolutionSlider, loadCvars, void(entity))
 	METHOD(NexuizResolutionSlider, saveCvars, void(entity))
-	ATTRIB(NexuizResolutionSlider, resolutions, string, 
-		" 640  480 "
-		" 800  600 "
-		" 960  600 "
-		"1024  768 "
-		"1152  864 "
-		"1280  800 "
-		"1280  960 "
-		"1280 1024 "
-		"1440  900 "
-		"1600  900 "
-		"1600 1200 "
-		"1680 1050 "
-		"1920 1200 "
-		"2048 1536 "
-	)
 ENDCLASS(NexuizResolutionSlider)
 entity makeNexuizResolutionSlider();
 #endif
@@ -32,50 +16,40 @@
 	me.configureNexuizResolutionSlider(me);
 	return me;
 }
-string valueToTextNexuizResolutionSlider(entity me, float theValue)
+void addResolutionNexuizResolutionSlider(entity me, float w, float h)
 {
-	string r;
-	float w, h;
-	if(theValue < me.valueMin || theValue > me.valueMax)
-		return "custom";
-	r = substring(me.resolutions, (theValue - 1) * 10, 10);
-	w = stof(substring(r, 0, 5));
-	h = stof(substring(r, 5, 10));
-	return strcat(ftos(w), "x", ftos(h));
+	me.addValue(me, strzone(strcat(ftos(w), "x", ftos(h))), strzone(strcat(ftos(w), " ", ftos(h))));
+	// FIXME (in case you ever want to dynamically instantiate this): THIS IS NEVER FREED
 }
 void configureNexuizResolutionSliderNexuizResolutionSlider(entity me)
 {
-	me.configureNexuizSlider(me, 1, strlen(me.resolutions) / 10, 1, "vid_width");
+	me.configureNexuizTextSlider(me, "vid_width");
+	me.addResolution(me, 640, 480);
+	me.addResolution(me, 800, 600);
+	me.addResolution(me, 1024, 768);
+	me.addResolution(me, 1152, 864);
+	me.addResolution(me, 1280, 800);
+	me.addResolution(me, 1280, 960);
+	me.addResolution(me, 1280, 1024);
+	me.addResolution(me, 1440, 900);
+	me.addResolution(me, 1600, 900);
+	me.addResolution(me, 1600, 1200);
+	me.addResolution(me, 1680, 1050);
+	me.addResolution(me, 1920, 1200);
+	me.addResolution(me, 2048, 1536);
+	me.configureNexuizTextSliderValues(me);
 }
 void loadCvarsNexuizResolutionSlider(entity me)
 {
-	string r;
-	float i;
-	float w, h;
-	me.value = 0;
-	w = cvar("vid_width");
-	h = cvar("vid_height");
-	for(i = me.valueMin; i <= me.valueMax; ++i)
-	{
-		r = substring(me.resolutions, (i - 1) * 10, 10);
-		if(w == stof(substring(r, 0, 5)))
-			if(h == stof(substring(r, 5, 10)))
-			{
-				me.value = i;
-				break;
-			}
-	}
+	me.setValueFromIdentifier(me, strcat(cvar_string("vid_width"), " ", cvar_string("vid_height")));
 }
 void saveCvarsNexuizResolutionSlider(entity me)
 {
-	string r;
-	float w, h;
-	if(me.value < me.valueMin || me.value > me.valueMax)
-		return;
-	r = substring(me.resolutions, (me.value - 1) * 10, 10);
-	w = stof(substring(r, 0, 5));
-	h = stof(substring(r, 5, 10));
-	cvar_set("vid_width", ftos(w));
-	cvar_set("vid_height", ftos(h));
+	if(me.value >= 0 || me.value < me.nValues)
+	{
+		tokenize(me.getIdentifier(me));
+		cvar_set("vid_width", argv(0));
+		cvar_set("vid_height", argv(1));
+	}
 }
 #endif

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/textlabel.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/textlabel.c	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/textlabel.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -1,7 +1,9 @@
 #ifdef INTERFACE
 CLASS(NexuizTextLabel) EXTENDS(Label)
 	METHOD(NexuizTextLabel, configureNexuizTextLabel, void(entity, float, string))
+	METHOD(NexuizTextLabel, draw, void(entity))
 	ATTRIB(NexuizTextLabel, fontSize, float, SKINFONTSIZE_NORMAL)
+	ATTRIB(NexuizTextLabel, disabled, float, 0)
 ENDCLASS(NexuizTextLabel)
 entity makeNexuizTextLabel(float theAlign, string theText);
 #endif
@@ -18,4 +20,10 @@
 {
 	me.configureLabel(me, theText, me.fontSize, theAlign);
 }
+void drawNexuizTextLabel(entity me)
+{
+	if(me.disabled)
+		draw_alpha *= 0.5;
+	drawLabel(me);
+}
 #endif

Added: trunk/data/qcsrc/menu-div0test/nexuiz/textslider.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/textslider.c	                        (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/textslider.c	2007-11-02 09:23:10 UTC (rev 2887)
@@ -0,0 +1,56 @@
+#ifdef INTERFACE
+CLASS(NexuizTextSlider) EXTENDS(TextSlider)
+	METHOD(NexuizTextSlider, configureNexuizTextSlider, void(entity, string))
+	METHOD(NexuizTextSlider, setValue, void(entity, float))
+	METHOD(NexuizTextSlider, configureNexuizTextSliderValues, void(entity))
+	ATTRIB(NexuizTextSlider, fontSize, float, SKINFONTSIZE_NORMAL)
+	ATTRIB(NexuizTextSlider, valueSpace, float, SKINWIDTH_SLIDERTEXT)
+	ATTRIB(NexuizTextSlider, image, string, SKINGFX_SLIDER)
+	ATTRIB(NexuizSlider, tolerance, vector, SKINTOLERANCE_SLIDER)
+	ATTRIB(NexuizTextSlider, align, float, 0.5)
+
+	ATTRIB(NexuizTextSlider, cvarName, string, string_null)
+	METHOD(NexuizTextSlider, loadCvars, void(entity))
+	METHOD(NexuizTextSlider, saveCvars, void(entity))
+ENDCLASS(NexuizTextSlider)
+entity makeNexuizTextSlider(string); // note: you still need to call addValue and configureNexuizTextSliderValues!
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeNexuizTextSlider(string theCvar)
+{
+	entity me;
+	me = spawnNexuizTextSlider();
+	me.configureNexuizTextSlider(me, theCvar);
+	return me;
+}
+void configureNexuizTextSliderNexuizTextSlider(entity me, string theCvar)
+{
+	me.configureSliderVisuals(me, me.fontSize, me.align, me.valueSpace, me.image);
+	if(theCvar != "")
+		me.cvarName = theCvar;
+		// don't load it yet
+}
+void setValueNexuizTextSlider(entity me, float val)
+{
+	if(val != me.value)
+	{
+		me.value = val;
+		me.saveCvars(me);
+	}
+}
+void loadCvarsNexuizTextSlider(entity me)
+{
+	me.setValueFromIdentifier(me, cvar_string(me.cvarName));
+}
+void saveCvarsNexuizTextSlider(entity me)
+{
+	if(me.value >= 0 && me.value < me.nValues)
+		cvar_set(me.cvarName, me.getIdentifier(me));
+}
+void configureNexuizTextSliderValuesNexuizTextSlider(entity me)
+{
+	me.configureTextSliderValues(me, "");
+	me.loadCvars(me);
+}
+#endif

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/util.qc
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/util.qc	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/util.qc	2007-11-02 09:23:10 UTC (rev 2887)
@@ -25,3 +25,70 @@
 {
 	forAllDescendants(root, loadCvarsOf, SUB_Null_ee, NULL);
 }
+
+.void(entity) draw_setDependent;
+.string cvar_setDependent;
+.float cvarMin_setDependent;
+.float cvarMax_setDependent;
+.string cvar2_setDependent;
+.float cvar2Min_setDependent;
+.float cvar2Max_setDependent;
+.float op_setDependent;
+void setDependent_Check(entity e)
+{
+	float f;
+	f = cvar(e.cvar_setDependent);
+	if(e.cvarMin_setDependent <= e.cvarMax_setDependent)
+		e.disabled = ((f < e.cvarMin_setDependent) || (f > e.cvarMax_setDependent));
+	else
+		e.disabled = ((f >= e.cvarMax_setDependent) && (f <= e.cvarMin_setDependent));
+	if(e.cvar2_setDependent != string_null)
+	{
+		f = cvar(e.cvar2_setDependent);
+		if(e.cvar2Min_setDependent <= e.cvar2Max_setDependent)
+			e.disabled = (e.disabled + ((f < e.cvar2Min_setDependent) || (f > e.cvar2Max_setDependent)) > e.op_setDependent);
+		else
+			e.disabled = (e.disabled + ((f >= e.cvar2Max_setDependent) && (f <= e.cvar2Min_setDependent)) > e.op_setDependent);
+	}
+}
+void setDependent_Draw(entity e)
+{
+	setDependent_Check(e);
+	e.draw_setDependent(e);
+}
+void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax)
+{
+	e.draw_setDependent = e.draw;
+	e.cvar_setDependent = theCvarName;
+	e.cvarMin_setDependent = theCvarMin;
+	e.cvarMax_setDependent = theCvarMax;
+	e.cvar2_setDependent = string_null;
+	e.draw = setDependent_Draw;
+	setDependent_Check(e);
+}
+void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
+{
+	e.draw_setDependent = e.draw;
+	e.cvar_setDependent = theCvarName;
+	e.cvarMin_setDependent = theCvarMin;
+	e.cvarMax_setDependent = theCvarMax;
+	e.cvar2_setDependent = theCvar2Name;
+	e.cvar2Min_setDependent = theCvar2Min;
+	e.cvar2Max_setDependent = theCvar2Max;
+	e.op_setDependent = 0;
+	e.draw = setDependent_Draw;
+	setDependent_Check(e);
+}
+void setDependentOR(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max)
+{
+	e.draw_setDependent = e.draw;
+	e.cvar_setDependent = theCvarName;
+	e.cvarMin_setDependent = theCvarMin;
+	e.cvarMax_setDependent = theCvarMax;
+	e.cvar2_setDependent = theCvar2Name;
+	e.cvar2Min_setDependent = theCvar2Min;
+	e.cvar2Max_setDependent = theCvar2Max;
+	e.op_setDependent = 1;
+	e.draw = setDependent_Draw;
+	setDependent_Check(e);
+}

Modified: trunk/data/qcsrc/menu-div0test/nexuiz/util.qh
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/util.qh	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/util.qh	2007-11-02 09:23:10 UTC (rev 2887)
@@ -1,3 +1,7 @@
 void forAllDescendants(entity root, void(entity, entity) funcPre, void(entity, entity) funcPost, entity pass);
 void saveAllCvars(entity root);
 void loadAllCvars(entity root);
+
+void setDependent(entity e, string theCvarName, float theCvarMin, float theCvarMax);
+void setDependentAND(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max);
+void setDependentOR(entity e, string theCvarName, float theCvarMin, float theCvarMax, string theCvar2Name, float theCvar2Min, float theCvar2Max);

Modified: trunk/data/qcsrc/menu-div0test/oo/classdefs.h
===================================================================
--- trunk/data/qcsrc/menu-div0test/oo/classdefs.h	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/oo/classdefs.h	2007-11-02 09:23:10 UTC (rev 2887)
@@ -11,11 +11,13 @@
 #undef EXTENDS
 #undef METHOD
 #undef ATTRIB
+#undef ATTRIBARRAY
 #undef ENDCLASS
 #endif
 
-#define CLASS(cname)                 entity spawn##cname();
+#define CLASS(cname)                       entity spawn##cname();
 #define EXTENDS(base)                
-#define METHOD(cname,name,prototype) prototype name##cname; .prototype name;
-#define ATTRIB(cname,name,type,val)  .type name;
-#define ENDCLASS(cname)              .float instanceOf##cname;
+#define METHOD(cname,name,prototype)       prototype name##cname; .prototype name;
+#define ATTRIB(cname,name,type,val)        .type name;
+#define ATTRIBARRAY(cname,name,type,cnt)   .type name[cnt];
+#define ENDCLASS(cname)                    .float instanceOf##cname;

Modified: trunk/data/qcsrc/menu-div0test/oo/constructors.h
===================================================================
--- trunk/data/qcsrc/menu-div0test/oo/constructors.h	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/oo/constructors.h	2007-11-02 09:23:10 UTC (rev 2887)
@@ -11,11 +11,13 @@
 #undef EXTENDS
 #undef METHOD
 #undef ATTRIB
+#undef ATTRIBARRAY
 #undef ENDCLASS
 #endif
 
-#define CLASS(cname)                 entity spawn##cname() { entity me;
-#define EXTENDS(base)                me = spawn##base ();
-#define METHOD(cname,name,prototype) me.name = name##cname;
-#define ATTRIB(cname,name,type,val)  me.name = val;
-#define ENDCLASS(cname)              me.instanceOf##cname = 1; me.classname = #cname; return me; }
+#define CLASS(cname)                       entity spawn##cname() { entity me;
+#define EXTENDS(base)                      me = spawn##base ();
+#define METHOD(cname,name,prototype)       me.name = name##cname;
+#define ATTRIB(cname,name,type,val)        me.name = val;
+#define ATTRIBARRAY(cname,name,type,cnt)   me.name = me.name;
+#define ENDCLASS(cname)                    me.instanceOf##cname = 1; me.classname = #cname; return me; }

Modified: trunk/data/qcsrc/menu-div0test/oo/implementation.h
===================================================================
--- trunk/data/qcsrc/menu-div0test/oo/implementation.h	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/oo/implementation.h	2007-11-02 09:23:10 UTC (rev 2887)
@@ -11,5 +11,6 @@
 #undef EXTENDS
 #undef METHOD
 #undef ATTRIB
+#undef ATTRIBARRAY
 #undef ENDCLASS
 #endif

Modified: trunk/data/qcsrc/menu-div0test/skin.qh
===================================================================
--- trunk/data/qcsrc/menu-div0test/skin.qh	2007-11-02 06:20:33 UTC (rev 2886)
+++ trunk/data/qcsrc/menu-div0test/skin.qh	2007-11-02 09:23:10 UTC (rev 2887)
@@ -18,3 +18,5 @@
 const float SKINHEIGHT_NORMAL_WITHSPACING = 2;
 
 const float SKINWIDTH_SLIDERTEXT = 0.333333333333;
+
+const vector SKINTOLERANCE_SLIDER = '0.2 2 0';




More information about the nexuiz-commits mailing list