Ported status bar
authorKevin Krammer <kevin.krammer@kdab.com>
Wed, 16 Jan 2013 14:09:47 +0000 (15:09 +0100)
committerKevin Krammer <kevin.krammer@kdab.com>
Wed, 16 Jan 2013 14:09:47 +0000 (15:09 +0100)
lib/declarativestatusbar.cpp
lib/declarativestatusbar_p.h
lib/declarativewidgetsdocument.cpp

index 48df452..a393a82 100644 (file)
@@ -20,6 +20,8 @@
 
 #include "declarativestatusbar_p.h"
 
+#include <QDeclarativeInfo>
+
 class DeclarativeStatusBarAttached::Private
 {
   public:
@@ -51,19 +53,34 @@ int DeclarativeStatusBarAttached::stretch() const
   return d->stretch;
 }
 
-DeclarativeStatusBar::DeclarativeStatusBar(QObject *parent)
-  : DeclarativeWidgetProxy<QStatusBar>(parent)
+DeclarativeStatusBar::DeclarativeStatusBar(QWidget *parent)
+  : QStatusBar(parent)
 {
-  connectAllSignals(m_proxiedObject, this);
 }
 
-void DeclarativeStatusBar::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject)
+DeclarativeStatusBarAttached *DeclarativeStatusBar::qmlAttachedProperties(QObject *object)
 {
-  // TODO: error when layout is set
+  return new DeclarativeStatusBarAttached(object);
+}
+
+DeclarativeStatusBarExtension::DeclarativeStatusBarExtension(QObject *parent)
+  : DeclarativeWidgetExtension(parent)
+{
+}
+
+QStatusBar *DeclarativeStatusBarExtension::extendedStatusBar() const
+{
+  QStatusBar *statusBar = qobject_cast<QStatusBar*>(extendedWidget());
+  Q_ASSERT(statusBar);
 
-  m_children.append(declarativeObject);
+  return statusBar;
+}
 
-  QObject *attachedProperties = qmlAttachedPropertiesObject<DeclarativeStatusBar>(declarativeObject, false);
+void DeclarativeStatusBarExtension::addWidget(QWidget *widget)
+{
+  // TODO: error when layout is set
+
+  QObject *attachedProperties = qmlAttachedPropertiesObject<DeclarativeStatusBar>(widget, false);
   DeclarativeStatusBarAttached *attached = qobject_cast<DeclarativeStatusBarAttached*>(attachedProperties);
 
   int stretch = 0;
@@ -71,19 +88,11 @@ void DeclarativeStatusBar::addWidget(QWidget *widget, AbstractDeclarativeObject
     stretch = attached->stretch();
   }
 
-  m_proxiedObject->addPermanentWidget(widget, stretch);
+  extendedStatusBar()->addPermanentWidget(widget, stretch);
 }
 
-void DeclarativeStatusBar::setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject)
+void DeclarativeStatusBarExtension::setLayout(QLayout *layout)
 {
   Q_UNUSED(layout);
-  Q_UNUSED(declarativeObject);
-  qmlInfo(this) << "Can not add QLayout to QStatusBar";
-}
-
-DeclarativeStatusBarAttached *DeclarativeStatusBar::qmlAttachedProperties(QObject *object)
-{
-  return new DeclarativeStatusBarAttached(object);
+  qmlInfo(extendedStatusBar()) << "Can not add Layout to StatusBar";
 }
-
-CUSTOM_METAOBJECT(DeclarativeStatusBar, QStatusBar)
index 659a4c2..8507610 100644 (file)
@@ -21,8 +21,9 @@
 #ifndef DECLARATIVESTATUSBAR_P_H
 #define DECLARATIVESTATUSBAR_P_H
 
-#include "declarativewidgetproxy_p.h"
+#include "declarativewidgetextension.h"
 
+#include <qdeclarative.h>
 #include <QStatusBar>
 
 class DeclarativeStatusBarAttached : public QObject
@@ -46,20 +47,35 @@ class DeclarativeStatusBarAttached : public QObject
     Private *const d;
 };
 
-class DeclarativeStatusBar : public DeclarativeWidgetProxy<QStatusBar>
+class DeclarativeStatusBar : public QStatusBar
 {
-  DECLARATIVE_OBJECT
+  Q_OBJECT
 
   public:
-    explicit DeclarativeStatusBar(QObject *parent = 0);
+    explicit DeclarativeStatusBar(QWidget *parent = 0);
 
     static DeclarativeStatusBarAttached *qmlAttachedProperties(QObject *object);
-
-  protected:
-    void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject);
-    void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject);
 };
 
 QML_DECLARE_TYPEINFO(DeclarativeStatusBar, QML_HAS_ATTACHED_PROPERTIES)
 
+class DeclarativeStatusBarExtension : 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 DeclarativeStatusBarExtension(QObject *parent = 0);
+
+    QStatusBar *extendedStatusBar() const;
+
+  protected:
+    void addWidget(QWidget *widget);
+    void setLayout(QLayout *layout);
+};
+
 #endif
index 9747967..cacdf20 100644 (file)
@@ -141,7 +141,6 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject
   qmlRegisterType<DeclarativeSpinBox>("QtGui", 1, 0, "SpinBox");
   qmlRegisterType<DeclarativeStackedWidget>("QtGui", 1, 0, "StackedWidget");
   qmlRegisterType<DeclarativeStatusBarAttached>();
-  qmlRegisterType<DeclarativeStatusBar>("QtGui", 1, 0, "StatusBar");
   qmlRegisterType<DeclarativeTableView>("QtGui", 1, 0, "TableView");
   qmlRegisterType<DeclarativeTabWidgetAttached>();
   qmlRegisterType<DeclarativeTextBrowser>("QtGui", 1, 0, "TextBrowser");
@@ -179,6 +178,7 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject
   qmlRegisterExtendedType<QMenuBar, DeclarativeMenuBarExtension>("QtGui", 1, 0, "MenuBar");
   qmlRegisterExtendedType<QPushButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "PushButton");
   qmlRegisterExtendedType<QRadioButton, DeclarativeWidgetExtension>("QtGui", 1, 0, "RadioButton");
+  qmlRegisterExtendedType<DeclarativeStatusBar, DeclarativeStatusBarExtension>("QtGui", 1, 0, "StatusBar");
   qmlRegisterExtendedType<DeclarativeTabWidget, DeclarativeTabWidgetExtension>("QtGui", 1, 0, "TabWidget");
   qmlRegisterExtendedType<QTextEdit, DeclarativeTextEditExtension>("QtGui", 1, 0, "TextEdit");
   qmlRegisterExtendedType<QToolBar, DeclarativeToolBarExtension>("QtGui", 1, 0, "ToolBar");