diff --git a/courtroom.cpp b/courtroom.cpp index 3abe83c..2bd909b 100644 --- a/courtroom.cpp +++ b/courtroom.cpp @@ -78,7 +78,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() ui_ic_chatlog = new QPlainTextEdit(this); ui_ic_chatlog->setReadOnly(true); - ui_ms_chatlog = new QTextBrowser(this); + ui_ms_chatlog = new AOTextArea(this); ui_ms_chatlog->setReadOnly(true); ui_ms_chatlog->setOpenExternalLinks(true); ui_ms_chatlog->hide(); @@ -723,42 +723,9 @@ void Courtroom::list_music() } } -void Courtroom::append_ms_chatmessage(QString f_message) +void Courtroom::append_ms_chatmessage(QString f_name, QString f_message) { - const QTextCursor old_cursor = ui_ms_chatlog->textCursor(); - const int old_scrollbar_value = ui_ms_chatlog->verticalScrollBar()->value(); - const bool is_scrolled_down = old_scrollbar_value == ui_ms_chatlog->verticalScrollBar()->maximum(); - - ui_ms_chatlog->moveCursor(QTextCursor::End); - - QStringList word_list = f_message.split(" "); - - for (QString i_word : word_list) - { - if (i_word.startsWith("http")) - { - i_word.replace("\n", "").replace("\r", ""); - ui_ms_chatlog->insertHtml("" + i_word + " "); - } - else - ui_ms_chatlog->insertPlainText(i_word + " "); - } - - //ui_ms_chatlog->append(f_message); - ui_ms_chatlog->insertPlainText("\n"); - - if (old_cursor.hasSelection() || !is_scrolled_down) - { - // The user has selected text or scrolled away from the bottom: maintain position. - ui_ms_chatlog->setTextCursor(old_cursor); - ui_ms_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); - } - else - { - // The user hasn't selected any text and the scrollbar is at the bottom: scroll to the bottom. - ui_ms_chatlog->moveCursor(QTextCursor::End); - ui_ms_chatlog->verticalScrollBar()->setValue(ui_ms_chatlog->verticalScrollBar()->maximum()); - } + ui_ms_chatlog->append_chatmessage(f_name, f_message); } void Courtroom::append_server_chatmessage(QString p_name, QString p_message) @@ -775,7 +742,8 @@ void Courtroom::on_chat_return_pressed() objection_state == 0) return; - //MS#chat# + //MS# + //deskmod# //pre-emote# //character# //emote# @@ -1288,9 +1256,6 @@ void Courtroom::play_sfx() return; sfx_player->play(sfx_name + ".wav"); - - //T0D0: add audio implementation - //QString sfx_name = m_chatmessage[SFX_NAME]; } void Courtroom::set_scene() @@ -1299,66 +1264,74 @@ void Courtroom::set_scene() show_testimony(); //witness is default if pos is invalid - QString f_image = "witnessempty.png"; - - QString f_side = m_chatmessage[SIDE]; + QString f_background = "witnessempty.png"; + QString f_desk_image = "stand.png"; QString f_desk_mod = m_chatmessage[DESK_MOD]; + QString f_side = m_chatmessage[SIDE]; if (f_side == "def") - f_image = "defenseempty.png"; - else if (f_side == "pro") - f_image = "prosecutorempty.png"; - else if (f_side == "jud") - f_image = "judgestand.png"; - else if (f_side == "hld") - f_image = "helperstand.png"; - else if (f_side == "hlp") - f_image = "prohelperstand.png"; - - ui_vp_background->set_image(f_image); - - //we're done if deskmod is 0 or the deskmod is chat and it's a nondesk side - if (f_desk_mod == "0" || - (f_desk_mod == "chat" && (f_side == "hlp" || f_side == "hld" || f_side == "jud"))) { - ui_vp_desk->hide(); - ui_vp_legacy_desk->hide(); - return; - } - - if (is_ao2_bg) - { - QString desk_image = "stand.png"; - - if (f_side == "def") - desk_image = "defensedesk.png"; - else if (f_side == "pro") - desk_image = "prosecutiondesk.png"; - - ui_vp_desk->set_image(desk_image); - ui_vp_legacy_desk->hide(); - ui_vp_desk->show(); - } - else if (f_side == "def" || f_side == "pro") - { - QString desk_image; - - if (f_side == "def") - desk_image = "bancodefensa.png"; + f_background = "defenseempty.png"; + if (is_ao2_bg) + f_desk_image = "defensedesk.png"; else - desk_image = "bancoacusacion.png"; - - ui_vp_legacy_desk->set_legacy_desk(desk_image); - ui_vp_desk->hide(); - ui_vp_legacy_desk->show(); + f_desk_image = "bancodefensa.png"; + } + else if (f_side == "pro") + { + f_background = "prosecutorempty.png"; + if (is_ao2_bg) + f_desk_image = "prosecutiondesk.png"; + else + f_desk_image = "bancoacusacion.png"; + } + else if (f_side == "jud") + { + f_background = "judgestand.png"; + f_desk_image = "judgedesk.png"; + } + else if (f_side == "hld") + { + f_background = "helperstand.png"; + f_desk_image = "helperdesk.png"; + } + else if (f_side == "hlp") + { + f_background = "prohelperstand.png"; + f_desk_image = "prohelperdesk.png"; } - //assume wit or invalid side else { - ui_vp_desk->set_image("estrado.png"); + if (is_ao2_bg) + f_desk_image = "stand.png"; + else + f_desk_image = "estrado.png"; + } + + ui_vp_background->set_image(f_background); + ui_vp_desk->set_image(f_desk_image); + ui_vp_legacy_desk->set_image(f_desk_image); + + if (f_desk_mod == "0" || (f_desk_mod != "1" && + (f_side == "jud" || + f_side == "hld" || + f_side == "hlp"))) + { + ui_vp_desk->hide(); + ui_vp_legacy_desk->hide(); + } + else if (is_ao2_bg || (f_side == "jud" || + f_side == "hld" || + f_side == "hlp")) + { ui_vp_legacy_desk->hide(); ui_vp_desk->show(); } + else + { + ui_vp_desk->hide(); + ui_vp_legacy_desk->show(); + } } void Courtroom::set_text_color() diff --git a/courtroom.h b/courtroom.h index d617bd8..3bafbdc 100644 --- a/courtroom.h +++ b/courtroom.h @@ -76,7 +76,7 @@ public: void enter_courtroom(int p_cid); void list_music(); - void append_ms_chatmessage(QString f_message); + void append_ms_chatmessage(QString f_name, QString f_message); void append_server_chatmessage(QString p_name, QString p_message); void handle_chatmessage(QStringList *p_contents); @@ -228,7 +228,7 @@ private: QPlainTextEdit *ui_ic_chatlog; - QTextBrowser *ui_ms_chatlog; + AOTextArea *ui_ms_chatlog; AOTextArea *ui_server_chatlog; QListWidget *ui_mute_list; diff --git a/lobby.cpp b/lobby.cpp index 0ded1fb..7c8f08f 100644 --- a/lobby.cpp +++ b/lobby.cpp @@ -25,7 +25,7 @@ Lobby::Lobby(AOApplication *p_ao_app) : QMainWindow() ui_server_list = new QListWidget(this); ui_player_count = new QLabel(this); ui_description = new QPlainTextEdit(this); - ui_chatbox = new QTextBrowser(this); + ui_chatbox = new AOTextArea(this); ui_chatbox->setOpenExternalLinks(true); ui_chatname = new QLineEdit(this); ui_chatname->setPlaceholderText("Name"); @@ -352,42 +352,9 @@ void Lobby::list_favorites() } } -void Lobby::append_chatmessage(QString f_message) +void Lobby::append_chatmessage(QString f_name, QString f_message) { - const QTextCursor old_cursor = ui_chatbox->textCursor(); - const int old_scrollbar_value = ui_chatbox->verticalScrollBar()->value(); - const bool is_scrolled_down = old_scrollbar_value == ui_chatbox->verticalScrollBar()->maximum(); - - ui_chatbox->moveCursor(QTextCursor::End); - - QStringList word_list = f_message.split(" "); - - for (QString i_word : word_list) - { - if (i_word.startsWith("http")) - { - i_word.replace("\n", "").replace("\r", ""); - ui_chatbox->insertHtml("" + i_word + " "); - } - else - ui_chatbox->insertPlainText(i_word + " "); - } - - //ui_ms_chatlog->append(f_message); - ui_chatbox->insertPlainText("\n"); - - if (old_cursor.hasSelection() || !is_scrolled_down) - { - // The user has selected text or scrolled away from the bottom: maintain position. - ui_chatbox->setTextCursor(old_cursor); - ui_chatbox->verticalScrollBar()->setValue(old_scrollbar_value); - } - else - { - // The user hasn't selected any text and the scrollbar is at the bottom: scroll to the bottom. - ui_chatbox->moveCursor(QTextCursor::End); - ui_chatbox->verticalScrollBar()->setValue(ui_chatbox->verticalScrollBar()->maximum()); - } + ui_chatbox->append_chatmessage(f_name, f_message); } void Lobby::set_player_count(int players_online, int max_players) diff --git a/lobby.h b/lobby.h index 05b89cb..ef56166 100644 --- a/lobby.h +++ b/lobby.h @@ -4,6 +4,7 @@ #include "aoimage.h" #include "aobutton.h" #include "aopacket.h" +#include "aotextarea.h" #include #include @@ -25,7 +26,7 @@ public: void set_widgets(); void list_servers(); void list_favorites(); - void append_chatmessage(QString f_message); + void append_chatmessage(QString f_name, QString f_message); void set_player_count(int players_online, int max_players); void set_loading_text(QString p_text); void show_loading_overlay(){ui_loading_background->show();} @@ -59,7 +60,7 @@ private: QLabel *ui_player_count; QPlainTextEdit *ui_description; - QTextBrowser *ui_chatbox; + AOTextArea *ui_chatbox; QLineEdit *ui_chatname; QLineEdit *ui_chatmessage; diff --git a/packet_distribution.cpp b/packet_distribution.cpp index 857e730..4c0e15f 100644 --- a/packet_distribution.cpp +++ b/packet_distribution.cpp @@ -49,22 +49,28 @@ void AOApplication::ms_packet_received(AOPacket *p_packet) } else if (header == "CT") { - QString message_line; + QString f_name, f_message; if (f_contents.size() == 1) - message_line = f_contents.at(0); + { + f_name = ""; + f_message = f_contents.at(0); + } else if (f_contents.size() >= 2) - message_line = f_contents.at(0) + ": " + f_contents.at(1); + { + f_name = f_contents.at(0); + f_message = f_contents.at(1); + } else goto end; if (lobby_constructed) { - w_lobby->append_chatmessage(message_line); + w_lobby->append_chatmessage(f_name, f_message); } if (courtroom_constructed && courtroom_loaded) { - w_courtroom->append_ms_chatmessage(message_line); + w_courtroom->append_ms_chatmessage(f_name, f_message); } } else if (header == "AO2CHECK") @@ -453,7 +459,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) goto end; if (lobby_constructed) - w_courtroom->append_ms_chatmessage(w_lobby->get_chatlog()); + w_courtroom->append_ms_chatmessage("", w_lobby->get_chatlog()); w_courtroom->done_received();