Delegate object tree handling
authorKevin Krammer <kevin.krammer@kdab.com>
Sat, 23 Mar 2013 16:44:30 +0000 (17:44 +0100)
committerKevin Krammer <kevin.krammer@kdab.com>
Sat, 23 Mar 2013 16:56:09 +0000 (17:56 +0100)
Avoid having to subclass the widget extension just for overriding
the way child widgets or layouts are handled.
Delegate to a container handler instead of implementing the
object tree build interface directly

42 files changed:
lib/declarativecontainerwidgetextension_p.h [copied from lib/declarativemenuextension_p.h with 60% similarity]
lib/declarativeformlayout.cpp
lib/declarativeformlayout_p.h
lib/declarativegridlayout.cpp
lib/declarativegridlayout_p.h
lib/declarativehboxlayout.cpp
lib/declarativehboxlayout_p.h
lib/declarativelayoutextension.cpp
lib/declarativelayoutextension.h
lib/declarativeobjectextension.cpp
lib/declarativeobjectextension.h
lib/declarativestackedlayout.cpp
lib/declarativestackedlayout_p.h
lib/declarativestatusbar.cpp
lib/declarativestatusbar_p.h
lib/declarativetabwidget.cpp
lib/declarativetabwidget_p.h
lib/declarativevboxlayout.cpp
lib/declarativevboxlayout_p.h
lib/declarativewidgetextension.cpp
lib/declarativewidgetextension.h
lib/declarativewidgetsdocument.cpp
lib/defaultobjectcontainer.cpp [copied from lib/declarativemenuextension_p.h with 57% similarity]
lib/defaultobjectcontainer_p.h [copied from lib/declarativemenuextension_p.h with 58% similarity]
lib/defaultwidgetcontainer.cpp [copied from lib/declarativestackedwidgetextension.cpp with 58% similarity]
lib/defaultwidgetcontainer.h [copied from lib/declarativemenuextension_p.h with 66% similarity]
lib/layoutcontainerinterface_p.h [copied from lib/declarativemenuextension_p.h with 58% similarity]
lib/lib.pro
lib/mainwindowwidgetcontainer.cpp [moved from lib/declarativemainwindowextension.cpp with 73% similarity]
lib/mainwindowwidgetcontainer_p.h [moved from lib/declarativemainwindowextension_p.h with 67% similarity]
lib/menubarwidgetcontainer.cpp [moved from lib/declarativemenubarextension.cpp with 63% similarity]
lib/menubarwidgetcontainer_p.h [moved from lib/declarativemenubarextension_p.h with 68% similarity]
lib/menuwidgetcontainer.cpp [moved from lib/declarativemenuextension.cpp with 64% similarity]
lib/menuwidgetcontainer_p.h [copied from lib/declarativemenuextension_p.h with 69% similarity]
lib/objectcontainerinterface_p.h [copied from lib/declarativemenuextension_p.h with 58% similarity]
lib/scrollareawidgetcontainer.cpp [moved from lib/declarativescrollareaextension.cpp with 68% similarity]
lib/scrollareawidgetcontainer_p.h [moved from lib/declarativescrollareaextension_p.h with 67% similarity]
lib/stackedwidgetwidgetcontainer.cpp [moved from lib/declarativestackedwidgetextension.cpp with 62% similarity]
lib/stackedwidgetwidgetcontainer_p.h [moved from lib/declarativestackedwidgetextension_p.h with 67% similarity]
lib/toolbarwidgetcontainer.cpp [moved from lib/declarativetoolbarextension.cpp with 65% similarity]
lib/toolbarwidgetcontainer_p.h [moved from lib/declarativetoolbarextension_p.h with 68% similarity]
lib/widgetcontainerinterface_p.h [moved from lib/declarativemenuextension_p.h with 58% similarity]

similarity index 60%
copy from lib/declarativemenuextension_p.h
copy to lib/declarativecontainerwidgetextension_p.h
index 0c2be3f..16e2321 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef DECLARATIVECONTAINERWIDGETEXTENSION_P_H
+#define DECLARATIVECONTAINERWIDGETEXTENSION_P_H
 
 #include "declarativewidgetextension.h"
 
-class QMenu;
-
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+template <class T>
+class DeclarativeContainerWidgetExtension : public DeclarativeWidgetExtension
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
-
-    QMenu *extendedMenu() const;
-
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
+    explicit DeclarativeContainerWidgetExtension(QObject *parent = 0)
+      : DeclarativeWidgetExtension(new T(parent), parent)
+    {}
 };
 
-#endif
+#endif // DECLARATIVECONTAINERWIDGETEXTENSION_P_H
index 03684eb..4e0f06c 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "declarativeformlayout_p.h"
 
+#include "layoutcontainerinterface_p.h"
+
 #include <QDeclarativeInfo>
 #include <QWidget>
 
@@ -73,40 +75,50 @@ DeclarativeFormLayoutAttached *DeclarativeFormLayout::qmlAttachedProperties(QObj
   return 0;
 }
 
+class FormLayoutContainer : public LayoutContainerInterface
+{
+  public:
+    explicit FormLayoutContainer(QFormLayout *layout)
+      : m_layout(layout)
+    {
+      Q_ASSERT(m_layout);
+    }
+
+    void addLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QFormLayout *m_layout;
+};
+
 DeclarativeFormLayoutExtension::DeclarativeFormLayoutExtension(QObject *parent)
-  : DeclarativeLayoutExtension(parent)
+  : DeclarativeLayoutExtension(new FormLayoutContainer(qobject_cast<QFormLayout*>(parent)), parent)
 {
 }
 
-void DeclarativeFormLayoutExtension::addWidget(QWidget *widget)
+void FormLayoutContainer::addWidget(QWidget *widget)
 {
-  QFormLayout *formLayout = qobject_cast<QFormLayout*>(extendedLayout());
-  Q_ASSERT(formLayout);
-
   QObject *attachedProperties = qmlAttachedPropertiesObject<DeclarativeFormLayout>(widget, false);
   DeclarativeFormLayoutAttached *properties = qobject_cast<DeclarativeFormLayoutAttached*>(attachedProperties);
   if (properties) {
     if (!properties->label().isEmpty()) {
-      formLayout->addRow(properties->label(), widget);
+      m_layout->addRow(properties->label(), widget);
       return;
     }
   }
 
-  formLayout->addRow(widget);
+  m_layout->addRow(widget);
 }
 
-void DeclarativeFormLayoutExtension::addLayout(QLayout *layout)
+void FormLayoutContainer::addLayout(QLayout *layout)
 {
-  QFormLayout *formLayout = qobject_cast<QFormLayout*>(extendedLayout());
-  Q_ASSERT(formLayout);
-
   QObject *attachedProperties = qmlAttachedPropertiesObject<DeclarativeFormLayout>(layout, false);
   DeclarativeFormLayoutAttached *properties = qobject_cast<DeclarativeFormLayoutAttached*>(attachedProperties);
   if (properties) {
     if (!properties->label().isEmpty()) {
-      formLayout->addRow(properties->label(), layout);
+      m_layout->addRow(properties->label(), layout);
       return;
     }
   }
-  formLayout->addRow(layout);
+  m_layout->addRow(layout);
 }
index 31b41db..e948841 100644 (file)
@@ -70,10 +70,6 @@ class DeclarativeFormLayoutExtension : public DeclarativeLayoutExtension
 
   public:
     explicit DeclarativeFormLayoutExtension(QObject *parent = 0);
-
-  protected:
-    void addWidget(QWidget *widget);
-    void addLayout(QLayout *layout);
 };
 
 #endif
index 34b4634..72d7e5a 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "declarativegridlayout_p.h"
 
+#include "layoutcontainerinterface_p.h"
+
 #include <QDeclarativeInfo>
 #include <QPointer>
 #include <QWidget>
@@ -161,16 +163,29 @@ DeclarativeGridLayoutAttached *DeclarativeGridLayout::qmlAttachedProperties(QObj
   return 0;
 }
 
+class GridLayoutContainer : public LayoutContainerInterface
+{
+  public:
+    explicit GridLayoutContainer(QGridLayout *layout)
+      : m_layout(layout)
+    {
+      Q_ASSERT(m_layout);
+    }
+
+    void addLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QGridLayout *m_layout;
+};
+
 DeclarativeGridLayoutExtension::DeclarativeGridLayoutExtension(QObject *parent)
-  : DeclarativeLayoutExtension(parent)
+  : DeclarativeLayoutExtension(new GridLayoutContainer(qobject_cast<QGridLayout*>(parent)), parent)
 {
 }
 
-void DeclarativeGridLayoutExtension::addWidget(QWidget *widget)
+void GridLayoutContainer::addWidget(QWidget *widget)
 {
-  QGridLayout *gridLayout = qobject_cast<QGridLayout*>(extendedLayout());
-  Q_ASSERT(gridLayout);
-
   int row = 0;
   int column = 0;
   int rowSpan = 1;
@@ -186,17 +201,14 @@ void DeclarativeGridLayoutExtension::addWidget(QWidget *widget)
     columnSpan = properties->columnSpan();
     alignment = properties->alignment();
 
-    properties->setParentLayout(gridLayout);
+    properties->setParentLayout(m_layout);
   }
 
-  gridLayout->addWidget(widget, row, column, rowSpan, columnSpan, alignment);
+  m_layout->addWidget(widget, row, column, rowSpan, columnSpan, alignment);
 }
 
-void DeclarativeGridLayoutExtension::addLayout(QLayout *layout)
+void GridLayoutContainer::addLayout(QLayout *layout)
 {
-  QGridLayout *gridLayout = qobject_cast<QGridLayout*>(extendedLayout());
-  Q_ASSERT(gridLayout);
-
   int row = 0;
   int column = 0;
   int rowSpan = 1;
@@ -212,9 +224,9 @@ void DeclarativeGridLayoutExtension::addLayout(QLayout *layout)
     columnSpan = properties->columnSpan();
     alignment = properties->alignment();
 
-    properties->setParentLayout(gridLayout);
+    properties->setParentLayout(m_layout);
   }
 
-  gridLayout->addLayout(layout, row, column, rowSpan, columnSpan, alignment);
+  m_layout->addLayout(layout, row, column, rowSpan, columnSpan, alignment);
 }
 
index ab5833b..b49edc1 100644 (file)
@@ -93,10 +93,6 @@ class DeclarativeGridLayoutExtension : public DeclarativeLayoutExtension
 
   public:
     explicit DeclarativeGridLayoutExtension(QObject *parent = 0);
-
-  protected:
-    void addWidget(QWidget *widget);
-    void addLayout(QLayout *layout);
 };
 
 #endif
index 615947f..0cb1ed1 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "declarativehboxlayout_p.h"
 
+#include "layoutcontainerinterface_p.h"
+
 #include <QDeclarativeInfo>
 #include <QWidget>
 
@@ -43,16 +45,29 @@ DeclarativeBoxLayoutAttached *DeclarativeHBoxLayout::qmlAttachedProperties(QObje
   return 0;
 }
 
+class HBoxLayoutContainer : public LayoutContainerInterface
+{
+  public:
+    explicit HBoxLayoutContainer(QHBoxLayout *layout)
+      : m_layout(layout)
+    {
+      Q_ASSERT(m_layout);
+    }
+
+    void addLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QHBoxLayout *m_layout;
+};
+
 DeclarativeHBoxLayoutExtension::DeclarativeHBoxLayoutExtension(QObject *parent)
-  : DeclarativeLayoutExtension(parent)
+  : DeclarativeLayoutExtension(new HBoxLayoutContainer(qobject_cast<QHBoxLayout*>(parent)), parent)
 {
 }
 
-void DeclarativeHBoxLayoutExtension::addWidget(QWidget *widget)
+void HBoxLayoutContainer::addWidget(QWidget *widget)
 {
-  QHBoxLayout *hboxLayout = qobject_cast<QHBoxLayout*>(extendedLayout());
-  Q_ASSERT(hboxLayout);
-
   int stretch = 0;
   Qt::Alignment alignment = 0;
 
@@ -62,17 +77,14 @@ void DeclarativeHBoxLayoutExtension::addWidget(QWidget *widget)
     stretch = properties->stretch();
     alignment = properties->alignment();
 
-    properties->setParentLayout(hboxLayout);
+    properties->setParentLayout(m_layout);
   }
 
-  hboxLayout->addWidget(widget, stretch, alignment);
+  m_layout->addWidget(widget, stretch, alignment);
 }
 
-void DeclarativeHBoxLayoutExtension::addLayout(QLayout *layout)
+void HBoxLayoutContainer::addLayout(QLayout *layout)
 {
-  QHBoxLayout *hboxLayout = qobject_cast<QHBoxLayout*>(extendedLayout());
-  Q_ASSERT(hboxLayout);
-
   int stretch = 0;
   Qt::Alignment alignment = 0;
 
@@ -82,9 +94,9 @@ void DeclarativeHBoxLayoutExtension::addLayout(QLayout *layout)
     stretch = properties->stretch();
     alignment = properties->alignment();
 
-    properties->setParentLayout(hboxLayout);
+    properties->setParentLayout(m_layout);
   }
 
-  hboxLayout->addLayout(layout, stretch);
-  hboxLayout->setAlignment(layout, alignment);
+  m_layout->addLayout(layout, stretch);
+  m_layout->setAlignment(layout, alignment);
 }
index 03afa4f..bd87eec 100644 (file)
@@ -50,10 +50,6 @@ class DeclarativeHBoxLayoutExtension : public DeclarativeLayoutExtension
 
   public:
     explicit DeclarativeHBoxLayoutExtension(QObject *parent = 0);
-
-  protected:
-    void addWidget(QWidget *widget);
-    void addLayout(QLayout *layout);
 };
 
 #endif
index a6570be..767601b 100644 (file)
 
 #include "declarativelayoutextension.h"
 
+#include "defaultobjectcontainer_p.h"
+#include "layoutcontainerinterface_p.h"
+
 #include <QLayout>
 #include <QWidget>
 
-DeclarativeLayoutExtension::DeclarativeLayoutExtension(QObject *parent)
-  : DeclarativeObjectExtension(parent)
+class LayoutContainerDelegate : public DefaultObjectContainer
 {
-  parent->setParent(0); // otherwise first call to parentWidget() will complain about wrong parent class
-}
+  public:
+    explicit LayoutContainerDelegate(LayoutContainerInterface *layoutContainer)
+      : m_layoutContainer(layoutContainer)
+    {
+    }
+
+    ~LayoutContainerDelegate()
+    {
+      delete m_layoutContainer;
+    }
+
+    void dataAppend(QObject *object)
+    {
+      DefaultObjectContainer::dataAppend(object);
+      QWidget *widget = qobject_cast<QWidget*>(object);
+      if (widget) {
+        m_layoutContainer->addWidget(widget);
+        return;
+      }
+
+      QLayout *layout = qobject_cast<QLayout*>(object);
+      if (layout) {
+        m_layoutContainer->addLayout(layout);
+        return;
+      }
+    }
+
+  private:
+    LayoutContainerInterface *m_layoutContainer;
+};
 
 QLayout *DeclarativeLayoutExtension::extendedLayout() const
 {
@@ -38,19 +68,8 @@ QLayout *DeclarativeLayoutExtension::extendedLayout() const
   return parentLayout;
 }
 
-void DeclarativeLayoutExtension::dataAppend(QObject *object)
+DeclarativeLayoutExtension::DeclarativeLayoutExtension(LayoutContainerInterface *layoutContainer, QObject *parent)
+  : DeclarativeObjectExtension(new LayoutContainerDelegate(layoutContainer), parent)
 {
-  DeclarativeObjectExtension::dataAppend(object);
-
-  QWidget *widget = qobject_cast<QWidget*>(object);
-  if (widget) {
-    addWidget(widget);
-    return;
-  }
-
-  QLayout *layout = qobject_cast<QLayout*>(object);
-  if (layout) {
-    addLayout(layout);
-    return;
-  }
+  parent->setParent(0); // otherwise first call to parentWidget() will complain about wrong parent class
 }
index 2246c63..0ffea41 100644 (file)
@@ -23,6 +23,8 @@
 
 #include "declarativeobjectextension.h"
 
+class LayoutContainerInterface;
+
 class QLayout;
 class QWidget;
 
@@ -36,15 +38,10 @@ class DeclarativeLayoutExtension : public DeclarativeObjectExtension
   Q_CLASSINFO("DefaultProperty", "data")
 
   public:
-    DeclarativeLayoutExtension(QObject *parent);
-
     QLayout *extendedLayout() const;
 
   protected:
-    void dataAppend(QObject *object);
-
-    virtual void addLayout(QLayout *layout) = 0;
-    virtual void addWidget(QWidget *widget) = 0;
+    explicit DeclarativeLayoutExtension(LayoutContainerInterface *layoutContainer, QObject *parent = 0);
 };
 
 #endif // DECLARATIVELAYOUTEXTENSION_H
index f6e730f..de67343 100644 (file)
 */
 
 #include "declarativeobjectextension.h"
+#include "defaultobjectcontainer_p.h"
 
 DeclarativeObjectExtension::DeclarativeObjectExtension(QObject *parent)
   : QObject(parent)
+  , m_objectContainer(new DefaultObjectContainer)
 {
 }
 
 DeclarativeObjectExtension::~DeclarativeObjectExtension()
 {
+    delete m_objectContainer;
+}
+
+DeclarativeObjectExtension::DeclarativeObjectExtension(ObjectContainerInterface *objectContainer, QObject *parent)
+  : QObject(parent)
+  , m_objectContainer(objectContainer)
+{
 }
 
 QDeclarativeListProperty<QObject> DeclarativeObjectExtension::data()
@@ -37,34 +46,14 @@ QDeclarativeListProperty<QObject> DeclarativeObjectExtension::data()
                                                     DeclarativeObjectExtension::data_clear);
 }
 
-void DeclarativeObjectExtension::dataAppend(QObject *object)
-{
-  m_children.append(object);
-}
-
-int DeclarativeObjectExtension::dataCount() const
-{
-  return m_children.count();
-}
-
-QObject* DeclarativeObjectExtension::dataAt(int index) const
-{
-  return m_children.at(index);
-}
-
-void DeclarativeObjectExtension::dataClear()
-{
-  m_children.clear();
-}
-
 void DeclarativeObjectExtension::data_append(QDeclarativeListProperty<QObject> *property, QObject *object)
 {
   if (!object)
     return;
 
   DeclarativeObjectExtension *that = qobject_cast<DeclarativeObjectExtension*>(property->object);
-  if (that)
-    that->dataAppend(object);
+  if (that && that->m_objectContainer)
+    that->m_objectContainer->dataAppend(object);
   else
     qWarning("cast went wrong in data_append");
 }
@@ -72,8 +61,8 @@ void DeclarativeObjectExtension::data_append(QDeclarativeListProperty<QObject> *
 int DeclarativeObjectExtension::data_count(QDeclarativeListProperty<QObject> *property)
 {
   DeclarativeObjectExtension *that = qobject_cast<DeclarativeObjectExtension*>(property->object);
-  if (that)
-    return that->dataCount();
+  if (that && that->m_objectContainer)
+    return that->m_objectContainer->dataCount();
   else {
     qWarning("cast went wrong in data_count");
     return 0;
@@ -83,8 +72,8 @@ int DeclarativeObjectExtension::data_count(QDeclarativeListProperty<QObject> *pr
 QObject* DeclarativeObjectExtension::data_at(QDeclarativeListProperty<QObject> *property, int index)
 {
   DeclarativeObjectExtension *that = qobject_cast<DeclarativeObjectExtension*>(property->object);
-  if (that)
-    return that->dataAt(index);
+  if (that && that->m_objectContainer)
+    return that->m_objectContainer->dataAt(index);
   else {
     qWarning("cast went wrong in data_at");
     return 0;
@@ -94,8 +83,8 @@ QObject* DeclarativeObjectExtension::data_at(QDeclarativeListProperty<QObject> *
 void DeclarativeObjectExtension::data_clear(QDeclarativeListProperty<QObject> *property)
 {
   DeclarativeObjectExtension *that = qobject_cast<DeclarativeObjectExtension*>(property->object);
-  if (that)
-    that->dataClear();
+  if (that && that->m_objectContainer)
+    that->m_objectContainer->dataClear();
   else
     qWarning("cast went wrong in data_clear");
 }
index 326bffa..4d6828b 100644 (file)
@@ -24,6 +24,8 @@
 #include <QDeclarativeListProperty>
 #include <QObject>
 
+class ObjectContainerInterface;
+
 class DeclarativeObjectExtension : public QObject
 {
   Q_OBJECT
@@ -39,12 +41,9 @@ class DeclarativeObjectExtension : public QObject
     QObject *extendedObject() const { return parent(); }
 
   protected:
-    QObjectList m_children;
+    ObjectContainerInterface *m_objectContainer;
 
-    virtual void dataAppend(QObject *object);
-    virtual int dataCount() const;
-    virtual QObject *dataAt(int index) const;
-    virtual void dataClear();
+    explicit DeclarativeObjectExtension(ObjectContainerInterface *objectContainer, QObject *parent = 0);
 
     QDeclarativeListProperty<QObject> data();
 
index 9fc8bc3..63b2722 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "declarativestackedlayout_p.h"
 
+#include "layoutcontainerinterface_p.h"
+
 #include <QDeclarativeInfo>
 #include <QWidget>
 
@@ -29,8 +31,24 @@ DeclarativeStackedLayout::DeclarativeStackedLayout(QObject *parent)
   setParent(qobject_cast<QWidget*>(parent));
 }
 
+class StackedLayoutContainer : public LayoutContainerInterface
+{
+  public:
+    explicit StackedLayoutContainer(QStackedLayout *layout)
+      : m_layout(layout)
+    {
+      Q_ASSERT(m_layout);
+    }
+
+    void addLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QStackedLayout *m_layout;
+};
+
 DeclarativeStackedLayoutExtension::DeclarativeStackedLayoutExtension(QObject *parent)
-  : DeclarativeLayoutExtension(parent)
+  : DeclarativeLayoutExtension(new StackedLayoutContainer(qobject_cast<QStackedLayout*>(parent)), parent)
 {
 }
 
@@ -42,12 +60,12 @@ int DeclarativeStackedLayoutExtension::count() const
   return stackedLayout->count();
 }
 
-void DeclarativeStackedLayoutExtension::addWidget(QWidget *widget)
+void StackedLayoutContainer::addWidget(QWidget *widget)
 {
-  extendedLayout()->addWidget(widget);
+  m_layout->addWidget(widget);
 }
 
-void DeclarativeStackedLayoutExtension::addLayout(QLayout*)
+void StackedLayoutContainer::addLayout(QLayout*)
 {
-  qmlInfo(extendedLayout()) << "StackedLayout does not support child layouts";
+  qmlInfo(m_layout) << "StackedLayout does not support child layouts";
 }
index c05a209..dace3ce 100644 (file)
@@ -48,10 +48,6 @@ class DeclarativeStackedLayoutExtension : public DeclarativeLayoutExtension
     explicit DeclarativeStackedLayoutExtension(QObject *parent = 0);
 
     int count() const;
-
-  protected:
-    void addWidget(QWidget *widget);
-    void addLayout(QLayout *layout);
 };
 
 #endif
index 7532f51..bfd1104 100644 (file)
@@ -63,20 +63,13 @@ DeclarativeStatusBarAttached *DeclarativeStatusBar::qmlAttachedProperties(QObjec
   return new DeclarativeStatusBarAttached(object);
 }
 
-DeclarativeStatusBarExtension::DeclarativeStatusBarExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+StatusBarWidgetContainer::StatusBarWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QStatusBar*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QStatusBar *DeclarativeStatusBarExtension::extendedStatusBar() const
-{
-  QStatusBar *statusBar = qobject_cast<QStatusBar*>(extendedWidget());
-  Q_ASSERT(statusBar);
-
-  return statusBar;
-}
-
-void DeclarativeStatusBarExtension::addWidget(QWidget *widget)
+void StatusBarWidgetContainer::addWidget(QWidget *widget)
 {
   // TODO: error when layout is set
 
@@ -91,8 +84,13 @@ void DeclarativeStatusBarExtension::addWidget(QWidget *widget)
   extendedStatusBar()->addPermanentWidget(widget, stretch);
 }
 
-void DeclarativeStatusBarExtension::setLayout(QLayout *layout)
+void StatusBarWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(extendedStatusBar()) << "Can not add Layout to StatusBar";
+  qmlInfo(m_widget) << "Can not add Layout to StatusBar";
+}
+
+QStatusBar *StatusBarWidgetContainer::extendedStatusBar() const
+{
+  return static_cast<QStatusBar*>(m_widget);
 }
index 2665fe4..f3b601a 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef DECLARATIVESTATUSBAR_P_H
 #define DECLARATIVESTATUSBAR_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
 #include <qdeclarative.h>
 #include <QStatusBar>
@@ -59,23 +59,16 @@ class DeclarativeStatusBar : public QStatusBar
 
 QML_DECLARE_TYPEINFO(DeclarativeStatusBar, QML_HAS_ATTACHED_PROPERTIES)
 
-class DeclarativeStatusBarExtension : public DeclarativeWidgetExtension
+class StatusBarWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeStatusBarExtension(QObject *parent = 0);
-
-    QStatusBar *extendedStatusBar() const;
+    explicit StatusBarWidgetContainer(QObject *parent = 0);
 
-  protected:
-    void addWidget(QWidget *widget);
     void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QStatusBar *extendedStatusBar() const;
 };
 
 #endif
index 86af482..4ad1e04 100644 (file)
@@ -91,15 +91,15 @@ DeclarativeTabWidgetAttached *DeclarativeTabWidget::qmlAttachedProperties(QObjec
   return new DeclarativeTabWidgetAttached(object);
 }
 
-DeclarativeTabWidgetExtension::DeclarativeTabWidgetExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+TabWidgetWidgetContainer::TabWidgetWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QTabWidget*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-void DeclarativeTabWidgetExtension::addWidget(QWidget *widget)
+void TabWidgetWidgetContainer::addWidget(QWidget *widget)
 {
-  QTabWidget *tabWidget = qobject_cast<QTabWidget*>(extendedWidget());
-  Q_ASSERT(tabWidget);
+  QTabWidget *tabWidget = extendedTabWidget();
 
   // TODO: error when layout is set
 
@@ -118,8 +118,13 @@ void DeclarativeTabWidgetExtension::addWidget(QWidget *widget)
     tabHeader->setAssociation(tabWidget, index);
 }
 
-void DeclarativeTabWidgetExtension::setLayout(QLayout *layout)
+void TabWidgetWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(extendedWidget()) << "Can not add QLayout to QTabWidget";
+  qmlInfo(m_widget) << "Can not add QLayout to QTabWidget";
+}
+
+QTabWidget *TabWidgetWidgetContainer::extendedTabWidget() const
+{
+  return static_cast<QTabWidget*>(m_widget);
 }
index 16638d6..7c7ed16 100644 (file)
@@ -21,7 +21,7 @@
 #ifndef DECLARATIVETABWIDGET_P_H
 #define DECLARATIVETABWIDGET_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
 #include <qdeclarative.h>
 #include <QTabWidget>
@@ -66,21 +66,15 @@ class DeclarativeTabWidget : public QTabWidget
 
 QML_DECLARE_TYPEINFO(DeclarativeTabWidget, QML_HAS_ATTACHED_PROPERTIES)
 
-class DeclarativeTabWidgetExtension : public DeclarativeWidgetExtension
+class TabWidgetWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeTabWidgetExtension(QObject *parent = 0);
-
-  protected:
-    void addWidget(QWidget *widget);
+    explicit TabWidgetWidgetContainer(QObject *parent = 0);
     void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QTabWidget *extendedTabWidget() const;
 };
 
 #endif
index 50e2d4e..f7aee7e 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "declarativevboxlayout_p.h"
 
+#include "layoutcontainerinterface_p.h"
+
 #include <QDeclarativeInfo>
 #include <QWidget>
 
@@ -43,16 +45,30 @@ DeclarativeBoxLayoutAttached *DeclarativeVBoxLayout::qmlAttachedProperties(QObje
   return 0;
 }
 
+class VBoxLayoutContainer : public LayoutContainerInterface
+{
+  public:
+    explicit VBoxLayoutContainer(QVBoxLayout *layout)
+      : m_layout(layout)
+    {
+      Q_ASSERT(m_layout);
+    }
+
+    void addLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QVBoxLayout *m_layout;
+};
+
+
 DeclarativeVBoxLayoutExtension::DeclarativeVBoxLayoutExtension(QObject *parent)
-  : DeclarativeLayoutExtension(parent)
+  : DeclarativeLayoutExtension(new VBoxLayoutContainer(qobject_cast<QVBoxLayout*>(parent)), parent)
 {
 }
 
-void DeclarativeVBoxLayoutExtension::addWidget(QWidget *widget)
+void VBoxLayoutContainer::addWidget(QWidget *widget)
 {
-  QVBoxLayout *vboxLayout = qobject_cast<QVBoxLayout*>(extendedLayout());
-  Q_ASSERT(vboxLayout);
-
   int stretch = 0;
   Qt::Alignment alignment = 0;
 
@@ -62,17 +78,14 @@ void DeclarativeVBoxLayoutExtension::addWidget(QWidget *widget)
     stretch = properties->stretch();
     alignment = properties->alignment();
 
-    properties->setParentLayout(vboxLayout);
+    properties->setParentLayout(m_layout);
   }
 
-  vboxLayout->addWidget(widget, stretch, alignment);
+  m_layout->addWidget(widget, stretch, alignment);
 }
 
-void DeclarativeVBoxLayoutExtension::addLayout(QLayout *layout)
+void VBoxLayoutContainer::addLayout(QLayout *layout)
 {
-  QVBoxLayout *vboxLayout = qobject_cast<QVBoxLayout*>(extendedLayout());
-  Q_ASSERT(vboxLayout);
-
   int stretch = 0;
   Qt::Alignment alignment = 0;
 
@@ -82,9 +95,9 @@ void DeclarativeVBoxLayoutExtension::addLayout(QLayout *layout)
     stretch = properties->stretch();
     alignment = properties->alignment();
 
-    properties->setParentLayout(vboxLayout);
+    properties->setParentLayout(m_layout);
   }
 
-  vboxLayout->addLayout(layout, stretch);
-  vboxLayout->setAlignment(layout, alignment);
+  m_layout->addLayout(layout, stretch);
+  m_layout->setAlignment(layout, alignment);
 }
index 7913a1c..540f2d0 100644 (file)
@@ -50,10 +50,6 @@ class DeclarativeVBoxLayoutExtension : public DeclarativeLayoutExtension
 
   public:
     explicit DeclarativeVBoxLayoutExtension(QObject *parent = 0);
-
-  protected:
-    void addWidget(QWidget *widget);
-    void addLayout(QLayout *layout);
 };
 
 #endif
index bb39dae..e4fd483 100644 (file)
 #include "declarativewidgetextension.h"
 
 #include "declarativeactionitem_p.h"
+#include "defaultobjectcontainer_p.h"
+#include "defaultwidgetcontainer.h"
 #include "objectadaptors_p.h"
+#include "widgetcontainerinterface_p.h"
 
 #include <QAction>
 #include <QDeclarativeInfo>
 #include <QLayout>
 #include <QWidget>
 
+class WidgetContainerDelegate : public DefaultObjectContainer
+{
+  public:
+    explicit WidgetContainerDelegate(WidgetContainerInterface *widgetContainer)
+      : m_widgetContainer(widgetContainer)
+    {
+    }
+
+    ~WidgetContainerDelegate()
+    {
+      delete m_widgetContainer;
+    }
+
+    void dataAppend(QObject *object)
+    {
+      DefaultObjectContainer::dataAppend(object);
+
+      QWidget *widget = qobject_cast<QWidget*>(object);
+      if (widget) {
+
+        // restore widget flags for dialogs, menus
+        const QVariant originalWindowFlags = widget->property("originalWindowFlags");
+        if (originalWindowFlags.isValid() && originalWindowFlags.canConvert<Qt::WindowFlags>()) {
+          widget->setParent(widget->parentWidget(), originalWindowFlags.value<Qt::WindowFlags>());
+        }
+
+        m_widgetContainer->addWidget(widget);
+        return;
+      }
+
+      QLayout *layout = qobject_cast<QLayout*>(object);
+      if (layout) {
+        m_widgetContainer->setLayout(layout);
+        return;
+      }
+
+      QAction *action = qobject_cast<QAction*>(object);
+      if (action) {
+        m_widgetContainer->addAction(action);
+        return;
+      }
+
+      DeclarativeActionItem *actionItem = qobject_cast<DeclarativeActionItem*>(object);
+      if (actionItem) {
+        m_widgetContainer->addAction(actionItem->action());
+        return;
+      }
+    }
+
+  private:
+    WidgetContainerInterface *m_widgetContainer;
+};
+
 DeclarativeWidgetExtension::DeclarativeWidgetExtension(QObject *parent)
-  : DeclarativeObjectExtension(parent)
+  : DeclarativeObjectExtension(new WidgetContainerDelegate(new DefaultWidgetContainer(qobject_cast<QWidget*>(parent))), parent)
 {
   parent->installEventFilter(this);
 }
@@ -151,58 +207,8 @@ bool DeclarativeWidgetExtension::eventFilter(QObject *watched, QEvent *event)
   return false;
 }
 
-void DeclarativeWidgetExtension::dataAppend(QObject *object)
-{
-  DeclarativeObjectExtension::dataAppend(object);
-
-  QWidget *widget = qobject_cast<QWidget*>(object);
-  if (widget) {
-
-    // restore widget flags for dialogs, menus
-    const QVariant originalWindowFlags = widget->property("originalWindowFlags");
-    if (originalWindowFlags.isValid() && originalWindowFlags.canConvert<Qt::WindowFlags>()) {
-      widget->setParent(widget->parentWidget(), originalWindowFlags.value<Qt::WindowFlags>());
-    }
-
-    addWidget(widget);
-    return;
-  }
-
-  QLayout *layout = qobject_cast<QLayout*>(object);
-  if (layout) {
-    setLayout(layout);
-    return;
-  }
-
-  QAction *action = qobject_cast<QAction*>(object);
-  if (action) {
-    addAction(action);
-    return;
-  }
-
-  DeclarativeActionItem *actionItem = qobject_cast<DeclarativeActionItem*>(object);
-  if (actionItem) {
-    addAction(actionItem->action());
-    return;
-  }
-}
-
-void DeclarativeWidgetExtension::addAction(QAction *action)
-{
-  extendedWidget()->addAction(action);
-}
-
-void DeclarativeWidgetExtension::setLayout(QLayout *layout)
+DeclarativeWidgetExtension::DeclarativeWidgetExtension(WidgetContainerInterface *widgetContainer, QObject *parent)
+  : DeclarativeObjectExtension(new WidgetContainerDelegate(widgetContainer), parent)
 {
-  if (extendedWidget()->layout()){
-    qmlInfo(this) << "Cannot add a second layout";
-    return;
-  }
-
-  extendedWidget()->setLayout(layout);
-}
-
-void DeclarativeWidgetExtension::addWidget(QWidget *widget)
-{
-  widget->setParent(extendedWidget());
+  parent->installEventFilter(this);
 }
index 967422e..b849380 100644 (file)
@@ -25,6 +25,8 @@
 
 #include <QRect>
 
+class WidgetContainerInterface;
+
 class QAction;
 class QLayout;
 class QWidget;
@@ -45,7 +47,7 @@ class DeclarativeWidgetExtension : public DeclarativeObjectExtension
   Q_CLASSINFO("DefaultProperty", "data")
 
   public:
-    DeclarativeWidgetExtension(QObject *parent);
+    explicit DeclarativeWidgetExtension(QObject *parent = 0);
 
     QWidget *extendedWidget() const;
 
@@ -66,17 +68,13 @@ class DeclarativeWidgetExtension : public DeclarativeObjectExtension
 
     bool eventFilter(QObject *watched, QEvent *event);
 
+  protected:
+    explicit DeclarativeWidgetExtension(WidgetContainerInterface *widgetContainer, QObject *parent = 0);
+
   Q_SIGNALS:
     void posChanged();
     void sizeChanged();
     void geometryChanged();
-
-  protected:
-    void dataAppend(QObject *object);
-
-    virtual void addAction(QAction *action);
-    virtual void setLayout(QLayout *layout);
-    virtual void addWidget(QWidget *widget);
 };
 
 #endif // DECLARATIVEWIDGETEXTENSION_H
index b32929f..11f8831 100644 (file)
@@ -26,6 +26,7 @@
 #include "declarativebuttongroupextension_p.h"
 #include "declarativecolordialog_p.h"
 #include "declarativecomboboxextension_p.h"
+#include "declarativecontainerwidgetextension_p.h"
 #include "declarativedeclarativecontext_p.h"
 #include "declarativedeclarativeviewextension_p.h"
 #include "declarativefiledialog_p.h"
 #include "declarativehboxlayout_p.h"
 #include "declarativeinputdialog_p.h"
 #include "declarativeitemviewextension_p.h"
-#include "declarativemainwindowextension_p.h"
-#include "declarativemenubarextension_p.h"
-#include "declarativemenuextension_p.h"
 #include "declarativemessagebox_p.h"
-#include "declarativescrollareaextension_p.h"
 #include "declarativeseparator_p.h"
 #include "declarativestackedlayout_p.h"
-#include "declarativestackedwidgetextension_p.h"
 #include "declarativestatusbar_p.h"
 #include "declarativestringlistmodelextension_p.h"
 #include "declarativetabwidget_p.h"
 #include "declarativetexteditextension_p.h"
-#include "declarativetoolbarextension_p.h"
 #include "declarativevboxlayout_p.h"
 #include "declarativewidgetextension.h"
+#include "mainwindowwidgetcontainer_p.h"
+#include "menubarwidgetcontainer_p.h"
+#include "menuwidgetcontainer_p.h"
+#include "scrollareawidgetcontainer_p.h"
+#include "stackedwidgetwidgetcontainer_p.h"
+#include "toolbarwidgetcontainer_p.h"
 
 #include <QButtonGroup>
 #include <QCalendarWidget>
@@ -155,26 +156,26 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject
   qmlRegisterExtendedType<QLineEdit, DeclarativeWidgetExtension>("QtGui", 1, 0, "LineEdit");
   qmlRegisterExtendedType<QLCDNumber, DeclarativeWidgetExtension>("QtGui", 1, 0, "LCDNumber");
   qmlRegisterExtendedType<QListView, DeclarativeItemViewExtension>("QtGui", 1, 0, "ListView");
-  qmlRegisterExtendedType<QMainWindow, DeclarativeMainWindowExtension>("QtGui", 1, 0, "MainWindow");
-  qmlRegisterExtendedType<Menu, DeclarativeMenuExtension>("QtGui", 1, 0, "Menu");
-  qmlRegisterExtendedType<QMenuBar, DeclarativeMenuBarExtension>("QtGui", 1, 0, "MenuBar");
+  qmlRegisterExtendedType<QMainWindow, DeclarativeContainerWidgetExtension<MainWindowWidgetContainer> >("QtGui", 1, 0, "MainWindow");
+  qmlRegisterExtendedType<Menu, DeclarativeContainerWidgetExtension<MenuWidgetContainer> >("QtGui", 1, 0, "Menu");
+  qmlRegisterExtendedType<QMenuBar, DeclarativeContainerWidgetExtension<MenuBarWidgetContainer> >("QtGui", 1, 0, "MenuBar");
   qmlRegisterExtendedType<DeclarativeMessageBox, DeclarativeWidgetExtension>("QtGui", 1, 0, "MessageBox");
   qmlRegisterExtendedType<QPlainTextEdit, DeclarativeWidgetExtension>("QtGui", 1, 0, "PlainTextEdit");
   qmlRegisterExtendedType<QProgressBar, DeclarativeWidgetExtension>("QtGui", 1, 0, "ProgressBar");
   qmlRegisterExtendedType<QPushButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "PushButton");
   qmlRegisterExtendedType<QRadioButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "RadioButton");
-  qmlRegisterExtendedType<QScrollArea, DeclarativeScrollAreaExtension>("QtGui", 1, 0, "ScrollArea");
+  qmlRegisterExtendedType<QScrollArea, DeclarativeContainerWidgetExtension<ScrollAreaWidgetContainer> >("QtGui", 1, 0, "ScrollArea");
   qmlRegisterExtendedType<QScrollBar, DeclarativeWidgetExtension>("QtGui", 1, 0, "ScrollBar");
   qmlRegisterExtendedType<QSlider, DeclarativeWidgetExtension>("QtGui", 1, 0, "Slider");
-  qmlRegisterExtendedType<QStackedWidget, DeclarativeStackedWidgetExtension>("QtGui", 1, 0, "StackedWidget");
+  qmlRegisterExtendedType<QStackedWidget, DeclarativeContainerWidgetExtension<StackedWidgetWidgetContainer> >("QtGui", 1, 0, "StackedWidget");
   qmlRegisterExtendedType<QSpinBox, DeclarativeWidgetExtension>("QtGui", 1, 0, "SpinBox");
-  qmlRegisterExtendedType<DeclarativeStatusBar, DeclarativeStatusBarExtension>("QtGui", 1, 0, "StatusBar");
+  qmlRegisterExtendedType<DeclarativeStatusBar, DeclarativeContainerWidgetExtension<StatusBarWidgetContainer> >("QtGui", 1, 0, "StatusBar");
   qmlRegisterExtendedType<QTableView, DeclarativeItemViewExtension>("QtGui", 1, 0, "TableView");
-  qmlRegisterExtendedType<DeclarativeTabWidget, DeclarativeTabWidgetExtension>("QtGui", 1, 0, "TabWidget");
+  qmlRegisterExtendedType<DeclarativeTabWidget, DeclarativeContainerWidgetExtension<TabWidgetWidgetContainer> >("QtGui", 1, 0, "TabWidget");
   qmlRegisterExtendedType<QTextBrowser, DeclarativeTextEditExtension>("QtGui", 1, 0, "TextBrowser");
   qmlRegisterExtendedType<QTextEdit, DeclarativeTextEditExtension>("QtGui", 1, 0, "TextEdit");
   qmlRegisterExtendedType<QTimeEdit, DeclarativeWidgetExtension>("QtGui", 1, 0, "TimeEdit");
-  qmlRegisterExtendedType<QToolBar, DeclarativeToolBarExtension>("QtGui", 1, 0, "ToolBar");
+  qmlRegisterExtendedType<QToolBar, DeclarativeContainerWidgetExtension<ToolBarWidgetContainer> >("QtGui", 1, 0, "ToolBar");
   qmlRegisterExtendedType<QToolButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "ToolButton");
   qmlRegisterExtendedType<QTreeView, DeclarativeItemViewExtension>("QtGui", 1, 0, "TreeView");
   qmlRegisterExtendedType<QWebView, DeclarativeWidgetExtension>("QtGui", 1, 0, "WebView");
similarity index 57%
copy from lib/declarativemenuextension_p.h
copy to lib/defaultobjectcontainer.cpp
index 0c2be3f..755708a 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#include "defaultobjectcontainer_p.h"
 
-#include "declarativewidgetextension.h"
-
-class QMenu;
-
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+DefaultObjectContainer::DefaultObjectContainer()
 {
-  Q_OBJECT
+}
 
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
+DefaultObjectContainer::~DefaultObjectContainer()
+{
+}
 
-  Q_CLASSINFO("DefaultProperty", "data")
+void DefaultObjectContainer::dataAppend(QObject *object)
+{
+  m_children.append(object);
+}
 
-  public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
+int DefaultObjectContainer::dataCount() const
+{
+  return m_children.count();
+}
 
-    QMenu *extendedMenu() const;
+QObject* DefaultObjectContainer::dataAt(int index) const
+{
+  return m_children.at(index);
+}
 
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
-};
+void DefaultObjectContainer::dataClear()
+{
+  m_children.clear();
+}
 
-#endif
similarity index 58%
copy from lib/declarativemenuextension_p.h
copy to lib/defaultobjectcontainer_p.h
index 0c2be3f..5fb13aa 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef DEFAULTOBJECTCONTAINER_P_H
+#define DEFAULTOBJECTCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "objectcontainerinterface_p.h"
 
-class QMenu;
+#include <QObject>
 
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+class DefaultObjectContainer : public ObjectContainerInterface
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
+    DefaultObjectContainer();
+    ~DefaultObjectContainer();
 
-    QMenu *extendedMenu() const;
+    void dataAppend(QObject *object);
+    int dataCount() const;
+    QObject *dataAt(int index) const ;
+    void dataClear();
 
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
+  private:
+    QObjectList m_children;
 };
 
-#endif
+#endif // DEFAULTOBJECTCONTAINER_P_H
similarity index 58%
copy from lib/declarativestackedwidgetextension.cpp
copy to lib/defaultwidgetcontainer.cpp
index 97b6011..2c346cf 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativestackedwidgetextension_p.h"
+#include "defaultwidgetcontainer.h"
 
 #include <QDeclarativeInfo>
-#include <QStackedWidget>
+#include <QLayout>
+#include <QWidget>
 
-DeclarativeStackedWidgetExtension::DeclarativeStackedWidgetExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+DefaultWidgetContainer::DefaultWidgetContainer(QWidget *widget)
+  : m_widget(widget)
 {
+  Q_ASSERT(m_widget);
 }
 
-QStackedWidget *DeclarativeStackedWidgetExtension::extendedStackedWidget() const
+DefaultWidgetContainer::~DefaultWidgetContainer()
 {
-  QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(extendedWidget());
-  Q_ASSERT(stackedWidget);
+}
 
-  return stackedWidget;
+void DefaultWidgetContainer::addAction(QAction *action)
+{
+  m_widget->addAction(action);
 }
 
-void DeclarativeStackedWidgetExtension::addWidget(QWidget *widget)
+void DefaultWidgetContainer::setLayout(QLayout *layout)
 {
-  extendedStackedWidget()->addWidget(widget);
+  if (m_widget->layout()) {
+    qmlInfo(m_widget) << "Cannot add a second layout";
+    return;
+  }
+
+  m_widget->setLayout(layout);
 }
 
-void DeclarativeStackedWidgetExtension::setLayout(QLayout*)
+void DefaultWidgetContainer::addWidget(QWidget *widget)
 {
-  qmlInfo(extendedStackedWidget()) << "StackedWidget does not support child layouts";
+  widget->setParent(m_widget);
 }
similarity index 66%
copy from lib/declarativemenuextension_p.h
copy to lib/defaultwidgetcontainer.h
index 0c2be3f..62afb01 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef DEFAULTWIDGETCONTAINER_H
+#define DEFAULTWIDGETCONTAINER_H
 
-#include "declarativewidgetextension.h"
+#include "widgetcontainerinterface_p.h"
 
-class QMenu;
-
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+class DefaultWidgetContainer : public WidgetContainerInterface
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
+    explicit DefaultWidgetContainer(QWidget *widget);
+    ~DefaultWidgetContainer();
 
-    QMenu *extendedMenu() const;
+    void addAction(QAction *action);
+    void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
 
   protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
+    QWidget *const m_widget;
 };
 
-#endif
+#endif // DEFAULTWIDGETCONTAINER_H
similarity index 58%
copy from lib/declarativemenuextension_p.h
copy to lib/layoutcontainerinterface_p.h
index 0c2be3f..ef06470 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef LAYOUTCONTAINERINTERFACE_P_H
+#define LAYOUTCONTAINERINTERFACE_P_H
 
-#include "declarativewidgetextension.h"
+class QLayout;
+class QWidget;
 
-class QMenu;
-
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+class LayoutContainerInterface
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
-
-    QMenu *extendedMenu() const;
+    virtual ~LayoutContainerInterface() = 0;
 
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
+    virtual void addLayout(QLayout *layout) = 0;
+    virtual void addWidget(QWidget *widget) = 0;
 };
 
-#endif
+#endif // LAYOUTCONTAINERINTERFACE_P_H
index 8892391..bdace05 100644 (file)
@@ -12,6 +12,7 @@ HEADERS = \
   declarativebuttongroupextension_p.h \
   declarativecolordialog_p.h \
   declarativecomboboxextension_p.h \
+  declarativecontainerwidgetextension_p.h \
   declarativedeclarativecontext_p.h \
   declarativedeclarativeviewextension_p.h \
   declarativefiledialog_p.h \
@@ -23,27 +24,32 @@ HEADERS = \
   declarativeinputdialog_p.h \
   declarativeitemviewextension_p.h \
   declarativelayoutextension.h \
-  declarativemainwindowextension_p.h \
-  declarativemenubarextension_p.h \
-  declarativemenuextension_p.h \
   declarativemessagebox_p.h \
   declarativeobjectextension.h \
   declarativeobjectproxy_p.h \
-  declarativescrollareaextension_p.h \
   declarativeseparator_p.h \
   declarativestackedlayout_p.h \
-  declarativestackedwidgetextension_p.h \
   declarativestatusbar_p.h \
   declarativestringlistmodelextension_p.h \
   declarativetabwidget_p.h \
   declarativetexteditextension_p.h \
-  declarativetoolbarextension_p.h \
   declarativevboxlayout_p.h \
   declarativewidgetextension.h \
   declarativewidgetsdocument.h \
+  defaultobjectcontainer_p.h \
+  defaultwidgetcontainer.h \
+  layoutcontainerinterface_p.h \
+  mainwindowwidgetcontainer_p.h \
+  menubarwidgetcontainer_p.h \
+  menuwidgetcontainer_p.h \
   objectadaptors_p.h \
+  objectcontainerinterface_p.h \
   qmetaobjectbuilder_p.h \
-  staticdialogmethodattached_p.h
+  scrollareawidgetcontainer_p.h \
+  stackedwidgetwidgetcontainer_p.h \
+  staticdialogmethodattached_p.h \
+  toolbarwidgetcontainer_p.h \
+  widgetcontainerinterface_p.h
 
 SOURCES = \
   abstractdeclarativeobject.cpp \
@@ -64,23 +70,25 @@ SOURCES = \
   declarativeinputdialog.cpp \
   declarativeitemviewextension.cpp \
   declarativelayoutextension.cpp \
-  declarativemainwindowextension.cpp \
-  declarativemenubarextension.cpp \
-  declarativemenuextension.cpp \
   declarativemessagebox.cpp \
   declarativeobjectextension.cpp \
-  declarativescrollareaextension.cpp \
   declarativeseparator.cpp \
   declarativestackedlayout.cpp \
-  declarativestackedwidgetextension.cpp \
   declarativestatusbar.cpp \
   declarativestringlistmodelextension.cpp \
   declarativetabwidget.cpp \
   declarativetexteditextension.cpp \
-  declarativetoolbarextension.cpp \
   declarativevboxlayout.cpp \
   declarativewidgetextension.cpp \
   declarativewidgetsdocument.cpp \
+  defaultobjectcontainer.cpp \
+  defaultwidgetcontainer.cpp \
+  mainwindowwidgetcontainer.cpp \
+  menubarwidgetcontainer.cpp \
+  menuwidgetcontainer.cpp \
   objectadaptors.cpp \
   qmetaobjectbuilder.cpp \
-  staticdialogmethodattached.cpp
+  scrollareawidgetcontainer.cpp \
+  stackedwidgetwidgetcontainer.cpp \
+  staticdialogmethodattached.cpp \
+  toolbarwidgetcontainer.cpp
similarity index 73%
rename from lib/declarativemainwindowextension.cpp
rename to lib/mainwindowwidgetcontainer.cpp
index a39a564..98f849d 100644 (file)
@@ -18,7 +18,7 @@
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativemainwindowextension_p.h"
+#include "mainwindowwidgetcontainer_p.h"
 
 #include <QDeclarativeInfo>
 #include <QDialog>
 #include <QStatusBar>
 #include <QToolBar>
 
-DeclarativeMainWindowExtension::DeclarativeMainWindowExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+MainWindowWidgetContainer::MainWindowWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QMainWindow*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QMainWindow *DeclarativeMainWindowExtension::extendedMainWindow() const
-{
-  QMainWindow *mainWindow = qobject_cast<QMainWindow*>(extendedWidget());
-  Q_ASSERT(mainWindow);
-
-  return mainWindow;
-}
-
-void DeclarativeMainWindowExtension::addWidget(QWidget *widget)
+void MainWindowWidgetContainer::addWidget(QWidget *widget)
 {
   QMenuBar *menuBar = qobject_cast<QMenuBar*>(widget);
   QToolBar *toolBar = qobject_cast<QToolBar*>(widget);
@@ -58,7 +51,7 @@ void DeclarativeMainWindowExtension::addWidget(QWidget *widget)
     dialog->setParent(extendedMainWindow(), dialog->windowFlags());
   } else if (widget) {
     if (extendedMainWindow()->centralWidget()) {
-      qmlInfo(extendedMainWindow()) << "The MainWindow already contains a central widget";
+      qmlInfo(m_widget) << "The MainWindow already contains a central widget";
       return;
     }
 
@@ -66,8 +59,13 @@ void DeclarativeMainWindowExtension::addWidget(QWidget *widget)
   }
 }
 
-void DeclarativeMainWindowExtension::setLayout(QLayout *layout)
+void MainWindowWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(this) << "Can not set a Layout to a MainWindow";
+  qmlInfo(m_widget) << "Can not set a Layout to a MainWindow";
+}
+
+QMainWindow *MainWindowWidgetContainer::extendedMainWindow() const
+{
+  return static_cast<QMainWindow*>(m_widget);
 }
similarity index 67%
rename from lib/declarativemainwindowextension_p.h
rename to lib/mainwindowwidgetcontainer_p.h
index dd68886..003b9ec 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMAINWINDOWEXTENSION_P_H
-#define DECLARATIVEMAINWINDOWEXTENSION_P_H
+#ifndef MAINWINDOWWIDGETCONTAINER_P_H
+#define MAINWINDOWWIDGETCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
 class QMainWindow;
+class QObject;
 
-class DeclarativeMainWindowExtension : public DeclarativeWidgetExtension
+class MainWindowWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMainWindowExtension(QObject *parent = 0);
-
-    QMainWindow *extendedMainWindow() const;
+    explicit MainWindowWidgetContainer(QObject *parent = 0);
 
-  protected:
-    void addWidget(QWidget *widget);
     void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QMainWindow *extendedMainWindow() const;
 };
 
 #endif
similarity index 63%
rename from lib/declarativemenubarextension.cpp
rename to lib/menubarwidgetcontainer.cpp
index 14a98ff..e5698d5 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativemenubarextension_p.h"
+#include "menubarwidgetcontainer_p.h"
 
 #include <QDeclarativeInfo>
 #include <QMenuBar>
 
-DeclarativeMenuBarExtension::DeclarativeMenuBarExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+MenuBarWidgetContainer::MenuBarWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QMenuBar*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QMenuBar *DeclarativeMenuBarExtension::extendedMenuBar() const
-{
-  QMenuBar *menuBar = qobject_cast<QMenuBar*>(extendedWidget());
-  Q_ASSERT(menuBar);
-
-  return menuBar;
-}
-
-void DeclarativeMenuBarExtension::addWidget(QWidget *widget)
+void MenuBarWidgetContainer::addWidget(QWidget *widget)
 {
   QMenu *menu = qobject_cast<QMenu*>(widget);
   if (!menu) {
-    qmlInfo(extendedMenuBar()) << "The MenuBar can only contain Menus";
+    qmlInfo(m_widget) << "The MenuBar can only contain Menus";
     return;
   }
 
   extendedMenuBar()->addMenu(menu);
 }
 
-void DeclarativeMenuBarExtension::setLayout(QLayout *layout)
+void MenuBarWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(extendedMenuBar()) << "Can not set a Layout to a MenuBar";
+  qmlInfo(m_widget) << "Can not set a Layout to a MenuBar";
 }
 
-void DeclarativeMenuBarExtension::addAction(QAction *action)
+void MenuBarWidgetContainer::addAction(QAction *action)
 {
   extendedMenuBar()->addAction(action);
 }
+
+QMenuBar *MenuBarWidgetContainer::extendedMenuBar() const
+{
+  return static_cast<QMenuBar*>(m_widget);
+}
similarity index 68%
rename from lib/declarativemenubarextension_p.h
rename to lib/menubarwidgetcontainer_p.h
index dc94ef0..65ca37a 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUBAREXTENSION_P_H
-#define DECLARATIVEMENUBAREXTENSION_P_H
+#ifndef MENUBARWIDGETCONTAINER_P_H
+#define MENUBARWIDGETCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
 class QMenuBar;
+class QObject;
 
-class DeclarativeMenuBarExtension : public DeclarativeWidgetExtension
+class MenuBarWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuBarExtension(QObject *parent = 0);
+    explicit MenuBarWidgetContainer(QObject *parent = 0);
 
-    QMenuBar *extendedMenuBar() const;
-
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
     void addAction(QAction *action);
+    void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QMenuBar *extendedMenuBar() const;
 };
 
 #endif
similarity index 64%
rename from lib/declarativemenuextension.cpp
rename to lib/menuwidgetcontainer.cpp
index 8869406..16835a9 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativemenuextension_p.h"
+#include "menuwidgetcontainer_p.h"
 
 #include <QDeclarativeInfo>
 #include <QMenu>
 
-DeclarativeMenuExtension::DeclarativeMenuExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+MenuWidgetContainer::MenuWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QMenu*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QMenu *DeclarativeMenuExtension::extendedMenu() const
-{
-  QMenu *menu = qobject_cast<QMenu*>(extendedWidget());
-  Q_ASSERT(menu);
-
-  return menu;
-}
-
-void DeclarativeMenuExtension::addWidget(QWidget *widget)
+void MenuWidgetContainer::addWidget(QWidget *widget)
 {
   QMenu *menu = qobject_cast<QMenu*>(widget);
   if (!menu) {
-    qmlInfo(extendedMenu()) << "The Menu can only contain Menu, Action, ActionItem or Separator";
+    qmlInfo(m_widget) << "The Menu can only contain Menu, Action, ActionItem or Separator";
     return;
   }
 
   extendedMenu()->addMenu(menu);
 }
 
-void DeclarativeMenuExtension::setLayout(QLayout *layout)
+void MenuWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(extendedMenu()) << "Can not set a Layout to a Menu";
+  qmlInfo(m_widget) << "Can not set a Layout to a Menu";
 }
 
-void DeclarativeMenuExtension::addAction(QAction *action)
+void MenuWidgetContainer::addAction(QAction *action)
 {
   extendedMenu()->addAction(action);
 }
+
+QMenu *MenuWidgetContainer::extendedMenu() const
+{
+  return static_cast<QMenu*>(m_widget);
+}
similarity index 69%
copy from lib/declarativemenuextension_p.h
copy to lib/menuwidgetcontainer_p.h
index 0c2be3f..4521c93 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef MENUWIDGETCONTAINER_P_H
+#define MENUWIDGETCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
 class QMenu;
+class QObject;
 
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+class MenuWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
+    explicit MenuWidgetContainer(QObject *parent = 0);
 
-    QMenu *extendedMenu() const;
-
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
     void addAction(QAction *action);
+    void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QMenu *extendedMenu() const;
 };
 
 #endif
similarity index 58%
copy from lib/declarativemenuextension_p.h
copy to lib/objectcontainerinterface_p.h
index 0c2be3f..aee180f 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef OBJECTCONTAINERINTERFACE_H
+#define OBJECTCONTAINERINTERFACE_H
 
-#include "declarativewidgetextension.h"
+class QObject;
 
-class QMenu;
-
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+class ObjectContainerInterface
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
-
-    QMenu *extendedMenu() const;
+    virtual ~ObjectContainerInterface() = 0;
 
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
+    virtual void dataAppend(QObject *object) = 0;
+    virtual int dataCount() const = 0;
+    virtual QObject *dataAt(int index) const = 0;
+    virtual void dataClear() = 0;
 };
 
-#endif
+#endif // OBJECTCONTAINERINTERFACE_H
similarity index 68%
rename from lib/declarativescrollareaextension.cpp
rename to lib/scrollareawidgetcontainer.cpp
index b5f586e..c46f7a7 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativescrollareaextension_p.h"
+#include "scrollareawidgetcontainer_p.h"
 
 #include <QDeclarativeInfo>
 #include <QScrollArea>
 
-DeclarativeScrollAreaExtension::DeclarativeScrollAreaExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+ScrollAreaWidgetContainer::ScrollAreaWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QScrollArea*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QScrollArea *DeclarativeScrollAreaExtension::extendedScrollArea() const
-{
-  QScrollArea *scrollArea = qobject_cast<QScrollArea*>(extendedWidget());
-  Q_ASSERT(scrollArea);
-
-  return scrollArea;
-}
-
-void DeclarativeScrollAreaExtension::addWidget(QWidget *widget)
+void ScrollAreaWidgetContainer::addWidget(QWidget *widget)
 {
   QScrollArea *scrollArea = extendedScrollArea();
 
@@ -47,8 +40,13 @@ void DeclarativeScrollAreaExtension::addWidget(QWidget *widget)
   }
 }
 
-void DeclarativeScrollAreaExtension::setLayout(QLayout *layout)
+void ScrollAreaWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(extendedScrollArea()) << "Can not add Layout to ScrollArea";
+  qmlInfo(m_widget) << "Can not add Layout to ScrollArea";
+}
+
+QScrollArea *ScrollAreaWidgetContainer::extendedScrollArea() const
+{
+  return static_cast<QScrollArea*>(m_widget);
 }
similarity index 67%
rename from lib/declarativescrollareaextension_p.h
rename to lib/scrollareawidgetcontainer_p.h
index f287f7c..dd8127b 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVESCROLLAREAEXTENSION_P_H
-#define DECLARATIVESCROLLAREAEXTENSION_P_H
+#ifndef SCROLLAREAWIDGETCONTAINER_P_H
+#define SCROLLAREAWIDGETCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
+class QObject;
 class QScrollArea;
 
-class DeclarativeScrollAreaExtension : public DeclarativeWidgetExtension
+class ScrollAreaWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeScrollAreaExtension(QObject *parent = 0);
-
-    QScrollArea *extendedScrollArea() const;
+    explicit ScrollAreaWidgetContainer(QObject *parent = 0);
 
-  protected:
-    void addWidget(QWidget *widget);
     void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QScrollArea *extendedScrollArea() const;
 };
 
 #endif
similarity index 62%
rename from lib/declarativestackedwidgetextension.cpp
rename to lib/stackedwidgetwidgetcontainer.cpp
index 97b6011..e0a8f60 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativestackedwidgetextension_p.h"
+#include "stackedwidgetwidgetcontainer_p.h"
 
 #include <QDeclarativeInfo>
 #include <QStackedWidget>
 
-DeclarativeStackedWidgetExtension::DeclarativeStackedWidgetExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+StackedWidgetWidgetContainer::StackedWidgetWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QStackedWidget*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QStackedWidget *DeclarativeStackedWidgetExtension::extendedStackedWidget() const
+void StackedWidgetWidgetContainer::addWidget(QWidget *widget)
 {
-  QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(extendedWidget());
-  Q_ASSERT(stackedWidget);
-
-  return stackedWidget;
+  extendedStackedWidget()->addWidget(widget);
 }
 
-void DeclarativeStackedWidgetExtension::addWidget(QWidget *widget)
+void StackedWidgetWidgetContainer::setLayout(QLayout*)
 {
-  extendedStackedWidget()->addWidget(widget);
+  qmlInfo(m_widget) << "StackedWidget does not support child layouts";
 }
 
-void DeclarativeStackedWidgetExtension::setLayout(QLayout*)
+QStackedWidget *StackedWidgetWidgetContainer::extendedStackedWidget() const
 {
-  qmlInfo(extendedStackedWidget()) << "StackedWidget does not support child layouts";
+  return static_cast<QStackedWidget*>(m_widget);
 }
similarity index 67%
rename from lib/declarativestackedwidgetextension_p.h
rename to lib/stackedwidgetwidgetcontainer_p.h
index 2c3226c..0bb4107 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVESTACKEDWIDGETEXTENSION_P_H
-#define DECLARATIVESTACKEDWIDGETEXTENSION_P_H
+#ifndef STACKEDWIDGETWIDGETCONTAINER_P_H
+#define STACKEDWIDGETWIDGETCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
+class QObject;
 class QStackedWidget;
 
-class DeclarativeStackedWidgetExtension : public DeclarativeWidgetExtension
+class StackedWidgetWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeStackedWidgetExtension(QObject *parent = 0);
-
-    QStackedWidget *extendedStackedWidget() const;
+    explicit StackedWidgetWidgetContainer(QObject *parent = 0);
 
-  protected:
-    void addWidget(QWidget *widget);
     void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QStackedWidget *extendedStackedWidget() const;
 };
 
 #endif
similarity index 65%
rename from lib/declarativetoolbarextension.cpp
rename to lib/toolbarwidgetcontainer.cpp
index 5ad734a..c5ace89 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#include "declarativetoolbarextension_p.h"
+#include "toolbarwidgetcontainer_p.h"
 
 #include <QDeclarativeInfo>
 #include <QToolBar>
 
-DeclarativeToolBarExtension::DeclarativeToolBarExtension(QObject *parent)
-  : DeclarativeWidgetExtension(parent)
+ToolBarWidgetContainer::ToolBarWidgetContainer(QObject *parent)
+  : DefaultWidgetContainer(qobject_cast<QToolBar*>(parent))
 {
+  Q_ASSERT(m_widget);
 }
 
-QToolBar *DeclarativeToolBarExtension::extendedToolBar() const
-{
-  QToolBar *toolBar = qobject_cast<QToolBar*>(extendedWidget());
-  Q_ASSERT(toolBar);
-
-  return toolBar;
-}
-
-void DeclarativeToolBarExtension::addWidget(QWidget *widget)
+void ToolBarWidgetContainer::addWidget(QWidget *widget)
 {
   extendedToolBar()->addWidget(widget);
 }
 
-void DeclarativeToolBarExtension::setLayout(QLayout *layout)
+void ToolBarWidgetContainer::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  qmlInfo(extendedToolBar()) << "Can not set a Layout to a ToolBar";
+  qmlInfo(m_widget) << "Can not set a Layout to a ToolBar";
 }
 
-void DeclarativeToolBarExtension::addAction(QAction *action)
+void ToolBarWidgetContainer::addAction(QAction *action)
 {
   extendedToolBar()->addAction(action);
 }
+
+QToolBar *ToolBarWidgetContainer::extendedToolBar() const
+{
+  return static_cast<QToolBar*>(m_widget);
+}
similarity index 68%
rename from lib/declarativetoolbarextension_p.h
rename to lib/toolbarwidgetcontainer_p.h
index 01e37d0..f137a55 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVETOOLBAREXTENSION_P_H
-#define DECLARATIVETOOLBAREXTENSION_P_H
+#ifndef TOOLBARWIDGETCONTAINER_P_H
+#define TOOLBARWIDGETCONTAINER_P_H
 
-#include "declarativewidgetextension.h"
+#include "defaultwidgetcontainer.h"
 
+class QObject;
 class QToolBar;
 
-class DeclarativeToolBarExtension : public DeclarativeWidgetExtension
+class ToolBarWidgetContainer : public DefaultWidgetContainer
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeToolBarExtension(QObject *parent = 0);
+    explicit ToolBarWidgetContainer(QObject *parent = 0);
 
-    QToolBar *extendedToolBar() const;
-
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
     void addAction(QAction *action);
+    void setLayout(QLayout *layout);
+    void addWidget(QWidget *widget);
+
+  private:
+    QToolBar *extendedToolBar() const;
 };
 
 #endif
similarity index 58%
rename from lib/declarativemenuextension_p.h
rename to lib/widgetcontainerinterface_p.h
index 0c2be3f..e5ff614 100644 (file)
   51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 */
 
-#ifndef DECLARATIVEMENUEXTENSION_P_H
-#define DECLARATIVEMENUEXTENSION_P_H
+#ifndef WIDGETCONTAINERINTERFACE_P_H
+#define WIDGETCONTAINERINTERFACE_P_H
 
-#include "declarativewidgetextension.h"
+class QAction;
+class QLayout;
+class QWidget;
 
-class QMenu;
-
-class DeclarativeMenuExtension : public DeclarativeWidgetExtension
+class WidgetContainerInterface
 {
-  Q_OBJECT
-
-  // repeat property declarations, qmlRegisterExtendedType doesn't see the ones from base class
-  Q_PROPERTY(QDeclarativeListProperty<QObject> data READ data DESIGNABLE false)
-
-  Q_CLASSINFO("DefaultProperty", "data")
-
   public:
-    explicit DeclarativeMenuExtension(QObject *parent = 0);
-
-    QMenu *extendedMenu() const;
+    virtual ~WidgetContainerInterface() = 0;
 
-  protected:
-    void addWidget(QWidget *widget);
-    void setLayout(QLayout *layout);
-    void addAction(QAction *action);
+    virtual void addAction(QAction *action) = 0;
+    virtual void setLayout(QLayout *layout) = 0;
+    virtual void addWidget(QWidget *widget) = 0;
 };
 
-#endif
+#endif // WIDGETCONTAINERINTERFACE_P_H