#include "selfdrive/ui/qt/window.h" #include #include "system/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); oscarSettingsWindow = new OscarSettingsWindow(this); main_layout->addWidget(oscarSettingsWindow); QObject::connect(oscarSettingsWindow, &OscarSettingsWindow::closeSettings, this, &MainWindow::closeSettings); QObject::connect(oscarSettingsWindow, &OscarSettingsWindow::reviewTrainingGuide, [=]() { onboardingWindow->showTrainingGuide(); main_layout->setCurrentWidget(onboardingWindow); }); QObject::connect(oscarSettingsWindow, &OscarSettingsWindow::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::interactiveTimeout, [=]() { // if (main_layout->currentWidget() == oscarSettingsWindow) { // closeSettings(); // } // }); // load fonts 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"); QFontDatabase::addApplicationFont("../assets/fonts/JetBrainsMono-Medium.ttf"); // no outline to prevent the focus rectangle setStyleSheet(R"( * { font-family: Inter; outline: none; } )"); setAttribute(Qt::WA_NoSystemBackground); } void MainWindow::openSettings(int index, const QString ¶m) { main_layout->setCurrentWidget(oscarSettingsWindow); oscarSettingsWindow->setCurrentPanel(index, param); } void MainWindow::closeSettings() { main_layout->setCurrentWidget(homeWindow); if (uiState()->scene.started) { // Map is always shown when using navigate on openpilot if (uiState()->scene.navigate_on_openpilot) { homeWindow->showMapPanel(true); } else { homeWindow->showSidebar(params.getBool("Sidebar")); } } } bool MainWindow::eventFilter(QObject *obj, QEvent *event) { bool ignore = false; switch (event->type()) { case QEvent::TouchBegin: case QEvent::TouchUpdate: case QEvent::TouchEnd: case QEvent::MouseButtonPress: case QEvent::MouseMove: { // ignore events when device is awakened by resetInteractiveTimeout ignore = !device()->isAwake(); // if (main_layout->currentWidget() == oscarSettingsWindow) { // Not working... // device()->resetInteractiveTimeout(60 * 5); // 5 minute timeout if looking at settings window // } else { device()->resetInteractiveTimeout(); // Default 30 seconds otherwise // } break; } default: break; } return ignore; }