diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-06-01 23:36:57 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-06-13 09:34:39 +0000 |
commit | 92fcd0a3fb2ee0d1ba242607c1aa5a29864d3650 (patch) | |
tree | e55ace5afc75cfaa17f2571fda8cfae2d8f4e9f8 /src/quicktemplates2/qquickmenuitem.cpp | |
parent | 23a80af1b5d31621bf1d342706c9541dd5273b86 (diff) |
Add support for cascading sub-menus
This commit adds initial support for cascading sub-menus by allowing
one to nest declarative Menu declarations. A follow-up commit adds
support for adding, inserting, and removing menus programmatically.
[ChangeLog][Controls][Menu] Added support for cascading sub-menus.
Task-number: QTBUG-60351
Change-Id: I0eee4f74d92a97c09333fcc4348b019782448535
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quicktemplates2/qquickmenuitem.cpp')
-rw-r--r-- | src/quicktemplates2/qquickmenuitem.cpp | 64 |
1 files changed, 63 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickmenuitem.cpp b/src/quicktemplates2/qquickmenuitem.cpp index 3ef03caf..69a2b73b 100644 --- a/src/quicktemplates2/qquickmenuitem.cpp +++ b/src/quicktemplates2/qquickmenuitem.cpp @@ -36,6 +36,7 @@ #include "qquickmenuitem_p.h" #include "qquickmenuitem_p_p.h" +#include "qquickmenu_p.h" #include <QtGui/qpa/qplatformtheme.h> #include <QtQuick/private/qquickevents_p_p.h> @@ -89,7 +90,9 @@ QT_BEGIN_NAMESPACE QQuickMenuItemPrivate::QQuickMenuItemPrivate() : highlighted(false), - menu(nullptr) + arrow(nullptr), + menu(nullptr), + subMenu(nullptr) { } @@ -103,6 +106,24 @@ void QQuickMenuItemPrivate::setMenu(QQuickMenu *newMenu) emit q->menuChanged(); } +void QQuickMenuItemPrivate::setSubMenu(QQuickMenu *newSubMenu) +{ + Q_Q(QQuickMenuItem); + if (subMenu == newSubMenu) + return; + + if (subMenu) + QObject::disconnect(subMenu, &QQuickMenu::titleChanged, q, &QQuickAbstractButton::setText); + + if (newSubMenu) { + QObject::connect(newSubMenu, &QQuickMenu::titleChanged, q, &QQuickAbstractButton::setText); + q->setText(newSubMenu->title()); + } + + subMenu = newSubMenu; + emit q->subMenuChanged(); +} + /*! \qmlsignal void QtQuick.Controls::MenuItem::triggered() @@ -142,6 +163,33 @@ void QQuickMenuItem::setHighlighted(bool highlighted) /*! \since QtQuick.Controls 2.3 (Qt 5.10) + \qmlproperty Item QtQuick.Controls::MenuItem::arrow + + This property holds the sub-menu arrow item. + + \sa {Customizing MenuItem} +*/ +QQuickItem *QQuickMenuItem::arrow() const +{ + Q_D(const QQuickMenuItem); + return d->arrow; +} + +void QQuickMenuItem::setArrow(QQuickItem *arrow) +{ + Q_D(QQuickMenuItem); + if (d->arrow == arrow) + return; + + QQuickControlPrivate::destroyDelegate(d->arrow, this); + d->arrow = arrow; + if (arrow && !arrow->parentItem()) + arrow->setParentItem(this); + emit arrowChanged(); +} + +/*! + \since QtQuick.Controls 2.3 (Qt 5.10) \qmlproperty Menu QtQuick.Controls::MenuItem::menu \readonly @@ -154,6 +202,20 @@ QQuickMenu *QQuickMenuItem::menu() const return d->menu; } +/*! + \since QtQuick.Controls 2.3 (Qt 5.10) + \qmlproperty Menu QtQuick.Controls::MenuItem::subMenu + \readonly + + This property holds the sub-menu that this item presents in + the parent menu, or \c null if this item is not a sub-menu item. +*/ +QQuickMenu *QQuickMenuItem::subMenu() const +{ + Q_D(const QQuickMenuItem); + return d->subMenu; +} + QFont QQuickMenuItem::defaultFont() const { return QQuickControlPrivate::themeFont(QPlatformTheme::MenuItemFont); |