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 2.15 0008 import QtQuick.Layouts 1.12 0009 import QtQuick.Templates 2.15 as T 0010 import QtQuick.Controls 2.15 as Controls 0011 import org.kde.kirigami 2.19 as Kirigami 0012 import "impl" as Impl 0013 0014 T.MenuItem { 0015 id: control 0016 0017 property bool __reserveSpaceForIndicator: { 0018 if (menu && menu.hasOwnProperty("__hasIndicators")) { 0019 menu.__hasIndicators |= indicator && indicator.visible 0020 return menu.__hasIndicators 0021 } 0022 return false 0023 } 0024 property bool __reserveSpaceForIcon: { 0025 if (menu && menu.hasOwnProperty("__hasIcons")) { 0026 menu.__hasIcons |= contentItem && contentItem.hasIcon 0027 return menu.__hasIcons 0028 } 0029 return false 0030 } 0031 property bool __reserveSpaceForArrow: { 0032 if (menu && menu.hasOwnProperty("__hasArrows")) { 0033 menu.__hasArrows |= arrow && arrow.visible 0034 return menu.__hasArrows 0035 } 0036 return false 0037 } 0038 0039 Kirigami.Theme.colorSet: control.down || control.highlighted ? Kirigami.Theme.Button : -1 0040 Kirigami.Theme.inherit: !background || !background.visible && !(control.highlighted || control.down) 0041 0042 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset, 0043 implicitContentWidth + leftPadding + rightPadding, 0044 implicitIndicatorWidth + leftPadding + rightPadding) 0045 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset, 0046 implicitContentHeight + topPadding + bottomPadding, 0047 implicitIndicatorHeight + topPadding + bottomPadding) 0048 baselineOffset: contentItem.y + contentItem.baselineOffset 0049 0050 // width: parent ? parent.width : implicitWidth 0051 0052 icon.width: Kirigami.Units.iconSizes.sizeForLabels 0053 icon.height: Kirigami.Units.iconSizes.sizeForLabels 0054 0055 Layout.fillWidth: true 0056 0057 spacing: Kirigami.Units.mediumSpacing 0058 padding: Kirigami.Units.mediumSpacing 0059 leftPadding: { 0060 if (!control.indicator.visible 0061 && ((!contentItem.hasIcon && contentItem.textBesideIcon) // False if contentItem has been replaced 0062 || display == T.AbstractButton.TextOnly 0063 || display == T.AbstractButton.TextUnderIcon)) { 0064 return Impl.Units.mediumHorizontalPadding 0065 } else { 0066 return control.horizontalPadding 0067 } 0068 } 0069 rightPadding: { 0070 if (!control.arrow.visible 0071 && contentItem.hasLabel // False if contentItem has been replaced 0072 && display != T.AbstractButton.IconOnly) { 0073 return Impl.Units.mediumHorizontalPadding 0074 } else { 0075 return control.horizontalPadding 0076 } 0077 } 0078 0079 Kirigami.MnemonicData.enabled: control.enabled && control.visible 0080 Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.MenuItem 0081 Kirigami.MnemonicData.label: control.text 0082 Shortcut { 0083 //in case of explicit & the button manages it by itself 0084 enabled: !(RegExp(/\&[^\&]/).test(control.text)) 0085 sequence: control.Kirigami.MnemonicData.sequence 0086 onActivated: { 0087 if (control.checkable) { 0088 control.toggle(); 0089 } else { 0090 control.clicked(); 0091 } 0092 } 0093 } 0094 0095 indicator: Loader { 0096 visible: control.checkable 0097 active: visible 0098 sourceComponent: control.autoExclusive ? radioIndicator : checkIndicator 0099 0100 onLoaded: { 0101 item.control = control; 0102 } 0103 0104 Component { 0105 id: checkIndicator 0106 Impl.CheckIndicator { 0107 checkState: control.checked ? Qt.Checked : Qt.Unchecked 0108 } 0109 } 0110 Component { 0111 id: radioIndicator 0112 Impl.RadioIndicator { 0113 } 0114 } 0115 } 0116 0117 arrow: Kirigami.Icon { 0118 anchors { 0119 right: control.right 0120 rightMargin: control.rightPadding 0121 verticalCenter: control.verticalCenter 0122 } 0123 source: control.mirrored ? "arrow-left" : "arrow-right" 0124 implicitWidth: Kirigami.Units.iconSizes.sizeForLabels 0125 implicitHeight: Kirigami.Units.iconSizes.sizeForLabels 0126 visible: control.subMenu 0127 } 0128 0129 contentItem: Impl.IconLabelShortcutContent { 0130 control: control 0131 text: control.Kirigami.MnemonicData.richTextLabel 0132 alignment: Qt.AlignLeft | Qt.AlignVCenter 0133 reserveSpaceForIndicator: control.__reserveSpaceForIndicator 0134 reserveSpaceForIcon: control.__reserveSpaceForIcon 0135 reserveSpaceForArrow: control.__reserveSpaceForArrow 0136 } 0137 0138 background: Impl.MenuItemBackground { 0139 control: control 0140 } 0141 }