# include <QLabel>
# include <QString>
# include <QPushButton>
# include <QGridLayout>
# include <QVBoxLayout>
# include <QDesktopWidget>
# include <QtWebEngine>
# include <QWebEngineSettings>
# include "common/params.h"
# include "onboarding.hpp"
# include "home.hpp"
# include "util.h"
QLabel * title_label ( QString text ) {
QLabel * l = new QLabel ( text ) ;
l - > setStyleSheet ( R " (
font - size : 100 px ;
font - weight : 400 ;
) " );
return l ;
}
QWidget * layout2Widget ( QLayout * l ) {
QWidget * q = new QWidget ;
q - > setLayout ( l ) ;
return q ;
}
void TrainingGuide : : mouseReleaseEvent ( QMouseEvent * e ) {
int leftOffset = ( geometry ( ) . width ( ) - 1620 ) / 2 ;
int mousex = e - > x ( ) - leftOffset ;
int mousey = e - > y ( ) ;
// Check for restart
if ( currentIndex = = boundingBox . size ( ) - 1 ) {
if ( 1050 < = mousex & & mousex < = 1500 & & 773 < = mousey & & mousey < = 954 ) {
slayout - > setCurrentIndex ( 0 ) ;
currentIndex = 0 ;
return ;
}
}
if ( boundingBox [ currentIndex ] [ 0 ] < = mousex & & mousex < = boundingBox [ currentIndex ] [ 1 ] & & boundingBox [ currentIndex ] [ 2 ] < = mousey & & mousey < = boundingBox [ currentIndex ] [ 3 ] ) {
slayout - > setCurrentIndex ( + + currentIndex ) ;
}
if ( currentIndex > = boundingBox . size ( ) ) {
emit completedTraining ( ) ;
return ;
}
}
TrainingGuide : : TrainingGuide ( QWidget * parent ) {
QHBoxLayout * hlayout = new QHBoxLayout ;
slayout = new QStackedLayout ( this ) ;
for ( int i = 0 ; i < boundingBox . size ( ) ; i + + ) {
QWidget * w = new QWidget ;
w - > setStyleSheet ( " .QWidget {background-image: url(../assets/training/step " + QString : : number ( i ) + " .jpg);} " ) ;
w - > setFixedSize ( 1620 , 1080 ) ;
slayout - > addWidget ( w ) ;
}
QWidget * sw = layout2Widget ( slayout ) ;
hlayout - > addWidget ( sw , 1 , Qt : : AlignCenter ) ;
setLayout ( hlayout ) ;
setStyleSheet ( R " (
background - color : # 07233 9 ;
) " );
}
QWidget * OnboardingWindow : : terms_screen ( ) {
QVBoxLayout * main_layout = new QVBoxLayout ;
main_layout - > setContentsMargins ( 40 , 0 , 40 , 0 ) ;
view = new QWebEngineView ( this ) ;
view - > settings ( ) - > setAttribute ( QWebEngineSettings : : ShowScrollBars , false ) ;
QString html = QString : : fromStdString ( util : : read_file ( " ../assets/offroad/tc.html " ) ) ;
view - > setHtml ( html ) ;
main_layout - > addWidget ( view ) ;
QHBoxLayout * buttons = new QHBoxLayout ;
buttons - > addWidget ( new QPushButton ( " Decline " ) ) ;
buttons - > addSpacing ( 50 ) ;
accept_btn = new QPushButton ( " Scroll to accept " ) ;
accept_btn - > setEnabled ( false ) ;
buttons - > addWidget ( accept_btn ) ;
QObject : : connect ( accept_btn , & QPushButton : : released , [ = ] ( ) {
Params ( ) . write_db_value ( " HasAcceptedTerms " , current_terms_version ) ;
updateActiveScreen ( ) ;
} ) ;
QObject : : connect ( view - > page ( ) , SIGNAL ( scrollPositionChanged ( QPointF ) ) , this , SLOT ( scrollPositionChanged ( QPointF ) ) ) ;
QWidget * w = layout2Widget ( buttons ) ;
w - > setFixedHeight ( 200 ) ;
main_layout - > addWidget ( w ) ;
QWidget * widget = new QWidget ;
widget - > setLayout ( main_layout ) ;
widget - > setStyleSheet ( R " (
QPushButton {
font - size : 50 px ;
padding : 50 px ;
border - radius : 10 px ;
background - color : # 292929 ;
}
) " );
return widget ;
}
void OnboardingWindow : : updateActiveScreen ( ) {
Params params = Params ( ) ;
bool accepted_terms = params . get ( " HasAcceptedTerms " , false ) . compare ( current_terms_version ) = = 0 ;
bool training_done = params . get ( " CompletedTrainingVersion " , false ) . compare ( current_training_version ) = = 0 ;
if ( ! accepted_terms ) {
setCurrentIndex ( 0 ) ;
} else if ( ! training_done ) {
setCurrentIndex ( 1 ) ;
} else {
emit onboardingDone ( ) ;
}
}
OnboardingWindow : : OnboardingWindow ( QWidget * parent ) : QStackedWidget ( parent ) {
Params params = Params ( ) ;
current_terms_version = params . get ( " TermsVersion " , false ) ;
current_training_version = params . get ( " TrainingVersion " , false ) ;
bool accepted_terms = params . get ( " HasAcceptedTerms " , false ) . compare ( current_terms_version ) = = 0 ;
bool training_done = params . get ( " CompletedTrainingVersion " , false ) . compare ( current_training_version ) = = 0 ;
//Don't initialize widgets unless neccesary.
if ( accepted_terms & & training_done ) {
return ;
}
addWidget ( terms_screen ( ) ) ;
TrainingGuide * tr = new TrainingGuide ( this ) ;
connect ( tr , & TrainingGuide : : completedTraining , [ = ] ( ) {
Params ( ) . write_db_value ( " CompletedTrainingVersion " , current_training_version ) ;
updateActiveScreen ( ) ;
} ) ;
addWidget ( tr ) ;
setStyleSheet ( R " (
* {
color : white ;
background - color : black ;
}
QPushButton {
padding : 50 px ;
border - radius : 30 px ;
background - color : # 292929 ;
}
QPushButton : disabled {
color : # 777777 ;
background - color : # 222222 ;
}
) " );
updateActiveScreen ( ) ;
}
void OnboardingWindow : : scrollPositionChanged ( QPointF position ) {
if ( position . y ( ) > view - > page ( ) - > contentsSize ( ) . height ( ) - 1000 ) {
accept_btn - > setEnabled ( true ) ;
accept_btn - > setText ( " Accept " ) ;
}
}