@ -1,13 +1,9 @@ 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "selfdrive/ui/qt/maps/map.h"  
					 
					 
					 
					# include  "selfdrive/ui/qt/maps/map.h"  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <eigen3/Eigen/Dense>  
					 
					 
					 
					# include  <eigen3/Eigen/Dense>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <cmath>  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <QDebug>  
					 
					 
					 
					# include  <QDebug>  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <QFileInfo>  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  <QPainterPath>  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "common/swaglog.h"  
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "common/transformations/coordinates.hpp"  
					 
					 
					 
					# include  "common/transformations/coordinates.hpp"  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "selfdrive/ui/qt/maps/map_helpers.h"  
					 
					 
					 
					# include  "selfdrive/ui/qt/maps/map_helpers.h"  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					# include  "selfdrive/ui/qt/request_repeater.h"  
					 
					 
					 
					# include  "selfdrive/ui/qt/request_repeater.h"  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -37,12 +33,6 @@ MapWindow::MapWindow(const QMapboxGLSettings &settings) : m_settings(settings), 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  map_instructions - > setVisible ( false ) ;   
					 
					 
					 
					  map_instructions - > setVisible ( false ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  map_eta  =  new  MapETA ( this ) ;   
					 
					 
					 
					  map_eta  =  new  MapETA ( this ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QObject : : connect ( this ,  & MapWindow : : ETAChanged ,  map_eta ,  & MapETA : : updateETA ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  const  int  h  =  120 ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  map_eta - > setFixedHeight ( h ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  map_eta - > move ( 25 ,  1080  -  h  -  UI_BORDER_SIZE * 2 ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  map_eta - > setVisible ( false ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Settings button
   
					 
					 
					 
					  // Settings button
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QSize  icon_size ( 120 ,  120 ) ;   
					 
					 
					 
					  QSize  icon_size ( 120 ,  120 ) ;   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -201,7 +191,7 @@ void MapWindow::updateState(const UIState &s) { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ( sm . updated ( " navInstruction " ) )  {   
					 
					 
					 
					  if  ( sm . updated ( " navInstruction " ) )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    if  ( sm . valid ( " navInstruction " ) )  {   
					 
					 
					 
					    if  ( sm . valid ( " navInstruction " ) )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      auto  i  =  sm [ " navInstruction " ] . getNavInstruction ( ) ;   
					 
					 
					 
					      auto  i  =  sm [ " navInstruction " ] . getNavInstruction ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      emit  ETAChanged ( i . getTimeRemaining ( ) ,  i . getTimeRemainingTypical ( ) ,  i . getDistanceRemaining ( ) ) ;   
					 
					 
					 
					      map_eta - > updateETA ( i . getTimeRemaining ( ) ,  i . getTimeRemainingTypical ( ) ,  i . getDistanceRemaining ( ) ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					      if  ( locationd_valid )  {   
					 
					 
					 
					      if  ( locationd_valid )  {   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					        m_map - > setPitch ( MAX_PITCH ) ;  // TODO: smooth pitching based on maneuver distance
   
					 
					 
					 
					        m_map - > setPitch ( MAX_PITCH ) ;  // TODO: smooth pitching based on maneuver distance
   
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -245,6 +235,7 @@ void MapWindow::updateState(const UIState &s) { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  MapWindow : : resizeGL ( int  w ,  int  h )  {  
					 
					 
					 
					void  MapWindow : : resizeGL ( int  w ,  int  h )  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  m_map - > resize ( size ( )  /  MAP_SCALE ) ;   
					 
					 
					 
					  m_map - > resize ( size ( )  /  MAP_SCALE ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  map_instructions - > setFixedWidth ( width ( ) ) ;   
					 
					 
					 
					  map_instructions - > setFixedWidth ( width ( ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					  map_eta - > setGeometry ( 0 ,  height ( )  -  120 ,  w ,  120 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  MapWindow : : initializeGL ( )  {  
					 
					 
					 
					void  MapWindow : : initializeGL ( )  {  
				
			 
			
		
	
	
		
		
			
				
					
						
							
								 
							 
						
						
							
								 
							 
						
						
					 
					 
					@ -565,140 +556,50 @@ void MapInstructions::hideIfNoError() { 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					  }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					MapETA : : MapETA ( QWidget  *  parent )  :  QWidget ( parent )  {  
					 
					 
					 
					MapETA : : MapETA ( QWidget  * parent )  :  QWidget ( parent )  {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  QHBoxLayout  * main_layout  =  new  QHBoxLayout ( this ) ;   
					 
					 
					 
					  setVisible ( false ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  main_layout - > setContentsMargins ( 40 ,  25 ,  40 ,  25 ) ;   
					 
					 
					 
					  setAttribute ( Qt : : WA_TranslucentBackground ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					  eta_doc . setUndoRedoEnabled ( false ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  {   
					 
					 
					 
					  eta_doc . setDefaultStyleSheet ( " body {font-family:Inter;font-size:60px;color:white;} b{font-size:70px;font-weight:600} " ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    QHBoxLayout  * layout  =  new  QHBoxLayout ;   
					 
					 
					 
					}  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta  =  new  QLabel ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta - > setAlignment ( Qt : : AlignCenter ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta - > setStyleSheet ( " font-weight:600 " ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta_unit  =  new  QLabel ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta_unit - > setAlignment ( Qt : : AlignCenter ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    layout - > addWidget ( eta ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    layout - > addWidget ( eta_unit ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    main_layout - > addLayout ( layout ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  main_layout - > addSpacing ( 40 ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    QHBoxLayout  * layout  =  new  QHBoxLayout ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    time  =  new  QLabel ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    time - > setAlignment ( Qt : : AlignCenter ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    time_unit  =  new  QLabel ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    time_unit - > setAlignment ( Qt : : AlignCenter ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    layout - > addWidget ( time ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    layout - > addWidget ( time_unit ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    main_layout - > addLayout ( layout ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  main_layout - > addSpacing ( 40 ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    QHBoxLayout  * layout  =  new  QHBoxLayout ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance  =  new  QLabel ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance - > setAlignment ( Qt : : AlignCenter ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance - > setStyleSheet ( " font-weight:600 " ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance_unit  =  new  QLabel ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance_unit - > setAlignment ( Qt : : AlignCenter ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    layout - > addWidget ( distance ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    layout - > addWidget ( distance_unit ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    main_layout - > addLayout ( layout ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  setStyleSheet ( R " (   
					 
					 
					 
					void  MapETA : : paintEvent ( QPaintEvent  * event )  {  
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    *  {   
					 
					 
					 
					  if  ( ! eta_doc . isEmpty ( ) )  {   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      color :  white ;   
					 
					 
					 
					    QPainter  p ( this ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      font - family :  " Inter " ;   
					 
					 
					 
					    p . setRenderHint ( QPainter : : Antialiasing ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					      font - size :  70 px ;   
					 
					 
					 
					    p . setPen ( Qt : : NoPen ) ;   
				
			 
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p . setBrush ( QColor ( 0 ,  0 ,  0 ,  150 ) ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    QSizeF  txt_size  =  eta_doc . size ( ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p . drawRoundedRect ( ( width ( )  -  txt_size . width ( ) )  /  2  -  UI_BORDER_SIZE ,  0 ,  txt_size . width ( )  +  UI_BORDER_SIZE  *  2 ,  height ( )  +  25 ,  25 ,  25 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    p . translate ( ( width ( )  -  txt_size . width ( ) )  /  2 ,  ( height ( )  -  txt_size . height ( ) )  /  2 ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					 
					 
					 
					 
					    eta_doc . drawContents ( & p ) ;   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					  }   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  ) " );   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QPalette  pal  =  palette ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  pal . setColor ( QPalette : : Background ,  QColor ( 0 ,  0 ,  0 ,  150 ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  setAutoFillBackground ( true ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  setPalette ( pal ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					void  MapETA : : updateETA ( float  s ,  float  s_typical ,  float  d )  {  
					 
					 
					 
					void  MapETA : : updateETA ( float  s ,  float  s_typical ,  float  d )  {  
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ( d  <  MANEUVER_TRANSITION_THRESHOLD )  {   
					 
					 
					 
					  eta_doc . clear ( ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    hide ( ) ;   
					 
					 
					 
					  setVisible ( d  > =  MANEUVER_TRANSITION_THRESHOLD ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    return ;   
					 
					 
					 
					  if  ( ! isVisible ( ) )  return ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // ETA
   
					 
					 
					 
					  // ETA
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  auto  eta_time  =  QDateTime : : currentDateTime ( ) . addSecs ( s ) . time ( ) ;   
					 
					 
					 
					  auto  eta_t  =  QDateTime : : currentDateTime ( ) . addSecs ( s ) . time ( ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ( params . getBool ( " NavSettingTime24h " ) )  {   
					 
					 
					 
					  auto  eta  =  format_24h  ?  std : : array { eta_t . toString ( " HH:mm " ) ,  tr ( " eta " ) }   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta - > setText ( eta_time . toString ( " HH:mm " ) ) ;   
					 
					 
					 
					                        :  std : : array { eta_t . toString ( " h:mm a " ) . split ( '   ' ) [ 0 ] ,  eta_t . toString ( " a " ) } ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta_unit - > setText ( tr ( " eta " ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }  else  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    auto  t  =  eta_time . toString ( " h:mm a " ) . split ( '   ' ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta - > setText ( t [ 0 ] ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    eta_unit - > setText ( t [ 1 ] ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Remaining time
   
					 
					 
					 
					  // Remaining time
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ( s  <  3600 )  {   
					 
					 
					 
					  auto  time_t  =  QDateTime : : fromTime_t ( s ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    time - > setText ( QString : : number ( int ( s  /  60 ) ) ) ;   
					 
					 
					 
					  auto  remaining  =  s  <  3600  ?  std : : array { time_t . toString ( " m " ) ,  tr ( " min " ) }   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    time_unit - > setText ( tr ( " min " ) ) ;   
					 
					 
					 
					                            :  std : : array { time_t . toString ( " h:mm " ) ,  tr ( " hr " ) } ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  }  else  {   
					 
					 
					 
					  QString  color  =  " #25DA6E " ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    int  hours  =  int ( s )  /  3600 ;   
					 
					 
					 
					  if  ( s  /  s_typical  >  1.5 )  color  =  " #DA3025 " ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    time - > setText ( QString : : number ( hours )  +  " : "  +  QString : : number ( int ( ( s  -  hours  *  3600 )  /  60 ) ) . rightJustified ( 2 ,  ' 0 ' ) ) ;   
					 
					 
					 
					  else  if  ( s  /  s_typical  >  1.2 )  color  =  " #DAA725 " ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    time_unit - > setText ( tr ( " hr " ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QString  color ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ( s  /  s_typical  >  1.5 )  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    color  =  " #DA3025 " ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }  else  if  ( s  /  s_typical  >  1.2 )  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    color  =  " #DAA725 " ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }  else  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    color  =  " #25DA6E " ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  time - > setStyleSheet ( QString ( R " (color: %1; font-weight:600;) " ) . arg ( color ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  time_unit - > setStyleSheet ( QString ( R " (color: %1;) " ) . arg ( color ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Distance
   
					 
					 
					 
					  // Distance
   
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QString  distance_str ;   
					 
					 
					 
					  float  num  =  uiState ( ) - > scene . is_metric  ?  ( d  /  1000.0 )  :  ( d  *  METER_TO_MILE ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  float  num  =  0 ;   
					 
					 
					 
					  auto  distance  =  std : : array { QString : : number ( num ,  ' f ' ,  num  <  100  ?  1  :  0 ) ,   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  if  ( uiState ( ) - > scene . is_metric )  {   
					 
					 
					 
					                             uiState ( ) - > scene . is_metric  ?  tr ( " km " )  :  tr ( " mi " ) } ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					    num  =  d  /  1000.0 ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance_unit - > setText ( tr ( " km " ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }  else  {   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    num  =  d  *  METER_TO_MILE ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					    distance_unit - > setText ( tr ( " mi " ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  }   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  distance_str . setNum ( num ,  ' f ' ,  num  <  100  ?  1  :  0 ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  distance - > setText ( distance_str ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					
 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  show ( ) ;   
					 
					 
					 
					  eta_doc . setHtml ( QString ( R " (<body><b>%1</b>%2 <span style= " color : % 3 " ><b>%4</b>%5</span> <b>%6</b>%7</body>) " )   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  adjustSize ( ) ;   
					 
					 
					 
					                      . arg ( eta [ 0 ] ,  eta [ 1 ] ,  color ,  remaining [ 0 ] ,  remaining [ 1 ] ,  distance [ 0 ] ,  distance [ 1 ] ) ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  repaint ( ) ;   
					 
					 
					 
					  update ( ) ;   
				
			 
			
				
				
			
		
	
		
		
			
				
					
					 
					 
					 
					  adjustSize ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Rounded corners
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  const  int  radius  =  25 ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  const  auto  r  =  rect ( ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Top corners rounded
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QPainterPath  path ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  path . setFillRule ( Qt : : WindingFill ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  path . addRoundedRect ( r ,  radius ,  radius ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Bottom corners not rounded
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  path . addRect ( r . marginsRemoved ( QMargins ( 0 ,  radius ,  0 ,  0 ) ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Set clipping mask
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  QRegion  mask  =  QRegion ( path . simplified ( ) . toFillPolygon ( ) . toPolygon ( ) ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  setMask ( mask ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					
 
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  // Center
   
					 
					 
					 
					 
				
			 
			
		
	
		
		
			
				
					
					 
					 
					 
					  move ( static_cast < QWidget * > ( parent ( ) ) - > width ( )  /  2  -  width ( )  /  2 ,  1080  -  height ( )  -  UI_BORDER_SIZE * 2 ) ;   
					 
					 
					 
					 
				
			 
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					
					 
					 
					 
					}  
					 
					 
					 
					}