File indexing completed on 2024-05-26 04:33:55

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Agata Cacko <cacko.azh@gmail.com>
0003  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0004  * 
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 #include "KisExperimentOpOptionWidget.h"
0009 
0010 #include <QButtonGroup>
0011 
0012 #include <lager/constant.hpp>
0013 #include "ui_wdgexperimentoptions.h"
0014 
0015 #include "KisExperimentOpOptionModel.h"
0016 
0017 namespace {
0018 
0019 
0020 class KisExperimentOpWidget: public QWidget, public Ui::WdgExperimentOptions
0021 {
0022 public:
0023     KisExperimentOpWidget(QWidget *parent = 0)
0024         : QWidget(parent) {
0025         setupUi(this);
0026 
0027         speed->setRange(0.0, 100.0, 0);
0028         speed->setSuffix(QChar(Qt::Key_Percent));
0029         speed->setValue(42.0);
0030         speed->setSingleStep(1.0);
0031 
0032         smoothThreshold->setRange(0.0, 100.0, 0);
0033         smoothThreshold->setSuffix(i18n(" px"));
0034         smoothThreshold->setValue(20.0);
0035         smoothThreshold->setSingleStep(1.0);
0036 
0037         displaceStrength->setRange(0.0, 100.0, 0);
0038         displaceStrength->setSuffix(QChar(Qt::Key_Percent));
0039         displaceStrength->setValue(42.0);
0040         displaceStrength->setSingleStep(1.0);
0041     }
0042 };
0043 
0044 
0045 }
0046 
0047 
0048 struct KisExperimentOpOptionWidget::Private
0049 {
0050     Private(lager::cursor<KisExperimentOpOptionData> optionData)
0051         : model(optionData)
0052     {
0053     }
0054 
0055     KisExperimentOpOptionModel model;
0056 };
0057 
0058 
0059 KisExperimentOpOptionWidget::KisExperimentOpOptionWidget(lager::cursor<KisExperimentOpOptionData> optionData)
0060     : KisPaintOpOption(i18n("Experiment Option"), KisPaintOpOption::GENERAL, true)
0061     , m_d(new Private(optionData))
0062 {
0063     
0064     KisExperimentOpWidget *widget = new KisExperimentOpWidget();
0065     setObjectName("KisExperimentOpOption");
0066     
0067     m_checkable = false;
0068     
0069     using namespace KisWidgetConnectionUtils;
0070     connectControl(widget->displaceCHBox, &m_d->model, "isDisplacementEnabled");
0071     connectControl(widget->displaceStrength, &m_d->model, "displacement");
0072     
0073     connectControl(widget->speedCHBox, &m_d->model, "isSpeedEnabled");
0074     connectControl(widget->speed, &m_d->model, "speed");
0075     connectControl(widget->smoothCHBox, &m_d->model, "isSmoothingEnabled");
0076     connectControl(widget->smoothThreshold, &m_d->model, "smoothing");
0077 
0078     connectControl(widget->windingFillCHBox, &m_d->model, "windingFill");
0079     connectControl(widget->hardEdgeCHBox, &m_d->model, "hardEdge");
0080     
0081     QButtonGroup *group = new QButtonGroup(widget);
0082     group->addButton(widget->patternButton, static_cast<int>(ExperimentFillType::Pattern));
0083     group->addButton(widget->solidColorButton, static_cast<int>(ExperimentFillType::SolidColor));
0084     group->setExclusive(true);
0085     
0086     connectControl(group, &m_d->model, "fillType");
0087     
0088     m_d->model.optionData.bind(std::bind(&KisExperimentOpOptionWidget::emitSettingChanged, this));
0089     
0090     setConfigurationPage(widget);
0091 }
0092 
0093 KisExperimentOpOptionWidget::~KisExperimentOpOptionWidget()
0094 {
0095 }
0096 
0097 void KisExperimentOpOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0098 {
0099     KisExperimentOpOptionData data = *m_d->model.optionData;
0100     data.write(setting.data());
0101 }
0102 
0103 void KisExperimentOpOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0104 {
0105     KisExperimentOpOptionData data = *m_d->model.optionData;
0106     data.read(setting.data());
0107     m_d->model.optionData.set(data);
0108 }