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

0001 /*
0002  *  SPDX-FileCopyrightText: 2008-2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisHairyInkOptionWidget.h"
0007 
0008 #include <lager/constant.hpp>
0009 #include "ui_wdgInkOptions.h"
0010 
0011 #include "KisHairyInkOptionModel.h"
0012 #include "KisCurveWidgetConnectionHelper.h"
0013 #include <KisSpinBoxI18nHelper.h>
0014 
0015 namespace {
0016 
0017 class KisInkOptionsWidget: public QWidget, public Ui::WdgInkOptions
0018 {
0019 public:
0020     KisInkOptionsWidget(QWidget *parent = 0)
0021         : QWidget(parent) {
0022         setupUi(this);
0023 
0024         pressureSlider->setRange(0, 100, 0);
0025         KisSpinBoxI18nHelper::setText(pressureSlider, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0026 
0027         bristleLengthSlider->setRange(0, 100, 0);
0028         KisSpinBoxI18nHelper::setText(bristleLengthSlider,
0029                                       i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0030 
0031         bristleInkAmountSlider->setRange(0, 100, 0);
0032         KisSpinBoxI18nHelper::setText(bristleInkAmountSlider,
0033                                       i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0034 
0035         inkDepletionSlider->setRange(0, 100, 0);
0036         KisSpinBoxI18nHelper::setText(inkDepletionSlider,
0037                                       i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0038     }
0039 };
0040 
0041 }
0042 
0043 
0044 struct KisHairyInkOptionWidget::Private
0045 {
0046     Private(lager::cursor<KisHairyInkOptionData> optionData)
0047         : model(optionData)
0048     {
0049     }
0050 
0051     KisHairyInkOptionModel model;
0052 };
0053 
0054 KisHairyInkOptionWidget::KisHairyInkOptionWidget(lager::cursor<KisHairyInkOptionData> optionData)
0055     : KisPaintOpOption(i18n("Ink depletion"), KisPaintOpOption::COLOR, optionData[&KisHairyInkOptionData::inkDepletionEnabled])
0056     , m_d(new Private(optionData))
0057 {
0058     KisInkOptionsWidget *widget = new KisInkOptionsWidget();
0059     setObjectName("KisHairyInkOption");
0060 
0061     using namespace KisWidgetConnectionUtils;
0062 
0063     connectControl(widget->inkAmountSpinBox,  &m_d->model, "inkAmount");
0064     connectControl(widget->saturationCBox, &m_d->model, "useSaturation");
0065     connectControl(widget->opacityCBox, &m_d->model, "useOpacity");
0066     connectControl(widget->useWeightCHBox, &m_d->model, "useWeights");
0067     connectControl(widget->pressureSlider, &m_d->model, "pressureWeight");
0068     connectControl(widget->bristleLengthSlider, &m_d->model, "bristleLengthWeight");
0069     connectControl(widget->bristleInkAmountSlider, &m_d->model, "bristleInkAmountWeight");
0070     connectControl(widget->inkDepletionSlider, &m_d->model, "inkDepletionWeight");
0071     connectControl(widget->inkCurve, &m_d->model, "inkDepletionCurve");
0072     connectControl(widget->soakInkCBox, &m_d->model, "useSoakInk");
0073 
0074     m_d->model.optionData.bind(std::bind(&KisHairyInkOptionWidget::emitSettingChanged, this));
0075 
0076     setConfigurationPage(widget);
0077 }
0078 
0079 KisHairyInkOptionWidget::~KisHairyInkOptionWidget()
0080 {
0081 }
0082 
0083 void KisHairyInkOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0084 {
0085     KisHairyInkOptionData data = *m_d->model.optionData;
0086     data.write(setting.data());
0087 }
0088 
0089 void KisHairyInkOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0090 {
0091     KisHairyInkOptionData data = *m_d->model.optionData;
0092     data.read(setting.data());
0093     m_d->model.optionData.set(data);
0094 }