cabana: clear the old timeline after opening a new route from menu (#27672)

old-commit-hash: 9c84af296c
beeps
Dean Lee 2 years ago committed by GitHub
parent 9e0df8b2ed
commit 6e7afd47ec
  1. 24
      tools/cabana/videowidget.cc
  2. 3
      tools/cabana/videowidget.h

@ -8,11 +8,12 @@
#include <QPixmap>
#include <QStyleOptionSlider>
#include <QTimeEdit>
#include <QTimer>
#include <QToolTip>
#include <QVBoxLayout>
#include <QtConcurrent>
const int MIN_VIDEO_HEIGHT = 100;
static const QColor timeline_colors[] = {
[(int)TimelineType::None] = QColor(111, 143, 175),
[(int)TimelineType::Engaged] = QColor(0, 163, 108),
@ -22,7 +23,7 @@ static const QColor timeline_colors[] = {
[(int)TimelineType::AlertCritical] = QColor(199, 0, 57),
};
inline QString formatTime(int seconds) {
static inline QString formatTime(int seconds) {
return QDateTime::fromTime_t(seconds).toString(seconds > 60 * 60 ? "hh:mm:ss" : "mm:ss");
}
@ -106,7 +107,7 @@ QWidget *VideoWidget::createCameraWidget() {
slider_layout->addWidget(end_time_label);
l->addLayout(slider_layout);
cam_widget->setMinimumHeight(100);
cam_widget->setMinimumHeight(MIN_VIDEO_HEIGHT);
cam_widget->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::MinimumExpanding);
setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Maximum);
@ -164,16 +165,12 @@ void VideoWidget::updatePlayBtnState() {
}
// Slider
Slider::Slider(QWidget *parent) : QSlider(Qt::Horizontal, parent) {
QTimer *timer = new QTimer(this);
timer->setInterval(2000);
timer->callOnTimeout([this]() {
Slider::Slider(QWidget *parent) : timer(this), QSlider(Qt::Horizontal, parent) {
timer.callOnTimeout([this]() {
timeline = can->getTimeline();
update();
});
setMouseTracking(true);
QObject::connect(can, SIGNAL(streamStarted()), timer, SLOT(start()));
QObject::connect(can, &AbstractStream::streamStarted, this, &Slider::streamStarted);
}
@ -187,11 +184,13 @@ void Slider::streamStarted() {
thumnail_future.waitForFinished();
abort_load_thumbnail = false;
thumbnails.clear();
timeline.clear();
timer.start(2000);
thumnail_future = QtConcurrent::run(this, &Slider::loadThumbnails);
}
void Slider::loadThumbnails() {
const auto segments = can->route()->segments();
const auto &segments = can->route()->segments();
for (auto it = segments.rbegin(); it != segments.rend() && !abort_load_thumbnail; ++it) {
std::string qlog = it->second.qlog.toStdString();
if (!qlog.empty()) {
@ -280,3 +279,8 @@ void Slider::mouseMoveEvent(QMouseEvent *e) {
QToolTip::showText(pt, thumb, this, rect());
QSlider::mouseMoveEvent(e);
}
void Slider::leaveEvent(QEvent *event) {
QToolTip::hideText();
QSlider::leaveEvent(event);
}

@ -8,6 +8,7 @@
#include <QLabel>
#include <QPushButton>
#include <QSlider>
#include <QTimer>
#include "selfdrive/ui/qt/widgets/cameraview.h"
#include "selfdrive/ui/qt/widgets/controls.h"
@ -24,6 +25,7 @@ public:
private:
void mousePressEvent(QMouseEvent *e) override;
void mouseMoveEvent(QMouseEvent *e) override;
void leaveEvent(QEvent *event) override;
void sliderChange(QAbstractSlider::SliderChange change) override;
void paintEvent(QPaintEvent *ev) override;
void streamStarted();
@ -37,6 +39,7 @@ private:
QMap<uint64_t, QString> thumbnails;
QFuture<void> thumnail_future;
QSize thumbnail_size = {};
QTimer timer;
};
class VideoWidget : public QWidget {

Loading…
Cancel
Save