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.
		
		
		
		
		
			
		
			
				
					
					
						
							102 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							102 lines
						
					
					
						
							3.3 KiB
						
					
					
				| #include "selfdrive/ui/qt/window.h"
 | |
| 
 | |
| #include <QFontDatabase>
 | |
| 
 | |
| #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);
 | |
| 
 | |
|   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::interactiveTimeout, [=]() {
 | |
|     if (main_layout->currentWidget() == settingsWindow) {
 | |
|       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(settingsWindow);
 | |
|   settingsWindow->setCurrentPanel(index, param);
 | |
| }
 | |
| 
 | |
| void MainWindow::closeSettings() {
 | |
|   main_layout->setCurrentWidget(homeWindow);
 | |
| 
 | |
|   if (uiState()->scene.started) {
 | |
|     homeWindow->showSidebar(false);
 | |
|     // Map is always shown when using navigate on openpilot
 | |
|     if (uiState()->scene.navigate_on_openpilot) {
 | |
|       homeWindow->showMapPanel(true);
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| 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();
 | |
|       device()->resetInteractiveTimeout();
 | |
|       break;
 | |
|     }
 | |
|     default:
 | |
|       break;
 | |
|   }
 | |
|   return ignore;
 | |
| }
 | |
| 
 |