dragonpilot - 基於 openpilot 的開源駕駛輔助系統
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

132 lines
3.0 KiB

#pragma once
#include <QImage>
#include <QMouseEvent>
#include <QPushButton>
#include <QStackedWidget>
#include <QWidget>
#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<QRect> 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<QRect> 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),
};
const QString IMG_PATH = WIDE_UI ? "../assets/training_wide/" : "../assets/training/";
const QVector<QRect> boundingRect = WIDE_UI ? boundingRectWide : boundingRectStandard;
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();
};