//// Objects ////
// DeclarativeAction
-DeclarativeAction::DeclarativeAction(QObject *parent) : DeclarativeObjectProxy<QAction>(parent)
+DeclarativeAction::DeclarativeAction(QObject *parent) : DeclarativeObjectProxy<QAction, true>(parent)
{
connectAllSignals(m_proxiedObject, this);
}
CUSTOM_METAOBJECT(DeclarativeButtonGroup, ButtonGroup)
// DeclarativeSeparator
-DeclarativeSeparator::DeclarativeSeparator(QObject *parent) : DeclarativeObjectProxy<QAction>(parent)
+DeclarativeSeparator::DeclarativeSeparator(QObject *parent) : DeclarativeObjectProxy<QAction, true>(parent)
{
connectAllSignals(m_proxiedObject, this);
}
static void data_clear(QDeclarativeListProperty<QObject> *);
};
-template <class T>
+template <class T, bool needsParentInitialization = false>
class DeclarativeObjectProxy : public AbstractDeclarativeObject
{
+};
+
+template <class T>
+class DeclarativeObjectProxy<T, false> : public AbstractDeclarativeObject
+{
public:
- DeclarativeObjectProxy(QObject *parent = 0) : AbstractDeclarativeObject(parent), m_proxiedObject(new T(0)) {}
+ DeclarativeObjectProxy(QObject *parent = 0) : AbstractDeclarativeObject(parent), m_proxiedObject(new T) {}
+ ~DeclarativeObjectProxy() { delete m_proxiedObject; }
+
+ virtual QObject *object() const { return m_proxiedObject.data(); }
+
+ protected:
+ virtual void dataAppend(QObject *object)
+ {
+ m_children.append(object);
+ }
+
+ virtual int dataCount() const { return m_children.count(); }
+ virtual QObject *dataAt(int index) const { return m_children.at(index); }
+ virtual void dataClear()
+ {
+ qDeleteAll(m_children);
+ m_children.clear();
+ }
+
+ protected:
+ QPointer<T> m_proxiedObject;
+ QVector<QObject*> m_children;
+};
+template <class T>
+class DeclarativeObjectProxy<T, true> : public AbstractDeclarativeObject
+{
+ public:
+ DeclarativeObjectProxy(QObject *parent = 0) : AbstractDeclarativeObject(parent), m_proxiedObject(new T(0)) {}
~DeclarativeObjectProxy() { delete m_proxiedObject; }
virtual QObject *object() const { return m_proxiedObject.data(); }
};
//// Objects ///
-class DeclarativeAction : public DeclarativeObjectProxy<QAction>
+class DeclarativeAction : public DeclarativeObjectProxy<QAction, true>
{
DECLARATIVE_OBJECT
DeclarativeButtonGroup(QObject *parent = 0);
};
-class DeclarativeSeparator : public DeclarativeObjectProxy<QAction>
+class DeclarativeSeparator : public DeclarativeObjectProxy<QAction, true>
{
DECLARATIVE_OBJECT