UI: body support (#24079)

* body ui template

* faces

* abs

* not raw

* auto switch

* check that

* no smoosh

* cmath
old-commit-hash: b51deb97d1
taco
Adeeb Shihadeh 3 years ago committed by GitHub
parent abdcce3ad5
commit 1ce647b0a6
  1. 1
      release/files_common
  2. 3
      selfdrive/assets/body/awake.gif
  3. 3
      selfdrive/assets/body/sleep.gif
  4. 2
      selfdrive/ui/SConscript
  5. 34
      selfdrive/ui/qt/body.cc
  6. 19
      selfdrive/ui/qt/body.h
  7. 15
      selfdrive/ui/qt/home.cc
  8. 5
      selfdrive/ui/qt/home.h

@ -446,6 +446,7 @@ selfdrive/assets/.gitignore
selfdrive/assets/assets.qrc selfdrive/assets/assets.qrc
selfdrive/assets/*.png selfdrive/assets/*.png
selfdrive/assets/*.svg selfdrive/assets/*.svg
selfdrive/assets/body/*
selfdrive/assets/fonts/*.ttf selfdrive/assets/fonts/*.ttf
selfdrive/assets/icons/* selfdrive/assets/icons/*
selfdrive/assets/images/* selfdrive/assets/images/*

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:a4b3f7e9bc5cf058c3daaca23f99c0aafe4324eb4b2e0f8ccb3759b252a8101d
size 69319

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:3481857356714833aa196a89c47de3246dd395a51fbfd9e0dff53058c109ced8
size 400908

@ -56,7 +56,7 @@ qt_env.Program("qt/text", ["qt/text.cc"], LIBS=qt_libs)
qt_env.Program("qt/spinner", ["qt/spinner.cc"], LIBS=qt_libs) qt_env.Program("qt/spinner", ["qt/spinner.cc"], LIBS=qt_libs)
# build main UI # build main UI
qt_src = ["main.cc", "ui.cc", "qt/sidebar.cc", "qt/onroad.cc", qt_src = ["main.cc", "ui.cc", "qt/sidebar.cc", "qt/onroad.cc", "qt/body.cc",
"qt/window.cc", "qt/home.cc", "qt/offroad/settings.cc", "qt/window.cc", "qt/home.cc", "qt/offroad/settings.cc",
"qt/offroad/onboarding.cc", "qt/offroad/driverview.cc"] "qt/offroad/onboarding.cc", "qt/offroad/driverview.cc"]
qt_env.Program("_ui", qt_src + [asset_obj], LIBS=qt_libs) qt_env.Program("_ui", qt_src + [asset_obj], LIBS=qt_libs)

@ -0,0 +1,34 @@
#include "selfdrive/ui/qt/body.h"
#include <cmath>
BodyWindow::BodyWindow(QWidget *parent) : QLabel(parent) {
awake = new QMovie("../assets/body/awake.gif");
awake->setCacheMode(QMovie::CacheAll);
sleep = new QMovie("../assets/body/sleep.gif");
sleep->setCacheMode(QMovie::CacheAll);
QPalette p(Qt::black);
setPalette(p);
setAutoFillBackground(true);
setAlignment(Qt::AlignCenter);
QObject::connect(uiState(), &UIState::uiUpdate, this, &BodyWindow::updateState);
}
void BodyWindow::updateState(const UIState &s) {
if (!isVisible()) {
return;
}
const SubMaster &sm = *(s.sm);
// TODO: use carState.standstill when that's fixed
const bool standstill = std::abs(sm["carState"].getCarState().getVEgo()) < 0.01;
QMovie *m = standstill ? sleep : awake;
if (m != movie()) {
setMovie(m);
movie()->start();
}
}

@ -0,0 +1,19 @@
#pragma once
#include <QMovie>
#include <QLabel>
#include "selfdrive/ui/ui.h"
class BodyWindow : public QLabel {
Q_OBJECT
public:
BodyWindow(QWidget* parent = 0);
private:
QMovie *awake, *sleep;
private slots:
void updateState(const UIState &s);
};

@ -30,12 +30,16 @@ HomeWindow::HomeWindow(QWidget* parent) : QWidget(parent) {
onroad = new OnroadWindow(this); onroad = new OnroadWindow(this);
slayout->addWidget(onroad); slayout->addWidget(onroad);
body = new BodyWindow(this);
slayout->addWidget(body);
driver_view = new DriverViewWindow(this); driver_view = new DriverViewWindow(this);
connect(driver_view, &DriverViewWindow::done, [=] { connect(driver_view, &DriverViewWindow::done, [=] {
showDriverView(false); showDriverView(false);
}); });
slayout->addWidget(driver_view); slayout->addWidget(driver_view);
setAttribute(Qt::WA_NoSystemBackground); setAttribute(Qt::WA_NoSystemBackground);
QObject::connect(uiState(), &UIState::uiUpdate, this, &HomeWindow::updateState);
QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition); QObject::connect(uiState(), &UIState::offroadTransition, this, &HomeWindow::offroadTransition);
} }
@ -43,6 +47,15 @@ void HomeWindow::showSidebar(bool show) {
sidebar->setVisible(show); sidebar->setVisible(show);
} }
void HomeWindow::updateState(const UIState &s) {
const SubMaster &sm = *(s.sm);
// switch to the body UI
if (onroad->isVisible() && sm["carParams"].getCarParams().getCarName() == "body") {
slayout->setCurrentWidget(body);
}
}
void HomeWindow::offroadTransition(bool offroad) { void HomeWindow::offroadTransition(bool offroad) {
sidebar->setVisible(offroad); sidebar->setVisible(offroad);
if (offroad) { if (offroad) {
@ -64,7 +77,7 @@ void HomeWindow::showDriverView(bool show) {
void HomeWindow::mousePressEvent(QMouseEvent* e) { void HomeWindow::mousePressEvent(QMouseEvent* e) {
// Handle sidebar collapsing // Handle sidebar collapsing
if (onroad->isVisible() && (!sidebar->isVisible() || e->x() > sidebar->width())) { if ((onroad->isVisible() || body->isVisible()) && (!sidebar->isVisible() || e->x() > sidebar->width())) {
sidebar->setVisible(!sidebar->isVisible() && !onroad->isMapVisible()); sidebar->setVisible(!sidebar->isVisible() && !onroad->isMapVisible());
} }
} }

@ -8,6 +8,7 @@
#include <QWidget> #include <QWidget>
#include "selfdrive/ui/qt/offroad/driverview.h" #include "selfdrive/ui/qt/offroad/driverview.h"
#include "selfdrive/ui/qt/body.h"
#include "selfdrive/ui/qt/onroad.h" #include "selfdrive/ui/qt/onroad.h"
#include "selfdrive/ui/qt/sidebar.h" #include "selfdrive/ui/qt/sidebar.h"
#include "selfdrive/ui/qt/widgets/offroad_alerts.h" #include "selfdrive/ui/qt/widgets/offroad_alerts.h"
@ -55,6 +56,10 @@ private:
Sidebar *sidebar; Sidebar *sidebar;
OffroadHome *home; OffroadHome *home;
OnroadWindow *onroad; OnroadWindow *onroad;
BodyWindow *body;
DriverViewWindow *driver_view; DriverViewWindow *driver_view;
QStackedLayout *slayout; QStackedLayout *slayout;
private slots:
void updateState(const UIState &s);
}; };

Loading…
Cancel
Save