From 3f926341c83b4b9d75554f4fe4ca09586fb9ba40 Mon Sep 17 00:00:00 2001 From: David Skoland Date: Wed, 15 Feb 2017 01:00:16 +0100 Subject: [PATCH] finished evidence. ready for release. --- aoevidencebutton.cpp | 38 +++++++++- aoevidencebutton.h | 14 +++- courtroom.cpp | 14 +++- courtroom.h | 19 ++++- datatypes.h | 1 + evidence.cpp | 157 +++++++++++++++++++++++++++++++++++++++- packet_distribution.cpp | 1 + 7 files changed, 232 insertions(+), 12 deletions(-) diff --git a/aoevidencebutton.cpp b/aoevidencebutton.cpp index 993bb4b..a5a4565 100644 --- a/aoevidencebutton.cpp +++ b/aoevidencebutton.cpp @@ -6,8 +6,17 @@ AOEvidenceButton::AOEvidenceButton(QWidget *p_parent, AOApplication *p_ao_app, i { ao_app = p_ao_app; + ui_selector = new AOImage(p_parent, ao_app); + ui_selector->resize(71, 71); + ui_selector->move(p_x - 1, p_y - 1); + ui_selector->set_scaled_image("evidence_selector.png"); + ui_selector->setAttribute(Qt::WA_TransparentForMouseEvents); + ui_selector->hide(); + this->move(p_x, p_y); this->resize(70, 70); + + connect(this, SIGNAL(clicked()), this, SLOT(on_clicked())); } void AOEvidenceButton::set_image(QString p_image) @@ -21,12 +30,39 @@ void AOEvidenceButton::set_image(QString p_image) } else { - this->setText("evi"); + this->setText(p_image); this->setStyleSheet(""); } } +void AOEvidenceButton::set_selected(bool p_selected) +{ + m_selected = p_selected; + + if (!m_selected) + ui_selector->hide(); +} + void AOEvidenceButton::on_clicked() { evidence_clicked(m_id); } + +void AOEvidenceButton::enterEvent(QEvent * e) +{ + ui_selector->show(); + + on_hover(m_id, true); + + setFlat(false); + QPushButton::enterEvent(e); +} + +void AOEvidenceButton::leaveEvent(QEvent * e) +{ + if (!m_selected) + ui_selector->hide(); + + on_hover(m_id, false); + QPushButton::leaveEvent(e); +} diff --git a/aoevidencebutton.h b/aoevidencebutton.h index b925fce..df5f38b 100644 --- a/aoevidencebutton.h +++ b/aoevidencebutton.h @@ -2,6 +2,7 @@ #define AOEVIDENCEBUTTON_H #include "aoapplication.h" +#include "aoimage.h" #include #include @@ -16,13 +17,24 @@ public: void set_image(QString p_image); void set_id(int p_id) {m_id = p_id;} + void set_selected(bool p_selected); + private: AOApplication *ao_app; - int m_id; + AOImage *ui_selector; + + bool m_selected = false; + + int m_id = 0; + +protected: + void enterEvent(QEvent *e); + void leaveEvent(QEvent *e); signals: void evidence_clicked(int p_id); + void on_hover(int p_id, bool p_state); private slots: void on_clicked(); diff --git a/courtroom.cpp b/courtroom.cpp index 9020901..d8a3459 100644 --- a/courtroom.cpp +++ b/courtroom.cpp @@ -63,6 +63,7 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() ui_vp_message->setFrameStyle(QFrame::NoFrame); ui_vp_message->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); ui_vp_message->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + ui_vp_message->setReadOnly(true); ui_vp_testimony = new AOImage(ui_viewport, ao_app); ui_vp_realization = new AOImage(this, ao_app); ui_vp_wtce = new AOMovie(ui_viewport, ao_app); @@ -168,7 +169,6 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() ui_evidence_button = new AOButton(this, ao_app); ui_evidence = new AOImage(this, ao_app); - ui_evidence->hide(); /////////////char select widgets under here/////////////// @@ -289,7 +289,6 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow() set_widgets(); - //in evidence.cpp construct_evidence(); //implementation in emotes.cpp @@ -379,7 +378,6 @@ void Courtroom::set_widgets() "color: white;"); set_size_and_pos(ui_vp_message, "message"); - ui_vp_message->setReadOnly(true); #if (defined (_WIN32) || defined (_WIN64)) ui_vp_message->setFont(pt_10); #else @@ -520,6 +518,7 @@ void Courtroom::set_widgets() set_size_and_pos(ui_evidence_button, "evidence_button"); //ui_evidence_button->set_image("evidencebutton.png"); + ui_evidence_button->setText("Evidence"); set_size_and_pos(ui_evidence, "evidence_background"); ui_evidence->set_image("evidencebackground.png"); @@ -591,6 +590,7 @@ void Courtroom::set_taken(int n_char, bool p_taken) f_char.name = char_list.at(n_char).name; f_char.description = char_list.at(n_char).description; f_char.taken = p_taken; + f_char.evidence_string = char_list.at(n_char).evidence_string; char_list.replace(n_char, f_char); } @@ -691,6 +691,13 @@ void Courtroom::enter_courtroom(int p_cid) set_emote_page(); + current_evidence_page = 0; + current_evidence = 0; + + qDebug() << "setting evidence page"; + set_evidence_page(); + qDebug() << "evidence page set"; + QString side = ao_app->get_char_side(f_char); if (side == "jud") @@ -1805,6 +1812,7 @@ void Courtroom::on_evidence_button_clicked() if (ui_evidence->isHidden()) { ui_evidence->show(); + ui_evidence_overlay->hide(); } else { diff --git a/courtroom.h b/courtroom.h index dee0027..5d6b0cd 100644 --- a/courtroom.h +++ b/courtroom.h @@ -172,6 +172,8 @@ private: int emote_rows = 2; int max_emotes_on_page = 10; + QVector local_evidence_list; + int current_evidence_page = 0; int current_evidence = 0; int evidence_columns = 6; @@ -273,11 +275,14 @@ private: AOImage *ui_muted; AOButton *ui_evidence_button; + AOImage *ui_evidence; + QLabel *ui_evidence_name; QVector ui_evidence_list; AOImage *ui_evidence_left; AOImage *ui_evidence_right; - - AOImage *ui_evidence; + AOImage *ui_evidence_overlay; + AOButton *ui_evidence_x; + QPlainTextEdit *ui_evidence_description; AOImage *ui_char_select_background; @@ -326,11 +331,17 @@ private slots: void on_music_list_double_clicked(QModelIndex p_model); void on_emote_clicked(int p_id); - void on_evidence_clicked(int p_id); void on_emote_left_clicked(); void on_emote_right_clicked(); + void on_evidence_clicked(int p_id); + + void on_evidence_hover(int p_id, bool p_state); + + void on_evidence_left_clicked(); + void on_evidence_right_clicked(); + void on_hold_it_clicked(); void on_objection_clicked(); void on_take_that_clicked(); @@ -366,6 +377,8 @@ private slots: void on_evidence_button_clicked(); + void on_evidence_x_clicked(); + void on_back_to_lobby_clicked(); void on_char_select_left_clicked(); diff --git a/datatypes.h b/datatypes.h index c0ca066..f6ce43f 100644 --- a/datatypes.h +++ b/datatypes.h @@ -26,6 +26,7 @@ struct char_type { QString name; QString description; + QString evidence_string; bool taken; }; diff --git a/evidence.cpp b/evidence.cpp index 59ea7d6..a5cbb16 100644 --- a/evidence.cpp +++ b/evidence.cpp @@ -15,14 +15,10 @@ void Courtroom::construct_evidence() int y_mod_count{0}; evidence_columns = ui_evidence->width() / x_modifier; - qDebug() << "columns: " << evidence_columns; evidence_rows = ui_evidence->height() / y_modifier; - qDebug() << "rows: " << evidence_rows; max_evidence_on_page = evidence_columns * evidence_rows; - qDebug() << "max_evidence_on_page: " << max_evidence_on_page; - for (int n = 0 ; n < max_evidence_on_page ; ++n) { int x_pos = base_x_pos + (x_modifier * x_mod_count); @@ -35,6 +31,7 @@ void Courtroom::construct_evidence() f_evidence->set_id(n); connect(f_evidence, SIGNAL(evidence_clicked(int)), this, SLOT(on_evidence_clicked(int))); + connect(f_evidence, SIGNAL(on_hover(int, bool)), this, SLOT(on_evidence_hover(int, bool))); ++x_mod_count; @@ -44,11 +41,163 @@ void Courtroom::construct_evidence() x_mod_count = 0; } } + + ui_evidence_name = new QLabel(ui_evidence); + + ui_evidence_left = new AOImage(ui_evidence, ao_app); + ui_evidence_right = new AOImage(ui_evidence, ao_app); + + ui_evidence_overlay = new AOImage(ui_evidence, ao_app); + + ui_evidence_x = new AOButton(ui_evidence_overlay, ao_app); + + ui_evidence_description = new QPlainTextEdit(ui_evidence_overlay); + + set_size_and_pos(ui_evidence_name, "evidence_name"); + 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);"); + + set_size_and_pos(ui_evidence_left, "evidence_left"); + ui_evidence_left->set_image("arrow_left.png"); + + set_size_and_pos(ui_evidence_right, "evidence_right"); + ui_evidence_right->set_image("arrow_right.png"); + + set_size_and_pos(ui_evidence_overlay, "evidence_overlay"); + ui_evidence_overlay->set_image("evidenceoverlay.png"); + + set_size_and_pos(ui_evidence_x, "evidence_x"); + ui_evidence_x->setText("X"); + + set_size_and_pos(ui_evidence_description, "evidence_description"); + ui_evidence_description->setReadOnly(true); + ui_evidence_description->setStyleSheet("background-color: rgba(0, 0, 0, 0);" + "color: white;"); + + connect(ui_evidence_x, SIGNAL(clicked()), this, SLOT(on_evidence_x_clicked())); + + ui_evidence->hide(); +} + +void Courtroom::set_evidence_page() +{ + local_evidence_list.clear(); + + QString evi_string = char_list.at(m_cid).evidence_string; + + QStringList evi_numbers = evi_string.split(","); + + for (QString i_evi : evi_numbers) + { + int n_evi = i_evi.toInt() - 1; + + if (n_evi < 0 || n_evi >= evidence_list.size()) + continue; + + local_evidence_list.append(evidence_list.at(n_evi)); + } + + int total_evidence = local_evidence_list.size(); + + qDebug() << "total_evidence: " << total_evidence; + + ui_evidence_left->hide(); + ui_evidence_right->hide(); + + qDebug() << "hid evidence left and right"; + + for (AOEvidenceButton *i_button : ui_evidence_list) + { + i_button->hide(); + } + + qDebug() << "hid all evidence buttons"; + + if (total_evidence == 0) + return; + + qDebug() << "max_evi_on_page =" << max_evidence_on_page; + + int total_pages = total_evidence / max_evidence_on_page; + + qDebug() << "total_pages: " << total_pages; + + int evidence_on_page = 0; + + if (total_evidence % max_evidence_on_page != 0) + { + ++total_pages; + evidence_on_page = total_evidence % max_evidence_on_page; + + } + else + evidence_on_page = max_evidence_on_page; + + qDebug() << "evidence_on_page: " << 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 = 0 ; n_evidence < evidence_on_page ; ++n_evidence) + { + int n_real_evidence = n_evidence + current_evidence_page * max_evidence_on_page; + AOEvidenceButton *f_evidence = ui_evidence_list.at(n_evidence); + + f_evidence->set_image(evidence_list.at(n_real_evidence).image); + + f_evidence->show(); + } + } void Courtroom::on_evidence_clicked(int p_id) { + ui_evidence_name->setText(local_evidence_list.at(p_id + max_evidence_on_page * current_evidence_page).name); + for (AOEvidenceButton *i_button : ui_evidence_list) + { + i_button->set_selected(false); + } + + ui_evidence_list.at(p_id)->set_selected(true); + + current_evidence = p_id + max_evidence_on_page * current_evidence_page; + + ui_evidence_description->clear(); + ui_evidence_description->appendPlainText(local_evidence_list.at(current_evidence).description); + + ui_evidence_overlay->show(); } +void Courtroom::on_evidence_hover(int p_id, bool p_state) +{ + if (p_state) + ui_evidence_name->setText(local_evidence_list.at(p_id + max_evidence_on_page * current_evidence_page).name); + else + ui_evidence_name->setText(""); +} + +void Courtroom::on_evidence_left_clicked() +{ + --current_evidence_page; + + set_evidence_page(); +} + +void Courtroom::on_evidence_right_clicked() +{ + ++current_evidence_page; + + set_evidence_page(); +} + +void Courtroom::on_evidence_x_clicked() +{ + ui_evidence_overlay->hide(); +} diff --git a/packet_distribution.cpp b/packet_distribution.cpp index d56fc1e..4a84832 100644 --- a/packet_distribution.cpp +++ b/packet_distribution.cpp @@ -251,6 +251,7 @@ void AOApplication::server_packet_received(AOPacket *p_packet) char_type f_char; f_char.name = sub_elements.at(0); f_char.description = sub_elements.at(1); + f_char.evidence_string = sub_elements.at(3); //temporary. the CharsCheck packet sets this properly f_char.taken = false;