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:
parent
7d476867cb
commit
366389c6bc
@ -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();
|
||||||
|
|
||||||
|
@ -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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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");
|
||||||
|
Loading…
Reference in New Issue
Block a user