You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
lxqt-config-packaging/lxqt-config-brightness/brightnesssettings.cpp

102 lines
3.3 KiB

/*
Copyright (C) 2016 P.L. Lucas <selairi@gmail.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include "brightnesssettings.h"
#include "outputwidget.h"
#include <QMessageBox>
#include <QPushButton>
BrightnessSettings::BrightnessSettings(QWidget *parent):QDialog(parent)
{
ui = new Ui::BrightnessSettings();
ui->setupUi(this);
mBrightness = new XRandrBrightness();
mMonitors = mBrightness->getMonitorsInfo();
for(MonitorInfo monitor: mMonitors)
{
OutputWidget *output = new OutputWidget(monitor, this);
ui->layout->addWidget(output);
output->show();
connect(output, SIGNAL(changed(MonitorInfo)), this, SLOT(monitorSettingsChanged(MonitorInfo)));
connect(this, &BrightnessSettings::monitorReverted, output, &OutputWidget::setRevertedValues);
}
mConfirmRequestTimer.setSingleShot(true);
mConfirmRequestTimer.setInterval(1000);
connect(&mConfirmRequestTimer, &QTimer::timeout, this, &BrightnessSettings::requestConfirmation);
}
void BrightnessSettings::monitorSettingsChanged(MonitorInfo monitor)
{
mBrightness->setMonitorsSettings(QList<MonitorInfo>{} << monitor);
if (ui->confirmCB->isChecked())
{
mConfirmRequestTimer.start();
} else
{
for (auto & m : mMonitors)
{
if (m.id() == monitor.id() && m.name() == monitor.name())
{
m.setBacklight(monitor.backlight());
m.setBrightness(monitor.brightness());
}
}
}
}
void BrightnessSettings::requestConfirmation()
{
QMessageBox msg{QMessageBox::Question, tr("Brightness settings changed")
, tr("Confirmation required. Are the settings correct?")
, QMessageBox::Yes | QMessageBox::No};
int timeout = 5; // seconds
QString no_text = msg.button(QMessageBox::No)->text();
no_text += QStringLiteral("(%1)");
msg.setButtonText(QMessageBox::No, no_text.arg(timeout));
msg.setDefaultButton(QMessageBox::No);
QTimer timeoutTimer;
timeoutTimer.setSingleShot(false);
timeoutTimer.setInterval(1000);
connect(&timeoutTimer, &QTimer::timeout, [&] {
msg.setButtonText(QMessageBox::No, no_text.arg(--timeout));
if (timeout == 0)
{
timeoutTimer.stop();
msg.reject();
}
});
timeoutTimer.start();
if (QMessageBox::Yes == msg.exec())
{
// re-read current values
mMonitors = mBrightness->getMonitorsInfo();
} else
{
// revert the changes
mBrightness->setMonitorsSettings(mMonitors);
for (const auto & monitor : mMonitors)
emit monitorReverted(monitor);
}
}