Krita Source Code Documentation
Loading...
Searching...
No Matches
KisSprayShapeOptionWidget.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Agata Cacko <cacko.azh@gmail.com>
3 * SPDX-FileCopyrightText: 2008, 2009, 2010 Lukáš Tvrdý <lukast.dev@gmail.com>
4 *
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
9
10#include <QButtonGroup>
11#include <QMetaProperty>
12#include <QMetaMethod>
13
16
17#include <lager/constant.hpp>
18#include "ui_wdgsprayshapeoptions.h"
19#include "kis_signals_blocker.h"
20
22
23
24namespace {
25class KisShapeOptionsWidget: public QWidget, public Ui::WdgSprayShapeOptions
26{
27public:
28 KisShapeOptionsWidget(QWidget *parent = 0)
29 : QWidget(parent) {
30 setupUi(this);
32
33 //initialize slider values
34 widthSpin->setRange(1, 1000, 0);
35 widthSpin->setValue(6);
36 widthSpin->setSuffix(i18n(" px"));
37
38 heightSpin->setRange(1, 1000, 0);
39 heightSpin->setValue(6);
40 heightSpin->setSuffix(i18n(" px"));
41 }
42};
43}
44
46{
47 Private(lager::cursor<KisSprayShapeOptionData> optionData, lager::cursor<int> diameter, lager::cursor<qreal> scale)
48 : model(optionData, diameter, scale)
49 {
50 }
51
54 KisShapeOptionsWidget *widget;
55};
56
57KisSprayShapeOptionWidget::KisSprayShapeOptionWidget(lager::cursor<KisSprayShapeOptionData> optionData, lager::cursor<int> diameter, lager::cursor<qreal> scale)
58 : KisPaintOpOption(i18n("Spray Shape"), KisPaintOpOption::GENERAL, optionData[&KisSprayShapeOptionData::enabled])
59 , m_d(new Private(optionData, diameter, scale))
60{
61
62 KisShapeOptionsWidget *widget = new KisShapeOptionsWidget();
63 m_d->widget = widget;
64
65 setObjectName("KisSprayShapeOptionWidget");
66
67 m_checkable = true;
68
69 using namespace KisWidgetConnectionUtils;
70
71 m_d->sizeRatioLocker = new KisAspectRatioLocker(this);
72 m_d->sizeRatioLocker->connectSpinBoxes(widget->widthSpin, widget->heightSpin, widget->aspectButton);
73
74 connect(m_d->sizeRatioLocker, &KisAspectRatioLocker::sliderValueChanged, widget,
75 [this, widget] () {
76 m_d->model.seteffectiveSize(QSize(widget->widthSpin->value(), widget->heightSpin->value()));
77 });
78
79 m_d->model.LAGER_QT(effectiveSize).bind([this, widget] (QSize value) {
80 KisSignalsBlocker b(widget->widthSpin);
81 KisSignalsBlocker b2(widget->heightSpin);
82
83 widget->widthSpin->setValue(value.width());
84 widget->heightSpin->setValue(value.height());
85
86 m_d->sizeRatioLocker->updateAspect();
87 });
88
89 connectControl(widget->shapeBox, &m_d->model, "shape");
90
91 connectControl(widget->proportionalBox, &m_d->model, "effectiveProportional");
92
93 connectControl(widget->imageUrlRequester, &m_d->model, "imageUrl");
94
95 m_d->widget->widthSpin->setSuffix(m_d->model.sizeSuffix());
96 m_d->widget->heightSpin->setSuffix(m_d->model.sizeSuffix());
97
98 connect(&m_d->model, &KisSprayShapeOptionModel::sizeSuffixChanged, m_d->widget->widthSpin, &KisDoubleSliderSpinBox::setSuffix);
99 connect(&m_d->model, &KisSprayShapeOptionModel::sizeSuffixChanged, m_d->widget->heightSpin, &KisDoubleSliderSpinBox::setSuffix);
100
101 m_d->model.optionData.bind(std::bind(&KisSprayShapeOptionWidget::emitSettingChanged, this));
102
103 setConfigurationPage(widget);
104}
105
109
111{
112 KisSprayShapeOptionData data = *m_d->model.optionData;
113 data.write(setting.data());
114}
115
117{
118 KisSprayShapeOptionData data = *m_d->model.optionData;
119 data.read(setting.data());
120 m_d->model.optionData.set(data);
121}
float value(const T *src, size_t ch)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
static QStringList supportedMimeTypes(Direction direction)
void setConfigurationPage(QWidget *page)
KisSprayShapeOptionWidget(lager::cursor< KisSprayShapeOptionData > optionData, lager::cursor< int > diameter, lager::cursor< qreal > scale)
void readOptionSetting(const KisPropertiesConfigurationSP setting) override
void writeOptionSetting(KisPropertiesConfigurationSP setting) const override
const QScopedPointer< Private > m_d
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327
@ GENERAL
Definition nugrid.h:26
void write(KisPropertiesConfiguration *setting) const
bool read(const KisPropertiesConfiguration *setting)
Private(lager::cursor< KisSprayShapeOptionData > optionData, lager::cursor< int > diameter, lager::cursor< qreal > scale)