Warning, /plasma/plasma-mobile/kcms/wifi/ui/NetworkSettings.qml is written in an unsupported language. File is not indexed.
0001 // SPDX-FileCopyrightText: 2017 Martin Kacej <m.kacej@atlas.sk>
0002 // SPDX-FileCopyrightText: 2023 Devin Lin <devin@kde.org>
0003 // SPDX-License-Identifier: LGPL-2.0-or-later
0004
0005 import QtQuick
0006 import QtQuick.Layouts
0007 import QtQuick.Controls as Controls
0008
0009 import org.kde.kirigami as Kirigami
0010 import org.kde.plasma.networkmanagement as PlasmaNM
0011 import org.kde.kcmutils
0012 import org.kde.kirigamiaddons.formcard 1 as FormCard
0013
0014 Kirigami.ScrollablePage {
0015 title: path ? wirelessSettings["ssid"] : i18n("Add New Connection")
0016
0017 property var path
0018
0019 property var wirelessSettings: ({})
0020 property var securitySettings: ({})
0021 property var ipSettings: ({})
0022 property var secrets: ({})
0023
0024 property var ipRegex: /^(([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))\.){3}([01]?[0-9]?[0-9]|2([0-4][0-9]|5[0-5]))$/
0025
0026 property bool enabledSave: (ipMethodCombobox.currentIndex == 0
0027 || (ipMethodCombobox.currentIndex == 1
0028 && manualIPaddress.acceptableInput
0029 && manualIPgateway.acceptableInput
0030 && manualIPprefix.acceptableInput
0031 && manualIPdns.acceptableInput))
0032
0033 actions: [
0034 Kirigami.Action {
0035 icon.name: "dialog-ok"
0036 text: i18n("Save")
0037 enabled: enabledSave
0038 onTriggered: {
0039 save()
0040 kcm.pop()
0041 }
0042 }
0043 ]
0044
0045 topPadding: Kirigami.Units.gridUnit
0046 bottomPadding: Kirigami.Units.gridUnit
0047 leftPadding: 0
0048 rightPadding: 0
0049
0050 ColumnLayout {
0051 FormCard.FormHeader {
0052 title: i18n('General')
0053 }
0054
0055 FormCard.FormCard {
0056 FormCard.FormTextFieldDelegate {
0057 id: ssidField
0058 label: i18n('SSID')
0059 text: wirelessSettings["ssid"] ? wirelessSettings["ssid"] : ""
0060 enabled: true
0061 onTextChanged: {
0062 ipSettings["id"] = text
0063 }
0064 }
0065
0066 FormCard.FormDelegateSeparator {
0067 above: ssidField
0068 below: hidden
0069 }
0070
0071 FormCard.FormSwitchDelegate {
0072 id: hidden
0073 text: i18n("Hidden Network")
0074 checked: wirelessSettings["hidden"] ? wirelessSettings["hidden"] : false
0075 onToggled: ipSettings["hidden"] = checked
0076 }
0077 }
0078
0079 FormCard.FormHeader {
0080 title: i18n('Security')
0081 }
0082
0083 FormCard.FormCard {
0084 FormCard.FormComboBoxDelegate {
0085 id: securityCombobox
0086 currentIndex: 0
0087 text: i18n('Security type')
0088 model: ListModel {
0089 id: securityTypesModel
0090 // FIXME just placeholder element to set "text" property as default
0091 ListElement {
0092 text: "placeholder"
0093 }
0094 function load() {
0095 clear()
0096 append({ "text": i18n("None"), "type": PlasmaNM.Enums.NoneSecurity })
0097 append({ "text": i18n("WEP Key"), "type": PlasmaNM.Enums.StaticWep })
0098 append({ "text": i18n("Dynamic WEP"), "type": PlasmaNM.Enums.DynamicWep })
0099 append({ "text": i18n("WPA/WPA2 Personal"), "type": PlasmaNM.Enums.Wpa2Psk })
0100 append({ "text": i18n("WPA/WPA2 Enterprise"), "type": PlasmaNM.Enums.Wpa2Eap })
0101 switch (securitySettings["key-mgmt"]) {
0102 case "none":
0103 securityCombobox.currentIndex = 0
0104 break
0105 case "ieee8021x":
0106 securityCombobox.currentIndex = 1
0107 break
0108 case "wpa-psk":
0109 securityCombobox.currentIndex = 3
0110 break
0111 case "wpa-eap":
0112 securityCombobox.currentIndex = 4
0113 break
0114 default:
0115 securityCombobox.currentIndex = 0
0116 break
0117 }
0118 }
0119 }
0120 }
0121
0122 FormCard.FormDelegateSeparator {
0123 above: securityCombobox
0124 below: passwordDelegate
0125 visible: passwordDelegate.visible
0126 }
0127
0128 FormCard.FormTextFieldDelegate {
0129 id: passwordDelegate
0130 label: i18n('Password')
0131 echoMode: TextInput.Password
0132 inputMethodHints: Qt.ImhHiddenText
0133 text: secrets["psk"]
0134 visible: securityTypesModel.get(securityCombobox.currentIndex).type !== PlasmaNM.Enums.NoneSecurity
0135 onTextChanged: securitySettings["password"] = text
0136 }
0137
0138 FormCard.FormDelegateSeparator {
0139 above: passwordDelegate
0140 below: authComboBox
0141 visible: authComboBox.visible
0142 }
0143
0144 FormCard.FormComboBoxDelegate {
0145 id: authComboBox
0146 text: i18n("Authentication:")
0147 currentIndex: 0
0148 visible: securityCombobox.currentIndex === 2
0149 || securityCombobox.currentIndex === 4
0150 model: [i18n("TLS"), i18n("LEAP"), i18n("FAST"), i18n(
0151 "Tunneled TLS"), i18n(
0152 "Protected EAP")] // more - SIM, AKA, PWD ?
0153 }
0154
0155 Controls.Label {
0156 visible: securityCombobox.currentIndex !== 3 && securityCombobox.currentIndex !== 0
0157 text: "----Not yet implemented----"
0158 color: "red"
0159 }
0160 }
0161
0162 FormCard.FormHeader {
0163 title: i18n('IP Settings')
0164 }
0165
0166 FormCard.FormCard {
0167 FormCard.FormComboBoxDelegate {
0168 id: ipMethodCombobox
0169 text: i18n('Method')
0170 model: [i18n("Automatic"), i18n("Manual")]
0171 currentIndex: ipSettings["method"] === "manual" ? 1 : 0
0172 property var manualIp: currentIndex === 1
0173 onCurrentIndexChanged: {
0174 ipSettings["method"] = currentIndex === 1 ? "manual" : "auto"
0175 }
0176 }
0177
0178 FormCard.FormDelegateSeparator {
0179 above: ipMethodCombobox
0180 below: manualIPaddress
0181 visible: manualIPaddress.visible
0182 }
0183
0184 FormCard.FormTextFieldDelegate {
0185 id: manualIPaddress
0186 label: i18n("IP Address")
0187 visible: ipMethodCombobox.manualIp
0188 placeholderText: "192.168.1.128"
0189 text: ipSettings["address"] ? ipSettings["address"] : ""
0190 onTextChanged: ipSettings["address"] = text
0191 validator: RegularExpressionValidator {
0192 regularExpression: ipRegex
0193 }
0194 }
0195
0196 FormCard.FormDelegateSeparator {
0197 above: manualIPaddress
0198 below: manualIPgateway
0199 visible: manualIPgateway.visible
0200 }
0201
0202 FormCard.FormTextFieldDelegate {
0203 id: manualIPgateway
0204 label: i18n("Gateway")
0205 visible: ipMethodCombobox.manualIp
0206 placeholderText: "192.168.1.1"
0207 text: ipSettings["gateway"] ? ipSettings["gateway"] : ""
0208 onTextChanged: ipSettings["gateway"] = text
0209 validator: RegularExpressionValidator {
0210 regularExpression: ipRegex
0211 }
0212 }
0213
0214 FormCard.FormDelegateSeparator {
0215 above: manualIPgateway
0216 below: manualIPprefix
0217 visible: manualIPprefix.visible
0218 }
0219
0220 FormCard.FormTextFieldDelegate {
0221 id: manualIPprefix
0222 label: i18n("Network prefix length")
0223 visible: ipMethodCombobox.manualIp
0224 placeholderText: "16"
0225 text: ipSettings["prefix"] ? ipSettings["prefix"] : ""
0226 onTextChanged: ipSettings["prefix"] = text
0227 validator: IntValidator {
0228 bottom: 1
0229 top: 32
0230 }
0231 }
0232
0233 FormCard.FormDelegateSeparator {
0234 above: manualIPprefix
0235 below: manualIPdns
0236 visible: manualIPdns.visible
0237 }
0238
0239 FormCard.FormTextFieldDelegate {
0240 id: manualIPdns
0241 label: i18n("DNS")
0242 visible: ipMethodCombobox.manualIp
0243 placeholderText: "8.8.8.8"
0244 text: ipSettings["dns"] ? ipSettings["dns"] : ""
0245 onTextChanged: ipSettings["dns"] = text
0246 validator: RegularExpressionValidator {
0247 regularExpression: ipRegex
0248 }
0249 }
0250 }
0251 }
0252
0253 Component.onCompleted: {
0254 wirelessSettings = kcm.getConnectionSettings(path, "802-11-wireless")
0255 securitySettings = kcm.getConnectionSettings(path, "802-11-wireless-security")
0256 ipSettings = kcm.getConnectionSettings(path, "ipv4")
0257 secrets = kcm.getConnectionSettings(path, "secrets")
0258
0259 securityTypesModel.load()
0260 }
0261
0262 function save() {
0263 var settings = ipSettings
0264 settings["mode"] = "infrastructure"
0265 securitySettings["type"] = securityTypesModel.get(securityCombobox.currentIndex).type
0266 settings["802-11-wireless-security"] = securitySettings
0267
0268 if (path)
0269 kcm.updateConnectionFromQML(path, settings)
0270 else
0271 kcm.addConnectionFromQML(settings)
0272 }
0273 }