File indexing completed on 2024-06-16 04:17:37

0001 /*
0002  * SPDX-FileCopyrightText: 2015 Wolthera van Hövell tot Westerflier <griffinvalley@gmail.com>
0003  * 
0004  *
0005  *  SPDX-License-Identifier: LGPL-2.0-or-later
0006  */
0007 #include "KisTangentTiltOptionWidget.h"
0008 
0009 #include <QButtonGroup>
0010 
0011 #include <lager/constant.hpp>
0012 #include "ui_wdgtangenttiltoption.h"
0013 
0014 #include "KisTangentTiltOptionModel.h"
0015 #include <KisSpinBoxI18nHelper.h>
0016 
0017 namespace {
0018 
0019 
0020 class KisTangentTiltWidget: public QWidget, public Ui::WdgTangentTiltOptions
0021 {
0022 public:
0023     KisTangentTiltWidget(QWidget *parent = 0)
0024         : QWidget(parent) {
0025         setupUi(this);
0026 
0027         sliderElevationSensitivity->setRange(0, 100, 0);
0028         KisSpinBoxI18nHelper::setText(sliderElevationSensitivity,
0029                                       i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0030 
0031         sliderMixValue->setRange(0, 100, 0);
0032         KisSpinBoxI18nHelper::setText(sliderMixValue, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0033 
0034         sliderMixValue->setVisible(false);
0035     }
0036 };
0037 
0038 
0039 }
0040 
0041 
0042 struct KisTangentTiltOptionWidget::Private
0043 {
0044     Private(lager::cursor<KisTangentTiltOptionData> optionData)
0045         : model(optionData)
0046     {
0047     }
0048 
0049     KisTangentTiltOptionModel model;
0050 };
0051 
0052 
0053 KisTangentTiltOptionWidget::KisTangentTiltOptionWidget(lager::cursor<KisTangentTiltOptionData> optionData)
0054     : KisPaintOpOption(i18n("Tangent Tilt"), KisPaintOpOption::GENERAL, true)
0055     , m_d(new Private(optionData))
0056 {
0057     
0058     KisTangentTiltWidget *widget = new KisTangentTiltWidget();
0059     setObjectName("KisTangentTiltOption");
0060     
0061     m_checkable = false;
0062     
0063     using namespace KisWidgetConnectionUtils;
0064 
0065     connectControl(widget->comboRed, &m_d->model, "redChannel");
0066     connectControl(widget->comboGreen, &m_d->model, "greenChannel");
0067     connectControl(widget->comboBlue, &m_d->model, "blueChannel");
0068 
0069     connect(widget->comboRed, SIGNAL(currentIndexChanged(int)), widget->TangentTiltPreview, SLOT(setRedChannel(int)));
0070     connect(widget->comboGreen, SIGNAL(currentIndexChanged(int)), widget->TangentTiltPreview, SLOT(setGreenChannel(int)));
0071     connect(widget->comboBlue, SIGNAL(currentIndexChanged(int)), widget->TangentTiltPreview, SLOT(setBlueChannel(int)));
0072 
0073     QButtonGroup *group = new QButtonGroup(widget);
0074     group->addButton(widget->optionTilt, static_cast<int>(TangentTiltDirectionType::Tilt));
0075     group->addButton(widget->optionDirection, static_cast<int>(TangentTiltDirectionType::Direction));
0076     group->addButton(widget->optionRotation, static_cast<int>(TangentTiltDirectionType::Rotation));
0077     group->addButton(widget->optionMix, static_cast<int>(TangentTiltDirectionType::Mix));
0078     group->setExclusive(true);
0079     connectControl(group, &m_d->model, "directionType");
0080 
0081     connectControl(widget->sliderElevationSensitivity, &m_d->model, "elevationSensitivity");
0082     connectControl(widget->sliderMixValue, &m_d->model, "mixValue");
0083     
0084     m_d->model.optionData.bind(std::bind(&KisTangentTiltOptionWidget::emitSettingChanged, this));
0085     
0086     setConfigurationPage(widget);
0087 }
0088 
0089 KisTangentTiltOptionWidget::~KisTangentTiltOptionWidget()
0090 {
0091 }
0092 
0093 void KisTangentTiltOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0094 {
0095     KisTangentTiltOptionData data = *m_d->model.optionData;
0096     data.write(setting.data());
0097 }
0098 
0099 void KisTangentTiltOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0100 {
0101     KisTangentTiltOptionData data = *m_d->model.optionData;
0102     data.read(setting.data());
0103     m_d->model.optionData.set(data);
0104 }