diff options
Diffstat (limited to 'tools/viewer/qml/StyledMenu.qml')
-rw-r--r-- | tools/viewer/qml/StyledMenu.qml | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/tools/viewer/qml/StyledMenu.qml b/tools/viewer/qml/StyledMenu.qml new file mode 100644 index 0000000..6275dbc --- /dev/null +++ b/tools/viewer/qml/StyledMenu.qml @@ -0,0 +1,95 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt 3D Studio. +** +** $QT_BEGIN_LICENSE:GPL$ +** 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 General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 or (at your option) 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.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-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +import QtQuick 2.7 +import QtQuick.Controls 2.2 + +Menu { + id: control + + property alias hovered: menuArea.containsMouse + + width: contentItem.width + leftPadding + rightPadding + height: contentItem.height + topPadding + bottomPadding + padding: 1 // For background border + x: 0 + y: parent.height + closePolicy: Popup.CloseOnPressOutsideParent | Popup.CloseOnEscape + + contentItem: MouseArea { + id: menuArea + hoverEnabled: true + height: list.height + width: list.width + ListView { + id: list + boundsBehavior: Flickable.StopAtBounds + clip: true + model: control.contentModel + currentIndex: control.currentIndex + highlightRangeMode: ListView.ApplyRange + highlightMoveDuration: 0 + Component.onCompleted: { + var maxItemWidth = 0; + var maxShortcutWidth = 0; + var totalHeight = 0 + var extraWidth = 0 + var i; + for (i = control.contentData.length - 1; i >= 0; --i) { + if (control.contentData[i].itemWidth !== undefined) { + maxItemWidth = Math.max(maxItemWidth, control.contentData[i].itemWidth); + maxShortcutWidth = Math.max(maxShortcutWidth, + control.contentData[i].shortcutWidth); + } + totalHeight += control.contentData[i].height + } + maxItemWidth += _controlPadding // minimum item spacer + for (i = control.contentData.length - 1; i >= 0; --i) { + if (control.contentData[i].itemSpacerWidth !== undefined) { + control.contentData[i].itemSpacerWidth + = maxItemWidth - control.contentData[i].itemWidth; + control.contentData[i].shortcutSpacerWidth + = maxShortcutWidth - control.contentData[i].shortcutWidth; + } + } + width = maxItemWidth + maxShortcutWidth + extraWidth + + control.contentData[0].leftPadding + control.contentData[0].rightPadding + + control.contentData[0].arrowWidth + control.contentData[0].checkMarkWidth; + height = totalHeight + } + } + } + + background: Rectangle { + width: control.width + height: control.height + color: _menuBackgroundColor + border.color: _menuBorderColor + } +} |