From: Tobias Koenig Date: Sun, 28 Oct 2012 09:26:57 +0000 (+0100) Subject: Add support for ButtonGroup X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=906402b58dea175d7e502fe0161181586e1d50ca;p=web%2Fkonrad%2FDeclarativeWidgets.git Add support for ButtonGroup --- diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index 0a3b0d2..981a364 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -162,6 +162,14 @@ DeclarativeActionItem::DeclarativeActionItem(QObject *parent) : DeclarativeObjec CUSTOM_METAOBJECT(DeclarativeActionItem, ActionItem) +// DeclarativeButtonGroup +DeclarativeButtonGroup::DeclarativeButtonGroup(QObject *parent) : DeclarativeObjectProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +CUSTOM_METAOBJECT(DeclarativeButtonGroup, ButtonGroup) + // DeclarativeSeparator DeclarativeSeparator::DeclarativeSeparator(QObject *parent) : DeclarativeObjectProxy(parent) { diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 565ee4f..f2ca887 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -245,6 +245,14 @@ class DeclarativeAction : public DeclarativeObjectProxy }; Q_DECLARE_METATYPE(DeclarativeAction*) +class DeclarativeButtonGroup : public DeclarativeObjectProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeButtonGroup(QObject *parent = 0); +}; + class DeclarativeSeparator : public DeclarativeObjectProxy { DECLARATIVE_OBJECT diff --git a/declarativewidgetdocument.cpp b/declarativewidgetdocument.cpp index d34f5da..328ef5c 100644 --- a/declarativewidgetdocument.cpp +++ b/declarativewidgetdocument.cpp @@ -33,6 +33,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "Action"); qmlRegisterType("QtGui", 1, 0, "ActionItem"); + qmlRegisterType("QtGui", 1, 0, "ButtonGroup"); qmlRegisterType("QtGui", 1, 0, "Separator"); // layouts diff --git a/objectadaptors.cpp b/objectadaptors.cpp index 8862f24..c3e8e5d 100644 --- a/objectadaptors.cpp +++ b/objectadaptors.cpp @@ -2,30 +2,9 @@ #include "declarativeobjects_p.h" -FileDialog::FileDialog(QWidget *parent) - : QFileDialog(parent) -{ -} - -InputDialog::InputDialog(QWidget *parent) - : QInputDialog(parent) -{ - connect(this, SIGNAL(textValueChanged(QString)), this, SIGNAL(customTextValueChanged())); - connect(this, SIGNAL(intValueChanged(int)), this, SIGNAL(customIntValueChanged())); - connect(this, SIGNAL(doubleValueChanged(double)), this, SIGNAL(customDoubleValueChanged())); -} - -TextEdit::TextEdit(QWidget *parent) - : QTextEdit(parent) -{ - connect(document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(modifiedChanged())); -} - -bool TextEdit::modified() const -{ - return document()->isModified(); -} +#include +// ActionItem ActionItem::ActionItem(QObject *parent) : QObject(parent) , m_placeholderAction(new QAction(this)) @@ -77,3 +56,77 @@ QVariant ActionItem::qmlAction() const { return m_action; } + +// ButtonGroup +ButtonGroup::ButtonGroup(QObject *parent) + : QButtonGroup(parent) +{ +} + +void ButtonGroup::setButtons(const QVariantList &buttons) +{ + if (m_buttons == buttons) + return; + + // First remove the old buttons ... + foreach (const QVariant &variant, m_buttons) { + QObject *object = variant.value(); + if (object) { + AbstractDeclarativeObject *declarativeObject = dynamic_cast(object); + if (declarativeObject) { + QAbstractButton *button = qobject_cast(declarativeObject->object()); + if (button) + QButtonGroup::removeButton(button); + } + } + } + + m_buttons = buttons; + + // ... then add the new ones + foreach (const QVariant &variant, m_buttons) { + QObject *object = variant.value(); + if (object) { + AbstractDeclarativeObject *declarativeObject = dynamic_cast(object); + if (declarativeObject) { + QAbstractButton *button = qobject_cast(declarativeObject->object()); + if (button) + QButtonGroup::addButton(button); + } + } + } + + emit buttonsChanged(); +} + +QVariantList ButtonGroup::buttons() const +{ + return m_buttons; +} + +// FileDialog +FileDialog::FileDialog(QWidget *parent) + : QFileDialog(parent) +{ +} + +// InputDialog +InputDialog::InputDialog(QWidget *parent) + : QInputDialog(parent) +{ + connect(this, SIGNAL(textValueChanged(QString)), this, SIGNAL(customTextValueChanged())); + connect(this, SIGNAL(intValueChanged(int)), this, SIGNAL(customIntValueChanged())); + connect(this, SIGNAL(doubleValueChanged(double)), this, SIGNAL(customDoubleValueChanged())); +} + +// TextEdit +TextEdit::TextEdit(QWidget *parent) + : QTextEdit(parent) +{ + connect(document(), SIGNAL(modificationChanged(bool)), this, SIGNAL(modifiedChanged())); +} + +bool TextEdit::modified() const +{ + return document()->isModified(); +} diff --git a/objectadaptors_p.h b/objectadaptors_p.h index cc2f32f..84209a4 100644 --- a/objectadaptors_p.h +++ b/objectadaptors_p.h @@ -2,10 +2,53 @@ #define OBJECTADAPTORS_P_H #include +#include #include #include #include +class ActionItem : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QVariant action READ qmlAction WRITE setAction NOTIFY actionChanged) + + public: + ActionItem(QObject *parent = 0); + + QAction* action(); + + Q_SIGNALS: + void actionChanged(); + + private: + void setAction(const QVariant &action); + QVariant qmlAction() const; + + QVariant m_action; + QAction* m_placeholderAction; + QAction* m_qAction; +}; + +class ButtonGroup : public QButtonGroup +{ + Q_OBJECT + + Q_PROPERTY(QVariantList buttons READ buttons WRITE setButtons NOTIFY buttonsChanged) + + public: + ButtonGroup(QObject *parent = 0); + + Q_SIGNALS: + void buttonsChanged(); + + private: + void setButtons(const QVariantList &buttons); + QVariantList buttons() const; + + QVariantList m_buttons; +}; + class FileDialog : public QFileDialog { Q_OBJECT @@ -66,27 +109,4 @@ class TextEdit : public QTextEdit bool modified() const; }; -class ActionItem : public QObject -{ - Q_OBJECT - - Q_PROPERTY(QVariant action READ qmlAction WRITE setAction NOTIFY actionChanged) - - public: - ActionItem(QObject *parent = 0); - - QAction* action(); - - Q_SIGNALS: - void actionChanged(); - - private: - void setAction(const QVariant &action); - QVariant qmlAction() const; - - QVariant m_action; - QAction* m_placeholderAction; - QAction* m_qAction; -}; - #endif diff --git a/test.qml b/test.qml index a3d1191..66ad200 100644 --- a/test.qml +++ b/test.qml @@ -53,8 +53,33 @@ Widget { text: "Page 1" } - Label { - text: "Page 2" + Widget { + TabWidget.label: "Title 2" + + ButtonGroup { + buttons: [ button1, button2, button3, button4 ] + } + + VBoxLayout { + RadioButton { + id: button1 + text: qsTr("Apple") + } + RadioButton { + id: button2 + text: qsTr("Banana") + } + RadioButton { + id: button3 + text: qsTr("Peach") + } + + PushButton { + id: button4 + checkable: true + text: qsTr("Peas") + } + } } Label { TabWidget.label: "Title 3"