Warning, /plasma/plasma-workspace/components/dialogs/SystemDialog.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 * SPDX-FileCopyrightText: 2021 Aleix Pol Gonzalez <aleixpol@kde.org> 0003 * 0004 * SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 2.15 0008 import QtQuick.Controls 2.15 0009 import QtQuick.Layouts 1.15 0010 import QtQuick.Window 2.15 0011 import QtGraphicalEffects 1.12 0012 import org.kde.kirigami 2.18 as Kirigami 0013 import org.kde.plasma.lookandfeel 1.0 0014 0015 /** 0016 * Component to create CSD dialogs that come from the system. 0017 */ 0018 Kirigami.AbstractApplicationWindow { 0019 id: root 0020 0021 title: mainText 0022 /** 0023 * Main text of the dialog. 0024 */ 0025 property string mainText: title 0026 0027 /** 0028 * Subtitle of the dialog. 0029 */ 0030 property string subtitle: "" 0031 0032 /** 0033 * This property holds the icon used in the dialog. 0034 */ 0035 property string iconName: "" 0036 0037 /** 0038 * This property holds the list of actions for this dialog. 0039 * 0040 * Each action will be rendered as a button that the user will be able 0041 * to click. 0042 */ 0043 property list<Kirigami.Action> actions 0044 0045 default property Item mainItem 0046 0047 /** 0048 * This property holds the QQC2 DialogButtonBox used in the footer of the dialog. 0049 */ 0050 readonly property DialogButtonBox dialogButtonBox: contentDialog.item.dialogButtonBox 0051 0052 /** 0053 * Provides dialogButtonBox.standardButtons 0054 * 0055 * Useful to be able to set it as dialogButtonBox will be null as the object gets built 0056 */ 0057 property var standardButtons: contentDialog.item ? contentDialog.item.dialogButtonBox.standardButtons : undefined 0058 0059 /** 0060 * Controls whether the accept button is enabled 0061 */ 0062 property bool acceptable: true 0063 0064 0065 /** 0066 * The layout of the action buttons in the footer of the dialog. 0067 * 0068 * By default, if there are more than 3 actions, it will have `Qt.Vertical`. 0069 * 0070 * Otherwise, with zero to 2 actions, it will have `Qt.Horizontal`. 0071 * 0072 * This will only affect mobile dialogs. 0073 */ 0074 property int /*Qt.Orientation*/ layout: actions.length > 3 ? Qt.Vertical : Qt.Horizontal 0075 0076 flags: contentDialog.item.flags 0077 width: contentDialog.implicitWidth 0078 height: contentDialog.implicitHeight 0079 visible: false 0080 minimumHeight: contentDialog.item.minimumHeight 0081 minimumWidth: contentDialog.item.minimumWidth 0082 0083 function present() { 0084 contentDialog.item.present() 0085 } 0086 signal accept() 0087 signal reject() 0088 property bool accepted: false 0089 onAccept: { 0090 accepted = true 0091 close() 0092 } 0093 onReject: close() 0094 0095 onVisibleChanged: { 0096 if (!visible && !accepted) { 0097 root.reject() 0098 } 0099 width = Qt.binding(() => contentDialog.implicitWidth) 0100 height = Qt.binding(() => contentDialog.implicitHeight) 0101 } 0102 0103 Binding { 0104 target: dialogButtonBox.standardButton(DialogButtonBox.Ok) 0105 property: "enabled" 0106 when: dialogButtonBox.standardButton(DialogButtonBox.Ok) 0107 value: root.acceptable 0108 } 0109 0110 Loader { 0111 id: contentDialog 0112 anchors.fill: parent 0113 Component.onCompleted: { 0114 var component = LookAndFeel.fileUrl("systemdialogscript") 0115 setSource(component, { 0116 window: root, 0117 mainText: root.mainText, 0118 subtitle: root.subtitle, 0119 actions: root.actions, 0120 iconName: root.iconName, 0121 mainItem: root.mainItem, 0122 standardButtons: root.standardButtons 0123 }) 0124 } 0125 0126 focus: true 0127 0128 function accept() { 0129 const button = dialogButtonBox.standardButton(DialogButtonBox.Ok); 0130 if (button && button.enabled) { 0131 root.accept() 0132 } 0133 } 0134 Keys.onEnterPressed: accept() 0135 Keys.onReturnPressed: accept() 0136 Keys.onEscapePressed: root.reject() 0137 } 0138 }