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;