aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--aoevidencebutton.cpp38
-rw-r--r--aoevidencebutton.h14
-rw-r--r--courtroom.cpp14
-rw-r--r--courtroom.h19
-rw-r--r--datatypes.h1
-rw-r--r--evidence.cpp157
-rw-r--r--packet_distribution.cpp1
7 files changed, 232 insertions, 12 deletions
diff --git a/aoevidencebutton.cpp b/aoevidencebutton.cpp
index 993bb4bd..a5a45651 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 b925fced..df5f38b9 100644
--- a/aoevidencebutton.h
+++ b/aoevidencebutton.h
@@ -2,6 +2,7 @@
#define AOEVIDENCEBUTTON_H
#include "aoapplication.h"
+#include "aoimage.h"
#include <QPushButton>
#include <QString>
@@ -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 9020901d..d8a34592 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 dee00273..5d6b0cdd 100644
--- a/courtroom.h
+++ b/courtroom.h
@@ -172,6 +172,8 @@ private:
int emote_rows = 2;
int max_emotes_on_page = 10;
+ QVector<evi_type> 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<AOEvidenceButton*> 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 c0ca066b..f6ce43f1 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 59ea7d6f..a5cbb166 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 d56fc1ef..4a848327 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;