#pragma once #include #include #include #include #include #include #include "selfdrive/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 = {1610, 0, 310, 1080}; QVector boundingRectStandard { QRect(650, 710, 720, 190), continueBtnStandard, continueBtnStandard, QRect(1442, 565, 230, 310), QRect(1515, 562, 133, 60), continueBtnStandard, QRect(1580, 630, 215, 130), QRect(1210, 0, 485, 590), QRect(1460, 400, 375, 210), QRect(166, 842, 1019, 148), QRect(1460, 210, 300, 310), continueBtnStandard, QRect(1375, 80, 545, 1000), continueBtnStandard, QRect(1610, 130, 280, 800), QRect(1385, 485, 400, 270), continueBtnStandard, continueBtnStandard, QRect(1036, 769, 718, 189), QRect(201, 769, 718, 189), }; const QRect continueBtnWide = {1850, 0, 310, 1080}; QVector boundingRectWide { QRect(654, 721, 718, 189), continueBtnWide, continueBtnWide, QRect(1690, 570, 165, 300), QRect(1690, 560, 133, 60), continueBtnWide, QRect(1820, 630, 180, 155), QRect(1360, 0, 460, 620), QRect(1570, 400, 375, 215), QRect(167, 842, 1018, 148), QRect(1610, 210, 295, 310), continueBtnWide, QRect(1555, 90, 610, 990), continueBtnWide, QRect(1600, 140, 280, 790), QRect(1385, 490, 750, 270), continueBtnWide, continueBtnWide, QRect(1138, 755, 718, 189), QRect(303, 755, 718, 189), }; 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(); };