aboutsummaryrefslogtreecommitdiff
path: root/src/lobby.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lobby.cpp')
-rw-r--r--src/lobby.cpp71
1 files changed, 66 insertions, 5 deletions
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 8fb8e5da..6f3486b6 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -6,14 +6,14 @@
#include "demoserver.h"
#include "networkmanager.h"
+#include <QAction>
#include <QImageReader>
+#include <QMenu>
Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
{
ao_app = p_ao_app;
-
- //
this->setWindowTitle(tr("Attorney Online %1").arg(ao_app->applicationVersion()));
this->setWindowIcon(QIcon(":/logo.png"));
this->setWindowFlags( (this->windowFlags() | Qt::CustomizeWindowHint) & ~Qt::WindowMaximizeButtonHint);
@@ -28,6 +28,9 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
ui_refresh->setObjectName("ui_refresh");
ui_add_to_fav = new AOButton(this, ao_app);
ui_add_to_fav->setObjectName("ui_add_to_fav");
+ ui_remove_from_fav = new AOButton(this, ao_app);
+ ui_remove_from_fav->setObjectName("ui_remove_from_fav");
+ ui_remove_from_fav->hide();
ui_connect = new AOButton(this, ao_app);
ui_connect->setObjectName("ui_connect");
ui_version = new QLabel(this);
@@ -45,6 +48,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
ui_server_list->setColumnWidth(0, 0);
ui_server_list->setIndentation(0);
ui_server_list->setObjectName("ui_server_list");
+ ui_server_list->setContextMenuPolicy(Qt::CustomContextMenu);
ui_server_search = new QLineEdit(this);
ui_server_search->setFrame(false);
@@ -79,6 +83,10 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
&Lobby::on_add_to_fav_pressed);
connect(ui_add_to_fav, &AOButton::released, this,
&Lobby::on_add_to_fav_released);
+ connect(ui_remove_from_fav, &AOButton::pressed, this,
+ &Lobby::on_remove_from_fav_pressed);
+ connect(ui_remove_from_fav, &AOButton::released, this,
+ &Lobby::on_remove_from_fav_released);
connect(ui_connect, &AOButton::pressed, this, &Lobby::on_connect_pressed);
connect(ui_connect, &AOButton::released, this, &Lobby::on_connect_released);
connect(ui_about, &AOButton::clicked, this, &Lobby::on_about_clicked);
@@ -87,6 +95,8 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow()
&Lobby::on_server_list_clicked);
connect(ui_server_list, &QTreeWidget::itemDoubleClicked,
this, &Lobby::on_server_list_doubleclicked);
+ connect(ui_server_list, &QTreeWidget::customContextMenuRequested, this,
+ &Lobby::on_server_list_context_menu_requested);
connect(ui_server_search, &QLineEdit::textChanged, this,
&Lobby::on_server_search_edited);
connect(ui_cancel, &AOButton::clicked, ao_app, &AOApplication::loading_cancelled);
@@ -145,6 +155,9 @@ void Lobby::set_widgets()
set_size_and_pos(ui_add_to_fav, "add_to_fav");
ui_add_to_fav->set_image("addtofav");
+ set_size_and_pos(ui_remove_from_fav, "remove_from_fav");
+ ui_remove_from_fav->set_image("removefromfav");
+
set_size_and_pos(ui_connect, "connect");
ui_connect->set_image("connect");
@@ -300,6 +313,8 @@ void Lobby::on_public_servers_clicked()
{
ui_public_servers->set_image("publicservers_selected");
ui_favorites->set_image("favorites");
+ ui_add_to_fav->show();
+ ui_remove_from_fav->hide();
reset_selection();
@@ -310,12 +325,14 @@ void Lobby::on_public_servers_clicked()
void Lobby::on_favorites_clicked()
{
- ui_favorites->set_image("favorites_selected");
ui_public_servers->set_image("publicservers");
+ ui_favorites->set_image("favorites_selected");
+ ui_add_to_fav->hide();
+ ui_remove_from_fav->show();
reset_selection();
- ao_app->set_favorite_list();
+ ao_app->load_favorite_list();
public_servers_selected = false;
@@ -342,7 +359,7 @@ void Lobby::on_refresh_released()
ao_app->net_manager->get_server_list(std::bind(&Lobby::list_servers, this));
get_motd();
} else {
- ao_app->set_favorite_list();
+ ao_app->load_favorite_list();
list_favorites();
}
}
@@ -363,6 +380,25 @@ void Lobby::on_add_to_fav_released()
}
}
+void Lobby::on_remove_from_fav_pressed()
+{
+ ui_remove_from_fav->set_image("removefromfav_pressed");
+}
+
+void Lobby::on_remove_from_fav_released()
+{
+ ui_remove_from_fav->set_image("removefromfav");
+ if (public_servers_selected) {
+ return;
+ }
+
+ int selection = get_selected_server();
+ if (selection > 0) {
+ ao_app->remove_favorite_server(selection);
+ list_favorites();
+ }
+}
+
void Lobby::on_connect_pressed() { ui_connect->set_image("connect_pressed"); }
void Lobby::on_connect_released()
@@ -479,6 +515,31 @@ void Lobby::on_server_list_doubleclicked(QTreeWidgetItem *p_item, int column)
//on_connect_released();
}
+void Lobby::on_server_list_context_menu_requested(const QPoint &point)
+{
+ if (public_servers_selected) {
+ return;
+ }
+
+ auto *item = ui_server_list->itemAt(point);
+ if (item == nullptr) {
+ qInfo() << "no favorite server item; skipping context menu";
+ return;
+ }
+ const int server_index = item->data(0, Qt::DisplayRole).toInt();
+ if (server_index == 0) {
+ qInfo() << "demo server has no context menu to display";
+ return;
+ }
+
+ auto *menu = new QMenu(this);
+ menu->addAction(tr("Remove"), ao_app, [this,server_index](){
+ ao_app->remove_favorite_server(server_index);
+ list_favorites();
+ });
+ menu->popup(ui_server_list->mapToGlobal(point));
+}
+
void Lobby::on_server_search_edited(QString p_text)
{
// Iterate through all QTreeWidgetItem items