@ -18,6 +18,23 @@
# include "common/params.h"
# include "common/params.h"
# include "common/util.h"
# include "common/util.h"
QFrame * horizontal_line ( QWidget * parent = 0 ) {
QFrame * line = new QFrame ( parent ) ;
line - > setFrameShape ( QFrame : : StyledPanel ) ;
line - > setStyleSheet ( " margin-left: 40px; margin-right: 40px; border-width: 1px; border-bottom-style: solid; border-color: gray; " ) ;
line - > setFixedHeight ( 2 ) ;
return line ;
}
QWidget * labelWidget ( QString labelName , QString labelContent ) {
QHBoxLayout * labelLayout = new QHBoxLayout ;
labelLayout - > addWidget ( new QLabel ( labelName ) , 0 , Qt : : AlignLeft ) ;
QLabel * paramContent = new QLabel ( labelContent ) ;
paramContent - > setStyleSheet ( " color: #aaaaaa " ) ;
labelLayout - > addWidget ( paramContent , 0 , Qt : : AlignRight ) ;
QWidget * labelWidget = new QWidget ;
labelWidget - > setLayout ( labelLayout ) ;
return labelWidget ;
}
ParamsToggle : : ParamsToggle ( QString param , QString title , QString description , QString icon_path , QWidget * parent ) : QFrame ( parent ) , param ( param ) {
ParamsToggle : : ParamsToggle ( QString param , QString title , QString description , QString icon_path , QWidget * parent ) : QFrame ( parent ) , param ( param ) {
QHBoxLayout * layout = new QHBoxLayout ;
QHBoxLayout * layout = new QHBoxLayout ;
@ -61,38 +78,43 @@ void ParamsToggle::checkboxClicked(int state) {
QWidget * toggles_panel ( ) {
QWidget * toggles_panel ( ) {
QVBoxLayout * toggles_list = new QVBoxLayout ( ) ;
QVBoxLayout * toggles_list = new QVBoxLayout ( ) ;
toggles_list - > setMargin ( 50 ) ;
toggles_list - > setMargin ( 50 ) ;
toggles_list - > setSpacing ( 25 ) ;
toggles_list - > addWidget ( new ParamsToggle ( " OpenpilotEnabledToggle " ,
toggles_list - > addWidget ( new ParamsToggle ( " OpenpilotEnabledToggle " ,
" Enable openpilot " ,
" Enable openpilot " ,
" Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off. " ,
" Use the openpilot system for adaptive cruise control and lane keep driver assistance. Your attention is required at all times to use this feature. Changing this setting takes effect when the car is powered off. " ,
" ../assets/offroad/icon_openpilot.png "
" ../assets/offroad/icon_openpilot.png "
) ) ;
) ) ;
toggles_list - > addWidget ( horizontal_line ( ) ) ;
toggles_list - > addWidget ( new ParamsToggle ( " LaneChangeEnabled " ,
toggles_list - > addWidget ( new ParamsToggle ( " LaneChangeEnabled " ,
" Enable Lane Change Assist " ,
" Enable Lane Change Assist " ,
" Perform assisted lane changes with openpilot by checking your surroundings for safety, activating the turn signal and gently nudging the steering wheel towards your desired lane. openpilot is not capable of checking if a lane change is safe. You must continuously observe your surroundings to use this feature. " ,
" Perform assisted lane changes with openpilot by checking your surroundings for safety, activating the turn signal and gently nudging the steering wheel towards your desired lane. openpilot is not capable of checking if a lane change is safe. You must continuously observe your surroundings to use this feature. " ,
" ../assets/offroad/icon_road.png "
" ../assets/offroad/icon_road.png "
) ) ;
) ) ;
toggles_list - > addWidget ( horizontal_line ( ) ) ;
toggles_list - > addWidget ( new ParamsToggle ( " IsLdwEnabled " ,
toggles_list - > addWidget ( new ParamsToggle ( " IsLdwEnabled " ,
" Enable Lane Departure Warnings " ,
" Enable Lane Departure Warnings " ,
" Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31mph (50kph). " ,
" Receive alerts to steer back into the lane when your vehicle drifts over a detected lane line without a turn signal activated while driving over 31mph (50kph). " ,
" ../assets/offroad/icon_warning.png "
" ../assets/offroad/icon_warning.png "
) ) ;
) ) ;
toggles_list - > addWidget ( horizontal_line ( ) ) ;
toggles_list - > addWidget ( new ParamsToggle ( " RecordFront " ,
toggles_list - > addWidget ( new ParamsToggle ( " RecordFront " ,
" Record and Upload Driver Camera " ,
" Record and Upload Driver Camera " ,
" Upload data from the driver facing camera and help improve the driver monitoring algorithm. " ,
" Upload data from the driver facing camera and help improve the driver monitoring algorithm. " ,
" ../assets/offroad/icon_network.png "
" ../assets/offroad/icon_network.png "
) ) ;
) ) ;
toggles_list - > addWidget ( horizontal_line ( ) ) ;
toggles_list - > addWidget ( new ParamsToggle ( " IsRHD " ,
toggles_list - > addWidget ( new ParamsToggle ( " IsRHD " ,
" Enable Right-Hand Drive " ,
" Enable Right-Hand Drive " ,
" Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat. " ,
" Allow openpilot to obey left-hand traffic conventions and perform driver monitoring on right driver seat. " ,
" ../assets/offroad/icon_openpilot_mirrored.png "
" ../assets/offroad/icon_openpilot_mirrored.png "
) ) ;
) ) ;
toggles_list - > addWidget ( horizontal_line ( ) ) ;
toggles_list - > addWidget ( new ParamsToggle ( " IsMetric " ,
toggles_list - > addWidget ( new ParamsToggle ( " IsMetric " ,
" Use Metric System " ,
" Use Metric System " ,
" Display speed in km/h instead of mp/h. " ,
" Display speed in km/h instead of mp/h. " ,
" ../assets/offroad/icon_metric.png "
" ../assets/offroad/icon_metric.png "
) ) ;
) ) ;
toggles_list - > addWidget ( horizontal_line ( ) ) ;
toggles_list - > addWidget ( new ParamsToggle ( " CommunityFeaturesToggle " ,
toggles_list - > addWidget ( new ParamsToggle ( " CommunityFeaturesToggle " ,
" Enable Community Features " ,
" Enable Community Features " ,
" Use features from the open source community that are not maintained or supported by comma.ai and have not been confirmed to meet the standard safety model. These features include community supported cars and community supported hardware. Be extra cautious when using these features " ,
" Use features from the open source community that are not maintained or supported by comma.ai and have not been confirmed to meet the standard safety model. These features include community supported cars and community supported hardware. Be extra cautious when using these features " ,
@ -108,7 +130,7 @@ QWidget * device_panel() {
QVBoxLayout * device_layout = new QVBoxLayout ;
QVBoxLayout * device_layout = new QVBoxLayout ;
device_layout - > setMargin ( 100 ) ;
device_layout - > setMargin ( 100 ) ;
device_layout - > setSpacing ( 5 0) ;
device_layout - > setSpacing ( 3 0) ;
Params params = Params ( ) ;
Params params = Params ( ) ;
std : : vector < std : : pair < std : : string , std : : string > > labels = {
std : : vector < std : : pair < std : : string , std : : string > > labels = {
@ -123,21 +145,23 @@ QWidget * device_panel() {
//}
//}
for ( auto & l : labels ) {
for ( auto & l : labels ) {
QString text = QString : : fromStdString ( l . first + " : " + l . second ) ;
device_layout - > addWidget ( labelWidget ( QString : : fromStdString ( l . first + " : " ) , QString : : fromStdString ( l . second ) ) , 0 , Qt : : AlignTop ) ;
device_layout - > addWidget ( new QLabel ( text ) ) ;
}
}
// TODO: show current calibration values
// TODO: show current calibration values
QPushButton * clear_cal_btn = new QPushButton ( " Reset Calibration " ) ;
QPushButton * clear_cal_btn = new QPushButton ( " Reset Calibration " ) ;
device_layout - > addWidget ( clear_cal_btn ) ;
device_layout - > addWidget ( clear_cal_btn , 0 , Qt : : AlignBottom ) ;
device_layout - > addWidget ( horizontal_line ( ) , Qt : : AlignBottom ) ;
QObject : : connect ( clear_cal_btn , & QPushButton : : released , [ = ] ( ) {
QObject : : connect ( clear_cal_btn , & QPushButton : : released , [ = ] ( ) {
Params ( ) . delete_db_value ( " CalibrationParams " ) ;
Params ( ) . delete_db_value ( " CalibrationParams " ) ;
} ) ;
} ) ;
QPushButton * poweroff_btn = new QPushButton ( " Power Off " ) ;
QPushButton * poweroff_btn = new QPushButton ( " Power Off " ) ;
device_layout - > addWidget ( poweroff_btn ) ;
device_layout - > addWidget ( poweroff_btn , Qt : : AlignBottom ) ;
device_layout - > addWidget ( horizontal_line ( ) , Qt : : AlignBottom ) ;
QPushButton * reboot_btn = new QPushButton ( " Reboot " ) ;
QPushButton * reboot_btn = new QPushButton ( " Reboot " ) ;
device_layout - > addWidget ( reboot_btn ) ;
device_layout - > addWidget ( reboot_btn , Qt : : AlignBottom ) ;
device_layout - > addWidget ( horizontal_line ( ) , Qt : : AlignBottom ) ;
# ifdef __aarch64__
# ifdef __aarch64__
QObject : : connect ( poweroff_btn , & QPushButton : : released , [ = ] ( ) { std : : system ( " sudo poweroff " ) ; } ) ;
QObject : : connect ( poweroff_btn , & QPushButton : : released , [ = ] ( ) { std : : system ( " sudo poweroff " ) ; } ) ;
QObject : : connect ( reboot_btn , & QPushButton : : released , [ = ] ( ) { std : : system ( " sudo reboot " ) ; } ) ;
QObject : : connect ( reboot_btn , & QPushButton : : released , [ = ] ( ) { std : : system ( " sudo reboot " ) ; } ) ;
@ -181,9 +205,13 @@ QWidget * developer_panel() {
labels . push_back ( { " OS Version " , " AGNOS " + os_version } ) ;
labels . push_back ( { " OS Version " , " AGNOS " + os_version } ) ;
}
}
for ( auto l : labels ) {
for ( int i = 0 ; i < labels . size ( ) ; i + + ) {
QString text = QString : : fromStdString ( l . first + " : " + l . second ) ;
auto l = labels [ i ] ;
main_layout - > addWidget ( new QLabel ( text ) ) ;
main_layout - > addWidget ( labelWidget ( QString : : fromStdString ( l . first + " : " ) , QString : : fromStdString ( l . second ) ) ) ;
if ( i + 1 < labels . size ( ) ) {
main_layout - > addWidget ( horizontal_line ( ) ) ;
}
}
}
QWidget * widget = new QWidget ;
QWidget * widget = new QWidget ;
@ -197,7 +225,7 @@ QWidget * developer_panel() {
}
}
QWidget * network_panel ( QWidget * parent ) {
QWidget * network_panel ( QWidget * parent ) {
Networking * w = new Networking ( ) ;
Networking * w = new Networking ( parent ) ;
QObject : : connect ( parent , SIGNAL ( sidebarPressed ( ) ) , w , SLOT ( sidebarChange ( ) ) ) ;
QObject : : connect ( parent , SIGNAL ( sidebarPressed ( ) ) , w , SLOT ( sidebarChange ( ) ) ) ;
QObject : : connect ( w , SIGNAL ( openKeyboard ( ) ) , parent , SLOT ( closeSidebar ( ) ) ) ;
QObject : : connect ( w , SIGNAL ( openKeyboard ( ) ) , parent , SLOT ( closeSidebar ( ) ) ) ;
QObject : : connect ( w , SIGNAL ( closeKeyboard ( ) ) , parent , SLOT ( openSidebar ( ) ) ) ;
QObject : : connect ( w , SIGNAL ( closeKeyboard ( ) ) , parent , SLOT ( openSidebar ( ) ) ) ;
@ -227,7 +255,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
) " );
) " );
close_btn - > setFixedSize ( 200 , 200 ) ;
close_btn - > setFixedSize ( 200 , 200 ) ;
sidebar_layout - > addSpacing ( 45 ) ;
sidebar_layout - > addSpacing ( 45 ) ;
sidebar_layout - > addWidget ( close_btn , 0 , Qt : : AlignLeft ) ;
sidebar_layout - > addWidget ( close_btn , 0 , Qt : : AlignCenter ) ;
QObject : : connect ( close_btn , SIGNAL ( released ( ) ) , this , SIGNAL ( closeSettings ( ) ) ) ;
QObject : : connect ( close_btn , SIGNAL ( released ( ) ) , this , SIGNAL ( closeSettings ( ) ) ) ;
// setup panels
// setup panels
@ -259,25 +287,24 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
) " );
) " );
nav_btns - > addButton ( btn ) ;
nav_btns - > addButton ( btn ) ;
sidebar_layout - > addWidget ( btn , 0 , Qt : : AlignRight | Qt : : AlignTop ) ;
sidebar_layout - > addWidget ( btn , 0 , Qt : : AlignRight ) ;
panel_layout - > addWidget ( panel . second ) ;
panel_layout - > addWidget ( panel . second ) ;
QObject : : connect ( btn , SIGNAL ( released ( ) ) , this , SLOT ( setActivePanel ( ) ) ) ;
QObject : : connect ( btn , SIGNAL ( released ( ) ) , this , SLOT ( setActivePanel ( ) ) ) ;
QObject : : connect ( btn , & QPushButton : : released , [ = ] ( ) { emit sidebarPressed ( ) ; } ) ;
QObject : : connect ( btn , & QPushButton : : released , [ = ] ( ) { emit sidebarPressed ( ) ; } ) ;
}
}
qobject_cast < QPushButton * > ( nav_btns - > buttons ( ) [ 0 ] ) - > setChecked ( true ) ;
qobject_cast < QPushButton * > ( nav_btns - > buttons ( ) [ 0 ] ) - > setChecked ( true ) ;
sidebar_layout - > addStretch ( ) ;
sidebar_layout - > setContentsMargins ( 50 , 50 , 100 , 50 ) ;
// main settings layout, sidebar + main panel
// main settings layout, sidebar + main panel
QHBoxLayout * settings_layout = new QHBoxLayout ( ) ;
QHBoxLayout * settings_layout = new QHBoxLayout ( ) ;
settings_layout - > setContentsMargins ( 150 , 50 , 150 , 50 ) ;
sidebar_widget = new QWidget ;
sidebar_widget = new QWidget ;
sidebar_widget - > setLayout ( sidebar_layout ) ;
sidebar_widget - > setLayout ( sidebar_layout ) ;
sidebar_widget - > setFixedWidth ( 500 ) ;
settings_layout - > addWidget ( sidebar_widget ) ;
settings_layout - > addWidget ( sidebar_widget ) ;
settings_layout - > addSpacing ( 25 ) ;
QFrame * panel_frame = new QFrame ;
panel_frame = new QFrame ;
panel_frame - > setLayout ( panel_layout ) ;
panel_frame - > setLayout ( panel_layout ) ;
panel_frame - > setStyleSheet ( R " (
panel_frame - > setStyleSheet ( R " (
QFrame {
QFrame {
@ -288,7 +315,7 @@ SettingsWindow::SettingsWindow(QWidget *parent) : QFrame(parent) {
background - color : none ;
background - color : none ;
}
}
) " );
) " );
settings_layout - > addWidget ( panel_frame , 1 , Qt : : AlignRight ) ;
settings_layout - > addWidget ( panel_frame ) ;
setLayout ( settings_layout ) ;
setLayout ( settings_layout ) ;
setStyleSheet ( R " (
setStyleSheet ( R " (
@ -307,5 +334,5 @@ void SettingsWindow::closeSidebar() {
}
}
void SettingsWindow : : openSidebar ( ) {
void SettingsWindow : : openSidebar ( ) {
sidebar_widget - > setFixedWidth ( 3 00) ;
sidebar_widget - > setFixedWidth ( 5 00) ;
}
}