10#include <QMetaProperty>
11#include <QAbstractButton>
14#include <QButtonGroup>
16#include <QDoubleSpinBox>
33#define SANITY_CHECK_PROPERTY_EXISTS(prop) Q_ASSERT(prop.isValid())
34#define SANITY_CHECK_PROPERTY_EXISTS_AND_WRITABLE(prop) do { Q_ASSERT(prop.isValid()); Q_ASSERT(prop.isWritable()); } while (0)
35#define SANITY_CHECK_PROPERTY_METATYPE_REGISTERED(prop) do { \
36 const int metaTypeId = QMetaType::type(prop.typeName()); \
37 if (metaTypeId <= 0) { \
38 qWarning().nospace() << "WARNING: metatype for property \"" << prop.name() << "\" is not register. Please register type \"" << prop.typeName() << "\""; \
40 Q_ASSERT(metaTypeId > 0); \
41 Q_ASSERT(QMetaType::isRegistered(metaTypeId)); \
122template<
typename Button>
125 const QMetaObject* meta =
source->metaObject();
126 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
131 QMetaMethod signal = prop.notifySignal();
136 const QMetaObject* dstMeta =
button->metaObject();
138 QMetaMethod updateSlot = dstMeta->method(
139 dstMeta->indexOfSlot(
"setChecked(bool)"));
144 if (prop.isWritable()) {
145 QObject::connect(
button, &Button::toggled,
172 const QMetaObject* meta =
source->metaObject();
173 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
178 QMetaMethod signal = prop.notifySignal();
183 const QMetaObject* dstMeta = spinBox->metaObject();
185 QMetaMethod updateSlot = dstMeta->method(
186 dstMeta->indexOfSlot(
"setValue(int)"));
187 QObject::connect(
source, signal, spinBox, updateSlot);
189 spinBox->setValue(prop.read(
source).toInt());
191 if (prop.isWritable()) {
192 QObject::connect(spinBox, qOverload<int>(&QSpinBox::valueChanged),
199 const QMetaObject* meta =
source->metaObject();
200 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
205 QMetaMethod signal = prop.notifySignal();
210 const QMetaObject* dstMeta = slider->metaObject();
212 QMetaMethod updateSlot = dstMeta->method(
213 dstMeta->indexOfSlot(
"setValue(int)"));
214 QObject::connect(
source, signal, slider, updateSlot);
216 slider->setValue(prop.read(
source).toInt());
218 if (prop.isWritable()) {
219 QObject::connect(slider, qOverload<int>(&QSlider::valueChanged),
226 const QMetaObject* meta =
source->metaObject();
227 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
232 QMetaMethod signal = prop.notifySignal();
237 const QMetaObject* dstMeta = spinBox->metaObject();
239 QMetaMethod updateSlot = dstMeta->method(
240 dstMeta->indexOfSlot(
"setValue(qreal)"));
241 QObject::connect(
source, signal, spinBox, updateSlot);
243 spinBox->setValue(prop.read(
source).toReal());
245 if (prop.isWritable()) {
246 QObject::connect(spinBox, qOverload<qreal>(&QDoubleSpinBox::valueChanged),
277 const QMetaObject* meta =
source->metaObject();
278 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStateProperty));
283 QMetaMethod signal = readStateProp.notifySignal();
290 const QMetaObject* dstMeta = helper->metaObject();
292 QMetaMethod updateSlot = dstMeta->method(
293 dstMeta->indexOfSlot(
"setState(IntSpinBoxState)"));
294 QObject::connect(
source, signal, helper, updateSlot);
298 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writeProperty));
300 if (writeProp.isWritable()) {
301 QObject::connect(spinBox, qOverload<int>(&QSpinBox::valueChanged),
332 const QMetaObject* meta =
source->metaObject();
333 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStateProperty));
338 QMetaMethod signal = readStateProp.notifySignal();
345 const QMetaObject* dstMeta = helper->metaObject();
347 QMetaMethod updateSlot = dstMeta->method(
348 dstMeta->indexOfSlot(
"setState(DoubleSpinBoxState)"));
349 QObject::connect(
source, signal, helper, updateSlot);
353 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writeProperty));
355 if (writeProp.isWritable()) {
356 QObject::connect(spinBox, qOverload<qreal>(&QDoubleSpinBox::valueChanged),
364 const QMetaObject* meta =
source->metaObject();
365 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
370 QMetaMethod signal = prop.notifySignal();
375 const QMetaObject* dstMeta = spinBox->metaObject();
377 QMetaMethod updateSlot = dstMeta->method(
378 dstMeta->indexOfSlot(
"setValue(qreal)"));
379 QObject::connect(
source, signal, spinBox, updateSlot);
383 if (prop.isWritable()) {
405 btn->setChecked(
true);
411 btn->setChecked(
true);
414 btn->setEnabled(state.
enabled);
435 const QMetaObject* meta =
source->metaObject();
436 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
441 QMetaMethod signal = prop.notifySignal();
449 const QMetaObject* dstMeta = helper->metaObject();
451 QMetaMethod updateSlot = dstMeta->method(
452 dstMeta->indexOfSlot(
"updateState(int)"));
453 QObject::connect(
source, signal, helper, updateSlot);
457 if (prop.isWritable()) {
465 const QMetaObject* meta =
source->metaObject();
466 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStateProperty));
471 QMetaMethod signal = readStateProp.notifySignal();
478 const QMetaObject* dstMeta = helper->metaObject();
480 QMetaMethod updateSlot = dstMeta->method(
481 dstMeta->indexOfSlot(
"updateState(ButtonGroupState)"));
482 QObject::connect(
source, signal, helper, updateSlot);
486 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writeProperty));
489 if (writeProp.isWritable()) {
497 const QMetaObject* meta =
source->metaObject();
498 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStatePropertyName));
503 QMetaMethod signal = readStateProp.notifySignal();
510 const QMetaObject* dstMeta = helper->metaObject();
512 QMetaMethod updateSlot = dstMeta->method(
513 dstMeta->indexOfSlot(
"updateState(CheckBoxState)"));
514 QObject::connect(
source, signal, helper, updateSlot);
518 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writePropertyName));
520 if (writeProp.isWritable()) {
528 const QMetaObject* meta =
source->metaObject();
529 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStatePropertyName));
534 QMetaMethod signal = readStateProp.notifySignal();
541 const QMetaObject* dstMeta = helper->metaObject();
543 QMetaMethod updateSlot = dstMeta->method(
544 dstMeta->indexOfSlot(
"updateState(CheckBoxState)"));
545 QObject::connect(
source, signal, helper, updateSlot);
549 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writePropertyName));
551 if (writeProp.isWritable()) {
560 const QMetaObject* meta =
source->metaObject();
561 QMetaProperty readStateProp = meta->property(meta->indexOfProperty(readStatePropertyName));
566 QMetaMethod signal = readStateProp.notifySignal();
573 const QMetaObject* dstMeta = helper->metaObject();
575 QMetaMethod updateSlot = dstMeta->method(
576 dstMeta->indexOfSlot(
"updateState(ComboBoxState)"));
577 QObject::connect(
source, signal, helper, updateSlot);
581 QMetaProperty writeProp = meta->property(meta->indexOfProperty(writePropertyName));
591 if (writeProp.isWritable()) {
592 QObject::connect(
button, qOverload<int>(&QComboBox::currentIndexChanged),
599 const QMetaObject* meta =
source->metaObject();
600 QMetaProperty stateProp = meta->property(meta->indexOfProperty(property));
605 QMetaMethod signal = stateProp.notifySignal();
610 const QMetaObject* dstMeta =
button->metaObject();
612 QMetaMethod updateSlot = dstMeta->method(
613 dstMeta->indexOfSlot(
"setCurrentIndex(int)"));
616 button->setCurrentIndex(stateProp.read(
source).value<
int>());
618 if (stateProp.isWritable()) {
621 QObject::connect(
button, qOverload<int>(&QComboBox::currentIndexChanged),
657 const QMetaObject* meta =
source->metaObject();
658 QMetaProperty stateProp = meta->property(meta->indexOfProperty(property));
663 QMetaMethod signal = stateProp.notifySignal();
670 const QMetaObject* dstMeta = helper->metaObject();
672 QMetaMethod updateSlot = dstMeta->method(
673 dstMeta->indexOfSlot(
"slotPropertyChanged(SpacingState)"));
674 QObject::connect(
source, signal, helper, updateSlot);
678 if (stateProp.isWritable()) {
686 const QMetaObject* meta =
source->metaObject();
687 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
692 QMetaMethod signal = prop.notifySignal();
697 const QMetaObject* dstMeta = widget->metaObject();
699 QMetaMethod updateSlot = dstMeta->method(
700 dstMeta->indexOfSlot(
"setAngle(qreal)"));
701 QObject::connect(
source, signal, widget, updateSlot);
705 if (prop.isWritable()) {
713 const QMetaObject* meta =
source->metaObject();
714 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
719 QMetaMethod signal = prop.notifySignal();
724 const QMetaObject* dstMeta = widget->metaObject();
726 QMetaMethod updateSlot = dstMeta->method(
727 dstMeta->indexOfSlot(
"setText(QString)"));
728 QObject::connect(
source, signal, widget, updateSlot);
730 widget->setText(prop.read(
source).toString());
732 if (prop.isWritable()) {
733 QObject::connect(widget, &QLineEdit::textChanged,
740 const QMetaObject* meta =
source->metaObject();
741 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
746 QMetaMethod signal = prop.notifySignal();
751 const QMetaObject* dstMeta = widget->metaObject();
753 QMetaMethod updateSlot = dstMeta->method(
754 dstMeta->indexOfSlot(
"setFileName(QString)"));
755 QObject::connect(
source, signal, widget, updateSlot);
759 if (prop.isWritable()) {
768 const QMetaObject* meta =
source->metaObject();
769 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
774 QMetaMethod signal = prop.notifySignal();
779 const QMetaObject* dstMeta = widget->metaObject();
781 QMetaMethod updateSlot = dstMeta->method(
782 dstMeta->indexOfSlot(
"setColor(KoColor)"));
783 QObject::connect(
source, signal, widget, updateSlot);
787 if (prop.isWritable()) {
790 prop.write(
source, QVariant::fromValue(
value)); });
796 const QMetaObject* meta =
source->metaObject();
797 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
802 QMetaMethod signal = prop.notifySignal();
804 const QMetaObject* dstMeta = widget->metaObject();
806 QMetaMethod updateSlot = dstMeta->method(
807 dstMeta->indexOfSlot(
"setVisible(bool)"));
809 QObject::connect(
source, signal, widget, updateSlot);
810 widget->setVisible(prop.read(
source).toBool());
815 const QMetaObject* meta =
source->metaObject();
816 QMetaProperty prop = meta->property(meta->indexOfProperty(property));
821 QMetaMethod signal = prop.notifySignal();
823 const QMetaObject* dstMeta = widget->metaObject();
825 QMetaMethod updateSlot = dstMeta->method(
826 dstMeta->indexOfSlot(
"setEnabled(bool)"));
828 QObject::connect(
source, signal, widget, updateSlot);
829 widget->setEnabled(prop.read(
source).toBool());
834#include <KisWidgetConnectionUtils.moc>
float value(const T *src, size_t ch)
KisMagneticGraph::vertex_descriptor source(typename KisMagneticGraph::edge_descriptor e, KisMagneticGraph g)
ConnectComboBoxStateHelper(QComboBox *parent)
void updateState(const ComboBoxState &state)
void updateState(const CheckBoxState &state)
ConnectGroupBoxStateHelper(QGroupBox *parent)
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)