aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCrystalwarrior <varsash@gmail.com>2021-01-11 17:38:08 +0300
committerCrystalwarrior <varsash@gmail.com>2021-01-11 17:38:08 +0300
commit45c78ea5caf58b6b8494decc6021540c755fabd7 (patch)
tree88ecfe13caacf3831e870022749f3bf4acea2954
parent62532f0b643c5f7502f1f48781ec6ec338019275 (diff)
Add "id" variable to the clock functions and properly parse the ID
Implement scalable maximum clock count, right now it's at 5 clocks a theme can have max Theme "clock_" starts from 1 instead of 0 since users don't know when stuff starts at index 0 TODO: testing lol
-rw-r--r--include/courtroom.h15
-rw-r--r--src/courtroom.cpp60
-rw-r--r--src/packet_distribution.cpp19
3 files changed, 62 insertions, 32 deletions
diff --git a/include/courtroom.h b/include/courtroom.h
index 49243258..91606c38 100644
--- a/include/courtroom.h
+++ b/include/courtroom.h
@@ -255,12 +255,12 @@ public:
void check_connection_received();
- void start_clock();
- void start_clock(qint64 msecs);
- void set_clock(qint64 msecs);
- void pause_clock();
- void stop_clock();
- void set_clock_visibility(bool visible);
+ void start_clock(int id);
+ void start_clock(int id, qint64 msecs);
+ void set_clock(int id, qint64 msecs);
+ void pause_clock(int id);
+ void stop_clock(int id);
+ void set_clock_visibility(int id, bool visible);
qint64 pong();
// Truncates text so it fits within theme-specified boundaries and sets the tooltip to the full string
@@ -563,7 +563,8 @@ private:
ScrollText *ui_music_name;
AOMovie *ui_music_display;
- AOClockLabel *ui_clock;
+ static const int max_clocks = 5;
+ AOClockLabel *ui_clock[max_clocks];
AOButton *ui_pair_button;
QListWidget *ui_pair_list;
diff --git a/src/courtroom.cpp b/src/courtroom.cpp
index 962c04f3..d997c91e 100644
--- a/src/courtroom.cpp
+++ b/src/courtroom.cpp
@@ -115,10 +115,12 @@ Courtroom::Courtroom(AOApplication *p_ao_app) : QMainWindow()
ui_music_name = new ScrollText(ui_music_display);
ui_music_name->setText(tr("None"));
ui_music_name->setAttribute(Qt::WA_TransparentForMouseEvents);
-
- ui_clock = new AOClockLabel(this);
- ui_clock->setAttribute(Qt::WA_TransparentForMouseEvents);
- ui_clock->hide();
+
+ for (int i = 0; i < max_clocks; i++) {
+ ui_clock[i] = new AOClockLabel(this);
+ ui_clock[i]->setAttribute(Qt::WA_TransparentForMouseEvents);
+ ui_clock[i]->hide();
+ }
ui_ic_chat_name = new QLineEdit(this);
ui_ic_chat_name->setFrame(false);
@@ -645,7 +647,9 @@ void Courtroom::set_widgets()
ui_music_display->play("music_display");
ui_music_display->set_play_once(false);
- set_size_and_pos(ui_clock, "clock");
+ for (int i = 0; i < max_clocks; i++) {
+ set_size_and_pos(ui_clock[i], "clock_" + QString::number(i+1));
+ }
if (is_ao2_bg) {
set_size_and_pos(ui_ic_chat_message, "ao2_ic_chat_message");
@@ -994,7 +998,9 @@ void Courtroom::set_fonts(QString p_char)
set_font(ui_music_list, "", "music_list", p_char);
set_font(ui_area_list, "", "area_list", p_char);
set_font(ui_music_name, "", "music_name", p_char);
- set_font(ui_clock, "", "clock", p_char);
+
+ for (int i = 0; i < max_clocks; i++)
+ set_font(ui_clock[i], "", "clock_" + QString::number(i+1), p_char);
set_dropdowns();
}
@@ -5066,34 +5072,52 @@ void Courtroom::announce_case(QString title, bool def, bool pro, bool jud,
}
}
-void Courtroom::start_clock()
+void Courtroom::start_clock(int id)
{
- ui_clock->start();
+ if (id < max_clocks && ui_clock[id] != nullptr)
+ {
+ ui_clock[id]->start();
+ }
}
-void Courtroom::start_clock(qint64 msecs)
+void Courtroom::start_clock(int id, qint64 msecs)
{
- ui_clock->start(static_cast<int>(msecs));
+ if (id < max_clocks && ui_clock[id] != nullptr)
+ {
+ ui_clock[id]->start(static_cast<int>(msecs));
+ }
}
-void Courtroom::set_clock(qint64 msecs)
+void Courtroom::set_clock(int id, qint64 msecs)
{
- ui_clock->set(static_cast<int>(msecs), true);
+ if (id < max_clocks && ui_clock[id] != nullptr)
+ {
+ ui_clock[id]->set(static_cast<int>(msecs), true);
+ }
}
-void Courtroom::pause_clock()
+void Courtroom::pause_clock(int id)
{
- ui_clock->pause();
+ if (id < max_clocks && ui_clock[id] != nullptr)
+ {
+ ui_clock[id]->pause();
+ }
}
-void Courtroom::stop_clock()
+void Courtroom::stop_clock(int id)
{
- ui_clock->stop();
+ if (id < max_clocks && ui_clock[id] != nullptr)
+ {
+ ui_clock[id]->stop();
+ }
}
-void Courtroom::set_clock_visibility(bool visible)
+void Courtroom::set_clock_visibility(int id, bool visible)
{
- ui_clock->setVisible(visible);
+ if (id < max_clocks && ui_clock[id] != nullptr)
+ {
+ ui_clock[id]->setVisible(visible);
+ }
}
void Courtroom::truncate_label_text(QWidget *p_widget, QString p_identifier)
diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp
index 0bc38141..2699f08f 100644
--- a/src/packet_distribution.cpp
+++ b/src/packet_distribution.cpp
@@ -578,7 +578,12 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (!courtroom_constructed || f_contents.size() < 2)
goto end;
- // Note: timer ID is reserved as argument 0
+ // Timer ID is reserved as argument 0
+ int id = f_contents.at(0).toInt();
+
+ // ID is invalid
+ if (id < 0 || id >= w_courtroom->max_clocks)
+ goto end;
// Type 0 = start/resume/sync timer at time
// Type 1 = pause timer at time
@@ -600,23 +605,23 @@ void AOApplication::server_packet_received(AOPacket *p_packet)
if (type == 0)
{
timer_value -= latency / 2;
- w_courtroom->start_clock(timer_value);
+ w_courtroom->start_clock(id, timer_value);
}
else
{
- w_courtroom->pause_clock();
- w_courtroom->set_clock(timer_value);
+ w_courtroom->pause_clock(id);
+ w_courtroom->set_clock(id, timer_value);
}
}
else
{
- w_courtroom->stop_clock();
+ w_courtroom->stop_clock(id);
}
}
else if (type == 2)
- w_courtroom->set_clock_visibility(true);
+ w_courtroom->set_clock_visibility(id, true);
else if (type == 3)
- w_courtroom->set_clock_visibility(false);
+ w_courtroom->set_clock_visibility(id, false);
}
else if (header == "CHECK") {
if (!courtroom_constructed)