diff options
| author | TrickyLeifa <date.epoch@gmail.com> | 2024-05-16 03:09:21 +0200 |
|---|---|---|
| committer | TrickyLeifa <date.epoch@gmail.com> | 2024-05-16 03:09:21 +0200 |
| commit | 39e4354b1dae5d8487ea5b84be9f304b1950a61a (patch) | |
| tree | 734c99d3ef1a8e69007dd870a8b6763deca5ffce /src/widgets | |
| parent | a0cee58c048772b2dcfe3992f60728d5a6f7d786 (diff) | |
Reimplemented favorite server widget, ...
* Reworked favorite server widget
* Renamed `server_type` to `ServerInfo`
* Renamed `connection_type` to `ServerConnectionType`
* Refactored `AOCharButton`
* Reimplemented `AOButton`
* Partially reimplemented `AOEmoteButton`
* Refactored `AOEvidenceButton`
Diffstat (limited to 'src/widgets')
| -rw-r--r-- | src/widgets/add_server_dialog.cpp | 96 | ||||
| -rw-r--r-- | src/widgets/add_server_dialog.h | 40 | ||||
| -rw-r--r-- | src/widgets/direct_connect_dialog.cpp | 25 | ||||
| -rw-r--r-- | src/widgets/direct_connect_dialog.h | 26 | ||||
| -rw-r--r-- | src/widgets/edit_server_dialog.cpp | 75 | ||||
| -rw-r--r-- | src/widgets/edit_server_dialog.h | 42 | ||||
| -rw-r--r-- | src/widgets/server_editor_dialog.cpp | 93 | ||||
| -rw-r--r-- | src/widgets/server_editor_dialog.h | 43 |
8 files changed, 163 insertions, 277 deletions
diff --git a/src/widgets/add_server_dialog.cpp b/src/widgets/add_server_dialog.cpp deleted file mode 100644 index dfc302f0..00000000 --- a/src/widgets/add_server_dialog.cpp +++ /dev/null @@ -1,96 +0,0 @@ -#include "add_server_dialog.h" - -#include "datatypes.h" -#include "options.h" -#include "gui_utils.h" - -#include <QComboBox> -#include <QDebug> -#include <QDialogButtonBox> -#include <QFile> -#include <QLabel> -#include <QLineEdit> -#include <QPlainTextEdit> -#include <QPushButton> -#include <QSpinBox> -#include <QUiLoader> -#include <QVBoxLayout> - -AddServerDialog::AddServerDialog() -{ - QUiLoader l_loader(this); - QFile l_uiFile(Options::getInstance().getUIAsset(DEFAULT_UI)); - - if (!l_uiFile.open(QFile::ReadOnly)) - { - qCritical() << "Unable to open file " << l_uiFile.fileName(); - return; - } - ui_widget = l_loader.load(&l_uiFile, this); - - auto l_layout = new QVBoxLayout(this); - l_layout->addWidget(ui_widget); - - FROM_UI(QLineEdit, server_display_name_edit); - FROM_UI(QLineEdit, server_hostname_edit); - FROM_UI(QSpinBox, server_port_box); - FROM_UI(QComboBox, server_protocol_box); - FROM_UI(QPlainTextEdit, server_description_edit); - FROM_UI(QDialogButtonBox, server_dialog_button); - connect(ui_server_dialog_button, &QDialogButtonBox::accepted, this, &::AddServerDialog::onSavePressed); - connect(ui_server_dialog_button, &QDialogButtonBox::rejected, this, &AddServerDialog::onCancelPressed); - - FROM_UI(QLabel, server_legacy_lbl); - FROM_UI(QLineEdit, server_legacy_edit); - FROM_UI(QPushButton, server_legacy_load_button); - connect(ui_server_legacy_load_button, &QPushButton::released, this, &AddServerDialog::parseLegacyServerEntry); -} - -void AddServerDialog::onSavePressed() -{ - server_type server; - server.name = ui_server_display_name_edit->text(); - server.ip = ui_server_hostname_edit->text(); - server.port = ui_server_port_box->value(); - server.desc = ui_server_description_edit->toPlainText(); - server.socket_type = ui_server_protocol_box->currentIndex() == TCP_INDEX ? TCP : WEBSOCKETS; - Options::getInstance().addFavorite(server); - close(); -} - -void AddServerDialog::onCancelPressed() -{ - close(); - deleteLater(); -} - -void AddServerDialog::parseLegacyServerEntry() -{ - QStringList l_legacy_entry = ui_server_legacy_edit->text().split(":"); - server_type l_server_entry; - if (l_legacy_entry.isEmpty()) - { - qDebug() << "Legacy entry empty."; - return; - } - - int l_item_count = l_legacy_entry.size(); - - if (l_item_count >= 3) - { - ui_server_hostname_edit->setText(l_legacy_entry.at(0)); - ui_server_port_box->setValue(l_legacy_entry.at(1).toInt()); - ui_server_display_name_edit->setText(l_legacy_entry.at(2)); - if (l_item_count >= 4) - { - if (l_legacy_entry.at(3) == "ws") - { - ui_server_protocol_box->setCurrentIndex(1); - } - else - { - ui_server_protocol_box->setCurrentIndex(0); - } - } - } -} diff --git a/src/widgets/add_server_dialog.h b/src/widgets/add_server_dialog.h deleted file mode 100644 index 5df868cc..00000000 --- a/src/widgets/add_server_dialog.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#include "interfaces/server_dialog.h" - -#include <QComboBox> -#include <QDialogButtonBox> -#include <QLabel> -#include <QLineEdit> -#include <QPlainTextEdit> -#include <QPushButton> -#include <QSpinBox> - -class AddServerDialog : public AttorneyOnline::UI::FavoriteServerDialog -{ - Q_OBJECT - -public: - AddServerDialog(); - ~AddServerDialog() = default; - -private: - QWidget *ui_widget; - - QLineEdit *ui_server_display_name_edit; - QLineEdit *ui_server_hostname_edit; - QSpinBox *ui_server_port_box; - QComboBox *ui_server_protocol_box; - QPlainTextEdit *ui_server_description_edit; - QDialogButtonBox *ui_server_dialog_button; - - // Legacy Server UI - QLabel *ui_server_legacy_lbl; - QLineEdit *ui_server_legacy_edit; - QPushButton *ui_server_legacy_load_button; - -private Q_SLOTS: - void onSavePressed() override; - void onCancelPressed() override; - void parseLegacyServerEntry(); -}; diff --git a/src/widgets/direct_connect_dialog.cpp b/src/widgets/direct_connect_dialog.cpp index 40e75b76..db4cde62 100644 --- a/src/widgets/direct_connect_dialog.cpp +++ b/src/widgets/direct_connect_dialog.cpp @@ -9,11 +9,16 @@ #include <QUiLoader> #include <QVBoxLayout> -DirectConnectDialog::DirectConnectDialog(NetworkManager *p_net_manager) - : net_manager(p_net_manager) +const QString DirectConnectDialog::UI_FILE_PATH = "direct_connect_dialog.ui"; +const QRegularExpression DirectConnectDialog::SCHEME_PATTERN{"^\\w+://.+$"}; +const int DirectConnectDialog::CONNECT_TIMEOUT = 5 * 1000; + +DirectConnectDialog::DirectConnectDialog(NetworkManager *netManager, QWidget *parent) + : QDialog(parent) + , net_manager(netManager) { QUiLoader l_loader(this); - QFile l_uiFile(Options::getInstance().getUIAsset(DEFAULT_UI)); + QFile l_uiFile(Options::getInstance().getUIAsset(UI_FILE_PATH)); if (!l_uiFile.open(QFile::ReadOnly)) { @@ -36,8 +41,8 @@ DirectConnectDialog::DirectConnectDialog(NetworkManager *p_net_manager) connect(net_manager, &NetworkManager::server_connected, this, &DirectConnectDialog::onServerConnected); - connect(&connect_timeout, &QTimer::timeout, this, &DirectConnectDialog::onConnectTimeout); - connect_timeout.setSingleShot(true); + connect(&m_connect_timeout, &QTimer::timeout, this, &DirectConnectDialog::onConnectTimeout); + m_connect_timeout.setSingleShot(true); } void DirectConnectDialog::onConnectPressed() @@ -53,9 +58,9 @@ void DirectConnectDialog::onConnectPressed() call_error(tr("Invalid URL.")); return; } - if (!to_connection_type.contains(l_url.scheme())) + if (!SERVER_CONNECTION_TYPE_STRING_MAP.contains(l_url.scheme())) { - call_error(tr("Scheme not recognized. Must be either of the following: ") % QStringList::fromVector(to_connection_type.keys().toVector()).join(", ")); + call_error(tr("Scheme not recognized. Must be either of the following: ") % QStringList::fromVector(SERVER_CONNECTION_TYPE_STRING_MAP.keys().toVector()).join(", ")); return; } if (l_url.port() == -1) @@ -63,8 +68,8 @@ void DirectConnectDialog::onConnectPressed() call_error(tr("Invalid server port.")); return; } - server_type l_server; - l_server.socket_type = to_connection_type[l_url.scheme()]; + ServerInfo l_server; + l_server.socket_type = SERVER_CONNECTION_TYPE_STRING_MAP[l_url.scheme()]; l_server.ip = l_url.host(); l_server.port = l_url.port(); l_server.name = "Direct Connection"; @@ -73,7 +78,7 @@ void DirectConnectDialog::onConnectPressed() ui_direct_connect_button->setEnabled(false); ui_direct_connection_status_lbl->setText("Connecting..."); ui_direct_connection_status_lbl->setStyleSheet("color : rgb(0,64,156)"); - connect_timeout.start(CONNECT_TIMEOUT); + m_connect_timeout.start(CONNECT_TIMEOUT); } void DirectConnectDialog::onServerConnected() diff --git a/src/widgets/direct_connect_dialog.h b/src/widgets/direct_connect_dialog.h index fc34f748..b2ac9be3 100644 --- a/src/widgets/direct_connect_dialog.h +++ b/src/widgets/direct_connect_dialog.h @@ -16,16 +16,17 @@ class DirectConnectDialog : public QDialog Q_OBJECT public: - DirectConnectDialog(NetworkManager *p_net_manager); - ~DirectConnectDialog() = default; - -private Q_SLOTS: - void onConnectPressed(); - void onServerConnected(); - void onConnectTimeout(); + DirectConnectDialog(NetworkManager *netManager, QWidget *parent = nullptr); private: + static const QString UI_FILE_PATH; + static const QRegularExpression SCHEME_PATTERN; + static const int CONNECT_TIMEOUT; + NetworkManager *net_manager; + QTimer m_connect_timeout; + + QWidget *ui_widget; QLineEdit *ui_direct_hostname_edit; @@ -33,11 +34,8 @@ private: QPushButton *ui_direct_connect_button; QPushButton *ui_direct_cancel_button; - QWidget *ui_widget; - QTimer connect_timeout; - - const int TCP_INDEX = 0; - const QRegularExpression SCHEME_PATTERN{"^\\w+://.+$"}; - const int CONNECT_TIMEOUT = 5 * 1000; - const QString DEFAULT_UI = "direct_connect_dialog.ui"; +private Q_SLOTS: + void onConnectPressed(); + void onServerConnected(); + void onConnectTimeout(); }; diff --git a/src/widgets/edit_server_dialog.cpp b/src/widgets/edit_server_dialog.cpp deleted file mode 100644 index a302f372..00000000 --- a/src/widgets/edit_server_dialog.cpp +++ /dev/null @@ -1,75 +0,0 @@ -#include "edit_server_dialog.h" - -#include "datatypes.h" -#include "gui_utils.h" -#include "options.h" - -#include <QFile> -#include <QUiLoader> -#include <QVBoxLayout> - -EditServerDialog::EditServerDialog(int index) - : index(index) // lol -{ - QUiLoader l_loader(this); - QFile l_uiFile(Options::getInstance().getUIAsset(DEFAULT_UI)); - - if (!l_uiFile.open(QFile::ReadOnly)) - { - qCritical() << "Unable to open file " << l_uiFile.fileName(); - return; - } - ui_widget = l_loader.load(&l_uiFile, this); - - auto l_layout = new QVBoxLayout(this); - l_layout->addWidget(ui_widget); - - FROM_UI(QLineEdit, server_display_name_edit); - FROM_UI(QLineEdit, server_hostname_edit); - FROM_UI(QSpinBox, server_port_box); - FROM_UI(QComboBox, server_protocol_box); - FROM_UI(QPlainTextEdit, server_description_edit); - FROM_UI(QDialogButtonBox, server_dialog_button); - connect(ui_server_dialog_button, &QDialogButtonBox::accepted, this, &::EditServerDialog::onSavePressed); - connect(ui_server_dialog_button, &QDialogButtonBox::rejected, this, &EditServerDialog::onCancelPressed); - - // We don't need you. - FROM_UI(QLabel, server_legacy_lbl); - FROM_UI(QLineEdit, server_legacy_edit); - FROM_UI(QPushButton, server_legacy_load_button); - - ui_server_legacy_lbl->setVisible(false); - ui_server_legacy_edit->setVisible(false); - ui_server_legacy_load_button->setVisible(false); - - loadEntry(); -} - -void EditServerDialog::loadEntry() -{ - server_type server = Options::getInstance().favorites().at(index); - ui_server_display_name_edit->setText(server.name); - ui_server_hostname_edit->setText(server.ip); - ui_server_port_box->setValue(server.port); - ui_server_description_edit->setPlainText(server.desc); - ui_server_protocol_box->setCurrentIndex(server.socket_type); -} - -void EditServerDialog::onSavePressed() -{ - server_type server; - server.name = ui_server_display_name_edit->text(); - server.ip = ui_server_hostname_edit->text(); - server.port = ui_server_port_box->value(); - server.desc = ui_server_description_edit->toPlainText(); - server.socket_type = ui_server_protocol_box->currentIndex() == TCP_INDEX ? TCP : WEBSOCKETS; - Options::getInstance().updateFavorite(server, index); - close(); - deleteLater(); -} - -void EditServerDialog::onCancelPressed() -{ - close(); - deleteLater(); -} diff --git a/src/widgets/edit_server_dialog.h b/src/widgets/edit_server_dialog.h deleted file mode 100644 index 628ea606..00000000 --- a/src/widgets/edit_server_dialog.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "interfaces/server_dialog.h" - -#include <QComboBox> -#include <QDialogButtonBox> -#include <QLabel> -#include <QLineEdit> -#include <QPlainTextEdit> -#include <QPushButton> -#include <QSpinBox> - -class EditServerDialog : public AttorneyOnline::UI::FavoriteServerDialog -{ - Q_OBJECT - -public: - EditServerDialog(int index); - ~EditServerDialog() = default; - -private: - QWidget *ui_widget; - - QLineEdit *ui_server_display_name_edit; - QLineEdit *ui_server_hostname_edit; - QSpinBox *ui_server_port_box; - QComboBox *ui_server_protocol_box; - QPlainTextEdit *ui_server_description_edit; - QDialogButtonBox *ui_server_dialog_button; - - // Legacy Server UI - QLabel *ui_server_legacy_lbl; - QLineEdit *ui_server_legacy_edit; - QPushButton *ui_server_legacy_load_button; - - int index; - void loadEntry(); - -private Q_SLOTS: - void onSavePressed() override; - void onCancelPressed() override; -}; diff --git a/src/widgets/server_editor_dialog.cpp b/src/widgets/server_editor_dialog.cpp new file mode 100644 index 00000000..102e9030 --- /dev/null +++ b/src/widgets/server_editor_dialog.cpp @@ -0,0 +1,93 @@ +#include "server_editor_dialog.h" + +#include "datatypes.h" +#include "gui_utils.h" +#include "options.h" + +#include <QFile> +#include <QUiLoader> +#include <QVBoxLayout> + +const QString ServerEditorDialog::UI_FILE_PATH = "favorite_server_dialog.ui"; + +ServerEditorDialog::ServerEditorDialog(QWidget *parent) + : QDialog(parent) +{ + QUiLoader loader(this); + QFile file(Options::getInstance().getUIAsset(UI_FILE_PATH)); + + if (!file.open(QFile::ReadOnly)) + { + qFatal("Unable to open file %s", qPrintable(file.fileName())); + return; + } + ui_body = loader.load(&file, this); + + auto layout = new QVBoxLayout(this); + layout->addWidget(ui_body); + + FROM_UI(QLineEdit, name); + FROM_UI(QLineEdit, hostname); + FROM_UI(QSpinBox, port); + FROM_UI(QComboBox, protocol); + FROM_UI(QPlainTextEdit, description); + FROM_UI(QDialogButtonBox, button_box); + + FROM_UI(QLineEdit, legacy_edit); + FROM_UI(QPushButton, parse_legacy); + + connect(ui_parse_legacy, &QPushButton::released, this, &ServerEditorDialog::parseLegacyEntry); + + connect(ui_button_box, &QDialogButtonBox::accepted, this, &ServerEditorDialog::accept); + connect(ui_button_box, &QDialogButtonBox::rejected, this, &ServerEditorDialog::reject); +} + +ServerInfo ServerEditorDialog::currentServerInfo() const +{ + ServerInfo server; + server.name = ui_name->text(); + server.ip = ui_hostname->text(); + server.port = ui_port->value(); + server.description = ui_description->toPlainText(); + server.socket_type = ServerConnectionType(ui_protocol->currentIndex()); + return server; +} + +void ServerEditorDialog::loadServerInfo(ServerInfo server) +{ + ui_name->setText(server.name); + ui_hostname->setText(server.ip); + ui_port->setValue(server.port); + ui_description->setPlainText(server.description); + ui_protocol->setCurrentIndex(server.socket_type); +} + +void ServerEditorDialog::parseLegacyEntry() +{ + QStringList entry = ui_legacy_edit->text().split(":"); + ServerInfo l_server_entry; + if (entry.isEmpty()) + { + qDebug() << "Legacy entry empty."; + return; + } + + int item_count = entry.size(); + if (item_count >= 3) + { + ui_hostname->setText(entry.at(0)); + ui_port->setValue(entry.at(1).toInt()); + ui_name->setText(entry.at(2)); + if (item_count >= 4) + { + if (entry.at(3) == "ws") + { + ui_protocol->setCurrentIndex(1); + } + else + { + ui_protocol->setCurrentIndex(0); + } + } + } +} diff --git a/src/widgets/server_editor_dialog.h b/src/widgets/server_editor_dialog.h new file mode 100644 index 00000000..1ceb3524 --- /dev/null +++ b/src/widgets/server_editor_dialog.h @@ -0,0 +1,43 @@ +#pragma once + +#include "datatypes.h" + +#include <QComboBox> +#include <QDialog> +#include <QDialogButtonBox> +#include <QLabel> +#include <QLineEdit> +#include <QPlainTextEdit> +#include <QPushButton> +#include <QSpinBox> + +class ServerEditorDialog : public QDialog +{ + Q_OBJECT + +public: + ServerEditorDialog(QWidget *parent = nullptr); + ServerEditorDialog(const ServerInfo &server, QWidget *parent = nullptr); + + ServerInfo currentServerInfo() const; + + void loadServerInfo(ServerInfo server); + +private: + static const QString UI_FILE_PATH; + + QWidget *ui_body; + + QLineEdit *ui_name; + QLineEdit *ui_hostname; + QSpinBox *ui_port; + QComboBox *ui_protocol; + QPlainTextEdit *ui_description; + QDialogButtonBox *ui_button_box; + + QLineEdit *ui_legacy_edit; + QPushButton *ui_parse_legacy; + +private Q_SLOTS: + void parseLegacyEntry(); +}; |
