From 410bdd53c6ce63cc6c5fdc599586998c15caaa16 Mon Sep 17 00:00:00 2001 From: Tobias Koenig Date: Wed, 17 Oct 2012 18:03:00 +0200 Subject: [PATCH] Add support for ToolBar --- declarativeobjects.cpp | 40 +++++++++++++++++++++++++++++++++++++++- declarativeobjects_p.h | 22 ++++++++++++++++++---- declarativewidgetdocument.cpp | 1 + editor.qml | 10 ++++++++++ qwidgets.list | 3 --- 5 files changed, 68 insertions(+), 8 deletions(-) diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index e9fab85..28f390a 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -201,8 +201,11 @@ DeclarativeMainWindow::DeclarativeMainWindow(QObject *parent) : DeclarativeWidge void DeclarativeMainWindow::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject) { QMenuBar *menuBar = qobject_cast(widget); + QToolBar *toolBar = qobject_cast(widget); if (menuBar) { m_proxiedObject->setMenuBar(menuBar); + } else if (toolBar) { + m_proxiedObject->addToolBar(toolBar); } else if (widget) { if (m_proxiedObject->centralWidget()) { qmlInfo(declarativeObject) << "The QMainWindow contains a central widget already"; @@ -230,7 +233,7 @@ DeclarativeMenu::DeclarativeMenu(QObject *parent) : DeclarativeWidgetProxy(object); if (!action) { @@ -398,6 +401,41 @@ DeclarativeTextEdit::DeclarativeTextEdit(QObject *parent) : DeclarativeWidgetPro CUSTOM_METAOBJECT(DeclarativeTextEdit, QTextEdit) +// DeclarativeToolBar +DeclarativeToolBar::DeclarativeToolBar(QObject *parent) : DeclarativeWidgetProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +void DeclarativeToolBar::addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject) +{ + QAction *action = qobject_cast(object); + if (!action) { + qmlInfo(declarativeObject) << "The QToolBar can only contain QWidget or QAction"; + return; + } + + m_proxiedObject->addAction(action); + + m_children.append(declarativeObject); +} + +void DeclarativeToolBar::addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject) +{ + m_proxiedObject->addWidget(widget); + + m_children.append(declarativeObject); +} + +void DeclarativeToolBar::setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject) +{ + Q_UNUSED(layout); + Q_UNUSED(declarativeObject); + qmlInfo(this) << "Can not set a QLayout to a QToolBar"; +} + +CUSTOM_METAOBJECT(DeclarativeToolBar, QToolBar) + // DeclarativeWidget DeclarativeWidget::DeclarativeWidget(QObject *parent) : DeclarativeWidgetProxy(parent) { diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 952e6f8..6245605 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -15,6 +15,7 @@ #include #include #include +#include #include #include #include @@ -119,9 +120,9 @@ class DeclarativeWidgetProxy : public DeclarativeObjectProxy setLayout(layout, declarativeObject); return; } - } - addObject(declarativeObject->object(), declarativeObject); + addQObject(declarativeObject->object(), declarativeObject); + } DeclarativeObjectProxy::dataAppend(object); } @@ -139,7 +140,7 @@ class DeclarativeWidgetProxy : public DeclarativeObjectProxy DeclarativeObjectProxy::m_proxiedObject->setLayout(layout); } - virtual void addObject(QObject *object, AbstractDeclarativeObject *declarativeObject) + virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject) { object->setParent(DeclarativeObjectProxy::m_proxiedObject); DeclarativeObjectProxy::m_children.append(declarativeObject); @@ -247,7 +248,7 @@ class DeclarativeMenu : public DeclarativeWidgetProxy DeclarativeMenu(QObject *parent = 0); protected: - virtual void addObject(QObject *object, AbstractDeclarativeObject *declarativeObject); + virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject); virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject); virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject); }; @@ -331,6 +332,19 @@ class DeclarativeTextEdit : public DeclarativeWidgetProxy DeclarativeTextEdit(QObject *parent = 0); }; +class DeclarativeToolBar : public DeclarativeWidgetProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeToolBar(QObject *parent = 0); + + protected: + virtual void addQObject(QObject *object, AbstractDeclarativeObject *declarativeObject); + virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject); + virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject); +}; + class DeclarativeWidget : public DeclarativeWidgetProxy { DECLARATIVE_OBJECT diff --git a/declarativewidgetdocument.cpp b/declarativewidgetdocument.cpp index 83005bb..beda986 100644 --- a/declarativewidgetdocument.cpp +++ b/declarativewidgetdocument.cpp @@ -49,6 +49,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "TabWidget"); qmlRegisterType("QtGui", 1, 0, "TextEdit"); + qmlRegisterType("QtGui", 1, 0, "ToolBar"); qmlRegisterType("QtGui", 1, 0, "Widget"); d->m_component->loadUrl(d->m_url); diff --git a/editor.qml b/editor.qml index d051e5e..db5bb2f 100644 --- a/editor.qml +++ b/editor.qml @@ -36,6 +36,16 @@ MainWindow { } } + ToolBar { + Action { + text: qsTr("New") + } + + Label { + text: "Zoom" + } + } + TextEdit { id: textEdit } diff --git a/qwidgets.list b/qwidgets.list index 05c6a99..e85e84f 100644 --- a/qwidgets.list +++ b/qwidgets.list @@ -36,11 +36,8 @@ qlcdnumber.h qlineedit.h qlistview.h qlistwidget.h -qmainwindow.h qmdiarea.h qmdisubwindow.h -qmenubar.h -qmenu.h qmessagebox.h qplaintextedit.h qprintpreviewwidget.h -- 1.7.2.5