File indexing completed on 2024-05-12 04:33:22

0001 /*
0002  * SPDX-FileCopyrightText: 2007-2011 Kare Sars <kare.sars@iki .fi>
0003  * SPDX-FileCopyrightText: 2014 Gregor Mitsch : port to KDE5 frameworks
0004  *
0005  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006  */
0007 
0008 // Local includes
0009 #include "labeledgamma.h"
0010 
0011 #include <QGroupBox>
0012 
0013 #include <KLocalizedString>
0014 #include <KSaneCore/Option>
0015 
0016 namespace KSaneIface
0017 {
0018 
0019 LabeledGamma::LabeledGamma(QWidget *parent, const QString &text, int max)
0020     : KSaneOptionWidget(parent, text)
0021 {
0022     initGamma(text, max);
0023 }
0024 
0025 LabeledGamma::LabeledGamma(QWidget *parent, KSaneCore::Option *option, QColor color)
0026     : KSaneOptionWidget(parent, option)
0027 {
0028 
0029     int max = option->maximumValue().toInt();
0030     initGamma(option->title(), max);
0031     connect(this, &LabeledGamma::valuesChanged, option, &KSaneCore::Option::setValue);
0032     connect(option, &KSaneCore::Option::valueChanged, this, &LabeledGamma::setValues);
0033     setColor(color);
0034     setToolTip(option->description());
0035 }
0036 
0037 LabeledGamma::~LabeledGamma()
0038 {
0039 }
0040 
0041 void LabeledGamma::initGamma(QString text, int max)
0042 {
0043     m_brightSlider = new LabeledSlider(this, i18n("Brightness"), -50, 50, 1);
0044     m_brightSlider->setValue(0);
0045 
0046     m_contrastSlider = new LabeledSlider(this, i18n("Contrast"), -50, 50, 1);
0047     m_contrastSlider->setValue(0);
0048 
0049     m_gammaSlider = new LabeledSlider(this, i18n("Gamma"), 30, 300, 1);
0050     m_gammaSlider->setValue(100);
0051 
0052     // Calculate the size of the widgets in the sliders
0053     int labelMax = m_brightSlider->labelWidthHint();
0054     labelMax = qMax(labelMax, m_contrastSlider->labelWidthHint());
0055     labelMax = qMax(labelMax, m_gammaSlider->labelWidthHint());
0056     // set the calculated widths
0057     m_brightSlider->setLabelWidth(labelMax);
0058     m_contrastSlider->setLabelWidth(labelMax);
0059     m_gammaSlider->setLabelWidth(labelMax);
0060 
0061     m_maxValue = max;
0062 
0063     m_gammaDisplay = new GammaDisp(this, &m_brightness, &m_contrast, &m_gamma, max);
0064 
0065     QGroupBox *groupBox = new QGroupBox(text, this);
0066     QGridLayout *gr_lay = new QGridLayout(groupBox);
0067 
0068     gr_lay->addWidget(m_brightSlider, 0, 0);
0069     gr_lay->addWidget(m_contrastSlider, 1, 0);
0070     gr_lay->addWidget(m_gammaSlider, 2, 0);
0071     gr_lay->addWidget(m_gammaDisplay, 0, 1, 3, 1);
0072 
0073     m_label->hide();
0074     m_layout->addWidget(groupBox, 1, 0, 1, 3);
0075 
0076     connect(m_brightSlider, &LabeledSlider::valueChanged, this, &LabeledGamma::emitNewValues);
0077     connect(m_contrastSlider, &LabeledSlider::valueChanged, this, &LabeledGamma::emitNewValues);
0078     connect(m_gammaSlider, &LabeledSlider::valueChanged, this, &LabeledGamma::emitNewValues);
0079 
0080     emitNewValues();
0081 }
0082 
0083 void LabeledGamma::setColor(const QColor &color)
0084 {
0085     if (m_gammaDisplay != nullptr) {
0086         m_gammaDisplay->setColor(color);
0087     }
0088 }
0089 
0090 void LabeledGamma::setValues(const QVariant &values)
0091 {
0092     if (static_cast<QMetaType::Type>(values.type()) == QMetaType::QVariantList) {
0093         QVariantList copy = values.toList();
0094         if (copy.size() != 3) {
0095             return;
0096         }
0097 
0098         m_brightSlider->blockSignals(true);
0099         m_contrastSlider->blockSignals(true);
0100         m_gammaSlider->blockSignals(true);
0101 
0102         m_brightness = copy.at(0).toInt();
0103         m_contrast = copy.at(1).toInt();
0104         m_gamma = copy.at(2).toInt();
0105 
0106         m_brightSlider->setValue(m_brightness);
0107         m_contrastSlider->setValue(m_contrast);
0108         m_gammaSlider->setValue(m_gamma);
0109 
0110         emitNewValues();
0111 
0112         m_brightSlider->blockSignals(false);
0113         m_contrastSlider->blockSignals(false);
0114         m_gammaSlider->blockSignals(false);
0115     }
0116 }
0117 
0118 void LabeledGamma::emitNewValues()
0119 {
0120     m_brightness = m_brightSlider->value();
0121     m_contrast = m_contrastSlider->value();
0122     m_gamma = m_gammaSlider->value();
0123     QVariantList values = { m_brightness, m_contrast, m_gamma };
0124 
0125     m_gammaDisplay->update();
0126     Q_EMIT valuesChanged(QVariant::fromValue(values));
0127 }
0128 
0129 bool LabeledGamma::getValues(int &brightness, int &contrast, int &gamma)
0130 {
0131     brightness = m_brightSlider->value();
0132     contrast = m_contrastSlider->value();
0133     gamma = m_gammaSlider->value();
0134     return true;
0135 }
0136 
0137 int LabeledGamma::maxValue()
0138 {
0139     return m_maxValue;
0140 }
0141 
0142 }  // NameSpace KSaneIface
0143 
0144 #include "moc_labeledgamma.cpp"