Warning, /plasma/qqc2-breeze-style/style/qtquickcontrols/ToolButton.qml is written in an unsupported language. File is not indexed.
0001 /* SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com>
0002 * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0003 */
0004 import QtQuick
0005 import QtQuick.Templates as T
0006 import org.kde.kirigami as Kirigami
0007 import org.kde.breeze
0008 import org.kde.breeze.impl as Impl
0009
0010 T.ToolButton {
0011 id: control
0012
0013 // HACK: Compatibility with qqc2-desktop-style hack for showing arrows when buttons open menus
0014 // This one is at the level of `control` to make it more reliably accessible to the indicator.
0015 // Unlike qqc2-desktop-style, the arrow is in the indicator property instead of the background.
0016 property bool __showMenuArrow: false
0017
0018 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
0019 implicitContentWidth + leftPadding + rightPadding,
0020 implicitIndicatorWidth + leftPadding + rightPadding)
0021 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0022 implicitContentHeight + topPadding + bottomPadding,
0023 implicitIndicatorHeight + topPadding + bottomPadding)
0024
0025 flat: true
0026
0027 hoverEnabled: Qt.styleHints.useHoverEffects
0028
0029 Kirigami.Theme.colorSet: /*control.highlighted ? Kirigami.Theme.Selection :*/ Kirigami.Theme.Button
0030 Kirigami.Theme.inherit: false//control.flat && !control.down && !control.checked
0031 // Absolutely terrible HACK:
0032 // For some reason, ActionToolBar overrides the colorSet and inherit attached properties
0033 Component.onCompleted: {
0034 //console.log("colorSet: " + Kirigami.Theme.colorSet)
0035 //console.log("inherit: " + Kirigami.Theme.inherit)
0036 Kirigami.Theme.colorSet = Kirigami.Theme.Button/*Qt.binding(() => control.highlighted ? Kirigami.Theme.Selection : Kirigami.Theme.Button)*/
0037 Kirigami.Theme.inherit = false//Qt.binding(() => control.flat && !(control.down || control.checked))
0038 }
0039
0040 padding: Kirigami.Units.mediumSpacing
0041 leftPadding: {
0042 if ((!contentItem.hasIcon && contentItem.textBesideIcon) // False if contentItem has been replaced
0043 || display == T.AbstractButton.TextOnly
0044 || display == T.AbstractButton.TextUnderIcon) {
0045 return Impl.Units.largeHorizontalPadding
0046 } else {
0047 return control.horizontalPadding
0048 }
0049 }
0050 rightPadding: {
0051 if (contentItem.hasLabel && display != T.AbstractButton.IconOnly) { // False if contentItem has been replaced
0052 return Impl.Units.largeHorizontalPadding
0053 } else {
0054 return control.horizontalPadding
0055 }
0056 }
0057
0058 spacing: Kirigami.Units.mediumSpacing
0059
0060 icon.width: Kirigami.Units.iconSizes.sizeForLabels
0061 icon.height: Kirigami.Units.iconSizes.sizeForLabels
0062
0063 Kirigami.MnemonicData.enabled: control.enabled && control.visible
0064 Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.ActionElement
0065 Kirigami.MnemonicData.label: control.display !== T.Button.IconOnly ? control.text : ""
0066 Shortcut {
0067 //in case of explicit & the button manages it by itself
0068 enabled: !(RegExp(/\&[^\&]/).test(control.text))
0069 sequence: control.Kirigami.MnemonicData.sequence
0070 onActivated: control.clicked()
0071 }
0072
0073 contentItem:Impl.IconLabelContent {
0074 control: control
0075 text: control.Kirigami.MnemonicData.richTextLabel
0076 }
0077
0078 // Using a Loader here reduces the RAM usage
0079 indicator: Loader {
0080 property alias iconHeight: control.icon.height
0081 property alias iconWidth: control.icon.width
0082 anchors {
0083 right: control.right
0084 rightMargin: control.rightPadding
0085 verticalCenter: control.verticalCenter
0086 }
0087 visible: control.__showMenuArrow
0088 active: visible
0089 sourceComponent: Component {
0090 Kirigami.Icon {
0091 anchors.centerIn: parent
0092 implicitHeight: iconHeight
0093 implicitWidth: iconWidth
0094 source: "arrow-down"
0095 }
0096 }
0097 }
0098
0099 background: Impl.ButtonBackground {
0100 // HACK: Compatibility with qqc2-desktop-style hack for showing arrows when buttons open menus
0101 // This one is in the background because that's what Kirigami expects
0102 property alias showMenuArrow: control.__showMenuArrow
0103 control: control
0104 }
0105 }