diff options
| author | Salanto <62221668+Salanto@users.noreply.github.com> | 2024-05-18 03:33:43 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2024-05-18 03:33:43 +0200 |
| commit | 51338e30e046f1a62c84049b34577f0f3b5db6e3 (patch) | |
| tree | 283c95f8f776ed852d03a816388695afd65c0f73 /src/courtroom.h | |
| parent | 469e293a1885e49f1d5994d41ac7cfc9f4666952 (diff) | |
| parent | f9c7205210fb9f768f583065971ece09e6b5eb03 (diff) | |
Merge pull request #957 from AttorneyOnline/kaleidoscope
The Kaleidoscope - Hell, it's about time.
Diffstat (limited to 'src/courtroom.h')
| -rw-r--r-- | src/courtroom.h | 963 |
1 files changed, 963 insertions, 0 deletions
diff --git a/src/courtroom.h b/src/courtroom.h new file mode 100644 index 00000000..0f49839c --- /dev/null +++ b/src/courtroom.h @@ -0,0 +1,963 @@ +#pragma once + +#include "aoapplication.h" +#include "aoblipplayer.h" +#include "aobutton.h" +#include "aocharbutton.h" +#include "aoclocklabel.h" +#include "aoemotebutton.h" +#include "aoemotepreview.h" +#include "aoevidencebutton.h" +#include "aoevidencedisplay.h" +#include "aoimage.h" +#include "aolayer.h" +#include "aomusicplayer.h" +#include "aopacket.h" +#include "aosfxplayer.h" +#include "aotextarea.h" +#include "aotextboxwidgets.h" +#include "chatlogpiece.h" +#include "datatypes.h" +#include "debug_functions.h" +#include "eventfilters.h" +#include "file_functions.h" +#include "hardware_functions.h" +#include "lobby.h" +#include "scrolltext.h" +#include "widgets/aooptionsdialog.h" + +#include <QCheckBox> +#include <QCloseEvent> +#include <QComboBox> +#include <QHeaderView> +#include <QLineEdit> +#include <QListWidget> +#include <QMainWindow> +#include <QMap> +#include <QPlainTextEdit> +#include <QQueue> +#include <QSlider> +#include <QSpinBox> +#include <QTextBrowser> +#include <QTreeWidget> +#include <QVector> + +#include <QBrush> +#include <QDebug> +#include <QDesktopServices> +#include <QElapsedTimer> +#include <QFileDialog> +#include <QFont> +#include <QInputDialog> +#include <QMenu> +#include <QMessageBox> +#include <QParallelAnimationGroup> +#include <QPropertyAnimation> +#include <QRandomGenerator> +#include <QRegularExpression> +#include <QScrollBar> +#include <QTextBoundaryFinder> +#include <QTextCharFormat> + +#include <QFuture> + +#include <algorithm> +#include <stack> + +class AOApplication; + +class Courtroom : public QMainWindow +{ + Q_OBJECT + +public: + explicit Courtroom(AOApplication *p_ao_app); + ~Courtroom(); + + void update_audio_volume(); + + void append_char(CharacterSlot p_char); + void append_music(QString f_music); + void append_area(QString f_area); + void clear_chars(); + void clear_music(); + void clear_areas(); + + void fix_last_area(); + + void arup_append(int players, QString status, QString cm, QString locked); + + void arup_clear(); + + void arup_modify(int type, int place, QString value); + + void character_loading_finished(); + + void set_courtroom_size(); + + // sets position of widgets based on theme ini files + void set_widgets(); + + // sets font size based on theme ini files + void set_font(QWidget *widget, QString class_name, QString p_identifier, QString p_char = QString(), QString font_name = QString(), int f_pointsize = 0); + + // Get the properly constructed font + QFont get_qfont(QString font_name, int f_pointsize, bool antialias = true); + + // actual operation of setting the font on a widget + void set_qfont(QWidget *widget, QString class_name, QFont font, QColor f_color = Qt::black, bool bold = false, bool outlined = false, QColor outline_color = QColor(0, 0, 0), int outline_width = 1); + + // helper function that calls above function on the relevant widgets + void set_fonts(QString p_char = QString()); + + // sets dropdown menu stylesheet + void set_stylesheet(QWidget *widget); + + // helper funciton that call above function on the relevant widgets + void set_stylesheets(); + + void set_window_title(QString p_title); + + // reads theme and sets size and pos based on the identifier (using p_misc if provided) + void set_size_and_pos(QWidget *p_widget, QString p_identifier, QString p_misc = QString()); + + // sets status as taken on character with cid n_char and places proper shading + // on charselect + void set_taken(int n_char, bool p_taken); + + // sets the current background to argument. also does some checks to see if + // it's a legacy bg + void set_background(QString p_background, bool display = false); + + // sets the local character pos/side to use. + void set_side(QString p_side); + + // sets the pos dropdown + void set_pos_dropdown(QStringList pos_dropdowns); + + // sets the evidence list member variable to argument + void set_evidence_list(QVector<EvidenceItem> &p_evi_list); + + // called when a DONE#% from the server was received + void done_received(); + + // sets the local mute list based on characters available on the server + void set_mute_list(); + + // Sets the local pair list based on the characters available on the server. + void set_pair_list(); + + // sets desk and bg based on pos in chatmessage + 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); + + // takes in serverD-formatted IP list as prints a converted version to server + // OOC admittedly poorly named + void set_ip_list(QString p_list); + + // disables chat if current cid matches second argument + // enables if p_muted is false + void set_mute(bool p_muted, int p_cid); + + // cid = character id, returns the cid of the currently selected character + QString get_current_char(); + QString get_current_background(); + + // updates character to p_cid and updates necessary ui elements + // Optional "char_name" is the iniswap we're using + void update_character(int p_cid, QString char_name = QString(), bool reset_emote = false); + + // properly sets up some varibles: resets user state + void enter_courtroom(); + + // helper function that populates ui_music_list with the contents of + // music_list + void list_music(); + void list_areas(); + + // Debug log (formerly master server chat log) + void debug_message_handler(QtMsgType type, const QMessageLogContext &context, const QString &msg); + + // OOC chat log + void append_server_chatmessage(QString p_name, QString p_message, QString p_color); + + // Add the message packet to the stack + void chatmessage_enqueue(QStringList p_contents); + + // Parse the chat message packet and unpack it into the m_chatmessage[ITEM] format + void unpack_chatmessage(QStringList p_contents); + + // Skip the current queue, adding all the queue messages to the logs if desynchronized logs are disabled + void skip_chatmessage_queue(); + + enum LogMode + { + IO_ONLY, + DISPLAY_ONLY, + DISPLAY_AND_IO, + QUEUED, + }; + // Log the message contents and information such as evidence presenting etc. into the log file, the IC log, or both. + void log_chatmessage(QString f_message, int f_char_id, QString f_showname = QString(), QString f_char = QString(), QString f_objection_mod = QString(), int f_evi_id = 0, int f_color = 0, LogMode f_log_mode = IO_ONLY, bool sender = false); + + // Log the message contents and information such as evidence presenting etc. into the IC logs + void handle_callwords(); + + // Handle the objection logic, if it's interrupting the currently parsing message. + // Returns true if this message has an objection, otherwise returns false. The result decides when to call handle_ic_message() + bool handle_objection(); + + // Display the evidence image box when presenting evidence in IC + void display_evidence_image(); + + // Handle the stuff that comes when the character appears on screen and starts animating (preanims etc.) + void handle_ic_message(); + + // Display the character. + void display_character(); + + // Display the character's pair if present. + void display_pair_character(QString other_charid, QString other_offset); + + // Handle the emote modifier value and proceed through the logic accordingly. + void handle_emote_mod(int emote_mod, bool p_immediate); + + // Initialize the chatbox image, showname shenanigans, custom chatboxes, etc. + void initialize_chatbox(); + + // Finally start displaying the chatbox we initialized, display the evidence, and play the talking or idle emote for the character. + // Callwords are also handled here. + void handle_ic_speaking(); + + // This function filters out the common CC inline text trickery, for appending + // to the IC chatlog. + QString filter_ic_text(QString p_text, bool colorize = false, int pos = -1, int default_color = 0); + + void log_ic_text(QString p_name, QString p_showname, QString p_message, QString p_action = QString(), int p_color = 0, bool p_selfname = false); + + // adds text to the IC chatlog. p_name first as bold then p_text then a newlin + // this function keeps the chatlog scrolled to the top unless there's text + // selected + // or the user isn't already scrolled to the top + void append_ic_text(QString p_text, QString p_name = QString(), QString action = QString(), int color = 0, bool selfname = false, QDateTime timestamp = QDateTime::currentDateTime(), bool ghost = false); + + // clear sent messages that appear on the IC log but haven't been delivered + // yet to other players + void pop_ic_ghost(); + + // prints who played the song to IC chat and plays said song(if found on local + // filesystem) takes in a list where the first element is the song name and + // the second is the char id of who played it + void handle_song(QStringList *p_contents); + + void play_preanim(bool immediate); + + // plays the witness testimony or cross examination animation based on + // argument + void handle_wtce(QString p_wtce, int variant); + + // sets the hp bar of defense(p_bar 1) or pro(p_bar 2) + // state is an number between 0 and 10 inclusive + void set_hp_bar(int p_bar, int p_state); + + // Toggles the judge buttons, whether they should appear or not. + void show_judge_controls(bool visible); + + void start_clock(int id, qint64 msecs); + void set_clock(int id, qint64 msecs); + void pause_clock(int id); + void stop_clock(int id); + void set_clock_visibility(int id, bool visible); + void skip_clocks(qint64 msecs); + + qint64 pong(); + // Truncates text so it fits within theme-specified boundaries and sets the tooltip to the full string + void truncate_label_text(QWidget *p_widget, QString p_identifier); + + void on_authentication_state_received(int p_state); + + enum JudgeState + { + POS_DEPENDENT = -1, + HIDE_CONTROLS = 0, + SHOW_CONTROLS = 1 + }; + + JudgeState get_judge_state(); + void set_judge_state(JudgeState new_state); + void set_judge_buttons(); + +private: + AOApplication *ao_app; + + // Percentage of audio that is suppressed when client is not in focus + int suppress_audio = 0; + + int m_courtroom_width = 714; + int m_courtroom_height = 668; + + int m_viewport_x = 0; + int m_viewport_y = 0; + + int m_viewport_width = 256; + int m_viewport_height = 192; + + int maximumMessages = 0; + + QParallelAnimationGroup *screenshake_animation_group = new QParallelAnimationGroup; + + bool next_character_is_not_special = false; // If true, write the + // next character as it is. + + bool message_is_centered = false; + + int current_display_speed = 3; + int text_crawl = 40; + double message_display_mult[7] = {0, 0.25, 0.65, 1, 1.25, 1.75, 2.25}; + + // The character ID of the character this user wants to appear alongside with. + int other_charid = -1; + + // The horizontal offset this user has given if they want to appear alongside someone. + int char_offset = 0; + + // The vertical offset this user has given. + int char_vert_offset = 0; + + // 0 = in front, 1 = behind + int pair_order = 0; + + QVector<CharacterSlot> char_list; + QVector<EvidenceItem> evidence_list; + QVector<QString> music_list; + QVector<QString> area_list; + + QVector<int> arup_players; + QVector<QString> arup_statuses; + QVector<QString> arup_cms; + QVector<QString> arup_locks; + + QVector<ChatLogPiece> ic_chatlog_history; + QString last_ic_message; + + QQueue<QStringList> chatmessage_queue; + + // triggers ping_server() every 45 seconds + QTimer *keepalive_timer; + + // determines how fast messages tick onto screen + QTimer *chat_tick_timer; + + // count up timer to check how long it took for us to get a response from ping_server() + QElapsedTimer ping_timer; + bool is_pinging = false; + + // int chat_tick_interval = 60; + // which tick position(character in chat message) we are at + int tick_pos = 0; + // the actual document tick pos we gotta worry about for making the text + // scroll better + int real_tick_pos = 0; + // used to determine how often blips sound + int blip_ticker = 0; + int blip_rate = 2; + int rainbow_counter = 0; + bool rainbow_appended = false; + bool blank_blip = false; + bool chatbox_always_show = false; + + // Used for getting the current maximum blocks allowed in the IC chatlog. + int log_maximum_blocks = 0; + + // True, if the log should go downwards. + bool log_goes_downwards = true; + + // True, if log should display colors. + bool log_colors = true; + + // True, if the log should display the message like name<br>text instead of + // name: text + bool log_newline = false; + + // True, if the log should include RP actions like interjections, showing evidence, etc. + bool log_ic_actions = true; + + // Margin in pixels between log entries for the IC log. + int log_margin = 0; + + // True, if the log should have a timestamp. + bool log_timestamp = false; + + // format string for aforementioned log timestamp + QString log_timestamp_format; + + // How long in miliseconds should the objection wait before appearing. + int objection_threshold = 1500; + + // delay before chat messages starts ticking + QTimer *text_delay_timer; + + // delay before the next queue entry is going to be processed + QTimer *text_queue_timer; + + // delay before sfx plays + QTimer *sfx_delay_timer; + + // every time point in char.inis times this equals the final time + const int time_mod = 40; + + // the amount of time non-animated objection/hold it/takethat images stay + // onscreen for in ms, and the maximum amount of time any interjections are + // allowed to play + const int shout_static_time = 724; + const int shout_max_time = 1500; + + // the amount of time non-animated guilty/not guilty images stay onscreen for + // in ms, and the maximum amount of time g/ng images are allowed to play + const int verdict_static_time = 3000; + const int verdict_max_time = 4000; + + // the amount of time non-animated witness testimony/cross-examination images + // stay onscreen for in ms, and the maximum time any wt/ce image is allowed to + // play + const int wtce_static_time = 1500; + const int wtce_max_time = 4000; + + // characters we consider punctuation + const QString punctuation_chars = ".,?!:;"; + + // amount by which we multiply the delay when we parse punctuation chars + const int punctuation_modifier = 3; + + // amount of ghost blocks + int ghost_blocks = 0; + + // Minumum and maximum number of parameters in the MS packet + static const int MS_MINIMUM = 15; + static const int MS_MAXIMUM = 31; + QString m_chatmessage[MS_MAXIMUM]; + + QString previous_ic_message; + QString additive_previous; + + // char id, muted or not + QMap<int, bool> mute_map; + + // QVector<int> muted_cids; + + bool is_muted = false; + + JudgeState judge_state = POS_DEPENDENT; + + // state of animation, 0 = objecting, 1 = preanim, 2 = talking, 3 = idle, 4 = + // noniterrupting preanim, 5 = (c) animation + int anim_state = 3; + + // whether or not current color is a talking one + bool color_is_talking = true; + + // state of text ticking, 0 = not yet ticking, 1 = ticking in progress, 2 = + // ticking done + int text_state = 2; + + // character id, which index of the char_list the player is + int m_cid = -1; + // cid and this may differ in cases of ini-editing + QString current_char; + + int objection_state = 0; + QString objection_custom; + struct CustomObjection + { + QString name; + QString filename; + }; + QList<CustomObjection> custom_objections_list; + int realization_state = 0; + int screenshake_state = 0; + int text_color = 0; + + // How many unique user colors are possible + static const int max_colors = 12; + + // Text Color-related optimization: + // Current color list indexes to real color references + QVector<int> color_row_to_number; + + // List of associated RGB colors for this color index + QVector<QColor> color_rgb_list; + + // Same as above but populated from misc/default's config + QVector<QColor> default_color_rgb_list; + + // Get a color index from an arbitrary misc config + void gen_char_rgb_list(QString p_misc); + QVector<QColor> char_color_rgb_list; + + // Misc we used for the last message, and the one we're using now. Used to avoid loading assets when it's not needed + QString current_misc; + QString last_misc; + + // List of markdown start characters, their index is tied to the color index + QStringList color_markdown_start_list; + + // List of markdown end characters, their index is tied to the color index + QStringList color_markdown_end_list; + + // Whether or not we're supposed to remove this char during parsing + QVector<bool> color_markdown_remove_list; + + // Whether or not this color allows us to play the talking animation + QVector<bool> color_markdown_talking_list; + // Text Color-related optimization END + + // List of all currently available pos + QStringList pos_dropdown_list; + + // Current list file sorted line by line + QStringList sound_list; + + // Current SFX the user put in for the sfx dropdown list + QString custom_sfx; + + // is the message we're about to send supposed to present evidence? + bool is_presenting_evidence = false; + bool c_played = false; // whether we've played a (c)-style postanimation yet + + // have we already presented evidence for this message? + bool evidence_presented = false; + + QString effect; + + // Music effect flags we want to send to server when we play music + int music_flags = FADE_OUT; + + int defense_bar_state = 0; + int prosecution_bar_state = 0; + + int current_char_page = 0; + int char_columns = 10; + int char_rows = 9; + int max_chars_on_page = 90; + + const int button_width = 60; + const int button_height = 60; + + int current_emote_page = 0; + int current_emote = 0; + int emote_columns = 5; + int emote_rows = 2; + int max_emotes_on_page = 10; + + QVector<EvidenceItem> local_evidence_list; + QVector<EvidenceItem> private_evidence_list; + QVector<EvidenceItem> global_evidence_list; + + // false = use private_evidence_list + bool current_evidence_global = true; + + int current_evidence_page = 0; + int current_evidence = 0; + int evidence_columns = 6; + int evidence_rows = 3; + int max_evidence_on_page = 18; + + // whether the ooc chat is server or master chat, true is server + bool server_ooc = true; + + QString current_background = "default"; + QString current_side; + + QString last_music_search; + QString last_area_search; + + QBrush free_brush; + QBrush lfp_brush; + QBrush casing_brush; + QBrush recess_brush; + QBrush rp_brush; + QBrush gaming_brush; + QBrush locked_brush; + + AOMusicPlayer *music_player; + AOSfxPlayer *sfx_player; + AOSfxPlayer *objection_player; + AOBlipPlayer *blip_player; + + AOSfxPlayer *modcall_player; + + AOImage *ui_background; + + QWidget *ui_viewport; + BackgroundLayer *ui_vp_background; + SplashLayer *ui_vp_speedlines; + CharLayer *ui_vp_player_char; + CharLayer *ui_vp_sideplayer_char; + BackgroundLayer *ui_vp_desk; + AOEvidenceDisplay *ui_vp_evidence_display; + AOImage *ui_vp_chatbox; + AOChatboxLabel *ui_vp_showname; + InterfaceLayer *ui_vp_chat_arrow; + QTextEdit *ui_vp_message; + SplashLayer *ui_vp_testimony; + SplashLayer *ui_vp_wtce; + EffectLayer *ui_vp_effect; + SplashLayer *ui_vp_objection; + + QTextEdit *ui_ic_chatlog; + + AOTextArea *ui_debug_log; + AOTextArea *ui_server_chatlog; + + QListWidget *ui_mute_list; + QTreeWidget *ui_area_list; + QTreeWidget *ui_music_list; + + ScrollText *ui_music_name; + InterfaceLayer *ui_music_display; + + StickerLayer *ui_vp_sticker; + + static const int max_clocks = 5; + AOClockLabel *ui_clock[max_clocks]; + + AOButton *ui_pair_button; + QListWidget *ui_pair_list; + QSpinBox *ui_pair_offset_spinbox; + QSpinBox *ui_pair_vert_offset_spinbox; + + QComboBox *ui_pair_order_dropdown; + + QLineEdit *ui_ic_chat_message; + AOLineEditFilter *ui_ic_chat_message_filter; + QLineEdit *ui_ic_chat_name; + QLineEdit *ui_custom_blips; + + QLineEdit *ui_ooc_chat_message; + QLineEdit *ui_ooc_chat_name; + + // QLineEdit *ui_area_password; + QLineEdit *ui_music_search; + + QWidget *ui_emotes; + QVector<AOEmoteButton *> ui_emote_list; + AOButton *ui_emote_left; + AOButton *ui_emote_right; + + QMenu *emote_menu; + AOEmotePreview *emote_preview; + + QComboBox *ui_emote_dropdown; + QComboBox *ui_pos_dropdown; + AOButton *ui_pos_remove; + + QComboBox *ui_iniswap_dropdown; + AOButton *ui_iniswap_remove; + + QComboBox *ui_sfx_dropdown; + AOButton *ui_sfx_remove; + + QComboBox *ui_effects_dropdown; + + AOImage *ui_defense_bar; + AOImage *ui_prosecution_bar; + + QLabel *ui_music_label; + QLabel *ui_sfx_label; + QLabel *ui_blip_label; + + AOButton *ui_hold_it; + AOButton *ui_objection; + AOButton *ui_take_that; + + AOButton *ui_ooc_toggle; + + AOButton *ui_witness_testimony; + AOButton *ui_cross_examination; + AOButton *ui_guilty; + AOButton *ui_not_guilty; + + AOButton *ui_change_character; + AOButton *ui_reload_theme; + AOButton *ui_call_mod; + AOButton *ui_settings; + AOButton *ui_switch_area_music; + + QCheckBox *ui_pre; + QCheckBox *ui_flip; + QCheckBox *ui_additive; + QCheckBox *ui_guard; + + QCheckBox *ui_immediate; + QCheckBox *ui_showname_enable; + + AOButton *ui_custom_objection; + QMenu *custom_obj_menu; + AOButton *ui_realization; + AOButton *ui_screenshake; + AOButton *ui_mute; + + AOButton *ui_defense_plus; + AOButton *ui_defense_minus; + + AOButton *ui_prosecution_plus; + AOButton *ui_prosecution_minus; + + QComboBox *ui_text_color; + + QSlider *ui_music_slider; + QSlider *ui_sfx_slider; + QSlider *ui_blip_slider; + + AOImage *ui_muted; + + AOButton *ui_evidence_button; + AOImage *ui_evidence; + QLineEdit *ui_evidence_name; + AOLineEditFilter *ui_evidence_name_filter; + QWidget *ui_evidence_buttons; + QVector<AOEvidenceButton *> ui_evidence_list; + AOButton *ui_evidence_left; + AOButton *ui_evidence_right; + AOButton *ui_evidence_present; + AOImage *ui_evidence_overlay; + AOButton *ui_evidence_delete; + QLineEdit *ui_evidence_image_name; + AOLineEditFilter *ui_evidence_image_name_filter; + AOButton *ui_evidence_image_button; + AOButton *ui_evidence_x; + AOButton *ui_evidence_ok; + AOButton *ui_evidence_switch; + AOButton *ui_evidence_transfer; + AOButton *ui_evidence_save; + AOButton *ui_evidence_load; + QPlainTextEdit *ui_evidence_description; + + AOImage *ui_char_select_background; + + // pretty list of characters + QTreeWidget *ui_char_list; + + // abstract widget to hold char buttons + QWidget *ui_char_buttons; + + QVector<AOCharButton *> ui_char_button_list; + QVector<AOCharButton *> ui_char_button_list_filtered; + + AOButton *ui_back_to_lobby; + + QLineEdit *ui_char_password; + + AOButton *ui_char_select_left; + AOButton *ui_char_select_right; + + AOButton *ui_spectator; + + QLineEdit *ui_char_search; + QCheckBox *ui_char_passworded; + QCheckBox *ui_char_taken; + + void construct_char_select(); + void set_char_select(); + void set_char_select_page(); + void char_clicked(int n_char); + void on_char_button_context_menu_requested(const QPoint &pos); + void put_button_in_place(int starting, int chars_on_this_page); + void filter_character_list(); + + void initialize_emotes(); + void refresh_emotes(); + void set_emote_page(); + void set_emote_dropdown(); + + void initialize_evidence(); + void refresh_evidence(); + void show_evidence(int f_real_id); + void set_evidence_page(); + + void reset_ui(); + + void regenerate_ic_chatlog(); +public Q_SLOTS: + void objection_done(); + void preanim_done(); + void do_screenshake(); + void do_flash(); + void do_effect(QString fx_path, QString fx_sound, QString p_char, QString p_folder); + void play_char_sfx(QString sfx_name); + + void mod_called(QString p_ip); + + void on_reload_theme_clicked(); + + void update_ui_music_name(); + +private Q_SLOTS: + void start_chat_ticking(); + void play_sfx(); + + void chat_tick(); + + void on_mute_list_clicked(QModelIndex p_index); + void on_pair_list_clicked(QModelIndex p_index); + + void on_chat_return_pressed(); + + void on_ooc_return_pressed(); + + void on_music_search_return_pressed(); + void on_music_search_edited(QString p_text); + void on_music_list_double_clicked(QTreeWidgetItem *p_item, int column); + void on_music_list_context_menu_requested(const QPoint &pos); + void music_fade_out(bool toggle); + void music_fade_in(bool toggle); + void music_synchronize(bool toggle); + void music_random(); + void music_list_expand_all(); + void music_list_collapse_all(); + void music_stop(bool no_effects = false); + void on_area_list_double_clicked(QTreeWidgetItem *p_item, int column); + + void select_emote(int p_id); + + void on_emote_clicked(int p_id); + + void on_emote_left_clicked(); + void on_emote_right_clicked(); + + void on_emote_dropdown_changed(int p_index); + void on_pos_dropdown_changed(int p_index); + void on_pos_dropdown_changed(QString p_text); + void on_pos_dropdown_context_menu_requested(const QPoint &pos); + void on_pos_remove_clicked(); + + void on_iniswap_dropdown_changed(int p_index); + void set_iniswap_dropdown(); + void on_iniswap_context_menu_requested(const QPoint &pos); + void on_iniswap_edit_requested(); + void on_iniswap_remove_clicked(); + + void on_sfx_dropdown_changed(int p_index); + void on_sfx_dropdown_custom(QString p_sfx); + void set_sfx_dropdown(); + void on_sfx_context_menu_requested(const QPoint &pos); + void on_sfx_play_clicked(); + void on_sfx_edit_requested(); + void on_sfx_remove_clicked(); + + void set_effects_dropdown(); + void on_effects_context_menu_requested(const QPoint &pos); + void on_effects_edit_requested(); + void on_character_effects_edit_requested(); + void on_effects_dropdown_changed(int p_index); + bool effects_dropdown_find_and_set(QString effect); + + QString get_char_sfx(); + int get_char_sfx_delay(); + + void on_evidence_name_edited(); + void on_evidence_image_name_edited(); + void on_evidence_image_button_clicked(); + void on_evidence_clicked(int p_id); + void on_evidence_double_clicked(int p_id); + + void on_evidence_hover(int p_id, bool p_state); + + void on_evidence_left_clicked(); + void on_evidence_right_clicked(); + void on_evidence_present_clicked(); + + void on_hold_it_clicked(); + void on_objection_clicked(); + void on_take_that_clicked(); + void on_custom_objection_clicked(); + void show_custom_objection_menu(const QPoint &pos); + + void show_emote_menu(const QPoint &pos); + + void on_realization_clicked(); + void on_screenshake_clicked(); + + void on_mute_clicked(); + void on_pair_clicked(); + void on_pair_order_dropdown_changed(int p_index); + + void on_defense_minus_clicked(); + void on_defense_plus_clicked(); + void on_prosecution_minus_clicked(); + void on_prosecution_plus_clicked(); + + void on_text_color_changed(int p_color); + void on_text_color_context_menu_requested(const QPoint &pos); + void set_text_color_dropdown(); + + void on_music_slider_moved(int p_value); + void on_sfx_slider_moved(int p_value); + void on_blip_slider_moved(int p_value); + + void on_log_limit_changed(int value); + void on_pair_offset_changed(int value); + void on_pair_vert_offset_changed(int value); + + void on_ooc_toggle_clicked(); + + void on_witness_testimony_clicked(); + void on_cross_examination_clicked(); + void on_not_guilty_clicked(); + void on_guilty_clicked(); + + void on_change_character_clicked(); + void on_call_mod_clicked(); + void on_settings_clicked(); + + void on_pre_clicked(); + void on_flip_clicked(); + void on_additive_clicked(); + void on_guard_clicked(); + + void on_showname_enable_clicked(); + + void on_evidence_button_clicked(); + void on_evidence_context_menu_requested(const QPoint &pos); + + void on_evidence_delete_clicked(); + bool on_evidence_x_clicked(); + void on_evidence_ok_clicked(); + void on_evidence_switch_clicked(); + void on_evidence_transfer_clicked(); + + void on_evidence_edited(); + + void evidence_close(); + void evidence_switch(bool global); + void on_evidence_save_clicked(); + void on_evidence_load_clicked(); + void evidence_save(QString filename); + void evidence_load(QString filename); + bool compare_evidence_changed(EvidenceItem evi_a, EvidenceItem evi_b); + + void on_back_to_lobby_clicked(); + + void on_char_list_double_clicked(QTreeWidgetItem *p_item, int column); + void on_char_select_left_clicked(); + void on_char_select_right_clicked(); + void on_char_search_changed(); + void on_char_taken_clicked(); + void on_char_passworded_clicked(); + + void on_spectator_clicked(); + + void on_switch_area_music_clicked(); + + void on_application_state_changed(Qt::ApplicationState state); + + void ping_server(); + + // Proceed to parse the oldest chatmessage and remove it from the stack + void chatmessage_dequeue(); + + void preview_emote(QString emote); + void update_emote_preview(); +}; |
