Settings menu avaiable through ingame means + IC beautification.

- Changing songs is now done in italics.
This commit is contained in:
Cerapter 2018-08-09 21:23:30 +02:00
parent f9fd9a789a
commit 0f2665aabe
2 changed files with 115 additions and 1 deletions

View File

@ -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();

View File

@ -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();