r2921 - trunk/data/qcsrc/menu-div0test/nexuiz

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Fri Nov 9 04:09:24 EST 2007


Author: div0
Date: 2007-11-09 04:09:20 -0500 (Fri, 09 Nov 2007)
New Revision: 2921

Modified:
   trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c
Log:
new server list refresh policy... (currently, the refresh button does nothing)


Modified: trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c
===================================================================
--- trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c	2007-11-08 18:33:23 UTC (rev 2920)
+++ trunk/data/qcsrc/menu-div0test/nexuiz/serverlist.c	2007-11-09 09:09:20 UTC (rev 2921)
@@ -21,6 +21,10 @@
 	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))
+	ATTRIB(NexuizServerList, nextRefreshTime, float, 0)
+	METHOD(NexuizServerList, refreshServerList, void(entity, float)) // refresh mode: 0 = just reparametrize, 1 = send new requests, 2 = clear
+	ATTRIB(NexuizServerList, needsRefresh, float, 1)
+	METHOD(NexuizServerList, focusEnter, void(entity))
 	METHOD(NexuizServerList, positionSortButton, void(entity, entity, float, float, string, void(entity, entity)))
 	ATTRIB(NexuizServerList, sortButton1, entity, NULL)
 	ATTRIB(NexuizServerList, sortButton2, entity, NULL)
@@ -28,7 +32,7 @@
 	ATTRIB(NexuizServerList, sortButton4, entity, NULL)
 	ATTRIB(NexuizServerList, connectButton, entity, NULL)
 	ATTRIB(NexuizServerList, currentSortOrder, float, 0)
-	ATTRIB(NexuizServerList, currentSortField, float, 0)
+	ATTRIB(NexuizServerList, currentSortField, float, -1)
 	ATTRIB(NexuizServerList, lastClickedServer, float, -1)
 	ATTRIB(NexuizServerList, lastClickedTime, float, 0)
 ENDCLASS(NexuizServerList)
@@ -78,8 +82,6 @@
 	me.configureNexuizListBox(me);
 
 	ServerList_UpdateFieldIDs();
-	resethostcachemasks();
-	me.currentSortField = -1;
 
 	me.nItems = 0;
 }
@@ -100,15 +102,55 @@
 		strunzone(me.selectedServer);
 	me.selectedServer = strzone(gethostcachestring(SLIST_FIELD_CNAME, me.selectedItem));
 }
+void refreshServerListNexuizServerList(entity me, float mode)
+{
+	// 0: just reparametrize
+	// 1: also ask for new servers
+	// 2: clear
+	print("refresh of type ", ftos(mode), "\n");
+	/* if(mode == 2) // borken
+	{
+		// clear list
+		localcmd("net_slist\n");
+		me.needsRefresh = 1; // net_slist kills sort order, so we need to restore it later
+	}
+	else */
+	{
+		resethostcachemasks();
+		sethostcachesort(me.currentSortField, me.currentSortOrder < 0);
+		resorthostcache();
+		if(mode >= 1)
+			refreshhostcache();
+	}
+}
+void focusEnterNexuizServerList(entity me)
+{
+	if(time < me.nextRefreshTime)
+	{
+		print("sorry, no refresh yet\n");
+		return;
+	}
+	me.nextRefreshTime = time + 60;
+	me.refreshServerList(me, 1);
+}
 void drawNexuizServerList(entity me)
 {
 	float i;
 
 	if(me.currentSortField == -1)
 	{
-		refreshhostcache();
 		me.setSortOrder(me, SLIST_FIELD_PING, +1);
+		me.refreshServerList(me, 2);
 	}
+	else if(me.needsRefresh == 1)
+	{
+		me.needsRefresh = 2; // delay by one frame to make sure "slist" has been executed
+	}
+	else if(me.needsRefresh == 2)
+	{
+		me.needsRefresh = 0;
+		me.refreshServerList(me, 0);
+	}
 
 	me.nItems = gethostcachevalue(SLIST_HOSTCACHEVIEWCOUNT);
 	me.connectButton.disabled = (me.nItems == 0);
@@ -146,8 +188,7 @@
 		direction = -me.currentSortOrder;
 	me.currentSortOrder = direction;
 	me.currentSortField = field;
-	sethostcachesort(field, direction < 0);
-	resorthostcache();
+	me.needsRefresh = 1;
 	me.sortButton1.forcePressed = (field == SLIST_FIELD_PING);
 	me.sortButton2.forcePressed = (field == SLIST_FIELD_NAME);
 	me.sortButton3.forcePressed = (field == SLIST_FIELD_MAP);




More information about the nexuiz-commits mailing list