Add some GUI abstraction and implement basic monitor selection
This commit is contained in:
parent
994e08bebc
commit
5b6dd9e62c
@ -24,8 +24,8 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
|
|||||||
|
|
||||||
m_ui.setupUi(this);
|
m_ui.setupUi(this);
|
||||||
|
|
||||||
m_sensors = enumerateSensors();
|
enumSensors();
|
||||||
m_monitors = enumerateMonitors();
|
enumMonitors();
|
||||||
|
|
||||||
setupMonitorsTab();
|
setupMonitorsTab();
|
||||||
|
|
||||||
@ -50,6 +50,28 @@ void MainWindow::closeEvent(QCloseEvent* event)
|
|||||||
event->ignore();
|
event->ignore();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::enumSensors()
|
||||||
|
{
|
||||||
|
auto sensors = enumerateSensors();
|
||||||
|
|
||||||
|
for(auto& sensor: sensors) {
|
||||||
|
m_sensors.push_back({std::move(sensor)});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void MainWindow::enumMonitors()
|
||||||
|
{
|
||||||
|
m_ui.monitorDropdown->clear();
|
||||||
|
|
||||||
|
auto monitors = enumerateMonitors();
|
||||||
|
|
||||||
|
for(auto& monitor: monitors) {
|
||||||
|
const auto currentBrightness = monitor.getBrightness();
|
||||||
|
m_ui.monitorDropdown->addItem(monitor.getName());
|
||||||
|
m_monitors.push_back({std::move(monitor), 0.f, 1.f, currentBrightness, false});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::loadIcons()
|
void MainWindow::loadIcons()
|
||||||
{
|
{
|
||||||
qDebug(ltr("Loading icons"));
|
qDebug(ltr("Loading icons"));
|
||||||
@ -87,6 +109,8 @@ void MainWindow::loadIcons()
|
|||||||
|
|
||||||
void MainWindow::setupMonitorsTab()
|
void MainWindow::setupMonitorsTab()
|
||||||
{
|
{
|
||||||
|
connect(m_ui.monitorDropdown, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::updateCurrentMonitorGUI);
|
||||||
|
|
||||||
m_ui.monitorBrightnessSlider->setDisabled(true);
|
m_ui.monitorBrightnessSlider->setDisabled(true);
|
||||||
m_ui.monitorOverallBrightnessSlider->setDisabled(true);
|
m_ui.monitorOverallBrightnessSlider->setDisabled(true);
|
||||||
|
|
||||||
@ -157,6 +181,24 @@ void MainWindow::setupCallbackTimer()
|
|||||||
qDebug(ltr("Callback timer started"));
|
qDebug(ltr("Callback timer started"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MainWindow::updateCurrentMonitorGUI(int index)
|
||||||
|
{
|
||||||
|
const auto brightness = std::clamp<int>(utils::map(m_monitors[index].brightness, 0.f, 1.f, 0, 100), 0, 100);
|
||||||
|
const auto minimum = std::clamp<int>(utils::map(m_monitors[index].minBrightness, 0.f, 1.f, 0, 100), 0, 100);
|
||||||
|
const auto maximum = std::clamp<int>(utils::map(m_monitors[index].maxBrightness, 0.f, 1.f, 0, 100), 0, 100);
|
||||||
|
|
||||||
|
m_ui.monitorMinBrightnessSlider->setValue(minimum);
|
||||||
|
m_ui.monitorMinBrightnessValueLabel->setText(QString("%1%").arg(minimum, 3, 10));
|
||||||
|
|
||||||
|
m_ui.monitorMaxBrightnessSlider->setValue(maximum);
|
||||||
|
m_ui.monitorMaxBrightnessValueLabel->setText(QString("%1%").arg(maximum, 3, 10));
|
||||||
|
|
||||||
|
m_ui.monitorBrightnessSlider->setValue(brightness);
|
||||||
|
m_ui.monitorBrightnessValueLabel->setText(QString("%1%").arg(brightness, 3, 10));
|
||||||
|
|
||||||
|
m_ui.monitorOverrideCheck->setChecked(m_monitors[index].manualOverride);
|
||||||
|
}
|
||||||
|
|
||||||
void MainWindow::updateState()
|
void MainWindow::updateState()
|
||||||
{
|
{
|
||||||
qDebug(ltr("Updating state"));
|
qDebug(ltr("Updating state"));
|
||||||
@ -173,8 +215,8 @@ void MainWindow::updateState()
|
|||||||
std::vector<float> values;
|
std::vector<float> values;
|
||||||
|
|
||||||
for(auto& sensor: m_sensors) {
|
for(auto& sensor: m_sensors) {
|
||||||
const auto sensorValues = sensor.readValues();
|
const auto sensorValues = sensor.driver.readValues();
|
||||||
if(!sensor) {
|
if(!sensor.driver) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
values.insert(values.end(), sensorValues.begin(), sensorValues.end());
|
values.insert(values.end(), sensorValues.begin(), sensorValues.end());
|
||||||
@ -191,7 +233,7 @@ void MainWindow::updateState()
|
|||||||
|
|
||||||
bool errorOccurred = false;
|
bool errorOccurred = false;
|
||||||
for(auto& monitor: m_monitors) {
|
for(auto& monitor: m_monitors) {
|
||||||
if(!monitor.setBrightness(brightness)) {
|
if(!monitor.driver.setBrightness(brightness)) {
|
||||||
errorOccurred = true;
|
errorOccurred = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -199,7 +241,7 @@ void MainWindow::updateState()
|
|||||||
};
|
};
|
||||||
|
|
||||||
if(!getAverageSensorValue(m_brightness)) {
|
if(!getAverageSensorValue(m_brightness)) {
|
||||||
m_sensors = enumerateSensors();
|
enumSensors();
|
||||||
qInfo(ltr("At least one sensor became invalid, re-enumerating sensors found %1 valid sensor(s)").arg(m_sensors.size()));
|
qInfo(ltr("At least one sensor became invalid, re-enumerating sensors found %1 valid sensor(s)").arg(m_sensors.size()));
|
||||||
sensorError = true;
|
sensorError = true;
|
||||||
}
|
}
|
||||||
@ -208,7 +250,7 @@ void MainWindow::updateState()
|
|||||||
iconBrightness = std::clamp<size_t>(roundedBrightness, 0, 8);
|
iconBrightness = std::clamp<size_t>(roundedBrightness, 0, 8);
|
||||||
|
|
||||||
if(!setAllMonitorsBrightness(m_brightness)) {
|
if(!setAllMonitorsBrightness(m_brightness)) {
|
||||||
m_monitors = enumerateMonitors();
|
enumMonitors();
|
||||||
qInfo(ltr("At least one monitor became invalid, re-enumerating monitors found %1 valid monitor(s)").arg(m_monitors.size()));
|
qInfo(ltr("At least one monitor became invalid, re-enumerating monitors found %1 valid monitor(s)").arg(m_monitors.size()));
|
||||||
monitorError = true;
|
monitorError = true;
|
||||||
}
|
}
|
||||||
|
@ -28,12 +28,17 @@ class MainWindow : public QMainWindow {
|
|||||||
private:
|
private:
|
||||||
void closeEvent(QCloseEvent* event) override;
|
void closeEvent(QCloseEvent* event) override;
|
||||||
|
|
||||||
|
void enumSensors();
|
||||||
|
void enumMonitors();
|
||||||
|
|
||||||
void loadIcons();
|
void loadIcons();
|
||||||
|
|
||||||
void setupMonitorsTab();
|
void setupMonitorsTab();
|
||||||
void setupTrayIcon();
|
void setupTrayIcon();
|
||||||
void setupCallbackTimer();
|
void setupCallbackTimer();
|
||||||
|
|
||||||
|
void updateCurrentMonitorGUI(int index);
|
||||||
|
|
||||||
void updateState();
|
void updateState();
|
||||||
|
|
||||||
void trayIconClicked(QSystemTrayIcon::ActivationReason reason);
|
void trayIconClicked(QSystemTrayIcon::ActivationReason reason);
|
||||||
@ -54,6 +59,18 @@ class MainWindow : public QMainWindow {
|
|||||||
|
|
||||||
float m_brightness = 0.5f;
|
float m_brightness = 0.5f;
|
||||||
|
|
||||||
std::vector<Sensor> m_sensors;
|
struct SensorData {
|
||||||
std::vector<Monitor> m_monitors;
|
Sensor driver;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct MonitorData {
|
||||||
|
Monitor driver;
|
||||||
|
float minBrightness;
|
||||||
|
float maxBrightness;
|
||||||
|
float brightness;
|
||||||
|
bool manualOverride;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::vector<SensorData> m_sensors;
|
||||||
|
std::vector<MonitorData> m_monitors;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user