From: Tobias Koenig Date: Sun, 14 Oct 2012 10:39:38 +0000 (+0200) Subject: Some cleanup in the declarative wrapper objects. X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=8cf93e0c74f1e2ec9ecc103b713a96bc72862f60;p=konrad%2FDeclarativeWidgets.git Some cleanup in the declarative wrapper objects. --- diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index f4a8834..ebdc0e0 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -119,25 +119,41 @@ void DeclarativeObject::data_append(QDeclarativeListProperty *property, return; DeclarativeObject *that = dynamic_cast(property->object); - that->dataAppend(object); + if (that) + that->dataAppend(object); + else + qWarning("cast went wrong in data_append"); } int DeclarativeObject::data_count(QDeclarativeListProperty *property) { DeclarativeObject *that = dynamic_cast(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 *property, int index) { DeclarativeObject *that = dynamic_cast(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 *property) { DeclarativeObject *that = dynamic_cast(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(this->object())->addWidget(qobject_cast(widget->object())); + m_layout->addWidget(qobject_cast(widget->object())); } else if (layout) { m_children.append(object); - qobject_cast(this->object())->addLayout(qobject_cast(layout->object())); + m_layout->addLayout(qobject_cast(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(widget->object())->setParent(qobject_cast(this->object())); + qobject_cast(widget->object())->setParent(m_widget); } else if (layout) { // TODO: error when widget is set m_children.append(layout); - qobject_cast(this->object())->setLayout(qobject_cast(layout->object())); + m_widget->setLayout(qobject_cast(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(this->object())->addTab(qobject_cast(widget->object()), "MyTab"); + m_tabWidget->addTab(qobject_cast(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) diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 4020852..9a4b3eb 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -2,6 +2,8 @@ #define DECLARATIVEOBJECTS_H #include +#include +#include #include #include #include @@ -65,7 +67,7 @@ class DeclarativeVBoxLayout : public DeclarativeObject virtual void dataClear(); private: - QVBoxLayout* m_layout; + QPointer m_layout; QVector m_children; }; @@ -85,24 +87,10 @@ class DeclarativeWidget : public DeclarativeObject virtual QObject *dataAt(int); virtual void dataClear(); - QWidget* m_widget; + QPointer m_widget; QVector 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 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 m_tabWidget; QVector 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 m_pushButton; +}; + +class DeclarativeCheckBox : public DeclarativeWidget +{ + DECLARATIVE_OBJECT + + public: + DeclarativeCheckBox(QObject *parent = 0); + ~DeclarativeCheckBox(); virtual QObject* object(); private: - QPushButton* m_pushButton; + QPointer m_checkBox; }; #endif