The log now has an option to go both ways.

- Due to the log's nature, this must be set manually in one's
`config.ini`.
This commit is contained in:
Cerapter 2018-07-27 23:39:56 +02:00
parent 7d476867cb
commit 366389c6bc
3 changed files with 67 additions and 23 deletions

View File

@ -133,6 +133,10 @@ public:
//may contain, from config.ini. //may contain, from config.ini.
int get_max_log_size(); int get_max_log_size();
// Returns whether the log should go upwards (new behaviour)
// or downwards (vanilla behaviour).
bool get_log_goes_downwards();
// Returns the username the user may have set in config.ini. // Returns the username the user may have set in config.ini.
QString get_default_username(); QString get_default_username();

View File

@ -1175,15 +1175,14 @@ void Courtroom::handle_chatmessage_3()
void Courtroom::append_ic_text(QString p_text, QString p_name) void Courtroom::append_ic_text(QString p_text, QString p_name)
{ {
bool downwards = ao_app->get_log_goes_downwards();
QTextCharFormat bold; QTextCharFormat bold;
QTextCharFormat normal; QTextCharFormat normal;
bold.setFontWeight(QFont::Bold); bold.setFontWeight(QFont::Bold);
normal.setFontWeight(QFont::Normal); normal.setFontWeight(QFont::Normal);
const QTextCursor old_cursor = ui_ic_chatlog->textCursor(); const QTextCursor old_cursor = ui_ic_chatlog->textCursor();
const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value(); const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value();
const bool is_scrolled_down = old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->maximum();
ui_ic_chatlog->moveCursor(QTextCursor::End);
// Get rid of centering. // Get rid of centering.
if(p_text.startsWith(": ~~")) if(p_text.startsWith(": ~~"))
@ -1313,29 +1312,58 @@ void Courtroom::append_ic_text(QString p_text, QString p_name)
// After all of that, let's jot down the message into the IC chatlog. // After all of that, let's jot down the message into the IC chatlog.
if (!first_message_sent) if (downwards)
{ {
ui_ic_chatlog->textCursor().insertText(p_name, bold); const bool is_scrolled_down = old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->maximum();
first_message_sent = true;
}
else
{
ui_ic_chatlog->textCursor().insertText('\n' + p_name, bold);
}
ui_ic_chatlog->textCursor().insertText(p_text, normal);
if (old_cursor.hasSelection() || !is_scrolled_down)
{
// The user has selected text or scrolled away from the top: 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::End); ui_ic_chatlog->moveCursor(QTextCursor::End);
ui_ic_chatlog->verticalScrollBar()->setValue(ui_ic_chatlog->verticalScrollBar()->maximum());
if (!first_message_sent)
{
ui_ic_chatlog->textCursor().insertText(p_name, bold);
first_message_sent = true;
}
else
{
ui_ic_chatlog->textCursor().insertText('\n' + p_name, bold);
}
ui_ic_chatlog->textCursor().insertText(p_text, normal);
if (old_cursor.hasSelection() || !is_scrolled_down)
{
// 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 bottom: scroll to the top.
ui_ic_chatlog->moveCursor(QTextCursor::End);
ui_ic_chatlog->verticalScrollBar()->setValue(ui_ic_chatlog->verticalScrollBar()->maximum());
}
}
else
{
const bool is_scrolled_up = old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->minimum();
ui_ic_chatlog->moveCursor(QTextCursor::Start);
ui_ic_chatlog->textCursor().insertText(p_name, bold);
ui_ic_chatlog->textCursor().insertText(p_text + '\n', normal);
if (old_cursor.hasSelection() || !is_scrolled_up)
{
// The user has selected text or scrolled away from the top: 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(ui_ic_chatlog->verticalScrollBar()->minimum());
}
} }
} }

View File

@ -99,6 +99,18 @@ int AOApplication::get_max_log_size()
else return f_result.toInt(); else return f_result.toInt();
} }
bool AOApplication::get_log_goes_downwards()
{
QString f_result = read_config("log_goes_downwards");
if (f_result == "true")
return true;
else if (f_result == "false")
return false;
else
return true;
}
QString AOApplication::get_default_username() QString AOApplication::get_default_username()
{ {
QString f_result = read_config("default_username"); QString f_result = read_config("default_username");