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 }