diff --git a/include/courtroom.h b/include/courtroom.h index fe3a171..04b166f 100644 --- a/include/courtroom.h +++ b/include/courtroom.h @@ -165,7 +165,7 @@ public: void set_background(QString p_background, bool display = false); // sets the local character pos/side to use. - void set_side(QString p_side); + void set_side(QString p_side, bool block_signals=true); // sets the pos dropdown void set_pos_dropdown(QStringList pos_dropdowns); @@ -659,6 +659,7 @@ private: QComboBox *ui_emote_dropdown; QComboBox *ui_pos_dropdown; + AOButton *ui_pos_remove; QComboBox *ui_iniswap_dropdown; AOButton *ui_iniswap_remove; @@ -836,6 +837,7 @@ private slots: void on_emote_dropdown_changed(int p_index); void on_pos_dropdown_changed(int p_index); + void on_pos_remove_clicked(); void on_iniswap_dropdown_changed(int p_index); void set_iniswap_dropdown(); diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 1ce917d..1fc5983 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -165,6 +165,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() initialize_emotes(); ui_pos_dropdown = new QComboBox(this); + ui_pos_remove = new AOButton(this, ao_app); ui_iniswap_dropdown = new QComboBox(this); ui_iniswap_dropdown->setContextMenuPolicy(Qt::CustomContextMenu); @@ -301,6 +302,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() connect(ui_pos_dropdown, SIGNAL(currentIndexChanged(int)), this, SLOT(on_pos_dropdown_changed(int))); + connect(ui_pos_remove, SIGNAL(clicked()), this, SLOT(on_pos_remove_clicked())); connect(ui_iniswap_dropdown, SIGNAL(currentIndexChanged(int)), this, SLOT(on_iniswap_dropdown_changed(int))); @@ -726,6 +728,15 @@ void Courtroom::set_widgets() ui_pos_dropdown->setToolTip( tr("Set your character's supplementary background.")); + set_size_and_pos(ui_pos_remove, "pos_remove"); + ui_pos_remove->setText("X"); + ui_pos_remove->set_image("evidencex"); + ui_pos_remove->setToolTip(tr("Reset your character's supplementary background to its default.")); + if (current_side == "") + ui_pos_remove->hide(); + else + ui_pos_remove->show(); + set_size_and_pos(ui_iniswap_dropdown, "iniswap_dropdown"); ui_iniswap_dropdown->setEditable(true); ui_iniswap_dropdown->setInsertPolicy(QComboBox::InsertAtBottom); @@ -1285,26 +1296,50 @@ void Courtroom::set_background(QString p_background, bool display) } } -void Courtroom::set_side(QString p_side) +void Courtroom::set_side(QString p_side, bool block_signals) { + QString f_side; if (p_side == "") - current_side = ao_app->get_char_side(current_char); + f_side = ao_app->get_char_side(current_char); else - current_side = p_side; + f_side = p_side; + + if (f_side == "jud") { + ui_witness_testimony->show(); + ui_cross_examination->show(); + ui_not_guilty->show(); + ui_guilty->show(); + ui_defense_minus->show(); + ui_defense_plus->show(); + ui_prosecution_minus->show(); + ui_prosecution_plus->show(); + } + else { + ui_witness_testimony->hide(); + ui_cross_examination->hide(); + ui_guilty->hide(); + ui_not_guilty->hide(); + ui_defense_minus->hide(); + ui_defense_plus->hide(); + ui_prosecution_minus->hide(); + ui_prosecution_plus->hide(); + } for (int i = 0; i < ui_pos_dropdown->count(); ++i) { QString pos = ui_pos_dropdown->itemText(i); - if (pos == current_side) { + if (pos == f_side) { // Block the signals to prevent setCurrentIndex from triggering a pos // change - ui_pos_dropdown->blockSignals(true); + if (block_signals) + ui_pos_dropdown->blockSignals(true); // Set the index on dropdown ui element to let you know what pos you're on // right now ui_pos_dropdown->setCurrentIndex(i); // Unblock the signals so the element can be used for setting pos again - ui_pos_dropdown->blockSignals(false); + if (block_signals) + ui_pos_dropdown->blockSignals(false); // alright we dun, jobs done here boyos break; @@ -1321,6 +1356,7 @@ void Courtroom::set_pos_dropdown(QStringList pos_dropdowns) ui_pos_dropdown->addItems(pos_dropdown_list); // Unblock the signals so the element can be used for setting pos again ui_pos_dropdown->blockSignals(false); + set_side(current_side); } void Courtroom::update_character(int p_cid) @@ -1344,7 +1380,7 @@ void Courtroom::update_character(int p_cid) } current_char = f_char; - current_side = ao_app->get_char_side(current_char); + set_side(current_side); set_text_color_dropdown(); @@ -1366,27 +1402,6 @@ void Courtroom::update_character(int p_cid) if (newchar) // Avoid infinite loop of death and suffering set_iniswap_dropdown(); - if (current_side == "jud") { - ui_witness_testimony->show(); - ui_cross_examination->show(); - ui_not_guilty->show(); - ui_guilty->show(); - ui_defense_minus->show(); - ui_defense_plus->show(); - ui_prosecution_minus->show(); - ui_prosecution_plus->show(); - } - else { - ui_witness_testimony->hide(); - ui_cross_examination->hide(); - ui_guilty->hide(); - ui_not_guilty->hide(); - ui_defense_minus->hide(); - ui_defense_plus->hide(); - ui_prosecution_minus->hide(); - ui_prosecution_plus->hide(); - } - ui_custom_objection->hide(); if (ao_app->custom_objection_enabled) // if setting is enabled { @@ -1693,9 +1708,12 @@ void Courtroom::on_chat_return_pressed() // immediate_preanim#% QStringList packet_contents; + QString f_side; if (current_side == "") - current_side = ao_app->get_char_side(current_char); + f_side = ao_app->get_char_side(current_char); + else + f_side = current_side; QString f_desk_mod = "chat"; @@ -1722,7 +1740,7 @@ void Courtroom::on_chat_return_pressed() packet_contents.append(ui_ic_chat_message->text()); - packet_contents.append(current_side); + packet_contents.append(f_side); packet_contents.append(get_char_sfx()); @@ -4269,12 +4287,36 @@ void Courtroom::on_pos_dropdown_changed(int p_index) if (f_pos == "jud") toggle_judge_buttons(true); + + ui_pos_remove->show(); + + current_side = f_pos; // YEAH SENDING LIKE 20 PACKETS IF THE USER SCROLLS THROUGH, GREAT IDEA // how about this instead set_side(f_pos); } +void Courtroom::on_pos_remove_clicked() +{ + QString default_side = ao_app->get_char_side(current_char); + + for (int i = 0; i < ui_pos_dropdown->count(); ++i) { + QString pos = ui_pos_dropdown->itemText(i); + if (pos == default_side) { + ui_pos_dropdown->setCurrentIndex(i); + break; + } + } + int wit_index = ui_pos_dropdown->findText("wit"); + if ((ui_pos_dropdown->currentText() != default_side) & (wit_index != -1)) //i.e. this bg doesn't have our pos + ui_pos_dropdown->setCurrentIndex(wit_index); // fall back to "wit" + else if (ui_pos_dropdown->currentText() != default_side) // we don't have "wit" either? + ui_pos_dropdown->setCurrentIndex(0); // as a last resort, choose the first item in the dropdown + current_side = ""; + ui_pos_remove->hide(); +} + void Courtroom::set_iniswap_dropdown() { ui_iniswap_dropdown->blockSignals(true); diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index 5a093e3..53f6deb 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -475,7 +475,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) if (courtroom_constructed) // We were sent a "set position" packet { - w_courtroom->set_side(f_contents.at(0)); + w_courtroom->set_side(f_contents.at(0), false); append_to_demofile(p_packet->to_string(true)); } }