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

0001 /*
0002  *  SPDX-FileCopyrightText: 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisHairyBristleOptionWidget.h"
0007 
0008 #include <lager/constant.hpp>
0009 #include "ui_wdgbristleoptions.h"
0010 
0011 #include "KisHairyBristleOptionModel.h"
0012 
0013 #include <KisSpinBoxI18nHelper.h>
0014 #include <kis_paintop_lod_limitations.h>
0015 
0016 namespace {
0017 
0018 
0019 class KisBristleOptionsWidget: public QWidget, public Ui::WdgBristleOptions
0020 {
0021 public:
0022     KisBristleOptionsWidget(QWidget *parent = 0)
0023         : QWidget(parent) {
0024         setupUi(this);
0025 
0026         scaleBox->setRange(-10.0, 10.0, 2);
0027         scaleBox->setSingleStep(0.01);
0028 
0029         rndBox->setRange(-10.0, 10.0, 2);
0030         rndBox->setSingleStep(0.01);
0031 
0032         shearBox->setRange(-2.0, 2.0, 2);
0033         shearBox->setSingleStep(0.01);
0034 
0035         densityBox->setRange(0.0, 100.0, 0);
0036         KisSpinBoxI18nHelper::setText(densityBox, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0037     }
0038 };
0039 
0040 
0041 }
0042 
0043 
0044 struct KisHairyBristleOptionWidget::Private
0045 {
0046     Private(lager::cursor<KisHairyBristleOptionData> optionData)
0047         : model(optionData)
0048     {
0049     }
0050 
0051     KisHairyBristleOptionModel model;
0052 };
0053 
0054 
0055 KisHairyBristleOptionWidget::KisHairyBristleOptionWidget(lager::cursor<KisHairyBristleOptionData> optionData)
0056     : KisPaintOpOption(i18n("Bristle options"), KisPaintOpOption::GENERAL, true)
0057     , m_d(new Private(optionData))
0058 {
0059     KisBristleOptionsWidget *widget = new KisBristleOptionsWidget();
0060     setObjectName("KisHairyBristleOption");
0061 
0062     m_checkable = false;
0063 
0064     using namespace KisWidgetConnectionUtils;
0065 
0066     connectControl(widget->mousePressureCBox, &m_d->model, "useMousePressure");
0067     connectControl(widget->thresholdCBox, &m_d->model, "threshold");
0068     connectControl(widget->scaleBox, &m_d->model, "scaleFactor");
0069     connectControl(widget->rndBox, &m_d->model, "randomFactor");
0070     connectControl(widget->shearBox, &m_d->model, "shearFactor");
0071     connectControl(widget->densityBox, &m_d->model, "densityFactor");
0072     connectControl(widget->connectedCBox, &m_d->model, "connectedPath");
0073     connectControl(widget->antialiasCBox, &m_d->model, "antialias");
0074     connectControl(widget->compositingCBox, &m_d->model, "useCompositing");
0075 
0076     m_d->model.optionData.bind(std::bind(&KisHairyBristleOptionWidget::emitSettingChanged, this));
0077 
0078     setConfigurationPage(widget);
0079 }
0080 
0081 KisHairyBristleOptionWidget::~KisHairyBristleOptionWidget()
0082 {
0083 }
0084 
0085 void KisHairyBristleOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0086 {
0087     KisHairyBristleOptionData data = *m_d->model.optionData;
0088     data.write(setting.data());
0089 }
0090 
0091 void KisHairyBristleOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0092 {
0093     KisHairyBristleOptionData data = *m_d->model.optionData;
0094     data.read(setting.data());
0095     m_d->model.optionData.set(data);
0096 }