aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--courtroom.cpp111
-rw-r--r--courtroom.h5
2 files changed, 115 insertions, 1 deletions
diff --git a/courtroom.cpp b/courtroom.cpp
index 3e53867c..040c5b40 100644
--- a/courtroom.cpp
+++ b/courtroom.cpp
@@ -161,6 +161,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_change_character = new AOButton(this, ao_app);
ui_reload_theme = new AOButton(this, ao_app);
ui_call_mod = new AOButton(this, ao_app);
+ ui_settings = new AOButton(this, ao_app);
ui_pre = new QCheckBox(this);
ui_pre->setText("Pre");
@@ -279,6 +280,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_change_character, SIGNAL(clicked()), this, SLOT(on_change_character_clicked()));
connect(ui_reload_theme, SIGNAL(clicked()), this, SLOT(on_reload_theme_clicked()));
connect(ui_call_mod, SIGNAL(clicked()), this, SLOT(on_call_mod_clicked()));
+ connect(ui_settings, SIGNAL(clicked()), this, SLOT(on_settings_clicked()));
connect(ui_pre, SIGNAL(clicked()), this, SLOT(on_pre_clicked()));
connect(ui_flip, SIGNAL(clicked()), this, SLOT(on_flip_clicked()));
@@ -490,6 +492,9 @@ void Courtroom::set_widgets()
set_size_and_pos(ui_call_mod, "call_mod");
ui_call_mod->setText("Call mod");
+ set_size_and_pos(ui_settings, "settings");
+ ui_settings->setText("Settings");
+
set_size_and_pos(ui_pre, "pre");
ui_pre->setText("Pre");
@@ -1472,6 +1477,99 @@ void Courtroom::append_ic_text(QString p_text, QString p_name)
}
}
+// Call it ugly, call it a hack, but I wanted to do something special with the songname changes.
+void Courtroom::append_ic_songchange(QString p_songname, QString p_name)
+{
+ QTextCharFormat bold;
+ QTextCharFormat normal;
+ QTextCharFormat italics;
+ bold.setFontWeight(QFont::Bold);
+ normal.setFontWeight(QFont::Normal);
+ italics.setFontItalic(true);
+ const QTextCursor old_cursor = ui_ic_chatlog->textCursor();
+ const int old_scrollbar_value = ui_ic_chatlog->verticalScrollBar()->value();
+
+ if (log_goes_downwards)
+ {
+ const bool is_scrolled_down = old_scrollbar_value == ui_ic_chatlog->verticalScrollBar()->maximum();
+
+ ui_ic_chatlog->moveCursor(QTextCursor::End);
+
+ 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(" has played a song: ", normal);
+ ui_ic_chatlog->textCursor().insertText(p_songname, italics);
+ ui_ic_chatlog->textCursor().insertText(".", 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 bottom.
+ ui_ic_chatlog->moveCursor(QTextCursor::End);
+ ui_ic_chatlog->verticalScrollBar()->setValue(ui_ic_chatlog->verticalScrollBar()->maximum());
+ }
+
+ // Finally, if we got too many blocks in the current log, delete some from the top.
+ while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks)
+ {
+ ui_ic_chatlog->moveCursor(QTextCursor::Start);
+ ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
+ ui_ic_chatlog->textCursor().removeSelectedText();
+ ui_ic_chatlog->textCursor().deleteChar();
+ //qDebug() << ui_ic_chatlog->document()->blockCount() << " < " << log_maximum_blocks;
+ }
+ }
+ 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(" has played a song: ", normal);
+ ui_ic_chatlog->textCursor().insertText(p_songname, italics);
+ ui_ic_chatlog->textCursor().insertText(".", 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());
+ }
+
+
+ // Finally, if we got too many blocks in the current log, delete some from the bottom.
+ while (ui_ic_chatlog->document()->blockCount() > log_maximum_blocks)
+ {
+ ui_ic_chatlog->moveCursor(QTextCursor::End);
+ ui_ic_chatlog->textCursor().select(QTextCursor::BlockUnderCursor);
+ ui_ic_chatlog->textCursor().removeSelectedText();
+ ui_ic_chatlog->textCursor().deletePreviousChar();
+ //qDebug() << ui_ic_chatlog->document()->blockCount() << " < " << log_maximum_blocks;
+ }
+ }
+}
+
void Courtroom::play_preanim()
{
QString f_char = m_chatmessage[CHAR_NAME];
@@ -2059,7 +2157,7 @@ void Courtroom::handle_song(QStringList *p_contents)
if (!mute_map.value(n_char))
{
- append_ic_text(" has played a song: " + f_song_clear, str_char);
+ append_ic_songchange(f_song_clear, str_char);
music_player->play(f_song);
}
}
@@ -2150,6 +2248,12 @@ void Courtroom::on_ooc_return_pressed()
//rainbow_appended = true;
return;
}
+ else if (ooc_message.startsWith("/settings"))
+ {
+ ui_ooc_chat_message->clear();
+ ao_app->call_settings_menu();
+ return;
+ }
QStringList packet_contents;
packet_contents.append(ui_ooc_chat_name->text());
@@ -2560,6 +2664,11 @@ void Courtroom::on_call_mod_clicked()
ui_ic_chat_message->setFocus();
}
+void Courtroom::on_settings_clicked()
+{
+ ao_app->call_settings_menu();
+}
+
void Courtroom::on_pre_clicked()
{
ui_ic_chat_message->setFocus();
diff --git a/courtroom.h b/courtroom.h
index df0883cf..22d25868 100644
--- a/courtroom.h
+++ b/courtroom.h
@@ -121,6 +121,9 @@ public:
// or the user isn't already scrolled to the top
void append_ic_text(QString p_text, QString p_name = "");
+ // This is essentially the same as the above, but specifically for song changes.
+ void append_ic_songchange(QString p_songname, QString p_name = "");
+
//prints who played the song to IC chat and plays said song(if found on local filesystem)
//takes in a list where the first element is the song name and the second is the char id of who played it
void handle_song(QStringList *p_contents);
@@ -360,6 +363,7 @@ private:
AOButton *ui_change_character;
AOButton *ui_reload_theme;
AOButton *ui_call_mod;
+ AOButton *ui_settings;
QCheckBox *ui_pre;
QCheckBox *ui_flip;
@@ -511,6 +515,7 @@ private slots:
void on_change_character_clicked();
void on_reload_theme_clicked();
void on_call_mod_clicked();
+ void on_settings_clicked();
void on_pre_clicked();
void on_flip_clicked();