From 1cfbfd51a70ae61279f53a1b14dbc0c81fe1d259 Mon Sep 17 00:00:00 2001 From: Leifa♥ <26681464+TrickyLeifa@users.noreply.github.com> Date: Sun, 31 Jul 2022 04:57:01 +0200 Subject: Added server list context menu, ... (#835) * Added server list context menu, ... Resolve #832, #560 * The demo server listing now always appears at the top for consistency. * Add a context menu to server listing. Only appears during favorite server listing. Requires a valid item under cursor. Cannot be the demo server item. * Add a new UI element: `remove_from_fav` Only appears during favorite server listing. Require a selection to remove. Cannot be the demo server. Uses `removefromfav.png` and `removefromfav_pressed.png` images as textures. * Favorite servers are now loaded whenever the Lobby is created in addition to refresh and server listing switch. * `serverlist.txt` is now renamed to `(deprecated)serverlist.txt` if read from. * Updated comments * Typos --- src/aoapplication.cpp | 58 +++++++++++++++++++++++++++++++++++---------------- 1 file changed, 40 insertions(+), 18 deletions(-) (limited to 'src/aoapplication.cpp') diff --git a/src/aoapplication.cpp b/src/aoapplication.cpp index 25ec7878..d52fc8b6 100644 --- a/src/aoapplication.cpp +++ b/src/aoapplication.cpp @@ -51,6 +51,7 @@ void AOApplication::construct_lobby() return; } + load_favorite_list(); w_lobby = new Lobby(this); lobby_constructed = true; @@ -125,9 +126,34 @@ QString AOApplication::get_version_string() void AOApplication::reload_theme() { current_theme = read_theme(); } -void AOApplication::set_favorite_list() +void AOApplication::load_favorite_list() { - favorite_list = read_serverlist_txt(); + favorite_list = read_favorite_servers(); +} + +void AOApplication::save_favorite_list() +{ + QSettings favorite_servers_ini(get_base_path() + "favorite_servers.ini", QSettings::IniFormat); + favorite_servers_ini.setIniCodec("UTF-8"); + + favorite_servers_ini.clear(); + // skip demo server entry, demo server entry is always at index 0 + for(int i = 1; i < favorite_list.size(); ++i) { + auto fav_server = favorite_list.at(i); + favorite_servers_ini.beginGroup(QString::number(i)); + favorite_servers_ini.setValue("name", fav_server.name); + favorite_servers_ini.setValue("address", fav_server.ip); + favorite_servers_ini.setValue("port", fav_server.port); + favorite_servers_ini.setValue("desc", fav_server.desc); + + if (fav_server.socket_type == TCP) { + favorite_servers_ini.setValue("protocol", "tcp"); + } else { + favorite_servers_ini.setValue("protocol", "ws"); + } + favorite_servers_ini.endGroup(); + } + favorite_servers_ini.sync(); } QString AOApplication::get_current_char() @@ -142,25 +168,21 @@ void AOApplication::add_favorite_server(int p_server) { if (p_server < 0 || p_server >= server_list.size()) return; + favorite_list.append(server_list.at(p_server)); + save_favorite_list(); +} - server_type fav_server = server_list.at(p_server); - QSettings l_favorite_ini(get_base_path() + "favorite_servers.ini", QSettings::IniFormat); - QString l_new_group = QString::number(l_favorite_ini.childGroups().size()); - l_favorite_ini.setIniCodec("UTF-8"); +void AOApplication::remove_favorite_server(int p_server) +{ + if (p_server < 0 || p_server >= favorite_list.size()) + return; + favorite_list.removeAt(p_server); + save_favorite_list(); +} - l_favorite_ini.beginGroup(l_new_group); - l_favorite_ini.setValue("name", fav_server.name); - l_favorite_ini.setValue("address", fav_server.ip); - l_favorite_ini.setValue("port", fav_server.port); - l_favorite_ini.setValue("desc", fav_server.desc); +void AOApplication::prompt_remove_favorite_server(int p_server) +{ - if (fav_server.socket_type == TCP) { - l_favorite_ini.setValue("protocol", "tcp"); - } - else { - l_favorite_ini.setValue("protocol", "ws"); - } - l_favorite_ini.sync(); } void AOApplication::server_disconnected() -- cgit