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

0001 /*
0002  *  SPDX-FileCopyrightText: 2022 Agata Cacko <cacko.azh@gmail.com>
0003  *  SPDX-FileCopyrightText: 2008, 2009, 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0004  * 
0005  *
0006  *  SPDX-License-Identifier: GPL-2.0-or-later
0007  */
0008 #include "KisSprayShapeDynamicsOptionWidget.h"
0009 
0010 #include <QButtonGroup>
0011 #include <QMetaProperty>
0012 #include <QMetaObject>
0013 
0014 
0015 
0016 #include <lager/constant.hpp>
0017 #include "ui_wdgshapedynamicsoptions.h"
0018 
0019 #include "KisSprayShapeDynamicsOptionModel.h"
0020 
0021 namespace {
0022 class KisShapeDynamicsOptionWidget: public QWidget, public Ui::WdgShapeDynamicsOptions
0023 {
0024 public:
0025     KisShapeDynamicsOptionWidget(QWidget *parent = 0)
0026         : QWidget(parent) {
0027         setupUi(this);
0028         
0029         drawingAngleWeight->setRange(0.0, 1.0, 2);
0030         drawingAngleWeight->setSingleStep(0.01);
0031         
0032         followCursorWeight->setRange(0.0, 1.0, 2);
0033         followCursorWeight->setSingleStep(0.01);
0034         
0035         randomAngleWeight->setRange(0.0, 1.0, 2);
0036         randomAngleWeight->setSingleStep(0.01);
0037         
0038         fixedAngleBox->setDecimals(0);
0039         fixedAngleBox->setIncreasingDirection(KisAngleGauge::IncreasingDirection_Clockwise);
0040     }
0041 };
0042 }
0043 
0044 struct KisSprayShapeDynamicsOptionWidget::Private
0045 {
0046     Private(lager::cursor<KisSprayShapeDynamicsOptionData> optionData)
0047         : model(optionData)
0048     {
0049     }
0050 
0051     KisSprayShapeDynamicsOptionModel model;
0052 };
0053 
0054 KisSprayShapeDynamicsOptionWidget::KisSprayShapeDynamicsOptionWidget(lager::cursor<KisSprayShapeDynamicsOptionData> optionData)
0055     : KisPaintOpOption(i18n("Shape dynamics"), KisPaintOpOption::GENERAL, optionData[&KisSprayShapeDynamicsOptionData::enabled])
0056     , m_d(new Private(optionData))
0057 {
0058     
0059     KisShapeDynamicsOptionWidget *widget = new KisShapeDynamicsOptionWidget();
0060     setObjectName("KisSprayShapeDynamicsOptionWidget");
0061     
0062     m_checkable = true;
0063     //m_checked = true;
0064     
0065     using namespace KisWidgetConnectionUtils;
0066     
0067     connectControl(widget->randomSizeCHBox, &m_d->model, "randomSize");
0068     
0069     connectControl(widget->fixedRotation, &m_d->model, "fixedRotation");
0070     connectControl(widget->randomRotation, &m_d->model, "randomRotation");
0071     connectControl(widget->followCursor, &m_d->model, "followCursor");
0072     connectControl(widget->drawingAngle, &m_d->model, "followDrawingAngle");
0073 
0074     connectControl(widget->fixedAngleBox, &m_d->model, "fixedAngle");
0075     connectControl(widget->randomAngleWeight, &m_d->model, "randomRotationWeight");
0076     connectControl(widget->followCursorWeight, &m_d->model, "followCursorWeight");
0077     connectControl(widget->drawingAngleWeight, &m_d->model, "followDrawingAngleWeight");
0078     
0079     
0080     widget->fixedAngleBox->setEnabled(m_d->model.fixedRotation());
0081     connect(&m_d->model, &KisSprayShapeDynamicsOptionModel::fixedRotationChanged, widget->fixedAngleBox, &KisAngleSelector::setEnabled);
0082     
0083     widget->randomAngleWeight->setEnabled(m_d->model.randomRotation());
0084     connect(&m_d->model, &KisSprayShapeDynamicsOptionModel::randomRotationChanged, widget->randomAngleWeight, &KisDoubleSliderSpinBox::setEnabled);
0085     
0086     widget->followCursorWeight->setEnabled(m_d->model.followCursor());
0087     connect(&m_d->model, &KisSprayShapeDynamicsOptionModel::followCursorChanged, widget->followCursorWeight, &KisDoubleSliderSpinBox::setEnabled);
0088     
0089     widget->drawingAngleWeight->setEnabled(m_d->model.followDrawingAngle());
0090     connect(&m_d->model, &KisSprayShapeDynamicsOptionModel::followDrawingAngleChanged, widget->drawingAngleWeight, &KisDoubleSliderSpinBox::setEnabled);
0091     
0092     
0093     m_d->model.optionData.bind(std::bind(&KisSprayShapeDynamicsOptionWidget::emitSettingChanged, this));
0094     
0095     setConfigurationPage(widget);
0096 }
0097 
0098 KisSprayShapeDynamicsOptionWidget::~KisSprayShapeDynamicsOptionWidget()
0099 {
0100 }
0101 
0102 void KisSprayShapeDynamicsOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0103 {
0104     KisSprayShapeDynamicsOptionData data = *m_d->model.optionData;
0105     data.write(setting.data());
0106 }
0107 
0108 void KisSprayShapeDynamicsOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0109 {
0110     KisSprayShapeDynamicsOptionData data = *m_d->model.optionData;
0111     data.read(setting.data());
0112     m_d->model.optionData.set(data);
0113 }