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

0001 /*
0002  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisDeformOptionWidget.h"
0007 
0008 #include <QButtonGroup>
0009 
0010 #include <lager/constant.hpp>
0011 #include "ui_wdgdeformoptions.h"
0012 
0013 #include "KisDeformOptionModel.h"
0014 
0015 namespace {
0016 
0017 
0018 class KisDeformOptionsWidget: public QWidget, public Ui::WdgDeformOptions
0019 {
0020 public:
0021     KisDeformOptionsWidget(QWidget *parent = 0)
0022         : QWidget(parent) {
0023         setupUi(this);
0024 
0025         deformAmount->setRange(0.0, 1.0, 2);
0026         deformAmount->setSingleStep(0.01);
0027     }
0028 };
0029 
0030 
0031 }
0032 
0033 
0034 struct KisDeformOptionWidget::Private
0035 {
0036     Private(lager::cursor<KisDeformOptionData> optionData)
0037         : model(optionData)
0038     {
0039     }
0040 
0041     KisDeformOptionModel model;
0042 };
0043 
0044 
0045 KisDeformOptionWidget::KisDeformOptionWidget(lager::cursor<KisDeformOptionData> optionData)
0046     : KisPaintOpOption(i18n("Deform Options"), KisPaintOpOption::COLOR, true)
0047     , m_d(new Private(optionData))
0048 {
0049     KisDeformOptionsWidget *widget = new KisDeformOptionsWidget();
0050     setObjectName("KisDeformOption");
0051 
0052     m_checkable = false;
0053 
0054     using namespace KisWidgetConnectionUtils;
0055 
0056     connectControl(widget->deformAmount, &m_d->model, "deformAmount");
0057     connectControl(widget->interpolationChBox, &m_d->model, "deformUseBilinear");
0058     connectControl(widget->useCounter, &m_d->model, "deformUseCounter");
0059     connectControl(widget->useOldData, &m_d->model, "deformUseOldData");
0060 
0061     QButtonGroup *group = new QButtonGroup(widget);
0062     group->addButton(widget->growBtn, static_cast<int>(DeformModes::GROW));
0063     group->addButton(widget->shrinkBtn, static_cast<int>(DeformModes::SHRINK));
0064     group->addButton(widget->swirlCWBtn, static_cast<int>(DeformModes::SWIRL_CW));
0065     group->addButton(widget->swirlCCWBtn, static_cast<int>(DeformModes::SWIRL_CCW));
0066     group->addButton(widget->moveBtn, static_cast<int>(DeformModes::MOVE));
0067     group->addButton(widget->lensBtn, static_cast<int>(DeformModes::LENS_IN));
0068     group->addButton(widget->lensOutBtn, static_cast<int>(DeformModes::LENS_OUT));
0069     group->addButton(widget->colorBtn, static_cast<int>(DeformModes::DEFORM_COLOR));
0070     group->setExclusive(true);
0071     connectControl(group, &m_d->model, "deformAction");
0072 
0073     m_d->model.optionData.bind(std::bind(&KisDeformOptionWidget::emitSettingChanged, this));
0074 
0075     setConfigurationPage(widget);
0076 }
0077 
0078 KisDeformOptionWidget::~KisDeformOptionWidget()
0079 {
0080 }
0081 
0082 void KisDeformOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0083 {
0084     KisDeformOptionData data = *m_d->model.optionData;
0085     data.write(setting.data());
0086 }
0087 
0088 void KisDeformOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0089 {
0090     KisDeformOptionData data = *m_d->model.optionData;
0091     data.read(setting.data());
0092     m_d->model.optionData.set(data);
0093 }