diff --git a/selfdrive/ui/qt/home.cc b/selfdrive/ui/qt/home.cc index f8aa3423d2..8b1fdf474c 100644 --- a/selfdrive/ui/qt/home.cc +++ b/selfdrive/ui/qt/home.cc @@ -33,6 +33,11 @@ HomeWindow::HomeWindow(QWidget* parent) : QWidget(parent) { body = new BodyWindow(this); slayout->addWidget(body); + driver_view = new DriverViewWindow(this); + connect(driver_view, &DriverViewWindow::done, [=] { + showDriverView(false); + }); + slayout->addWidget(driver_view); setAttribute(Qt::WA_NoSystemBackground); QObject::connect(uiState(), &UIState::uiUpdate, this, &HomeWindow::updateState); QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition); @@ -63,6 +68,16 @@ void HomeWindow::offroadTransition(bool offroad) { } } +void HomeWindow::showDriverView(bool show) { + if (show) { + emit closeSettings(); + slayout->setCurrentWidget(driver_view); + } else { + slayout->setCurrentWidget(home); + } + sidebar->setVisible(show == false); +} + void HomeWindow::mousePressEvent(QMouseEvent* e) { // Handle sidebar collapsing if ((onroad->isVisible() || body->isVisible()) && (!sidebar->isVisible() || e->x() > sidebar->width())) { diff --git a/selfdrive/ui/qt/home.h b/selfdrive/ui/qt/home.h index 55bc706c0d..a19b70ac3f 100644 --- a/selfdrive/ui/qt/home.h +++ b/selfdrive/ui/qt/home.h @@ -8,6 +8,7 @@ #include #include "common/params.h" +#include "selfdrive/ui/qt/offroad/driverview.h" #include "selfdrive/ui/qt/body.h" #include "selfdrive/ui/qt/onroad/onroad_home.h" #include "selfdrive/ui/qt/sidebar.h" @@ -52,6 +53,7 @@ signals: public slots: void offroadTransition(bool offroad); + void showDriverView(bool show); void showSidebar(bool show); protected: @@ -63,6 +65,7 @@ private: OffroadHome *home; OnroadWindow *onroad; BodyWindow *body; + DriverViewWindow *driver_view; QStackedLayout *slayout; private slots: diff --git a/selfdrive/ui/qt/offroad/driverview.cc b/selfdrive/ui/qt/offroad/driverview.cc index a8d3151627..9010227f18 100644 --- a/selfdrive/ui/qt/offroad/driverview.cc +++ b/selfdrive/ui/qt/offroad/driverview.cc @@ -6,6 +6,24 @@ #include "selfdrive/ui/qt/util.h" DriverViewWindow::DriverViewWindow(QWidget* parent) : CameraWidget("camerad", VISION_STREAM_DRIVER, parent) { + QObject::connect(this, &CameraWidget::clicked, this, &DriverViewWindow::done); + QObject::connect(device(), &Device::interactiveTimeout, this, [this]() { + if (isVisible()) { + emit done(); + } + }); +} + +void DriverViewWindow::showEvent(QShowEvent* event) { + params.putBool("IsDriverViewEnabled", true); + device()->resetInteractiveTimeout(60); + CameraWidget::showEvent(event); +} + +void DriverViewWindow::hideEvent(QHideEvent* event) { + params.putBool("IsDriverViewEnabled", false); + stopVipcThread(); + CameraWidget::hideEvent(event); } void DriverViewWindow::paintGL() { @@ -62,20 +80,3 @@ mat4 DriverViewWindow::calcFrameMatrix() { 0.0, 0.0, 0.0, 1.0, }}; } - -DriverViewDialog::DriverViewDialog(QWidget *parent) : DialogBase(parent) { - Params().putBool("IsDriverViewEnabled", true); - device()->resetInteractiveTimeout(60); - - QVBoxLayout *main_layout = new QVBoxLayout(this); - main_layout->setContentsMargins(0, 0, 0, 0); - auto camera = new DriverViewWindow(this); - main_layout->addWidget(camera); - QObject::connect(camera, &DriverViewWindow::clicked, this, &DialogBase::accept); - QObject::connect(device(), &Device::interactiveTimeout, this, &DialogBase::accept); -} - -void DriverViewDialog::done(int r) { - Params().putBool("IsDriverViewEnabled", false); - QDialog::done(r); -} diff --git a/selfdrive/ui/qt/offroad/driverview.h b/selfdrive/ui/qt/offroad/driverview.h index 10a97c1da8..f6eb752fe6 100644 --- a/selfdrive/ui/qt/offroad/driverview.h +++ b/selfdrive/ui/qt/offroad/driverview.h @@ -2,20 +2,22 @@ #include "selfdrive/ui/qt/widgets/cameraview.h" #include "selfdrive/ui/qt/onroad/driver_monitoring.h" -#include "selfdrive/ui/qt/widgets/input.h" class DriverViewWindow : public CameraWidget { Q_OBJECT + public: explicit DriverViewWindow(QWidget *parent); - void paintGL() override; + +signals: + void done(); + +protected: mat4 calcFrameMatrix() override; - DriverMonitorRenderer driver_monitor; -}; + void showEvent(QShowEvent *event) override; + void hideEvent(QHideEvent *event) override; + void paintGL() override; -class DriverViewDialog : public DialogBase { - Q_OBJECT -public: - DriverViewDialog(QWidget *parent); - void done(int r) override; + Params params; + DriverMonitorRenderer driver_monitor; }; diff --git a/selfdrive/ui/qt/offroad/settings.cc b/selfdrive/ui/qt/offroad/settings.cc index 2045092550..02a9284168 100644 --- a/selfdrive/ui/qt/offroad/settings.cc +++ b/selfdrive/ui/qt/offroad/settings.cc @@ -8,7 +8,6 @@ #include "common/watchdog.h" #include "common/util.h" -#include "selfdrive/ui/qt/offroad/driverview.h" #include "selfdrive/ui/qt/network/networking.h" #include "selfdrive/ui/qt/offroad/settings.h" #include "selfdrive/ui/qt/qt_window.h" @@ -188,12 +187,7 @@ DevicePanel::DevicePanel(SettingsWindow *parent) : ListWidget(parent) { auto dcamBtn = new ButtonControl(tr("Driver Camera"), tr("PREVIEW"), tr("Preview the driver facing camera to ensure that driver monitoring has good visibility. (vehicle must be off)")); - connect(dcamBtn, &ButtonControl::clicked, [this, dcamBtn]() { - dcamBtn->setEnabled(false); - DriverViewDialog driver_view(this); - driver_view.exec(); - dcamBtn->setEnabled(true); - }); + connect(dcamBtn, &ButtonControl::clicked, [=]() { emit showDriverView(); }); addItem(dcamBtn); auto resetCalibBtn = new ButtonControl(tr("Reset Calibration"), tr("RESET"), ""); @@ -365,6 +359,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) { // setup panels DevicePanel *device = new DevicePanel(this); QObject::connect(device, &DevicePanel::reviewTrainingGuide, this, &SettingsWindow::reviewTrainingGuide); + QObject::connect(device, &DevicePanel::showDriverView, this, &SettingsWindow::showDriverView); TogglesPanel *toggles = new TogglesPanel(this); QObject::connect(this, &SettingsWindow::expandToggleDescription, toggles, &TogglesPanel::expandToggleDescription); diff --git a/selfdrive/ui/qt/offroad/settings.h b/selfdrive/ui/qt/offroad/settings.h index de0528ee0a..68ba0d1898 100644 --- a/selfdrive/ui/qt/offroad/settings.h +++ b/selfdrive/ui/qt/offroad/settings.h @@ -28,6 +28,7 @@ protected: signals: void closeSettings(); void reviewTrainingGuide(); + void showDriverView(); void expandToggleDescription(const QString ¶m); private: @@ -44,6 +45,7 @@ public: signals: void reviewTrainingGuide(); + void showDriverView(); private slots: void poweroff(); diff --git a/selfdrive/ui/qt/window.cc b/selfdrive/ui/qt/window.cc index e1ec916c6f..6b579fcc5d 100644 --- a/selfdrive/ui/qt/window.cc +++ b/selfdrive/ui/qt/window.cc @@ -20,6 +20,9 @@ MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { onboardingWindow->showTrainingGuide(); main_layout->setCurrentWidget(onboardingWindow); }); + QObject::connect(settingsWindow, &SettingsWindow::showDriverView, [=] { + homeWindow->showDriverView(true); + }); onboardingWindow = new OnboardingWindow(this); main_layout->addWidget(onboardingWindow);