Warning, /network/kdenetwork-filesharing/samba/filepropertiesplugin/qml/ChangePassword.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0003 SPDX-FileCopyrightText: 2020 Carson Black <uhhadd@gmail.com> 0004 SPDX-FileCopyrightText: 2020 Harld Sitter <sitter@kde.org> 0005 */ 0006 0007 import QtQuick 2.6 0008 import QtQuick.Layouts 1.3 0009 import QtQuick.Controls 2.5 as QQC2 0010 0011 import org.kde.kirigami 2.8 as Kirigami 0012 0013 Kirigami.OverlaySheet { 0014 id: passwordRoot 0015 0016 property string password 0017 property bool busy: false 0018 property alias errorMessage: persistentError.text 0019 signal accepted() 0020 0021 header: Kirigami.Heading { 0022 // FIXME make qml user name aware so we can be more contextually accurate and label it 'set password for foo' 0023 text: i18nc("@title", "Set password") 0024 } 0025 0026 function openAndClear() { 0027 verifyField.text = "" 0028 passwordField.text = "" 0029 passwordField.forceActiveFocus() 0030 open() 0031 } 0032 0033 function isAcceptable() { 0034 return !passwordWarning.visible && verifyField.text && passwordField.text; 0035 } 0036 0037 function maybeAccept() { 0038 if (!isAcceptable()) { 0039 return 0040 } 0041 0042 close() 0043 passwordRoot.password = passwordField.text 0044 accepted() 0045 } 0046 0047 function handleKeyEvent(event) { 0048 if (event.key === Qt.Key_Return || event.key === Qt.Key_Enter) { 0049 // 🤮 https://bugreports.qt.io/browse/QTBUG-70934 0050 event.accepted = true 0051 maybeAccept() 0052 } else if (event.key === Qt.Key_Escape) { 0053 // Handle Esc manually, within the sheet we'll want it to close the sheet rater than let the event fall 0054 // through to a higher level item (or worse yet QWidget). 0055 event.accepted = true 0056 close() 0057 } 0058 } 0059 0060 ColumnLayout { 0061 id: mainColumn 0062 spacing: Kirigami.Units.smallSpacing 0063 Layout.preferredWidth: Kirigami.Units.gridUnit * 15 0064 0065 // We don't use a FormLayout here because layouting breaks at small widths. 0066 ColumnLayout { 0067 id: inputLayout 0068 Layout.alignment: Qt.AlignHCenter 0069 visible: !busy.running 0070 0071 Kirigami.PasswordField { 0072 id: passwordField 0073 Layout.fillWidth: true 0074 Layout.alignment: Qt.AlignLeft 0075 placeholderText: i18nc("@label:textbox", "Password") 0076 0077 // Reset external error on any password change 0078 onTextChanged: errorMessage = "" 0079 // Don't use onAccepted it's no bueno. See handleKeyEvent 0080 } 0081 0082 Kirigami.PasswordField { 0083 id: verifyField 0084 Layout.fillWidth: true 0085 Layout.alignment: Qt.AlignLeft 0086 placeholderText: i18nc("@label:textbox", "Confirm password") 0087 0088 // Reset external error on any password change 0089 onTextChanged: errorMessage = "" 0090 // Don't use onAccepted it's no bueno. See handleKeyEvent 0091 } 0092 0093 Kirigami.InlineMessage { 0094 id: passwordWarning 0095 Layout.fillWidth: true 0096 type: Kirigami.MessageType.Error 0097 text: i18nc("@label error message", "Passwords must match") 0098 visible: passwordField.text != "" && verifyField.text != "" && passwordField.text != verifyField.text 0099 Layout.alignment: Qt.AlignLeft 0100 } 0101 0102 // This is a separate, second, message because otherwise we'd have to do a whole state conversion dance 0103 // logic that hurts my eyes. 0104 // This message is for problems in the backend that we need to tell the user about. It's different in 0105 // that the text is mutable and not controlled by us. 0106 Kirigami.InlineMessage { 0107 id: persistentError 0108 Layout.fillWidth: true 0109 Layout.alignment: Qt.AlignLeft 0110 type: Kirigami.MessageType.Error 0111 visible: text != "" 0112 } 0113 0114 QQC2.Button { 0115 id: passButton 0116 icon.name: "dialog-ok" 0117 text: i18nc("@action:button creates a new samba user with the user-specified password", "Set Password") 0118 enabled: isAcceptable() 0119 Layout.alignment: Qt.AlignRight 0120 onClicked: maybeAccept() 0121 } 0122 } 0123 0124 QQC2.BusyIndicator { 0125 id: busyIndicator 0126 Layout.alignment: Qt.AlignCenter 0127 visible: running 0128 running: passwordRoot.busy 0129 } 0130 } 0131 }