diff options
| author | Crystalwarrior <varsash@gmail.com> | 2020-08-25 12:48:09 +0300 |
|---|---|---|
| committer | Crystalwarrior <varsash@gmail.com> | 2020-08-25 12:48:09 +0300 |
| commit | ee3bad44c72329d61a2cb0c4064c22512451372d (patch) | |
| tree | 421e95752a4580b30dc097f4c5b72d7e2c7493fe /src | |
| parent | 7e9c5726e02a65023d9563f49e833525bf8f4bae (diff) | |
Implement clock pausing
Implement clock setting w/o starting or stopping
Both of these should make it possible for the server to start/stop/pause/resume the clock with perfect synchronization to the true time.
Diffstat (limited to 'src')
| -rw-r--r-- | src/aoclocklabel.cpp | 54 | ||||
| -rw-r--r-- | src/courtroom.cpp | 15 | ||||
| -rw-r--r-- | src/packet_distribution.cpp | 17 |
3 files changed, 61 insertions, 25 deletions
diff --git a/src/aoclocklabel.cpp b/src/aoclocklabel.cpp index 783fcc51..7bbf48c7 100644 --- a/src/aoclocklabel.cpp +++ b/src/aoclocklabel.cpp @@ -4,27 +4,35 @@ AOClockLabel::AOClockLabel(QWidget *parent) : QLabel(parent) {} void AOClockLabel::start() { - this->resume(); + timer.start(100, this); } void AOClockLabel::start(int msecs) { + this->set(msecs); + this->start(); +} + +void AOClockLabel::set(int msecs, bool update_text) +{ QTime time = QTime::currentTime(); if (msecs > time.msec()) { target_time = time.addMSecs(msecs); - timer.start(100, this); } -} - -void AOClockLabel::pause() -{ - timer.stop(); -} - -void AOClockLabel::resume() -{ - timer.start(100, this); + if (update_text) + { + if (QTime::currentTime() >= target_time) + { + this->setText("00:00:00.000"); + } + else + { + QTime timeleft = QTime(0,0).addMSecs(QTime::currentTime().msecsTo(target_time)); + QString timestring = timeleft.toString("hh:mm:ss.zzz"); + this->setText(timestring); + } + } } void AOClockLabel::stop() @@ -35,16 +43,16 @@ void AOClockLabel::stop() void AOClockLabel::timerEvent(QTimerEvent *event) { - if (event->timerId() == timer.timerId()) { - if (QTime::currentTime() >= target_time) - { - this->stop(); - return; - } - QTime timeleft = QTime(0,0).addMSecs(QTime::currentTime().msecsTo(target_time)); - QString timestring = timeleft.toString("hh:mm:ss.zzz"); - this->setText(timestring); - } else { - QWidget::timerEvent(event); + if (event->timerId() == timer.timerId()) { + if (QTime::currentTime() >= target_time) + { + this->stop(); + return; } + QTime timeleft = QTime(0,0).addMSecs(QTime::currentTime().msecsTo(target_time)); + QString timestring = timeleft.toString("hh:mm:ss.zzz"); + this->setText(timestring); + } else { + QWidget::timerEvent(event); + } } diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 6bd2bd2d..f4e31647 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -4715,11 +4715,26 @@ void Courtroom::announce_case(QString title, bool def, bool pro, bool jud, } } +void Courtroom::start_clock() +{ + ui_clock->start(); +} + void Courtroom::start_clock(qint64 msecs) { ui_clock->start(static_cast<int>(msecs)); } +void Courtroom::set_clock(qint64 msecs) +{ + ui_clock->set(static_cast<int>(msecs), true); +} + +void Courtroom::pause_clock() +{ + ui_clock->pause(); +} + void Courtroom::stop_clock() { ui_clock->stop(); diff --git a/src/packet_distribution.cpp b/src/packet_distribution.cpp index 1f49719f..578f6df0 100644 --- a/src/packet_distribution.cpp +++ b/src/packet_distribution.cpp @@ -729,12 +729,25 @@ void AOApplication::server_packet_received(AOPacket *p_packet) f_contents.at(5) == "1"); } else if (header == "TI") { // Timer packet - if (courtroom_constructed && f_contents.size() >= 1) { + if (courtroom_constructed && f_contents.size() > 0) { qint64 resolution = f_contents.at(0).toInt(); + //Type 0 = start/stop timer + //Type 1 = pause timer + int type = 0; + if (f_contents.size() > 1) + type = f_contents.at(1).toInt(); qDebug() << "timer" << resolution << last_ping << resolution - last_ping; resolution = resolution - last_ping; if (resolution > 0) - w_courtroom->start_clock(resolution); + { + if (type == 1) + { + w_courtroom->pause_clock(); + w_courtroom->set_clock(resolution); + } + else + w_courtroom->start_clock(resolution); + } else w_courtroom->stop_clock(); } |
