# include "selfdrive/ui/qt/offroad/experimental_mode.h"
# include <QDebug>
# include <QHBoxLayout>
# include <QPainter>
# include <QPainterPath>
# include <QStyle>
# include "selfdrive/ui/ui.h"
ExperimentalModeButton : : ExperimentalModeButton ( QWidget * parent ) : QPushButton ( parent ) {
chill_pixmap = QPixmap ( " ../assets/img_couch.svg " ) . scaledToWidth ( img_width , Qt : : SmoothTransformation ) ;
experimental_pixmap = QPixmap ( " ../assets/img_experimental_grey.svg " ) . scaledToWidth ( img_width , Qt : : SmoothTransformation ) ;
// go to toggles and expand experimental mode description
connect ( this , & QPushButton : : clicked , [ = ] ( ) { emit openSettings ( 2 , " ExperimentalMode " ) ; } ) ;
setFixedHeight ( 125 ) ;
QHBoxLayout * main_layout = new QHBoxLayout ;
main_layout - > setContentsMargins ( horizontal_padding , 0 , horizontal_padding , 0 ) ;
mode_label = new QLabel ;
mode_icon = new QLabel ;
mode_icon - > setSizePolicy ( QSizePolicy ( QSizePolicy : : Fixed , QSizePolicy : : Fixed ) ) ;
main_layout - > addWidget ( mode_label , 1 , Qt : : AlignLeft ) ;
main_layout - > addWidget ( mode_icon , 0 , Qt : : AlignRight ) ;
setLayout ( main_layout ) ;
setStyleSheet ( R " (
QPushButton {
border : none ;
}
QLabel {
font - size : 45 px ;
font - weight : 300 ;
text - align : left ;
font - family : JetBrainsMono ;
color : # 000000 ;
}
) " );
}
void ExperimentalModeButton : : paintEvent ( QPaintEvent * event ) {
QPainter p ( this ) ;
p . setPen ( Qt : : NoPen ) ;
p . setRenderHint ( QPainter : : Antialiasing ) ;
QPainterPath path ;
path . addRoundedRect ( rect ( ) , 10 , 10 ) ;
// gradient
bool pressed = isDown ( ) ;
QLinearGradient gradient ( rect ( ) . left ( ) , 0 , rect ( ) . right ( ) , 0 ) ;
if ( experimental_mode ) {
gradient . setColorAt ( 0 , QColor ( 255 , 155 , 63 , pressed ? 0xcc : 0xff ) ) ;
gradient . setColorAt ( 1 , QColor ( 219 , 56 , 34 , pressed ? 0xcc : 0xff ) ) ;
} else {
gradient . setColorAt ( 0 , QColor ( 20 , 255 , 171 , pressed ? 0xcc : 0xff ) ) ;
gradient . setColorAt ( 1 , QColor ( 35 , 149 , 255 , pressed ? 0xcc : 0xff ) ) ;
}
p . fillPath ( path , gradient ) ;
// vertical line
p . setPen ( QPen ( QColor ( 0 , 0 , 0 , 0x4d ) , 3 , Qt : : SolidLine ) ) ;
int line_x = rect ( ) . right ( ) - img_width - ( 2 * horizontal_padding ) ;
p . drawLine ( line_x , rect ( ) . bottom ( ) , line_x , rect ( ) . top ( ) ) ;
}
void ExperimentalModeButton : : showEvent ( QShowEvent * event ) {
experimental_mode = params . getBool ( " ExperimentalMode " ) ;
mode_icon - > setPixmap ( experimental_mode ? experimental_pixmap : chill_pixmap ) ;
mode_label - > setText ( experimental_mode ? tr ( " EXPERIMENTAL MODE ON " ) : tr ( " CHILL MODE ON " ) ) ;
}