#pragma once #include #include #include #include #include #include #include #include #include "selfdrive/ui/qt/widgets/cameraview.h" #include "tools/cabana/streams/abstractstream.h" struct AlertInfo { cereal::ControlsState::AlertStatus status; QString text1; QString text2; }; class InfoLabel : public QWidget { public: InfoLabel(QWidget *parent); void showPixmap(const QPoint &pt, const QString &sec, const QPixmap &pm, const AlertInfo &alert); void showAlert(const AlertInfo &alert); void paintEvent(QPaintEvent *event) override; QPixmap pixmap; QString second; AlertInfo alert_info; }; class Slider : public QSlider { Q_OBJECT public: Slider(QWidget *parent); ~Slider(); signals: void updateMaximumTime(double); private: void mousePressEvent(QMouseEvent *e) override; void mouseMoveEvent(QMouseEvent *e) override; bool event(QEvent *event) override; void sliderChange(QAbstractSlider::SliderChange change) override; void paintEvent(QPaintEvent *ev) override; void streamStarted(); void loadThumbnails(); double max_sec = 0; int slider_x = -1; std::vector> timeline; std::mutex thumbnail_lock; std::atomic abort_load_thumbnail = false; QMap thumbnails; std::map alerts; QFuture thumnail_future; InfoLabel thumbnail_label; QTimer timer; friend class VideoWidget; }; class VideoWidget : public QFrame { Q_OBJECT public: VideoWidget(QWidget *parnet = nullptr); void rangeChanged(double min, double max, bool is_zommed); void setMaximumTime(double sec); protected: void updateState(); void updatePlayBtnState(); QWidget *createCameraWidget(); CameraWidget *cam_widget; double maximum_time = 0; QLabel *end_time_label; QLabel *time_label; QHBoxLayout *slider_layout; QPushButton *play_btn; InfoLabel *alert_label; Slider *slider; };