# pragma once 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <QStackedLayout> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <QWidget> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "selfdrive/ui/qt/widgets/cameraview.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "selfdrive/ui/ui.h" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// ***** onroad widgets *****
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  OnroadHud  :  public  QWidget  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_OBJECT 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( QString  speed  MEMBER  speed  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( QString  speedUnit  MEMBER  speedUnit  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( QString  maxSpeed  MEMBER  maxSpeed  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( bool  is_cruise_set  MEMBER  is_cruise_set  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( bool  engageable  MEMBER  engageable  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( bool  dmActive  MEMBER  dmActive  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( bool  hideDM  MEMBER  hideDM  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_PROPERTY ( int  status  MEMBER  status  NOTIFY  valueChanged ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  explicit  OnroadHud ( QWidget  * parent ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  updateState ( const  UIState  & s ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  drawIcon ( QPainter  & p ,  int  x ,  int  y ,  QPixmap  & img ,  QBrush  bg ,  float  opacity ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  drawText ( QPainter  & p ,  int  x ,  int  y ,  const  QString  & text ,  int  alpha  =  255 ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  paintEvent ( QPaintEvent  * event )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QPixmap  engage_img ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QPixmap  dm_img ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  radius  =  192 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  int  img_size  =  ( radius  /  2 )  *  1.5 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QString  speed ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QString  speedUnit ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  QString  maxSpeed ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  is_cruise_set  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  engageable  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  dmActive  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  hideDM  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  status  =  STATUS_DISENGAGED ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								signals : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  valueChanged ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  OnroadAlerts  :  public  QWidget  { 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Q_OBJECT 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  OnroadAlerts ( QWidget  * parent  =  0 )  :  QWidget ( parent )  { } ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  updateAlert ( const  Alert  & a ,  const  QColor  & color ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								protected : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  paintEvent ( QPaintEvent * )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QColor  bg ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Alert  alert  =  { } ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// container window for the NVG UI
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								class  NvgWindow  :  public  CameraViewWidget  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_OBJECT 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  explicit  NvgWindow ( VisionStreamType  type ,  QWidget *  parent  =  0 )  :  CameraViewWidget ( " camerad " ,  type ,  true ,  parent )  { } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								protected : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  paintGL ( )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  initializeGL ( )  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  showEvent ( QShowEvent  * event )  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  updateFrameMat ( int  w ,  int  h )  override ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  drawLaneLines ( QPainter  & painter ,  const  UIScene  & scene ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  drawLead ( QPainter  & painter ,  const  cereal : : ModelDataV2 : : LeadDataV3 : : Reader  & lead_data ,  const  QPointF  & vd ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  inline  QColor  redColor ( int  alpha  =  255 )  {  return  QColor ( 201 ,  34 ,  49 ,  alpha ) ;  } 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  double  prev_draw_t  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ; 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								// container for all onroad widgets
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  OnroadWindow  :  public  QWidget  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Q_OBJECT 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  OnroadWindow ( QWidget *  parent  =  0 ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bool  isMapVisible ( )  const  {  return  map  & &  map - > isVisible ( ) ;  } 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  paintEvent ( QPaintEvent  * event ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  mousePressEvent ( QMouseEvent *  e )  override ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  OnroadHud  * hud ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  OnroadAlerts  * alerts ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  NvgWindow  * nvg ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QColor  bg  =  bg_colors [ STATUS_DISENGAGED ] ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QWidget  * map  =  nullptr ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  QHBoxLayout *  split ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								private  slots : 
 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  offroadTransition ( bool  offroad ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  updateState ( const  UIState  & s ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								} ;