File indexing completed on 2024-05-26 04:33:55

0001 /*
0002  *  SPDX-FileCopyrightText: 2009, 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisBrushSizeOptionWidget.h"
0007 
0008 #include <lager/constant.hpp>
0009 #include "ui_wdgBrushSizeOptions.h"
0010 
0011 #include <KisSpinBoxI18nHelper.h>
0012 #include "KisBrushSizeOptionModel.h"
0013 
0014 namespace {
0015 
0016 
0017 class KisBrushSizeOptionsWidget: public QWidget, public Ui::WdgBrushSizeOptions
0018 {
0019 public:
0020     KisBrushSizeOptionsWidget(QWidget *parent = 0)
0021         : QWidget(parent) {
0022         setupUi(this);
0023 
0024         diameter->setRange(1.0, 1000, 0);
0025         diameter->setExponentRatio(3.0);
0026         diameter->setSuffix(i18n(" px"));
0027 
0028         aspectBox->setRange(0.01, 2.0, 2);
0029         aspectBox->setSingleStep(0.01);
0030         aspectBox->setExponentRatio(1.0);
0031 
0032 
0033         scale->setRange(0.01, 10.0, 2);
0034         scale->setSingleStep(0.01);
0035 
0036         spacing->setRange(0.01, 5.0, 2);
0037         spacing->setSingleStep(0.01);
0038 
0039 
0040         rotationBox->setDecimals(0);
0041 
0042 
0043         densityBox->setRange(0.0, 100.0, 0);
0044         KisSpinBoxI18nHelper::setText(densityBox, i18nc("{n} is the number value, % is the percent sign", "{n}%"));
0045 
0046         jitterMove->setRange(0.0, 5.0, 2);
0047         jitterMove->setSingleStep(0.01);
0048     }
0049 };
0050 
0051 
0052 }
0053 
0054 
0055 struct KisBrushSizeOptionWidget::Private
0056 {
0057     Private(lager::cursor<KisBrushSizeOptionData> optionData)
0058         : model(optionData)
0059     {
0060     }
0061 
0062     KisBrushSizeOptionModel model;
0063 };
0064 
0065 
0066 KisBrushSizeOptionWidget::KisBrushSizeOptionWidget(lager::cursor<KisBrushSizeOptionData> optionData)
0067     : KisPaintOpOption(i18n("Brush size"), KisPaintOpOption::GENERAL, true)
0068     , m_d(new Private(optionData))
0069 {
0070     KisBrushSizeOptionsWidget *widget = new KisBrushSizeOptionsWidget();
0071     setObjectName("KisBrushSizeOption");
0072 
0073     m_checkable = false;
0074 
0075     using namespace KisWidgetConnectionUtils;
0076 
0077     connectControl(widget->diameter, &m_d->model, "brushDiameter");
0078     connectControl(widget->scale, &m_d->model, "brushScale");
0079     connectControl(widget->aspectBox, &m_d->model, "brushAspect");
0080     connectControl(widget->spacing, &m_d->model, "brushSpacing");
0081     connectControl(widget->rotationBox, &m_d->model, "brushRotation");
0082     connectControl(widget->densityBox, &m_d->model, "brushDensity");
0083     connectControl(widget->jitterMove, &m_d->model, "brushJitterMovement");
0084     connectControl(widget->jitterMoveBox, &m_d->model, "brushJitterMovementEnabled");
0085 
0086     connect(widget->jitterMoveBox, SIGNAL(toggled(bool)), widget->jitterMove, SLOT(setEnabled(bool)));
0087 
0088     m_d->model.optionData.bind(std::bind(&KisBrushSizeOptionWidget::emitSettingChanged, this));
0089 
0090     setConfigurationPage(widget);
0091 }
0092 
0093 KisBrushSizeOptionWidget::~KisBrushSizeOptionWidget()
0094 {
0095 }
0096 
0097 void KisBrushSizeOptionWidget::writeOptionSetting(KisPropertiesConfigurationSP setting) const
0098 {
0099     KisBrushSizeOptionData data = *m_d->model.optionData;
0100     data.write(setting.data());
0101 }
0102 
0103 void KisBrushSizeOptionWidget::readOptionSetting(const KisPropertiesConfigurationSP setting)
0104 {
0105     KisBrushSizeOptionData data = *m_d->model.optionData;
0106     data.read(setting.data());
0107     m_d->model.optionData.set(data);
0108 }