@ -6,9 +6,6 @@
# include <QVBoxLayout>
# include "selfdrive/common/params.h"
# include "selfdrive/common/swaglog.h"
# include "selfdrive/common/timing.h"
# include "selfdrive/common/util.h"
# include "selfdrive/ui/qt/util.h"
# include "selfdrive/ui/qt/widgets/drive_stats.h"
# include "selfdrive/ui/qt/widgets/setup.h"
@ -94,18 +91,24 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
// top header
QHBoxLayout * header_layout = new QHBoxLayout ( ) ;
header_layout - > setSpacing ( 16 ) ;
date = new QLabel ( ) ;
header_layout - > addWidget ( date , 0 , Qt : : AlignHCenter | Qt : : AlignLeft ) ;
header_layout - > addWidget ( date , 1 , Qt : : AlignHCenter | Qt : : AlignLeft ) ;
alert_notification = new QPushButton ( ) ;
alert_notification - > setObjectName ( " alert_notification " ) ;
alert_notification - > setVisible ( false ) ;
QObject : : connect ( alert_notification , & QPushButton : : released , this , & OffroadHome : : openAlerts ) ;
header_layout - > addWidget ( alert_notification , 0 , Qt : : AlignHCenter | Qt : : AlignRight ) ;
update_notif = new QPushButton ( " UPDATE " ) ;
update_notif - > setVisible ( false ) ;
update_notif - > setStyleSheet ( " background-color: #364DEF; " ) ;
QObject : : connect ( update_notif , & QPushButton : : released , [ = ] ( ) { center_layout - > setCurrentIndex ( 1 ) ; } ) ;
header_layout - > addWidget ( update_notif , 0 , Qt : : AlignHCenter | Qt : : AlignRight ) ;
QLabel * version = new QLabel ( getBrandVersion ( ) ) ;
header_layout - > addWidget ( version , 0 , Qt : : AlignHCenter | Qt : : AlignRight ) ;
alert_notif = new QPushButton ( ) ;
alert_notif - > setVisible ( false ) ;
alert_notif - > setStyleSheet ( " background-color: #E22C2C; " ) ;
QObject : : connect ( alert_notif , & QPushButton : : released , [ = ] { center_layout - > setCurrentIndex ( 2 ) ; } ) ;
header_layout - > addWidget ( alert_notif , 0 , Qt : : AlignHCenter | Qt : : AlignRight ) ;
header_layout - > addWidget ( new QLabel ( getBrandVersion ( ) ) , 0 , Qt : : AlignHCenter | Qt : : AlignRight ) ;
main_layout - > addLayout ( header_layout ) ;
@ -113,32 +116,29 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
main_layout - > addSpacing ( 25 ) ;
center_layout = new QStackedLayout ( ) ;
QHBoxLayout * statsAndSetup = new QHBoxLayout ( ) ;
QWidget * statsAndSetupWidget = new QWidget ( this ) ;
QHBoxLayout * statsAndSetup = new QHBoxLayout ( statsAndSetupWidget ) ;
statsAndSetup - > setMargin ( 0 ) ;
DriveStats * drive = new DriveStats ;
DriveStats * drive = new DriveStats ( ) ;
drive - > setFixedSize ( 800 , 800 ) ;
statsAndSetup - > addWidget ( drive ) ;
SetupWidget * setup = new SetupWidget ;
statsAndSetup - > addWidget ( setup ) ;
QWidget * statsAndSetupWidget = new QWidget ( ) ;
statsAndSetupWidget - > setLayout ( statsAndSetup ) ;
statsAndSetup - > addWidget ( new SetupWidget ) ;
center_layout - > addWidget ( statsAndSetupWidget ) ;
// add update & alerts widgets
update_widget = new UpdateAlert ( ) ;
QObject : : connect ( update_widget , & UpdateAlert : : dismiss , [ = ] ( ) { center_layout - > setCurrentIndex ( 0 ) ; } ) ;
center_layout - > addWidget ( update_widget ) ;
alerts_widget = new OffroadAlert ( ) ;
QObject : : connect ( alerts_widget , & OffroadAlert : : closeAlerts , this , & OffroadHome : : closeAlerts ) ;
QObject : : connect ( alerts_widget , & OffroadAlert : : dismiss , [ = ] ( ) { center_layout - > setCurrentIndex ( 0 ) ; } ) ;
center_layout - > addWidget ( alerts_widget ) ;
center_layout - > setAlignment ( alerts_widget , Qt : : AlignCenter ) ;
main_layout - > addLayout ( center_layout , 1 ) ;
// set up refresh timer
timer = new QTimer ( this ) ;
QObject : : connect ( timer , & QTimer : : timeout , this , & OffroadHome : : refresh ) ;
timer - > start ( 10 * 1000 ) ;
timer - > callOnTimeout ( this , & OffroadHome : : refresh ) ;
setStyleSheet ( R " (
* {
@ -147,61 +147,47 @@ OffroadHome::OffroadHome(QWidget* parent) : QFrame(parent) {
OffroadHome {
background - color : black ;
}
# alert_notification {
padding : 15 px ;
padding - left : 30 px ;
padding - right : 30 px ;
border : 1 px solid ;
OffroadHome > QPushButton {
padding : 15 px 30 px ;
border - radius : 5 px ;
font - size : 40 px ;
font - weight : 500 ;
}
OffroadHome > QLabel {
OffroadHome > QLabel {
font - size : 55 px ;
}
) " );
}
void OffroadHome : : showEvent ( QShowEvent * event ) {
refresh ( ) ;
}
void OffroadHome : : openAlerts ( ) {
cen ter_layout - > setCurrentIndex ( 1 ) ;
void OffroadHome : : showEvent ( QShowEvent * event ) {
tim er - > start ( 10 * 1000 ) ;
}
void OffroadHome : : closeAlerts ( ) {
cen ter_layout - > setCurrentIndex ( 0 ) ;
void OffroadHome : : hideEvent ( QHideEvent * event ) {
tim er - > stop ( ) ;
}
void OffroadHome : : refresh ( ) {
bool first_refresh = ! date - > text ( ) . size ( ) ;
if ( ! isVisible ( ) & & ! first_refresh ) {
return ;
}
date - > setText ( QDateTime : : currentDateTime ( ) . toString ( " dddd, MMMM d " ) ) ;
// update alerts
alerts_widget - > refresh ( ) ;
if ( ! alerts_widget - > alertCount & & ! alerts_widget - > updateAvailable ) {
closeAlerts ( ) ;
alert_notification - > setVisible ( false ) ;
return ;
}
if ( alerts_widget - > updateAvailable ) {
alert_notification - > setText ( " UPDATE " ) ;
} else {
int alerts = alerts_widget - > alertCount ;
alert_notification - > setText ( QString : : number ( alerts ) + " ALERT " + ( alerts = = 1 ? " " : " S " ) ) ;
bool updateAvailable = update_widget - > refresh ( ) ;
int alerts = alerts_widget - > refresh ( ) ;
// pop-up new notification
int idx = center_layout - > currentIndex ( ) ;
if ( ! updateAvailable & & ! alerts ) {
idx = 0 ;
} else if ( updateAvailable & & ( ! update_notif - > isVisible ( ) | | ( ! alerts & & idx = = 2 ) ) ) {
idx = 1 ;
} else if ( alerts & & ( ! alert_notif - > isVisible ( ) | | ( ! updateAvailable & & idx = = 1 ) ) ) {
idx = 2 ;
}
center_layout - > setCurrentIndex ( idx ) ;
if ( ! alert_notification - > isVisible ( ) & & ! first_refresh ) {
openAlerts ( ) ;
update_notif - > setVisible ( updateAvailable ) ;
alert_notif - > setVisible ( alerts ) ;
if ( alerts ) {
alert_notif - > setText ( QString : : number ( alerts ) + " ALERT " + ( alerts > 1 ? " S " : " " ) ) ;
}
alert_notification - > setVisible ( true ) ;
// Red background for alerts, blue for update available
alert_notification - > setStyleSheet ( alerts_widget - > updateAvailable ? " background-color: #364DEF " : " background-color: #E22C2C " ) ;
}