diff --git a/CMakeLists.txt b/CMakeLists.txt index d6194a9..ba09819 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -66,13 +66,14 @@ add_executable(Attorney_Online src/discord_rich_presence.cpp src/discord_rich_presence.h src/emotes.cpp + src/eventfilters.cpp src/eventfilters.h src/evidence.cpp src/file_functions.cpp src/file_functions.h + src/gui_utils.h src/hardware_functions.cpp src/hardware_functions.h - src/interfaces/server_dialog.h src/lobby.cpp src/lobby.h src/main.cpp @@ -85,17 +86,13 @@ add_executable(Attorney_Online src/scrolltext.cpp src/scrolltext.h src/text_file_functions.cpp - src/gui_utils.h - src/widgets/add_server_dialog.cpp - src/widgets/add_server_dialog.h src/widgets/aooptionsdialog.cpp src/widgets/aooptionsdialog.h src/widgets/direct_connect_dialog.cpp src/widgets/direct_connect_dialog.h - src/widgets/edit_server_dialog.cpp - src/widgets/edit_server_dialog.h + src/widgets/server_editor_dialog.cpp + src/widgets/server_editor_dialog.h data.qrc - src/eventfilters.cpp ) set_target_properties(Attorney_Online PROPERTIES RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin") diff --git a/data/ui/favorite_server_dialog.ui b/data/ui/favorite_server_dialog.ui index a1d5f28..f0f60cb 100644 --- a/data/ui/favorite_server_dialog.ui +++ b/data/ui/favorite_server_dialog.ui @@ -23,17 +23,17 @@ - + Legacy Entry : - + - + Convert @@ -44,48 +44,48 @@ - + - Display Name: + Name: - + - + - Hostname : + Hostname: - + - + Port: - + 65535 - + - Protocol : + Protocol: - + TCP @@ -99,14 +99,14 @@ - + Description: - + 0 @@ -118,7 +118,7 @@ - + QFrame::Plain @@ -128,7 +128,7 @@ - + QDialogButtonBox::Close|QDialogButtonBox::Save diff --git a/src/aoapplication.h b/src/aoapplication.h index 419377f..1ff059b 100644 --- a/src/aoapplication.h +++ b/src/aoapplication.h @@ -128,8 +128,8 @@ public: /////////////////////////////////////////// - void set_server_list(QVector &servers) { server_list = servers; } - QVector &get_server_list() { return server_list; } + void set_server_list(QVector &servers) { server_list = servers; } + QVector &get_server_list() { return server_list; } // implementation in path_functions.cpp VPath get_theme_path(QString p_file, QString p_theme = QString()); @@ -359,7 +359,7 @@ private: const int MAJOR_VERSION = 11; const int MINOR_VERSION = 0; - QVector server_list; + QVector server_list; QHash asset_lookup_cache; QHash dir_listing_cache; QSet dir_listing_exist_cache; diff --git a/src/aobutton.cpp b/src/aobutton.cpp index 4fc50d6..07ea649 100644 --- a/src/aobutton.cpp +++ b/src/aobutton.cpp @@ -1,12 +1,10 @@ #include "aobutton.h" -#include "debug_functions.h" -#include "file_functions.h" #include "options.h" -AOButton::AOButton(AOApplication *p_ao_app, QWidget *parent) +AOButton::AOButton(AOApplication *ao_app, QWidget *parent) : QPushButton(parent) - , ao_app(p_ao_app) + , ao_app(ao_app) { m_movie = new QMovie(this); @@ -17,32 +15,61 @@ AOButton::AOButton(AOApplication *p_ao_app, QWidget *parent) } AOButton::~AOButton() -{} - -void AOButton::set_image(QString p_path, QString p_misc) { - m_movie->stop(); - QString p_image; - p_image = ao_app->get_image(p_path, Options::getInstance().theme(), Options::getInstance().subTheme(), ao_app->default_theme, p_misc, "", "", !Options::getInstance().animatedThemeEnabled()); - if (p_image.isEmpty()) + deleteMovie(); +} + +void AOButton::setImage(QString image_name) +{ + deleteMovie(); + + QString file_path = ao_app->get_image(image_name, Options::getInstance().theme(), Options::getInstance().subTheme(), ao_app->default_theme, QString(), QString(), QString(), !Options::getInstance().animatedThemeEnabled()); + if (file_path.isEmpty()) { - this->setIcon(QIcon()); - this->setIconSize(this->size()); - this->setStyleSheet(""); - return; - } - this->setText(""); - this->setStyleSheet("QPushButton { background-color: transparent; border: 0px }"); - m_movie->setFileName(p_image); - // We double-check if the user wants animated themes, so even if an animated image slipped through, - // we still set it static - if (Options::getInstance().animatedThemeEnabled() && m_movie->frameCount() > 1) - { - m_movie->start(); + setStyleSheet(QString()); + setIcon(QIcon()); } else { - this->setIcon(QPixmap(p_image).scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - this->setIconSize(this->size()); + setText(QString()); + setStyleSheet("QPushButton { background-color: transparent; border: 0px }"); + + if (Options::getInstance().animatedThemeEnabled()) + { + m_movie = new QMovie; + m_movie->setFileName(file_path); + + connect(m_movie, &QMovie::frameChanged, this, &AOButton::handleNextFrame); + + m_movie->start(); + } + else + { + updateIcon(QPixmap(file_path)); + } } } + +void AOButton::deleteMovie() +{ + if (m_movie) + { + disconnect(m_movie, &QMovie::frameChanged, this, &AOButton::handleNextFrame); + + m_movie->stop(); + m_movie->deleteLater(); + m_movie = nullptr; + } +} + +void AOButton::handleNextFrame() +{ + updateIcon(m_movie->currentPixmap()); +} + +void AOButton::updateIcon(QPixmap icon) +{ + const QSize current_size = size(); + setIcon(icon.scaled(current_size, Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + setIconSize(current_size); +} diff --git a/src/aobutton.h b/src/aobutton.h index 058d9e5..8104bdb 100644 --- a/src/aobutton.h +++ b/src/aobutton.h @@ -2,7 +2,6 @@ #include "aoapplication.h" -#include #include #include @@ -11,12 +10,20 @@ class AOButton : public QPushButton Q_OBJECT public: - AOButton(AOApplication *p_ao_app, QWidget *parent = nullptr); - ~AOButton(); + explicit AOButton(AOApplication *ao_app, QWidget *parent = nullptr); + virtual ~AOButton(); - void set_image(QString p_image, QString p_misc = QString()); + void setImage(QString image_name); private: AOApplication *ao_app; - QMovie *m_movie; + + QMovie *m_movie = nullptr; + + void deleteMovie(); + +private Q_SLOTS: + void handleNextFrame(); + + void updateIcon(QPixmap icon); }; diff --git a/src/aocharbutton.cpp b/src/aocharbutton.cpp index cab7fdd..d446cca 100644 --- a/src/aocharbutton.cpp +++ b/src/aocharbutton.cpp @@ -2,46 +2,31 @@ #include "file_functions.h" -AOCharButton::AOCharButton(AOApplication *p_ao_app, int x_pos, int y_pos, bool is_taken, QWidget *parent) +AOCharButton::AOCharButton(AOApplication *ao_app, QWidget *parent) : QPushButton(parent) - , ao_app(p_ao_app) - , m_taken(is_taken) + , ao_app(ao_app) { int size = 60 * Options::getInstance().themeScalingFactor(); int selector_size = 62 * Options::getInstance().themeScalingFactor(); - this->resize(size, size); - this->move(x_pos, y_pos); + resize(size, size); ui_taken = new AOImage(ao_app, this); - ui_taken->resize(size, size); - ui_taken->set_image("char_taken"); ui_taken->setAttribute(Qt::WA_TransparentForMouseEvents); + ui_taken->resize(size, size); + ui_taken->setImage("char_taken"); ui_taken->hide(); ui_selector = new AOImage(ao_app, parent); - ui_selector->resize(selector_size, selector_size); - int offset = Options::getInstance().themeScalingFactor(); - ui_selector->move(x_pos - offset, y_pos - offset); - ui_selector->set_image("char_selector"); ui_selector->setAttribute(Qt::WA_TransparentForMouseEvents); + ui_selector->resize(selector_size, selector_size); + ui_selector->setImage("char_selector"); ui_selector->hide(); } -void AOCharButton::reset() +void AOCharButton::setTaken(bool enabled) { - ui_taken->hide(); - ui_selector->hide(); -} - -void AOCharButton::set_taken(bool is_taken) -{ - m_taken = is_taken; -} - -void AOCharButton::apply_taken_image() -{ - if (m_taken) + if (enabled) { ui_taken->move(0, 0); ui_taken->show(); @@ -52,45 +37,47 @@ void AOCharButton::apply_taken_image() } } -void AOCharButton::set_image(QString p_character) +void AOCharButton::setCharacter(QString character) { - QString image_path = ao_app->get_image_suffix(ao_app->get_character_path(p_character, "char_icon"), true); + QString image_path = ao_app->get_image_suffix(ao_app->get_character_path(character, "char_icon"), true); - this->setText(""); + setText(QString()); if (file_exists(image_path)) { - this->setStyleSheet("QPushButton { border-image: url(\"" + image_path + - "\") 0 0 0 0 stretch stretch; }" - "QToolTip { background-image: url(); color: #000000; " - "background-color: #ffffff; border: 0px; }"); + setStyleSheet("QPushButton { border-image: url(\"" + image_path + + "\") 0 0 0 0 stretch stretch; }" + "QToolTip { background-image: url(); color: #000000; " + "background-color: #ffffff; border: 0px; }"); } else { - this->setStyleSheet("QPushButton { border-image: url(); }" - "QToolTip { background-image: url(); color: #000000; " - "background-color: #ffffff; border: 0px; }"); - this->setText(p_character); + setStyleSheet("QPushButton { border-image: url(); }" + "QToolTip { background-image: url(); color: #000000; " + "background-color: #ffffff; border: 0px; }"); + setText(character); } } #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) -void AOCharButton::enterEvent(QEvent *e) +void AOCharButton::enterEvent(QEvent *event) #else -void AOCharButton::enterEvent(QEnterEvent *e) +void AOCharButton::enterEvent(QEnterEvent *event) #endif { int offset = Options::getInstance().themeScalingFactor(); - ui_selector->move(this->x() - offset, this->y() - offset); + ui_selector->move(x() - offset, y() - offset); ui_selector->raise(); ui_selector->show(); setFlat(false); - QPushButton::enterEvent(e); + + QPushButton::enterEvent(event); } -void AOCharButton::leaveEvent(QEvent *e) +void AOCharButton::leaveEvent(QEvent *event) { ui_selector->hide(); - QPushButton::leaveEvent(e); + + QPushButton::leaveEvent(event); } diff --git a/src/aocharbutton.h b/src/aocharbutton.h index 54117f4..ba61897 100644 --- a/src/aocharbutton.h +++ b/src/aocharbutton.h @@ -14,23 +14,19 @@ class AOCharButton : public QPushButton Q_OBJECT public: - AOCharButton(AOApplication *p_ao_app, int x_pos, int y_pos, bool is_taken, QWidget *parent); + AOCharButton(AOApplication *ao_app, QWidget *parent); - void refresh(); - void reset(); - void set_taken(bool is_taken); + void setCharacter(QString character); - void apply_taken_image(); - - void set_image(QString p_character); + void setTaken(bool enabled); protected: #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) - void enterEvent(QEvent *e) override; + void enterEvent(QEvent *event) override; #else - void enterEvent(QEnterEvent *e) override; + void enterEvent(QEnterEvent *event) override; #endif - void leaveEvent(QEvent *e) override; + void leaveEvent(QEvent *event) override; private: AOApplication *ao_app; diff --git a/src/aoemotebutton.cpp b/src/aoemotebutton.cpp index 32e50ff..028c265 100644 --- a/src/aoemotebutton.cpp +++ b/src/aoemotebutton.cpp @@ -1,22 +1,25 @@ #include "aoemotebutton.h" + #include "file_functions.h" -AOEmoteButton::AOEmoteButton(AOApplication *p_ao_app, int p_x, int p_y, int p_w, int p_h, QWidget *p_parent) - : QPushButton(p_parent) - , ao_app(p_ao_app) +#include + +AOEmoteButton::AOEmoteButton(int id, int width, int height, AOApplication *ao_app, QWidget *parent) + : QPushButton(parent) + , ao_app(ao_app) + , m_id(id) { - this->move(p_x, p_y); - this->resize(p_w, p_h); + resize(width, height); ui_selected = new QLabel(this); - ui_selected->resize(size()); ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents); + ui_selected->resize(width, height); ui_selected->hide(); - connect(this, &AOEmoteButton::clicked, this, &AOEmoteButton::on_clicked); + connect(this, &AOEmoteButton::clicked, this, [this] { Q_EMIT emoteClicked(m_id); }); } -void AOEmoteButton::set_selected_image(QString p_image) +void AOEmoteButton::setSelectedImage(QString p_image) { if (file_exists(p_image)) { @@ -28,50 +31,24 @@ void AOEmoteButton::set_selected_image(QString p_image) } } -void AOEmoteButton::set_id(int p_id) -{ - m_id = p_id; -} - -int AOEmoteButton::get_id() +int AOEmoteButton::id() { return m_id; } -void AOEmoteButton::set_image(QString p_image, QString p_emote_comment) +void AOEmoteButton::setImage(QString character, int emoteId, bool enabled) { - if (file_exists(p_image)) - { - this->setText(""); - this->setStyleSheet("QPushButton { border: none; }" - "QToolTip { color: #000000; background-color: #ffffff; border: 0px; }"); - this->setIcon(QPixmap(p_image).scaled(this->size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); - this->setIconSize(this->size()); - } - else - { - this->setText(p_emote_comment); - this->setStyleSheet("QPushButton { border-image: url(); }" - "QToolTip { background-image: url(); color: #000000; " - "background-color: #ffffff; border: 0px; }"); - this->setIcon(QIcon()); - this->setIconSize(this->size()); - } -} + QString emotion_number = QString::number(emoteId + 1); -void AOEmoteButton::set_char_image(QString p_char, int p_emote, bool on) -{ - QString emotion_number = QString::number(p_emote + 1); - QStringList suffixes{"_off", "_on"}; QStringList suffixedPaths; - for (const QString &suffix : suffixes) + static const QStringList SUFFIX_LIST{"_off", "_on"}; + for (const QString &suffix : SUFFIX_LIST) { - suffixedPaths.append(ao_app->get_image_suffix(ao_app->get_character_path(p_char, "emotions/button" + emotion_number + suffix))); + suffixedPaths.append(ao_app->get_image_suffix(ao_app->get_character_path(character, "emotions/button" + emotion_number + suffix))); } - QString image = suffixedPaths[static_cast(on)]; - QString emoteComment = ao_app->get_emote_comment(p_char, p_emote); - if (on && !file_exists(suffixedPaths[1])) + QString image = suffixedPaths[static_cast(enabled)]; + if (enabled && !file_exists(suffixedPaths[1])) { ui_selected->show(); image = suffixedPaths[0]; @@ -81,10 +58,22 @@ void AOEmoteButton::set_char_image(QString p_char, int p_emote, bool on) ui_selected->hide(); } - set_image(image, emoteComment); -} - -void AOEmoteButton::on_clicked() -{ - Q_EMIT emote_clicked(m_id); + if (file_exists(image)) + { + setText(QString()); + setStyleSheet("QPushButton { border: none; }" + "QToolTip { color: #000000; background-color: #ffffff; border: 0px; }"); + setIcon(QPixmap(image).scaled(size(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation)); + setIconSize(size()); + } + else + { + QString emote_comment = ao_app->get_emote_comment(character, emoteId); + setText(emote_comment); + setStyleSheet("QPushButton { border-image: url(); }" + "QToolTip { background-image: url(); color: #000000; " + "background-color: #ffffff; border: 0px; }"); + setIcon(QIcon()); + setIconSize(size()); + } } diff --git a/src/aoemotebutton.h b/src/aoemotebutton.h index 9314949..3c31631 100644 --- a/src/aoemotebutton.h +++ b/src/aoemotebutton.h @@ -1,9 +1,8 @@ #pragma once #include "aoapplication.h" -#include + #include -#include #include class AOEmoteButton : public QPushButton @@ -11,18 +10,16 @@ class AOEmoteButton : public QPushButton Q_OBJECT public: - AOEmoteButton(AOApplication *p_ao_app, int p_x, int p_y, int p_w, int p_h, QWidget *p_parent); + AOEmoteButton(int id, int width, int height, AOApplication *ao_app, QWidget *parent = nullptr); - void set_image(QString p_image, QString p_emote_comment); - void set_char_image(QString p_char, int p_emote, bool on); + int id(); - void set_selected_image(QString p_image); + void setImage(QString character, int emoteId, bool enabled); - void set_id(int p_id); - int get_id(); + void setSelectedImage(QString p_image); Q_SIGNALS: - void emote_clicked(int p_id); + void emoteClicked(int p_id); private: AOApplication *ao_app; @@ -30,7 +27,4 @@ private: int m_id = 0; QLabel *ui_selected = nullptr; - -private Q_SLOTS: - void on_clicked(); }; diff --git a/src/aoevidencebutton.cpp b/src/aoevidencebutton.cpp index b026c13..31163ca 100644 --- a/src/aoevidencebutton.cpp +++ b/src/aoevidencebutton.cpp @@ -2,61 +2,58 @@ #include "file_functions.h" -AOEvidenceButton::AOEvidenceButton(AOApplication *p_ao_app, int p_x, int p_y, int p_w, int p_h, QWidget *p_parent) - : QPushButton(p_parent) - , ao_app(p_ao_app) +AOEvidenceButton::AOEvidenceButton(int id, int width, int height, AOApplication *ao_app, QWidget *parent) + : QPushButton(parent) + , ao_app(ao_app) + , m_id(id) { + resize(width, height); + ui_selected = new AOImage(ao_app, this); - ui_selected->resize(p_w, p_h); - // ui_selected->move(p_x, p_y); - ui_selected->set_image("evidence_selected"); + ui_selected->resize(width, height); + ui_selected->setImage("evidence_selected"); ui_selected->setAttribute(Qt::WA_TransparentForMouseEvents); ui_selected->hide(); ui_selector = new AOImage(ao_app, this); - ui_selector->resize(p_w, p_h); - // ui_selector->move(p_x - 1, p_y - 1); - ui_selector->set_image("evidence_selector"); + ui_selector->resize(width, height); + ui_selector->setImage("evidence_selector"); ui_selector->setAttribute(Qt::WA_TransparentForMouseEvents); ui_selector->hide(); - this->move(p_x, p_y); - this->resize(p_w, p_h); - // this->setAcceptDrops(true); - connect(this, &AOEvidenceButton::clicked, this, &AOEvidenceButton::on_clicked); } -void AOEvidenceButton::set_image(QString p_image) +void AOEvidenceButton::setImage(QString fileName) { - QString image_path = ao_app->get_real_path(ao_app->get_evidence_path(p_image)); - if (file_exists(p_image)) + QString image_path = ao_app->get_real_path(ao_app->get_evidence_path(fileName)); + if (file_exists(fileName)) { - this->setText(""); - this->setStyleSheet("QPushButton { border-image: url(\"" + p_image + - "\") 0 0 0 0 stretch stretch; }" - "QToolTip { color: #000000; background-color: #ffffff; border: 0px; }"); + setText(""); + setStyleSheet("QPushButton { border-image: url(\"" + fileName + + "\") 0 0 0 0 stretch stretch; }" + "QToolTip { color: #000000; background-color: #ffffff; border: 0px; }"); } else if (file_exists(image_path)) { - this->setText(""); - this->setStyleSheet("QPushButton { border-image: url(\"" + image_path + - "\") 0 0 0 0 stretch stretch; }" - "QToolTip { color: #000000; background-color: #ffffff; border: 0px; }"); + setText(""); + setStyleSheet("QPushButton { border-image: url(\"" + image_path + + "\") 0 0 0 0 stretch stretch; }" + "QToolTip { color: #000000; background-color: #ffffff; border: 0px; }"); } else { - this->setText(p_image); - this->setStyleSheet("QPushButton { border-image: url(); }" - "QToolTip { background-image: url(); color: #000000; " - "background-color: #ffffff; border: 0px; }"); + setText(fileName); + setStyleSheet("QPushButton { border-image: url(); }" + "QToolTip { background-image: url(); color: #000000; " + "background-color: #ffffff; border: 0px; }"); } } -void AOEvidenceButton::set_theme_image(QString p_image) +void AOEvidenceButton::setThemeImage(QString fileName) { - QString theme_image_path = ao_app->get_real_path(ao_app->get_theme_path(p_image)); - QString default_image_path = ao_app->get_real_path(ao_app->get_theme_path(p_image, ao_app->default_theme)); + QString theme_image_path = ao_app->get_real_path(ao_app->get_theme_path(fileName)); + QString default_image_path = ao_app->get_real_path(ao_app->get_theme_path(fileName, ao_app->default_theme)); QString final_image_path; @@ -69,10 +66,10 @@ void AOEvidenceButton::set_theme_image(QString p_image) final_image_path = default_image_path; } - this->set_image(final_image_path); + setImage(final_image_path); } -void AOEvidenceButton::set_selected(bool p_selected) +void AOEvidenceButton::setSelected(bool p_selected) { if (p_selected) { @@ -86,31 +83,15 @@ void AOEvidenceButton::set_selected(bool p_selected) void AOEvidenceButton::on_clicked() { - Q_EMIT evidence_clicked(m_id); + Q_EMIT evidenceClicked(m_id); } void AOEvidenceButton::mouseDoubleClickEvent(QMouseEvent *e) { QPushButton::mouseDoubleClickEvent(e); - Q_EMIT evidence_double_clicked(m_id); + Q_EMIT evidenceDoubleClicked(m_id); } -/* -void AOEvidenceButton::dragLeaveEvent(QMouseEvent *e) -{ - //QWidget::dragLeaveEvent(e); - - qDebug() << "drag leave event"; -} - -void AOEvidenceButton::dragEnterEvent(QMouseEvent *e) -{ - //QWidget::dragEnterEvent(e); - - qDebug() << "drag enter event"; -} -*/ - #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) void AOEvidenceButton::enterEvent(QEvent *e) #else @@ -119,7 +100,7 @@ void AOEvidenceButton::enterEvent(QEnterEvent *e) { ui_selector->show(); - Q_EMIT on_hover(m_id, true); + Q_EMIT mouseoverUpdated(m_id, true); setFlat(false); QPushButton::enterEvent(e); @@ -129,6 +110,6 @@ void AOEvidenceButton::leaveEvent(QEvent *e) { ui_selector->hide(); - Q_EMIT on_hover(m_id, false); + Q_EMIT mouseoverUpdated(m_id, false); QPushButton::leaveEvent(e); } diff --git a/src/aoevidencebutton.h b/src/aoevidencebutton.h index adaaa17..9830384 100644 --- a/src/aoevidencebutton.h +++ b/src/aoevidencebutton.h @@ -13,18 +13,19 @@ class AOEvidenceButton : public QPushButton Q_OBJECT public: - AOEvidenceButton(AOApplication *p_ao_app, int p_x, int p_y, int p_w, int p_h, QWidget *p_parent = nullptr); + AOEvidenceButton(int id, int width, int height, AOApplication *ao_app, QWidget *parent = nullptr); - void set_image(QString p_image); - void set_theme_image(QString p_image); - void set_id(int p_id) { m_id = p_id; } + void setImage(QString fileName); - void set_selected(bool p_selected); + void setThemeImage(QString fileName); + + void setSelected(bool enabled); Q_SIGNALS: - void evidence_clicked(int p_id); - void evidence_double_clicked(int p_id); - void on_hover(int p_id, bool p_state); + void evidenceClicked(int id); + void evidenceDoubleClicked(int id); + + void mouseoverUpdated(int id, bool state); protected: #if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) @@ -33,6 +34,7 @@ protected: void enterEvent(QEnterEvent *e) override; #endif void leaveEvent(QEvent *e) override; + void mouseDoubleClickEvent(QMouseEvent *e) override; private: diff --git a/src/aoimage.cpp b/src/aoimage.cpp index 85f127e..062efba 100644 --- a/src/aoimage.cpp +++ b/src/aoimage.cpp @@ -5,26 +5,23 @@ #include -AOImage::AOImage(AOApplication *p_ao_app, QWidget *parent) +AOImage::AOImage(AOApplication *ao_app, QWidget *parent) : QLabel(parent) - , ao_app(p_ao_app) + , ao_app(ao_app) {} -AOImage::~AOImage() -{} - -QString AOImage::file_name() +QString AOImage::image() { return m_file_name; } -bool AOImage::set_image(QString p_image, QString p_misc) +bool AOImage::setImage(QString fileName, QString miscellaneous) { - QString p_image_resolved = ao_app->get_image(p_image, Options::getInstance().theme(), Options::getInstance().subTheme(), ao_app->default_theme, p_misc, "", "", false); + QString p_image_resolved = ao_app->get_image(fileName, Options::getInstance().theme(), Options::getInstance().subTheme(), ao_app->default_theme, miscellaneous, "", "", false); if (!file_exists(p_image_resolved)) { - qWarning() << "could not find image" << p_image; + qWarning() << "could not find image" << fileName; return false; } @@ -35,3 +32,8 @@ bool AOImage::set_image(QString p_image, QString p_misc) return true; } + +bool AOImage::setImage(QString fileName) +{ + return setImage(fileName, QString()); +} diff --git a/src/aoimage.h b/src/aoimage.h index 5ab92e7..5b1fd68 100644 --- a/src/aoimage.h +++ b/src/aoimage.h @@ -13,12 +13,12 @@ class AOImage : public QLabel Q_OBJECT public: - AOImage(AOApplication *p_ao_app, QWidget *parent = nullptr); - AOImage(AOApplication *p_ao_app, bool make_static, QWidget *parent = nullptr); - ~AOImage(); + AOImage(AOApplication *ao_app, QWidget *parent = nullptr); - QString file_name(); - bool set_image(QString p_image, QString p_misc = QString()); + QString image(); + + bool setImage(QString fileName, QString miscellaneous); + bool setImage(QString fileName); private: AOApplication *ao_app; diff --git a/src/aopacket.cpp b/src/aopacket.cpp index 663edc5..705bc6a 100644 --- a/src/aopacket.cpp +++ b/src/aopacket.cpp @@ -19,17 +19,17 @@ AOPacket::AOPacket(QString header, QStringList content) , m_content(content) {} -QString AOPacket::get_header() +QString AOPacket::header() { return m_header; } -QStringList &AOPacket::get_content() +QStringList &AOPacket::content() { return m_content; } -QString AOPacket::to_string(bool ensureEncoded) +QString AOPacket::toString(bool ensureEncoded) { QString message = m_header; if (!m_content.isEmpty()) diff --git a/src/aopacket.h b/src/aopacket.h index df7f09c..11b1dfd 100644 --- a/src/aopacket.h +++ b/src/aopacket.h @@ -12,9 +12,10 @@ public: AOPacket(QString header); AOPacket(QString header, QStringList content); - QString get_header(); - QStringList &get_content(); - QString to_string(bool ensureEncoded = false); + QString header(); + QStringList &content(); + + QString toString(bool ensureEncoded = false); private: QString m_header; diff --git a/src/charselect.cpp b/src/charselect.cpp index 57b4e76..4b62cb1 100644 --- a/src/charselect.cpp +++ b/src/charselect.cpp @@ -83,7 +83,7 @@ void Courtroom::set_char_select() this->setFixedSize(f_charselect.width, f_charselect.height); } ui_char_select_background->resize(f_charselect.width, f_charselect.height); - ui_char_select_background->set_image("charselect_background"); + ui_char_select_background->setImage("charselect_background"); ui_char_search->setFocus(); set_size_and_pos(ui_char_search, "char_search"); @@ -118,7 +118,6 @@ void Courtroom::set_char_select_page() for (AOCharButton *i_button : qAsConst(ui_char_button_list)) { - i_button->reset(); i_button->hide(); i_button->move(0, 0); } @@ -265,7 +264,6 @@ void Courtroom::put_button_in_place(int starting, int chars_on_this_page) ui_char_button_list_filtered.at(n)->move(x_pos, y_pos); ui_char_button_list_filtered.at(n)->show(); - ui_char_button_list_filtered.at(n)->apply_taken_image(); ++x_mod_count; @@ -294,22 +292,24 @@ void Courtroom::character_loading_finished() // First, we'll make all the character buttons in the very beginning. // We also hide them all, so they can't be accidentally clicked. // Later on, we'll be revealing buttons as we need them. - for (int n = 0; n < char_list.size(); n++) + for (int i = 0; i < char_list.size(); i++) { - AOCharButton *char_button = new AOCharButton(ao_app, 0, 0, char_list.at(n).taken, ui_char_buttons); + const CharacterSlot &character = char_list.at(i); + + AOCharButton *char_button = new AOCharButton(ao_app, ui_char_buttons); char_button->setContextMenuPolicy(Qt::CustomContextMenu); - char_button->reset(); char_button->hide(); - char_button->set_image(char_list.at(n).name); - char_button->setToolTip(char_list.at(n).name); + char_button->setCharacter(character.name); + char_button->setTaken(character.taken); + char_button->setToolTip(character.name); ui_char_button_list.append(char_button); - QString char_category = ao_app->get_category(char_list.at(n).name); + QString char_category = ao_app->get_category(character.name); QList matching_list = ui_char_list->findItems(char_category, Qt::MatchFixedString, 0); // create the character tree item QTreeWidgetItem *treeItem = new QTreeWidgetItem(); - treeItem->setText(0, char_list.at(n).name); - treeItem->setIcon(0, QIcon(ao_app->get_image_suffix(ao_app->get_character_path(char_list.at(n).name, "char_icon"), true))); - treeItem->setText(1, QString::number(n)); + treeItem->setText(0, character.name); + treeItem->setIcon(0, QIcon(ao_app->get_image_suffix(ao_app->get_character_path(character.name, "char_icon"), true))); + treeItem->setText(1, QString::number(i)); // category logic QTreeWidgetItem *category; if (char_category == "") // no category @@ -333,7 +333,7 @@ void Courtroom::character_loading_finished() ui_char_list->sortItems(0, Qt::AscendingOrder); - connect(char_button, &AOCharButton::clicked, this, [this, n]() { this->char_clicked(n); }); + connect(char_button, &AOCharButton::clicked, this, [this, i]() { this->char_clicked(i); }); connect(char_button, &AOCharButton::customContextMenuRequested, this, &Courtroom::on_char_button_context_menu_requested); // This part here serves as a way of showing to the player that the game is @@ -374,9 +374,8 @@ void Courtroom::filter_character_list() // We only really need to update the fact that a character is taken // for the buttons that actually appear. // You'd also update the passwordedness and etc. here later. - current_char->reset(); current_char_list_item->setHidden(false); - current_char->set_taken(char_list.at(i).taken); + current_char->setTaken(char_list.at(i).taken); current_char_list_item->setText(0, char_list.at(i).name); // reset disabled current_char_list_item->setDisabled(false); diff --git a/src/chatlogpiece.cpp b/src/chatlogpiece.cpp index 662dc0d..d8ef294 100644 --- a/src/chatlogpiece.cpp +++ b/src/chatlogpiece.cpp @@ -1,60 +1,33 @@ #include "chatlogpiece.h" -ChatLogPiece::ChatLogPiece() -{ - name = tr("UNKNOWN"); - showname = tr("UNKNOWN"); - message = tr("UNKNOWN"); - color = 0; - datetime = QDateTime::currentDateTimeUtc(); -} +#include -ChatLogPiece::ChatLogPiece(QString p_name, QString p_showname, QString p_message, QString p_action, int p_color, bool p_selfname) +QString ChatLogPiece::toString() { - name = p_name; - showname = p_showname; - message = p_message; - action = p_action; - color = p_color; - selfname = p_selfname; - datetime = QDateTime::currentDateTimeUtc(); -} + auto maybe_unknown = [](QString str) -> QString { + if (str.isEmpty()) + { + return tr("UNKNOWN"); + } + else + { + return str; + } + }; -ChatLogPiece::ChatLogPiece(QString p_name, QString p_showname, QString p_message, QString p_action, int p_color, bool p_selfname, QDateTime p_datetime) -{ - name = p_name; - showname = p_showname; - message = p_message; - action = p_action; - color = p_color; - selfname = p_selfname; - datetime = p_datetime.toUTC(); -} + QString details = QString("[%1] %2").arg(timestamp.toString(), maybe_unknown(character_name)); -QString ChatLogPiece::get_datetime_as_string() -{ - return datetime.toString(); -} - -QString ChatLogPiece::get_full() -{ - QString full = "["; - - full.append(get_datetime_as_string()); - full.append("] "); - full.append(showname); - if (showname != name) + if (character_name != character) { - full.append(" ("); - full.append(name); - full.append(")"); + details += " (" % maybe_unknown(character) % ")"; } + if (!action.isEmpty()) { - full.append(" " + action); + details += " " % action; } - full.append(": "); - full.append(message); - return full; + details += ": " % maybe_unknown(message); + + return details; } diff --git a/src/chatlogpiece.h b/src/chatlogpiece.h index 3750ff9..d6a0033 100644 --- a/src/chatlogpiece.h +++ b/src/chatlogpiece.h @@ -1,26 +1,21 @@ #pragma once +#include #include #include -#include class ChatLogPiece { - Q_DECLARE_TR_FUNCTIONS(chatlogpiece) + Q_DECLARE_TR_FUNCTIONS(ChatLogPiece) public: - ChatLogPiece(); - ChatLogPiece(QString p_name, QString p_showname, QString p_message, QString p_action, int color, bool selfname); - ChatLogPiece(QString p_name, QString p_showname, QString p_message, QString p_action, int color, bool selfname, QDateTime p_datetime); - - QString name; - QString showname; + QString character; + QString character_name; QString message; QString action; - bool selfname = false; - QDateTime datetime; + QDateTime timestamp; + bool local_player = false; int color = 0; - QString get_datetime_as_string(); - QString get_full(); + QString toString(); }; diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 7df942b..215bbb8 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -563,7 +563,7 @@ void Courtroom::update_audio_volume() blip_player->set_volume(ui_blip_slider->value() * remaining_percent); } -void Courtroom::append_char(char_type p_char) +void Courtroom::append_char(CharacterSlot p_char) { char_list.append(p_char); } @@ -671,7 +671,7 @@ void Courtroom::set_courtroom_size() } ui_background->move(0, 0); ui_background->resize(m_courtroom_width, m_courtroom_height); - ui_background->set_image("courtroombackground"); + ui_background->setImage("courtroombackground"); } void Courtroom::set_mute_list() @@ -686,7 +686,7 @@ void Courtroom::set_mute_list() QStringList sorted_mute_list; - for (const char_type &i_char : qAsConst(char_list)) + for (const CharacterSlot &i_char : qAsConst(char_list)) { sorted_mute_list.append(i_char.name); } @@ -704,7 +704,7 @@ void Courtroom::set_pair_list() { QStringList sorted_pair_list; - for (const char_type &i_char : qAsConst(char_list)) + for (const CharacterSlot &i_char : qAsConst(char_list)) { sorted_pair_list.append(i_char.name); } @@ -836,7 +836,7 @@ void Courtroom::set_widgets() ui_pair_order_dropdown->setToolTip(tr("Change the order of appearance for your character.")); set_size_and_pos(ui_pair_button, "pair_button"); - ui_pair_button->set_image("pair_button"); + ui_pair_button->setImage("pair_button"); ui_pair_button->setToolTip(tr("Display the list of characters to pair with.")); set_size_and_pos(ui_area_list, "music_list"); @@ -887,7 +887,7 @@ void Courtroom::set_widgets() ui_vp_sticker->combo_resize(ui_viewport->width(), ui_viewport->height()); ui_muted->resize(ui_ic_chat_message->width(), ui_ic_chat_message->height()); - ui_muted->set_image("muted"); + ui_muted->setImage("muted"); ui_muted->setToolTip(tr("Oops, you're muted!")); set_size_and_pos(ui_ooc_chat_message, "ooc_chat_message"); @@ -907,7 +907,7 @@ void Courtroom::set_widgets() set_size_and_pos(ui_pos_remove, "pos_remove"); ui_pos_remove->setText("X"); - ui_pos_remove->set_image("evidencex"); + ui_pos_remove->setImage("evidencex"); ui_pos_remove->setToolTip(tr("Reset your character's supplementary background to its default.")); if (current_side == "") { @@ -928,7 +928,7 @@ void Courtroom::set_widgets() set_size_and_pos(ui_iniswap_remove, "iniswap_remove"); ui_iniswap_remove->setText("X"); - ui_iniswap_remove->set_image("evidencex"); + ui_iniswap_remove->setImage("evidencex"); ui_iniswap_remove->setToolTip(tr("Remove the currently selected iniswap from the list and return to " "the original character folder.")); ui_iniswap_remove->hide(); @@ -943,7 +943,7 @@ void Courtroom::set_widgets() set_size_and_pos(ui_sfx_remove, "sfx_remove"); ui_sfx_remove->setText("X"); - ui_sfx_remove->set_image("evidencex"); + ui_sfx_remove->setImage("evidencex"); ui_sfx_remove->setToolTip(tr("Remove the currently selected sound effect.")); ui_sfx_remove->hide(); @@ -964,10 +964,10 @@ void Courtroom::set_widgets() ui_effects_dropdown->setIconSize(QSize(p_point.x(), p_point.y())); set_size_and_pos(ui_defense_bar, "defense_bar"); - ui_defense_bar->set_image("defensebar" + QString::number(defense_bar_state)); + ui_defense_bar->setImage("defensebar" + QString::number(defense_bar_state)); set_size_and_pos(ui_prosecution_bar, "prosecution_bar"); - ui_prosecution_bar->set_image("prosecutionbar" + QString::number(prosecution_bar_state)); + ui_prosecution_bar->setImage("prosecutionbar" + QString::number(prosecution_bar_state)); set_size_and_pos(ui_music_label, "music_label"); ui_music_label->setText(tr("Music")); @@ -980,70 +980,70 @@ void Courtroom::set_widgets() ui_hold_it->setText(tr("Hold It!")); ui_hold_it->setToolTip(tr("When this is turned on, your next in-character " "message will be a shout!")); - ui_hold_it->set_image("holdit"); + ui_hold_it->setImage("holdit"); set_size_and_pos(ui_objection, "objection"); ui_objection->setText(tr("Objection!")); ui_objection->setToolTip(tr("When this is turned on, your next in-character " "message will be a shout!")); - ui_objection->set_image("objection"); + ui_objection->setImage("objection"); set_size_and_pos(ui_take_that, "take_that"); ui_take_that->setText(tr("Take That!")); ui_take_that->setToolTip(tr("When this is turned on, your next in-character " "message will be a shout!")); - ui_take_that->set_image("takethat"); + ui_take_that->setImage("takethat"); set_size_and_pos(ui_ooc_toggle, "ooc_toggle"); ui_ooc_toggle->setText(tr("Server")); ui_ooc_toggle->setToolTip(tr("Toggle between server chat and global AO2 chat.")); set_size_and_pos(ui_witness_testimony, "witness_testimony"); - ui_witness_testimony->set_image("witnesstestimony"); + ui_witness_testimony->setImage("witnesstestimony"); ui_witness_testimony->setToolTip(tr("This will display the animation in the " "viewport as soon as it is pressed.")); set_size_and_pos(ui_cross_examination, "cross_examination"); - ui_cross_examination->set_image("crossexamination"); + ui_cross_examination->setImage("crossexamination"); ui_cross_examination->setToolTip(tr("This will display the animation in the " "viewport as soon as it is pressed.")); set_size_and_pos(ui_guilty, "guilty"); ui_guilty->setText(tr("Guilty!")); - ui_guilty->set_image("guilty"); + ui_guilty->setImage("guilty"); ui_guilty->setToolTip(tr("This will display the animation in the viewport as " "soon as it is pressed.")); set_size_and_pos(ui_not_guilty, "not_guilty"); - ui_not_guilty->set_image("notguilty"); + ui_not_guilty->setImage("notguilty"); ui_not_guilty->setToolTip(tr("This will display the animation in the " "viewport as soon as it is pressed.")); set_size_and_pos(ui_change_character, "change_character"); ui_change_character->setText(tr("Change character")); - ui_change_character->set_image("change_character"); + ui_change_character->setImage("change_character"); ui_change_character->setToolTip(tr("Bring up the Character Select Screen and change your character.")); set_size_and_pos(ui_reload_theme, "reload_theme"); ui_reload_theme->setText(tr("Reload theme")); - ui_reload_theme->set_image("reload_theme"); + ui_reload_theme->setImage("reload_theme"); ui_reload_theme->setToolTip(tr("Refresh the theme and update all of the ui elements to match.")); set_size_and_pos(ui_call_mod, "call_mod"); ui_call_mod->setText(tr("Call mod")); - ui_call_mod->set_image("call_mod"); + ui_call_mod->setImage("call_mod"); ui_call_mod->setToolTip(tr("Request the attention of the current server's moderator.")); set_size_and_pos(ui_settings, "settings"); ui_settings->setText(tr("Settings")); - ui_settings->set_image("courtroom_settings"); + ui_settings->setImage("courtroom_settings"); if (ui_settings->icon().isNull()) { - ui_settings->set_image("settings"); // pre-2.10 filename + ui_settings->setImage("settings"); // pre-2.10 filename } ui_settings->setToolTip(tr("Allows you to change various aspects of the client.")); set_size_and_pos(ui_switch_area_music, "switch_area_music"); ui_switch_area_music->setText(tr("A/M")); - ui_switch_area_music->set_image("switch_area_music"); + ui_switch_area_music->setImage("switch_area_music"); ui_switch_area_music->setToolTip(tr("Switch between Areas and Music lists")); set_size_and_pos(ui_pre, "pre"); @@ -1082,40 +1082,40 @@ void Courtroom::set_widgets() set_size_and_pos(ui_custom_objection, "custom_objection"); ui_custom_objection->setText(tr("Custom Shout!")); - ui_custom_objection->set_image("custom"); + ui_custom_objection->setImage("custom"); ui_custom_objection->setToolTip(tr("This will display the custom character-defined animation in the " "viewport as soon as it is pressed.\n" "To make one, your character's folder must contain " "custom.[webp/apng/gif/png] and custom.[wav/ogg/opus] sound effect")); set_size_and_pos(ui_realization, "realization"); - ui_realization->set_image("realization"); + ui_realization->setImage("realization"); ui_realization->setToolTip(tr("Play realization sound and animation in the viewport on the next " "spoken message when checked.")); set_size_and_pos(ui_screenshake, "screenshake"); - ui_screenshake->set_image("screenshake"); + ui_screenshake->setImage("screenshake"); ui_screenshake->setToolTip(tr("Shake the screen on next spoken message when checked.")); set_size_and_pos(ui_mute, "mute_button"); ui_mute->setText("Mute"); - ui_mute->set_image("mute"); + ui_mute->setImage("mute"); ui_mute->setToolTip(tr("Display the list of character folders you wish to mute.")); set_size_and_pos(ui_defense_plus, "defense_plus"); - ui_defense_plus->set_image("defplus"); + ui_defense_plus->setImage("defplus"); ui_defense_plus->setToolTip(tr("Increase the health bar.")); set_size_and_pos(ui_defense_minus, "defense_minus"); - ui_defense_minus->set_image("defminus"); + ui_defense_minus->setImage("defminus"); ui_defense_minus->setToolTip(tr("Decrease the health bar.")); set_size_and_pos(ui_prosecution_plus, "prosecution_plus"); - ui_prosecution_plus->set_image("proplus"); + ui_prosecution_plus->setImage("proplus"); ui_prosecution_plus->setToolTip(tr("Increase the health bar.")); set_size_and_pos(ui_prosecution_minus, "prosecution_minus"); - ui_prosecution_minus->set_image("prominus"); + ui_prosecution_minus->setImage("prominus"); ui_prosecution_minus->setToolTip(tr("Decrease the health bar.")); set_size_and_pos(ui_text_color, "text_color"); @@ -1137,10 +1137,10 @@ void Courtroom::set_widgets() set_size_and_pos(ui_char_buttons, "char_buttons"); set_size_and_pos(ui_char_select_left, "char_select_left"); - ui_char_select_left->set_image("arrow_left"); + ui_char_select_left->setImage("arrow_left"); set_size_and_pos(ui_char_select_right, "char_select_right"); - ui_char_select_right->set_image("arrow_right"); + ui_char_select_right->setImage("arrow_right"); set_size_and_pos(ui_spectator, "spectator"); ui_spectator->setToolTip(tr("Become a spectator. You won't be able to " @@ -1334,7 +1334,7 @@ void Courtroom::set_taken(int n_char, bool p_taken) return; } - char_type f_char; + CharacterSlot f_char; f_char.name = char_list.at(n_char).name; f_char.description = char_list.at(n_char).description; f_char.taken = p_taken; @@ -1672,16 +1672,16 @@ void Courtroom::enter_courtroom() switch (objection_state) // no need to reset these as it was done in set_widgets() { case 1: - ui_hold_it->set_image("holdit_selected"); + ui_hold_it->setImage("holdit_selected"); break; case 2: - ui_objection->set_image("objection_selected"); + ui_objection->setImage("objection_selected"); break; case 3: - ui_take_that->set_image("takethat_selected"); + ui_take_that->setImage("takethat_selected"); break; case 4: - ui_custom_objection->set_image("custom_selected"); + ui_custom_objection->setImage("custom_selected"); break; default: break; @@ -2292,13 +2292,13 @@ void Courtroom::reset_ui() realization_state = 0; screenshake_state = 0; is_presenting_evidence = false; - ui_hold_it->set_image("holdit"); - ui_objection->set_image("objection"); - ui_take_that->set_image("takethat"); - ui_custom_objection->set_image("custom"); - ui_realization->set_image("realization"); - ui_screenshake->set_image("screenshake"); - ui_evidence_present->set_image("present"); + ui_hold_it->setImage("holdit"); + ui_objection->setImage("objection"); + ui_take_that->setImage("takethat"); + ui_custom_objection->setImage("custom"); + ui_realization->setImage("realization"); + ui_screenshake->setImage("screenshake"); + ui_evidence_present->setImage("present"); // If sticky sounds is disabled and we either have SFX on Idle enabled, or our Preanim checkbox is checked if (!Options::getInstance().clearSoundsDropdownOnPlayEnabled() && (Options::getInstance().playSelectedSFXOnIdle() || ui_pre->isChecked())) @@ -3111,14 +3111,14 @@ void Courtroom::initialize_chatbox() if (ui_vp_showname->text().trimmed().isEmpty()) // Whitespace showname { - ui_vp_chatbox->set_image("chatblank", p_misc); + ui_vp_chatbox->setImage("chatblank", p_misc); } else // Aw yeah dude do some showname magic { ui_vp_showname->setVisible(true); - if (!ui_vp_chatbox->set_image("chat", p_misc)) + if (!ui_vp_chatbox->setImage("chat", p_misc)) { - ui_vp_chatbox->set_image("chatbox", p_misc); + ui_vp_chatbox->setImage("chatbox", p_misc); } // Remember to set the showname font before the font metrics check. @@ -3153,11 +3153,11 @@ void Courtroom::initialize_chatbox() #endif if (extra_width > 0) { - QString current_path = ui_vp_chatbox->file_name().left(ui_vp_chatbox->file_name().lastIndexOf('.')); - if (fm_width > default_width.width && ui_vp_chatbox->set_image(current_path + "med")) // This text be big. Let's do some shenanigans. + QString current_path = ui_vp_chatbox->image().left(ui_vp_chatbox->image().lastIndexOf('.')); + if (fm_width > default_width.width && ui_vp_chatbox->setImage(current_path + "med")) // This text be big. Let's do some shenanigans. { ui_vp_showname->resize(default_width.width + extra_width, ui_vp_showname->height()); - if (fm_width > ui_vp_showname->width() && ui_vp_chatbox->set_image(current_path + "big")) // Biggest possible size for us. + if (fm_width > ui_vp_showname->width() && ui_vp_chatbox->setImage(current_path + "big")) // Biggest possible size for us. { ui_vp_showname->resize(static_cast(default_width.width + (extra_width * 2)), ui_vp_showname->height()); } @@ -3578,11 +3578,19 @@ QString Courtroom::filter_ic_text(QString p_text, bool html, int target_pos, int void Courtroom::log_ic_text(QString p_name, QString p_showname, QString p_message, QString p_action, int p_color, bool p_selfname) { - ChatLogPiece log_entry(p_name, p_showname, p_message, p_action, p_color, p_selfname); + ChatLogPiece log_entry; + log_entry.character = p_name; + log_entry.character_name = p_showname; + log_entry.local_player = p_selfname; + log_entry.message = p_message; + log_entry.action = p_action; + log_entry.color = p_color; + log_entry.timestamp = QDateTime::currentDateTimeUtc(); ic_chatlog_history.append(log_entry); + if (Options::getInstance().logToTextFileEnabled() && !ao_app->log_filename.isEmpty()) { - ao_app->append_to_file(log_entry.get_full(), ao_app->log_filename, true); + ao_app->append_to_file(log_entry.toString(), ao_app->log_filename, true); } while (ic_chatlog_history.size() > log_maximum_blocks && log_maximum_blocks > 0) @@ -3997,8 +4005,9 @@ void Courtroom::start_chat_ticking() QString f_blips = ao_app->get_blipname(m_chatmessage[CHAR_NAME]); f_blips = ao_app->get_blips(f_blips); - if (ao_app->custom_blips_supported && !m_chatmessage[BLIPNAME].isEmpty()) { - f_blips = ao_app->get_blips(m_chatmessage[BLIPNAME]); + if (ao_app->custom_blips_supported && !m_chatmessage[BLIPNAME].isEmpty()) + { + f_blips = ao_app->get_blips(m_chatmessage[BLIPNAME]); } blip_player->set_blips(f_blips); @@ -4389,7 +4398,7 @@ void Courtroom::set_mute(bool p_muted, int p_cid) } ui_muted->resize(ui_ic_chat_message->width(), ui_ic_chat_message->height()); - ui_muted->set_image("muted"); + ui_muted->setImage("muted"); is_muted = p_muted; ui_ic_chat_message->setEnabled(!p_muted); @@ -4596,13 +4605,13 @@ void Courtroom::set_hp_bar(int p_bar, int p_state) int prev_state = p_state; if (p_bar == 1) { - ui_defense_bar->set_image("defensebar" + QString::number(p_state)); + ui_defense_bar->setImage("defensebar" + QString::number(p_state)); prev_state = defense_bar_state; defense_bar_state = p_state; } else if (p_bar == 2) { - ui_prosecution_bar->set_image("prosecutionbar" + QString::number(p_state)); + ui_prosecution_bar->setImage("prosecutionbar" + QString::number(p_state)); prev_state = prosecution_bar_state; prosecution_bar_state = p_state; } @@ -5483,7 +5492,7 @@ void Courtroom::on_pair_list_clicked(QModelIndex p_index) // Redo the character list. QStringList sorted_pair_list; - for (const char_type &i_char : qAsConst(char_list)) + for (const CharacterSlot &i_char : qAsConst(char_list)) { sorted_pair_list.append(i_char.name); } @@ -5700,16 +5709,16 @@ void Courtroom::on_hold_it_clicked() { if (objection_state == 1) { - ui_hold_it->set_image("holdit"); + ui_hold_it->setImage("holdit"); objection_state = 0; } else { - ui_objection->set_image("objection"); - ui_take_that->set_image("takethat"); - ui_custom_objection->set_image("custom"); + ui_objection->setImage("objection"); + ui_take_that->setImage("takethat"); + ui_custom_objection->setImage("custom"); - ui_hold_it->set_image("holdit_selected"); + ui_hold_it->setImage("holdit_selected"); objection_state = 1; } @@ -5720,16 +5729,16 @@ void Courtroom::on_objection_clicked() { if (objection_state == 2) { - ui_objection->set_image("objection"); + ui_objection->setImage("objection"); objection_state = 0; } else { - ui_hold_it->set_image("holdit"); - ui_take_that->set_image("takethat"); - ui_custom_objection->set_image("custom"); + ui_hold_it->setImage("holdit"); + ui_take_that->setImage("takethat"); + ui_custom_objection->setImage("custom"); - ui_objection->set_image("objection_selected"); + ui_objection->setImage("objection_selected"); objection_state = 2; } @@ -5740,16 +5749,16 @@ void Courtroom::on_take_that_clicked() { if (objection_state == 3) { - ui_take_that->set_image("takethat"); + ui_take_that->setImage("takethat"); objection_state = 0; } else { - ui_objection->set_image("objection"); - ui_hold_it->set_image("holdit"); - ui_custom_objection->set_image("custom"); + ui_objection->setImage("objection"); + ui_hold_it->setImage("holdit"); + ui_custom_objection->setImage("custom"); - ui_take_that->set_image("takethat_selected"); + ui_take_that->setImage("takethat_selected"); objection_state = 3; } @@ -5760,16 +5769,16 @@ void Courtroom::on_custom_objection_clicked() { if (objection_state == 4) { - ui_custom_objection->set_image("custom"); + ui_custom_objection->setImage("custom"); objection_state = 0; } else { - ui_objection->set_image("objection"); - ui_take_that->set_image("takethat"); - ui_hold_it->set_image("holdit"); + ui_objection->setImage("objection"); + ui_take_that->setImage("takethat"); + ui_hold_it->setImage("holdit"); - ui_custom_objection->set_image("custom_selected"); + ui_custom_objection->setImage("custom_selected"); objection_state = 4; } @@ -5782,10 +5791,10 @@ void Courtroom::show_custom_objection_menu(const QPoint &pos) QAction *selecteditem = custom_obj_menu->exec(globalPos); if (selecteditem) { - ui_objection->set_image("objection"); - ui_take_that->set_image("takethat"); - ui_hold_it->set_image("holdit"); - ui_custom_objection->set_image("custom_selected"); + ui_objection->setImage("objection"); + ui_take_that->setImage("takethat"); + ui_hold_it->setImage("holdit"); + ui_custom_objection->setImage("custom_selected"); if (selecteditem->text() == ao_app->read_char_ini(current_char, "custom_name", "Shouts") || selecteditem->text() == "Default") { objection_custom = ""; @@ -5816,14 +5825,14 @@ void Courtroom::on_realization_clicked() on_effects_dropdown_changed(ui_effects_dropdown->currentIndex()); } - ui_realization->set_image("realization_pressed"); + ui_realization->setImage("realization_pressed"); } else { realization_state = 0; ui_effects_dropdown->setCurrentIndex(0); on_effects_dropdown_changed(ui_effects_dropdown->currentIndex()); - ui_realization->set_image("realization"); + ui_realization->setImage("realization"); } ui_ic_chat_message->setFocus(); @@ -5834,12 +5843,12 @@ void Courtroom::on_screenshake_clicked() if (screenshake_state == 0) { screenshake_state = 1; - ui_screenshake->set_image("screenshake_pressed"); + ui_screenshake->setImage("screenshake_pressed"); } else { screenshake_state = 0; - ui_screenshake->set_image("screenshake"); + ui_screenshake->setImage("screenshake"); } ui_ic_chat_message->setFocus(); @@ -5854,13 +5863,13 @@ void Courtroom::on_mute_clicked() ui_pair_offset_spinbox->hide(); ui_pair_vert_offset_spinbox->hide(); ui_pair_order_dropdown->hide(); - ui_pair_button->set_image("pair_button"); - ui_mute->set_image("mute_pressed"); + ui_pair_button->setImage("pair_button"); + ui_mute->setImage("mute_pressed"); } else { ui_mute_list->hide(); - ui_mute->set_image("mute"); + ui_mute->setImage("mute"); } } @@ -5876,8 +5885,8 @@ void Courtroom::on_pair_clicked() } ui_pair_order_dropdown->show(); ui_mute_list->hide(); - ui_mute->set_image("mute"); - ui_pair_button->set_image("pair_button_pressed"); + ui_mute->setImage("mute"); + ui_pair_button->setImage("pair_button_pressed"); } else { @@ -5885,7 +5894,7 @@ void Courtroom::on_pair_clicked() ui_pair_offset_spinbox->hide(); ui_pair_vert_offset_spinbox->hide(); ui_pair_order_dropdown->hide(); - ui_pair_button->set_image("pair_button"); + ui_pair_button->setImage("pair_button"); } } @@ -6271,8 +6280,8 @@ void Courtroom::regenerate_ic_chatlog() foreach (ChatLogPiece item, ic_chatlog_history) { QString message = item.message; - QString name = ui_showname_enable->isChecked() ? item.showname : item.name; - append_ic_text(message, name, item.action, item.color, item.selfname, item.datetime.toLocalTime()); + QString name = ui_showname_enable->isChecked() ? item.character_name : item.character; + append_ic_text(message, name, item.action, item.color, item.local_player, item.timestamp.toLocalTime()); } } diff --git a/src/courtroom.h b/src/courtroom.h index e79fb40..a42adca 100644 --- a/src/courtroom.h +++ b/src/courtroom.h @@ -78,7 +78,7 @@ public: void update_audio_volume(); - void append_char(char_type p_char); + void append_char(CharacterSlot p_char); void append_music(QString f_music); void append_area(QString f_area); void clear_chars(); @@ -138,7 +138,7 @@ public: void set_pos_dropdown(QStringList pos_dropdowns); // sets the evidence list member variable to argument - void set_evidence_list(QVector &p_evi_list); + void set_evidence_list(QVector &p_evi_list); // called when a DONE#% from the server was received void done_received(); @@ -331,8 +331,8 @@ private: // 0 = in front, 1 = behind int pair_order = 0; - QVector char_list; - QVector evidence_list; + QVector char_list; + QVector evidence_list; QVector music_list; QVector area_list; @@ -553,9 +553,9 @@ private: int emote_rows = 2; int max_emotes_on_page = 10; - QVector local_evidence_list; - QVector private_evidence_list; - QVector global_evidence_list; + QVector local_evidence_list; + QVector private_evidence_list; + QVector global_evidence_list; // false = use private_evidence_list bool current_evidence_global = true; @@ -938,7 +938,7 @@ private Q_SLOTS: void on_evidence_load_clicked(); void evidence_save(QString filename); void evidence_load(QString filename); - bool compare_evidence_changed(evi_type evi_a, evi_type evi_b); + bool compare_evidence_changed(EvidenceItem evi_a, EvidenceItem evi_b); void on_back_to_lobby_clicked(); diff --git a/src/datatypes.h b/src/datatypes.h index 19263f8..1258136 100644 --- a/src/datatypes.h +++ b/src/datatypes.h @@ -3,35 +3,24 @@ #include #include -enum connection_type +enum ServerConnectionType { - TCP, - WEBSOCKETS, + TcpServerConnection, + WebSocketServerConnection, }; -static QMap to_connection_type = {{"tcp", connection_type::TCP}, {"ws", connection_type::WEBSOCKETS}}; +static const QMap SERVER_CONNECTION_TYPE_STRING_MAP = {{"tcp", ServerConnectionType::TcpServerConnection}, {"ws", ServerConnectionType::WebSocketServerConnection}}; -struct server_type +struct ServerInfo { QString name; - QString desc; + QString description; QString ip; int port; - connection_type socket_type; + ServerConnectionType socket_type; }; -struct emote_type -{ - QString comment; - QString preanim; - QString anim; - int mod; - QString sfx_name; - int sfx_delay; - int sfx_duration; -}; - -struct char_type +struct CharacterSlot { QString name; QString description; @@ -39,44 +28,13 @@ struct char_type bool taken; }; -struct evi_type +struct EvidenceItem { QString name; QString description; QString image; }; -struct chatmessage_type -{ - QString message; - QString character; - QString side; - QString sfx_name; - QString pre_emote; - QString emote; - int emote_modifier; - int objection_modifier; - int realization; - int text_color; - int evidence; - int cid; - int sfx_delay; - int flip; -}; - -struct area_type -{ - QString name; - QString background; - bool passworded; -}; - -struct pos_type -{ - int x; - int y; -}; - struct pos_size_type { int x = 0; diff --git a/src/demoserver.cpp b/src/demoserver.cpp index c22160d..0573b84 100644 --- a/src/demoserver.cpp +++ b/src/demoserver.cpp @@ -66,7 +66,7 @@ void DemoServer::accept_connection() { sc_packet = demo_data.dequeue(); AOPacket sc(sc_packet); - num_chars = sc.get_content().length(); + num_chars = sc.content().length(); } else { @@ -94,7 +94,7 @@ void DemoServer::recv_data() QString in_data = QString::fromUtf8(client_sock->readAll()); #if QT_VERSION < QT_VERSION_CHECK(5, 14, 0) - const QStringList packet_list = in_data.split("%", QString::SplitBehavior(QString::SkipEmptyParts)); + const QStringList packet_list = in_data.split("%", QString::SkipEmptyParts); #else const QStringList packet_list = in_data.split("%", Qt::SkipEmptyParts); #endif @@ -143,8 +143,8 @@ void DemoServer::handle_packet(AOPacket p_packet) // Also, at some point, I will make akashit // into a shared library. - QString header = p_packet.get_header(); - QStringList contents = p_packet.get_content(); + QString header = p_packet.header(); + QStringList contents = p_packet.content(); if (header == "HI") { diff --git a/src/emotes.cpp b/src/emotes.cpp index b16b989..c12ceb6 100644 --- a/src/emotes.cpp +++ b/src/emotes.cpp @@ -44,10 +44,10 @@ void Courtroom::refresh_emotes() set_size_and_pos(ui_emotes, "emotes"); set_size_and_pos(ui_emote_left, "emote_left"); - ui_emote_left->set_image("arrow_left"); + ui_emote_left->setImage("arrow_left"); set_size_and_pos(ui_emote_right, "emote_right"); - ui_emote_right->set_image("arrow_right"); + ui_emote_right->setImage("arrow_right"); QPoint f_spacing = ao_app->get_button_spacing("emote_button_spacing", "courtroom_design.ini"); QPoint p_point = ao_app->get_button_spacing("emote_button_size", "courtroom_design.ini"); @@ -73,20 +73,18 @@ void Courtroom::refresh_emotes() QString selected_image = ao_app->get_image_suffix(ao_app->get_theme_path("emote_selected", ""), true); - for (int n = 0; n < max_emotes_on_page; ++n) + for (int i = 0; i < max_emotes_on_page; ++i) { int x_pos = (button_width + x_spacing) * x_mod_count; int y_pos = (button_height + y_spacing) * y_mod_count; - AOEmoteButton *f_emote = new AOEmoteButton(ao_app, x_pos, y_pos, button_width, button_height, ui_emotes); - f_emote->set_selected_image(selected_image); + AOEmoteButton *f_emote = new AOEmoteButton(i, button_width, button_height, ao_app, ui_emotes); + f_emote->setSelectedImage(selected_image); + f_emote->move(x_pos, y_pos); ui_emote_list.append(f_emote); - f_emote->set_id(n); - f_emote->setContextMenuPolicy(Qt::CustomContextMenu); - connect(f_emote, &AOEmoteButton::emote_clicked, this, &Courtroom::on_emote_clicked); - + connect(f_emote, &AOEmoteButton::emoteClicked, this, &Courtroom::on_emote_clicked); connect(f_emote, &AOEmoteButton::customContextMenuRequested, this, &Courtroom::show_emote_menu); ++x_mod_count; @@ -154,11 +152,11 @@ void Courtroom::set_emote_page() if (n_real_emote == current_emote) { - f_emote->set_char_image(current_char, n_real_emote, true); + f_emote->setImage(current_char, n_real_emote, true); } else { - f_emote->set_char_image(current_char, n_real_emote, false); + f_emote->setImage(current_char, n_real_emote, false); } f_emote->show(); @@ -191,7 +189,7 @@ void Courtroom::select_emote(int p_id) if (current_emote >= min && current_emote <= max) { - ui_emote_list.at(current_emote % max_emotes_on_page)->set_char_image(current_char, current_emote, false); + ui_emote_list.at(current_emote % max_emotes_on_page)->setImage(current_char, current_emote, false); } int old_emote = current_emote; @@ -200,7 +198,7 @@ void Courtroom::select_emote(int p_id) if (current_emote >= min && current_emote <= max) { - ui_emote_list.at(current_emote % max_emotes_on_page)->set_char_image(current_char, current_emote, true); + ui_emote_list.at(current_emote % max_emotes_on_page)->setImage(current_char, current_emote, true); } int emote_mod = ao_app->get_emote_mod(current_char, current_emote); @@ -257,11 +255,11 @@ void Courtroom::show_emote_menu(const QPoint &pos) if (qobject_cast(button)) { AOEmoteButton *emote_button = qobject_cast(sender()); - id = emote_button->get_id(); + id = emote_button->id(); } int emote_num = id + max_emotes_on_page * current_emote_page; emote_menu->clear(); - emote_menu->setDefaultAction(emote_menu->addAction("Preview Selected", this, [=] { + emote_menu->setDefaultAction(emote_menu->addAction("Preview Selected", this, [this] { emote_preview->show(); emote_preview->raise(); emote_preview->set_widgets(); @@ -271,19 +269,19 @@ void Courtroom::show_emote_menu(const QPoint &pos) QString f_pre = ao_app->get_pre_emote(current_char, emote_num); if (!f_pre.isEmpty() && f_pre != "-") { - emote_menu->addAction("Preview pre: " + f_pre, this, [=] { preview_emote(f_pre); }); + emote_menu->addAction("Preview pre: " + f_pre, this, [this, f_pre] { preview_emote(f_pre); }); } QString f_emote = ao_app->get_emote(current_char, emote_num); if (!f_emote.isEmpty()) { - emote_menu->addAction("Preview idle: " + f_emote, this, [=] { preview_emote("(a)" + f_emote); }); - emote_menu->addAction("Preview talk: " + f_emote, this, [=] { preview_emote("(b)" + f_emote); }); + emote_menu->addAction("Preview idle: " + f_emote, this, [this, f_emote] { preview_emote("(a)" + f_emote); }); + emote_menu->addAction("Preview talk: " + f_emote, this, [this, f_emote] { preview_emote("(b)" + f_emote); }); QStringList c_paths = {ao_app->get_image_suffix(ao_app->get_character_path(current_char, "(c)" + f_emote)), ao_app->get_image_suffix(ao_app->get_character_path(current_char, "(c)/" + f_emote))}; // if there is a (c) animation if (file_exists(ui_vp_player_char->find_image(c_paths))) { - emote_menu->addAction("Preview segway: " + f_emote, this, [=] { preview_emote("(c)" + f_emote); }); + emote_menu->addAction("Preview segway: " + f_emote, this, [this, f_emote] { preview_emote("(c)" + f_emote); }); } } emote_menu->popup(button->mapToGlobal(pos)); diff --git a/src/evidence.cpp b/src/evidence.cpp index 4377b25..322970f 100644 --- a/src/evidence.cpp +++ b/src/evidence.cpp @@ -100,17 +100,17 @@ void Courtroom::refresh_evidence() ui_evidence_list.clear(); set_size_and_pos(ui_evidence_button, "evidence_button"); - ui_evidence_button->set_image("evidence_button"); + ui_evidence_button->setImage("evidence_button"); ui_evidence_button->setToolTip(tr("Bring up the Evidence screen.")); set_size_and_pos(ui_evidence, "evidence_background"); if (current_evidence_global) { - ui_evidence->set_image("evidence_background"); + ui_evidence->setImage("evidence_background"); } else { - ui_evidence->set_image("evidence_background_private"); + ui_evidence->setImage("evidence_background_private"); } set_size_and_pos(ui_evidence_name, "evidence_name"); @@ -118,63 +118,63 @@ void Courtroom::refresh_evidence() set_size_and_pos(ui_evidence_buttons, "evidence_buttons"); set_size_and_pos(ui_evidence_left, "evidence_left"); - ui_evidence_left->set_image("arrow_left"); + ui_evidence_left->setImage("arrow_left"); set_size_and_pos(ui_evidence_right, "evidence_right"); - ui_evidence_right->set_image("arrow_right"); + ui_evidence_right->setImage("arrow_right"); set_size_and_pos(ui_evidence_present, "evidence_present"); - ui_evidence_present->set_image("present"); + ui_evidence_present->setImage("present"); set_size_and_pos(ui_evidence_overlay, "evidence_overlay"); if (current_evidence_global) { - ui_evidence_overlay->set_image("evidence_overlay"); + ui_evidence_overlay->setImage("evidence_overlay"); } else { - ui_evidence_overlay->set_image("evidence_overlay_private"); + ui_evidence_overlay->setImage("evidence_overlay_private"); } set_size_and_pos(ui_evidence_delete, "evidence_delete"); - ui_evidence_delete->set_image("evidence_delete"); + ui_evidence_delete->setImage("evidence_delete"); set_size_and_pos(ui_evidence_image_name, "evidence_image_name"); set_size_and_pos(ui_evidence_image_button, "evidence_image_button"); set_size_and_pos(ui_evidence_x, "evidence_x"); - ui_evidence_x->set_image("evidence_x"); + ui_evidence_x->setImage("evidence_x"); set_size_and_pos(ui_evidence_ok, "evidence_ok"); - ui_evidence_ok->set_image("evidence_ok"); + ui_evidence_ok->setImage("evidence_ok"); set_size_and_pos(ui_evidence_switch, "evidence_switch"); if (current_evidence_global) { - ui_evidence_switch->set_image("evidence_global"); + ui_evidence_switch->setImage("evidence_global"); ui_evidence_switch->setToolTip(tr("Switch evidence to private inventory.")); } else { - ui_evidence_switch->set_image("evidence_private"); + ui_evidence_switch->setImage("evidence_private"); ui_evidence_switch->setToolTip(tr("Switch evidence to global inventory.")); } set_size_and_pos(ui_evidence_transfer, "evidence_transfer"); if (current_evidence_global) { - ui_evidence_transfer->set_image("evidence_transfer"); + ui_evidence_transfer->setImage("evidence_transfer"); ui_evidence_transfer->setToolTip(tr("Transfer evidence to private inventory.")); } else { - ui_evidence_transfer->set_image("evidence_transfer_private"); + ui_evidence_transfer->setImage("evidence_transfer_private"); ui_evidence_transfer->setToolTip(tr("Transfer evidence to global inventory.")); } set_size_and_pos(ui_evidence_save, "evidence_save"); - ui_evidence_save->set_image("evidence_save"); + ui_evidence_save->setImage("evidence_save"); if (current_evidence_global) { ui_evidence_save->hide(); @@ -185,7 +185,7 @@ void Courtroom::refresh_evidence() } set_size_and_pos(ui_evidence_load, "evidence_load"); - ui_evidence_load->set_image("evidence_load"); + ui_evidence_load->setImage("evidence_load"); if (current_evidence_global) { ui_evidence_load->hide(); @@ -213,20 +213,18 @@ void Courtroom::refresh_evidence() max_evidence_on_page = evidence_columns * evidence_rows; - for (int n = 0; n < max_evidence_on_page; ++n) + for (int i = 0; i < max_evidence_on_page; ++i) { int x_pos = (button_width + x_spacing) * x_mod_count; int y_pos = (button_height + y_spacing) * y_mod_count; - AOEvidenceButton *f_evidence = new AOEvidenceButton(ao_app, x_pos, y_pos, button_width, button_height, ui_evidence_buttons); - + AOEvidenceButton *f_evidence = new AOEvidenceButton(i, button_width, button_height, ao_app, ui_evidence_buttons); ui_evidence_list.append(f_evidence); + f_evidence->move(x_pos, y_pos); - f_evidence->set_id(n); - - connect(f_evidence, &AOEvidenceButton::evidence_clicked, this, &Courtroom::on_evidence_clicked); - connect(f_evidence, &AOEvidenceButton::evidence_double_clicked, this, &Courtroom::on_evidence_double_clicked); - connect(f_evidence, &AOEvidenceButton::on_hover, this, &Courtroom::on_evidence_hover); + connect(f_evidence, &AOEvidenceButton::evidenceClicked, this, &Courtroom::on_evidence_clicked); + connect(f_evidence, &AOEvidenceButton::evidenceDoubleClicked, this, &Courtroom::on_evidence_double_clicked); + connect(f_evidence, &AOEvidenceButton::mouseoverUpdated, this, &Courtroom::on_evidence_hover); ++x_mod_count; @@ -238,7 +236,7 @@ void Courtroom::refresh_evidence() } } -void Courtroom::set_evidence_list(QVector &p_evi_list) +void Courtroom::set_evidence_list(QVector &p_evi_list) { global_evidence_list = p_evi_list; if (!current_evidence_global) @@ -247,7 +245,7 @@ void Courtroom::set_evidence_list(QVector &p_evi_list) // thing } - QVector old_list = local_evidence_list; + QVector old_list = local_evidence_list; local_evidence_list.clear(); local_evidence_list = p_evi_list; @@ -351,26 +349,26 @@ void Courtroom::set_evidence_page() int n_real_evidence = n_evidence_button + current_evidence_page * max_evidence_on_page; AOEvidenceButton *f_evidence_button = ui_evidence_list.at(n_evidence_button); - f_evidence_button->set_selected(false); + f_evidence_button->setSelected(false); f_evidence_button->setToolTip(""); if (n_real_evidence == (total_evidence - 1)) { - f_evidence_button->set_theme_image("addevidence.png"); + f_evidence_button->setThemeImage("addevidence.png"); } else if (n_real_evidence < (total_evidence - 1)) { - f_evidence_button->set_image(local_evidence_list.at(n_real_evidence).image); + f_evidence_button->setImage(local_evidence_list.at(n_real_evidence).image); if (n_real_evidence == current_evidence) { - f_evidence_button->set_selected(true); + f_evidence_button->setSelected(true); } f_evidence_button->setToolTip(QString::number(n_real_evidence + 1) + ": " + local_evidence_list.at(n_real_evidence).name); } else { - f_evidence_button->set_image(""); + f_evidence_button->setImage(""); } f_evidence_button->show(); @@ -455,7 +453,7 @@ void Courtroom::on_evidence_clicked(int p_id) } else { - evi_type f_evi; + EvidenceItem f_evi; f_evi.name = ""; f_evi.description = ""; f_evi.image = "empty.png"; @@ -485,10 +483,10 @@ void Courtroom::on_evidence_clicked(int p_id) ui_evidence_name->setText(local_evidence_list.at(f_real_id).name); for (AOEvidenceButton *i_button : qAsConst(ui_evidence_list)) { - i_button->set_selected(false); + i_button->setSelected(false); } - ui_evidence_list.at(p_id)->set_selected(true); + ui_evidence_list.at(p_id)->setSelected(true); current_evidence = f_real_id; } @@ -512,18 +510,18 @@ void Courtroom::on_evidence_double_clicked(int p_id) for (AOEvidenceButton *i_button : qAsConst(ui_evidence_list)) { - i_button->set_selected(false); + i_button->setSelected(false); } // We have to check if the ID is on the currently displayed page. // This is because SOMEONE allowed the switching of pages while evidence is still being edited. if (p_id < ui_evidence_list.count()) { - ui_evidence_list.at(p_id)->set_selected(true); + ui_evidence_list.at(p_id)->setSelected(true); } current_evidence = f_real_id; - evi_type f_evi = local_evidence_list.at(f_real_id); + EvidenceItem f_evi = local_evidence_list.at(f_real_id); ui_evidence_description->clear(); ui_evidence_description->appendPlainText(f_evi.description); @@ -599,11 +597,11 @@ void Courtroom::on_evidence_present_clicked() } if (is_presenting_evidence) { - ui_evidence_present->set_image("present"); + ui_evidence_present->setImage("present"); } else { - ui_evidence_present->set_image("present_disabled"); + ui_evidence_present->setImage("present_disabled"); } is_presenting_evidence = !is_presenting_evidence; @@ -672,7 +670,7 @@ void Courtroom::on_evidence_ok_clicked() ui_evidence_ok->hide(); if (current_evidence < local_evidence_list.size()) { - evi_type f_evi = local_evidence_list.at(current_evidence); + EvidenceItem f_evi = local_evidence_list.at(current_evidence); if (current_evidence_global) { QStringList f_contents; @@ -717,7 +715,7 @@ void Courtroom::on_evidence_transfer_clicked() QString name; if (!current_evidence_global) // Transfer private evidence to global { - evi_type f_evi = local_evidence_list.at(current_evidence); + EvidenceItem f_evi = local_evidence_list.at(current_evidence); QStringList f_contents; f_contents.append(f_evi.name); @@ -729,7 +727,7 @@ void Courtroom::on_evidence_transfer_clicked() } else // Transfer global evidence to private { - evi_type f_evi = local_evidence_list.at(current_evidence); + EvidenceItem f_evi = local_evidence_list.at(current_evidence); name = f_evi.name; private_evidence_list.append(f_evi); @@ -751,7 +749,7 @@ void Courtroom::on_evidence_edited() { return; } - evi_type fake_evidence; + EvidenceItem fake_evidence; fake_evidence.name = ui_evidence_name->text(); fake_evidence.description = ui_evidence_description->toPlainText(); fake_evidence.image = ui_evidence_image_name->text(); @@ -778,7 +776,7 @@ void Courtroom::evidence_switch(bool global) evidence_close(); current_evidence_global = global; is_presenting_evidence = false; - ui_evidence_present->set_image("present"); + ui_evidence_present->setImage("present"); local_evidence_list.clear(); if (current_evidence_global) { @@ -786,10 +784,10 @@ void Courtroom::evidence_switch(bool global) ui_evidence_present->show(); ui_evidence_save->hide(); ui_evidence_load->hide(); - ui_evidence_switch->set_image("evidence_global"); - ui_evidence->set_image("evidence_background"); - ui_evidence_overlay->set_image("evidence_overlay"); - ui_evidence_transfer->set_image("evidence_transfer"); + ui_evidence_switch->setImage("evidence_global"); + ui_evidence->setImage("evidence_background"); + ui_evidence_overlay->setImage("evidence_overlay"); + ui_evidence_transfer->setImage("evidence_transfer"); ui_evidence_transfer->setToolTip(tr("Transfer evidence to private inventory.")); ui_evidence_switch->setToolTip(tr("Current evidence is global. Click to switch to private.")); } @@ -799,10 +797,10 @@ void Courtroom::evidence_switch(bool global) ui_evidence_present->hide(); ui_evidence_save->show(); ui_evidence_load->show(); - ui_evidence_switch->set_image("evidence_private"); - ui_evidence->set_image("evidence_background_private"); - ui_evidence_overlay->set_image("evidence_overlay_private"); - ui_evidence_transfer->set_image("evidence_transfer_private"); + ui_evidence_switch->setImage("evidence_private"); + ui_evidence->setImage("evidence_background_private"); + ui_evidence_overlay->setImage("evidence_overlay_private"); + ui_evidence_transfer->setImage("evidence_transfer_private"); ui_evidence_transfer->setToolTip(tr("Transfer evidence to global inventory.")); ui_evidence_switch->setToolTip(tr("Current evidence is private. Click to switch to global.")); } @@ -873,7 +871,7 @@ void Courtroom::evidence_load(QString filename) continue; } - evi_type f_evi; + EvidenceItem f_evi; f_evi.name = inventory.value(evi + "/name", "").value(); f_evi.description = inventory.value(evi + "/description", "").value(); f_evi.image = inventory.value(evi + "/image", "empty.png").value(); @@ -906,7 +904,7 @@ void Courtroom::evidence_save(QString filename) inventory.sync(); } -bool Courtroom::compare_evidence_changed(evi_type evi_a, evi_type evi_b) +bool Courtroom::compare_evidence_changed(EvidenceItem evi_a, EvidenceItem evi_b) { return evi_a.name != evi_b.name || evi_a.image != evi_b.image || evi_a.description != evi_b.description; } diff --git a/src/interfaces/server_dialog.h b/src/interfaces/server_dialog.h deleted file mode 100644 index 98c57fe..0000000 --- a/src/interfaces/server_dialog.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once - -#include - -namespace AttorneyOnline -{ -namespace UI -{ -class FavoriteServerDialog : public QDialog -{ -public: - const QString DEFAULT_UI = "favorite_server_dialog.ui"; - const int TCP_INDEX = 0; - -private Q_SLOTS: - virtual void onSavePressed() = 0; - virtual void onCancelPressed() = 0; -}; -} // namespace UI -} // namespace AttorneyOnline diff --git a/src/lobby.cpp b/src/lobby.cpp index 6c64804..6d42485 100644 --- a/src/lobby.cpp +++ b/src/lobby.cpp @@ -4,9 +4,8 @@ #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 "widgets/server_editor_dialog.h" #include #include @@ -234,18 +233,26 @@ void Lobby::on_add_to_fav_released() void Lobby::on_add_server_to_fave_released() { - AddServerDialog l_dialog; - l_dialog.exec(); - list_favorites(); - reset_selection(); + ServerEditorDialog dialog; + if (dialog.exec()) + { + Options::getInstance().addFavorite(dialog.currentServerInfo()); + list_favorites(); + reset_selection(); + } } void Lobby::on_edit_favorite_released() { - EditServerDialog l_dialog(get_selected_server()); - l_dialog.exec(); - list_favorites(); - reset_selection(); + const int index = get_selected_server(); + ServerEditorDialog dialog; + dialog.loadServerInfo(Options::getInstance().favorites().at(index)); + if (dialog.exec()) + { + Options::getInstance().updateFavorite(dialog.currentServerInfo(), index); + list_favorites(); + reset_selection(); + } } void Lobby::on_remove_from_fav_released() @@ -308,7 +315,7 @@ void Lobby::on_about_clicked() void Lobby::on_server_list_clicked(QTreeWidgetItem *p_item, int column) { column = 0; - server_type f_server; + ServerInfo f_server; int n_server = p_item->text(column).toInt(); if (n_server == last_index) @@ -322,7 +329,7 @@ void Lobby::on_server_list_clicked(QTreeWidgetItem *p_item, int column) return; } - QVector f_server_list = ao_app->get_server_list(); + QVector f_server_list = ao_app->get_server_list(); if (n_server >= f_server_list.size()) { @@ -331,7 +338,7 @@ void Lobby::on_server_list_clicked(QTreeWidgetItem *p_item, int column) f_server = f_server_list.at(n_server); - set_server_description(f_server.desc); + set_server_description(f_server.description); ui_server_description_text->moveCursor(QTextCursor::Start); ui_server_description_text->ensureCursorVisible(); @@ -354,7 +361,7 @@ void Lobby::on_list_doubleclicked(QTreeWidgetItem *p_item, int column) void Lobby::on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column) { column = 0; - server_type f_server; + ServerInfo f_server; int n_server = p_item->text(column).toInt(); if (n_server == last_index) @@ -372,7 +379,7 @@ void Lobby::on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column) ui_edit_favorite_button->setEnabled(true); ui_remove_from_favorites_button->setEnabled(true); - QVector f_server_list = Options::getInstance().favorites(); + QVector f_server_list = Options::getInstance().favorites(); if (n_server >= f_server_list.size()) { @@ -381,7 +388,7 @@ void Lobby::on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column) f_server = f_server_list.at(n_server); - set_server_description(f_server.desc); + set_server_description(f_server.description); ui_server_description_text->moveCursor(QTextCursor::Start); ui_server_description_text->ensureCursorVisible(); ui_server_player_count_lbl->setText(tr("Connecting...")); @@ -427,7 +434,7 @@ void Lobby::on_demo_clicked(QTreeWidgetItem *item, int column) 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; + ServerInfo demo_server; demo_server.ip = "127.0.0.1"; demo_server.port = ao_app->demo_server->port(); ao_app->demo_server->set_demo_file(l_filepath); @@ -458,7 +465,7 @@ 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 ServerInfo &i_server : qAsConst(ao_app->get_server_list())) { QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_serverlist_tree); treeItem->setData(0, Qt::DisplayRole, i); @@ -476,7 +483,7 @@ void Lobby::list_favorites() ui_favorites_tree->clear(); int i = 0; - for (const server_type &i_server : Options::getInstance().favorites()) + for (const ServerInfo &i_server : Options::getInstance().favorites()) { QTreeWidgetItem *treeItem = new QTreeWidgetItem(ui_favorites_tree); treeItem->setData(0, Qt::DisplayRole, i); diff --git a/src/networkmanager.cpp b/src/networkmanager.cpp index a0b95d8..e53b291 100644 --- a/src/networkmanager.cpp +++ b/src/networkmanager.cpp @@ -51,23 +51,23 @@ void NetworkManager::ms_request_finished(QNetworkReply *reply) qDebug().noquote() << "Got valid response from" << reply->url(); - QVector server_list; + QVector server_list; const auto jsonEntries = json.array(); for (const auto &entryRef : jsonEntries) { const auto entry = entryRef.toObject(); - server_type server; + ServerInfo server; server.ip = entry["ip"].toString(); server.name = entry["name"].toString(); - server.desc = entry["description"].toString(tr("No description provided.")); + server.description = entry["description"].toString(tr("No description provided.")); if (entry["ws_port"].isDouble()) { - server.socket_type = WEBSOCKETS; + server.socket_type = WebSocketServerConnection; server.port = entry["ws_port"].toInt(); } else { - server.socket_type = TCP; + server.socket_type = TcpServerConnection; server.port = entry["port"].toInt(); } if (server.port != 0) @@ -137,7 +137,7 @@ void NetworkManager::request_document(MSDocumentType document_type, const std::f }); } -void NetworkManager::connect_to_server(server_type p_server) +void NetworkManager::connect_to_server(ServerInfo p_server) { disconnect_from_server(); @@ -146,9 +146,10 @@ void NetworkManager::connect_to_server(server_type p_server) switch (p_server.socket_type) { default: - p_server.socket_type = TCP; + p_server.socket_type = TcpServerConnection; [[fallthrough]]; - case TCP: + + case TcpServerConnection: qInfo() << "using TCP backend"; server_socket.tcp = new QTcpSocket(this); @@ -165,7 +166,8 @@ void NetworkManager::connect_to_server(server_type p_server) server_socket.tcp->connectToHost(p_server.ip, p_server.port); break; - case WEBSOCKETS: + + case WebSocketServerConnection: qInfo() << "using WebSockets backend"; server_socket.ws = new QWebSocket(QString(), QWebSocketProtocol::VersionLatest, this); @@ -190,7 +192,7 @@ void NetworkManager::connect_to_server(server_type p_server) void NetworkManager::join_to_server() { - ship_server_packet(AOPacket("askchaa").to_string()); + ship_server_packet(AOPacket("askchaa").toString()); } void NetworkManager::disconnect_from_server() @@ -202,11 +204,11 @@ void NetworkManager::disconnect_from_server() switch (active_connection_type) { - case TCP: + case TcpServerConnection: server_socket.tcp->close(); server_socket.tcp->deleteLater(); break; - case WEBSOCKETS: + case WebSocketServerConnection: server_socket.ws->close(QWebSocketProtocol::CloseCodeGoingAway); server_socket.ws->deleteLater(); break; @@ -217,14 +219,14 @@ void NetworkManager::disconnect_from_server() void NetworkManager::ship_server_packet(AOPacket p_packet) { - QString message = p_packet.to_string(true); + QString message = p_packet.toString(true); switch (active_connection_type) { - case TCP: + case TcpServerConnection: server_socket.tcp->write(message.toUtf8()); break; - case WEBSOCKETS: + case WebSocketServerConnection: server_socket.ws->sendTextMessage(message); break; } diff --git a/src/networkmanager.h b/src/networkmanager.h index 984f30f..5cd8761 100644 --- a/src/networkmanager.h +++ b/src/networkmanager.h @@ -24,9 +24,8 @@ class NetworkManager : public QObject public: explicit NetworkManager(AOApplication *parent); - ~NetworkManager() = default; - void connect_to_server(server_type p_server); + void connect_to_server(ServerInfo p_server); void disconnect_from_server(); public Q_SLOTS: @@ -53,7 +52,7 @@ private: QWebSocket *ws; QTcpSocket *tcp; } server_socket; - connection_type active_connection_type; + ServerConnectionType active_connection_type; bool connected = false; QTimer *heartbeat_timer; diff --git a/src/options.cpp b/src/options.cpp index 8aec7fd..8006076 100644 --- a/src/options.cpp +++ b/src/options.cpp @@ -633,9 +633,9 @@ void Options::clearConfig() config.clear(); } -QVector Options::favorites() +QVector Options::favorites() { - QVector serverlist; + QVector serverlist; auto grouplist = favorite.childGroups(); { // remove all negative and non-numbers @@ -656,13 +656,13 @@ QVector Options::favorites() for (const QString &group : qAsConst(grouplist)) { - server_type f_server; + ServerInfo f_server; favorite.beginGroup(group); f_server.ip = favorite.value("address", "127.0.0.1").toString(); f_server.port = favorite.value("port", 27016).toInt(); f_server.name = favorite.value("name", "Missing Name").toString(); - f_server.desc = favorite.value("desc", "No description").toString(); - f_server.socket_type = to_connection_type.value(favorite.value("protocol", "tcp").toString()); + f_server.description = favorite.value("desc", "No description").toString(); + f_server.socket_type = SERVER_CONNECTION_TYPE_STRING_MAP.value(favorite.value("protocol", "tcp").toString()); serverlist.append(std::move(f_server)); favorite.endGroup(); } @@ -670,7 +670,7 @@ QVector Options::favorites() return serverlist; } -void Options::setFavorites(QVector value) +void Options::setFavorites(QVector value) { favorite.clear(); for (int i = 0; i < value.size(); ++i) @@ -680,9 +680,9 @@ void Options::setFavorites(QVector value) favorite.setValue("name", fav_server.name); favorite.setValue("address", fav_server.ip); favorite.setValue("port", fav_server.port); - favorite.setValue("desc", fav_server.desc); + favorite.setValue("desc", fav_server.description); - if (fav_server.socket_type == TCP) + if (fav_server.socket_type == TcpServerConnection) { favorite.setValue("protocol", "tcp"); } @@ -697,20 +697,20 @@ void Options::setFavorites(QVector value) void Options::removeFavorite(int index) { - QVector l_favorites = favorites(); + QVector l_favorites = favorites(); l_favorites.remove(index); setFavorites(l_favorites); } -void Options::addFavorite(server_type server) +void Options::addFavorite(ServerInfo server) { int index = favorites().size(); favorite.beginGroup(QString::number(index)); favorite.setValue("name", server.name); favorite.setValue("address", server.ip); favorite.setValue("port", server.port); - favorite.setValue("desc", server.desc); - if (server.socket_type == TCP) + favorite.setValue("desc", server.description); + if (server.socket_type == TcpServerConnection) { favorite.setValue("protocol", "tcp"); } @@ -722,14 +722,14 @@ void Options::addFavorite(server_type server) favorite.sync(); } -void Options::updateFavorite(server_type server, int index) +void Options::updateFavorite(ServerInfo server, int index) { favorite.beginGroup(QString::number(index)); favorite.setValue("name", server.name); favorite.setValue("address", server.ip); favorite.setValue("port", server.port); - favorite.setValue("desc", server.desc); - if (server.socket_type == TCP) + favorite.setValue("desc", server.description); + if (server.socket_type == TcpServerConnection) { favorite.setValue("protocol", "tcp"); } diff --git a/src/options.h b/src/options.h index 0707555..088e34b 100644 --- a/src/options.h +++ b/src/options.h @@ -252,13 +252,13 @@ public: void clearConfig(); // Loads the favorite servers - QVector favorites(); - void setFavorites(QVector value); + QVector favorites(); + void setFavorites(QVector value); // Interactions with favorite servers void removeFavorite(int index); - void addFavorite(server_type server); - void updateFavorite(server_type server, int index); + void addFavorite(ServerInfo server); + void updateFavorite(ServerInfo server, int index); // Theming Nonesense! QString getUIAsset(QString f_asset_name); diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index b4576f9..cdedd5a 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -26,12 +26,12 @@ void AOApplication::append_to_demofile(QString packet_string) void AOApplication::server_packet_received(AOPacket p_packet) { - QStringList f_contents_encoded = p_packet.get_content(); - QString f_packet_encoded = p_packet.to_string(); + QStringList f_contents_encoded = p_packet.content(); + QString f_packet_encoded = p_packet.toString(); - QString header = p_packet.get_header(); - QStringList f_contents = p_packet.get_content(); - QString f_packet = p_packet.to_string(); + QString header = p_packet.header(); + QStringList f_contents = p_packet.content(); + QString f_packet = p_packet.toString(); bool log_to_demo = true; @@ -255,7 +255,7 @@ void AOApplication::server_packet_received(AOPacket p_packet) break; case 1: { - QVector favorite_list = Options::getInstance().favorites(); + QVector favorite_list = Options::getInstance().favorites(); if (selected_server >= 0 && selected_server < favorite_list.size()) { auto info = favorite_list.at(selected_server); @@ -335,7 +335,7 @@ void AOApplication::server_packet_received(AOPacket p_packet) sub_element = AOPacket::decode(sub_element); } - char_type f_char; + CharacterSlot f_char; f_char.name = sub_elements.at(0); if (sub_elements.size() >= 2) { @@ -503,14 +503,14 @@ void AOApplication::server_packet_received(AOPacket p_packet) { if (courtroom_constructed && courtroom_loaded) { - w_courtroom->chatmessage_enqueue(p_packet.get_content()); + w_courtroom->chatmessage_enqueue(p_packet.content()); } } else if (header == "MC") { if (courtroom_constructed && courtroom_loaded) { - w_courtroom->handle_song(&p_packet.get_content()); + w_courtroom->handle_song(&p_packet.content()); } } else if (header == "RT") @@ -542,7 +542,7 @@ void AOApplication::server_packet_received(AOPacket p_packet) { if (courtroom_constructed) { - QVector f_evi_list; + QVector f_evi_list; for (QString f_string : f_contents_encoded) { @@ -559,7 +559,7 @@ void AOApplication::server_packet_received(AOPacket p_packet) data = AOPacket::decode(data); } - evi_type f_evi; + EvidenceItem f_evi; f_evi.name = sub_contents.at(0); f_evi.description = sub_contents.at(1); f_evi.image = sub_contents.at(2); @@ -805,7 +805,7 @@ void AOApplication::server_packet_received(AOPacket p_packet) void AOApplication::send_server_packet(AOPacket p_packet) { - QString f_packet = p_packet.to_string(); + QString f_packet = p_packet.toString(); #ifdef DEBUG_NETWORK qDebug() << "S:" << p_packet.to_string(); #endif diff --git a/src/scrolltext.cpp b/src/scrolltext.cpp index 25090a7..a45d6ab 100644 --- a/src/scrolltext.cpp +++ b/src/scrolltext.cpp @@ -17,12 +17,12 @@ ScrollText::ScrollText(QWidget *parent) QString ScrollText::text() const { - return _text; + return m_text; } void ScrollText::setText(QString text) { - _text = text; + m_text = text; updateText(); update(); } @@ -43,7 +43,7 @@ void ScrollText::updateText() { timer.stop(); #if QT_VERSION > QT_VERSION_CHECK(5, 11, 0) - singleTextWidth = fontMetrics().horizontalAdvance(_text); + singleTextWidth = fontMetrics().horizontalAdvance(m_text); #else singleTextWidth = fontMetrics().boundingRect(_text).width(); #endif @@ -53,12 +53,12 @@ void ScrollText::updateText() if (scrollEnabled) { scrollPos = -64; - staticText.setText(_text + _separator); + staticText.setText(m_text + _separator); timer.start(); } else { - staticText.setText(_text); + staticText.setText(m_text); } staticText.prepare(QTransform(), font()); diff --git a/src/scrolltext.h b/src/scrolltext.h index b7dd59f..4571e25 100644 --- a/src/scrolltext.h +++ b/src/scrolltext.h @@ -28,8 +28,7 @@ protected: virtual void resizeEvent(QResizeEvent *); private: - void updateText(); - QString _text; + QString m_text; QString _separator; QStaticText staticText; int singleTextWidth; @@ -41,6 +40,8 @@ private: QImage buffer; QTimer timer; + void updateText(); + private Q_SLOTS: virtual void timer_timeout(); }; diff --git a/src/widgets/add_server_dialog.cpp b/src/widgets/add_server_dialog.cpp deleted file mode 100644 index dfc302f..0000000 --- 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 -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -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 5df868c..0000000 --- a/src/widgets/add_server_dialog.h +++ /dev/null @@ -1,40 +0,0 @@ -#pragma once - -#include "interfaces/server_dialog.h" - -#include -#include -#include -#include -#include -#include -#include - -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 40e75b7..db4cde6 100644 --- a/src/widgets/direct_connect_dialog.cpp +++ b/src/widgets/direct_connect_dialog.cpp @@ -9,11 +9,16 @@ #include #include -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 fc34f74..b2ac9be 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 a302f37..0000000 --- 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 -#include -#include - -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 628ea60..0000000 --- a/src/widgets/edit_server_dialog.h +++ /dev/null @@ -1,42 +0,0 @@ -#pragma once - -#include "interfaces/server_dialog.h" - -#include -#include -#include -#include -#include -#include -#include - -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 0000000..102e903 --- /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 +#include +#include + +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 0000000..1ceb352 --- /dev/null +++ b/src/widgets/server_editor_dialog.h @@ -0,0 +1,43 @@ +#pragma once + +#include "datatypes.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +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(); +};