parent
							
								
									d9185fd436
								
							
						
					
					
						commit
						2c712a9ea2
					
				
				 5 changed files with 140 additions and 8 deletions
			
			
		@ -0,0 +1,103 @@ | 
				
			||||
#include <string> | 
				
			||||
 | 
				
			||||
#include "onboarding.hpp" | 
				
			||||
 | 
				
			||||
#include <QStackedLayout> | 
				
			||||
#include <QVBoxLayout> | 
				
			||||
#include <QHBoxLayout> | 
				
			||||
#include <QPushButton> | 
				
			||||
#include <QLabel> | 
				
			||||
 | 
				
			||||
#include "common/params.h" | 
				
			||||
 | 
				
			||||
 | 
				
			||||
QWidget * OnboardingWindow::terms_screen() { | 
				
			||||
  QVBoxLayout *main_layout = new QVBoxLayout(); | 
				
			||||
  main_layout->setMargin(30); | 
				
			||||
  main_layout->setSpacing(30); | 
				
			||||
 | 
				
			||||
  QLabel *title = new QLabel("Review Terms"); | 
				
			||||
  title->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum); | 
				
			||||
  title->setStyleSheet(R"( | 
				
			||||
    QLabel { | 
				
			||||
      font-size: 80px; | 
				
			||||
      text-align: left; | 
				
			||||
      margin: 0; | 
				
			||||
      padding: 0; | 
				
			||||
    } | 
				
			||||
  )"); | 
				
			||||
  main_layout->addWidget(title); | 
				
			||||
 | 
				
			||||
  QLabel *terms = new QLabel("See terms at https://my.comma.ai/terms"); | 
				
			||||
  terms->setAlignment(Qt::AlignCenter); | 
				
			||||
  terms->setStyleSheet(R"( | 
				
			||||
    QLabel { | 
				
			||||
      font-size: 35px; | 
				
			||||
      border-radius: 10px; | 
				
			||||
      text-align: center; | 
				
			||||
      background-color: #292929; | 
				
			||||
    } | 
				
			||||
  )"); | 
				
			||||
  main_layout->addWidget(terms, Qt::AlignTop); | 
				
			||||
 | 
				
			||||
  QHBoxLayout *btn_layout = new QHBoxLayout(); | 
				
			||||
  //btn_layout->setSpacing(30);
 | 
				
			||||
 | 
				
			||||
  QPushButton *decline_btn = new QPushButton("Decline"); | 
				
			||||
  btn_layout->addWidget(decline_btn); | 
				
			||||
  QPushButton *accept_btn = new QPushButton("Accept"); | 
				
			||||
  btn_layout->addWidget(accept_btn); | 
				
			||||
  main_layout->addLayout(btn_layout); | 
				
			||||
 | 
				
			||||
  QObject::connect(accept_btn, &QPushButton::released, [=]() { | 
				
			||||
    Params().write_db_value("HasAcceptedTerms", LATEST_TERMS_VERSION); | 
				
			||||
    updateActiveScreen(); | 
				
			||||
  }); | 
				
			||||
 | 
				
			||||
  QWidget *widget = new QWidget; | 
				
			||||
  widget->setLayout(main_layout); | 
				
			||||
  widget->setStyleSheet(R"( | 
				
			||||
    QLabel { | 
				
			||||
      color: white; | 
				
			||||
    } | 
				
			||||
    QPushButton { | 
				
			||||
      font-size: 50px; | 
				
			||||
      padding: 50px; | 
				
			||||
      border-radius: 10px; | 
				
			||||
      background-color: #292929; | 
				
			||||
    } | 
				
			||||
  )"); | 
				
			||||
 | 
				
			||||
  return widget; | 
				
			||||
} | 
				
			||||
 | 
				
			||||
void OnboardingWindow::updateActiveScreen() { | 
				
			||||
 | 
				
			||||
  Params params = Params(); | 
				
			||||
 | 
				
			||||
  bool accepted_terms = params.get("HasAcceptedTerms", false).compare(LATEST_TERMS_VERSION) == 0; | 
				
			||||
 | 
				
			||||
  if (accepted_terms) { | 
				
			||||
    emit onboardingDone(); | 
				
			||||
  } | 
				
			||||
} | 
				
			||||
 | 
				
			||||
OnboardingWindow::OnboardingWindow(QWidget *parent) : QWidget(parent) { | 
				
			||||
 | 
				
			||||
  // Onboarding flow: terms -> account pairing -> training
 | 
				
			||||
 | 
				
			||||
 | 
				
			||||
  QStackedLayout *main_layout = new QStackedLayout; | 
				
			||||
  main_layout->addWidget(terms_screen()); | 
				
			||||
  setLayout(main_layout); | 
				
			||||
  setStyleSheet(R"( | 
				
			||||
    * { | 
				
			||||
      background-color: black; | 
				
			||||
    } | 
				
			||||
  )"); | 
				
			||||
 | 
				
			||||
  // TODO: implement the training guide
 | 
				
			||||
  Params().write_db_value("CompletedTrainingVersion", LATEST_TRAINING_VERSION); | 
				
			||||
 | 
				
			||||
  updateActiveScreen(); | 
				
			||||
} | 
				
			||||
@ -0,0 +1,24 @@ | 
				
			||||
#pragma once | 
				
			||||
 | 
				
			||||
#include <QWidget> | 
				
			||||
 | 
				
			||||
 | 
				
			||||
// TODO: this is defined in python too
 | 
				
			||||
#define LATEST_TERMS_VERSION "2" | 
				
			||||
#define LATEST_TRAINING_VERSION "0.2.0" | 
				
			||||
 | 
				
			||||
class OnboardingWindow : public QWidget { | 
				
			||||
  Q_OBJECT | 
				
			||||
 | 
				
			||||
public: | 
				
			||||
  explicit OnboardingWindow(QWidget *parent = 0); | 
				
			||||
 | 
				
			||||
signals: | 
				
			||||
  void onboardingDone(); | 
				
			||||
 | 
				
			||||
private: | 
				
			||||
  QWidget * terms_screen(); | 
				
			||||
 | 
				
			||||
private slots: | 
				
			||||
  void updateActiveScreen(); | 
				
			||||
}; | 
				
			||||
					Loading…
					
					
				
		Reference in new issue