diff options
| author | David Skoland <davidskoland@gmail.com> | 2017-01-29 12:15:58 +0100 |
|---|---|---|
| committer | David Skoland <davidskoland@gmail.com> | 2017-01-29 12:15:58 +0100 |
| commit | effd224b4498d419adc24d641eebce020cee9301 (patch) | |
| tree | 0a4f309c31873e71b2fa06d75bdd13086be7e2e8 /courtroom.cpp | |
| parent | ab321a4a7af042eed2b9cb7c82fe8345a9d7b594 (diff) | |
added more flexible scrollbar in courtroom
Diffstat (limited to 'courtroom.cpp')
| -rw-r--r-- | courtroom.cpp | 25 |
1 files changed, 24 insertions, 1 deletions
diff --git a/courtroom.cpp b/courtroom.cpp index 71ff16b0..ef542d86 100644 --- a/courtroom.cpp +++ b/courtroom.cpp @@ -6,6 +6,7 @@ #include "file_functions.h" #include <QDebug> +#include <QScrollBar> Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() { @@ -459,8 +460,30 @@ void Courtroom::handle_chatmessage(QStringList *p_contents) { QString f_message = p_contents->at(2) + ": " + p_contents->at(4) + '\n'; + //ui_ic_chatlog->moveCursor(QTextCursor::Start); + //ui_ic_chatlog->insertPlainText(f_message); + + const QTextCursor old_cursor = ui_ic_chatlog->textCursor(); + const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value(); + const bool is_scrolled_up = old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->minimum(); + ui_ic_chatlog->moveCursor(QTextCursor::Start); - ui_ic_chatlog->insertPlainText(f_message); + + ui_ic_chatlog->textCursor().insertText(f_message); + + if (old_cursor.hasSelection() || !is_scrolled_up) + { + // The user has selected text or scrolled away from the bottom: maintain position. + ui_ic_chatlog->setTextCursor(old_cursor); + ui_ic_chatlog->verticalScrollBar()->setValue(old_scrollbar_value); + } + else + { + // The user hasn't selected any text and the scrollbar is at the top: scroll to the top. + ui_ic_chatlog->moveCursor(QTextCursor::Start); + //ui_ic_chatlog->verticalScrollBar()->setValue(verticalScrollBar()->minimum()); + ui_ic_chatlog->verticalScrollBar()->setValue(ui_ic_chatlog->verticalScrollBar()->minimum()); + } //T0D0: play objection gif->preanimation if there is any } |
