From b6a5418c24eb5f28fe60b71cbc5cdbe935352dd1 Mon Sep 17 00:00:00 2001 From: aurhat Date: Tue, 11 Nov 2014 20:50:55 +0100 Subject: [PATCH] Add alternative views in serverbrowser and improve favourites Alternative views in the serverbrowser are implemented with use favourites. Categories (names) of favourite servers, which will be displayed on the views, have to be included in "serverbrowseraltviews" alias (accessible in menu). Switching between views is possible with use Alt + Mouse wheel and Alt + Up/Down (or eventually "[" and "]", if they are dedicated keys on your keyboard). The commit also: 1. adds MATCH category to favourites; 2. shows category name in settings of favourites; 3. shows weights in serverbrowser instead of favourites image, when showweights = 1; 4. cleans up some tabs. --- config/favourites.cfg | 6 ++++++ config/menus_multiplayer.cfg | 19 ++++++++++++++----- source/src/menus.cpp | 2 ++ source/src/serverbrowser.cpp | 34 +++++++++++++++++++++++++++++++++- 4 files changed, 55 insertions(+), 6 deletions(-) diff --git a/config/favourites.cfg b/config/favourites.cfg index e9a19fe6..acd1a92c 100644 --- a/config/favourites.cfg +++ b/config/favourites.cfg @@ -94,6 +94,12 @@ sbfavourite_MODE_alpha = 0 sbfavourite_MODE_weight = 1 sbfavourite_MODE_keys = "#42" // automatically add servers playing towel mode +addfavcategory MATCH +sbfavourite_MATCH_desc = "Preferred match servers" +sbfavourite_MATCH_alpha = 0 +sbfavourite_MATCH_weight = 1 +sbfavourite_MATCH_ignore = 1 + addfavcategory SEARCH sbfavourite_SEARCH_desc = "Server search result" sbfavourite_SEARCH_tag = "\f9Result:" diff --git a/config/menus_multiplayer.cfg b/config/menus_multiplayer.cfg index a5412cbd..2338806c 100644 --- a/config/menus_multiplayer.cfg +++ b/config/menus_multiplayer.cfg @@ -160,6 +160,7 @@ menuitem [Search for servers...] [ showmenu [search se menuitem [F4: Edit favourites...] [ showmenu [edit favourites] ] menuitem [F5: Update the serverlist from the masterserver] [ updatefrommaster 1; closemenu [serverbrowser help] ] menuitem [F9: Get additional server information] [ showmenu serverinfo ] +menuitem [Edit alternative views in serverbrowser...] [ showmenu [serverbrowser alternative views] ] menuitem [] -1 menuitem [Options:] -1 menuitemcheckbox [F6: Reverse the sort order:] "$serversortdir" [ serversortdir $arg1 ] @@ -197,6 +198,8 @@ const addfavcatmenu [ menuitemvar (concatword "result $" sbfavourite_ $arg1 _desc " (concatword < s $" sbfavourite_ $arg1 _tag " r>)") (concatword "showmenu [favourites " $i "]") ] newmenu (concat favourites $i) + menuitemvar ( concatword "concat " "Category name: " (c 2) (at (listfavcats) (- $i 1)) ) + menuitem [] -1 menuitemtextinput [Tag: ] (concatword "result $" sbfavourite_ $arg1 _tag) (concatword sbfavourite_ $arg1 _tag " = $arg1") [] 15 menuitemtextinput [Description: ] (concatword "result $" sbfavourite_ $arg1 _desc) (concatword sbfavourite_ $arg1 _desc " = $arg1") [] 45 menuitem [] -1 @@ -215,10 +218,10 @@ const addfavcatmenu [ ] const addallfavcatmenus [ - newmenu [serverbrowser help] - menuitem [] -1 - menuitem [Keys to add/remove servers from categories:] -1 - loop ii (listlen (listfavcats)) [ addfavcatmenu (at (listfavcats) $ii) ] + newmenu [serverbrowser help] + menuitem [] -1 + menuitem [Keys to add/remove servers from categories:] -1 + loop ii (listlen (listfavcats)) [ addfavcatmenu (at (listfavcats) $ii) ] ] lastsearchname = [] @@ -229,11 +232,17 @@ menuitem " 2 [ Search ]" [ closemenu [search player]; searchnickname $la menuinitselection 1 newmenu [search server] - menuitemtextinput [ Search for server: ] "result $sbfavourite_SEARCH_keys" [ sbfavourite_SEARCH_keys = $arg1 ] menuitem " 2 [ Search ]" [ showonlyfavourites (addfavcategory SEARCH); showmenu server ] [ showonlyfavourites 0 ] menuinitselection 1 +newmenu [serverbrowser alternative views] +menuitem [Alt + Mouse wheel (Alt + Up/Down) toggles views in serverbrowser.] -1 +menuitem [] -1 +menuitemtextinput [Categories of favourites in alternative views: ] [getalias serverbrowseraltviews] [alias serverbrowseraltviews $arg1] [] 255 +menuitem [(type just names of categories, and not tags).] -1 +menuinitselection 2 + newmenu getmap menuitem [ This server is using a different version of this map...] -1 menuitem [] -1 diff --git a/source/src/menus.cpp b/source/src/menus.cpp index 489ac87d..c0fdb82d 100644 --- a/source/src/menus.cpp +++ b/source/src/menus.cpp @@ -1092,12 +1092,14 @@ bool menukey(int code, bool isdown, int unicode, SDLMod mod) case SDLK_UP: case SDL_AC_BUTTON_WHEELUP: if(iskeypressed(SDLK_LCTRL)) return menukey(SDLK_LEFT, isdown, 0); + if(iskeypressed(SDLK_LALT)) return menukey(SDLK_RIGHTBRACKET, isdown, 0); if(!curmenu->allowinput) return false; menusel--; break; case SDLK_DOWN: case SDL_AC_BUTTON_WHEELDOWN: if(iskeypressed(SDLK_LCTRL)) return menukey(SDLK_RIGHT, isdown, 0); + if(iskeypressed(SDLK_LALT)) return menukey(SDLK_LEFTBRACKET, isdown, 0); if(!curmenu->allowinput) return false; menusel++; break; diff --git a/source/src/serverbrowser.cpp b/source/src/serverbrowser.cpp index b0fe08c8..20e2cf09 100644 --- a/source/src/serverbrowser.cpp +++ b/source/src/serverbrowser.cpp @@ -877,6 +877,30 @@ const char *favcatcheck(serverinfo &si, const char *ckeys, char *autokeys = NULL return res ? nkeys : NULL; } +void serverbrowseralternativeviews(int shiftdirection) +{ + const char *ckeys = getalias("serverbrowseraltviews"); + if(!ckeys) return; + const char *sep = " \t\n\r"; + char *keys = newstring(ckeys), *k = strtok(keys, sep); + vector cats; + cats.add(0); + while(k) + { + loopv(favcats) if(!strcmp(favcats[i], k)) cats.add(i + 1); + k = strtok(NULL, sep); + } + delete[] keys; + if(cats.length()) + { + loopv(cats) + { + if(cats[i] == showonlyfavourites) { showonlyfavourites = cats[(i + shiftdirection + cats.length()) % cats.length()]; return; } + } + } + showonlyfavourites = 0; +} + vector favcattags; bool assignserverfavourites() @@ -1049,7 +1073,7 @@ void refreshservers(void *menu, bool init) } else { - if(!hidefavicons && showfavtag && si.favcat > -1) favimage = getalias(favcatargname(favcats[si.favcat], FC_IMAGE)); + if(!hidefavicons && !showweights && showfavtag && si.favcat > -1) favimage = getalias(favcatargname(favcats[si.favcat], FC_IMAGE)); filterrichtext(text, si.favcat > -1 && !favimage ? favcattags[si.favcat] : ""); if(showweights) concatformatstring(text, "(%d)", si.weight); formatstring(si.full)(showfavtag ? (favimage ? "\t" : "\fs%s\fr\t") : "", text); @@ -1189,6 +1213,14 @@ bool serverskey(void *menu, int code, bool isdown, int unicode) serversort = (serversort+1) % NUMSERVSORT; return true; + case SDLK_LEFTBRACKET: + serverbrowseralternativeviews(-1); + return true; + + case SDLK_RIGHTBRACKET: + serverbrowseralternativeviews(1); + return true; + case SDLK_F5: updatefrommaster(1); return true;