Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/MenuItem.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2017 The Qt Company Ltd.
0004     SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk>
0005 
0006     SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later
0007 */
0008 
0009 
0010 import QtQuick 2.6
0011 import QtQuick.Layouts 1.2
0012 import QtQuick.Templates 2.15 as T
0013 import org.kde.kirigami 2.4 as Kirigami
0014 
0015 T.MenuItem {
0016     id: controlRoot
0017 
0018     implicitWidth: Math.max(background ? background.implicitWidth : 0,
0019                             contentItem.implicitWidth + leftPadding + rightPadding + (arrow ? arrow.implicitWidth : 0))
0020     implicitHeight: visible ? Math.max(background ? background.implicitHeight : 0,
0021                              Math.max(contentItem.implicitHeight,
0022                                       indicator ? indicator.implicitHeight : 0) + topPadding + bottomPadding) : 0
0023     baselineOffset: contentItem.y + contentItem.baselineOffset
0024 
0025     width: parent ? parent.width : implicitWidth
0026 
0027     Layout.fillWidth: true
0028     padding: Kirigami.Units.smallSpacing
0029     verticalPadding: Kirigami.Settings.hasTransientTouchInput ? 8 : 4 // Hardcoded to the Breeze theme value
0030     hoverEnabled: !Kirigami.Settings.isMobile
0031 
0032     Kirigami.MnemonicData.enabled: controlRoot.enabled && controlRoot.visible
0033     Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.MenuItem
0034     Kirigami.MnemonicData.label: controlRoot.text
0035     Shortcut {
0036         //in case of explicit & the button manages it by itself
0037         enabled: !(RegExp(/\&[^\&]/).test(controlRoot.text))
0038         sequence: controlRoot.Kirigami.MnemonicData.sequence
0039         onActivated: {
0040             if (controlRoot.checkable) {
0041                 controlRoot.toggle();
0042             } else {
0043                 controlRoot.clicked();
0044             }
0045         }
0046     }
0047 
0048     contentItem: RowLayout {
0049         Item {
0050             Layout.preferredWidth: (controlRoot.ListView.view && controlRoot.ListView.view.hasCheckables) || controlRoot.checkable ? controlRoot.indicator.width : Kirigami.Units.smallSpacing
0051         }
0052         Kirigami.Icon {
0053             Layout.alignment: Qt.AlignVCenter
0054             visible: (controlRoot.ListView.view && controlRoot.ListView.view.hasIcons)
0055                 || (controlRoot.icon.name !== "" || controlRoot.icon.source.toString() !== "")
0056             source: controlRoot.icon.name !== "" ? controlRoot.icon.name : controlRoot.icon.source
0057             color: controlRoot.icon.color
0058             Layout.preferredHeight: Kirigami.Settings.hasTransientTouchInput ? Kirigami.Units.iconSizes.smallMedium : Kirigami.Units.iconSizes.small
0059             Layout.preferredWidth: Layout.preferredHeight
0060         }
0061         Label {
0062             id: label
0063             Layout.alignment: Qt.AlignVCenter
0064             Layout.fillWidth: true
0065 
0066             text: controlRoot.Kirigami.MnemonicData.richTextLabel
0067             font: controlRoot.font
0068             color: Kirigami.Theme.textColor
0069             elide: Text.ElideRight
0070             visible: controlRoot.text
0071             horizontalAlignment: Text.AlignLeft
0072             verticalAlignment: Text.AlignVCenter
0073         }
0074         Label {
0075             id: shortcut
0076             Layout.alignment: Qt.AlignVCenter
0077             visible: controlRoot.action && controlRoot.action.shortcut !== undefined
0078 
0079             Shortcut {
0080                 id: itemShortcut
0081                 sequence: (shortcut.visible && controlRoot.action !== null) ? controlRoot.action.shortcut : ""
0082             }
0083 
0084             text: visible ? itemShortcut.nativeText : ""
0085             font: controlRoot.font
0086             color: label.color
0087             horizontalAlignment: Text.AlignRight
0088             verticalAlignment: Text.AlignVCenter
0089         }
0090         Item {
0091             Layout.preferredWidth: Kirigami.Units.smallSpacing
0092         }
0093     }
0094 
0095     arrow: Kirigami.Icon {
0096         x: controlRoot.mirrored ? controlRoot.padding : controlRoot.width - width - controlRoot.padding
0097         y: controlRoot.topPadding + (controlRoot.availableHeight - height) / 2
0098         source: controlRoot.mirrored ? "go-next-symbolic-rtl" : "go-next-symbolic"
0099         width: Kirigami.Units.iconSizes.small
0100         height: width
0101         visible: controlRoot.subMenu
0102     }
0103 
0104     indicator: CheckIndicator {
0105         x: controlRoot.mirrored ? controlRoot.width - width - controlRoot.rightPadding : controlRoot.leftPadding
0106         y: controlRoot.topPadding + (controlRoot.availableHeight - height) / 2
0107 
0108         drawIcon: false // We're drawing it ourselves in this control
0109 
0110         visible: controlRoot.checkable
0111         on: controlRoot.checked
0112         control: controlRoot
0113     }
0114 
0115     background: Item {
0116         anchors.fill: parent
0117         implicitWidth: Kirigami.Units.gridUnit * 8
0118 
0119         Rectangle {
0120             anchors.fill: parent
0121             anchors.margins: 2
0122             opacity: (controlRoot.highlighted || controlRoot.hovered) ? 1 : 0
0123             color: Qt.rgba(Kirigami.Theme.focusColor.r, Kirigami.Theme.focusColor.g, Kirigami.Theme.focusColor.b, 0.3)
0124             border.color: Kirigami.Theme.focusColor
0125             border.width: 1
0126             radius: 3
0127         }
0128     }
0129 }