IC log rewrite (#259)
* Rewrite the IC Log code to drastically reduce code duplication and have both downward and upward mode in the same function Regenerate the IC Log in set_widgets() function, making sure the maximum_blocks is accounted for and clearing the log to prepare for different log mode (upwards/downwards) if it's different from previous Add placeholder text telling the user the direction in which the log will go Remove useless first_message_sent global boolean, a remnant from a w e a k e r c o d e r m a n * Add log_colors boolean to reduce color I/O happening in append_ic_text (optimization meme) Clear the IC log when log_colors setting changes and reload theme is pressed Fix https://github.com/AttorneyOnline/AO2-Client/issues/221 * Add configurable margin between IC log entries Add configurable newline/singleline log mode Options in settings for these * Add optional timestamps * Un-hardcode "played music" from the chatlogpiece and introduce the "action" argument so that "presented evidence" is fully supported now Translate "has presented evidence" Regenerate IC chatlog instead of clearing it, properly updating every element with the new configurations * Go away *temp, code duplication making me shid and cry rn Why is this not done in append_ic_text, or why isn't there a dedicated ic logging func aAAAaaaaAAAaa Fix presenting evidence not being properly logged Fix timestamp being UTC instead of local time (local time will not be as confusing) * okok it was a joke a big ol bamboozle you got gnomed haha rick rolled beaned stickbugged I did NOT copy paste code, no, I actually intended to fix copy pasted code all along. log_ic_text was always planned. (Fix copypasted code for ic_chatlog_history and consolidate it into a single log_ic_text func)
This commit is contained in:
parent
c984c57102
commit
cef0ebc6eb
@ -213,6 +213,15 @@ public:
|
||||
// or downwards (vanilla behaviour).
|
||||
bool get_log_goes_downwards();
|
||||
|
||||
// Returns whether the log should separate name from text via newline or :
|
||||
bool get_log_newline();
|
||||
|
||||
// Get spacing between IC log entries.
|
||||
int get_log_margin();
|
||||
|
||||
// Returns whether the log should have a timestamp.
|
||||
bool get_log_timestamp();
|
||||
|
||||
// Returns the username the user may have set in config.ini.
|
||||
QString get_default_username();
|
||||
|
||||
|
@ -46,6 +46,12 @@ private:
|
||||
QCheckBox *ui_downwards_cb;
|
||||
QLabel *ui_length_lbl;
|
||||
QSpinBox *ui_length_spinbox;
|
||||
QLabel *ui_log_newline_lbl;
|
||||
QCheckBox *ui_log_newline_cb;
|
||||
QLabel *ui_log_margin_lbl;
|
||||
QSpinBox *ui_log_margin_spinbox;
|
||||
QLabel *ui_log_timestamp_lbl;
|
||||
QCheckBox *ui_log_timestamp_cb;
|
||||
QFrame *ui_log_names_divider;
|
||||
QLineEdit *ui_username_textbox;
|
||||
QLabel *ui_username_lbl;
|
||||
|
@ -10,14 +10,14 @@ class chatlogpiece {
|
||||
public:
|
||||
chatlogpiece();
|
||||
chatlogpiece(QString p_name, QString p_showname, QString p_message,
|
||||
bool p_song,int color);
|
||||
QString p_action,int color);
|
||||
chatlogpiece(QString p_name, QString p_showname, QString p_message,
|
||||
bool p_song, int color, QDateTime p_datetime);
|
||||
QString p_action, int color, QDateTime p_datetime);
|
||||
|
||||
QString get_name();
|
||||
QString get_showname();
|
||||
QString get_message();
|
||||
bool is_song();
|
||||
QString get_action();
|
||||
QDateTime get_datetime();
|
||||
QString get_datetime_as_string();
|
||||
int get_chat_color();
|
||||
@ -27,9 +27,9 @@ private:
|
||||
QString name;
|
||||
QString showname;
|
||||
QString message;
|
||||
QString action;
|
||||
QDateTime datetime;
|
||||
int color;
|
||||
bool p_is_song;
|
||||
};
|
||||
|
||||
#endif // CHATLOGPIECE_H
|
||||
|
@ -218,6 +218,8 @@ public:
|
||||
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="", int p_color=0);
|
||||
|
||||
// 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
|
||||
@ -262,7 +264,6 @@ private:
|
||||
int m_viewport_width = 256;
|
||||
int m_viewport_height = 192;
|
||||
|
||||
bool first_message_sent = false;
|
||||
int maximumMessages = 0;
|
||||
|
||||
QParallelAnimationGroup *screenshake_animation_group =
|
||||
@ -319,7 +320,19 @@ private:
|
||||
int log_maximum_blocks = 0;
|
||||
|
||||
// True, if the log should go downwards.
|
||||
bool log_goes_downwards = false;
|
||||
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;
|
||||
|
||||
// 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;
|
||||
|
||||
// delay before chat messages starts ticking
|
||||
QTimer *text_delay_timer;
|
||||
@ -649,6 +662,8 @@ private:
|
||||
|
||||
void reset_ic();
|
||||
void reset_ui();
|
||||
|
||||
void regenerate_ic_chatlog();
|
||||
public slots:
|
||||
void objection_done();
|
||||
void preanim_done();
|
||||
|
@ -120,6 +120,49 @@ AOOptionsDialog::AOOptionsDialog(QWidget *parent, AOApplication *p_ao_app)
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_length_spinbox);
|
||||
|
||||
row += 1;
|
||||
ui_log_newline_lbl = new QLabel(ui_form_layout_widget);
|
||||
ui_log_newline_lbl->setText(tr("Log newline:"));
|
||||
ui_log_newline_lbl->setToolTip(
|
||||
tr("If ticked, new messages will appear separated, "
|
||||
"with the message coming on the next line after the name. "
|
||||
"When unticked, it displays it as 'name: message'."));
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_log_newline_lbl);
|
||||
|
||||
ui_log_newline_cb = new QCheckBox(ui_form_layout_widget);
|
||||
ui_log_newline_cb->setChecked(p_ao_app->get_log_newline());
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_log_newline_cb);
|
||||
|
||||
row += 1;
|
||||
ui_log_margin_lbl = new QLabel(ui_form_layout_widget);
|
||||
ui_log_margin_lbl->setText(tr("Log margin:"));
|
||||
ui_log_margin_lbl->setToolTip(tr(
|
||||
"The distance in pixels between each entry in the IC log. "
|
||||
"Default: 0."));
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_log_margin_lbl);
|
||||
|
||||
ui_log_margin_spinbox = new QSpinBox(ui_form_layout_widget);
|
||||
ui_log_margin_spinbox->setMaximum(1000);
|
||||
ui_log_margin_spinbox->setValue(p_ao_app->get_log_margin());
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_log_margin_spinbox);
|
||||
|
||||
row += 1;
|
||||
ui_log_timestamp_lbl = new QLabel(ui_form_layout_widget);
|
||||
ui_log_timestamp_lbl->setText(tr("Log timestamp:"));
|
||||
ui_log_timestamp_lbl->setToolTip(
|
||||
tr("If ticked, log will contain a timestamp in UTC before the name."));
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::LabelRole, ui_log_timestamp_lbl);
|
||||
|
||||
ui_log_timestamp_cb = new QCheckBox(ui_form_layout_widget);
|
||||
ui_log_timestamp_cb->setChecked(p_ao_app->get_log_timestamp());
|
||||
|
||||
ui_gameplay_form->setWidget(row, QFormLayout::FieldRole, ui_log_timestamp_cb);
|
||||
|
||||
row += 1;
|
||||
ui_log_names_divider = new QFrame(ui_form_layout_widget);
|
||||
ui_log_names_divider->setFrameShape(QFrame::HLine);
|
||||
@ -726,6 +769,9 @@ void AOOptionsDialog::save_pressed()
|
||||
configini->setValue("theme", ui_theme_combobox->currentText());
|
||||
configini->setValue("log_goes_downwards", ui_downwards_cb->isChecked());
|
||||
configini->setValue("log_maximum", ui_length_spinbox->value());
|
||||
configini->setValue("log_newline", ui_log_newline_cb->isChecked());
|
||||
configini->setValue("log_margin", ui_log_margin_spinbox->value());
|
||||
configini->setValue("log_timestamp", ui_log_timestamp_cb->isChecked());
|
||||
configini->setValue("default_username", ui_username_textbox->text());
|
||||
configini->setValue("show_custom_shownames", ui_showname_cb->isChecked());
|
||||
configini->setValue("master", ui_ms_textbox->text());
|
||||
|
@ -6,29 +6,29 @@ chatlogpiece::chatlogpiece()
|
||||
showname = tr("UNKNOWN");
|
||||
message = tr("UNKNOWN");
|
||||
color = 0;
|
||||
p_is_song = false;
|
||||
action = "";
|
||||
datetime = QDateTime::currentDateTime().toUTC();
|
||||
}
|
||||
|
||||
chatlogpiece::chatlogpiece(QString p_name, QString p_showname,
|
||||
QString p_message, bool p_song, int p_color)
|
||||
QString p_message, QString p_action, int p_color)
|
||||
{
|
||||
name = p_name;
|
||||
showname = p_showname;
|
||||
message = p_message;
|
||||
p_is_song = p_song;
|
||||
action = p_action;
|
||||
color = p_color;
|
||||
datetime = QDateTime::currentDateTime().toUTC();
|
||||
}
|
||||
|
||||
chatlogpiece::chatlogpiece(QString p_name, QString p_showname,
|
||||
QString p_message, bool p_song, int p_color,
|
||||
QString p_message, QString p_action, int p_color,
|
||||
QDateTime p_datetime)
|
||||
{
|
||||
name = p_name;
|
||||
showname = p_showname;
|
||||
message = p_message;
|
||||
p_is_song = p_song;
|
||||
action = p_action;
|
||||
color = p_color;
|
||||
datetime = p_datetime.toUTC();
|
||||
}
|
||||
@ -41,7 +41,7 @@ QString chatlogpiece::get_message() { return message; }
|
||||
|
||||
QDateTime chatlogpiece::get_datetime() { return datetime; }
|
||||
|
||||
bool chatlogpiece::is_song() { return p_is_song; }
|
||||
QString chatlogpiece::get_action() { return action; }
|
||||
|
||||
QString chatlogpiece::get_datetime_as_string() { return datetime.toString(); }
|
||||
|
||||
@ -54,13 +54,15 @@ QString chatlogpiece::get_full()
|
||||
full.append(get_datetime_as_string());
|
||||
full.append("] ");
|
||||
full.append(get_showname());
|
||||
full.append(" (");
|
||||
full.append(get_name());
|
||||
full.append(")");
|
||||
if (p_is_song)
|
||||
full.append(tr(" has played a song: "));
|
||||
else
|
||||
full.append(": ");
|
||||
if (get_showname() != get_name())
|
||||
{
|
||||
full.append(" (");
|
||||
full.append(get_name());
|
||||
full.append(")");
|
||||
}
|
||||
if (!get_action().isEmpty())
|
||||
full.append(" " + get_action());
|
||||
full.append(": ");
|
||||
full.append(get_message());
|
||||
|
||||
return full;
|
||||
|
@ -109,6 +109,10 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
|
||||
|
||||
log_maximum_blocks = ao_app->get_max_log_size();
|
||||
log_goes_downwards = ao_app->get_log_goes_downwards();
|
||||
log_colors = ao_app->is_colorlog_enabled();
|
||||
log_newline = ao_app->get_log_newline();
|
||||
log_margin = ao_app->get_log_margin();
|
||||
log_timestamp = ao_app->get_log_timestamp();
|
||||
|
||||
ui_ms_chatlog = new AOTextArea(this);
|
||||
ui_ms_chatlog->setReadOnly(true);
|
||||
@ -581,8 +585,20 @@ void Courtroom::set_widgets()
|
||||
ui_vp_objection->move(ui_viewport->x(), ui_viewport->y());
|
||||
ui_vp_objection->combo_resize(ui_viewport->width(), ui_viewport->height());
|
||||
|
||||
log_maximum_blocks = ao_app->get_max_log_size();
|
||||
|
||||
bool regenerate = log_goes_downwards != ao_app->get_log_goes_downwards() || log_colors != ao_app->is_colorlog_enabled() || log_newline != ao_app->get_log_newline() || log_margin != ao_app->get_log_margin() || log_timestamp != ao_app->get_log_timestamp();
|
||||
log_goes_downwards = ao_app->get_log_goes_downwards();
|
||||
log_colors = ao_app->is_colorlog_enabled();
|
||||
log_newline = ao_app->get_log_newline();
|
||||
log_margin = ao_app->get_log_margin();
|
||||
log_timestamp = ao_app->get_log_timestamp();
|
||||
if (regenerate)
|
||||
regenerate_ic_chatlog();
|
||||
|
||||
set_size_and_pos(ui_ic_chatlog, "ic_chatlog");
|
||||
ui_ic_chatlog->setFrameShape(QFrame::NoFrame);
|
||||
ui_ic_chatlog->setPlaceholderText(log_goes_downwards ? "▼ Log goes down ▼" : "▲ Log goes up ▲");
|
||||
|
||||
set_size_and_pos(ui_ms_chatlog, "ms_chatlog");
|
||||
ui_ms_chatlog->setFrameShape(QFrame::NoFrame);
|
||||
@ -1874,17 +1890,8 @@ void Courtroom::handle_chatmessage(QStringList *p_contents)
|
||||
|
||||
if (!m_chatmessage[MESSAGE].isEmpty() || ic_chatlog_history.isEmpty() || ic_chatlog_history.last().get_message() != "")
|
||||
{
|
||||
chatlogpiece log_entry(f_charname, f_displayname, m_chatmessage[MESSAGE], false,
|
||||
log_ic_text(f_charname, f_displayname, m_chatmessage[MESSAGE], "",
|
||||
m_chatmessage[TEXT_COLOR].toInt());
|
||||
ic_chatlog_history.append(log_entry);
|
||||
if (ao_app->get_auto_logging_enabled())
|
||||
ao_app->append_to_file(log_entry.get_full(), ao_app->log_filename, true);
|
||||
|
||||
while (ic_chatlog_history.size() > log_maximum_blocks &&
|
||||
log_maximum_blocks > 0) {
|
||||
ic_chatlog_history.removeFirst();
|
||||
}
|
||||
|
||||
append_ic_text(m_chatmessage[MESSAGE], f_displayname, "",
|
||||
m_chatmessage[TEXT_COLOR].toInt());
|
||||
}
|
||||
@ -2275,13 +2282,16 @@ void Courtroom::handle_chatmessage_3()
|
||||
if (f_evi_id > 0 && f_evi_id <= local_evidence_list.size()) {
|
||||
// shifted by 1 because 0 is no evidence per legacy standards
|
||||
QString f_image = local_evidence_list.at(f_evi_id - 1).image;
|
||||
QString f_name = local_evidence_list.at(f_evi_id - 1).name;
|
||||
QString f_evi_name = local_evidence_list.at(f_evi_id - 1).name;
|
||||
// def jud and hlp should display the evidence icon on the RIGHT side
|
||||
bool is_left_side = !(f_side == "def" || f_side == "hlp" ||
|
||||
f_side == "jud" || f_side == "jur");
|
||||
ui_vp_evidence_display->show_evidence(f_image, is_left_side,
|
||||
ui_sfx_slider->value());
|
||||
append_ic_text(f_name, f_showname, "has presented evidence");
|
||||
|
||||
log_ic_text(m_chatmessage[CHAR_NAME], m_chatmessage[SHOWNAME], f_evi_name, tr("has presented evidence"),
|
||||
m_chatmessage[TEXT_COLOR].toInt());
|
||||
append_ic_text(f_evi_name, f_showname, tr("has presented evidence"));
|
||||
}
|
||||
|
||||
int emote_mod = m_chatmessage[EMOTE_MOD].toInt();
|
||||
@ -2585,107 +2595,107 @@ QString Courtroom::filter_ic_text(QString p_text, bool html, int target_pos,
|
||||
return p_text_escaped;
|
||||
}
|
||||
|
||||
void Courtroom::log_ic_text(QString p_name, QString p_showname,
|
||||
QString p_message, QString p_action, int p_color)
|
||||
{
|
||||
chatlogpiece log_entry(p_name, p_showname, p_message, p_action,
|
||||
p_color);
|
||||
ic_chatlog_history.append(log_entry);
|
||||
if (ao_app->get_auto_logging_enabled())
|
||||
ao_app->append_to_file(log_entry.get_full(), ao_app->log_filename, true);
|
||||
|
||||
while (ic_chatlog_history.size() > log_maximum_blocks &&
|
||||
log_maximum_blocks > 0) {
|
||||
ic_chatlog_history.removeFirst();
|
||||
}
|
||||
}
|
||||
|
||||
void Courtroom::append_ic_text(QString p_text, QString p_name, QString p_action,
|
||||
int color)
|
||||
{
|
||||
QTextCharFormat bold;
|
||||
QTextCharFormat normal;
|
||||
QTextCharFormat italics;
|
||||
QTextBlockFormat format;
|
||||
bold.setFontWeight(QFont::Bold);
|
||||
normal.setFontWeight(QFont::Normal);
|
||||
italics.setFontItalic(true);
|
||||
format.setTopMargin(log_margin);
|
||||
const QTextCursor old_cursor = ui_ic_chatlog->textCursor();
|
||||
const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value();
|
||||
const bool need_newline = !ui_ic_chatlog->document()->isEmpty();
|
||||
const int scrollbar_target_value = log_goes_downwards ? ui_ic_chatlog->verticalScrollBar()->maximum() : ui_ic_chatlog->verticalScrollBar()->minimum();
|
||||
|
||||
if (p_action == "")
|
||||
p_text = filter_ic_text(p_text, ao_app->is_colorlog_enabled(), -1, color);
|
||||
ui_ic_chatlog->moveCursor(log_goes_downwards ? QTextCursor::End : QTextCursor::Start);
|
||||
|
||||
if (log_goes_downwards) {
|
||||
const bool is_scrolled_down =
|
||||
old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->maximum();
|
||||
// Only prepend with newline if log goes downwards
|
||||
if (log_goes_downwards && need_newline) {
|
||||
ui_ic_chatlog->textCursor().insertBlock(format);
|
||||
}
|
||||
|
||||
ui_ic_chatlog->moveCursor(QTextCursor::End);
|
||||
// Timestamp if we're doing that meme
|
||||
if (log_timestamp)
|
||||
ui_ic_chatlog->textCursor().insertText("[" + QDateTime::currentDateTime().toString("h:mm:ss AP") + "] ", normal);
|
||||
|
||||
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);
|
||||
}
|
||||
|
||||
if (p_action != "") {
|
||||
ui_ic_chatlog->textCursor().insertText(" " + p_action + ": ", normal);
|
||||
ui_ic_chatlog->textCursor().insertText(p_text + ".", italics);
|
||||
}
|
||||
else {
|
||||
// Format the name of the actor
|
||||
ui_ic_chatlog->textCursor().insertText(p_name, bold);
|
||||
// If action not blank:
|
||||
if (p_action != "") {
|
||||
// Format the action in normal
|
||||
ui_ic_chatlog->textCursor().insertText(" " + p_action, normal);
|
||||
if (log_newline)
|
||||
// For some reason, we're forced to use <br> instead of the more sensible \n.
|
||||
// Why? Because \n is treated as a new Block instead of a soft newline within a paragraph!
|
||||
ui_ic_chatlog->textCursor().insertHtml("<br>");
|
||||
else
|
||||
ui_ic_chatlog->textCursor().insertText(": ", normal);
|
||||
ui_ic_chatlog->textCursor().insertHtml(p_text);
|
||||
}
|
||||
|
||||
// If we got too many blocks in the current log, delete some from the top.
|
||||
while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks &&
|
||||
log_maximum_blocks > 0) {
|
||||
ui_ic_chatlog->moveCursor(QTextCursor::Start);
|
||||
ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
|
||||
ui_ic_chatlog->textCursor().removeSelectedText();
|
||||
ui_ic_chatlog->textCursor().deleteChar();
|
||||
}
|
||||
|
||||
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 bottom.
|
||||
ui_ic_chatlog->moveCursor(QTextCursor::End);
|
||||
ui_ic_chatlog->verticalScrollBar()->setValue(
|
||||
ui_ic_chatlog->verticalScrollBar()->maximum());
|
||||
}
|
||||
// Format the result in italics
|
||||
ui_ic_chatlog->textCursor().insertText(p_text + ".", italics);
|
||||
}
|
||||
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);
|
||||
|
||||
if (p_action != "") {
|
||||
ui_ic_chatlog->textCursor().insertText(" " + p_action + ": ", normal);
|
||||
ui_ic_chatlog->textCursor().insertText(p_text + "." + '\n', italics);
|
||||
}
|
||||
else {
|
||||
if (log_newline)
|
||||
// For some reason, we're forced to use <br> instead of the more sensible \n.
|
||||
// Why? Because \n is treated as a new Block instead of a soft newline within a paragraph!
|
||||
ui_ic_chatlog->textCursor().insertHtml("<br>");
|
||||
else
|
||||
ui_ic_chatlog->textCursor().insertText(": ", normal);
|
||||
ui_ic_chatlog->textCursor().insertHtml(p_text + "<br>");
|
||||
}
|
||||
// Format the result according to html
|
||||
if (log_colors)
|
||||
ui_ic_chatlog->textCursor().insertHtml(filter_ic_text(p_text, true, -1, color));
|
||||
else
|
||||
ui_ic_chatlog->textCursor().insertText(filter_ic_text(p_text, false), normal);
|
||||
}
|
||||
|
||||
// If we got too many blocks in the current log, delete some from the
|
||||
// bottom.
|
||||
while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks &&
|
||||
log_maximum_blocks > 0) {
|
||||
ui_ic_chatlog->moveCursor(QTextCursor::End);
|
||||
ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
|
||||
ui_ic_chatlog->textCursor().removeSelectedText();
|
||||
// Only append with newline if log goes upwards
|
||||
if (!log_goes_downwards && need_newline) {
|
||||
ui_ic_chatlog->textCursor().insertBlock(format);
|
||||
}
|
||||
|
||||
// If we got too many blocks in the current log, delete some.
|
||||
while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks &&
|
||||
log_maximum_blocks > 0) {
|
||||
ui_ic_chatlog->moveCursor(log_goes_downwards ? QTextCursor::Start : QTextCursor::End);
|
||||
ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
|
||||
ui_ic_chatlog->textCursor().removeSelectedText();
|
||||
if (log_goes_downwards)
|
||||
ui_ic_chatlog->textCursor().deleteChar();
|
||||
else
|
||||
ui_ic_chatlog->textCursor().deletePreviousChar();
|
||||
}
|
||||
}
|
||||
|
||||
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());
|
||||
}
|
||||
// Finally, scroll the scrollbar to the correct position.
|
||||
if (old_cursor.hasSelection() || old_scrollbar_value != scrollbar_target_value) {
|
||||
// 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 bottom.
|
||||
ui_ic_chatlog->moveCursor(log_goes_downwards ? QTextCursor::End : QTextCursor::Start);
|
||||
ui_ic_chatlog->verticalScrollBar()->setValue(
|
||||
ui_ic_chatlog->verticalScrollBar()->maximum());
|
||||
}
|
||||
}
|
||||
|
||||
@ -3188,17 +3198,8 @@ void Courtroom::handle_song(QStringList *p_contents)
|
||||
}
|
||||
|
||||
if (!mute_map.value(n_char)) {
|
||||
chatlogpiece *temp = new chatlogpiece(str_char, str_show, f_song, true,
|
||||
m_chatmessage[TEXT_COLOR].toInt());
|
||||
ic_chatlog_history.append(*temp);
|
||||
if (ao_app->get_auto_logging_enabled())
|
||||
ao_app->append_to_file(temp->get_full(), ao_app->log_filename, true);
|
||||
|
||||
while (ic_chatlog_history.size() > log_maximum_blocks &&
|
||||
log_maximum_blocks > 0) {
|
||||
ic_chatlog_history.removeFirst();
|
||||
}
|
||||
|
||||
log_ic_text(str_char, str_show, f_song, tr("has played a song"),
|
||||
m_chatmessage[TEXT_COLOR].toInt());
|
||||
append_ic_text(f_song_clear, str_show, tr("has played a song"));
|
||||
|
||||
music_player->play(f_song, channel, looping, effect_flags);
|
||||
@ -4659,31 +4660,19 @@ void Courtroom::on_guard_clicked() { ui_ic_chat_message->setFocus(); }
|
||||
|
||||
void Courtroom::on_showname_enable_clicked()
|
||||
{
|
||||
ui_ic_chatlog->clear();
|
||||
first_message_sent = false;
|
||||
|
||||
foreach (chatlogpiece item, ic_chatlog_history) {
|
||||
if (ui_showname_enable->isChecked()) {
|
||||
if (item.is_song())
|
||||
append_ic_text(item.get_message(), item.get_showname(),
|
||||
tr("has played a song"));
|
||||
else
|
||||
append_ic_text(item.get_message(), item.get_showname(), "",
|
||||
item.get_chat_color());
|
||||
}
|
||||
else {
|
||||
if (item.is_song())
|
||||
append_ic_text(item.get_message(), item.get_name(),
|
||||
tr("has played a song"));
|
||||
else
|
||||
append_ic_text(item.get_message(), item.get_name(), "",
|
||||
item.get_chat_color());
|
||||
}
|
||||
}
|
||||
|
||||
regenerate_ic_chatlog();
|
||||
ui_ic_chat_message->setFocus();
|
||||
}
|
||||
|
||||
void Courtroom::regenerate_ic_chatlog()
|
||||
{
|
||||
ui_ic_chatlog->clear();
|
||||
foreach (chatlogpiece item, ic_chatlog_history) {
|
||||
append_ic_text(item.get_message(), ui_showname_enable->isChecked() ? item.get_showname() : item.get_name(),
|
||||
item.get_action(), item.get_chat_color());
|
||||
}
|
||||
}
|
||||
|
||||
void Courtroom::on_evidence_button_clicked()
|
||||
{
|
||||
if (ui_evidence->isHidden()) {
|
||||
|
@ -53,6 +53,26 @@ bool AOApplication::get_log_goes_downwards()
|
||||
return result.startsWith("true");
|
||||
}
|
||||
|
||||
bool AOApplication::get_log_newline()
|
||||
{
|
||||
QString result =
|
||||
configini->value("log_newline", "false").value<QString>();
|
||||
return result.startsWith("true");
|
||||
}
|
||||
|
||||
int AOApplication::get_log_margin()
|
||||
{
|
||||
int result = configini->value("log_margin", 0).toInt();
|
||||
return result;
|
||||
}
|
||||
|
||||
bool AOApplication::get_log_timestamp()
|
||||
{
|
||||
QString result =
|
||||
configini->value("log_timestamp", "false").value<QString>();
|
||||
return result.startsWith("true");
|
||||
}
|
||||
|
||||
bool AOApplication::get_showname_enabled_by_default()
|
||||
{
|
||||
QString result =
|
||||
|
Loading…
Reference in New Issue
Block a user