From e03c4438312fe6e21c3d73cfac478e10654ea0b9 Mon Sep 17 00:00:00 2001 From: esteel Date: Fri, 26 Sep 2008 18:00:54 +0000 Subject: [PATCH] First working version of an editable Connect/Add-to-favorites feature git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4506 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/menu/mbuiltin.qh | 1 + .../menu/nexuiz/dialog_multiplayer_join.c | 40 +++++++++++++++--- data/qcsrc/menu/nexuiz/serverlist.c | 41 +++++++++++++------ 3 files changed, 63 insertions(+), 19 deletions(-) diff --git a/data/qcsrc/menu/mbuiltin.qh b/data/qcsrc/menu/mbuiltin.qh index 465e4a501..8a514e2ab 100644 --- a/data/qcsrc/menu/mbuiltin.qh +++ b/data/qcsrc/menu/mbuiltin.qh @@ -298,6 +298,7 @@ float CVAR_TYPEFLAG_HASDESCRIPTION = 16; string(string in) uri_escape = #510; string(string in) uri_unescape = #511; +string(string, float) netaddress_resolve = #625; #ifdef FIXEDFOPEN float fopen( string filename, float mode ) = diff --git a/data/qcsrc/menu/nexuiz/dialog_multiplayer_join.c b/data/qcsrc/menu/nexuiz/dialog_multiplayer_join.c index 26ee4f6c8..fa0fdb38a 100644 --- a/data/qcsrc/menu/nexuiz/dialog_multiplayer_join.c +++ b/data/qcsrc/menu/nexuiz/dialog_multiplayer_join.c @@ -7,6 +7,8 @@ CLASS(NexuizServerListTab) EXTENDS(NexuizTab) ATTRIB(NexuizServerListTab, columns, float, 6.5) ENDCLASS(NexuizServerListTab) entity makeNexuizServerListTab(); +void Join_Connect(entity btn, entity me); +void Join_AddToFavorites(entity btn, entity me); #endif #ifdef IMPLEMENTATION @@ -20,18 +22,18 @@ entity makeNexuizServerListTab() } void fillNexuizServerListTab(entity me) { - entity e, slist, clearbtn; + entity e, slist, btn; slist = makeNexuizServerList(); me.TR(me); me.TD(me, 1, 0.5, e = makeNexuizTextLabel(0, "Filter:")); - me.TD(me, 1, 0.5, clearbtn = makeNexuizButton("Clear", '0 0 0')); - clearbtn.onClick = InputBox_Clear_Click; + me.TD(me, 1, 0.5, btn = makeNexuizButton("Clear", '0 0 0')); + btn.onClick = InputBox_Clear_Click; me.TD(me, 1, me.columns - 2.5, e = makeNexuizInputBox(0, string_null)); e.onChange = ServerList_Filter_Change; e.onChangeEntity = slist; - clearbtn.onClickEntity = e; + btn.onClickEntity = e; slist.controlledTextbox = e; me.TD(me, 1, 0.5, e = makeNexuizCheckBox(0, "menu_slist_showempty", "Empty")); slist.filterShowEmpty = e.checked; @@ -50,12 +52,38 @@ void fillNexuizServerListTab(entity me) me.TD(me, 1, 1, slist.sortButton4 = makeNexuizButton(string_null, '0 0 0')); me.TD(me, 1, 1, slist.sortButton5 = makeNexuizButton(string_null, '0 0 0')); me.TR(me); - me.TD(me, me.rows - 3, me.columns, slist); + me.TD(me, me.rows - 5, me.columns, slist); - me.gotoRC(me, me.rows - 1, 0); + me.gotoRC(me, me.rows - 3, 0); me.TD(me, 1, me.columns, e = makeNexuizButton("Join!", '0 0 0')); e.onClick = ServerList_Connect_Click; e.onClickEntity = slist; slist.connectButton = e; + + me.TR(me); + + me.TR(me); + me.TD(me, 1, 1.8, e = makeNexuizTextLabel(0, "Address (Name or IP[:Port]):")); + me.TD(me, 1, 0.5, btn = makeNexuizButton("Clear", '0 0 0')); + btn.onClick = InputBox_Clear_Click; + me.TD(me, 1, me.columns - 4.3, e = makeNexuizInputBox(0, string_null)); + btn.onClickEntity = e; + me.TD(me, 1, 0.8, btn = makeNexuizButton("Connect", '0 0 0')); + btn.onClick = Join_Connect; + btn.onClickEntity = e; + me.TD(me, 1, 1.2, btn = makeNexuizButton("Add to favorites", '0 0 0')); + btn.onClick = Join_AddToFavorites; + btn.onClickEntity = e; +} +void Join_Connect(entity btn, entity me) +{ + if (me.text) + { + localcmd("\nconnect \"", me.text, "\"\n"); + } +} +void Join_AddToFavorites(entity btn, entity me) +{ + ServerList_AddRemoveFavorites(me.text, true, true); } #endif diff --git a/data/qcsrc/menu/nexuiz/serverlist.c b/data/qcsrc/menu/nexuiz/serverlist.c index 41c668cab..853a26069 100644 --- a/data/qcsrc/menu/nexuiz/serverlist.c +++ b/data/qcsrc/menu/nexuiz/serverlist.c @@ -49,6 +49,7 @@ void ServerList_Connect_Click(entity btn, entity me); void ServerList_ShowEmpty_Click(entity box, entity me); void ServerList_ShowFull_Click(entity box, entity me); void ServerList_Filter_Change(entity box, entity me); +void ServerList_AddRemoveFavorites(string fav, float resolv, float addonly); #endif #ifdef IMPLEMENTATION @@ -385,6 +386,32 @@ void ServerList_Connect_Click(entity btn, entity me) if(me.nItems > 0) localcmd("connect ", me.selectedServer, "\n"); } +void ServerList_AddRemoveFavorites(string fav, float resolv, float addonly) +{ + string s; + float i, o; + + if (resolv) + { + o = strstrofs(fav, ":", 0); + if (o != -1) + { + i = stof(substring(fav, o + 1, strlen(fav) - o - 1)); + fav = substring(fav, 0, o); + } + s = netaddress_resolve(fav, i); + if(s!="") fav = s; + } + + s = cvar_string("net_slist_favorites"); + o = strstrofs(strcat(" ", s, " "), strcat(" ", fav, " "), 0); + if(o == -1) + cvar_set("net_slist_favorites", strcat(s, " ", fav)); + else if(!addonly) + cvar_set("net_slist_favorites", strcat( + substring(s, 0, o - 1), substring(s, o + strlen(fav), strlen(s) - o - strlen(fav)))); + resorthostcache(); +} void clickListBoxItemNexuizServerList(entity me, float i, vector where) { if(i == me.lastClickedServer) @@ -472,19 +499,7 @@ float keyDownNexuizServerList(entity me, float scan, float ascii, float shift) i = me.selectedItem; if(i < me.nItems) { - s = cvar_string("net_slist_favorites"); - o = strstrofs(strcat(" ", s, " "), strcat(" ", me.selectedServer, " "), 0); - if(o == -1) - { - cvar_set("net_slist_favorites", strcat(s, " ", me.selectedServer)); - } - else - { - cvar_set("net_slist_favorites", strcat( - substring(s, 0, o - 1), substring(s, o + strlen(me.selectedServer), strlen(s) - o - strlen(me.selectedServer)) - )); - } - resorthostcache(); + ServerList_AddRemoveFavorites(me.selectedServer, false, false); } me.lastClickedServer = -1; // inhibit double clicks using these buttons if(scan != K_INS) -- 2.39.2