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 }