#include "selfdrive/ui/qt/window.h" #include #include "selfdrive/hardware/hw.h" MainWindow::MainWindow(QWidget *parent) : QWidget(parent) { main_layout = new QStackedLayout(this); main_layout->setMargin(0); homeWindow = new HomeWindow(this); main_layout->addWidget(homeWindow); QObject::connect(homeWindow, &HomeWindow::openSettings, this, &MainWindow::openSettings); QObject::connect(homeWindow, &HomeWindow::closeSettings, this, &MainWindow::closeSettings); QObject::connect(&qs, &QUIState::uiUpdate, homeWindow, &HomeWindow::update); QObject::connect(&qs, &QUIState::offroadTransition, homeWindow, &HomeWindow::offroadTransition); QObject::connect(&qs, &QUIState::offroadTransition, homeWindow, &HomeWindow::offroadTransitionSignal); QObject::connect(&device, &Device::displayPowerChanged, homeWindow, &HomeWindow::displayPowerChanged); settingsWindow = new SettingsWindow(this); main_layout->addWidget(settingsWindow); QObject::connect(settingsWindow, &SettingsWindow::closeSettings, this, &MainWindow::closeSettings); QObject::connect(&qs, &QUIState::offroadTransition, settingsWindow, &SettingsWindow::offroadTransition); QObject::connect(settingsWindow, &SettingsWindow::reviewTrainingGuide, this, &MainWindow::reviewTrainingGuide); QObject::connect(settingsWindow, &SettingsWindow::showDriverView, [=] { homeWindow->showDriverView(true); }); onboardingWindow = new OnboardingWindow(this); onboardingDone = onboardingWindow->isOnboardingDone(); main_layout->addWidget(onboardingWindow); main_layout->setCurrentWidget(onboardingWindow); QObject::connect(onboardingWindow, &OnboardingWindow::onboardingDone, [=]() { onboardingDone = true; closeSettings(); }); onboardingWindow->updateActiveScreen(); device.setAwake(true, true); QObject::connect(&qs, &QUIState::uiUpdate, &device, &Device::update); QObject::connect(&qs, &QUIState::offroadTransition, this, &MainWindow::offroadTransition); QObject::connect(&device, &Device::displayPowerChanged, this, &MainWindow::closeSettings); // load fonts QFontDatabase::addApplicationFont("../assets/fonts/opensans_regular.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/opensans_bold.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/opensans_semibold.ttf"); // no outline to prevent the focus rectangle setStyleSheet(R"( * { font-family: Inter; outline: none; } )"); } void MainWindow::offroadTransition(bool offroad) { if(!offroad) { closeSettings(); } } void MainWindow::openSettings() { main_layout->setCurrentWidget(settingsWindow); } void MainWindow::closeSettings() { if(onboardingDone) { main_layout->setCurrentWidget(homeWindow); } } void MainWindow::reviewTrainingGuide() { onboardingDone = false; main_layout->setCurrentWidget(onboardingWindow); onboardingWindow->updateActiveScreen(); } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { // wake screen on tap if (event->type() == QEvent::MouseButtonPress) { device.setAwake(true, true); } #ifdef QCOM // filter out touches while in android activity const static QSet filter_events({QEvent::MouseButtonPress, QEvent::MouseMove, QEvent::TouchBegin, QEvent::TouchUpdate, QEvent::TouchEnd}); if (HardwareEon::launched_activity && filter_events.contains(event->type())) { HardwareEon::check_activity(); if (HardwareEon::launched_activity) { return true; } } #endif return false; }