Warning, /plasma/qqc2-breeze-style/style/qtquickcontrols/MenuItem.qml is written in an unsupported language. File is not indexed.
0001 /* SPDX-FileCopyrightText: 2017 The Qt Company Ltd. 0002 * SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org> 0003 * SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com> 0004 * SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import QtQuick.Templates as T 0010 import QtQuick.Controls as Controls 0011 import org.kde.kirigami as Kirigami 0012 import org.kde.breeze.impl as Impl 0013 0014 T.MenuItem { 0015 id: control 0016 0017 // We can't do `control: control` inside a Component due to scoping issues, so set up an alias 0018 // to be used by the radio/check indicator components. 0019 property alias __controlRoot: control 0020 0021 property bool __reserveSpaceForIndicator: menu?.__hasIndicators ?? false 0022 property bool __reserveSpaceForIcon: menu?.__hasIcons ?? false 0023 property bool __reserveSpaceForArrow: menu?.__hasArrows ?? false 0024 0025 Kirigami.Theme.colorSet: control.down || control.highlighted ? Kirigami.Theme.Button : -1 0026 Kirigami.Theme.inherit: !background || !background.visible && !(control.highlighted || control.down) 0027 0028 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, 0029 implicitContentWidth + leftPadding + rightPadding, 0030 implicitIndicatorWidth + leftPadding + rightPadding) 0031 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, 0032 implicitContentHeight + topPadding + bottomPadding, 0033 implicitIndicatorHeight + topPadding + bottomPadding) 0034 baselineOffset: contentItem.y + contentItem.baselineOffset 0035 0036 // width: parent ? parent.width : implicitWidth 0037 0038 // Note: Binding height here to make sure menu items that are not visible are 0039 // properly collapsed, otherwise they will still occupy space inside the menu. 0040 height: visible ? undefined : 0 0041 0042 icon.width: Kirigami.Units.iconSizes.sizeForLabels 0043 icon.height: Kirigami.Units.iconSizes.sizeForLabels 0044 0045 Layout.fillWidth: true 0046 0047 spacing: Kirigami.Units.mediumSpacing 0048 padding: Kirigami.Units.mediumSpacing 0049 leftPadding: { 0050 if (!control.indicator.visible 0051 && ((!contentItem.hasIcon && contentItem.textBesideIcon) // False if contentItem has been replaced 0052 || display == T.AbstractButton.TextOnly 0053 || display == T.AbstractButton.TextUnderIcon)) { 0054 return Impl.Units.mediumHorizontalPadding 0055 } else { 0056 return control.horizontalPadding 0057 } 0058 } 0059 rightPadding: { 0060 if (!control.arrow.visible 0061 && contentItem.hasLabel // False if contentItem has been replaced 0062 && display != T.AbstractButton.IconOnly) { 0063 return Impl.Units.mediumHorizontalPadding 0064 } else { 0065 return control.horizontalPadding 0066 } 0067 } 0068 0069 Kirigami.MnemonicData.enabled: control.enabled && control.visible 0070 Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.MenuItem 0071 Kirigami.MnemonicData.label: control.text 0072 Shortcut { 0073 //in case of explicit & the button manages it by itself 0074 enabled: !(RegExp(/\&[^\&]/).test(control.text)) 0075 sequence: control.Kirigami.MnemonicData.sequence 0076 onActivated: { 0077 if (control.checkable) { 0078 control.toggle(); 0079 } else { 0080 control.clicked(); 0081 } 0082 } 0083 } 0084 0085 indicator: Loader { 0086 visible: control.checkable 0087 active: visible 0088 sourceComponent: control.autoExclusive ? radioIndicator : checkIndicator 0089 0090 Component { 0091 id: checkIndicator 0092 Impl.CheckIndicator { 0093 control: __controlRoot 0094 checkState: control.checked ? Qt.Checked : Qt.Unchecked 0095 } 0096 } 0097 Component { 0098 id: radioIndicator 0099 Impl.RadioIndicator { 0100 control: __controlRoot 0101 } 0102 } 0103 } 0104 0105 arrow: Kirigami.Icon { 0106 anchors { 0107 right: control.right 0108 rightMargin: control.rightPadding 0109 verticalCenter: control.verticalCenter 0110 } 0111 source: control.mirrored ? "arrow-left" : "arrow-right" 0112 implicitWidth: Kirigami.Units.iconSizes.sizeForLabels 0113 implicitHeight: Kirigami.Units.iconSizes.sizeForLabels 0114 visible: control.subMenu 0115 } 0116 0117 contentItem: Impl.IconLabelShortcutContent { 0118 control: control 0119 text: control.Kirigami.MnemonicData.richTextLabel 0120 alignment: Qt.AlignLeft | Qt.AlignVCenter 0121 reserveSpaceForIndicator: control.__reserveSpaceForIndicator 0122 reserveSpaceForIcon: control.__reserveSpaceForIcon 0123 reserveSpaceForArrow: control.__reserveSpaceForArrow 0124 } 0125 0126 background: Impl.MenuItemBackground { 0127 control: control 0128 } 0129 }