# 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  & param )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  main_layout - > setCurrentWidget ( settingsWindow ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  settingsWindow - > setCurrentPanel ( index ,  param ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								void  MainWindow : : closeSettings ( )  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  main_layout - > setCurrentWidget ( homeWindow ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  if  ( uiState ( ) - > scene . started )  { 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    homeWindow - > showSidebar ( false ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								} 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								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 ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								}