#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 image; int currentIndex = 0; // Bounding boxes for each training guide step const QRect continueBtnStandard = {1620, 0, 300, 1080}; QVector boundingRectStandard { QRect(112, 804, 619, 166), continueBtnStandard, continueBtnStandard, QRect(1476, 565, 253, 308), QRect(1501, 529, 184, 108), continueBtnStandard, QRect(1613, 665, 178, 153), QRect(1220, 0, 420, 730), QRect(1335, 499, 440, 147), QRect(112, 820, 996, 148), QRect(1412, 199, 316, 333), continueBtnStandard, QRect(1237, 63, 683, 1017), continueBtnStandard, QRect(1455, 110, 313, 860), QRect(1253, 519, 383, 228), continueBtnStandard, continueBtnStandard, QRect(630, 804, 626, 164), QRect(108, 804, 426, 164), }; const QRect continueBtnWide = {1840, 0, 320, 1080}; QVector boundingRectWide { QRect(112, 804, 618, 164), continueBtnWide, continueBtnWide, QRect(1641, 558, 210, 313), QRect(1662, 528, 184, 108), continueBtnWide, QRect(1814, 621, 211, 170), QRect(1350, 0, 497, 755), QRect(1553, 516, 406, 112), QRect(112, 804, 1126, 164), QRect(1598, 199, 316, 333), continueBtnWide, QRect(1364, 90, 796, 990), continueBtnWide, QRect(1593, 114, 318, 853), QRect(1379, 511, 391, 243), continueBtnWide, continueBtnWide, QRect(630, 804, 626, 164), QRect(108, 804, 426, 164), }; QString img_path; QVector boundingRect; 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(); };