10#include <QMetaProperty>
11#include <QAbstractButton>
14#include <QButtonGroup>
16#include <QDoubleSpinBox>
32#define SANITY_CHECK_PROPERTY_EXISTS(prop) Q_ASSERT(prop.isValid())
33#define SANITY_CHECK_PROPERTY_EXISTS_AND_WRITABLE(prop) do { Q_ASSERT(prop.isValid()); Q_ASSERT(prop.isWritable()); } while (0)
34#define SANITY_CHECK_PROPERTY_METATYPE_REGISTERED(prop) do { \
35 const int metaTypeId = QMetaType::type(prop.typeName()); \
36 if (metaTypeId <= 0) { \
37 qWarning().nospace() << "WARNING: metatype for property \"" << prop.name() << "\" is not register. Please register type \"" << prop.typeName() << "\""; \
39 Q_ASSERT(metaTypeId > 0); \
40 Q_ASSERT(QMetaType::isRegistered(metaTypeId)); \
98template<
typename Button>
101 const QMetaObject* meta =
source->metaObject();
102 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
107 QMetaMethod signal = prop.notifySignal();
112 const QMetaObject* dstMeta =
button->metaObject();
114 QMetaMethod updateSlot = dstMeta->method(
115 dstMeta->indexOfSlot(
"setChecked(bool)"));
120 if (prop.isWritable()) {
121 QObject::connect(
button, &Button::toggled,
143 const QMetaObject* meta =
source->metaObject();
144 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
149 QMetaMethod signal = prop.notifySignal();
154 const QMetaObject* dstMeta = spinBox->metaObject();
156 QMetaMethod updateSlot = dstMeta->method(
157 dstMeta->indexOfSlot(
"setValue(int)"));
158 QObject::connect(
source, signal, spinBox, updateSlot);
160 spinBox->setValue(prop.read(
source).toInt());
162 if (prop.isWritable()) {
163 QObject::connect(spinBox, qOverload<int>(&QSpinBox::valueChanged),
170 const QMetaObject* meta =
source->metaObject();
171 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
176 QMetaMethod signal = prop.notifySignal();
181 const QMetaObject* dstMeta = slider->metaObject();
183 QMetaMethod updateSlot = dstMeta->method(
184 dstMeta->indexOfSlot(
"setValue(int)"));
185 QObject::connect(
source, signal, slider, updateSlot);
187 slider->setValue(prop.read(
source).toInt());
189 if (prop.isWritable()) {
190 QObject::connect(slider, qOverload<int>(&QSlider::valueChanged),
197 const QMetaObject* meta =
source->metaObject();
198 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
203 QMetaMethod signal = prop.notifySignal();
208 const QMetaObject* dstMeta = spinBox->metaObject();
210 QMetaMethod updateSlot = dstMeta->method(
211 dstMeta->indexOfSlot(
"setValue(qreal)"));
212 QObject::connect(
source, signal, spinBox, updateSlot);
214 spinBox->setValue(prop.read(
source).toReal());
216 if (prop.isWritable()) {
217 QObject::connect(spinBox, qOverload<qreal>(&QDoubleSpinBox::valueChanged),
248 const QMetaObject* meta =
source->metaObject();
249 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStateProperty));
254 QMetaMethod signal = readStateProp.notifySignal();
261 const QMetaObject* dstMeta = helper->metaObject();
263 QMetaMethod updateSlot = dstMeta->method(
264 dstMeta->indexOfSlot(
"setState(IntSpinBoxState)"));
265 QObject::connect(
source, signal, helper, updateSlot);
269 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writeProperty));
271 if (writeProp.isWritable()) {
272 QObject::connect(spinBox, qOverload<int>(&QSpinBox::valueChanged),
303 const QMetaObject* meta =
source->metaObject();
304 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStateProperty));
309 QMetaMethod signal = readStateProp.notifySignal();
316 const QMetaObject* dstMeta = helper->metaObject();
318 QMetaMethod updateSlot = dstMeta->method(
319 dstMeta->indexOfSlot(
"setState(DoubleSpinBoxState)"));
320 QObject::connect(
source, signal, helper, updateSlot);
324 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writeProperty));
326 if (writeProp.isWritable()) {
327 QObject::connect(spinBox, qOverload<qreal>(&QDoubleSpinBox::valueChanged),
335 const QMetaObject* meta =
source->metaObject();
336 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
341 QMetaMethod signal = prop.notifySignal();
346 const QMetaObject* dstMeta = spinBox->metaObject();
348 QMetaMethod updateSlot = dstMeta->method(
349 dstMeta->indexOfSlot(
"setValue(qreal)"));
350 QObject::connect(
source, signal, spinBox, updateSlot);
354 if (prop.isWritable()) {
376 btn->setChecked(
true);
382 btn->setChecked(
true);
385 btn->setEnabled(state.
enabled);
406 const QMetaObject* meta =
source->metaObject();
407 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
412 QMetaMethod signal = prop.notifySignal();
420 const QMetaObject* dstMeta = helper->metaObject();
422 QMetaMethod updateSlot = dstMeta->method(
423 dstMeta->indexOfSlot(
"updateState(int)"));
424 QObject::connect(
source, signal, helper, updateSlot);
428 if (prop.isWritable()) {
436 const QMetaObject* meta =
source->metaObject();
437 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStateProperty));
442 QMetaMethod signal = readStateProp.notifySignal();
449 const QMetaObject* dstMeta = helper->metaObject();
451 QMetaMethod updateSlot = dstMeta->method(
452 dstMeta->indexOfSlot(
"updateState(ButtonGroupState)"));
453 QObject::connect(
source, signal, helper, updateSlot);
457 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writeProperty));
460 if (writeProp.isWritable()) {
468 const QMetaObject* meta =
source->metaObject();
469 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStatePropertyName));
474 QMetaMethod signal = readStateProp.notifySignal();
481 const QMetaObject* dstMeta = helper->metaObject();
483 QMetaMethod updateSlot = dstMeta->method(
484 dstMeta->indexOfSlot(
"updateState(CheckBoxState)"));
485 QObject::connect(
source, signal, helper, updateSlot);
489 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writePropertyName));
491 if (writeProp.isWritable()) {
500 const QMetaObject* meta =
source->metaObject();
501 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStatePropertyName));
506 QMetaMethod signal = readStateProp.notifySignal();
513 const QMetaObject* dstMeta = helper->metaObject();
515 QMetaMethod updateSlot = dstMeta->method(
516 dstMeta->indexOfSlot(
"updateState(ComboBoxState)"));
517 QObject::connect(
source, signal, helper, updateSlot);
521 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writePropertyName));
531 if (writeProp.isWritable()) {
532 QObject::connect(
button, qOverload<int>(&QComboBox::currentIndexChanged),
539 const QMetaObject* meta =
source->metaObject();
540 QMetaProperty stateProp = meta->property(meta->indexOfProperty(property));
545 QMetaMethod signal = stateProp.notifySignal();
550 const QMetaObject* dstMeta =
button->metaObject();
552 QMetaMethod updateSlot = dstMeta->method(
553 dstMeta->indexOfSlot(
"setCurrentIndex(int)"));
556 button->setCurrentIndex(stateProp.read(
source).value<
int>());
558 if (stateProp.isWritable()) {
561 QObject::connect(
button, qOverload<int>(&QComboBox::currentIndexChanged),
597 const QMetaObject* meta =
source->metaObject();
598 QMetaProperty stateProp = meta->property(meta->indexOfProperty(property));
603 QMetaMethod signal = stateProp.notifySignal();
610 const QMetaObject* dstMeta = helper->metaObject();
612 QMetaMethod updateSlot = dstMeta->method(
613 dstMeta->indexOfSlot(
"slotPropertyChanged(SpacingState)"));
614 QObject::connect(
source, signal, helper, updateSlot);
618 if (stateProp.isWritable()) {
626 const QMetaObject* meta =
source->metaObject();
627 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
632 QMetaMethod signal = prop.notifySignal();
637 const QMetaObject* dstMeta = widget->metaObject();
639 QMetaMethod updateSlot = dstMeta->method(
640 dstMeta->indexOfSlot(
"setAngle(qreal)"));
641 QObject::connect(
source, signal, widget, updateSlot);
645 if (prop.isWritable()) {
653 const QMetaObject* meta =
source->metaObject();
654 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
659 QMetaMethod signal = prop.notifySignal();
664 const QMetaObject* dstMeta = widget->metaObject();
666 QMetaMethod updateSlot = dstMeta->method(
667 dstMeta->indexOfSlot(
"setText(QString)"));
668 QObject::connect(
source, signal, widget, updateSlot);
670 widget->setText(prop.read(
source).toString());
672 if (prop.isWritable()) {
673 QObject::connect(widget, &QLineEdit::textChanged,
680 const QMetaObject* meta =
source->metaObject();
681 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
686 QMetaMethod signal = prop.notifySignal();
691 const QMetaObject* dstMeta = widget->metaObject();
693 QMetaMethod updateSlot = dstMeta->method(
694 dstMeta->indexOfSlot(
"setFileName(QString)"));
695 QObject::connect(
source, signal, widget, updateSlot);
699 if (prop.isWritable()) {
708 const QMetaObject* meta =
source->metaObject();
709 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
714 QMetaMethod signal = prop.notifySignal();
719 const QMetaObject* dstMeta = widget->metaObject();
721 QMetaMethod updateSlot = dstMeta->method(
722 dstMeta->indexOfSlot(
"setColor(KoColor)"));
723 QObject::connect(
source, signal, widget, updateSlot);
727 if (prop.isWritable()) {
730 prop.write(
source, QVariant::fromValue(
value)); });
736 const QMetaObject* meta =
source->metaObject();
737 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
742 QMetaMethod signal = prop.notifySignal();
744 const QMetaObject* dstMeta = widget->metaObject();
746 QMetaMethod updateSlot = dstMeta->method(
747 dstMeta->indexOfSlot(
"setVisible(bool)"));
749 QObject::connect(
source, signal, widget, updateSlot);
750 widget->setVisible(prop.read(
source).toBool());
755 const QMetaObject* meta =
source->metaObject();
756 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
761 QMetaMethod signal = prop.notifySignal();
763 const QMetaObject* dstMeta = widget->metaObject();
765 QMetaMethod updateSlot = dstMeta->method(
766 dstMeta->indexOfSlot(
"setEnabled(bool)"));
768 QObject::connect(
source, signal, widget, updateSlot);
769 widget->setEnabled(prop.read(
source).toBool());
774#include <KisWidgetConnectionUtils.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()))
ConnectComboBoxStateHelper(QComboBox *parent)
void updateState(const ComboBoxState &state)
A widget with several options to select an angle.
void setAngle(qreal newAngle)
Sets the current angle.
void angleChanged(qreal angle)
void textChanged(const QString &fileName)
void setFileName(const QString &path)
void valueChanged(qreal value)
void setValue(qreal value)
Set the value, don't use setValue()
#define KIS_SAFE_ASSERT_RECOVER_RETURN(cond)
QString button(const QWheelEvent &ev)