Warning, /libraries/kirigami-addons/src/components/MessageDialogButton.qml is written in an unsupported language. File is not indexed.

0001 // SPDX-FileCopyrightText: 2023 Carl Schwan <carl@carlschwan.eu>
0002 // SPDX-License-Identifier: LGPL-2.1-or-later
0003 
0004 import QtQuick
0005 import QtQuick.Controls as QQC2
0006 import QtQuick.Templates as T
0007 import QtQuick.Layouts
0008 import org.kde.kirigami as Kirigami
0009 import org.kde.kirigamiaddons.components as Components
0010 import org.kde.kirigamiaddons.delegates as Delegates
0011 
0012 QQC2.AbstractButton {
0013     id: root
0014 
0015     required property T.DialogButtonBox buttonBox
0016 
0017     readonly property int index: {
0018         for (let i = 0; i < buttonBox.count; i++) {
0019             if (buttonBox.contentChildren[i] == root) {
0020                 return i;
0021             }
0022         }
0023         return -1;
0024     }
0025 
0026     padding: Kirigami.Units.mediumSpacing
0027 
0028     implicitWidth: Math.floor(Math.max(
0029         contentItem.implicitWidth,
0030         ((buttonBox.availableWidth - (buttonBox.spacing * (buttonBox.count - 1))) / buttonBox.count)
0031     )) + (index === 0 ? 1 : 0)
0032 
0033     implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
0034                              implicitContentHeight + topPadding + bottomPadding)
0035 
0036     contentItem: Delegates.DefaultContentItem {
0037         itemDelegate: root
0038         labelItem {
0039             horizontalAlignment: Text.AlignHCenter
0040             Accessible.ignored: true
0041         }
0042     }
0043 
0044     background: Kirigami.ShadowedRectangle {
0045         corners {
0046             topLeftRadius: 0
0047             bottomLeftRadius: root.index === 0 ? Kirigami.Units.mediumSpacing : 0
0048 
0049             bottomRightRadius: root.index === buttonBox.count - 1 ? Kirigami.Units.mediumSpacing : 0
0050             topRightRadius: 0
0051         }
0052 
0053         color: {
0054             let backgroundColor;
0055             switch (root.QQC2.DialogButtonBox.buttonRole) {
0056             case QQC2.DialogButtonBox.AcceptRole:
0057             case QQC2.DialogButtonBox.ApplyRole:
0058                 backgroundColor = Kirigami.Theme.positiveBackgroundColor;
0059                 break;
0060             case QQC2.DialogButtonBox.DestructiveRole:
0061                 backgroundColor = Kirigami.Theme.negativeBackgroundColor;
0062                 break;
0063             default:
0064                 backgroundColor = Kirigami.Theme.backgroundColor;
0065                 break;
0066             }
0067 
0068             if (root.highlighted || root.checked || (root.down && !root.checked) || root.visualFocus) {
0069                 const highlight = Kirigami.ColorUtils.tintWithAlpha(backgroundColor, Kirigami.Theme.highlightColor, 0.3);
0070                 if (root.hovered) {
0071                     return Kirigami.ColorUtils.tintWithAlpha(highlight, Kirigami.Theme.textColor, 0.10);
0072                 } else {
0073                     return highlight;
0074                 }
0075             } else if (root.hovered) {
0076                 return Kirigami.ColorUtils.tintWithAlpha(backgroundColor, Kirigami.Theme.textColor, 0.10);
0077             } else {
0078                 return backgroundColor;
0079             }
0080         }
0081     }
0082 }