Warning, /frameworks/qqc2-desktop-style/org.kde.desktop/DialogButtonBox.qml is written in an unsupported language. File is not indexed.

0001 /*
0002     SPDX-FileCopyrightText: 2017 Marco Martin <mart@kde.org>
0003     SPDX-FileCopyrightText: 2017 The Qt Company Ltd.
0004 
0005     SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later
0006 */
0007 
0008 
0009 import QtQuick
0010 import QtQuick.Templates as T
0011 import org.kde.kirigami as Kirigami
0012 
0013 T.DialogButtonBox {
0014     id: control
0015 
0016     implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
0017                             implicitContentWidth + leftPadding + rightPadding)
0018     implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0019                              implicitContentHeight + topPadding + bottomPadding)
0020 
0021     contentWidth: (contentItem as ListView)?.contentWidth ?? 0
0022 
0023     spacing: Kirigami.Units.mediumSpacing
0024     padding: Kirigami.Units.smallSpacing
0025     alignment: Qt.AlignRight
0026 
0027     delegate: Button {
0028         // Round because fractional width values are possible.
0029         width: Math.floor(Math.min(
0030             implicitWidth,
0031             // Divide availableWidth (width - leftPadding - rightPadding) by the number of buttons,
0032             // then subtract the spacing between each button.
0033             ((control.availableWidth - (control.spacing * (control.count - 1))) / control.count)
0034         ))
0035         Kirigami.MnemonicData.controlType: Kirigami.MnemonicData.DialogButton
0036     }
0037 
0038     contentItem: ListView {
0039         implicitWidth: contentWidth
0040         implicitHeight: 32
0041 
0042         model: control.contentModel
0043         spacing: control.spacing
0044         orientation: ListView.Horizontal
0045         boundsBehavior: Flickable.StopAtBounds
0046         snapMode: ListView.SnapToItem
0047     }
0048 
0049     // Standard buttons are destroyed and then recreated every time
0050     // the `standardButtons` property changes, so it is necessary to
0051     // run this code every time standardButtonsChanged() is emitted.
0052     // See QQuickDialogButtonBox::setStandardButtons()
0053     onStandardButtonsChanged: {
0054         // standardButton() returns a pointer to an existing standard button.
0055         // If no such button exists, it returns nullptr.
0056         // Icon names are copied from KStyle::standardIcon()
0057         function setStandardIcon(buttonType, iconName) {
0058             const button = standardButton(buttonType)
0059             if (button && button.icon.name === "" && button.icon.source.toString() === "") {
0060                 button.icon.name = iconName
0061             }
0062         }
0063         setStandardIcon(T.Dialog.Ok, "dialog-ok")
0064         setStandardIcon(T.Dialog.Save, "document-save")
0065         setStandardIcon(T.Dialog.SaveAll, "document-save-all")
0066         setStandardIcon(T.Dialog.Open, "document-open")
0067         setStandardIcon(T.Dialog.Yes, "dialog-ok-apply")
0068         setStandardIcon(T.Dialog.YesToAll, "dialog-ok")
0069         setStandardIcon(T.Dialog.No, "dialog-cancel")
0070         setStandardIcon(T.Dialog.NoToAll, "dialog-cancel")
0071         setStandardIcon(T.Dialog.Abort, "dialog-cancel")
0072         setStandardIcon(T.Dialog.Retry, "view-refresh")
0073         setStandardIcon(T.Dialog.Ignore, "dialog-cancel")
0074         setStandardIcon(T.Dialog.Close, "dialog-close")
0075         setStandardIcon(T.Dialog.Cancel, "dialog-cancel")
0076         setStandardIcon(T.Dialog.Discard, "edit-delete")
0077         setStandardIcon(T.Dialog.Help, "help-contents")
0078         setStandardIcon(T.Dialog.Apply, "dialog-ok-apply")
0079         setStandardIcon(T.Dialog.Reset, "edit-undo")
0080         setStandardIcon(T.Dialog.RestoreDefaults, "document-revert")
0081     }
0082 }