Warning, /plasma/qqc2-breeze-style/style/qtquickcontrols/DialogButtonBox.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
0005 import QtQuick
0006 import QtQuick.Templates as T
0007 import org.kde.kirigami as Kirigami
0008
0009 import org.kde.breeze.impl as Impl
0010
0011 T.DialogButtonBox {
0012 id: control
0013
0014 readonly property bool __isHeader: control.position === T.DialogButtonBox.Header
0015 readonly property bool __isFooter: control.position === T.DialogButtonBox.Footer
0016
0017 // Children of QML Popup elements and subclasses of Popup are actually
0018 // children of an internal QQuickPopupItem, a subclass of QQuickPage.
0019 property bool __isInPopup: parent ? parent.toString().includes("QQuickPopupItem") : false
0020
0021 implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
0022 contentWidth + leftPadding + rightPadding)
0023 implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0024 contentHeight + topPadding + bottomPadding)
0025
0026 spacing: Kirigami.Units.smallSpacing
0027
0028 padding: Kirigami.Units.smallSpacing
0029
0030 alignment: Qt.AlignRight
0031
0032 delegate: Button {
0033 width: Math.round(Math.min(implicitWidth, (control.availableWidth / control.count) - (control.spacing * (control.count-1))))
0034 Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.DialogButton
0035 }
0036
0037 contentItem: ListView {
0038 pixelAligned: true
0039 model: control.contentModel
0040 spacing: control.spacing
0041 orientation: ListView.Horizontal
0042 boundsBehavior: Flickable.StopAtBounds
0043 snapMode: ListView.SnapToItem
0044 }
0045
0046 background: Kirigami.ShadowedRectangle {
0047 property real topRadius: control.__isHeader ? radius : 0
0048 property real bottomRadius: control.__isFooter ? radius : 0
0049 radius: control.__isInPopup ? Impl.Units.smallRadius : 0
0050 corners {
0051 topLeftRadius: topRadius
0052 topRightRadius: topRadius
0053 bottomLeftRadius: bottomRadius
0054 bottomRightRadius: bottomRadius
0055 }
0056 // Enough height for Buttons/ComboBoxes/TextFields with smallSpacing padding on top and bottom
0057 implicitHeight: Impl.Units.mediumControlHeight + (Kirigami.Units.smallSpacing * 2)
0058 color: control.__isInPopup ? "transparent" : Kirigami.Theme.backgroundColor
0059 }
0060
0061 // Standard buttons are destroyed and then recreated every time
0062 // the `standardButtons` property changes, so it is necessary to
0063 // run this code every time standardButtonsChanged() is emitted.
0064 // See QQuickDialogButtonBox::setStandardButtons()
0065 onStandardButtonsChanged: {
0066 // standardButton() returns a pointer to an existing standard button.
0067 // If no such button exists, it returns nullptr.
0068 // Icon names are copied from KStyle::standardIcon()
0069 function setStandardIcon(buttonType, iconName) {
0070 let button = standardButton(buttonType)
0071 // For some reason, `== ""` works, but `=== ""` and `!name && !source` doesn't.
0072 if (button && button.icon.name == "" && button.icon.source == "") {
0073 button.icon.name = iconName
0074 }
0075 }
0076 setStandardIcon(T.Dialog.Ok, "dialog-ok")
0077 setStandardIcon(T.Dialog.Save, "document-save")
0078 setStandardIcon(T.Dialog.SaveAll, "document-save-all")
0079 setStandardIcon(T.Dialog.Open, "document-open")
0080 setStandardIcon(T.Dialog.Yes, "dialog-ok-apply")
0081 setStandardIcon(T.Dialog.YesToAll, "dialog-ok")
0082 setStandardIcon(T.Dialog.No, "dialog-cancel")
0083 setStandardIcon(T.Dialog.NoToAll, "dialog-cancel")
0084 setStandardIcon(T.Dialog.Abort, "dialog-cancel")
0085 setStandardIcon(T.Dialog.Retry, "view-refresh")
0086 setStandardIcon(T.Dialog.Ignore, "dialog-cancel")
0087 setStandardIcon(T.Dialog.Close, "dialog-close")
0088 setStandardIcon(T.Dialog.Cancel, "dialog-cancel")
0089 setStandardIcon(T.Dialog.Discard, "edit-delete")
0090 setStandardIcon(T.Dialog.Help, "help-contents")
0091 setStandardIcon(T.Dialog.Apply, "dialog-ok-apply")
0092 setStandardIcon(T.Dialog.Reset, "edit-undo")
0093 setStandardIcon(T.Dialog.RestoreDefaults, "document-revert")
0094 }
0095 }