#pragma once #include #include #include #include #include #include #include "common/params.h" #include "selfdrive/ui/qt/qt_window.h" class TrainingGuide : public QFrame { Q_OBJECT public: explicit TrainingGuide(QWidget *parent = 0); private: void showEvent(QShowEvent *event) override; void paintEvent(QPaintEvent *event) override; void mouseReleaseEvent(QMouseEvent* e) override; QImage loadImage(int id); QImage image; QSize image_raw_size; int currentIndex = 0; // Bounding boxes for each training guide step const QRect continueBtn = {1840, 0, 320, 1080}; QVector boundingRect { QRect(112, 804, 618, 164), continueBtn, continueBtn, QRect(1641, 558, 210, 313), QRect(1662, 528, 184, 108), continueBtn, QRect(1814, 621, 211, 170), QRect(1350, 0, 497, 755), QRect(1540, 386, 468, 238), QRect(112, 804, 1126, 164), QRect(1598, 199, 316, 333), continueBtn, QRect(1364, 90, 796, 990), continueBtn, QRect(1593, 114, 318, 853), QRect(1379, 511, 391, 243), continueBtn, continueBtn, QRect(630, 804, 626, 164), QRect(108, 804, 426, 164), }; const QString img_path = "../assets/training/"; QElapsedTimer click_timer; signals: void completedTraining(); }; class TermsPage : public QFrame { Q_OBJECT public: explicit TermsPage(QWidget *parent = 0) : QFrame(parent) {}; public slots: void enableAccept(); private: void showEvent(QShowEvent *event) override; QPushButton *accept_btn; signals: void acceptedTerms(); void declinedTerms(); }; class DeclinePage : public QFrame { Q_OBJECT public: explicit DeclinePage(QWidget *parent = 0) : QFrame(parent) {}; private: void showEvent(QShowEvent *event) override; signals: void getBack(); }; class OnboardingWindow : public QStackedWidget { Q_OBJECT public: explicit OnboardingWindow(QWidget *parent = 0); inline void showTrainingGuide() { setCurrentIndex(1); } inline bool completed() const { return accepted_terms && training_done; } private: void updateActiveScreen(); Params params; bool accepted_terms = false, training_done = false; signals: void onboardingDone(); };