From: Kevin Krammer Date: Wed, 16 Jan 2013 14:09:47 +0000 (+0100) Subject: Ported status bar X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=099dd7ced7a793280821cce1a3fbea77170e2d2b;p=konrad%2FDeclarativeWidgets.git Ported status bar --- diff --git a/lib/declarativestatusbar.cpp b/lib/declarativestatusbar.cpp index 48df452..a393a82 100644 --- a/lib/declarativestatusbar.cpp +++ b/lib/declarativestatusbar.cpp @@ -20,6 +20,8 @@ #include "declarativestatusbar_p.h" +#include + class DeclarativeStatusBarAttached::Private { public: @@ -51,19 +53,34 @@ int DeclarativeStatusBarAttached::stretch() const return d->stretch; } -DeclarativeStatusBar::DeclarativeStatusBar(QObject *parent) - : DeclarativeWidgetProxy(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(extendedWidget()); + Q_ASSERT(statusBar); - m_children.append(declarativeObject); + return statusBar; +} - QObject *attachedProperties = qmlAttachedPropertiesObject(declarativeObject, false); +void DeclarativeStatusBarExtension::addWidget(QWidget *widget) +{ + // TODO: error when layout is set + + QObject *attachedProperties = qmlAttachedPropertiesObject(widget, false); DeclarativeStatusBarAttached *attached = qobject_cast(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) diff --git a/lib/declarativestatusbar_p.h b/lib/declarativestatusbar_p.h index 659a4c2..8507610 100644 --- a/lib/declarativestatusbar_p.h +++ b/lib/declarativestatusbar_p.h @@ -21,8 +21,9 @@ #ifndef DECLARATIVESTATUSBAR_P_H #define DECLARATIVESTATUSBAR_P_H -#include "declarativewidgetproxy_p.h" +#include "declarativewidgetextension.h" +#include #include class DeclarativeStatusBarAttached : public QObject @@ -46,20 +47,35 @@ class DeclarativeStatusBarAttached : public QObject Private *const d; }; -class DeclarativeStatusBar : public DeclarativeWidgetProxy +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 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 diff --git a/lib/declarativewidgetsdocument.cpp b/lib/declarativewidgetsdocument.cpp index 9747967..cacdf20 100644 --- a/lib/declarativewidgetsdocument.cpp +++ b/lib/declarativewidgetsdocument.cpp @@ -141,7 +141,6 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject qmlRegisterType("QtGui", 1, 0, "SpinBox"); qmlRegisterType("QtGui", 1, 0, "StackedWidget"); qmlRegisterType(); - qmlRegisterType("QtGui", 1, 0, "StatusBar"); qmlRegisterType("QtGui", 1, 0, "TableView"); qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "TextBrowser"); @@ -179,6 +178,7 @@ DeclarativeWidgetsDocument::DeclarativeWidgetsDocument(const QUrl &url, QObject qmlRegisterExtendedType("QtGui", 1, 0, "MenuBar"); qmlRegisterExtendedType("QtGui", 1, 0, "PushButton"); qmlRegisterExtendedType("QtGui", 1, 0, "RadioButton"); + qmlRegisterExtendedType("QtGui", 1, 0, "StatusBar"); qmlRegisterExtendedType("QtGui", 1, 0, "TabWidget"); qmlRegisterExtendedType("QtGui", 1, 0, "TextEdit"); qmlRegisterExtendedType("QtGui", 1, 0, "ToolBar");