Add support for ButtonGroup
authorTobias Koenig <tobias.koenig@kdab.com>
Sun, 28 Oct 2012 09:26:57 +0000 (10:26 +0100)
committerTobias Koenig <tobias.koenig@kdab.com>
Sun, 28 Oct 2012 09:26:57 +0000 (10:26 +0100)
declarativeobjects.cpp
declarativeobjects_p.h
declarativewidgetdocument.cpp
objectadaptors.cpp
objectadaptors_p.h
test.qml

index 0a3b0d2..981a364 100644 (file)
@@ -162,6 +162,14 @@ DeclarativeActionItem::DeclarativeActionItem(QObject *parent) : DeclarativeObjec
 
 CUSTOM_METAOBJECT(DeclarativeActionItem, ActionItem)
 
+// DeclarativeButtonGroup
+DeclarativeButtonGroup::DeclarativeButtonGroup(QObject *parent) : DeclarativeObjectProxy<ButtonGroup>(parent)
+{
+  connectAllSignals(m_proxiedObject, this);
+}
+
+CUSTOM_METAOBJECT(DeclarativeButtonGroup, ButtonGroup)
+
 // DeclarativeSeparator
 DeclarativeSeparator::DeclarativeSeparator(QObject *parent) : DeclarativeObjectProxy<QAction>(parent)
 {
index 565ee4f..f2ca887 100644 (file)
@@ -245,6 +245,14 @@ class DeclarativeAction : public DeclarativeObjectProxy<QAction>
 };
 Q_DECLARE_METATYPE(DeclarativeAction*)
 
+class DeclarativeButtonGroup : public DeclarativeObjectProxy<ButtonGroup>
+{
+  DECLARATIVE_OBJECT
+
+  public:
+    DeclarativeButtonGroup(QObject *parent = 0);
+};
+
 class DeclarativeSeparator : public DeclarativeObjectProxy<QAction>
 {
   DECLARATIVE_OBJECT
index d34f5da..328ef5c 100644 (file)
@@ -33,6 +33,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p
   qmlRegisterType<QAction>();
   qmlRegisterType<DeclarativeAction>("QtGui", 1, 0, "Action");
   qmlRegisterType<DeclarativeActionItem>("QtGui", 1, 0, "ActionItem");
+  qmlRegisterType<DeclarativeButtonGroup>("QtGui", 1, 0, "ButtonGroup");
   qmlRegisterType<DeclarativeSeparator>("QtGui", 1, 0, "Separator");
 
   // layouts
index 8862f24..c3e8e5d 100644 (file)
@@ -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 <QDebug>
 
+// 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<QObject*>();
+    if (object) {
+      AbstractDeclarativeObject *declarativeObject = dynamic_cast<AbstractDeclarativeObject*>(object);
+      if (declarativeObject) {
+        QAbstractButton *button = qobject_cast<QAbstractButton*>(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<QObject*>();
+    if (object) {
+      AbstractDeclarativeObject *declarativeObject = dynamic_cast<AbstractDeclarativeObject*>(object);
+      if (declarativeObject) {
+        QAbstractButton *button = qobject_cast<QAbstractButton*>(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();
+}
index cc2f32f..84209a4 100644 (file)
@@ -2,10 +2,53 @@
 #define OBJECTADAPTORS_P_H
 
 #include <QtGui/QAction>
+#include <QtGui/QButtonGroup>
 #include <QtGui/QFileDialog>
 #include <QtGui/QInputDialog>
 #include <QtGui/QTextEdit>
 
+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
index a3d1191..66ad200 100644 (file)
--- 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"