From: Tobias Koenig Date: Wed, 17 Oct 2012 16:22:24 +0000 (+0200) Subject: Add support for 'Separator {}' in MenuBar, Menu and ToolBar X-Git-Url: http://git.silmor.de/gitweb/?a=commitdiff_plain;h=bc3bbec70f2cd5e12018e84808b24d14febc08c9;p=web%2Fkonrad%2FDeclarativeWidgets.git Add support for 'Separator {}' in MenuBar, Menu and ToolBar --- diff --git a/declarativeobjects.cpp b/declarativeobjects.cpp index ee66463..c955f70 100644 --- a/declarativeobjects.cpp +++ b/declarativeobjects.cpp @@ -148,6 +148,14 @@ DeclarativeAction::DeclarativeAction(QObject *parent) : DeclarativeObjectProxy(parent) +{ + connectAllSignals(m_proxiedObject, this); +} + +CUSTOM_METAOBJECT(DeclarativeSeparator, QAction) + //// Layouts //// // DeclarativeHBoxLayout @@ -237,7 +245,7 @@ void DeclarativeMenu::addWidget(QWidget *widget, AbstractDeclarativeObject *decl { QMenu *menu = qobject_cast(widget); if (!menu) { - qmlInfo(declarativeObject) << "The QMenu can only contain QMenu or QAction"; + qmlInfo(declarativeObject) << "The QMenu can only contain QMenu, QAction or Separator"; return; } @@ -253,6 +261,19 @@ void DeclarativeMenu::setLayout(QLayout *layout, AbstractDeclarativeObject *decl qmlInfo(this) << "Can not set a QLayout to a QMenu"; } +void DeclarativeMenu::addAction(QAction *action, AbstractDeclarativeObject *declarativeObject) +{ + DeclarativeSeparator *separator = dynamic_cast(declarativeObject); + + if (separator) { + m_proxiedObject->addSeparator(); + } else { + m_proxiedObject->addAction(action); + } + + m_children.append(declarativeObject); +} + CUSTOM_METAOBJECT(DeclarativeMenu, QMenu) // DeclarativeMenuBar @@ -281,6 +302,19 @@ void DeclarativeMenuBar::setLayout(QLayout *layout, AbstractDeclarativeObject *d qmlInfo(this) << "Can not set a QLayout to a QMenuBar"; } +void DeclarativeMenuBar::addAction(QAction *action, AbstractDeclarativeObject *declarativeObject) +{ + Q_UNUSED(action) + + DeclarativeSeparator *separator = dynamic_cast(declarativeObject); + + if (separator) { + m_proxiedObject->addSeparator(); + } + + m_children.append(declarativeObject); +} + CUSTOM_METAOBJECT(DeclarativeMenuBar, QMenuBar) // DeclarativePushButton @@ -408,6 +442,19 @@ void DeclarativeToolBar::setLayout(QLayout *layout, AbstractDeclarativeObject *d qmlInfo(this) << "Can not set a QLayout to a QToolBar"; } +void DeclarativeToolBar::addAction(QAction *action, AbstractDeclarativeObject *declarativeObject) +{ + DeclarativeSeparator *separator = dynamic_cast(declarativeObject); + + if (separator) { + m_proxiedObject->addSeparator(); + } else { + m_proxiedObject->addAction(action); + } + + m_children.append(declarativeObject); +} + CUSTOM_METAOBJECT(DeclarativeToolBar, QToolBar) // DeclarativeWidget diff --git a/declarativeobjects_p.h b/declarativeobjects_p.h index 94cd85b..1b7fbb5 100644 --- a/declarativeobjects_p.h +++ b/declarativeobjects_p.h @@ -169,6 +169,14 @@ class DeclarativeAction : public DeclarativeObjectProxy DeclarativeAction(QObject *parent = 0); }; +class DeclarativeSeparator : public DeclarativeObjectProxy +{ + DECLARATIVE_OBJECT + + public: + DeclarativeSeparator(QObject *parent = 0); +}; + //// Layouts //// template class DeclarativeBoxLayout : public DeclarativeObjectProxy @@ -263,6 +271,7 @@ class DeclarativeMenu : public DeclarativeWidgetProxy protected: virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject); virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject); + virtual void addAction(QAction *action, AbstractDeclarativeObject *declarativeObject); }; class DeclarativeMenuBar : public DeclarativeWidgetProxy @@ -275,6 +284,7 @@ class DeclarativeMenuBar : public DeclarativeWidgetProxy protected: virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject); virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject); + virtual void addAction(QAction *action, AbstractDeclarativeObject *declarativeObject); }; class DeclarativePushButton : public DeclarativeWidgetProxy @@ -354,6 +364,7 @@ class DeclarativeToolBar : public DeclarativeWidgetProxy protected: virtual void addWidget(QWidget *widget, AbstractDeclarativeObject *declarativeObject); virtual void setLayout(QLayout *layout, AbstractDeclarativeObject *declarativeObject); + virtual void addAction(QAction *action, AbstractDeclarativeObject *declarativeObject); }; class DeclarativeWidget : public DeclarativeWidgetProxy diff --git a/declarativewidgetdocument.cpp b/declarativewidgetdocument.cpp index beda986..ede3a61 100644 --- a/declarativewidgetdocument.cpp +++ b/declarativewidgetdocument.cpp @@ -32,6 +32,7 @@ DeclarativeWidgetDocument::DeclarativeWidgetDocument(const QUrl &url, QObject *p // objects qmlRegisterType(); qmlRegisterType("QtGui", 1, 0, "Action"); + qmlRegisterType("QtGui", 1, 0, "Separator"); // layouts qmlRegisterType("QtGui", 1, 0, "HBoxLayout"); diff --git a/editor.qml b/editor.qml index af10746..c4f2620 100644 --- a/editor.qml +++ b/editor.qml @@ -7,6 +7,12 @@ MainWindow { title: qsTr("File") Action { + text: "New" + } + + Separator {} + + Action { text: "Close" } } @@ -16,13 +22,19 @@ MainWindow { Action { text: "Copy" + + onTriggered: textEdit.copy() } Action { text: "Paste" + + onTriggered: textEdit.paste() } } + Separator {} + Menu { title: qsTr("Help") @@ -41,6 +53,8 @@ MainWindow { text: qsTr("New") } + Separator {} + Label { text: "Zoom" }