openpilot/selfdrive/ui/qt/home.hpp

97 lines
1.8 KiB
C++

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