AdaptiveBrightness/AdaptiveBrightness/main_window.hpp

91 lines
1.9 KiB
C++

#pragma once
#include <array>
#include <memory>
#include <vector>
#include <QAction>
#include <QIcon>
#include <QMainWindow>
#include <QMenu>
#include <QMutex>
#include <QSlider>
#include <QSystemTrayIcon>
#include <QThread>
#include <QTimer>
#include "monitor.hpp"
#include "sensor.hpp"
#include "ui_AdaptiveBrightness.h"
class MainWindow : public QMainWindow {
Q_OBJECT
public:
MainWindow(QWidget* parent = nullptr);
~MainWindow();
private:
void closeEvent(QCloseEvent* event) override;
void enumSensors();
void enumMonitors();
void loadIcons();
void setupMonitorsTab();
void setupLimitsSlider();
void setupOverallLimitsSlider();
void setupBrightness();
void setupOverallBrightness();
void setupSensorsTab();
void setupTrayIcon();
void setupCallbackTimer();
void resetAllMonitorSettings();
void updateCurrentMonitorGUI(int index);
void updateState();
bool setMonitorBrightness(float& brightness);
void trayIconClicked(QSystemTrayIcon::ActivationReason reason);
Ui::MainWindow m_ui;
std::array<std::unique_ptr<QIcon>, 9> m_noSensorStateIcons;
std::array<std::unique_ptr<QIcon>, 9> m_sensorStateIcons;
std::unique_ptr<QIcon> m_errorIcon;
bool m_visibility = false;
QAction* m_showHideAction = nullptr;
QMenu* m_trayIconMenu = nullptr;
QSystemTrayIcon* m_trayIcon = nullptr;
QThread* m_timerThread = nullptr;
QTimer* m_timer = nullptr;
QMutex m_mtx;
struct SensorData {
Sensor driver;
};
struct MonitorData {
static constexpr auto HYSTERESIS_THRESHOLD = 0.05f;
Monitor driver;
float minBrightness;
float maxBrightness;
float brightness;
float prevBrightness;
bool manualOverride;
};
std::vector<SensorData> m_sensors;
std::vector<MonitorData> m_monitors;
};