Warning, /plasma/plasma-nm/kcm/qml/ConfigurationDialog.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Jan Grulich <jgrulich@redhat.com> 0003 SPDX-FileCopyrightText: 2023 ivan tkachenko <me@ratijas.tk> 0004 0005 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0006 */ 0007 0008 import QtQuick 0009 import QtQuick.Controls as QQC2 0010 import QtQuick.Layouts 0011 import org.kde.kcmutils as KCMUtils 0012 import org.kde.kirigami as Kirigami 0013 import org.kde.plasma.networkmanagement as PlasmaNM 0014 0015 QQC2.ApplicationWindow { 0016 id: root 0017 0018 required property PlasmaNM.Handler handler 0019 0020 title: i18nc("@title:window", "Configuration") 0021 0022 minimumHeight: Kirigami.Units.gridUnit * 6 0023 maximumHeight: page.implicitHeight + dialogButtonBox.implicitHeight 0024 height: maximumHeight 0025 minimumWidth: Kirigami.Units.gridUnit * 15 0026 width: Kirigami.Units.gridUnit * 25 0027 0028 KCMUtils.SimpleKCM { 0029 id: page 0030 0031 anchors.fill: parent 0032 0033 Kirigami.FormLayout { 0034 Kirigami.Separator { 0035 Kirigami.FormData.label: i18n("General") 0036 Kirigami.FormData.isSection: true 0037 } 0038 0039 QQC2.CheckBox { 0040 id: unlockModem 0041 Layout.fillWidth: true 0042 KeyNavigation.down: manageVirtualConnections 0043 text: i18n("Ask for PIN on modem detection") 0044 } 0045 0046 QQC2.CheckBox { 0047 id: manageVirtualConnections 0048 Layout.fillWidth: true 0049 KeyNavigation.down: hotspotName 0050 text: i18n("Show virtual connections") 0051 } 0052 0053 Kirigami.Separator { 0054 id: hotspotLabel 0055 Kirigami.FormData.label: i18n("Hotspot") 0056 Kirigami.FormData.isSection: true 0057 } 0058 0059 QQC2.TextField { 0060 id: hotspotName 0061 Layout.fillWidth: true 0062 KeyNavigation.down: hotspotPassword 0063 Kirigami.FormData.label: i18nc("@label Hotspot name", "Name:") 0064 } 0065 0066 Kirigami.PasswordField { 0067 id: hotspotPassword 0068 Layout.fillWidth: true 0069 Kirigami.FormData.label: i18nc("@label Hotspot password", "Password:") 0070 showPassword: true 0071 validator: RegularExpressionValidator { 0072 // useApMode is a context property 0073 regularExpression: useApMode 0074 ? /^$|^(?:.{8,64}){1}$/ 0075 : /^$|^(?:.{5}|[0-9a-fA-F]{10}|.{13}|[0-9a-fA-F]{26}){1}$/ 0076 } 0077 } 0078 } 0079 0080 footer: ColumnLayout { 0081 spacing: 0 0082 0083 Kirigami.InlineMessage { 0084 Layout.fillWidth: true 0085 Layout.margins: Kirigami.Units.largeSpacing 0086 Layout.bottomMargin: 0 0087 type: Kirigami.MessageType.Error 0088 text: i18n("Hotspot name must not be empty") 0089 visible: handler.hotspotSupported && hotspotName.text === "" 0090 } 0091 0092 Kirigami.InlineMessage { 0093 Layout.fillWidth: true 0094 Layout.margins: Kirigami.Units.largeSpacing 0095 Layout.bottomMargin: 0 0096 type: Kirigami.MessageType.Error 0097 text: useApMode 0098 ? i18n("Hotspot password must either be empty or consist of anywhere from 8 up to 64 characters") 0099 : i18n("Hotspot password must either be empty or consist of one of the following:<ul><li>Exactly 5 or 13 any characters</li><li>Exactly 10 or 26 hexadecimal characters:<br/>abcdef, ABCDEF or 0-9</li></ul>") 0100 visible: handler.hotspotSupported && !hotspotPassword.acceptableInput 0101 } 0102 } 0103 } 0104 0105 footer: QQC2.DialogButtonBox { 0106 id: dialogButtonBox 0107 0108 standardButtons: QQC2.DialogButtonBox.Ok | QQC2.DialogButtonBox.Cancel | QQC2.DialogButtonBox.Reset 0109 0110 onAccepted: root.accept() 0111 onRejected: root.reject() 0112 onReset: root.loadConfiguration() 0113 0114 KeyNavigation.up: hotspotPassword 0115 0116 Component.onCompleted: { 0117 const okButton = standardButton(QQC2.DialogButtonBox.Ok); 0118 if (okButton) { 0119 okButton.enabled = Qt.binding(() => root.acceptableConfiguration()); 0120 hotspotPassword.KeyNavigation.down = okButton; 0121 } 0122 } 0123 } 0124 0125 Shortcut { 0126 sequences: ["Return", "Enter"] 0127 onActivated: root.accept() 0128 } 0129 0130 Shortcut { 0131 sequences: [StandardKey.Back, StandardKey.Cancel, StandardKey.Close] 0132 onActivated: root.reject() 0133 } 0134 0135 // Unfortunately, unlike Dialog, DialogButtonBox lacks accept and reject 0136 // methods. Though unlike DialogButtonBox we also want to make sure that 0137 // OK button is enabled. 0138 function accept() { 0139 if (acceptableConfiguration()) { 0140 saveConfiguration(); 0141 close(); 0142 } 0143 } 0144 0145 function reject() { 0146 close(); 0147 } 0148 0149 function acceptableConfiguration(): bool { 0150 if (handler.hotspotSupported) { 0151 return hotspotName.text !== "" && hotspotPassword.acceptableInput; 0152 } else { 0153 return true; 0154 } 0155 } 0156 0157 function loadConfiguration() { 0158 unlockModem.checked = PlasmaNM.Configuration.unlockModemOnDetection; 0159 manageVirtualConnections.checked = PlasmaNM.Configuration.manageVirtualConnections; 0160 // hotspot 0161 hotspotLabel.visible = handler.hotspotSupported; 0162 hotspotName.visible = handler.hotspotSupported; 0163 hotspotPassword.visible = handler.hotspotSupported; 0164 if (handler.hotspotSupported) { 0165 hotspotName.text = PlasmaNM.Configuration.hotspotName; 0166 hotspotPassword.text = PlasmaNM.Configuration.hotspotPassword; 0167 } 0168 } 0169 0170 function saveConfiguration() { 0171 PlasmaNM.Configuration.unlockModemOnDetection = unlockModem.checked; 0172 PlasmaNM.Configuration.manageVirtualConnections = manageVirtualConnections.checked; 0173 if (handler.hotspotSupported) { 0174 PlasmaNM.Configuration.hotspotName = hotspotName.text; 0175 PlasmaNM.Configuration.hotspotPassword = hotspotPassword.text; 0176 } 0177 } 0178 0179 onVisibleChanged: { 0180 if (visible) { 0181 loadConfiguration(); 0182 unlockModem.forceActiveFocus(Qt.ActiveWindowFocusReason); 0183 } 0184 } 0185 }