#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); settingsWindow = new SettingsWindow(this); main_layout->addWidget(settingsWindow); QObject::connect(settingsWindow, &SettingsWindow::closeSettings, this, &MainWindow::closeSettings); QObject::connect(settingsWindow, &SettingsWindow::reviewTrainingGuide, [=]() { onboardingWindow->showTrainingGuide(); main_layout->setCurrentWidget(onboardingWindow); }); QObject::connect(settingsWindow, &SettingsWindow::showDriverView, [=] { homeWindow->showDriverView(true); }); onboardingWindow = new OnboardingWindow(this); main_layout->addWidget(onboardingWindow); QObject::connect(onboardingWindow, &OnboardingWindow::onboardingDone, [=]() { main_layout->setCurrentWidget(homeWindow); }); if (!onboardingWindow->completed()) { main_layout->setCurrentWidget(onboardingWindow); } QObject::connect(uiState(), &UIState::offroadTransition, [=](bool offroad) { if (!offroad) { closeSettings(); } }); QObject::connect(&device, &Device::interactiveTimout, [=]() { if (main_layout->currentWidget() == settingsWindow) { closeSettings(); } }); // load fonts QFontDatabase::addApplicationFont("../assets/fonts/opensans_regular.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/opensans_bold.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/opensans_semibold.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-Black.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-Bold.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-ExtraBold.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-ExtraLight.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-Medium.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-Regular.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-SemiBold.ttf"); QFontDatabase::addApplicationFont("../assets/fonts/Inter-Thin.ttf"); // no outline to prevent the focus rectangle setStyleSheet(R"( * { font-family: Inter; outline: none; } )"); setAttribute(Qt::WA_NoSystemBackground); } void MainWindow::openSettings() { main_layout->setCurrentWidget(settingsWindow); } void MainWindow::closeSettings() { main_layout->setCurrentWidget(homeWindow); if (uiState()->scene.started) { homeWindow->showSidebar(false); } } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::TouchBegin) { device.resetInteractiveTimout(); } #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; }