9 Commits

Author SHA1 Message Date
e796ff3663 Hide unfinished sensors tab 2020-07-17 18:58:46 +02:00
de58e2d472 Reset monitor settings upon startup 2020-07-17 18:53:28 +02:00
314b281c03 Set initial slider position to 50 2020-07-17 18:53:15 +02:00
5253dc1df6 Implement monitor reset button 2020-07-17 18:49:28 +02:00
4bdedbc110 Add missing header 2020-07-17 18:44:22 +02:00
42043bcd55 Implement re-enumerate button 2020-07-17 18:35:56 +02:00
45116d8857 Add mutex to protect update thread 2020-07-17 18:35:38 +02:00
c930e316c4 Set tray icon to average brightness value 2020-07-17 17:52:18 +02:00
1e3836cb9f Fix type mismatch warning 2020-07-17 17:37:15 +02:00
3 changed files with 70 additions and 8 deletions

View File

@@ -60,6 +60,9 @@
<layout class="QGridLayout" name="gridLayout_9"> <layout class="QGridLayout" name="gridLayout_9">
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSlider" name="monitorMaxBrightnessSlider"> <widget class="QSlider" name="monitorMaxBrightnessSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -74,6 +77,9 @@
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QSlider" name="monitorMinBrightnessSlider"> <widget class="QSlider" name="monitorMinBrightnessSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -117,6 +123,9 @@
<layout class="QGridLayout" name="gridLayout_2"> <layout class="QGridLayout" name="gridLayout_2">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QSlider" name="monitorBrightnessSlider"> <widget class="QSlider" name="monitorBrightnessSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -160,6 +169,9 @@
</item> </item>
<item row="0" column="1"> <item row="0" column="1">
<widget class="QSlider" name="monitorOverallMinBrightnessSlider"> <widget class="QSlider" name="monitorOverallMinBrightnessSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -184,6 +196,9 @@
</item> </item>
<item row="1" column="1"> <item row="1" column="1">
<widget class="QSlider" name="monitorOverallMaxBrightnessSlider"> <widget class="QSlider" name="monitorOverallMaxBrightnessSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>
@@ -243,6 +258,9 @@
<layout class="QGridLayout" name="gridLayout"> <layout class="QGridLayout" name="gridLayout">
<item row="0" column="0"> <item row="0" column="0">
<widget class="QSlider" name="monitorOverallBrightnessSlider"> <widget class="QSlider" name="monitorOverallBrightnessSlider">
<property name="value">
<number>50</number>
</property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
</property> </property>

View File

@@ -5,6 +5,7 @@
#include <cmath> #include <cmath>
#include <QAbstractButton>
#include <QCloseEvent> #include <QCloseEvent>
#include <QGroupBox> #include <QGroupBox>
#include <QSlider> #include <QSlider>
@@ -28,6 +29,7 @@ MainWindow::MainWindow(QWidget* parent) : QMainWindow(parent)
enumMonitors(); enumMonitors();
setupMonitorsTab(); setupMonitorsTab();
setupSensorsTab();
setupTrayIcon(); setupTrayIcon();
@@ -61,15 +63,20 @@ void MainWindow::enumSensors()
void MainWindow::enumMonitors() void MainWindow::enumMonitors()
{ {
m_mtx.lock();
m_ui.monitorDropdown->clear(); m_ui.monitorDropdown->clear();
m_monitors.clear();
auto monitors = enumerateMonitors(); auto monitors = enumerateMonitors();
for(auto& monitor: monitors) { for(auto& monitor: monitors) {
const auto currentBrightness = monitor.getBrightness(); const auto currentBrightness = monitor.getBrightness();
m_ui.monitorDropdown->addItem(monitor.getName());
m_monitors.push_back({std::move(monitor), 0.f, 1.f, currentBrightness, false}); m_monitors.push_back({std::move(monitor), 0.f, 1.f, currentBrightness, false});
m_ui.monitorDropdown->addItem(m_monitors.back().driver.getName());
} }
m_mtx.unlock();
} }
void MainWindow::loadIcons() void MainWindow::loadIcons()
@@ -110,12 +117,16 @@ void MainWindow::loadIcons()
void MainWindow::setupMonitorsTab() void MainWindow::setupMonitorsTab()
{ {
connect(m_ui.monitorDropdown, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::updateCurrentMonitorGUI); connect(m_ui.monitorDropdown, QOverload<int>::of(&QComboBox::currentIndexChanged), this, &MainWindow::updateCurrentMonitorGUI);
connect(m_ui.monitorEnumerateButton, &QAbstractButton::clicked, [this](bool) { enumMonitors(); });
connect(m_ui.monitorResetButton, &QAbstractButton::clicked, [this](bool) { resetAllMonitorSettings(); });
setupLimitsSlider(); setupLimitsSlider();
setupOverallLimitsSlider(); setupOverallLimitsSlider();
setupBrightness(); setupBrightness();
setupOverallBrightness(); setupOverallBrightness();
resetAllMonitorSettings();
} }
void MainWindow::setupLimitsSlider() void MainWindow::setupLimitsSlider()
@@ -208,6 +219,11 @@ void MainWindow::setupOverallBrightness()
}); });
} }
void MainWindow::setupSensorsTab()
{
m_ui.tabs->removeTab(1);
}
void MainWindow::setupTrayIcon() void MainWindow::setupTrayIcon()
{ {
loadIcons(); loadIcons();
@@ -259,8 +275,19 @@ void MainWindow::setupCallbackTimer()
qDebug(ltr("Callback timer started")); qDebug(ltr("Callback timer started"));
} }
void MainWindow::resetAllMonitorSettings()
{
m_ui.monitorOverallMinBrightnessSlider->setValue(0);
m_ui.monitorOverallMaxBrightnessSlider->setValue(100);
m_ui.monitorOverallOverrideCheck->setCheckState(Qt::CheckState::Unchecked);
}
void MainWindow::updateCurrentMonitorGUI(int index) void MainWindow::updateCurrentMonitorGUI(int index)
{ {
if(index == -1) {
return;
}
m_ui.monitorMinBrightnessSlider->setValue(utils::map(m_monitors[index].minBrightness, 0.f, 1.f, 0, 100)); m_ui.monitorMinBrightnessSlider->setValue(utils::map(m_monitors[index].minBrightness, 0.f, 1.f, 0, 100));
m_ui.monitorMaxBrightnessSlider->setValue(utils::map(m_monitors[index].maxBrightness, 0.f, 1.f, 0, 100)); m_ui.monitorMaxBrightnessSlider->setValue(utils::map(m_monitors[index].maxBrightness, 0.f, 1.f, 0, 100));
m_ui.monitorBrightnessSlider->setValue(utils::map(m_monitors[index].brightness, 0.f, 1.f, 0, 100)); m_ui.monitorBrightnessSlider->setValue(utils::map(m_monitors[index].brightness, 0.f, 1.f, 0, 100));
@@ -269,6 +296,8 @@ void MainWindow::updateCurrentMonitorGUI(int index)
void MainWindow::updateState() void MainWindow::updateState()
{ {
m_mtx.lock();
qDebug(ltr("Updating state")); qDebug(ltr("Updating state"));
bool sensorError = false; bool sensorError = false;
@@ -301,14 +330,14 @@ void MainWindow::updateState()
sensorError = true; sensorError = true;
} }
const auto iconBrightness = utils::map(brightness, 0.f, 1.f, size_t{0}, size_t{8});
if(!setMonitorBrightness(brightness)) { if(!setMonitorBrightness(brightness)) {
enumMonitors(); 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;
} }
const auto iconBrightness = utils::map(brightness, 0.f, 1.f, size_t{0}, size_t{8});
if(!sensorError && !monitorError && m_trayIcon) { if(!sensorError && !monitorError && m_trayIcon) {
m_trayIcon->setIcon(*m_sensorStateIcons[iconBrightness]); m_trayIcon->setIcon(*m_sensorStateIcons[iconBrightness]);
} }
@@ -322,9 +351,11 @@ void MainWindow::updateState()
if(m_trayIcon) { if(m_trayIcon) {
m_trayIcon->setToolTip(tr("AdaptiveBrightness - %1%").arg(brightness * 100, 0, 'f', 0)); m_trayIcon->setToolTip(tr("AdaptiveBrightness - %1%").arg(brightness * 100, 0, 'f', 0));
} }
m_mtx.unlock();
} }
bool MainWindow::setMonitorBrightness(float brightness) bool MainWindow::setMonitorBrightness(float& brightness)
{ {
if(m_monitors.empty()) { if(m_monitors.empty()) {
return false; return false;
@@ -347,13 +378,20 @@ bool MainWindow::setMonitorBrightness(float brightness)
if(!m_monitors[i].driver.setBrightness(m_monitors[i].brightness)) { if(!m_monitors[i].driver.setBrightness(m_monitors[i].brightness)) {
errorOccurred = true; errorOccurred = true;
} }
else if(m_ui.monitorDropdown->currentIndex() == i) { else if(m_ui.monitorDropdown->currentIndex() == static_cast<int>(i)) {
updateCurrentMonitorGUI(i); updateCurrentMonitorGUI(static_cast<int>(i));
} }
} }
if(!errorOccurred) {
auto avgBrightness = 0.f;
std::for_each(m_monitors.begin(), m_monitors.end(), [&avgBrightness](const auto& mon) { avgBrightness += mon.brightness; });
avgBrightness /= m_monitors.size();
brightness = avgBrightness;
}
if(allMonitorsSameBrightness) { if(allMonitorsSameBrightness) {
m_ui.monitorOverallBrightnessSlider->setValue(utils::map(m_monitors.front().brightness, 0.f, 1.f, 0, 100)); m_ui.monitorOverallBrightnessSlider->setValue(utils::map(brightness, 0.f, 1.f, 0, 100));
} }
return !errorOccurred; return !errorOccurred;

View File

@@ -8,6 +8,7 @@
#include <QIcon> #include <QIcon>
#include <QMainWindow> #include <QMainWindow>
#include <QMenu> #include <QMenu>
#include <QMutex>
#include <QSlider> #include <QSlider>
#include <QSystemTrayIcon> #include <QSystemTrayIcon>
#include <QThread> #include <QThread>
@@ -39,14 +40,18 @@ class MainWindow : public QMainWindow {
void setupBrightness(); void setupBrightness();
void setupOverallBrightness(); void setupOverallBrightness();
void setupSensorsTab();
void setupTrayIcon(); void setupTrayIcon();
void setupCallbackTimer(); void setupCallbackTimer();
void resetAllMonitorSettings();
void updateCurrentMonitorGUI(int index); void updateCurrentMonitorGUI(int index);
void updateState(); void updateState();
bool setMonitorBrightness(float brightness); bool setMonitorBrightness(float& brightness);
void trayIconClicked(QSystemTrayIcon::ActivationReason reason); void trayIconClicked(QSystemTrayIcon::ActivationReason reason);
@@ -63,6 +68,7 @@ class MainWindow : public QMainWindow {
QThread* m_timerThread = nullptr; QThread* m_timerThread = nullptr;
QTimer* m_timer = nullptr; QTimer* m_timer = nullptr;
QMutex m_mtx;
struct SensorData { struct SensorData {
Sensor driver; Sensor driver;