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
DeclarativeVBoxLayout::~DeclarativeVBoxLayout()
{
+ delete m_layout;
}
QObject* DeclarativeVBoxLayout::object()
{
- if (!m_layout)
- m_layout = new QVBoxLayout;
-
return m_layout;
}
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
}
DeclarativeWidget::~DeclarativeWidget()
{
+ delete m_widget;
}
QObject* DeclarativeWidget::object()
{
- if (!m_widget)
- m_widget = new QWidget();
-
return m_widget;
}
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
}
DeclarativeLabel::~DeclarativeLabel()
{
+ delete m_label;
}
QObject* DeclarativeLabel::object()
{
- if (!m_label)
- m_label = new QLabel("Hello QML Widgets");
-
return m_label;
}
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;
}
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
}
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)
#define DECLARATIVEOBJECTS_H
#include <QtCore/QObject>
+#include <QtCore/QPointer>
+#include <QtGui/QCheckBox>
#include <QtGui/QLabel>
#include <QtGui/QPushButton>
#include <QtGui/QVBoxLayout>
virtual void dataClear();
private:
- QVBoxLayout* m_layout;
+ QPointer<QVBoxLayout> m_layout;
QVector<QObject*> m_children;
};
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
virtual QObject* object();
private:
- QLabel* m_label;
+ QPointer<QLabel> m_label;
};
class DeclarativeTabWidget : public DeclarativeWidget
public:
DeclarativeTabWidget(QObject *parent = 0);
+ ~DeclarativeTabWidget();
virtual QObject* object();
virtual QObject *dataAt(int);
virtual void dataClear();
+ QPointer<QTabWidget> m_tabWidget;
QVector<QObject*> m_children;
- QTabWidget* m_tabWidget;
};
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