aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--base/themes/default/courtroom_design.ini5
-rw-r--r--include/courtroom.h10
-rw-r--r--src/courtroom.cpp35
-rw-r--r--src/evidence.cpp244
4 files changed, 210 insertions, 84 deletions
diff --git a/base/themes/default/courtroom_design.ini b/base/themes/default/courtroom_design.ini
index e53eb08d..b9a27a36 100644
--- a/base/themes/default/courtroom_design.ini
+++ b/base/themes/default/courtroom_design.ini
@@ -293,9 +293,10 @@ evidence_overlay = 24, 24, 439, 222
; x/y coordinates 0,0 will start at top-left of the "evidence_overlay" (which is parented to "evidence_background") for everything below until specified otherwise.
; ****
evidence_delete = 78, 8, 70, 20
-evidence_image_name = 150, 8, 130, 20
-evidence_image_button = 280, 8, 60, 20
+evidence_image_name = 150, 8, 109, 20
+evidence_image_button = 259, 8, 60, 20
evidence_x = 341, 8, 20, 20
+evidence_ok = 320, 8, 20, 20
evidence_button = 627, 322, 85, 18
evidence_name = 112, 4, 264, 19
evidence_description = 78, 28, 281, 166 \ No newline at end of file
diff --git a/include/courtroom.h b/include/courtroom.h
index 476fd118..0fc56fe9 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -54,6 +54,7 @@
#include <QTextBoundaryFinder>
#include <QPropertyAnimation>
#include <QParallelAnimationGroup>
+#include <QMessageBox>
#include <QRandomGenerator>
#include <stack>
@@ -554,6 +555,7 @@ private:
AOLineEdit *ui_evidence_image_name;
AOButton *ui_evidence_image_button;
AOButton *ui_evidence_x;
+ AOButton *ui_evidence_ok;
AOTextEdit *ui_evidence_description;
AOImage *ui_char_select_background;
@@ -707,11 +709,17 @@ private slots:
void on_showname_enable_clicked();
void on_evidence_name_double_clicked();
+ void on_evidence_image_name_double_clicked();
void on_evidence_button_clicked();
void on_evidence_delete_clicked();
void on_evidence_x_clicked();
- void on_evidence_description_edited();
+ void on_evidence_ok_clicked();
+
+ void on_evidence_edited();
+
+ void evidence_close();
+ bool compare_evidence_changed(evi_type evi_a, evi_type evi_b);
void on_back_to_lobby_clicked();
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index e5185eb1..428d98ce 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -784,41 +784,6 @@ void Courtroom::set_widgets()
set_size_and_pos(ui_sfx_slider, "sfx_slider");
set_size_and_pos(ui_blip_slider, "blip_slider");
- set_size_and_pos(ui_evidence_button, "evidence_button");
- ui_evidence_button->set_image("evidencebutton");
- ui_evidence_button->setToolTip(tr("Bring up the Evidence screen."));
-
- set_size_and_pos(ui_evidence, "evidence_background");
- ui_evidence->set_image("evidencebackground");
-
- set_size_and_pos(ui_evidence_name, "evidence_name");
-
- set_size_and_pos(ui_evidence_buttons, "evidence_buttons");
-
- set_size_and_pos(ui_evidence_left, "evidence_left");
- ui_evidence_left->set_image("arrow_left");
-
- set_size_and_pos(ui_evidence_right, "evidence_right");
- ui_evidence_right->set_image("arrow_right");
-
- set_size_and_pos(ui_evidence_present, "evidence_present");
- ui_evidence_present->set_image("present_disabled");
-
- set_size_and_pos(ui_evidence_overlay, "evidence_overlay");
- ui_evidence_overlay->set_image("evidenceoverlay");
-
- set_size_and_pos(ui_evidence_delete, "evidence_delete");
- ui_evidence_delete->set_image("deleteevidence");
-
- set_size_and_pos(ui_evidence_image_name, "evidence_image_name");
-
- set_size_and_pos(ui_evidence_image_button, "evidence_image_button");
-
- set_size_and_pos(ui_evidence_x, "evidence_x");
- ui_evidence_x->set_image("evidencex");
-
- set_size_and_pos(ui_evidence_description, "evidence_description");
-
ui_selector->set_image("char_selector");
ui_selector->hide();
diff --git a/src/evidence.cpp b/src/evidence.cpp
index dfbc675f..6ee2b8e5 100644
--- a/src/evidence.cpp
+++ b/src/evidence.cpp
@@ -7,24 +7,32 @@ void Courtroom::initialize_evidence()
//ui_evidence_name = new QLabel(ui_evidence);
ui_evidence_name = new AOLineEdit(ui_evidence);
ui_evidence_name->setAlignment(Qt::AlignCenter);
+ ui_evidence_name->setFrame(false);
ui_evidence_buttons = new QWidget(ui_evidence);
ui_evidence_left = new AOButton(ui_evidence, ao_app);
ui_evidence_right = new AOButton(ui_evidence, ao_app);
ui_evidence_present = new AOButton(ui_evidence, ao_app);
+ ui_evidence_present->setToolTip(tr("Present this piece of evidence to everyone on your next spoken message"));
ui_evidence_overlay = new AOImage(ui_evidence, ao_app);
ui_evidence_delete = new AOButton(ui_evidence_overlay, ao_app);
+ ui_evidence_delete->setToolTip(tr("Destroy this piece of evidence"));
ui_evidence_image_name = new AOLineEdit(ui_evidence_overlay);
ui_evidence_image_button = new AOButton(ui_evidence_overlay, ao_app);
ui_evidence_image_button->setText(tr("Choose..."));
ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app);
+ ui_evidence_x->setToolTip(tr("Close the evidence display/editing overlay"));
+ ui_evidence_ok = new AOButton(ui_evidence_overlay, ao_app);
+ ui_evidence_ok->setToolTip(tr("Save any changes made to this piece of evidence"));
ui_evidence_description = new AOTextEdit(ui_evidence_overlay);
ui_evidence_description->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
"color: white;");
+ ui_evidence_description->setFrameStyle(QFrame::NoFrame);
+ ui_evidence_description->setToolTip("Double-click to edit. Press [X] to update your changes.");
connect(ui_evidence_name, SIGNAL(returnPressed()), this, SLOT(on_evidence_name_edited()));
connect(ui_evidence_name, SIGNAL(double_clicked()), this, SLOT(on_evidence_name_double_clicked()));
@@ -33,9 +41,14 @@ void Courtroom::initialize_evidence()
connect(ui_evidence_present, SIGNAL(clicked()), this, SLOT(on_evidence_present_clicked()));
connect(ui_evidence_delete, SIGNAL(clicked()), this, SLOT(on_evidence_delete_clicked()));
connect(ui_evidence_image_name, SIGNAL(returnPressed()), this, SLOT(on_evidence_image_name_edited()));
+ connect(ui_evidence_image_name, SIGNAL(double_clicked()), this, SLOT(on_evidence_image_name_double_clicked()));
connect(ui_evidence_image_button, SIGNAL(clicked()), this, SLOT(on_evidence_image_button_clicked()));
connect(ui_evidence_x, SIGNAL(clicked()), this, SLOT(on_evidence_x_clicked()));
- connect(ui_evidence_description, SIGNAL(textChanged()), this, SLOT(on_evidence_description_edited()));
+ connect(ui_evidence_ok, SIGNAL(clicked()), this, SLOT(on_evidence_ok_clicked()));
+
+ connect(ui_evidence_name, SIGNAL(textChanged(QString)), this, SLOT(on_evidence_edited()));
+ connect(ui_evidence_image_name, SIGNAL(textChanged(QString)), this, SLOT(on_evidence_edited()));
+ connect(ui_evidence_description, SIGNAL(textChanged()), this, SLOT(on_evidence_edited()));
ui_evidence->hide();
}
@@ -50,9 +63,44 @@ void Courtroom::refresh_evidence()
qDeleteAll(ui_evidence_list.begin(), ui_evidence_list.end());
ui_evidence_list.clear();
+ set_size_and_pos(ui_evidence_button, "evidence_button");
+ ui_evidence_button->set_image("evidencebutton");
+ ui_evidence_button->setToolTip(tr("Bring up the Evidence screen."));
+
set_size_and_pos(ui_evidence, "evidence_background");
+ ui_evidence->set_image("evidencebackground");
+
+ set_size_and_pos(ui_evidence_name, "evidence_name");
+
set_size_and_pos(ui_evidence_buttons, "evidence_buttons");
+ set_size_and_pos(ui_evidence_left, "evidence_left");
+ ui_evidence_left->set_image("arrow_left");
+
+ set_size_and_pos(ui_evidence_right, "evidence_right");
+ ui_evidence_right->set_image("arrow_right");
+
+ set_size_and_pos(ui_evidence_present, "evidence_present");
+ ui_evidence_present->set_image("present");
+
+ set_size_and_pos(ui_evidence_overlay, "evidence_overlay");
+ ui_evidence_overlay->set_image("evidenceoverlay");
+
+ set_size_and_pos(ui_evidence_delete, "evidence_delete");
+ ui_evidence_delete->set_image("deleteevidence");
+
+ set_size_and_pos(ui_evidence_image_name, "evidence_image_name");
+
+ set_size_and_pos(ui_evidence_image_button, "evidence_image_button");
+
+ set_size_and_pos(ui_evidence_x, "evidence_x");
+ ui_evidence_x->set_image("evidencex");
+
+ set_size_and_pos(ui_evidence_ok, "evidence_ok");
+ ui_evidence_ok->set_image("evidenceok");
+
+ set_size_and_pos(ui_evidence_description, "evidence_description");
+
QPoint f_spacing = ao_app->get_button_spacing("evidence_button_spacing", "courtroom_design.ini");
QPoint p_point = ao_app->get_button_spacing("evidence_button_size", "courtroom_design.ini");
@@ -96,6 +144,7 @@ void Courtroom::refresh_evidence()
void Courtroom::set_evidence_list(QVector<evi_type> &p_evi_list)
{
+ QVector<evi_type> old_list = local_evidence_list;
local_evidence_list.clear();
local_evidence_list = p_evi_list;
@@ -105,13 +154,38 @@ void Courtroom::set_evidence_list(QVector<evi_type> &p_evi_list)
{
if (current_evidence >= local_evidence_list.size())
{
- on_evidence_x_clicked();
+ evidence_close();
ui_evidence_name->setText("");
}
- else
+ else if (ui_evidence_description->isReadOnly()) //We haven't double clicked to edit it or anything
{
on_evidence_double_clicked(current_evidence);
}
+ //Todo: make a function that compares two pieces of evidence for any differences
+ else if (compare_evidence_changed(old_list.at(current_evidence), local_evidence_list.at(current_evidence)))
+ {
+ QMessageBox *msgBox = new QMessageBox;
+
+ msgBox->setText("The piece of evidence you've been editing has changed.");
+ msgBox->setInformativeText("Do you wish to keep your changes?");
+ msgBox->setDetailedText("Name: " + local_evidence_list.at(current_evidence).name + "\nImage: " + local_evidence_list.at(current_evidence).image + "\nDescription:\n" + local_evidence_list.at(current_evidence).description);
+ msgBox->setStandardButtons(QMessageBox::Yes | QMessageBox::No);
+ msgBox->setDefaultButton(QMessageBox::No);
+ //msgBox->setWindowModality(Qt::NonModal);
+ int ret = msgBox->exec();
+ switch (ret) {
+ case QMessageBox::Yes:
+ // "Keep changes"
+ break;
+ case QMessageBox::No:
+ // "Discard changes and keep theirs"
+ on_evidence_double_clicked(current_evidence);
+ break;
+ default:
+ // should never be reached
+ break;
+ }
+ }
}
}
@@ -185,24 +259,34 @@ void Courtroom::on_evidence_name_edited()
if (current_evidence >= local_evidence_list.size())
return;
- QStringList f_contents;
+// Prefer pressing [X] to update the evidence.
+// QStringList f_contents;
- evi_type f_evi = local_evidence_list.at(current_evidence);
+// evi_type f_evi = local_evidence_list.at(current_evidence);
- f_contents.append(QString::number(current_evidence));
- f_contents.append(ui_evidence_name->text());
- f_contents.append(f_evi.description);
- f_contents.append(f_evi.image);
+// f_contents.append(QString::number(current_evidence));
+// f_contents.append(ui_evidence_name->text());
+// f_contents.append(f_evi.description);
+// f_contents.append(f_evi.image);
- ao_app->send_server_packet(new AOPacket("EE", f_contents));
+// ao_app->send_server_packet(new AOPacket("EE", f_contents));
}
void Courtroom::on_evidence_name_double_clicked()
{
if (ui_evidence_overlay->isVisible())
+ {
ui_evidence_name->setReadOnly(false);
+ }
else
+ {
ui_evidence_name->setReadOnly(true);
+ }
+}
+
+void Courtroom::on_evidence_image_name_double_clicked()
+{
+ ui_evidence_image_name->setReadOnly(false);
}
void Courtroom::on_evidence_image_name_edited()
@@ -211,16 +295,16 @@ void Courtroom::on_evidence_image_name_edited()
if (current_evidence >= local_evidence_list.size())
return;
- QStringList f_contents;
+// QStringList f_contents;
- evi_type f_evi = local_evidence_list.at(current_evidence);
+// evi_type f_evi = local_evidence_list.at(current_evidence);
- f_contents.append(QString::number(current_evidence));
- f_contents.append(f_evi.name);
- f_contents.append(f_evi.description);
- f_contents.append(ui_evidence_image_name->text());
+// f_contents.append(QString::number(current_evidence));
+// f_contents.append(f_evi.name);
+// f_contents.append(f_evi.description);
+// f_contents.append(ui_evidence_image_name->text());
- ao_app->send_server_packet(new AOPacket("EE", f_contents));
+// ao_app->send_server_packet(new AOPacket("EE", f_contents));
}
void Courtroom::on_evidence_image_button_clicked()
@@ -284,23 +368,22 @@ void Courtroom::on_evidence_double_clicked(int p_id)
evi_type f_evi = local_evidence_list.at(f_real_id);
- QTextCursor cursor = ui_evidence_description->textCursor();
- int pos = cursor.position();
-
- //ISSUE: Undo/redo history is completely inaccessible. :(
- ui_evidence_description->blockSignals(true);
- ui_evidence_description->setPlainText(f_evi.description);
- ui_evidence_description->blockSignals(false);
-
- cursor.setPosition(pos); //Reset the cursor position back in place
- ui_evidence_description->setTextCursor(cursor);
+ ui_evidence_description->clear();
+ ui_evidence_description->appendPlainText(f_evi.description);
+ ui_evidence_description->setReadOnly(true);
+ ui_evidence_description->setToolTip("Double-click to edit...");
- ui_evidence_image_name->setText(f_evi.image);
ui_evidence_name->setText(f_evi.name);
+ ui_evidence_name->setReadOnly(true);
+ ui_evidence_name->setToolTip("Double-click to edit...");
+ ui_evidence_image_name->setText(f_evi.image);
+ ui_evidence_image_name->setReadOnly(true);
+ ui_evidence_image_name->setToolTip("Double-click to edit...");
ui_evidence_overlay->show();
+ ui_evidence_ok->hide();
-// ui_ic_chat_message->setFocus();
+ ui_ic_chat_message->setFocus();
}
void Courtroom::on_evidence_hover(int p_id, bool p_state)
@@ -342,9 +425,9 @@ void Courtroom::on_evidence_right_clicked()
void Courtroom::on_evidence_present_clicked()
{
if (is_presenting_evidence)
- ui_evidence_present->set_image("present_disabled");
- else
ui_evidence_present->set_image("present");
+ else
+ ui_evidence_present->set_image("present_disabled");
is_presenting_evidence = !is_presenting_evidence;
@@ -353,10 +436,7 @@ void Courtroom::on_evidence_present_clicked()
void Courtroom::on_evidence_delete_clicked()
{
- ui_evidence_description->setReadOnly(true);
- ui_evidence_name->setReadOnly(true);
- ui_evidence_overlay->hide();
-
+ evidence_close();
ao_app->send_server_packet(new AOPacket("DE#" + QString::number(current_evidence) + "#%"));
current_evidence = 0;
@@ -366,22 +446,94 @@ void Courtroom::on_evidence_delete_clicked()
void Courtroom::on_evidence_x_clicked()
{
+ if (current_evidence >= local_evidence_list.size()) //Should never happen but you never know.
+ return;
+
+ evi_type fake_evidence;
+ fake_evidence.name = ui_evidence_name->text();
+ fake_evidence.description = ui_evidence_description->toPlainText();
+ fake_evidence.image = ui_evidence_image_name->text();
+ if (!compare_evidence_changed(fake_evidence, local_evidence_list.at(current_evidence)))
+ {
+ evidence_close();
+ return;
+ }
+ QMessageBox *msgBox = new QMessageBox;
+ msgBox->setText("Evidence has been modified.");
+ msgBox->setInformativeText("Do you want to save your changes?");
+ msgBox->setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);
+ msgBox->setDefaultButton(QMessageBox::Save);
+ int ret = msgBox->exec();
+ switch (ret) {
+ case QMessageBox::Save:
+ evidence_close();
+ on_evidence_ok_clicked();
+ break;
+ case QMessageBox::Discard:
+ evidence_close();
+ break;
+ case QMessageBox::Cancel:
+ // Cancel was clicked, do nothing
+ break;
+ default:
+ // should never be reached
+ break;
+ }
+}
+
+void Courtroom::on_evidence_ok_clicked()
+{
+ ui_evidence_name->setReadOnly(true);
ui_evidence_description->setReadOnly(true);
+ ui_evidence_image_name->setReadOnly(true);
+ if (current_evidence < local_evidence_list.size())
+ {
+ evi_type f_evi = local_evidence_list.at(current_evidence);
+
+ QStringList f_contents;
+ f_contents.append(QString::number(current_evidence));
+ f_contents.append(ui_evidence_name->text());
+ f_contents.append(ui_evidence_description->toPlainText());
+ f_contents.append(ui_evidence_image_name->text());
+
+ ao_app->send_server_packet(new AOPacket("EE", f_contents));
+
+// QMessageBox *msgBox = new QMessageBox;
+
+// msgBox->setText("You succesfully saved your changes.");
+// msgBox->setStandardButtons(QMessageBox::Ok);
+// msgBox->setDefaultButton(QMessageBox::Ok);
+// msgBox->exec();
+ }
+}
+
+void Courtroom::on_evidence_edited()
+{
+ if (current_evidence >= local_evidence_list.size()) //Should never happen but you never know.
+ return;
+ evi_type fake_evidence;
+ fake_evidence.name = ui_evidence_name->text();
+ fake_evidence.description = ui_evidence_description->toPlainText();
+ fake_evidence.image = ui_evidence_image_name->text();
+ if (compare_evidence_changed(fake_evidence, local_evidence_list.at(current_evidence)))
+ ui_evidence_ok->show();
+ else
+ ui_evidence_ok->hide();
+}
+
+void Courtroom::evidence_close()
+{
+ ui_evidence_description->setReadOnly(true);
+ ui_evidence_description->setToolTip("");
ui_evidence_name->setReadOnly(true);
+ ui_evidence_name->setToolTip("");
+ ui_evidence_image_name->setReadOnly(true);
+ ui_evidence_image_name->setToolTip("");
ui_evidence_overlay->hide();
ui_ic_chat_message->setFocus();
}
-void Courtroom::on_evidence_description_edited()
+bool Courtroom::compare_evidence_changed(evi_type evi_a, evi_type evi_b)
{
- QStringList f_contents;
-
- evi_type f_evi = local_evidence_list.at(current_evidence);
-
- f_contents.append(QString::number(current_evidence));
- f_contents.append(f_evi.name);
- f_contents.append(ui_evidence_description->toPlainText());
- f_contents.append(f_evi.image);
-
- ao_app->send_server_packet(new AOPacket("EE", f_contents));
+ return evi_a.name != evi_b.name || evi_a.image != evi_b.image || evi_a.description != evi_b.description;
}