Feature: Clicking the evidence icon when it's presented by a player will show the details of that evidence (#760)

* Add click-to-view evidence icons

* Fix the clicky icon not being functional if the presented evidence comes from a different page from the first

Co-authored-by: in1tiate <radwoodward@vikings.grayson.edu>
Co-authored-by: Alex Noir <Varsash@gmail.com>
This commit is contained in:
Rosemary Witchaven 2022-05-21 09:21:34 -05:00 committed by GitHub
parent 8657f7c2a2
commit 94dbdf73e0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 42 additions and 9 deletions

View File

@ -7,6 +7,7 @@
#include <QDebug> #include <QDebug>
#include <QLabel> #include <QLabel>
#include <QPushButton>
class AOEvidenceDisplay : public QLabel { class AOEvidenceDisplay : public QLabel {
Q_OBJECT Q_OBJECT
@ -14,19 +15,23 @@ class AOEvidenceDisplay : public QLabel {
public: public:
AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app); AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app);
void show_evidence(QString p_evidence_image, bool is_left_side, int p_volume); void show_evidence(int p_index, QString p_evidence_image, bool is_left_side, int p_volume);
QLabel *get_evidence_icon();
void reset(); void reset();
void combo_resize(int w, int h); void combo_resize(int w, int h);
signals:
void show_evidence_details(int index);
private: private:
AOApplication *ao_app; AOApplication *ao_app;
InterfaceLayer *evidence_movie; InterfaceLayer *evidence_movie;
QLabel *evidence_icon; QPushButton *evidence_icon;
AOSfxPlayer *sfx_player; AOSfxPlayer *sfx_player;
int last_evidence_index = -1;
private slots: private slots:
void show_done(); void show_done();
void icon_clicked();
}; };
#endif // AOEVIDENCEDISPLAY_H #endif // AOEVIDENCEDISPLAY_H

View File

@ -812,6 +812,7 @@ private:
void initialize_evidence(); void initialize_evidence();
void refresh_evidence(); void refresh_evidence();
void show_evidence(int f_real_id);
void set_evidence_page(); void set_evidence_page();
void reset_ui(); void reset_ui();

View File

@ -8,19 +8,23 @@ AOEvidenceDisplay::AOEvidenceDisplay(QWidget *p_parent, AOApplication *p_ao_app)
: QLabel(p_parent) : QLabel(p_parent)
{ {
ao_app = p_ao_app; ao_app = p_ao_app;
evidence_icon = new QLabel(this); evidence_icon = new QPushButton(this);
evidence_icon->hide();
sfx_player = new AOSfxPlayer(this, ao_app); sfx_player = new AOSfxPlayer(this, ao_app);
evidence_movie = new InterfaceLayer(this, ao_app); evidence_movie = new InterfaceLayer(this, ao_app);
connect(evidence_movie, &InterfaceLayer::done, this, &AOEvidenceDisplay::show_done); connect(evidence_movie, &InterfaceLayer::done, this, &AOEvidenceDisplay::show_done);
connect(evidence_icon, &QPushButton::clicked, this, &AOEvidenceDisplay::icon_clicked);
} }
void AOEvidenceDisplay::show_evidence(QString p_evidence_image, void AOEvidenceDisplay::show_evidence(int p_index, QString p_evidence_image,
bool is_left_side, int p_volume) bool is_left_side, int p_volume)
{ {
this->reset(); this->reset();
last_evidence_index = p_index;
sfx_player->set_volume(p_volume); sfx_player->set_volume(p_volume);
QString gif_name; QString gif_name;
@ -43,8 +47,11 @@ void AOEvidenceDisplay::show_evidence(QString p_evidence_image,
ao_app->get_element_dimensions(icon_identifier, "courtroom_design.ini"); ao_app->get_element_dimensions(icon_identifier, "courtroom_design.ini");
f_pixmap = f_pixmap.scaled(icon_dimensions.width, icon_dimensions.height); f_pixmap = f_pixmap.scaled(icon_dimensions.width, icon_dimensions.height);
evidence_icon->setPixmap(f_pixmap); QIcon f_icon(f_pixmap);
evidence_icon->resize(f_pixmap.size());
evidence_icon->setIcon(f_icon);
evidence_icon->setIconSize(f_pixmap.rect().size());
evidence_icon->resize(f_pixmap.rect().size());
evidence_icon->move(icon_dimensions.x, icon_dimensions.y); evidence_icon->move(icon_dimensions.x, icon_dimensions.y);
evidence_movie->static_duration = 320; evidence_movie->static_duration = 320;
evidence_movie->max_duration = 1000; evidence_movie->max_duration = 1000;
@ -63,7 +70,11 @@ void AOEvidenceDisplay::reset()
void AOEvidenceDisplay::show_done() { evidence_icon->show(); } void AOEvidenceDisplay::show_done() { evidence_icon->show(); }
QLabel *AOEvidenceDisplay::get_evidence_icon() { return evidence_icon; } void AOEvidenceDisplay::icon_clicked() {
if (last_evidence_index != -1) {
emit show_evidence_details(last_evidence_index - 1); // i dont know why i have to subtract 1 here
}
}
void AOEvidenceDisplay::combo_resize(int w, int h) void AOEvidenceDisplay::combo_resize(int w, int h)
{ {

View File

@ -552,6 +552,8 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
connect(ui_evidence_button, &AOButton::clicked, this, connect(ui_evidence_button, &AOButton::clicked, this,
&Courtroom::on_evidence_button_clicked); &Courtroom::on_evidence_button_clicked);
connect(ui_vp_evidence_display, &AOEvidenceDisplay::show_evidence_details, this, &Courtroom::show_evidence);
set_widgets(); set_widgets();
set_char_select(); set_char_select();
@ -2839,7 +2841,7 @@ void Courtroom::display_evidence_image()
// def jud and hlp should display the evidence icon on the RIGHT side // def jud and hlp should display the evidence icon on the RIGHT side
bool is_left_side = !(side == "def" || side == "hlp" || bool is_left_side = !(side == "def" || side == "hlp" ||
side == "jud" || side == "jur"); side == "jud" || side == "jur");
ui_vp_evidence_display->show_evidence(f_image, is_left_side, ui_vp_evidence_display->show_evidence(f_evi_id, f_image, is_left_side,
ui_sfx_slider->value()); ui_sfx_slider->value());
} }
} }

View File

@ -370,6 +370,19 @@ void Courtroom::set_evidence_page()
} }
} }
void Courtroom::show_evidence(int f_real_id)
{
// Make sure we're in the global evidence list
evidence_switch(true);
// Set the evidence page properly
current_evidence_page = f_real_id / max_evidence_on_page;
set_evidence_page();
// Display the target evidence using the local ID
int p_id = f_real_id - (max_evidence_on_page * current_evidence_page);
on_evidence_double_clicked(p_id);
}
void Courtroom::on_evidence_name_edited() void Courtroom::on_evidence_name_edited()
{ {
if (current_evidence >= local_evidence_list.size()) if (current_evidence >= local_evidence_list.size())
@ -464,6 +477,7 @@ void Courtroom::on_evidence_double_clicked(int p_id)
ui_evidence_image_name->setReadOnly(false); ui_evidence_image_name->setReadOnly(false);
ui_evidence_image_name->setToolTip(tr("Click to edit...")); ui_evidence_image_name->setToolTip(tr("Click to edit..."));
ui_evidence->show();
ui_evidence_overlay->show(); ui_evidence_overlay->show();
ui_evidence_ok->hide(); ui_evidence_ok->hide();