Warning, /plasma/plasma-bigscreen/kcms/wifi/ui/main.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2018 Aditya Mehra <aix.m@outlook.com> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 0006 */ 0007 0008 import QtQuick.Layouts 1.14 0009 import QtQuick 2.14 0010 import QtQuick.Window 2.14 0011 import QtQuick.Controls 2.14 0012 import org.kde.plasma.core 2.0 as PlasmaCore 0013 import org.kde.kirigami as Kirigami 0014 import org.kde.plasma.networkmanagement as PlasmaNM 0015 import org.kde.kcmutils as KCM 0016 import org.kde.mycroft.bigscreen 1.0 as BigScreen 0017 import "views" as Views 0018 import "delegates" as Delegates 0019 0020 KCM.SimpleKCM { 0021 id: networkSelectionView 0022 0023 title: Screen.devicePixelRatio.toFixed(2) //i18n("Network") 0024 background: null 0025 0026 leftPadding: Kirigami.Units.smallSpacing 0027 topPadding: 0 0028 rightPadding: Kirigami.Units.smallSpacing 0029 bottomPadding: 0 0030 0031 property string pathToRemove 0032 property string nameToRemove 0033 property bool isStartUp: false 0034 property var securityType 0035 property var connectionName 0036 property var devicePath 0037 property var specificPath 0038 0039 function connectToOpenNetwork(){ 0040 handler.addAndActivateConnection(devicePath, specificPath, passField.text) 0041 } 0042 0043 onActiveFocusChanged: { 0044 if (activeFocus) { 0045 handler.requestScan(); 0046 connectionView.forceActiveFocus(); 0047 } 0048 } 0049 0050 function removeConnection() { 0051 handler.removeConnection(pathToRemove) 0052 } 0053 0054 PlasmaNM.EnabledConnections { 0055 id: enabledConnections 0056 } 0057 0058 PlasmaNM.NetworkStatus { 0059 id: networkStatus 0060 } 0061 0062 PlasmaNM.ConnectionIcon { 0063 id: connectionIconProvider 0064 } 0065 0066 PlasmaNM.Handler { 0067 id: handler 0068 } 0069 0070 PlasmaNM.AvailableDevices { 0071 id: availableDevices 0072 } 0073 0074 PlasmaNM.NetworkModel { 0075 id: connectionModel 0076 } 0077 0078 Component { 0079 id: networkModelComponent 0080 PlasmaNM.NetworkModel {} 0081 } 0082 0083 PlasmaNM.AppletProxyModel { 0084 id: appletProxyModel 0085 sourceModel: connectionModel 0086 } 0087 0088 PlasmaNM.AppletProxyModel { 0089 id: connectedProxyModel 0090 sourceModel: connectionModel 0091 } 0092 0093 onRefreshingChanged: { 0094 if (refreshing) { 0095 refreshTimer.restart() 0096 handler.requestScan(); 0097 } 0098 } 0099 Timer { 0100 id: refreshTimer 0101 interval: 3000 0102 onTriggered: networkSelectionView.refreshing = false 0103 } 0104 0105 Dialog { 0106 id: passwordLayer 0107 parent: networkSelectionView 0108 0109 closePolicy: Popup.CloseOnEscape 0110 x: (parent.width - width) / 2 0111 y: (parent.height - height) / 2 0112 dim: true 0113 onVisibleChanged: { 0114 if (visible) { 0115 passField.forceActiveFocus(); 0116 } else { 0117 connectionView.forceActiveFocus(); 0118 } 0119 } 0120 contentItem: ColumnLayout { 0121 implicitWidth: Kirigami.Units.gridUnit * 25 0122 0123 Keys.onEscapePressed: passwordLayer.close() 0124 Kirigami.Heading { 0125 level: 2 0126 wrapMode: Text.WordWrap 0127 Layout.fillWidth: true 0128 horizontalAlignment: Text.AlignHCenter 0129 text: i18n("Enter Password For %1", connectionName) 0130 } 0131 0132 Kirigami.PasswordField { 0133 id: passField 0134 0135 KeyNavigation.down: connectButton 0136 KeyNavigation.up: closeButton 0137 Layout.fillWidth: true 0138 placeholderText: i18n("Password...") 0139 validator: RegularExpressionValidator { 0140 regularExpression: if (securityType == PlasmaNM.Enums.StaticWep) { 0141 /^(?:.{5}|[0-9a-fA-F]{10}|.{13}|[0-9a-fA-F]{26}){1}$/ 0142 } else { 0143 /^(?:.{8,64}){1}$/ 0144 } 0145 } 0146 0147 onAccepted: { 0148 handler.addAndActivateConnection(devicePath, specificPath, passField.text) 0149 passwordLayer.close(); 0150 } 0151 } 0152 0153 RowLayout { 0154 Layout.fillWidth: true 0155 Button { 0156 id: connectButton 0157 KeyNavigation.up: passField 0158 KeyNavigation.down: passField 0159 KeyNavigation.left: passField 0160 KeyNavigation.right: closeButton 0161 Layout.fillWidth: true 0162 text: i18n("Connect") 0163 0164 onClicked: passField.accepted(); 0165 Keys.onReturnPressed: { 0166 passField.accepted(); 0167 } 0168 } 0169 0170 Button { 0171 id: closeButton 0172 KeyNavigation.up: passField 0173 KeyNavigation.down: passField 0174 KeyNavigation.left: connectButton 0175 KeyNavigation.right: passField 0176 Layout.fillWidth: true 0177 text: i18n("Cancel") 0178 0179 onClicked: passwordLayer.close(); 0180 Keys.onReturnPressed: { 0181 passwordLayer.close(); 0182 } 0183 } 0184 } 0185 Item { 0186 Layout.fillHeight: true 0187 } 0188 } 0189 } 0190 0191 Kirigami.OverlaySheet { 0192 id: networkActions 0193 parent: networkSelectionView 0194 showCloseButton: false 0195 0196 onVisibleChanged: { 0197 if (visible) { 0198 forgetBtn.forceActiveFocus() 0199 } 0200 } 0201 0202 contentItem: ColumnLayout { 0203 implicitWidth: Kirigami.Units.gridUnit * 25 0204 0205 Label { 0206 Layout.fillWidth: true 0207 Layout.fillHeight: true 0208 wrapMode: Text.WordWrap 0209 text: i18n("Are you sure you want to forget the network %1?", nameToRemove) 0210 } 0211 0212 RowLayout { 0213 Button { 0214 id: forgetBtn 0215 Layout.fillWidth: true 0216 text: i18n("Forget") 0217 0218 onClicked: { 0219 removeConnection() 0220 networkActions.close() 0221 connectionView.forceActiveFocus() 0222 } 0223 0224 KeyNavigation.right: cancelBtn 0225 0226 Keys.onReturnPressed: { 0227 removeConnection() 0228 networkActions.close() 0229 connectionView.forceActiveFocus() 0230 } 0231 0232 Rectangle { 0233 anchors.fill: parent 0234 anchors.margins: -Kirigami.Units.smallSpacing * 0.5 0235 color: Kirigami.Theme.linkColor 0236 visible: forgetBtn.focus ? 1 : 0 0237 z: -10 0238 } 0239 } 0240 Button { 0241 id: cancelBtn 0242 Layout.fillWidth: true 0243 text: i18n("Cancel") 0244 0245 KeyNavigation.left: forgetBtn 0246 0247 onClicked: { 0248 networkActions.close() 0249 connectionView.forceActiveFocus() 0250 } 0251 0252 Keys.onReturnPressed: { 0253 networkActions.close() 0254 connectionView.forceActiveFocus() 0255 } 0256 0257 Rectangle { 0258 anchors.fill: parent 0259 anchors.margins: -Kirigami.Units.smallSpacing * 0.5 0260 color: Kirigami.Theme.linkColor 0261 visible: cancelBtn.focus ? 1 : 0 0262 z: -10 0263 } 0264 } 0265 } 0266 } 0267 } 0268 0269 0270 contentItem: FocusScope { 0271 0272 Rectangle { 0273 id: headerAreaTop 0274 anchors.left: parent.left 0275 anchors.right: parent.right 0276 anchors.leftMargin: -Kirigami.Units.largeSpacing 0277 anchors.rightMargin: -Kirigami.Units.largeSpacing 0278 height: parent.height * 0.075 0279 z: 10 0280 gradient: Gradient { 0281 GradientStop { position: 0.1; color: Qt.rgba(0, 0, 0, 0.5) } 0282 GradientStop { position: 0.9; color: Qt.rgba(0, 0, 0, 0.25) } 0283 } 0284 0285 Kirigami.Heading { 0286 level: 1 0287 anchors.fill: parent 0288 anchors.topMargin: Kirigami.Units.largeSpacing 0289 anchors.leftMargin: Kirigami.Units.largeSpacing * 2 0290 anchors.bottomMargin: Kirigami.Units.largeSpacing 0291 color: Kirigami.Theme.textColor 0292 text: "Networks" 0293 } 0294 } 0295 0296 Item { 0297 id: footerMain 0298 anchors.left: parent.left 0299 anchors.right: deviceConnectionView.left 0300 anchors.leftMargin: -Kirigami.Units.largeSpacing 0301 anchors.bottom: parent.bottom 0302 implicitHeight: Kirigami.Units.gridUnit * 2 0303 0304 RowLayout { 0305 id: footerArea 0306 anchors.fill: parent 0307 0308 Button { 0309 id: reloadButton 0310 Layout.fillWidth: true 0311 Layout.fillHeight: true 0312 KeyNavigation.up: connectionView 0313 KeyNavigation.right: kcmcloseButton 0314 0315 background: Rectangle { 0316 color: reloadButton.activeFocus ? Kirigami.Theme.highlightColor : Kirigami.Theme.backgroundColor 0317 } 0318 0319 contentItem: Item { 0320 RowLayout { 0321 anchors.centerIn: parent 0322 Kirigami.Icon { 0323 Layout.preferredWidth: Kirigami.Units.iconSizes.small 0324 Layout.preferredHeight: Kirigami.Units.iconSizes.small 0325 source: "view-refresh" 0326 } 0327 Label { 0328 text: i18n("Refresh") 0329 } 0330 } 0331 } 0332 0333 onClicked: { 0334 networkSelectionView.refreshing = true; 0335 connectionView.contentY = -Kirigami.Units.gridUnit * 4; 0336 } 0337 Keys.onReturnPressed: { 0338 networkSelectionView.refreshing = true; 0339 connectionView.contentY = -Kirigami.Units.gridUnit * 4; 0340 } 0341 } 0342 0343 Button { 0344 id: kcmcloseButton 0345 KeyNavigation.up: connectionView 0346 KeyNavigation.left: reloadButton 0347 Layout.fillWidth: true 0348 Layout.fillHeight: true 0349 0350 background: Rectangle { 0351 color: kcmcloseButton.activeFocus ? Kirigami.Theme.highlightColor : Kirigami.Theme.backgroundColor 0352 } 0353 0354 contentItem: Item { 0355 RowLayout { 0356 anchors.centerIn: parent 0357 Kirigami.Icon { 0358 Layout.preferredWidth: Kirigami.Units.iconSizes.small 0359 Layout.preferredHeight: Kirigami.Units.iconSizes.small 0360 source: "window-close" 0361 } 0362 Label { 0363 text: i18n("Exit") 0364 } 0365 } 0366 } 0367 0368 onClicked: { 0369 Window.window.close() 0370 } 0371 Keys.onReturnPressed: { 0372 Window.window.close() 0373 } 0374 } 0375 } 0376 } 0377 0378 ColumnLayout { 0379 anchors.left: parent.left 0380 anchors.leftMargin: Kirigami.Units.largeSpacing 0381 anchors.top: headerAreaTop.bottom 0382 anchors.topMargin: Kirigami.Units.largeSpacing * 2 0383 anchors.bottom: footerMain.top 0384 width: parent.width - deviceConnectionView.width 0385 0386 BigScreen.TileView { 0387 id: connectionView 0388 focus: true 0389 model: appletProxyModel 0390 Layout.alignment: Qt.AlignTop 0391 title: i18n("Manage Connections") 0392 currentIndex: 0 0393 delegate: Delegates.NetworkDelegate{} 0394 navigationDown: reloadButton 0395 Behavior on x { 0396 NumberAnimation { 0397 duration: Kirigami.Units.longDuration * 2 0398 easing.type: Easing.InOutQuad 0399 } 0400 } 0401 0402 onCurrentItemChanged: { 0403 deviceConnectionViewDetails.currentIndex = connectionView.currentIndex 0404 deviceConnectionViewDetails.positionViewAtIndex(currentIndex, ListView.Center); 0405 } 0406 } 0407 } 0408 0409 Kirigami.Separator { 0410 id: viewSept 0411 anchors.right: deviceConnectionView.left 0412 anchors.top: deviceConnectionView.top 0413 anchors.bottom: deviceConnectionView.bottom 0414 width: 1 0415 } 0416 0417 Rectangle { 0418 id: deviceConnectionView 0419 anchors.top: parent.top 0420 anchors.right: parent.right 0421 anchors.rightMargin: -Kirigami.Units.smallSpacing 0422 height: parent.height 0423 width: Kirigami.Units.gridUnit * 15 0424 color: Kirigami.Theme.backgroundColor 0425 0426 ListView { 0427 id: deviceConnectionViewDetails 0428 model: connectionView.model 0429 anchors.fill: parent 0430 anchors.topMargin: parent.height * 0.075 0431 layoutDirection: Qt.LeftToRight 0432 orientation: ListView.Horizontal 0433 snapMode: ListView.SnapOneItem; 0434 highlightRangeMode: ListView.StrictlyEnforceRange 0435 highlightFollowsCurrentItem: true 0436 spacing: Kirigami.Units.largeSpacing 0437 clip: true 0438 interactive: false 0439 implicitHeight: deviceConnectionView.implicitHeight 0440 currentIndex: 0 0441 delegate: DeviceConnectionItem{} 0442 } 0443 } 0444 } 0445 }