r2907 - in trunk/data/qcsrc/menu-div0test: . item nexuiz
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Nov 5 06:20:59 EST 2007
Author: div0
Date: 2007-11-05 06:20:58 -0500 (Mon, 05 Nov 2007)
New Revision: 2907
Added:
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c
trunk/data/qcsrc/menu-div0test/nexuiz/listbox.c
trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c
Removed:
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_player.c
Modified:
trunk/data/qcsrc/menu-div0test/classes.c
trunk/data/qcsrc/menu-div0test/draw.qc
trunk/data/qcsrc/menu-div0test/draw.qh
trunk/data/qcsrc/menu-div0test/item/listbox.c
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer.c
trunk/data/qcsrc/menu-div0test/skin.qh
Log:
add somehow broken server list, far from done yet
Modified: trunk/data/qcsrc/menu-div0test/classes.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/classes.c 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/classes.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -25,7 +25,7 @@
#include "nexuiz/dialog_settings_effects.c"
#include "nexuiz/dialog_settings_audio.c"
#include "nexuiz/dialog_multiplayer.c"
-#include "nexuiz/dialog_settings_player.c"
+#include "nexuiz/dialog_multiplayer_playersetup.c"
#include "nexuiz/tabcontroller.c"
#include "nexuiz/textlabel.c"
#include "nexuiz/slider.c"
@@ -36,3 +36,6 @@
#include "nexuiz/rootdialog.c"
#include "nexuiz/textslider.c"
#include "nexuiz/colorbutton.c"
+#include "nexuiz/dialog_multiplayer_join.c"
+#include "nexuiz/listbox.c"
+#include "nexuiz/serverlist.c"
Modified: trunk/data/qcsrc/menu-div0test/draw.qc
===================================================================
--- trunk/data/qcsrc/menu-div0test/draw.qc 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/draw.qc 2007-11-05 11:20:58 UTC (rev 2907)
@@ -54,6 +54,11 @@
drawpic(boxToGlobal(theOrigin, draw_shift, draw_scale), pic, boxToGlobalSize(theSize, draw_scale), theColor, theAlpha * draw_alpha, 0);
}
+void draw_Fill(vector theOrigin, vector theSize, vector theColor, float theAlpha)
+{
+ drawfill(boxToGlobal(theOrigin, draw_shift, draw_scale), boxToGlobalSize(theSize, draw_scale), theColor, theAlpha * draw_alpha, 0);
+}
+
// a button picture is a texture containing three parts:
// 1/4 width: left part
// 1/2 width: middle part (stretched)
@@ -225,3 +230,36 @@
drawresetcliparea();
draw_clipSet = 0;
}
+
+string draw_TextShortenToWidth(string theText, float maxWidth)
+{
+ // STOP.
+ // The following function is SLOW.
+ // For your safety and for the protection of those around you...
+ // DO NOT CALL THIS AT HOME.
+ // No really, don't.
+ if(draw_TextWidth(theText) <= maxWidth)
+ return theText; // yeah!
+
+ // binary search for right place to cut string
+ float left, right, middle; // this always works
+ left = 0;
+ right = strlen(theText); // this always fails
+ do
+ {
+ middle = floor((left + right) / 2);
+ if(draw_TextWidth(strcat(substring(theText, 0, middle), "...")) <= maxWidth)
+ left = middle;
+ else
+ right = middle;
+ }
+ while(left < right - 1);
+
+ // NOTE: when color codes are involved, this binary search is,
+ // mathematically, BROKEN. However, it is obviously guaranteed to
+ // terminate, as the range still halves each time - but nevertheless, it is
+ // guaranteed that it finds ONE valid cutoff place (where "left" is in
+ // range, and "right" is outside).
+
+ return strcat(substring(theText, 0, left), "...");
+}
Modified: trunk/data/qcsrc/menu-div0test/draw.qh
===================================================================
--- trunk/data/qcsrc/menu-div0test/draw.qh 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/draw.qh 2007-11-05 11:20:58 UTC (rev 2907)
@@ -10,8 +10,10 @@
void draw_VertButtonPicture(vector theOrigin, string pic, vector theSize, vector theColor, float theAlpha);
void draw_BorderPicture(vector theOrigin, string pic, vector theSize, vector theColor, float theAlpha, vector theBorderSize);
void draw_Picture(vector origin, string pic, vector size, vector color, float alpha);
+void draw_Fill(vector theOrigin, vector theSize, vector theColor, float theAlpha);
void draw_Text(vector origin, string text, vector size, vector color, float alpha);
float draw_TextWidth(string text);
+string draw_TextShortenToWidth(string text, float maxWidth);
void draw_SetClip();
void draw_ClearClip();
@@ -22,3 +24,4 @@
vector globalToBoxSize(vector v, vector scale);
float draw_NeedResizeNotify;
+
Modified: trunk/data/qcsrc/menu-div0test/item/listbox.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/item/listbox.c 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/item/listbox.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -25,7 +25,7 @@
ATTRIB(ListBox, src, string, "") // scrollbar
ATTRIB(ListBox, tolerance, vector, '0 0 0') // drag tolerance
ATTRIB(ListBox, scrollbarWidth, float, 0) // pixels
- ATTRIB(ListBox, nItems, float, 0)
+ ATTRIB(ListBox, nItems, float, 42)
ATTRIB(ListBox, itemHeight, float, 0)
METHOD(ListBox, drawListBoxItem, void(entity, float, vector, float)) // item number, width/height, selected
METHOD(ListBox, clickListBoxItem, void(entity, float, vector)) // item number, relative clickpos
@@ -80,10 +80,10 @@
if(me.pressed == 1)
{
hit = 1;
- if(pos_x < 1 - me.controlWidth - me.tolerance_x) hit = 0;
- if(pos_y < 0 - me.tolerance_y) hit = 0;
- if(pos_x >= 1 + me.tolerance_x) hit = 0;
- if(pos_y >= 1 + me.tolerance_y) hit = 0;
+ if(pos_x < 1 - me.controlWidth - me.tolerance_y * me.controlWidth) hit = 0;
+ if(pos_y < 0 - me.tolerance_x) hit = 0;
+ if(pos_x >= 1 + me.tolerance_y * me.controlWidth) hit = 0;
+ if(pos_y >= 1 + me.tolerance_x) hit = 0;
if(hit)
{
// calculate new pos to v
@@ -111,6 +111,7 @@
if(pos_y < 0) return 0;
if(pos_x >= 1) return 0;
if(pos_y >= 1) return 0;
+ me.dragScrollPos = pos;
me.updateControlTopBottom(me);
if(pos_x >= 1 - me.controlWidth)
{
@@ -218,7 +219,7 @@
vector o, s;
o = eX * (1 - me.controlWidth) + eY * me.controlTop;
s = eX * me.controlWidth + eY * (me.controlBottom - me.controlTop);
- if(me.pressed)
+ if(me.pressed == 1)
draw_VertButtonPicture(o, strcat(me.src, "_c"), s, '1 1 1', 1);
else if(me.focused)
draw_VertButtonPicture(o, strcat(me.src, "_f"), s, '1 1 1', 1);
Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer.c 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -15,7 +15,7 @@
entity mc;
mc = makeNexuizTabController(me.rows - 2);
me.TR(me);
- me.TD(me, 1, 1, mc.makeTabButton(mc, "Serverlist", makeNexuizPlayerSettingsTab()));
+ me.TD(me, 1, 1, mc.makeTabButton(mc, "Serverlist", makeNexuizServerListTab()));
me.TD(me, 1, 1, mc.makeTabButton(mc, "Player Setup", makeNexuizPlayerSettingsTab()));
me.TD(me, 1, 1, mc.makeTabButton(mc, "Server Setup", makeNexuizPlayerSettingsTab()));
me.TR(me);
Added: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -0,0 +1,34 @@
+#ifdef INTERFACE
+CLASS(NexuizServerListTab) EXTENDS(NexuizTab)
+ METHOD(NexuizServerListTab, fill, void(entity))
+ ATTRIB(NexuizServerListTab, title, string, "Settings")
+ ATTRIB(NexuizServerListTab, intendedWidth, float, 0.9)
+ ATTRIB(NexuizServerListTab, rows, float, 15)
+ ATTRIB(NexuizServerListTab, columns, float, 6.5)
+ENDCLASS(NexuizServerListTab)
+entity makeNexuizServerListTab();
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeNexuizServerListTab()
+{
+ entity me;
+ me = spawnNexuizServerListTab();
+ me.configureDialog(me);
+ return me;
+}
+void fillNexuizServerListTab(entity me)
+{
+ entity e;
+
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Filter:"));
+
+ me.TR(me);
+ me.TD(me, me.rows - 2, me.columns, e = makeNexuizServerList());
+
+ me.gotoXY(me, me.rows - 1, 0);
+ me.TD(me, 1, 1, makeNexuizCommandButton("Refresh!", '0 0 0', "echo FIXME ask for servers again", 0));
+ me.TD(me, 1, me.columns - 1, makeNexuizCommandButton("Join!", '0 0 0', "connect $menu_selected_server", 0));
+}
+#endif
Copied: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c (from rev 2902, trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_player.c)
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_playersetup.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -0,0 +1,78 @@
+#ifdef INTERFACE
+CLASS(NexuizPlayerSettingsTab) EXTENDS(NexuizTab)
+ METHOD(NexuizPlayerSettingsTab, fill, void(entity))
+ ATTRIB(NexuizPlayerSettingsTab, title, string, "Settings")
+ ATTRIB(NexuizPlayerSettingsTab, intendedWidth, float, 0.9)
+ ATTRIB(NexuizPlayerSettingsTab, rows, float, 15)
+ ATTRIB(NexuizPlayerSettingsTab, columns, float, 6.5)
+ENDCLASS(NexuizPlayerSettingsTab)
+entity makeNexuizPlayerSettingsTab();
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeNexuizPlayerSettingsTab()
+{
+ entity me;
+ me = spawnNexuizPlayerSettingsTab();
+ me.configureDialog(me);
+ return me;
+}
+void fillNexuizPlayerSettingsTab(entity me)
+{
+ entity e;
+ float i;
+
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Player Name:"));
+ me.TD(me, 1, 2, e = makeNexuizResolutionSlider());
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Shirt Color:"));
+ for(i = 0; i < 15; ++i)
+ me.TD(me, 1, 2 / 15, e = makeNexuizColorButton(1, 0, i));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Pants Color:"));
+ for(i = 0; i < 15; ++i)
+ me.TD(me, 1, 2 / 15, e = makeNexuizColorButton(2, 1, i));
+
+ me.gotoXY(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Field of View:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(90, 130, 1, "fov"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Zoom Factor:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(2, 10, 1, "cl_zoomfactor"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Zoom Speed:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(-1, 5, 1, "cl_zoomspeed"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(0, 10, 1, "crosshair"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Alpha:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_blue"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Color Red:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_red"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Color Green:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_green"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Color Blue:"));
+ me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_blue"));
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Hud Style:"));
+ me.TD(me, 1, 2, e = makeNexuizTextSlider("sbar_hudselector"));
+ e.addValue(e, "Old", "0");
+ e.addValue(e, "New", "1");
+ e.configureNexuizTextSliderValues(e);
+ me.TR(me);
+ me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Hud Size:"));
+ me.TD(me, 1, 2, e = makeNexuizTextSlider("viewsize"));
+ e.addValue(e, "Disabled", "120");
+ e.addValue(e, "Simple", "110");
+ e.addValue(e, "Full", "100");
+ e.configureNexuizTextSliderValues(e);
+
+ me.gotoXY(me, me.rows - 1, 0);
+ me.TD(me, 1, me.columns, makeNexuizCommandButton("Apply immediately", '0 0 0', "color -1 -1", COMMANDBUTTON_APPLY));
+}
+#endif
Deleted: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_player.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_player.c 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_settings_player.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -1,78 +0,0 @@
-#ifdef INTERFACE
-CLASS(NexuizPlayerSettingsTab) EXTENDS(NexuizTab)
- METHOD(NexuizPlayerSettingsTab, fill, void(entity))
- ATTRIB(NexuizPlayerSettingsTab, title, string, "Settings")
- ATTRIB(NexuizPlayerSettingsTab, intendedWidth, float, 0.9)
- ATTRIB(NexuizPlayerSettingsTab, rows, float, 15)
- ATTRIB(NexuizPlayerSettingsTab, columns, float, 6.5)
-ENDCLASS(NexuizPlayerSettingsTab)
-entity makeNexuizPlayerSettingsTab();
-#endif
-
-#ifdef IMPLEMENTATION
-entity makeNexuizPlayerSettingsTab()
-{
- entity me;
- me = spawnNexuizPlayerSettingsTab();
- me.configureDialog(me);
- return me;
-}
-void fillNexuizPlayerSettingsTab(entity me)
-{
- entity e;
- float i;
-
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Player Name:"));
- me.TD(me, 1, 2, e = makeNexuizResolutionSlider());
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Shirt Color:"));
- for(i = 0; i < 15; ++i)
- me.TD(me, 1, 2 / 15, e = makeNexuizColorButton(1, 0, i));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Pants Color:"));
- for(i = 0; i < 15; ++i)
- me.TD(me, 1, 2 / 15, e = makeNexuizColorButton(2, 1, i));
-
- me.gotoXY(me, 0, 3.5); me.setFirstColumn(me, me.currentColumn);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Field of View:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(90, 130, 1, "fov"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Zoom Factor:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(2, 10, 1, "cl_zoomfactor"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Zoom Speed:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(-1, 5, 1, "cl_zoomspeed"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 10, 1, "crosshair"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Alpha:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_blue"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Color Red:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_red"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Color Green:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_green"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Crosshair Color Blue:"));
- me.TD(me, 1, 2, e = makeNexuizSlider(0, 1, 0.01, "crosshair_color_blue"));
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Hud Style:"));
- me.TD(me, 1, 2, e = makeNexuizTextSlider("sbar_hudselector"));
- e.addValue(e, "Old", "0");
- e.addValue(e, "New", "1");
- e.configureNexuizTextSliderValues(e);
- me.TR(me);
- me.TD(me, 1, 1, e = makeNexuizTextLabel(0, "Hud Size:"));
- me.TD(me, 1, 2, e = makeNexuizTextSlider("viewsize"));
- e.addValue(e, "Disabled", "120");
- e.addValue(e, "Simple", "110");
- e.addValue(e, "Full", "100");
- e.configureNexuizTextSliderValues(e);
-
- me.gotoXY(me, me.rows - 1, 0);
- me.TD(me, 1, me.columns, makeNexuizCommandButton("Apply immediately", '0 0 0', "color -1 -1", COMMANDBUTTON_APPLY));
-}
-#endif
Added: trunk/data/qcsrc/menu-div0test/nexuiz/listbox.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/listbox.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/listbox.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -0,0 +1,31 @@
+#ifdef INTERFACE
+CLASS(NexuizListBox) EXTENDS(ListBox)
+ METHOD(NexuizListBox, configureNexuizListBox, void(entity))
+ ATTRIB(NexuizListBox, fontSize, float, SKINFONTSIZE_NORMAL)
+ ATTRIB(NexuizListBox, scrollbarWidth, float, SKINWIDTH_SCROLLBAR)
+ ATTRIB(NexuizListBox, src, string, SKINGFX_SCROLLBAR)
+ ATTRIB(NexuizListBox, tolerance, vector, SKINTOLERANCE_SLIDER)
+ ATTRIB(NexuizListBox, rowsPerItem, float, 1)
+ METHOD(NexuizListBox, resizeNotify, void(entity, vector, vector, vector, vector))
+ENDCLASS(NexuizListBox)
+entity makeNexuizListBox();
+#endif
+
+#ifdef IMPLEMENTATION
+entity makeNexuizListBox()
+{
+ entity me;
+ me = spawnNexuizListBox();
+ me.configureNexuizListBox(me);
+ return me;
+}
+void configureNexuizListBoxNexuizListBox(entity me)
+{
+ me.configureListBox(me, me.scrollbarWidth, 1); // item height gets set up later
+}
+void resizeNotifyNexuizListBox(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+{
+ me.itemHeight = me.rowsPerItem * me.fontSize / absSize_y;
+ resizeNotifyListBox(me, relOrigin, relSize, absOrigin, absSize);
+}
+#endif
Added: trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c (rev 0)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c 2007-11-05 11:20:58 UTC (rev 2907)
@@ -0,0 +1,128 @@
+#ifdef INTERFACE
+CLASS(NexuizServerList) EXTENDS(NexuizListBox)
+ METHOD(NexuizServerList, configureNexuizServerList, void(entity))
+ ATTRIB(NexuizServerList, rowsPerItem, float, 1)
+ METHOD(NexuizServerList, draw, void(entity))
+ METHOD(NexuizServerList, drawListBoxItem, void(entity, float, vector, float))
+ METHOD(NexuizServerList, resizeNotify, void(entity, vector, vector, vector, vector))
+
+ ATTRIB(NexuizServerList, realFontSize, vector, '0 0 0')
+ ATTRIB(NexuizServerList, realUpperMargin, float, 0)
+ ATTRIB(NexuizServerList, columnPingOrigin, float, 0)
+ ATTRIB(NexuizServerList, columnPingSize, float, 0)
+ ATTRIB(NexuizServerList, columnNameOrigin, float, 0)
+ ATTRIB(NexuizServerList, columnNameSize, float, 0)
+ ATTRIB(NexuizServerList, columnMapOrigin, float, 0)
+ ATTRIB(NexuizServerList, columnMapSize, float, 0)
+ ATTRIB(NexuizServerList, columnPlayersOrigin, float, 0)
+ ATTRIB(NexuizServerList, columnPlayersSize, float, 0)
+ENDCLASS(NexuizServerList)
+entity makeNexuizServerList();
+#endif
+
+#ifdef IMPLEMENTATION
+
+float SLIST_FIELD_CNAME;
+float SLIST_FIELD_PING;
+float SLIST_FIELD_GAME;
+float SLIST_FIELD_MOD;
+float SLIST_FIELD_MAP;
+float SLIST_FIELD_NAME;
+float SLIST_FIELD_MAXPLAYERS;
+float SLIST_FIELD_NUMPLAYERS;
+float SLIST_FIELD_NUMHUMANS;
+float SLIST_FIELD_NUMBOTS;
+float SLIST_FIELD_PROTOCOL;
+void ServerList_UpdateFieldIDs()
+{
+ SLIST_FIELD_CNAME = gethostcacheindexforkey( "cname" );
+ SLIST_FIELD_PING = gethostcacheindexforkey( "ping" );
+ SLIST_FIELD_GAME = gethostcacheindexforkey( "game" );
+ SLIST_FIELD_MOD = gethostcacheindexforkey( "mod" );
+ SLIST_FIELD_MAP = gethostcacheindexforkey( "map" );
+ SLIST_FIELD_NAME = gethostcacheindexforkey( "name" );
+ SLIST_FIELD_MAXPLAYERS = gethostcacheindexforkey( "maxplayers" );
+ SLIST_FIELD_NUMPLAYERS = gethostcacheindexforkey( "numplayers" );
+ SLIST_FIELD_NUMHUMANS = gethostcacheindexforkey( "numhumans" );
+ SLIST_FIELD_NUMBOTS = gethostcacheindexforkey( "numbots" );
+ SLIST_FIELD_PROTOCOL = gethostcacheindexforkey( "protocol" );
+}
+
+entity makeNexuizServerList()
+{
+ entity me;
+ me = spawnNexuizServerList();
+ me.configureNexuizServerList(me);
+ return me;
+}
+void configureNexuizServerListNexuizServerList(entity me)
+{
+ me.configureNexuizListBox(me);
+
+ ServerList_UpdateFieldIDs();
+ resethostcachemasks();
+ refreshhostcache();
+
+ me.nItems = 0;
+}
+void drawNexuizServerList(entity me)
+{
+ me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT);
+ drawListBox(me);
+}
+void resizeNotifyNexuizServerList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
+{
+ resizeNotifyNexuizListBox(me, relOrigin, relSize, absOrigin, absSize);
+
+ me.realFontSize_y = me.fontSize / (absSize_y * me.itemHeight);
+ me.realFontSize_x = me.fontSize / (absSize_x * (1 - me.controlWidth));
+ me.realUpperMargin = 0.5 * (1 - me.realFontSize_y);
+
+ me.columnPingOrigin = 0;
+ me.columnPingSize = me.realFontSize_x * 4;
+ me.columnMapSize = me.realFontSize_x * 12;
+ me.columnPlayersSize = me.realFontSize_x * 6;
+ me.columnNameSize = 1 - me.columnPlayersSize - me.columnMapSize - me.columnPingSize - 3 * me.realFontSize_x;
+ me.columnNameOrigin = me.columnPingOrigin + me.columnPingSize + me.realFontSize_x;
+ me.columnMapOrigin = me.columnNameOrigin + me.columnNameSize + me.realFontSize_x;
+ me.columnPlayersOrigin = me.columnMapOrigin + me.columnMapSize + me.realFontSize_x;
+}
+void drawListBoxItemNexuizServerList(entity me, float i, vector absSize, float isSelected)
+{
+ // layout: Ping, Server name, Map name, NP, TP, MP
+ string s;
+ float p;
+ vector theColor;
+ float theAlpha;
+
+ if(isSelected)
+ draw_Fill('0 0 0', '1 1 0', '0 0 1', 0.5);
+
+ if(gethostcachenumber(SLIST_FIELD_NUMPLAYERS, i) >= gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i))
+ theAlpha = 0.2;
+ else if(!gethostcachenumber(SLIST_FIELD_NUMHUMANS, i))
+ theAlpha = 0.5;
+ else
+ theAlpha = 1;
+
+ p = gethostcachenumber(SLIST_FIELD_PING, i);
+ if(p < 50)
+ theColor = eX * (p / 50) + eY;
+ else if(p < 150)
+ theColor = eX + eY * ((150 - p) / 100);
+ else if(p < 650)
+ {
+ theColor = eX;
+ theAlpha *= (650 - p) / 500;
+ }
+
+ s = ftos(p);
+ draw_Text(me.realUpperMargin * eY + (me.columnPingSize - draw_TextWidth(s) * me.realFontSize_x) * eX, s, me.realFontSize, theColor, theAlpha);
+ s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_NAME, i), me.columnNameSize / me.realFontSize_x);
+ draw_Text(me.realUpperMargin * eY + me.columnNameOrigin * eX, s, me.realFontSize, theColor, theAlpha);
+ s = draw_TextShortenToWidth(gethostcachestring(SLIST_FIELD_MAP, i), me.columnMapSize / me.realFontSize_x);
+ draw_Text(me.realUpperMargin * eY + (me.columnMapOrigin + (me.columnMapSize - draw_TextWidth(s) * me.realFontSize_x) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha);
+ s = strcat(ftos(gethostcachenumber(SLIST_FIELD_NUMHUMANS, i)), "/", ftos(gethostcachenumber(SLIST_FIELD_MAXPLAYERS, i)));
+ draw_Text(me.realUpperMargin * eY + (me.columnPlayersOrigin + (me.columnPlayersSize - draw_TextWidth(s) * me.realFontSize_x) * 0.5) * eX, s, me.realFontSize, theColor, theAlpha);
+}
+#endif
Modified: trunk/data/qcsrc/menu-div0test/skin.qh
===================================================================
--- trunk/data/qcsrc/menu-div0test/skin.qh 2007-11-05 09:46:39 UTC (rev 2906)
+++ trunk/data/qcsrc/menu-div0test/skin.qh 2007-11-05 11:20:58 UTC (rev 2907)
@@ -9,6 +9,7 @@
const string SKINGFX_RADIOBUTTON = "qcsrc/menu-div0test/baseradiobutton";
const string SKINGFX_COLORBUTTON = "qcsrc/menu-div0test/basebutton";
const string SKINGFX_COLORBUTTON_COLOR = "qcsrc/menu-div0test/color";
+const string SKINGFX_SCROLLBAR = "qcsrc/menu-div0test/basescrollbar";
const float SKINMARGIN_TOP = 8;
const float SKINMARGIN_LEFT = 8;
@@ -18,6 +19,7 @@
const float SKINFONTSIZE_NORMAL = 12;
const float SKINHEIGHT_NORMAL = 1.5;
const float SKINHEIGHT_NORMAL_WITHSPACING = 2;
+const float SKINWIDTH_SCROLLBAR = 16;
const float SKINWIDTH_SLIDERTEXT = 0.333333333333;
More information about the nexuiz-commits
mailing list