aboutsummaryrefslogtreecommitdiff
path: root/src/lobby.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/lobby.cpp')
-rw-r--r--src/lobby.cpp338
1 files changed, 167 insertions, 171 deletions
diff --git a/src/lobby.cpp b/src/lobby.cpp
index 85cc7449..6c64804d 100644
--- a/src/lobby.cpp
+++ b/src/lobby.cpp
@@ -2,44 +2,28 @@
#include "aoapplication.h"
#include "demoserver.h"
+#include "gui_utils.h"
#include "networkmanager.h"
#include "widgets/add_server_dialog.h"
#include "widgets/direct_connect_dialog.h"
#include "widgets/edit_server_dialog.h"
#include <QImageReader>
-#include <QLabel>
-#include <QLineEdit>
-#include <QPushButton>
-#include <QTreeWidget>
-
#include <QUiLoader>
-#define FROM_UI(type, name) \
- ; \
- ui_##name = findChild<type *>(#name);
-
-#define COMBO_RELOAD() \
- list_servers(); \
- list_favorites(); \
- list_demos(); \
- get_motd(); \
- check_for_updates(); \
- reset_selection();
-
Lobby::Lobby(AOApplication *p_ao_app, NetworkManager *p_net_manager)
: QMainWindow()
{
ao_app = p_ao_app;
net_manager = p_net_manager;
- loadUI();
- COMBO_RELOAD()
+ reloadUi();
}
void Lobby::on_tab_changed(int index)
{
- switch (index) {
+ switch (index)
+ {
case SERVER:
current_page = SERVER;
ui_add_to_favorite_button->setVisible(true);
@@ -74,14 +58,17 @@ void Lobby::on_tab_changed(int index)
int Lobby::get_selected_server()
{
- switch (ui_connections_tabview->currentIndex()) {
+ switch (ui_connections_tabview->currentIndex())
+ {
case SERVER:
- if (auto item = ui_serverlist_tree->currentItem()) {
+ if (auto item = ui_serverlist_tree->currentItem())
+ {
return item->text(0).toInt();
}
break;
case FAVORITES:
- if (auto item = ui_favorites_tree->currentItem()) {
+ if (auto item = ui_favorites_tree->currentItem())
+ {
return item->text(0).toInt();
}
break;
@@ -91,7 +78,10 @@ int Lobby::get_selected_server()
return -1;
}
-int Lobby::pageSelected() { return current_page; }
+int Lobby::pageSelected()
+{
+ return current_page;
+}
void Lobby::reset_selection()
{
@@ -106,14 +96,14 @@ void Lobby::reset_selection()
void Lobby::loadUI()
{
- this->setWindowTitle(
- tr("Attorney Online %1").arg(ao_app->applicationVersion()));
+ this->setWindowTitle(tr("Attorney Online %1").arg(ao_app->applicationVersion()));
this->setWindowIcon(QIcon(":/logo.png"));
this->setWindowFlags((this->windowFlags() | Qt::CustomizeWindowHint));
QUiLoader l_loader(this);
QFile l_uiFile(Options::getInstance().getUIAsset(DEFAULT_UI));
- if (!l_uiFile.open(QFile::ReadOnly)) {
+ if (!l_uiFile.open(QFile::ReadOnly))
+ {
qCritical() << "Unable to open file " << l_uiFile.fileName();
return;
}
@@ -121,95 +111,75 @@ void Lobby::loadUI()
l_loader.load(&l_uiFile, this);
FROM_UI(QLabel, game_version_lbl);
- ui_game_version_lbl->setText(
- tr("Version: %1").arg(ao_app->get_version_string()));
+ ui_game_version_lbl->setText(tr("Version: %1").arg(ao_app->get_version_string()));
FROM_UI(QPushButton, settings_button);
- connect(ui_settings_button, &QPushButton::clicked, this,
- &Lobby::onSettingsRequested);
+ connect(ui_settings_button, &QPushButton::clicked, this, &Lobby::onSettingsRequested);
FROM_UI(QPushButton, about_button);
- connect(ui_about_button, &QPushButton::clicked, this,
- &Lobby::on_about_clicked);
+ connect(ui_about_button, &QPushButton::clicked, this, &Lobby::on_about_clicked);
// Serverlist elements
FROM_UI(QTabWidget, connections_tabview);
ui_connections_tabview->tabBar()->setExpanding(true);
- connect(ui_connections_tabview, &QTabWidget::currentChanged, this,
- &Lobby::on_tab_changed);
+ connect(ui_connections_tabview, &QTabWidget::currentChanged, this, &Lobby::on_tab_changed);
FROM_UI(QTreeWidget, serverlist_tree);
FROM_UI(QLineEdit, serverlist_search);
- connect(ui_serverlist_tree, &QTreeWidget::itemClicked, this,
- &Lobby::on_server_list_clicked);
- connect(ui_serverlist_tree, &QTreeWidget::itemDoubleClicked, this,
- &Lobby::on_list_doubleclicked);
- connect(ui_serverlist_search, &QLineEdit::textChanged, this,
- &Lobby::on_server_search_edited);
+ connect(ui_serverlist_tree, &QTreeWidget::itemClicked, this, &Lobby::on_server_list_clicked);
+ connect(ui_serverlist_tree, &QTreeWidget::itemDoubleClicked, this, &Lobby::on_list_doubleclicked);
+ connect(ui_serverlist_search, &QLineEdit::textChanged, this, &Lobby::on_server_search_edited);
FROM_UI(QTreeWidget, favorites_tree);
- connect(ui_favorites_tree, &QTreeWidget::itemClicked, this,
- &Lobby::on_favorite_tree_clicked);
- connect(ui_favorites_tree, &QTreeWidget::itemDoubleClicked, this,
- &Lobby::on_list_doubleclicked);
+ connect(ui_favorites_tree, &QTreeWidget::itemClicked, this, &Lobby::on_favorite_tree_clicked);
+ connect(ui_favorites_tree, &QTreeWidget::itemDoubleClicked, this, &Lobby::on_list_doubleclicked);
FROM_UI(QTreeWidget, demo_tree);
- connect(ui_demo_tree, &QTreeWidget::itemClicked, this,
- &Lobby::on_demo_clicked);
- connect(ui_demo_tree, &QTreeWidget::itemDoubleClicked, this,
- &Lobby::on_list_doubleclicked);
+ connect(ui_demo_tree, &QTreeWidget::itemClicked, this, &Lobby::on_demo_clicked);
+ connect(ui_demo_tree, &QTreeWidget::itemDoubleClicked, this, &Lobby::on_list_doubleclicked);
FROM_UI(QPushButton, refresh_button);
- connect(ui_refresh_button, &QPushButton::released, this,
- &Lobby::on_refresh_released);
+ connect(ui_refresh_button, &QPushButton::released, this, &Lobby::on_refresh_released);
FROM_UI(QPushButton, direct_connect_button);
- connect(ui_direct_connect_button, &QPushButton::released, this,
- &Lobby::on_direct_connect_released);
+ connect(ui_direct_connect_button, &QPushButton::released, this, &Lobby::on_direct_connect_released);
- FROM_UI(QPushButton, add_to_favorite_button)
- connect(ui_add_to_favorite_button, &QPushButton::released, this,
- &Lobby::on_add_to_fav_released);
+ FROM_UI(QPushButton, add_to_favorite_button);
+ connect(ui_add_to_favorite_button, &QPushButton::released, this, &Lobby::on_add_to_fav_released);
- FROM_UI(QPushButton, add_server_button)
+ FROM_UI(QPushButton, add_server_button);
ui_add_server_button->setVisible(false);
- connect(ui_add_server_button, &QPushButton::released, this,
- &Lobby::on_add_server_to_fave_released);
+ connect(ui_add_server_button, &QPushButton::released, this, &Lobby::on_add_server_to_fave_released);
- FROM_UI(QPushButton, edit_favorite_button)
+ FROM_UI(QPushButton, edit_favorite_button);
ui_edit_favorite_button->setVisible(false);
- connect(ui_edit_favorite_button, &QPushButton::released, this,
- &Lobby::on_edit_favorite_released)
+ connect(ui_edit_favorite_button, &QPushButton::released, this, &Lobby::on_edit_favorite_released);
- FROM_UI(QPushButton, remove_from_favorites_button)
- ui_remove_from_favorites_button->setVisible(false);
- connect(ui_remove_from_favorites_button, &QPushButton::released, this,
- &Lobby::on_remove_from_fav_released);
+ FROM_UI(QPushButton, remove_from_favorites_button);
+ ui_remove_from_favorites_button->setVisible(false);
+ connect(ui_remove_from_favorites_button, &QPushButton::released, this, &Lobby::on_remove_from_fav_released);
- FROM_UI(QLabel, server_player_count_lbl)
- FROM_UI(QTextBrowser, server_description_text)
+ FROM_UI(QLabel, server_player_count_lbl);
+ FROM_UI(QTextBrowser, server_description_text);
FROM_UI(QPushButton, connect_button);
- connect(ui_connect_button, &QPushButton::released, net_manager,
- &NetworkManager::join_to_server);
- connect(ui_connect_button, &QPushButton::released, this, [=] {
- ui_server_player_count_lbl->setText(tr("Joining Server..."));
- });
- connect(net_manager, &NetworkManager::server_connected, ui_connect_button,
- &QPushButton::setEnabled);
+ connect(ui_connect_button, &QPushButton::released, net_manager, &NetworkManager::join_to_server);
+ connect(ui_connect_button, &QPushButton::released, this, [=] { ui_server_player_count_lbl->setText(tr("Joining Server...")); });
+ connect(net_manager, &NetworkManager::server_connected, ui_connect_button, &QPushButton::setEnabled);
FROM_UI(QTextBrowser, motd_text);
- FROM_UI(QTextBrowser, game_changelog_text)
- if (ui_game_changelog_text != nullptr) {
+ FROM_UI(QTextBrowser, game_changelog_text);
+ if (ui_game_changelog_text != nullptr)
+ {
QString l_changelog_text = "No changelog found.";
QFile l_changelog(get_base_path() + "changelog.md");
- if (!l_changelog.open(QFile::ReadOnly)) {
+ if (!l_changelog.open(QFile::ReadOnly))
+ {
qDebug() << "Unable to locate changelog file. Does it even exist?";
#if QT_VERSION >= QT_VERSION_CHECK(5, 14, 0)
ui_game_changelog_text->setMarkdown(l_changelog_text);
#else
- ui_game_changelog_text->setPlainText(
- l_changelog_text); // imperfect solution, but implementing Markdown
- // ourselves for this edge case is out of scope
+ ui_game_changelog_text->setPlainText(l_changelog_text); // imperfect solution, but implementing Markdown
+ // ourselves for this edge case is out of scope
#endif
return;
}
@@ -221,12 +191,24 @@ void Lobby::loadUI()
l_changelog.close();
QTabWidget *l_tabbar = findChild<QTabWidget *>("motd_changelog_tab");
- if (l_tabbar != nullptr) {
+ if (l_tabbar != nullptr)
+ {
l_tabbar->tabBar()->setExpanding(true);
}
}
}
+void Lobby::reloadUi()
+{
+ loadUI();
+ list_servers();
+ list_favorites();
+ list_demos();
+ get_motd();
+ check_for_updates();
+ reset_selection();
+}
+
void Lobby::on_refresh_released()
{
net_manager->get_server_list();
@@ -243,7 +225,8 @@ void Lobby::on_direct_connect_released()
void Lobby::on_add_to_fav_released()
{
int selection = get_selected_server();
- if (selection > -1) {
+ if (selection > -1)
+ {
Options::getInstance().addFavorite(ao_app->get_server_list().at(selection));
list_favorites();
}
@@ -268,7 +251,8 @@ void Lobby::on_edit_favorite_released()
void Lobby::on_remove_from_fav_released()
{
int selection = get_selected_server();
- if (selection >= 0) {
+ if (selection >= 0)
+ {
Options::getInstance().removeFavorite(selection);
list_favorites();
}
@@ -277,47 +261,46 @@ void Lobby::on_remove_from_fav_released()
void Lobby::on_about_clicked()
{
const bool hasApng = QImageReader::supportedImageFormats().contains("apng");
- QString msg =
- tr("<h2>Attorney Online %1</h2>"
- "The courtroom drama simulator."
- "<p><b>Source code:</b> "
- "<a href='https://github.com/AttorneyOnline/AO2-Client'>"
- "https://github.com/AttorneyOnline/AO2-Client</a>"
- "<p><b>Major development:</b><br>"
- "OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, "
- "Crystalwarrior, Iamgoofball, in1tiate"
- "<p><b>Client development:</b><br>"
- "Cents02, windrammer, skyedeving, TrickyLeifa, Salanto, lambdcalculus"
- "<p><b>QA testing:</b><br>"
- "CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, "
- "Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, "
- "Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, "
- "Veritas, Wiso"
- "<p><b>Translations:</b><br>"
- "k-emiko (Русский), Pyraq (Polski), scatterflower (日本語), vintprox "
- "(Русский), "
- "windrammer (Español, Português)"
- "<p><b>Special thanks:</b><br>"
- "Wiso, dyviacat (2.10 release); "
- "CrazyJC (2.8 release director) and MaximumVolty (2.8 release "
- "promotion); "
- "Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); "
- "Rue (website); Draxirch (UI design); "
- "Lewdton and Argoneus (tsuserver); "
- "Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); "
- "server hosts, game masters, case makers, content creators, "
- "and the whole AO2 community!"
- "<p>The Attorney Online networked visual novel project "
- "is copyright (c) 2016-2022 Attorney Online developers. Open-source "
- "licenses apply. All other assets are the property of their "
- "respective owners."
- "<p>Running on Qt version %2 with the BASS audio engine.<br>"
- "APNG plugin loaded: %3"
- "<p>Built on %4")
- .arg(ao_app->get_version_string())
- .arg(QLatin1String(QT_VERSION_STR))
- .arg(hasApng ? tr("Yes") : tr("No"))
- .arg(QLatin1String(__DATE__));
+ QString msg = tr("<h2>Attorney Online %1</h2>"
+ "The courtroom drama simulator."
+ "<p><b>Source code:</b> "
+ "<a href='https://github.com/AttorneyOnline/AO2-Client'>"
+ "https://github.com/AttorneyOnline/AO2-Client</a>"
+ "<p><b>Major development:</b><br>"
+ "OmniTroid, stonedDiscord, longbyte1, gameboyprinter, Cerapter, "
+ "Crystalwarrior, Iamgoofball, in1tiate"
+ "<p><b>Client development:</b><br>"
+ "Cents02, windrammer, skyedeving, TrickyLeifa, Salanto, lambdcalculus"
+ "<p><b>QA testing:</b><br>"
+ "CaseyCazy, CedricDewitt, Chewable Tablets, CrazyJC, Fantos, "
+ "Fury McFlurry, Geck, Gin-Gi, Jamania, Minx, Pandae, "
+ "Robotic Overlord, Shadowlions (aka Shali), Sierra, SomeGuy, "
+ "Veritas, Wiso"
+ "<p><b>Translations:</b><br>"
+ "k-emiko (Русский), Pyraq (Polski), scatterflower (日本語), vintprox "
+ "(Русский), "
+ "windrammer (Español, Português)"
+ "<p><b>Special thanks:</b><br>"
+ "Wiso, dyviacat (2.10 release); "
+ "CrazyJC (2.8 release director) and MaximumVolty (2.8 release "
+ "promotion); "
+ "Remy, Hibiki, court-records.net (sprites); Qubrick (webAO); "
+ "Rue (website); Draxirch (UI design); "
+ "Lewdton and Argoneus (tsuserver); "
+ "Fiercy, Noevain, Cronnicossy, and FanatSors (AO1); "
+ "server hosts, game masters, case makers, content creators, "
+ "and the whole AO2 community!"
+ "<p>The Attorney Online networked visual novel project "
+ "is copyright (c) 2016-2022 Attorney Online developers. Open-source "
+ "licenses apply. All other assets are the property of their "
+ "respective owners."
+ "<p>Running on Qt version %2 with the BASS audio engine.<br>"
+ "APNG plugin loaded: %3"
+ "<p>Built on %4")
+ .arg(ao_app->get_version_string())
+ .arg(QLatin1String(QT_VERSION_STR))
+ .arg(hasApng ? tr("Yes") : tr("No"))
+ .arg(QLatin1String(__DATE__));
QMessageBox::about(this, tr("About"), msg);
}
@@ -328,16 +311,23 @@ void Lobby::on_server_list_clicked(QTreeWidgetItem *p_item, int column)
server_type f_server;
int n_server = p_item->text(column).toInt();
- if (n_server == last_index) {
+ if (n_server == last_index)
+ {
return;
}
last_index = n_server;
- if (n_server < 0) return;
+ if (n_server < 0)
+ {
+ return;
+ }
QVector<server_type> f_server_list = ao_app->get_server_list();
- if (n_server >= f_server_list.size()) return;
+ if (n_server >= f_server_list.size())
+ {
+ return;
+ }
f_server = f_server_list.at(n_server);
@@ -367,12 +357,16 @@ void Lobby::on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column)
server_type f_server;
int n_server = p_item->text(column).toInt();
- if (n_server == last_index) {
+ if (n_server == last_index)
+ {
return;
}
last_index = n_server;
- if (n_server < 0) return;
+ if (n_server < 0)
+ {
+ return;
+ }
ui_add_server_button->setEnabled(true);
ui_edit_favorite_button->setEnabled(true);
@@ -380,7 +374,10 @@ void Lobby::on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column)
QVector<server_type> f_server_list = Options::getInstance().favorites();
- if (n_server >= f_server_list.size()) return;
+ if (n_server >= f_server_list.size())
+ {
+ return;
+ }
f_server = f_server_list.at(n_server);
@@ -398,19 +395,22 @@ void Lobby::on_server_search_edited(QString p_text)
{
// Iterate through all QTreeWidgetItem items
QTreeWidgetItemIterator it(ui_serverlist_tree);
- while (*it) {
+ while (*it)
+ {
(*it)->setHidden(p_text != "");
++it;
}
- if (p_text != "") {
+ if (p_text != "")
+ {
// Search in metadata
- QList<QTreeWidgetItem *> clist = ui_serverlist_tree->findItems(
- ui_serverlist_search->text(), Qt::MatchContains | Qt::MatchRecursive,
- 1);
- foreach (QTreeWidgetItem *item, clist) {
+ QList<QTreeWidgetItem *> clist = ui_serverlist_tree->findItems(ui_serverlist_search->text(), Qt::MatchContains | Qt::MatchRecursive, 1);
+ foreach (QTreeWidgetItem *item, clist)
+ {
if (item->parent() != nullptr) // So the category shows up too
+ {
item->parent()->setHidden(false);
+ }
item->setHidden(false);
}
}
@@ -420,17 +420,16 @@ void Lobby::on_demo_clicked(QTreeWidgetItem *item, int column)
{
Q_UNUSED(column)
- if (item == nullptr) {
+ if (item == nullptr)
+ {
return;
}
- QString l_filepath = (QApplication::applicationDirPath() + "/logs/%1/%2")
- .arg(item->data(0, Qt::DisplayRole).toString(),
- item->data(1, Qt::DisplayRole).toString());
+ QString l_filepath = (QApplication::applicationDirPath() + "/logs/%1/%2").arg(item->data(0, Qt::DisplayRole).toString(), item->data(1, Qt::DisplayRole).toString());
ao_app->demo_server->start_server();
server_type demo_server;
demo_server.ip = "127.0.0.1";
- demo_server.port = ao_app->demo_server->port;
+ demo_server.port = ao_app->demo_server->port();
ao_app->demo_server->set_demo_file(l_filepath);
net_manager->connect_to_server(demo_server);
}
@@ -440,15 +439,14 @@ void Lobby::onReloadThemeRequested()
// This is destructive to the active widget data.
// Whatever, this is lobby. Nothing here is worth saving.
delete centralWidget();
- loadUI();
- COMBO_RELOAD()
+
+ reloadUi();
}
void Lobby::onSettingsRequested()
{
- AOOptionsDialog options(nullptr, ao_app);
- connect(&options, &AOOptionsDialog::reloadThemeRequest, this,
- &Lobby::onReloadThemeRequested);
+ AOOptionsDialog options(ao_app);
+ connect(&options, &AOOptionsDialog::reloadThemeRequest, this, &Lobby::onReloadThemeRequested);
options.exec();
}
@@ -460,7 +458,8 @@ void Lobby::list_servers()
ui_serverlist_search->setText("");
int i = 0;
- for (const server_type &i_server : qAsConst(ao_app->get_server_list())) {
+ for (const server_type &i_server : qAsConst(ao_app->get_server_list()))
+ {
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_serverlist_tree);
treeItem->setData(0, Qt::DisplayRole, i);
treeItem->setText(1, i_server.name);
@@ -477,7 +476,8 @@ void Lobby::list_favorites()
ui_favorites_tree->clear();
int i = 0;
- for (const server_type &i_server : Options::getInstance().favorites()) {
+ for (const server_type &i_server : Options::getInstance().favorites())
+ {
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_favorites_tree);
treeItem->setData(0, Qt::DisplayRole, i);
treeItem->setText(1, i_server.name);
@@ -494,8 +494,10 @@ void Lobby::list_demos()
ui_demo_tree->clear();
QMultiMap<QString, QString> m_demo_entries = ao_app->load_demo_logs_list();
- for (auto &l_key : m_demo_entries.uniqueKeys()) {
- for (const QString &l_entry : m_demo_entries.values(l_key)) {
+ for (auto &l_key : m_demo_entries.uniqueKeys())
+ {
+ for (const QString &l_entry : m_demo_entries.values(l_key))
+ {
QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_demo_tree);
treeItem->setData(0, Qt::DisplayRole, l_key);
treeItem->setData(1, Qt::DisplayRole, l_entry);
@@ -509,7 +511,8 @@ void Lobby::list_demos()
void Lobby::get_motd()
{
net_manager->request_document(MSDocumentType::Motd, [this](QString document) {
- if (document.isEmpty()) {
+ if (document.isEmpty())
+ {
document = tr("Couldn't get the message of the day.");
}
ui_motd_text->setHtml(document);
@@ -518,35 +521,28 @@ void Lobby::get_motd()
void Lobby::check_for_updates()
{
- net_manager->request_document(
- MSDocumentType::ClientVersion, [this](QString version) {
- const QString current_version = ao_app->get_version_string();
- if (!version.isEmpty() && version != current_version) {
- ui_game_version_lbl->setText(
- tr("Version: %1 (!)").arg(current_version));
- ui_game_version_lbl->setToolTip(
- tr("New version available: %1").arg(version));
- }
- });
+ net_manager->request_document(MSDocumentType::ClientVersion, [this](QString version) {
+ const QString current_version = ao_app->get_version_string();
+ if (!version.isEmpty() && version != current_version)
+ {
+ ui_game_version_lbl->setText(tr("Version: %1 (!)").arg(current_version));
+ ui_game_version_lbl->setToolTip(tr("New version available: %1").arg(version));
+ }
+ });
}
void Lobby::set_player_count(int players_online, int max_players)
{
- QString f_string =
- tr("Online: %1/%2")
- .arg(QString::number(players_online), QString::number(max_players));
+ QString f_string = tr("Online: %1/%2").arg(QString::number(players_online), QString::number(max_players));
ui_server_player_count_lbl->setText(f_string);
}
void Lobby::set_server_description(const QString &server_description)
{
ui_server_description_text->clear();
- QString result =
- server_description.toHtmlEscaped()
- .replace("\n", "<br>")
- .replace(QRegularExpression("\\b(https?://\\S+\\.\\S+)\\b"),
- "<a href='\\1'>\\1</a>");
+ QString result = server_description.toHtmlEscaped().replace("\n", "<br>").replace(QRegularExpression("\\b(https?://\\S+\\.\\S+)\\b"), "<a href='\\1'>\\1</a>");
ui_server_description_text->insertHtml(result);
}
-Lobby::~Lobby() {}
+Lobby::~Lobby()
+{}