# pragma once
# include <QLabel>
# include <QOpenGLFunctions>
# include <QOpenGLWidget>
# include <QPushButton>
# include <QStackedLayout>
# include <QStackedWidget>
# include <QTimer>
# include <QWidget>
# include "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 ;
Sound 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 ;
} ;