/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the Qt Quick Controls module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPL3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or (at your option) the GNU General ** Public license version 3 or any later version approved by the KDE Free ** Qt Foundation. The licenses are as published by the Free Software ** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 ** included in the packaging of this file. Please review the following ** information to ensure the GNU General Public License requirements will ** be met: https://www.gnu.org/licenses/gpl-2.0.html and ** https://www.gnu.org/licenses/gpl-3.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ import QtQuick 2.2 import QtQuick.Controls 1.2 import QtQuick.Controls.Styles 1.1 import QtQuick.Controls.Private 1.0 /*! \qmltype Menu \inqmlmodule QtQuick.Controls \since 5.1 \ingroup menus \ingroup controls \brief Provides a menu component for use as a context menu, popup menu, or as part of a menu bar. \image menu.png \code Menu { title: "Edit" MenuItem { text: "Cut" shortcut: "Ctrl+X" onTriggered: ... } MenuItem { text: "Copy" shortcut: "Ctrl+C" onTriggered: ... } MenuItem { text: "Paste" shortcut: "Ctrl+V" onTriggered: ... } MenuSeparator { } Menu { title: "More Stuff" MenuItem { text: "Do Nothing" } } } \endcode The main uses for menus: \list \li as a \e top-level menu in a \l MenuBar \li as a \e submenu inside another menu \li as a standalone or \e context menu \endlist Note that some properties, such as \c enabled, \c text, or \c iconSource, only make sense in a particular use case of the menu. \sa MenuBar, MenuItem, MenuSeparator */ MenuPrivate { id: root /*! \internal \omit Documented in qqquickmenu.cpp. \endomit */ function addMenu(title) { return root.insertMenu(items.length, title) } /*! \internal \omit Documented in qquickmenu.cpp. \endomit */ function insertMenu(index, title) { if (!__selfComponent) __selfComponent = Qt.createComponent("Menu.qml", root) var submenu = __selfComponent.createObject(__selfComponent, { "title": title }) root.insertItem(index, submenu) return submenu } /*! \internal */ property Component __selfComponent: null /*! \qmlproperty Component Menu::style \since QtQuick.Controls.Styles 1.2 The style Component for this control. \sa {MenuStyle} */ property Component style Component.onCompleted: { if (!style) { __usingDefaultStyle = true style = Qt.binding(function() { return Settings.styleComponent(Settings.style, "MenuStyle.qml", root) }) } } /*! \internal */ property bool __usingDefaultStyle: false /*! \internal */ property var __parentContentItem: __parentMenu ? __parentMenu.__contentItem : null /*! \internal */ property int __currentIndex: -1 /*! \internal */ onAboutToHide: __currentIndex = -1 on__MenuPopupDestroyed: contentLoader.active = false onPopupVisibleChanged: { if (__popupVisible) contentLoader.active = true } /*! \internal */ __contentItem: Loader { id: contentLoader Component { id: menuContent MenuContentItem { __menu: root } } sourceComponent: root.__isNative ? null : menuContent active: false focus: true Keys.forwardTo: item ? [item, root.__parentContentItem] : [] property bool altPressed: root.__parentContentItem ? root.__parentContentItem.altPressed : false } }