Some cleanup in the declarative wrapper objects.
authorTobias Koenig <tobias.koenig@kdab.com>
Sun, 14 Oct 2012 10:39:38 +0000 (12:39 +0200)
committerTobias Koenig <tobias.koenig@kdab.com>
Sun, 14 Oct 2012 10:39:38 +0000 (12:39 +0200)
declarativeobjects.cpp
declarativeobjects_p.h

index f4a8834..ebdc0e0 100644 (file)
@@ -119,25 +119,41 @@ void DeclarativeObject::data_append(QDeclarativeListProperty<QObject> *property,
     return;
 
   DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
-  that->dataAppend(object);
+  if (that)
+    that->dataAppend(object);
+  else
+    qWarning("cast went wrong in data_append");
 }
 
 int DeclarativeObject::data_count(QDeclarativeListProperty<QObject> *property)
 {
   DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
-  return that->dataCount();
+  if (that)
+    return that->dataCount();
+  else {
+    qWarning("cast went wrong in data_count");
+    return 0;
+  }
 }
 
 QObject* DeclarativeObject::data_at(QDeclarativeListProperty<QObject> *property, int index)
 {
   DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
-  return that->dataAt(index);
+  if (that)
+    return that->dataAt(index);
+  else {
+    qWarning("cast went wrong in data_at");
+    return 0;
+  }
 }
 
 void DeclarativeObject::data_clear(QDeclarativeListProperty<QObject> *property)
 {
   DeclarativeObject *that = dynamic_cast<DeclarativeObject*>(property->object);
-  that->dataClear();
+  if (that)
+    that->dataClear();
+  else
+    qWarning("cast went wrong in data_clear");
 }
 
 // DeclarativeVBoxLayout
@@ -150,13 +166,11 @@ DeclarativeVBoxLayout::DeclarativeVBoxLayout(QObject *parent)
 
 DeclarativeVBoxLayout::~DeclarativeVBoxLayout()
 {
+  delete m_layout;
 }
 
 QObject* DeclarativeVBoxLayout::object()
 {
-  if (!m_layout)
-    m_layout = new QVBoxLayout;
-
   return m_layout;
 }
 
@@ -167,10 +181,10 @@ void DeclarativeVBoxLayout::dataAppend(QObject *object)
 
   if (widget) {
     m_children.append(object);
-    qobject_cast<QVBoxLayout*>(this->object())->addWidget(qobject_cast<QWidget*>(widget->object()));
+    m_layout->addWidget(qobject_cast<QWidget*>(widget->object()));
   } else if (layout) {
     m_children.append(object);
-    qobject_cast<QVBoxLayout*>(this->object())->addLayout(qobject_cast<QVBoxLayout*>(layout->object()));
+    m_layout->addLayout(qobject_cast<QLayout*>(layout->object()));
   } else {
     // TODO: error unknown type
   }
@@ -204,13 +218,11 @@ DeclarativeWidget::DeclarativeWidget(QObject *parent)
 
 DeclarativeWidget::~DeclarativeWidget()
 {
+  delete m_widget;
 }
 
 QObject* DeclarativeWidget::object()
 {
-  if (!m_widget)
-    m_widget = new QWidget();
-
   return m_widget;
 }
 
@@ -222,12 +234,12 @@ void DeclarativeWidget::dataAppend(QObject *object)
   if (widget) {
     // TODO: error when layout is set
     m_children.append(object);
-    qobject_cast<QWidget*>(widget->object())->setParent(qobject_cast<QWidget*>(this->object()));
+    qobject_cast<QWidget*>(widget->object())->setParent(m_widget);
   } else if (layout) {
     // TODO: error when widget is set
 
     m_children.append(layout);
-    qobject_cast<QWidget*>(this->object())->setLayout(qobject_cast<QVBoxLayout*>(layout->object()));
+    m_widget->setLayout(qobject_cast<QVBoxLayout*>(layout->object()));
   } else {
     // TODO: error unknown type
   }
@@ -261,13 +273,11 @@ DeclarativeLabel::DeclarativeLabel(QObject *parent)
 
 DeclarativeLabel::~DeclarativeLabel()
 {
+  delete m_label;
 }
 
 QObject* DeclarativeLabel::object()
 {
-  if (!m_label)
-    m_label = new QLabel("Hello QML Widgets");
-
   return m_label;
 }
 
@@ -281,11 +291,13 @@ DeclarativeTabWidget::DeclarativeTabWidget(QObject *parent)
   connectAllSignals(m_tabWidget, this);
 }
 
-QObject* DeclarativeTabWidget::object()
+DeclarativeTabWidget::~DeclarativeTabWidget()
 {
-  if (!m_tabWidget)
-    m_tabWidget = new QTabWidget();
+  delete m_tabWidget;
+}
 
+QObject* DeclarativeTabWidget::object()
+{
   return m_tabWidget;
 }
 
@@ -296,7 +308,7 @@ void DeclarativeTabWidget::dataAppend(QObject *object)
   if (widget) {
     // TODO: error when layout is set
     m_children.append(object);
-    qobject_cast<QTabWidget*>(this->object())->addTab(qobject_cast<QWidget*>(widget->object()), "MyTab");
+    m_tabWidget->addTab(qobject_cast<QWidget*>(widget->object()), "MyTab");
   } else {
     // TODO: error unknown type
   }
@@ -328,13 +340,34 @@ DeclarativePushButton::DeclarativePushButton(QObject *parent)
   connectAllSignals(m_pushButton, this);
 }
 
-QObject* DeclarativePushButton::object()
+DeclarativePushButton::~DeclarativePushButton()
 {
-  if (!m_pushButton)
-    m_pushButton = new QPushButton("Hello QML Widgets");
+  delete m_pushButton;
+}
 
+QObject* DeclarativePushButton::object()
+{
   return m_pushButton;
 }
 
 CUSTOM_METAOBJECT(DeclarativePushButton, DeclarativeWidget, QPushButton, m_pushButton)
 
+// DeclarativeCheckBox
+DeclarativeCheckBox::DeclarativeCheckBox(QObject *parent)
+  : DeclarativeWidget(parent)
+  , m_checkBox(new QCheckBox)
+{
+  connectAllSignals(m_checkBox, this);
+}
+
+DeclarativeCheckBox::~DeclarativeCheckBox()
+{
+  delete m_checkBox;
+}
+
+QObject* DeclarativeCheckBox::object()
+{
+  return m_checkBox;
+}
+
+CUSTOM_METAOBJECT(DeclarativeCheckBox, DeclarativeWidget, QCheckBox, m_checkBox)
index 4020852..9a4b3eb 100644 (file)
@@ -2,6 +2,8 @@
 #define DECLARATIVEOBJECTS_H
 
 #include <QtCore/QObject>
+#include <QtCore/QPointer>
+#include <QtGui/QCheckBox>
 #include <QtGui/QLabel>
 #include <QtGui/QPushButton>
 #include <QtGui/QVBoxLayout>
@@ -65,7 +67,7 @@ class DeclarativeVBoxLayout : public DeclarativeObject
     virtual void dataClear();
 
   private:
-    QVBoxLayout* m_layout;
+    QPointer<QVBoxLayout> m_layout;
     QVector<QObject*> m_children;
 };
 
@@ -85,24 +87,10 @@ class DeclarativeWidget : public DeclarativeObject
     virtual QObject *dataAt(int);
     virtual void dataClear();
 
-    QWidget* m_widget;
+    QPointer<QWidget> m_widget;
     QVector<QObject*> m_children;
 };
 
-class DeclarativeFrame : public DeclarativeObject
-{
-  DECLARATIVE_OBJECT
-
-  public:
-    DeclarativeFrame(QObject *parent = 0);
-    ~DeclarativeFrame();
-
-    virtual QObject* object();
-
-  private:
-    QFrame* m_frame;
-};
-
 class DeclarativeLabel : public DeclarativeWidget
 {
   DECLARATIVE_OBJECT
@@ -114,7 +102,7 @@ class DeclarativeLabel : public DeclarativeWidget
     virtual QObject* object();
 
   private:
-    QLabel* m_label;
+    QPointer<QLabel> m_label;
 };
 
 class DeclarativeTabWidget : public DeclarativeWidget
@@ -123,6 +111,7 @@ class DeclarativeTabWidget : public DeclarativeWidget
 
   public:
     DeclarativeTabWidget(QObject *parent = 0);
+    ~DeclarativeTabWidget();
 
     virtual QObject* object();
 
@@ -132,8 +121,8 @@ class DeclarativeTabWidget : public DeclarativeWidget
     virtual QObject *dataAt(int);
     virtual void dataClear();
 
+    QPointer<QTabWidget> m_tabWidget;
     QVector<QObject*> m_children;
-    QTabWidget* m_tabWidget;
 };
 
 class DeclarativePushButton : public DeclarativeWidget
@@ -142,11 +131,26 @@ class DeclarativePushButton : public DeclarativeWidget
 
   public:
     DeclarativePushButton(QObject *parent = 0);
+    ~DeclarativePushButton();
+
+    virtual QObject* object();
+
+  private:
+    QPointer<QPushButton> m_pushButton;
+};
+
+class DeclarativeCheckBox : public DeclarativeWidget
+{
+  DECLARATIVE_OBJECT
+
+  public:
+    DeclarativeCheckBox(QObject *parent = 0);
+    ~DeclarativeCheckBox();
 
     virtual QObject* object();
 
   private:
-    QPushButton* m_pushButton;
+    QPointer<QCheckBox> m_checkBox;
 };
 
 #endif