diff options
Diffstat (limited to 'include')
| -rw-r--r-- | include/aoapplication.h | 229 | ||||
| -rw-r--r-- | include/aocaseannouncerdialog.h | 46 | ||||
| -rw-r--r-- | include/aocharbutton.h | 8 | ||||
| -rw-r--r-- | include/aoevidencebutton.h | 10 | ||||
| -rw-r--r-- | include/aomusicplayer.h | 28 | ||||
| -rw-r--r-- | include/aooptionsdialog.h | 273 | ||||
| -rw-r--r-- | include/courtroom.h | 14 | ||||
| -rw-r--r-- | include/datatypes.h | 11 | ||||
| -rw-r--r-- | include/demoserver.h | 3 | ||||
| -rw-r--r-- | include/file_functions.h | 2 | ||||
| -rw-r--r-- | include/interfaces/server_dialog.h | 21 | ||||
| -rw-r--r-- | include/lobby.h | 134 | ||||
| -rw-r--r-- | include/networkmanager.h | 4 | ||||
| -rw-r--r-- | include/options.h | 290 | ||||
| -rw-r--r-- | include/widgets/add_server_dialog.h | 44 | ||||
| -rw-r--r-- | include/widgets/aooptionsdialog.h | 159 | ||||
| -rw-r--r-- | include/widgets/direct_connect_dialog.h | 46 | ||||
| -rw-r--r-- | include/widgets/edit_server_dialog.h | 46 |
18 files changed, 725 insertions, 643 deletions
diff --git a/include/aoapplication.h b/include/aoapplication.h index 16895d8..8ef2a12 100644 --- a/include/aoapplication.h +++ b/include/aoapplication.h @@ -1,14 +1,13 @@ #ifndef AOAPPLICATION_H #define AOAPPLICATION_H +#include "widgets/aooptionsdialog.h" #include "aopacket.h" #include "datatypes.h" #include "demoserver.h" #include "discord_rich_presence.h" #include "bass.h" -#include "bassmidi.h" -#include "bassopus.h" #include <QApplication> #include <QFile> @@ -34,6 +33,7 @@ class NetworkManager; class Lobby; class Courtroom; +class Options; class VPath : QString { using QString::QString; @@ -130,10 +130,6 @@ public: /////////////////////////////////////////// - void load_favorite_list(); - void save_favorite_list(); - QVector<server_type> &get_favorite_list() { return favorite_list; } - // Adds the server to favorite_servers.ini void add_favorite_server(int p_server); void remove_favorite_server(int p_server); @@ -141,14 +137,10 @@ public: void set_server_list(QVector<server_type> &servers) { server_list = servers; } QVector<server_type> &get_server_list() { return server_list; } - // reads the theme from config.ini and sets it accordingly - void reload_theme(); - // Returns the character the player has currently selected QString get_current_char(); // implementation in path_functions.cpp - QString get_base_path(); VPath get_theme_path(QString p_file, QString p_theme=""); VPath get_character_path(QString p_char, QString p_file); VPath get_misc_path(QString p_misc, QString p_file); @@ -173,147 +165,6 @@ public: ////// Functions for reading and writing files ////// // Implementations file_functions.cpp - // Instead of reinventing the wheel, we'll use a QSettings class. - QSettings *configini; - - // Reads the theme from config.ini and loads it into the current_theme - // variable - QString read_theme(); - - // Returns the value of ooc_name in config.ini - QString get_ooc_name(); - - // Returns the blip rate from config.ini (once per X symbols) - int read_blip_rate(); - - // Returns true if blank blips is enabled in config.ini and false otherwise - bool get_blank_blip(); - - // Returns true if looping sound effects are enabled in the config.ini - bool get_looping_sfx(); - - // Returns true if stop music on objection is enabled in the config.ini - bool objection_stop_music(); - - // Returns true if streaming is enabled in the config.ini - bool is_streaming_disabled(); - - // Returns the value of default_music in config.ini - int get_default_music(); - - // Returns the value of default_sfx in config.ini - int get_default_sfx(); - - // Returns the value of default_blip in config.ini - int get_default_blip(); - - // Returns the value of suppress_audio in config.ini - int get_default_suppress_audio(); - - // Returns the value if objections interrupt and skip the message queue - // from the config.ini. - bool is_instant_objection_enabled(); - - // returns if log will show messages as-received, while viewport will parse according to the queue (Text Stay Time) - // from the config.ini - bool is_desyncrhonized_logs_enabled(); - - // Returns the value of whether Discord should be enabled on startup - // from the config.ini. - bool is_discord_enabled(); - - // Returns the value of whether shaking should be enabled. - // from the config.ini. - bool is_shake_enabled(); - - // Returns the value of whether effects should be enabled. - // from the config.ini. - bool is_effects_enabled(); - - // Returns the value of whether frame-specific effects defined in char.ini - // should be sent/received over the network. from the config.ini. - bool is_frame_network_enabled(); - - // Returns the value of whether colored ic log should be a thing. - // from the config.ini. - bool is_colorlog_enabled(); - - // Returns the value of whether sticky sounds should be a thing. - // from the config.ini. - bool is_stickysounds_enabled(); - - // Returns the value of whether sticky effects should be a thing. - // from the config.ini. - bool is_stickyeffects_enabled(); - - // Returns the value of whether sticky preanims should be a thing. - // from the config.ini. - bool is_stickypres_enabled(); - - // Returns the value of whether custom chatboxes should be a thing. - // from the config.ini. - // I am increasingly maddened by the lack of dynamic auto-generation system - // for settings. - bool is_customchat_enabled(); - - // Returns the value of characer sticker (avatar) setting - bool is_sticker_enabled(); - - // Returns the value of whether continuous playback should be used - // from the config.ini. - bool is_continuous_enabled(); - - // Returns the value of whether stopping music by double clicking category should be used - // from the config.ini. - bool is_category_stop_enabled(); - - // Returns the value of the maximum amount of lines the IC chatlog - // may contain, from config.ini. - int get_max_log_size(); - - // Current wait time between messages for the queue system - int stay_time(); - - // Returns the letter display speed during text crawl in in-character messages - int get_text_crawl(); - - // Returns Minimum amount of time (in miliseconds) that must pass before the next Enter key press will send your IC message. (new behaviour) - int get_chat_ratelimit(); - - // Returns whether the log should go upwards (new behaviour) - // or downwards (vanilla behaviour). - bool get_log_goes_downwards(); - - // Returns whether the log should separate name from text via newline or : - bool get_log_newline(); - - // Get spacing between IC log entries. - int get_log_margin(); - - // Returns whether the log should have a timestamp. - bool get_log_timestamp(); - - // Returns the format string for the log timestamp - QString get_log_timestamp_format(); - - // Returns whether to log IC actions. - bool get_log_ic_actions(); - - // Returns the username the user may have set in config.ini. - QString get_default_username(); - - // Returns the audio device used for the client. - QString get_audio_output_device(); - - // Returns whether the user would like to have custom shownames on by default. - bool get_showname_enabled_by_default(); - - //Returns the showname the user may have set in config.ini. - QString get_default_showname(); - - // Returns the list of words in callwords.ini - QStringList get_call_words(); - // returns all of the file's lines in a QStringList QStringList get_list_file(VPath path); QStringList get_list_file(QString p_file); @@ -333,23 +184,17 @@ public: void append_to_demofile(QString packet_string); /** - * @brief Reads favorite_servers.ini and returns a list of servers. + * @brief Reads the clients log folder and locates potential demo files to populate the demoserver list. * - * The demo server entry is always present at the top of the list. + * @return A seperated list of servernames and demo logfile filenames. * - * If the server list returned was to be empty (exluding the demo server entry), - * will return a list of servers from the legacy serverlist.txt file. + * @details This is to remove the need of delimiters or deal with potential + * harmfully encoding or plattform differences. We always get a combo of servername and filename. * - * @return A list of servers. - */ - QVector<server_type> read_favorite_servers(); - - /** - * @brief Reads serverlist.txt and returns a list of servers. + * Do note this function assumes all demo files have the .demo extension. * - * @return A list of servers. */ - QVector<server_type> read_legacy_favorite_servers(); + QMultiMap<QString, QString> load_demo_logs_list() const; // Returns the value of p_identifier in the design.ini file in p_design_path QString read_design_ini(QString p_identifier, VPath p_design_path); @@ -505,62 +350,11 @@ public: // These are all casing-related settings. // ====== - // Returns if the user has casing alerts enabled. - bool get_casing_enabled(); - - // Returns if the user wants to get alerts for the defence role. - bool get_casing_defence_enabled(); - - // Same for prosecution. - bool get_casing_prosecution_enabled(); - - // Same for judge. - bool get_casing_judge_enabled(); - - // Same for juror. - bool get_casing_juror_enabled(); - - // Same for steno. - bool get_casing_steno_enabled(); - - // Same for CM. - bool get_casing_cm_enabled(); - - // Get the message for the CM for casing alerts. - QString get_casing_can_host_cases(); - - // Get if text file logging is enabled - bool get_text_logging_enabled(); - - // Get if demo logging is enabled - bool get_demo_logging_enabled(); - - // Get the subtheme from settings - QString get_subtheme(); - - // Get if the theme is animated - bool get_animated_theme(); - - // Get the default scaling method - QString get_default_scaling(); - - // Get a list of custom mount paths - QStringList get_mount_paths(); - - // Get whether to opt out of player count metrics sent to the master server - bool get_player_count_optout(); - - // Get if sfx can be sent to play on idle - bool get_sfx_on_idle(); - - // Whether opening evidence requires a single or double click - bool get_evidence_double_click(); - // Currently defined subtheme QString subtheme; - QString default_theme = "default"; - QString current_theme = default_theme; + //Default is always default. + const QString default_theme = "default"; // The file name of the log file in base/logs. QString log_filename; @@ -587,10 +381,9 @@ public: private: const int RELEASE = 2; const int MAJOR_VERSION = 10; - const int MINOR_VERSION = 0; + const int MINOR_VERSION = 1; QVector<server_type> server_list; - QVector<server_type> favorite_list; QHash<uint, QString> asset_lookup_cache; QHash<uint, QString> dir_listing_cache; QSet<uint> dir_listing_exist_cache; diff --git a/include/aocaseannouncerdialog.h b/include/aocaseannouncerdialog.h deleted file mode 100644 index 0ac8f07..0000000 --- a/include/aocaseannouncerdialog.h +++ /dev/null @@ -1,46 +0,0 @@ -#ifndef AOCASEANNOUNCERDIALOG_H -#define AOCASEANNOUNCERDIALOG_H - -#include "aoapplication.h" -#include "courtroom.h" - -#include <QDialogButtonBox> -#include <QtWidgets/QCheckBox> -#include <QtWidgets/QDialog> -#include <QtWidgets/QFormLayout> -#include <QtWidgets/QLabel> -#include <QtWidgets/QLineEdit> -#include <QtWidgets/QVBoxLayout> - -class AOCaseAnnouncerDialog : public QDialog { - Q_OBJECT - -public: - explicit AOCaseAnnouncerDialog(QWidget *parent = nullptr, - AOApplication *p_ao_app = nullptr, - Courtroom *p_court = nullptr); - -private: - AOApplication *ao_app; - Courtroom *court; - - QDialogButtonBox *ui_announcer_buttons; - - QVBoxLayout *ui_vbox_layout; - QFormLayout *ui_form_layout; - - QLabel *ui_case_title_label; - QLineEdit *ui_case_title_textbox; - - QCheckBox *ui_defense_needed; - QCheckBox *ui_prosecutor_needed; - QCheckBox *ui_judge_needed; - QCheckBox *ui_juror_needed; - QCheckBox *ui_steno_needed; - -public slots: - void ok_pressed(); - void cancel_pressed(); -}; - -#endif // AOCASEANNOUNCERDIALOG_H diff --git a/include/aocharbutton.h b/include/aocharbutton.h index 8e8038f..688d52d 100644 --- a/include/aocharbutton.h +++ b/include/aocharbutton.h @@ -38,8 +38,12 @@ private: AOImage *ui_selector; protected: - void enterEvent(QEnterEvent *e); - void leaveEvent(QEvent *e); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + void enterEvent(QEvent *e) override; +#else + void enterEvent(QEnterEvent *e) override; +#endif + void leaveEvent(QEvent *e) override; }; #endif // AOCHARBUTTON_H diff --git a/include/aoevidencebutton.h b/include/aoevidencebutton.h index 1898539..f0e1353 100644 --- a/include/aoevidencebutton.h +++ b/include/aoevidencebutton.h @@ -32,9 +32,13 @@ private: int m_id = 0; protected: - void enterEvent(QEnterEvent *e); - void leaveEvent(QEvent *e); - void mouseDoubleClickEvent(QMouseEvent *e); +#if QT_VERSION < QT_VERSION_CHECK(6, 0, 0) + void enterEvent(QEvent *e) override; +#else + void enterEvent(QEnterEvent *e) override; +#endif + void leaveEvent(QEvent *e) override; + void mouseDoubleClickEvent(QMouseEvent *e) override; /* void dragLeaveEvent(QMouseEvent *e); void dragEnterEvent(QMouseEvent *e); diff --git a/include/aomusicplayer.h b/include/aomusicplayer.h index 35bd784..d028844 100644 --- a/include/aomusicplayer.h +++ b/include/aomusicplayer.h @@ -1,11 +1,5 @@ #ifndef AOMUSICPLAYER_H #define AOMUSICPLAYER_H -#include "file_functions.h" - -#include "bass.h" -#include "bassmidi.h" -#include "bassopus.h" - #include "aoapplication.h" #include <QDebug> @@ -24,17 +18,6 @@ public: const int m_channelmax = 4; - // These have to be public for the stupid sync thing - /** - * @brief The starting sample of the AB-Loop. - */ - unsigned int loop_start[4] = {0, 0, 0, 0}; - - /** - * @brief The end sample of the AB-Loop. - */ - unsigned int loop_end[4] = {0, 0, 0, 0}; - QFutureWatcher<QString> music_watcher; public slots: @@ -46,7 +29,6 @@ private: QWidget *m_parent; AOApplication *ao_app; - bool m_looping = false; bool m_muted = false; int m_volume[4] = {0, 0, 0, 0}; @@ -56,6 +38,16 @@ private: // Channel 3 = extra HSTREAM m_stream_list[4]; HSYNC loop_sync[4]; + + /** + * @brief The starting sample of the AB-Loop. + */ + unsigned int loop_start[4] = {0, 0, 0, 0}; + + /** + * @brief The end sample of the AB-Loop. + */ + unsigned int loop_end[4] = {0, 0, 0, 0}; }; #endif // AOMUSICPLAYER_H diff --git a/include/aooptionsdialog.h b/include/aooptionsdialog.h deleted file mode 100644 index be305d2..0000000 --- a/include/aooptionsdialog.h +++ /dev/null @@ -1,273 +0,0 @@ -#ifndef AOOPTIONSDIALOG_H -#define AOOPTIONSDIALOG_H - -#include "aoapplication.h" -#include "bass.h" - -#include <QtCore/QVariant> -#include <QtWidgets/QApplication> -#include <QtWidgets/QCheckBox> -#include <QtWidgets/QComboBox> -#include <QtWidgets/QDialog> -#include <QtWidgets/QDialogButtonBox> -#include <QtWidgets/QFormLayout> -#include <QtWidgets/QFrame> -#include <QtWidgets/QLabel> -#include <QtWidgets/QLineEdit> -#include <QtWidgets/QPlainTextEdit> -#include <QtWidgets/QPushButton> -#include <QtWidgets/QScrollArea> -#include <QtWidgets/QSpinBox> -#include <QtWidgets/QTabWidget> -#include <QtWidgets/QVBoxLayout> -#include <QtWidgets/QWidget> - -#include <QDirIterator> -#include <QListWidget> -#include <QTextBrowser> -#include <QTextStream> - -class Lobby; -class Courtroom; - -class AOOptionsDialog : public QDialog { - Q_OBJECT -public: - explicit AOOptionsDialog(QWidget *parent = nullptr, - AOApplication *p_ao_app = nullptr); - -private: - AOApplication *ao_app; - - QVBoxLayout *ui_vertical_layout; - QTabWidget *ui_settings_tabs; - - QWidget *ui_gameplay_tab; - QWidget *ui_form_layout_widget; - QFormLayout *ui_gameplay_form; - - QLabel *ui_theme_label; - QComboBox *ui_theme_combobox; - QLabel *ui_subtheme_label; - QComboBox *ui_subtheme_combobox; - QPushButton *ui_theme_reload_button; - QPushButton *ui_theme_folder_button; - QLabel *ui_evidence_double_click_lbl; - QCheckBox *ui_evidence_double_click_cb; - QLabel *ui_animated_theme_lbl; - QCheckBox *ui_animated_theme_cb; - QFrame *ui_theme_log_divider; - QLabel *ui_stay_time_lbl; - QSpinBox *ui_stay_time_spinbox; - QLabel *ui_instant_objection_lbl; - QCheckBox *ui_instant_objection_cb; - QLabel *ui_text_crawl_lbl; - QSpinBox *ui_text_crawl_spinbox; - QLabel *ui_chat_ratelimit_lbl; - QSpinBox *ui_chat_ratelimit_spinbox; - QFrame *ui_log_names_divider; - QLineEdit *ui_username_textbox; - QLabel *ui_username_lbl; - QLabel *ui_showname_lbl; - QCheckBox *ui_showname_cb; - QLabel *ui_default_showname_lbl; - QLineEdit *ui_default_showname_textbox; - QFrame *ui_net_divider; - QLabel *ui_ms_lbl; - QLineEdit *ui_ms_textbox; - QLabel *ui_discord_lbl; - QCheckBox *ui_discord_cb; - QLabel *ui_language_label; - QComboBox *ui_language_combobox; - QLabel *ui_scaling_label; - QComboBox *ui_scaling_combobox; - - QLabel *ui_shake_lbl; - QCheckBox *ui_shake_cb; - QLabel *ui_effects_lbl; - QCheckBox *ui_effects_cb; - QLabel *ui_framenetwork_lbl; - QCheckBox *ui_framenetwork_cb; - - QLabel *ui_colorlog_lbl; - QCheckBox *ui_colorlog_cb; - - QLabel *ui_stickysounds_lbl; - QCheckBox *ui_stickysounds_cb; - - QLabel *ui_stickyeffects_lbl; - QCheckBox *ui_stickyeffects_cb; - - QLabel *ui_stickypres_lbl; - QCheckBox *ui_stickypres_cb; - - QLabel *ui_customchat_lbl; - QCheckBox *ui_customchat_cb; - - QLabel *ui_sticker_lbl; - QCheckBox *ui_sticker_cb; - - QLabel *ui_continuous_lbl; - QCheckBox *ui_continuous_cb; - - QLabel *ui_category_stop_lbl; - QCheckBox *ui_category_stop_cb; - - QLabel *ui_sfx_on_idle_lbl; - QCheckBox *ui_sfx_on_idle_cb; - - QWidget *ui_callwords_tab; - QWidget *ui_callwords_widget; - QVBoxLayout *ui_callwords_layout; - QPlainTextEdit *ui_callwords_textbox; - QLabel *ui_callwords_explain_lbl; - QCheckBox *ui_callwords_char_textbox; - - QWidget *ui_audio_tab; - QWidget *ui_audio_widget; - QFormLayout *ui_audio_layout; - QLabel *ui_audio_device_lbl; - QComboBox *ui_audio_device_combobox; - QFrame *ui_audio_volume_divider; - QSpinBox *ui_music_volume_spinbox; - QLabel *ui_music_volume_lbl; - QSpinBox *ui_sfx_volume_spinbox; - QSpinBox *ui_blips_volume_spinbox; - QSpinBox *ui_suppress_audio_spinbox; - QLabel *ui_sfx_volume_lbl; - QLabel *ui_blips_volume_lbl; - QLabel *ui_suppress_audio_lbl; - QFrame *ui_volume_blip_divider; - QSpinBox *ui_bliprate_spinbox; - QLabel *ui_bliprate_lbl; - QCheckBox *ui_blank_blips_cb; - QLabel *ui_blank_blips_lbl; - QLabel *ui_loopsfx_lbl; - QCheckBox *ui_loopsfx_cb; - QLabel *ui_objectmusic_lbl; - QCheckBox *ui_objectmusic_cb; - QLabel *ui_disablestreams_lbl; - QCheckBox *ui_disablestreams_cb; - QDialogButtonBox *ui_settings_buttons; - - QWidget *ui_casing_tab; - QWidget *ui_casing_widget; - QFormLayout *ui_casing_layout; - QLabel *ui_casing_supported_lbl; - QLabel *ui_casing_enabled_lbl; - QCheckBox *ui_casing_enabled_cb; - QLabel *ui_casing_def_lbl; - QCheckBox *ui_casing_def_cb; - QLabel *ui_casing_pro_lbl; - QCheckBox *ui_casing_pro_cb; - QLabel *ui_casing_jud_lbl; - QCheckBox *ui_casing_jud_cb; - QLabel *ui_casing_jur_lbl; - QCheckBox *ui_casing_jur_cb; - QLabel *ui_casing_steno_lbl; - QCheckBox *ui_casing_steno_cb; - QLabel *ui_casing_cm_lbl; - QCheckBox *ui_casing_cm_cb; - QLabel *ui_casing_cm_cases_lbl; - QLineEdit *ui_casing_cm_cases_textbox; - - QWidget *ui_assets_tab; - QVBoxLayout *ui_assets_tab_layout; - QGridLayout *ui_mount_buttons_layout; - QLabel *ui_asset_lbl; - QListWidget *ui_mount_list; - QPushButton *ui_mount_add; - QPushButton *ui_mount_remove; - QPushButton *ui_mount_up; - QPushButton *ui_mount_down; - QPushButton *ui_mount_clear_cache; - - QWidget *ui_logging_tab; - QWidget *ui_form_logging_widget; - QFormLayout *ui_logging_form; - - /** - * Option for log direction. Supported options are downwards and wrong way. - */ - QLabel *ui_downwards_lbl; - QCheckBox *ui_downwards_cb; - - /** - * Option for log length. Controls how many IC-log entries are kept before it autowraps. - */ - QLabel *ui_length_lbl; - QSpinBox *ui_length_spinbox; - - /** - * Option for log newline. Controls if the IC-log contains newlines or as one consecutive string. - */ - QLabel *ui_log_newline_lbl; - QCheckBox *ui_log_newline_cb; - - /** - * Option for log margin. Controls how many pixels are between each log entry. - */ - QLabel *ui_log_margin_lbl; - QSpinBox *ui_log_margin_spinbox; - - /** - * Option for timestamp format. A checkmark to enable the timestamp dropdown. - * Why does this exist? Are we Dorico now? - */ - QLabel *ui_log_timestamp_lbl; - QCheckBox *ui_log_timestamp_cb; - - /** - * Option for timestamp format. Dropdown to select the preferred format. - */ - QLabel *ui_log_timestamp_format_lbl; - QComboBox *ui_log_timestamp_format_combobox; - - /** - * Option for desynched IC-log and viewport. Controls if entires are appended to the IC-log before displayed in the viewport. - */ - QLabel *ui_desync_logs_lbl; - QCheckBox *ui_desync_logs_cb; - - /** - * Option for logging IC-actions. Will add shouts, evidence or music changes to the IC-log. - */ - QLabel *ui_log_ic_actions_lbl; - QCheckBox *ui_log_ic_actions_cb; - - /** - * Option to enable logging. If enabled client will save all messages to the log folder. - */ - QLabel *ui_log_text_lbl; - QCheckBox *ui_log_text_cb; - - /** - * Option to enable demo logging. If enabled, client will save a demo file for replay trough the demo server. - */ - QLabel *ui_log_demo_lbl; - QCheckBox *ui_log_demo_cb; - - QWidget *ui_privacy_tab; - QVBoxLayout *ui_privacy_layout; - QCheckBox *ui_privacy_optout_cb; - QFrame *ui_privacy_separator; - QTextBrowser *ui_privacy_policy; - - bool asset_cache_dirty = false; - - bool needs_default_audiodev(); - void update_values(); - -signals: - -public slots: - void save_pressed(); - void discard_pressed(); - void button_clicked(QAbstractButton *button); - void on_timestamp_format_edited(); - void timestamp_cb_changed(int state); - void on_reload_theme_clicked(); - void theme_changed(int i); -}; - -#endif // AOOPTIONSDIALOG_H diff --git a/include/courtroom.h b/include/courtroom.h index d767f0a..65ef75a 100644 --- a/include/courtroom.h +++ b/include/courtroom.h @@ -12,7 +12,7 @@ #include "aoimage.h" #include "aolayer.h" #include "aomusicplayer.h" -#include "aooptionsdialog.h" +#include "widgets/aooptionsdialog.h" #include "aopacket.h" #include "aosfxplayer.h" #include "aotextarea.h" @@ -191,7 +191,7 @@ public: void set_pair_list(); // sets desk and bg based on pos in chatmessage - void set_scene(QString f_desk_mod, QString f_side); + void set_scene(bool show_desk, QString f_side); // sets ui_vp_player_char according to SELF_OFFSET, only a function bc it's used with desk_mod 4 and 5 void set_self_offset(const QString& p_list); @@ -318,9 +318,6 @@ public: // Toggles the judge buttons, whether they should appear or not. void show_judge_controls(bool visible); - void announce_case(QString title, bool def, bool pro, bool jud, bool jur, - bool steno); - void check_connection_received(); void start_clock(int id); @@ -741,14 +738,12 @@ private: AOButton *ui_reload_theme; AOButton *ui_call_mod; AOButton *ui_settings; - AOButton *ui_announce_casing; AOButton *ui_switch_area_music; QCheckBox *ui_pre; QCheckBox *ui_flip; QCheckBox *ui_additive; QCheckBox *ui_guard; - QCheckBox *ui_casing; QCheckBox *ui_immediate; QCheckBox *ui_showname_enable; @@ -852,8 +847,6 @@ public slots: void mod_called(QString p_ip); - void case_called(QString msg, bool def, bool pro, bool jud, bool jur, - bool steno); void on_reload_theme_clicked(); void update_ui_music_name(); @@ -975,7 +968,6 @@ private slots: void on_change_character_clicked(); void on_call_mod_clicked(); void on_settings_clicked(); - void on_announce_casing_clicked(); void on_pre_clicked(); void on_flip_clicked(); @@ -1016,8 +1008,6 @@ private slots: void on_switch_area_music_clicked(); - void on_casing_clicked(); - void on_application_state_changed(Qt::ApplicationState state); void ping_server(); diff --git a/include/datatypes.h b/include/datatypes.h index 682d68a..3a82eff 100644 --- a/include/datatypes.h +++ b/include/datatypes.h @@ -120,6 +120,17 @@ enum EMOTE_MOD_TYPE { PREANIM_ZOOM = 6, }; +enum DESK_MOD_TYPE { + DESK_HIDE = 0, + DESK_SHOW, + DESK_EMOTE_ONLY, + DESK_PRE_ONLY, + DESK_EMOTE_ONLY_EX, + DESK_PRE_ONLY_EX, + //"EX" for "expanded" + //dumb, i know, but throw the first stone if you have a better idea +}; + enum MUSIC_EFFECT { FADE_IN = 1, FADE_OUT = 2, SYNC_POS = 4 }; #endif // DATATYPES_H diff --git a/include/demoserver.h b/include/demoserver.h index bb0baed..877d5cc 100644 --- a/include/demoserver.h +++ b/include/demoserver.h @@ -22,6 +22,8 @@ public: int port = 27088; int max_wait = -1; + void set_demo_file(QString filepath); + private: void handle_packet(AOPacket *packet); void load_demo(QString filename); @@ -39,6 +41,7 @@ private: QString p_path; QTimer *timer; int elapsed_time = 0; + QString filename; private slots: void accept_connection(); diff --git a/include/file_functions.h b/include/file_functions.h index 8bb2e5f..31e2e16 100644 --- a/include/file_functions.h +++ b/include/file_functions.h @@ -4,9 +4,11 @@ #include <QDir> #include <QFileInfo> #include <QString> +#include <QCoreApplication> bool file_exists(QString file_path); bool dir_exists(QString file_path); bool exists(QString p_path); +QString get_base_path(); #endif // FILE_FUNCTIONS_H diff --git a/include/interfaces/server_dialog.h b/include/interfaces/server_dialog.h new file mode 100644 index 0000000..63817d0 --- /dev/null +++ b/include/interfaces/server_dialog.h @@ -0,0 +1,21 @@ +#include <QDialog> +#pragma once + +#ifndef AO_UI_FAVORITESERVERDIALOG +#define AO_UI_FAVORITESRRVERDIALOG +namespace AttorneyOnline { + namespace UI { + class FavoriteServerDialog : public QDialog { + public: + FavoriteServerDialog() = default; + ~FavoriteServerDialog() = default; + + const QString DEFAULT_UI = "favorite_server_dialog.ui"; + const int TCP_INDEX = 0; + private slots: + virtual void onSavePressed() = 0; + virtual void onCancelPressed() = 0; + }; + } // namespace UI +} // namespace AttorneyOnline +#endif // AO_UI_FAVORITESERVERDIALOG diff --git a/include/lobby.h b/include/lobby.h index d39d7f9..e5d3576 100644 --- a/include/lobby.h +++ b/include/lobby.h @@ -1,22 +1,17 @@ #ifndef LOBBY_H #define LOBBY_H -#include "aobutton.h" -#include "aoimage.h" -#include "aopacket.h" -#include "aotextarea.h" - -#include <QLabel> -#include <QLineEdit> -#include <QListWidget> +class QLabel; +class QLineEdit; +class QPushButton; +class QTextBrowser; +class QTreeWidget; +class QTreeWidgetItem; + #include <QMainWindow> -#include <QPlainTextEdit> -#include <QProgressBar> -#include <QTextBrowser> -#include <QTreeWidget> -#include <QDebug> -#include <QScrollBar> -#include <QHeaderView> +#include "networkmanager.h" +#include "file_functions.h" + #ifdef ANDROID #include <QtAndroidExtras/QtAndroid> #endif @@ -25,91 +20,88 @@ class AOApplication; class Lobby : public QMainWindow { Q_OBJECT - public: - Lobby(AOApplication *p_ao_app); + Lobby(AOApplication *p_ao_app, NetworkManager *p_net_man = nullptr); + ~Lobby(); - void set_widgets(); + void set_player_count(int players_online, int max_players); + void set_server_description(const QString &server_description); void list_servers(); + int get_selected_server(); + int pageSelected(); + +private: + AOApplication *ao_app; + NetworkManager *net_manager; + + const QString DEFAULT_UI = "lobby.ui"; + void list_favorites(); + void list_demos(); void get_motd(); void check_for_updates(); - void append_chatmessage(QString f_name, QString f_message); - void append_error(QString f_message); - void set_player_count(int players_online, int max_players); - void set_server_description(const QString& server_description); - void set_stylesheet(QWidget *widget); - void set_stylesheets(); - void set_fonts(); - void set_font(QWidget *widget, QString p_identifier); - void set_loading_text(QString p_text); - void show_loading_overlay() { ui_loading_background->show(); } - void hide_loading_overlay() { ui_loading_background->hide(); } - QString get_chatlog(); - int get_selected_server(); - void enable_connect_button(); void reset_selection(); - void set_loading_value(int p_value); - - bool public_servers_selected = true; - bool doubleclicked = false; + int last_index = -1; - ~Lobby(); + enum TabPage { SERVER, FAVORITES, DEMOS }; -private: - AOApplication *ao_app; + // UI-file Lobby - AOImage *ui_background; + // Top Row + QLabel *ui_game_version_lbl; + QPushButton *ui_settings_button; + QPushButton *ui_about_button; - AOButton *ui_public_servers; - AOButton *ui_favorites; + // Server, Favs and Demo lists + QTabWidget *ui_connections_tabview; - AOButton *ui_refresh; - AOButton *ui_add_to_fav; - AOButton *ui_remove_from_fav; - AOButton *ui_connect; + QTreeWidget *ui_serverlist_tree; + QLineEdit *ui_serverlist_search; - QLabel *ui_version; - AOButton *ui_about; + QTreeWidget *ui_favorites_tree; + QLineEdit *ui_favorites_search; - AOButton *ui_settings; + QTreeWidget *ui_demo_tree; + QLineEdit *ui_demo_search; - QTreeWidget *ui_server_list; - QLineEdit *ui_server_search; + QPushButton *ui_add_to_favorite_button; + QPushButton *ui_add_server_button; + QPushButton *ui_remove_from_favorites_button; + QPushButton *ui_edit_favorite_button; + QPushButton *ui_direct_connect_button; + QPushButton *ui_refresh_button; - QLabel *ui_player_count; - AOTextArea *ui_description; + // Serverinfo / MOTD Horizontal Row + QTextBrowser *ui_motd_text; - AOTextArea *ui_chatbox; + QLabel *ui_server_player_count_lbl; + QTextBrowser *ui_server_description_text; + QPushButton *ui_connect_button; - AOImage *ui_loading_background; - QTextEdit *ui_loading_text; - QProgressBar *ui_progress_bar; - AOButton *ui_cancel; + // Optional Widget + QTextBrowser *ui_game_changelog_text; - int last_index = -1; + void loadUI(); - void set_size_and_pos(QWidget *p_widget, QString p_identifier); + TabPage current_page = SERVER; private slots: - void on_public_servers_clicked(); - void on_favorites_clicked(); - - void on_refresh_pressed(); + void on_tab_changed(int index); void on_refresh_released(); - void on_add_to_fav_pressed(); + void on_direct_connect_released(); void on_add_to_fav_released(); - void on_remove_from_fav_pressed(); + void on_add_server_to_fave_released(); + void on_edit_favorite_released(); void on_remove_from_fav_released(); - void on_connect_pressed(); - void on_connect_released(); void on_about_clicked(); - void on_settings_clicked(); void on_server_list_clicked(QTreeWidgetItem *p_item, int column); - void on_server_list_doubleclicked(QTreeWidgetItem *p_item, int column); - void on_server_list_context_menu_requested(const QPoint &point); + void on_list_doubleclicked(QTreeWidgetItem *p_item, int column); + void on_favorite_tree_clicked(QTreeWidgetItem *p_item, int column); void on_server_search_edited(QString p_text); + void on_demo_clicked(QTreeWidgetItem *item, int column); + void onReloadThemeRequested(); // Oh boy. + void onSettingsRequested(); }; #endif // LOBBY_H diff --git a/include/networkmanager.h b/include/networkmanager.h index 705fb9e..052bc9b 100644 --- a/include/networkmanager.h +++ b/include/networkmanager.h @@ -51,9 +51,13 @@ public: void connect_to_server(server_type p_server); void disconnect_from_server(); +signals: + void server_connected(bool state); + public slots: void get_server_list(const std::function<void()> &cb); void ship_server_packet(QString p_packet); + void join_to_server(); void handle_server_packet(const QString& p_data); void request_document(MSDocumentType document_type, diff --git a/include/options.h b/include/options.h new file mode 100644 index 0000000..aba346c --- /dev/null +++ b/include/options.h @@ -0,0 +1,290 @@ +#ifndef OPTIONS_H +#define OPTIONS_H + + +#include <QCoreApplication> +#include <QSettings> +#include <datatypes.h> + +class Options { +private: + /** + * @brief QSettings object for config.ini + */ + QSettings config; + + /** + * @brief QSettings object for favorite_servers.ini + */ + QSettings favorite; + + + void migrateCallwords(); + + /** + * @brief Constructor for options class. + */ + Options(); + + QString m_server_subtheme; + +public: + Options(Options const &) = delete; + void operator=(Options const &) = delete; + + static Options &getInstance() + { + static Options instance; + return instance; + } + + /** + * @brief Migrates old configuration files to the most recent format. + */ + void migrate(); + + // Reads the theme from config.ini and loads it into the currenttheme + // variable + QString theme() const; + void setTheme(QString value); + + // Returns the value of oocname in config.ini + QString oocName() const; + void setOocName(QString value); + + // Returns the blip rate from config.ini (once per X symbols) + int blipRate() const; + void setBlipRate(int value); + + // Returns true if blank blips is enabled in config.ini and false otherwise + bool blankBlip() const; + void setBlankBlip(bool value); + + // Returns true if looping sound effects are enabled in the config.ini + bool loopingSfx() const; + void setLoopingSfx(bool value); + + // Returns true if stop music on objection is enabled in the config.ini + bool objectionStopMusic() const; + void setObjectionStopMusic(bool value); + + // Returns true if streaming is enabled in the config.ini + bool streamingEnabled() const; + void setStreamingEnabled(bool value); + + // Returns the value of defaultmusic in config.ini + int musicVolume() const; + void setMusicVolume(int value); + + // Returns the value of defaultsfx in config.ini + int sfxVolume() const; + void setSfxVolume(int value); + + // Returns the value of defaultblip in config.ini + int blipVolume() const; + void setBlipVolume(int value); + + // Returns the value of suppressaudio in config.ini + int defaultSuppressAudio() const; + void setDefaultSupressedAudio(int value); + + // Returns the value if objections interrupt and skip the message queue + // from the config.ini. + bool objectionSkipQueueEnabled() const; + void setObjectionSkipQueueEnabled(bool value); + + // returns if log will show messages as-received, while viewport will parse + // according to the queue (Text Stay Time) from the config.ini + bool desynchronisedLogsEnabled() const; + void setDesynchronisedLogsEnabled(bool value); + + // Returns the value of whether Discord should be enabled on startup + // from the config.ini. + bool discordEnabled() const; + void setDiscordEnabled(bool value); + + // Returns the value of whether shaking should be enabled. + // from the config.ini. + bool shakeEnabled() const; + void setShakeEnabled(bool value); + + // Returns the value of whether effects should be Enabled. + // from the config.ini. + bool effectsEnabled() const; + void setEffectsEnabled(bool value); + + // Returns the value of whether frame-specific effects defined in char.ini + // should be sent/received over the network. from the config.ini. + bool networkedFrameSfxEnabled() const; + void setNetworkedFrameSfxEnabled(bool value); + + // Returns the value of whether colored ic log should be a thing. + // from the config.ini. + bool colorLogEnabled() const; + void setColorLogEnabled(bool value); + + // Returns the value of whether sticky sounds should be a thing. + // from the config.ini. + bool clearSoundsDropdownOnPlayEnabled() const; + void setClearSoundsDropdownOnPlayEnabled(bool value); + + // Returns the value of whether sticky effects should be a thing. + // from the config.ini. + bool clearEffectsDropdownOnPlayEnabled() const; + void setClearEffectsDropdownOnPlayEnabled(bool value); + + // Returns the value of whether sticky preanims should be a thing. + // from the config.ini. + bool clearPreOnPlayEnabled() const; + void setClearPreOnPlayEnabled(bool value); + + // Returns the value of whether custom chatboxes should be a thing. + // from the config.ini. + // I am increasingly maddened by the lack of dynamic auto-generation system + // for settings. + bool customChatboxEnabled() const; + void setCustomChatboxEnabled(bool value); + + // Returns the value of characer sticker (avatar) setting + bool characterStickerEnabled() const; + void setCharacterStickerEnabled(bool value); + + // Returns the value of whether continuous playback should be used + // from the config.ini. + bool continuousPlaybackEnabled() const; + void setContinuousPlaybackEnabled(bool value); + + // Returns the value of whether stopping music by double clicking category + // should be used from the config.ini. + bool stopMusicOnCategoryEnabled() const; + void setStopMusicOnCategoryEnabled(bool value); + + // Returns the value of the maximum amount of lines the IC chatlog + // may contain, from config.ini. + int maxLogSize() const; + void setMaxLogSize(int value); + + // Current wait time between messages for the queue system + int textStayTime() const; + void setTextStayTime(int value); + + // Returns the letter display speed during text crawl in in-character messages + int textCrawlSpeed() const; + void setTextCrawlSpeed(int value); + + // Returns Minimum amount of time (in miliseconds) that must pass before the + // next Enter key press will send your IC message. (new behaviour) + int chatRateLimit() const; + void setChatRateLimit(int value); + + // Returns whether the log should go upwards (new behaviour) + // or downwards (vanilla behaviour). + bool logDirectionDownwards() const; + void setLogDirectionDownwards(bool value); + + // Returns whether the log should separate name from text via newline or : + bool logNewline() const; + void setLogNewline(bool value); + + // Get spacing between IC log entries. + int logMargin() const; + void setLogMargin(int value); + + // Returns whether the log should have a timestamp. + bool logTimestampEnabled() const; + void setLogTimestampEnabled(bool value); + + // Returns the format string for the log timestamp + QString logTimestampFormat() const; + void setLogTimestampFormat(QString value); + + // Returns whether to log IC actions. + bool logIcActions() const; + void setLogIcActions(bool value); + + // Returns the username the user may have set in config.ini. + QString username() const; + void setUsername(QString value); + + // Returns the audio device used for the client. + QString audioOutputDevice() const; + void setAudioOutputDevice(QString value); + + // Returns whether the user would like to have custom shownames on by default. + bool customShownameEnabled() const; + void setCustomShownameEnabled(bool value); + + // Returns the showname the user may have set in config.ini. + QString shownameOnJoin() const; + void setShownameOnJoin(QString value); + + // Get if text file logging is Enabled + bool logToTextFileEnabled() const; + void setLogToTextFileEnabled(bool value); + + // Get if demo logging is Enabled + bool logToDemoFileEnabled() const; + void setLogToDemoFileEnabled(bool value); + + // Get the subtheme from settings + QString subTheme() const; + QString settingsSubTheme() const; + void setSettingsSubTheme(QString value); + + // Returns the server- + QString serverSubTheme() const; + void setServerSubTheme(QString value); + + // Get if the theme is animated + bool animatedThemeEnabled() const; + void setAnimatedThemeEnabled(bool value); + + // Get the default scaling method + QString defaultScalingMode() const; + void setDefaultScalingMode(QString value); + + // Get a list of custom mount paths + QStringList mountPaths() const; + void setMountPaths(QStringList value); + + // Get whether to opt out of player count metrics sent to the master server + bool playerCountOptout() const; + void setPlayerCountOptout(bool value); + + // Get if sfx can be sent to play on idle + bool playSelectedSFXOnIdle() const; + void setPlaySelectedSFXOnIdle(bool value); + + // Whether opening evidence requires a single or double click + bool evidenceDoubleClickEdit() const; + void setEvidenceDoubleClickEdit(bool value); + + // Supplies an alternative masterserver URL + QString alternativeMasterserver() const; + void setAlternativeMasterserver(QString value); + + // Language the client loads on start. + QString language() const; + void setLanguage(QString value); + + // Callwords notify the user when the word/words are used in a game message. + QStringList callwords() const; + void setCallwords(QStringList value); + + // Clears the configuration file. Essentially restoring it to default. + void clearConfig(); + + // Loads the favorite servers + QVector<server_type> favorites(); + void setFavorites(QVector<server_type> value); + + // Interactions with favorite servers + void removeFavorite(int index); + void addFavorite(server_type server); + void updateFavorite(server_type server, int index); + + // Theming Nonesense! + QString getUIAsset(QString f_asset_name); +}; + +#endif // OPTIONS_H diff --git a/include/widgets/add_server_dialog.h b/include/widgets/add_server_dialog.h new file mode 100644 index 0000000..db999bf --- /dev/null +++ b/include/widgets/add_server_dialog.h @@ -0,0 +1,44 @@ +#pragma once + +#ifndef ADD_SERVER_DIALOG_H +#define ADD_SERVER_DIALOG_H + +#include "interfaces/server_dialog.h" + +class QComboBox; +class QDialogButton; +class QDialogButtonBox; +class QLabel; +class QLineEdit; +class QPlainTextEdit; +class QPushButton; +class QSpinBox; + +class AddServerDialog : public AttorneyOnline::UI::FavoriteServerDialog { + Q_OBJECT +public: + AddServerDialog(); + ~AddServerDialog() = default; + +private: + QWidget *ui_widget; + + QLineEdit *ui_server_display_name_edit; + QLineEdit *ui_server_hostname_edit; + QSpinBox *ui_server_port_box; + QComboBox *ui_server_protocol_box; + QPlainTextEdit *ui_server_description_edit; + QDialogButtonBox *ui_server_dialog_button; + + // Legacy Server UI + QLabel *ui_server_legacy_lbl; + QLineEdit *ui_server_legacy_edit; + QPushButton *ui_server_legacy_load_button; + +private slots: + void onSavePressed() override; + void onCancelPressed() override; + void parseLegacyServerEntry(); +}; + +#endif // ADD_SERVER_DIALOG_H diff --git a/include/widgets/aooptionsdialog.h b/include/widgets/aooptionsdialog.h new file mode 100644 index 0000000..dcc66c1 --- /dev/null +++ b/include/widgets/aooptionsdialog.h @@ -0,0 +1,159 @@ +#ifndef AOOPTIONSDIALOG_H +#define AOOPTIONSDIALOG_H + +#include "options.h" + +#include <QtCore/QVariant> +#include <QtWidgets/QApplication> + +class QCheckBox; +class QComboBox; +class QDialogButtonBox; +class QLineEdit; +class QPlainTextEdit; +class QScrollArea; +class QSpinBox; +class QTabWidget; +class QLabel; +class QAbstractButton; + + +#include <QtWidgets/QDialog> +#include <QDirIterator> +#include <QListWidget> +#include <QTextBrowser> +#include <QTextStream> + +class AOApplication; + +struct OptionEntry { + std::function<void()> load; + std::function<void()> save; +}; + +class AOOptionsDialog : public QDialog { + Q_OBJECT +public: + explicit AOOptionsDialog(QDialog *parent = nullptr, + AOApplication *p_ao_app = nullptr); + +private: + AOApplication *ao_app; + + // Dialog interaction buttons. Save/Discard/Restore Defaults + QDialogButtonBox *ui_settings_buttons; + + // The gameplay tab + QWidget *ui_settings_widget; + QComboBox *ui_theme_combobox; + QComboBox *ui_subtheme_combobox; + QPushButton *ui_theme_reload_button; + QPushButton *ui_theme_folder_button; + QCheckBox *ui_evidence_double_click_cb; + QCheckBox *ui_animated_theme_cb; + QSpinBox *ui_stay_time_spinbox; + QCheckBox *ui_instant_objection_cb; + QSpinBox *ui_text_crawl_spinbox; + QSpinBox *ui_chat_ratelimit_spinbox; + QFrame *ui_log_names_divider; + QLineEdit *ui_username_textbox; + QCheckBox *ui_showname_cb; + QLineEdit *ui_default_showname_textbox; + QFrame *ui_net_divider; + QLineEdit *ui_ms_textbox; + QCheckBox *ui_discord_cb; + QLabel *ui_language_label; + QComboBox *ui_language_combobox; + QLabel *ui_scaling_label; + QComboBox *ui_scaling_combobox; + QCheckBox *ui_shake_cb; + QCheckBox *ui_effects_cb; + QCheckBox *ui_framenetwork_cb; + QCheckBox *ui_colorlog_cb; + QCheckBox *ui_stickysounds_cb; + QCheckBox *ui_stickyeffects_cb; + QCheckBox *ui_stickypres_cb; + QCheckBox *ui_customchat_cb; + QCheckBox *ui_sticker_cb; + QCheckBox *ui_continuous_cb; + QCheckBox *ui_category_stop_cb; + QCheckBox *ui_sfx_on_idle_cb; + + // The callwords tab + QPlainTextEdit *ui_callwords_textbox; + QCheckBox *ui_callwords_char_textbox; + + // The audio tab + QWidget *ui_audio_tab; + QWidget *ui_audio_widget; + QComboBox *ui_audio_device_combobox; + QSpinBox *ui_suppress_audio_spinbox; + QFrame *ui_volume_blip_divider; + QSpinBox *ui_bliprate_spinbox; + QCheckBox *ui_blank_blips_cb; + QCheckBox *ui_loopsfx_cb; + QCheckBox *ui_objectmusic_cb; + QCheckBox *ui_disablestreams_cb; + + // The asset tab + QListWidget *ui_mount_list; + QPushButton *ui_mount_add; + QPushButton *ui_mount_remove; + QPushButton *ui_mount_up; + QPushButton *ui_mount_down; + QPushButton *ui_mount_clear_cache; + + // The logging tab + QCheckBox *ui_downwards_cb; + QSpinBox *ui_length_spinbox; + QCheckBox *ui_log_newline_cb; + QSpinBox *ui_log_margin_spinbox; + QLabel *ui_log_timestamp_format_lbl; + QCheckBox *ui_log_timestamp_cb; + QComboBox *ui_log_timestamp_format_combobox; + QCheckBox *ui_desync_logs_cb; + QCheckBox *ui_log_ic_actions_cb; + QCheckBox *ui_log_text_cb; + QCheckBox *ui_log_demo_cb; + + /** + * Allows the AO2 master server hoster to go broke. + */ + QWidget *ui_privacy_tab; + QCheckBox *ui_privacy_optout_cb; + QFrame *ui_privacy_separator; + QTextBrowser *ui_privacy_policy; + + bool asset_cache_dirty = false; + + bool needsDefaultAudioDevice(); + void populateAudioDevices(); + void updateValues(); + + QVector<OptionEntry> optionEntries; + + template <typename T, typename V> + void setWidgetData(T *widget, const V &value); + + template <typename T, typename V> V widgetData(T *widget) const; + + template <typename T, typename V> + void registerOption(const QString &widgetName, V (Options::*getter)() const, + void (Options::*setter)(V)); + +signals: + void reloadThemeRequest(); + +private slots: + void savePressed(); + void discardPressed(); + void buttonClicked(QAbstractButton *button); + void onTimestampFormatEdited(); + void timestampCbChanged(int state); + void onReloadThemeClicked(); + void themeChanged(int i); + void setupUI(); + +}; + +#endif // AOOPTIONSDIALOG_H diff --git a/include/widgets/direct_connect_dialog.h b/include/widgets/direct_connect_dialog.h new file mode 100644 index 0000000..9317524 --- /dev/null +++ b/include/widgets/direct_connect_dialog.h @@ -0,0 +1,46 @@ +#ifndef DIRECT_CONNECT_DIALOG_H +#define DIRECT_CONNECT_DIALOG_H + +#include <QDialog> +#include <QTimer> +#include <QRegularExpression> + +class QLabel; +class QSpinBox; +class QLineEdit; +class QPushButton; +class QComboBox; +class QLabel; +class NetworkManager; + +class DirectConnectDialog : public QDialog { + Q_OBJECT +public: + DirectConnectDialog(NetworkManager* p_net_manager); + ~DirectConnectDialog() = default; + +private slots: + void onConnectPressed(); + void onServerConnected(); + void onConnectTimeout(); + +private: + NetworkManager* net_manager; + + QLineEdit* ui_direct_hostname_edit; + + QLabel* ui_direct_connection_status_lbl; + 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";; + +}; + +#endif // DIRECT_CONNECT_DIALOG_H diff --git a/include/widgets/edit_server_dialog.h b/include/widgets/edit_server_dialog.h new file mode 100644 index 0000000..3c4595e --- /dev/null +++ b/include/widgets/edit_server_dialog.h @@ -0,0 +1,46 @@ +#pragma once + +#ifndef EDIT_SERVER_DIALOG_H +#define EDIT_SERVER_DIALOG_H + +#include "interfaces/server_dialog.h" + +class QPushButton; +class QDialogButton; +class QLabel; +class QLineEdit; +class QComboBox; +class QSpinBox; +class QPlainTextEdit; +class QDialogButtonBox; + +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 slots: + void onSavePressed() override; + void onCancelPressed() override; +}; + +#endif // EDIT_SERVER_DIALOG_H |
