Krita Source Code Documentation
Loading...
Searching...
No Matches
KisCurveWidgetConnectionHelper.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2022 Freya Lupen <penguinflyer2222@gmail.com>
3 *
4 * SPDX-License-Identifier: GPL-2.0-or-later
5 */
7
8#include <QMetaProperty>
9#include "kis_debug.h"
10
11#include "kis_cubic_curve.h"
12#include "kis_curve_widget.h"
13
14
15namespace {
16class ConnectCurveWidgetHelper : public QObject
17{
18 Q_OBJECT
19public:
20
21 ConnectCurveWidgetHelper(KisCurveWidget *parent)
22 : QObject(parent),
23 m_curveWidget(parent)
24 {
26 this, &ConnectCurveWidgetHelper::slotWidgetChanged);
27 }
28public Q_SLOTS:
29 void slotWidgetChanged() {
30 Q_EMIT sigWidgetChanged(m_curveWidget->curve().toString());
31 }
32
33 void slotPropertyChanged(const QString &curve) {
34 m_curveWidget->setCurve(curve);
35 }
36
37Q_SIGNALS:
38 void sigWidgetChanged(const QString &curve);
39
40private:
41 KisCurveWidget *m_curveWidget;
42};
43}
44
46{
47
48void connectControl(KisCurveWidget *widget, QObject *source, const char *property)
49{
50 const QMetaObject* meta = source->metaObject();
51 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
52
53 KIS_SAFE_ASSERT_RECOVER_RETURN(prop.hasNotifySignal());
54
55 QMetaMethod signal = prop.notifySignal();
56
57 KIS_SAFE_ASSERT_RECOVER_RETURN(signal.parameterCount() >= 1);
58 KIS_SAFE_ASSERT_RECOVER_RETURN(signal.parameterType(0) == QMetaType::type("QString"));
59
60 ConnectCurveWidgetHelper *helper = new ConnectCurveWidgetHelper(widget);
61
62 const QMetaObject* dstMeta = helper->metaObject();
63
64 QMetaMethod updateSlot = dstMeta->method(
65 dstMeta->indexOfSlot("slotPropertyChanged(QString)"));
66 QObject::connect(source, signal, helper, updateSlot);
67
68 helper->slotPropertyChanged(prop.read(source).toString());
69
70 if (prop.isWritable()) {
71 QObject::connect(helper, &ConnectCurveWidgetHelper::sigWidgetChanged,
72 source, [prop, source] (const QString &value) { prop.write(source, value); });
73 }
74}
75
76}
77
78#include "KisCurveWidgetConnectionHelper.moc"
float value(const T *src, size_t ch)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
connect(this, SIGNAL(optionsChanged()), this, SLOT(saveOptions()))
void curveChanged(const KisCubicCurve &)
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
Definition kis_assert.h:128
ChildIterator< value_type, is_const > parent(const ChildIterator< value_type, is_const > &it)
Definition KisForest.h:327
void connectControl(KisCompositeOpListWidget *widget, QObject *source, const char *property)