r2910 - in trunk/data/qcsrc/menu-div0test: item nexuiz
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Mon Nov 5 16:36:08 EST 2007
Author: div0
Date: 2007-11-05 16:36:07 -0500 (Mon, 05 Nov 2007)
New Revision: 2910
Modified:
trunk/data/qcsrc/menu-div0test/item/container.c
trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c
trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c
Log:
It can join servers now!
Modified: trunk/data/qcsrc/menu-div0test/item/container.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/item/container.c 2007-11-05 11:44:33 UTC (rev 2909)
+++ trunk/data/qcsrc/menu-div0test/item/container.c 2007-11-05 21:36:07 UTC (rev 2910)
@@ -27,13 +27,13 @@
ENDCLASS(Container)
.entity nextSibling;
.entity prevSibling;
-#endif
-
-#ifdef IMPLEMENTATION
+.float resized;
.vector Container_origin;
.vector Container_size;
.float Container_alpha;
+#endif
+#ifdef IMPLEMENTATION
void showNotifyContainer(entity me)
{
entity e;
@@ -75,12 +75,27 @@
{
entity e;
vector o, s;
+ float d;
for(e = me.firstChild; e; e = e.nextSibling)
{
o = e.originField;
s = e.sizeField;
e.resizeNotify(e, o, s, boxToGlobal(o, absOrigin, absSize), boxToGlobalSize(s, absSize));
}
+ do
+ {
+ d = 0;
+ for(e = me.firstChild; e; e = e.nextSibling)
+ if(e.resized)
+ {
+ e.resized = 0;
+ d = 1;
+ o = e.originField;
+ s = e.sizeField;
+ e.resizeNotify(e, o, s, boxToGlobal(o, absOrigin, absSize), boxToGlobalSize(s, absSize));
+ }
+ }
+ while(d);
resizeNotifyItem(me, relOrigin, relSize, absOrigin, absSize);
}
Modified: trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c 2007-11-05 11:44:33 UTC (rev 2909)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/dialog_multiplayer_join.c 2007-11-05 21:36:07 UTC (rev 2910)
@@ -19,16 +19,28 @@
}
void fillNexuizServerListTab(entity me)
{
- entity e;
+ entity e, slist;
+ slist = makeNexuizServerList();
+
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.TD(me, 1, 1, slist.sortButton1 = makeNexuizButton("", '0 0 0'));
+ me.TD(me, 1, 1, slist.sortButton2 = makeNexuizButton("", '0 0 0'));
+ me.TD(me, 1, 1, slist.sortButton3 = makeNexuizButton("", '0 0 0'));
+ me.TD(me, 1, 1, slist.sortButton4 = makeNexuizButton("", '0 0 0'));
+ me.TR(me);
+ me.TD(me, me.rows - 3, me.columns, slist);
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));
+ me.TD(me, 1, 1, e = makeNexuizButton("Refresh!", '0 0 0'));
+ e.onClick = ServerList_Refresh_Click;
+ e.onClickEntity = slist;
+ me.TD(me, 1, me.columns - 1, e = makeNexuizButton("Join!", '0 0 0'));
+ e.onClick = ServerList_Connect_Click;
+ e.onClickEntity = slist;
+ slist.connectButton = e;
}
#endif
Modified: trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c 2007-11-05 11:44:33 UTC (rev 2909)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c 2007-11-05 21:36:07 UTC (rev 2910)
@@ -4,6 +4,7 @@
ATTRIB(NexuizServerList, rowsPerItem, float, 1)
METHOD(NexuizServerList, draw, void(entity))
METHOD(NexuizServerList, drawListBoxItem, void(entity, float, vector, float))
+ METHOD(NexuizServerList, clickListBoxItem, void(entity, float, vector))
METHOD(NexuizServerList, resizeNotify, void(entity, vector, vector, vector, vector))
ATTRIB(NexuizServerList, realFontSize, vector, '0 0 0')
@@ -19,8 +20,21 @@
ATTRIB(NexuizServerList, selectedServer, string, string_null) // to restore selected server when needed
METHOD(NexuizServerList, setSelected, void(entity, float))
+ METHOD(NexuizServerList, setSortOrder, void(entity, float, float))
+ METHOD(NexuizServerList, positionSortButton, void(entity, entity, float, float, string, void(entity, entity)))
+ ATTRIB(NexuizServerList, sortButton1, entity, NULL)
+ ATTRIB(NexuizServerList, sortButton2, entity, NULL)
+ ATTRIB(NexuizServerList, sortButton3, entity, NULL)
+ ATTRIB(NexuizServerList, sortButton4, entity, NULL)
+ ATTRIB(NexuizServerList, connectButton, entity, NULL)
+ ATTRIB(NexuizServerList, currentSortOrder, float, 0)
+ ATTRIB(NexuizServerList, currentSortField, float, 0)
+ ATTRIB(NexuizServerList, lastClickedServer, float, 0)
+ ATTRIB(NexuizServerList, lastClickedTime, float, 0)
ENDCLASS(NexuizServerList)
entity makeNexuizServerList();
+void ServerList_Connect_Click(entity btn, entity me);
+void ServerList_Refresh_Click(entity btn, entity me);
#endif
#ifdef IMPLEMENTATION
@@ -35,6 +49,7 @@
float SLIST_FIELD_NUMHUMANS;
float SLIST_FIELD_NUMBOTS;
float SLIST_FIELD_PROTOCOL;
+float SLIST_FIELD_FREESLOTS;
void ServerList_UpdateFieldIDs()
{
SLIST_FIELD_CNAME = gethostcacheindexforkey( "cname" );
@@ -48,6 +63,7 @@
SLIST_FIELD_NUMHUMANS = gethostcacheindexforkey( "numhumans" );
SLIST_FIELD_NUMBOTS = gethostcacheindexforkey( "numbots" );
SLIST_FIELD_PROTOCOL = gethostcacheindexforkey( "protocol" );
+ SLIST_FIELD_FREESLOTS = gethostcacheindexforkey( "freeslots" );
}
entity makeNexuizServerList()
@@ -63,7 +79,7 @@
ServerList_UpdateFieldIDs();
resethostcachemasks();
- refreshhostcache();
+ me.currentSortField = -1;
me.nItems = 0;
}
@@ -87,7 +103,15 @@
void drawNexuizServerList(entity me)
{
float i;
+
+ if(me.currentSortField == -1)
+ {
+ refreshhostcache();
+ me.setSortOrder(me, SLIST_FIELD_PING, +1);
+ }
+
me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT);
+ me.connectButton.disabled = (me.nItems == 0);
for(i = 0; i < me.nItems; ++i)
{
if(gethostcachestring(SLIST_FIELD_CNAME, i) == me.selectedServer)
@@ -98,6 +122,56 @@
}
drawListBox(me);
}
+void ServerList_PingSort_Click(entity btn, entity me)
+{
+ me.setSortOrder(me, SLIST_FIELD_PING, +1);
+}
+void ServerList_NameSort_Click(entity btn, entity me)
+{
+ me.setSortOrder(me, SLIST_FIELD_NAME, -1); // why?
+}
+void ServerList_MapSort_Click(entity btn, entity me)
+{
+ me.setSortOrder(me, SLIST_FIELD_MAP, -1); // why?
+}
+void ServerList_PlayerSort_Click(entity btn, entity me)
+{
+ me.setSortOrder(me, SLIST_FIELD_NUMHUMANS, -1);
+}
+void setSortOrderNexuizServerList(entity me, float field, float direction)
+{
+ if(me.currentSortField == field)
+ direction = -me.currentSortOrder;
+ me.currentSortOrder = direction;
+ me.currentSortField = field;
+ sethostcachesort(field, direction < 0);
+ resorthostcache();
+ me.sortButton1.forcePressed = (field == SLIST_FIELD_PING);
+ me.sortButton2.forcePressed = (field == SLIST_FIELD_NAME);
+ me.sortButton3.forcePressed = (field == SLIST_FIELD_MAP);
+ me.sortButton4.forcePressed = (field == SLIST_FIELD_NUMHUMANS);
+ me.selectedItem = 0;
+ if(me.selectedServer)
+ strunzone(me.selectedServer);
+ me.selectedServer = string_null;
+}
+void positionSortButtonNexuizServerList(entity me, entity btn, float theOrigin, float theSize, string theTitle, void(entity, entity) theFunc)
+{
+ vector originInLBSpace, sizeInLBSpace;
+ originInLBSpace = eY * (-me.itemHeight);
+ sizeInLBSpace = eY * me.itemHeight + eX * (1 - me.controlWidth);
+
+ vector originInDialogSpace, sizeInDialogSpace;
+ originInDialogSpace = boxToGlobal(originInLBSpace, me.Container_origin, me.Container_size);
+ sizeInDialogSpace = boxToGlobalSize(sizeInLBSpace, me.Container_size);
+
+ btn.Container_origin_x = originInDialogSpace_x + sizeInDialogSpace_x * theOrigin;
+ btn.Container_size_x = sizeInDialogSpace_x * theSize;
+ btn.setText(btn, theTitle);
+ btn.onClick = theFunc;
+ btn.onClickEntity = me;
+ btn.resized = 1;
+}
void resizeNotifyNexuizServerList(entity me, vector relOrigin, vector relSize, vector absOrigin, vector absSize)
{
resizeNotifyNexuizListBox(me, relOrigin, relSize, absOrigin, absSize);
@@ -114,7 +188,37 @@
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;
+
+ me.positionSortButton(me, me.sortButton1, me.columnPingOrigin, me.columnPingSize, "Ping", ServerList_PingSort_Click);
+ me.positionSortButton(me, me.sortButton2, me.columnNameOrigin, me.columnNameSize, "Host name", ServerList_NameSort_Click);
+ me.positionSortButton(me, me.sortButton3, me.columnMapOrigin, me.columnMapSize, "Map", ServerList_MapSort_Click);
+ me.positionSortButton(me, me.sortButton4, me.columnPlayersOrigin, me.columnPlayersSize, "Players", ServerList_PlayerSort_Click);
+
+ float f;
+ f = me.currentSortField;
+ me.currentSortField = -1;
+ me.setSortOrder(me, f, me.currentSortOrder); // force resetting the sort order
}
+void ServerList_Connect_Click(entity btn, entity me)
+{
+ if(me.nItems > 0)
+ localcmd("connect ", me.selectedServer, "\n");
+}
+void ServerList_Refresh_Click(entity btn, entity me)
+{
+ refreshhostcache();
+}
+void clickListBoxItemNexuizServerList(entity me, float i, vector where)
+{
+ if(i == me.lastClickedServer)
+ if(time < me.lastClickedTime + 0.3)
+ {
+ // DOUBLE CLICK!
+ ServerList_Connect_Click(NULL, me);
+ }
+ me.lastClickedServer = i;
+ me.lastClickedTime = time;
+}
void drawListBoxItemNexuizServerList(entity me, float i, vector absSize, float isSelected)
{
// layout: Ping, Server name, Map name, NP, TP, MP
@@ -141,8 +245,13 @@
else if(p < 650)
{
theColor = eX;
- theAlpha *= (650 - p) / 500;
+ theAlpha *= 0.1 + 0.9 * (650 - p) / 500;
}
+ else
+ {
+ theColor = eX;
+ theAlpha *= 0.1;
+ }
s = ftos(p);
draw_Text(me.realUpperMargin * eY + (me.columnPingSize - draw_TextWidth(s) * me.realFontSize_x) * eX, s, me.realFontSize, theColor, theAlpha);
More information about the nexuiz-commits
mailing list