aboutsummaryrefslogtreecommitdiff
path: root/src/evidence.cpp
diff options
context:
space:
mode:
authorDavid Skoland <davidskoland@gmail.com>2018-12-26 16:43:08 +0100
committerDavid Skoland <davidskoland@gmail.com>2018-12-26 16:43:08 +0100
commit00cfd2750d39795e4c205aee2a33b92b1da2524d (patch)
tree839c1129418ca8fefe41e6814917f9dabb6efa4b /src/evidence.cpp
parent6f1bce5882676ea7affe717a2f5a00b8c3b7fe12 (diff)
moved headers into include and cpp files into src + logo into resource
Diffstat (limited to 'src/evidence.cpp')
-rw-r--r--src/evidence.cpp345
1 files changed, 345 insertions, 0 deletions
diff --git a/src/evidence.cpp b/src/evidence.cpp
new file mode 100644
index 00000000..4e796642
--- /dev/null
+++ b/src/evidence.cpp
@@ -0,0 +1,345 @@
+#include "courtroom.h"
+
+void Courtroom::construct_evidence()
+{
+ ui_evidence = new AOImage(this, ao_app);
+
+ //ui_evidence_name = new QLabel(ui_evidence);
+ ui_evidence_name = new AOLineEdit(ui_evidence);
+ ui_evidence_name->setAlignment(Qt::AlignCenter);
+ ui_evidence_name->setFont(QFont("Arial", 14, QFont::Bold));
+ ui_evidence_name->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
+ "color: rgba(255, 128, 0, 255);");
+
+ 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_overlay = new AOImage(ui_evidence, ao_app);
+
+ ui_evidence_delete = new AOButton(ui_evidence_overlay, ao_app);
+ 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("Choose..");
+ ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app);
+
+ ui_evidence_description = new AOTextEdit(ui_evidence_overlay);
+ ui_evidence_description->setStyleSheet("background-color: rgba(0, 0, 0, 0);"
+ "color: white;");
+
+ set_size_and_pos(ui_evidence, "evidence_background");
+ set_size_and_pos(ui_evidence_buttons, "evidence_buttons");
+
+ QPoint f_spacing = ao_app->get_button_spacing("evidence_button_spacing", "courtroom_design.ini");
+
+ const int button_width = 70;
+ int x_spacing = f_spacing.x();
+ int x_mod_count = 0;
+
+ const int button_height = 70;
+ int y_spacing = f_spacing.y();
+ int y_mod_count = 0;
+
+ evidence_columns = ((ui_evidence_buttons->width() - button_width) / (x_spacing + button_width)) + 1;
+ evidence_rows = ((ui_evidence_buttons->height() - button_height) / (y_spacing + button_height)) + 1;
+
+ max_evidence_on_page = evidence_columns * evidence_rows;
+
+ for (int n = 0 ; n < max_evidence_on_page ; ++n)
+ {
+ int x_pos = (button_width + x_spacing) * x_mod_count;
+ int y_pos = (button_height + y_spacing) * y_mod_count;
+
+ AOEvidenceButton *f_evidence = new AOEvidenceButton(ui_evidence_buttons, ao_app, x_pos, y_pos);
+
+ ui_evidence_list.append(f_evidence);
+
+ f_evidence->set_id(n);
+
+ connect(f_evidence, SIGNAL(evidence_clicked(int)), this, SLOT(on_evidence_clicked(int)));
+ connect(f_evidence, SIGNAL(evidence_double_clicked(int)), this, SLOT(on_evidence_double_clicked(int)));
+ connect(f_evidence, SIGNAL(on_hover(int, bool)), this, SLOT(on_evidence_hover(int, bool)));
+
+ ++x_mod_count;
+
+ if (x_mod_count == evidence_columns)
+ {
+ ++y_mod_count;
+ x_mod_count = 0;
+ }
+ }
+
+ connect(ui_evidence_name, SIGNAL(returnPressed()), this, SLOT(on_evidence_name_edited()));
+ connect(ui_evidence_left, SIGNAL(clicked()), this, SLOT(on_evidence_left_clicked()));
+ connect(ui_evidence_right, SIGNAL(clicked()), this, SLOT(on_evidence_right_clicked()));
+ 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_button, SIGNAL(clicked()), this, SLOT(on_evidence_image_button_clicked()));
+ connect(ui_evidence_x, SIGNAL(clicked()), this, SLOT(on_evidence_x_clicked()));
+
+ ui_evidence->hide();
+}
+
+void Courtroom::set_evidence_list(QVector<evi_type> &p_evi_list)
+{
+ local_evidence_list.clear();
+ local_evidence_list = p_evi_list;
+
+ set_evidence_page();
+}
+
+void Courtroom::set_evidence_page()
+{
+ int total_evidence = local_evidence_list.size();
+
+ ui_evidence_left->hide();
+ ui_evidence_right->hide();
+
+ for (AOEvidenceButton *i_button : ui_evidence_list)
+ {
+ i_button->reset();
+ }
+
+ //to account for the "add evidence" button
+ ++total_evidence;
+
+ int total_pages = total_evidence / max_evidence_on_page;
+ int evidence_on_page = 0;
+
+ if ((total_evidence % max_evidence_on_page) != 0)
+ {
+ ++total_pages;
+ //i. e. not on the last page
+ if (total_pages > current_evidence_page + 1)
+ evidence_on_page = max_evidence_on_page;
+ else
+ evidence_on_page = total_evidence % max_evidence_on_page;
+
+ }
+ else
+ evidence_on_page = max_evidence_on_page;
+
+ if (total_pages > current_evidence_page + 1)
+ ui_evidence_right->show();
+
+ if (current_evidence_page > 0)
+ ui_evidence_left->show();
+
+ for (int n_evidence_button = 0 ; n_evidence_button < evidence_on_page ; ++n_evidence_button)
+ {
+ int n_real_evidence = n_evidence_button + current_evidence_page * max_evidence_on_page;
+ AOEvidenceButton *f_evidence_button = ui_evidence_list.at(n_evidence_button);
+
+ //ie. the add evidence button
+ if (n_real_evidence == (total_evidence - 1))
+ f_evidence_button->set_theme_image("addevidence.png");
+ else if (n_real_evidence < (total_evidence - 1))
+ {
+ f_evidence_button->set_image(local_evidence_list.at(n_real_evidence).image);
+
+ if (n_real_evidence == current_evidence)
+ f_evidence_button->set_selected(true);
+ else
+ f_evidence_button->set_selected(false);
+ }
+ else
+ f_evidence_button->set_image("");
+
+ f_evidence_button->show();
+ }
+}
+
+void Courtroom::on_evidence_name_edited()
+{
+ if (current_evidence >= local_evidence_list.size())
+ return;
+
+ QStringList f_contents;
+
+ 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);
+
+ ao_app->send_server_packet(new AOPacket("EE", f_contents));
+}
+
+void Courtroom::on_evidence_image_name_edited()
+{
+ if (current_evidence >= local_evidence_list.size())
+ return;
+
+ 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(f_evi.description);
+ f_contents.append(ui_evidence_image_name->text());
+
+ ao_app->send_server_packet(new AOPacket("EE", f_contents));
+}
+
+void Courtroom::on_evidence_image_button_clicked()
+{
+ QFileDialog dialog(this);
+ dialog.setFileMode(QFileDialog::ExistingFile);
+ dialog.setNameFilter(tr("Images (*.png)"));
+ dialog.setViewMode(QFileDialog::List);
+ dialog.setDirectory(ao_app->get_base_path() + "evidence");
+
+ QStringList filenames;
+
+ if (dialog.exec())
+ filenames = dialog.selectedFiles();
+
+ if (filenames.size() != 1)
+ return;
+
+ QString filename = filenames.at(0);
+
+ QStringList split_filename = filename.split("/");
+
+ filename = split_filename.at(split_filename.size() - 1);
+
+ ui_evidence_image_name->setText(filename);
+
+ on_evidence_image_name_edited();
+}
+
+void Courtroom::on_evidence_clicked(int p_id)
+{
+ ui_evidence_name->setReadOnly(true);
+
+ int f_real_id = p_id + max_evidence_on_page * current_evidence_page;
+
+ if (f_real_id == local_evidence_list.size())
+ {
+ ao_app->send_server_packet(new AOPacket("PE#<name>#<description>#empty.png#%"));
+ return;
+ }
+ else if (f_real_id > local_evidence_list.size())
+ return;
+
+ ui_evidence_name->setText(local_evidence_list.at(f_real_id).name);
+
+ for (AOEvidenceButton *i_button : ui_evidence_list)
+ i_button->set_selected(false);
+
+ ui_evidence_list.at(p_id)->set_selected(true);
+
+ current_evidence = f_real_id;
+
+ ui_ic_chat_message->setFocus();
+
+}
+
+void Courtroom::on_evidence_double_clicked(int p_id)
+{
+ int f_real_id = p_id + max_evidence_on_page * current_evidence_page;
+
+ if (f_real_id >= local_evidence_list.size())
+ return;
+
+ current_evidence = f_real_id;
+
+ evi_type f_evi = local_evidence_list.at(f_real_id);
+
+ ui_evidence_description->clear();
+ ui_evidence_description->appendPlainText(f_evi.description);
+
+ ui_evidence_image_name->setText(f_evi.image);
+
+ ui_evidence_overlay->show();
+
+ ui_ic_chat_message->setFocus();
+}
+
+void Courtroom::on_evidence_hover(int p_id, bool p_state)
+{
+ ui_evidence_name->setReadOnly(true);
+ int final_id = p_id + max_evidence_on_page * current_evidence_page;
+
+ if (p_state)
+ {
+ if (final_id == local_evidence_list.size())
+ ui_evidence_name->setText("Add new evidence...");
+ else if (final_id < local_evidence_list.size())
+ ui_evidence_name->setText(local_evidence_list.at(final_id).name);
+ }
+ else if (current_evidence < local_evidence_list.size())
+ ui_evidence_name->setText(local_evidence_list.at(current_evidence).name);
+ else
+ ui_evidence_name->setText("");
+}
+
+void Courtroom::on_evidence_left_clicked()
+{
+ --current_evidence_page;
+
+ set_evidence_page();
+
+ ui_ic_chat_message->setFocus();
+}
+
+void Courtroom::on_evidence_right_clicked()
+{
+ ++current_evidence_page;
+
+ set_evidence_page();
+
+ ui_ic_chat_message->setFocus();
+}
+
+void Courtroom::on_evidence_present_clicked()
+{
+ if (is_presenting_evidence)
+ ui_evidence_present->set_image("present_disabled.png");
+ else
+ ui_evidence_present->set_image("present.png");
+
+ is_presenting_evidence = !is_presenting_evidence;
+
+ ui_ic_chat_message->setFocus();
+}
+
+void Courtroom::on_evidence_delete_clicked()
+{
+ ui_evidence_description->setReadOnly(true);
+ ui_evidence_overlay->hide();
+
+ ao_app->send_server_packet(new AOPacket("DE#" + QString::number(current_evidence) + "#%"));
+
+ current_evidence = 0;
+
+ ui_ic_chat_message->setFocus();
+}
+
+void Courtroom::on_evidence_x_clicked()
+{
+ ui_evidence_description->setReadOnly(true);
+ ui_evidence_overlay->hide();
+
+ if (current_evidence >= local_evidence_list.size())
+ return;
+
+ 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));
+
+ ui_ic_chat_message->setFocus();
+}
+