#pragma once #include #include #include #include #include #include #include #include #include "qt_sound.hpp" #include "ui/ui.hpp" #include "widgets/offroad_alerts.hpp" // container window for onroad NVG UI class GLWindow : public QOpenGLWidget, protected QOpenGLFunctions { Q_OBJECT public: using QOpenGLWidget::QOpenGLWidget; explicit GLWindow(QWidget* parent = 0); void wake(); ~GLWindow(); inline static UIState ui_state = {0}; signals: void offroadTransition(bool offroad); void screen_shutoff(); protected: void initializeGL() override; void resizeGL(int w, int h) override; void paintGL() override; private: QTimer* timer; QTimer* backlight_timer; QtSound sound; bool onroad = true; double prev_draw_t = 0; // TODO: make a nice abstraction to handle embedded device stuff float brightness_b = 0; float brightness_m = 0; float smooth_brightness = 0; float last_brightness = 0; public slots: void timerUpdate(); void backlightUpdate(); }; // offroad home screen class OffroadHome : public QWidget { Q_OBJECT public: explicit OffroadHome(QWidget* parent = 0); private: QTimer* timer; QLabel* date; QStackedLayout* center_layout; OffroadAlert* alerts_widget; QPushButton* alert_notification; public slots: void closeAlerts(); void openAlerts(); void refresh(); }; class HomeWindow : public QWidget { Q_OBJECT public: explicit HomeWindow(QWidget* parent = 0); GLWindow* glWindow; signals: void openSettings(); void closeSettings(); void offroadTransition(bool offroad); protected: void mousePressEvent(QMouseEvent* e) override; private: OffroadHome* home; QStackedLayout* layout; };