You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
65 lines
1.7 KiB
65 lines
1.7 KiB
#include "selfdrive/ui/qt/onroad/onroad_home.h"
|
|
|
|
#include <QPainter>
|
|
#include <QStackedLayout>
|
|
|
|
#include "selfdrive/ui/qt/util.h"
|
|
|
|
OnroadWindow::OnroadWindow(QWidget *parent) : QWidget(parent) {
|
|
QVBoxLayout *main_layout = new QVBoxLayout(this);
|
|
main_layout->setMargin(UI_BORDER_SIZE);
|
|
QStackedLayout *stacked_layout = new QStackedLayout;
|
|
stacked_layout->setStackingMode(QStackedLayout::StackAll);
|
|
main_layout->addLayout(stacked_layout);
|
|
|
|
nvg = new AnnotatedCameraWidget(VISION_STREAM_ROAD, this);
|
|
|
|
QWidget * split_wrapper = new QWidget;
|
|
split = new QHBoxLayout(split_wrapper);
|
|
split->setContentsMargins(0, 0, 0, 0);
|
|
split->setSpacing(0);
|
|
split->addWidget(nvg);
|
|
|
|
if (getenv("DUAL_CAMERA_VIEW")) {
|
|
CameraWidget *arCam = new CameraWidget("camerad", VISION_STREAM_ROAD, this);
|
|
split->insertWidget(0, arCam);
|
|
}
|
|
|
|
stacked_layout->addWidget(split_wrapper);
|
|
|
|
alerts = new OnroadAlerts(this);
|
|
alerts->setAttribute(Qt::WA_TransparentForMouseEvents, true);
|
|
stacked_layout->addWidget(alerts);
|
|
|
|
// setup stacking order
|
|
alerts->raise();
|
|
|
|
setAttribute(Qt::WA_OpaquePaintEvent);
|
|
QObject::connect(uiState(), &UIState::uiUpdate, this, &OnroadWindow::updateState);
|
|
QObject::connect(uiState(), &UIState::offroadTransition, this, &OnroadWindow::offroadTransition);
|
|
}
|
|
|
|
void OnroadWindow::updateState(const UIState &s) {
|
|
if (!s.scene.started) {
|
|
return;
|
|
}
|
|
|
|
alerts->updateState(s);
|
|
nvg->updateState(s);
|
|
|
|
QColor bgColor = bg_colors[s.status];
|
|
if (bg != bgColor) {
|
|
// repaint border
|
|
bg = bgColor;
|
|
update();
|
|
}
|
|
}
|
|
|
|
void OnroadWindow::offroadTransition(bool offroad) {
|
|
alerts->clear();
|
|
}
|
|
|
|
void OnroadWindow::paintEvent(QPaintEvent *event) {
|
|
QPainter p(this);
|
|
p.fillRect(rect(), QColor(bg.red(), bg.green(), bg.blue(), 255));
|
|
}
|
|
|