diff --git a/cockatrice/src/replay_timeline_widget.cpp b/cockatrice/src/replay_timeline_widget.cpp index efcb68bc..201c9634 100644 --- a/cockatrice/src/replay_timeline_widget.cpp +++ b/cockatrice/src/replay_timeline_widget.cpp @@ -22,12 +22,12 @@ void ReplayTimelineWidget::setTimeline(const QList &_replayTimeline) histogram.clear(); int binEndTime = binLength - 1; int binValue = 0; - for (int i = 0; i < replayTimeline.size(); ++i) { - if (replayTimeline[i] > binEndTime) { + for (int i : replayTimeline) { + if (i > binEndTime) { histogram.append(binValue); if (binValue > maxBinValue) maxBinValue = binValue; - while (replayTimeline[i] > binEndTime + binLength) { + while (i > binEndTime + binLength) { histogram.append(0); binEndTime += binLength; } @@ -59,17 +59,30 @@ void ReplayTimelineWidget::paintEvent(QPaintEvent * /* event */) const QColor barColor = QColor::fromHsv(120, 255, 255, 100); quint64 w = (quint64)(width() - 1) * (quint64)currentTime / maxTime; - painter.fillRect(0, 0, w, height() - 1, barColor); + painter.fillRect(0, 0, static_cast(w), height() - 1, barColor); +} + +void ReplayTimelineWidget::mousePressEvent(QMouseEvent *event) +{ + int newTime = static_cast((long)maxTime * (long)event->x() / width()); + if (newTime < currentTime) { + currentTime = 0; + currentEvent = 0; + emit rewound(); + } + currentTime = newTime - 200; // 200 is added back in replayTimerTimeout + replayTimerTimeout(); + update(); } QSize ReplayTimelineWidget::sizeHint() const { - return QSize(-1, 50); + return {-1, 50}; } QSize ReplayTimelineWidget::minimumSizeHint() const { - return QSize(400, 50); + return {400, 50}; } void ReplayTimelineWidget::replayTimerTimeout() @@ -91,12 +104,12 @@ void ReplayTimelineWidget::replayTimerTimeout() void ReplayTimelineWidget::setTimeScaleFactor(qreal _timeScaleFactor) { timeScaleFactor = _timeScaleFactor; - replayTimer->setInterval(200 / timeScaleFactor); + replayTimer->setInterval(static_cast(200 / timeScaleFactor)); } void ReplayTimelineWidget::startReplay() { - replayTimer->start(200 / timeScaleFactor); + replayTimer->start(static_cast(200 / timeScaleFactor)); } void ReplayTimelineWidget::stopReplay() diff --git a/cockatrice/src/replay_timeline_widget.h b/cockatrice/src/replay_timeline_widget.h index 1328d41f..2805b89e 100644 --- a/cockatrice/src/replay_timeline_widget.h +++ b/cockatrice/src/replay_timeline_widget.h @@ -2,6 +2,7 @@ #define REPLAY_TIMELINE_WIDGET #include +#include #include class QPaintEvent; @@ -13,6 +14,7 @@ class ReplayTimelineWidget : public QWidget signals: void processNextEvent(); void replayFinished(); + void rewound(); private: QTimer *replayTimer; @@ -27,10 +29,10 @@ private slots: void replayTimerTimeout(); public: - ReplayTimelineWidget(QWidget *parent = 0); + explicit ReplayTimelineWidget(QWidget *parent = nullptr); void setTimeline(const QList &_replayTimeline); - QSize sizeHint() const; - QSize minimumSizeHint() const; + QSize sizeHint() const override; + QSize minimumSizeHint() const override; void setTimeScaleFactor(qreal _timeScaleFactor); int getCurrentEvent() const { @@ -41,7 +43,8 @@ public slots: void stopReplay(); protected: - void paintEvent(QPaintEvent *event); + void paintEvent(QPaintEvent *event) override; + void mousePressEvent(QMouseEvent *event) override; }; #endif diff --git a/cockatrice/src/tab_game.cpp b/cockatrice/src/tab_game.cpp index b659d667..735c74d1 100644 --- a/cockatrice/src/tab_game.cpp +++ b/cockatrice/src/tab_game.cpp @@ -1604,6 +1604,7 @@ void TabGame::createReplayDock() timelineWidget->setTimeline(replayTimeline); connect(timelineWidget, SIGNAL(processNextEvent()), this, SLOT(replayNextEvent())); connect(timelineWidget, SIGNAL(replayFinished()), this, SLOT(replayFinished())); + connect(timelineWidget, &ReplayTimelineWidget::rewound, messageLog, &ChatView::clearChat); replayStartButton = new QToolButton; replayStartButton->setIconSize(QSize(32, 32));