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 }