This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
powersync-app/mea/ui/WirelessControlerPage.qml
2018-05-17 13:52:40 +02:00

435 lines
15 KiB
QML

import QtQuick 2.4
import QtQuick.Controls 2.1
import QtQuick.Layouts 1.2
import QtQuick.Controls.Material 2.1
import "components"
import Mea 1.0
Page {
id: root
property string name
property string address
property QtObject networkManger
header: GuhHeader {
text: qsTr("Wireless network")
onBackPressed: {
pageStack.pop()
pageStack.pop()
}
HeaderButton {
imageSource: Qt.resolvedUrl("images/refresh.svg")
onClicked: networkManger.manager.loadNetworks()
}
HeaderButton {
imageSource: Qt.resolvedUrl("images/settings.svg")
onClicked: pageStack.push(settingsPage)
}
}
Component.onCompleted: networkManger.manager.loadNetworks()
Connections {
target: networkManger.manager
onErrorOccured: {
print("Error occured", errorMessage)
errorDialog.errorText = errorMessage
errorDialog.open()
}
onWirelessStatusChanged: {
switch(networkManger.manager.wirelessStatus) {
case WirelessSetupManager.WirelessStatusDisconnected:
networkManger.manager.accessPoints.setSelectedNetwork("", "")
}
}
}
ColumnLayout {
anchors.fill: parent
visible: networkManger.manager.initialized
Label {
wrapMode: Text.WordWrap
Layout.alignment: Qt.AlignHCenter
text:{
switch (networkManger.manager.networkStatus) {
case WirelessSetupManager.NetworkStatusUnknown:
return qsTr("Unknown status.");
case WirelessSetupManager.NetworkStatusAsleep:
return qsTr("Asleep.");
case WirelessSetupManager.NetworkStatusDisconnected:
return qsTr("Disconnected.");
case WirelessSetupManager.NetworkStatusDisconnecting:
return qsTr("Disconnecting...");
case WirelessSetupManager.NetworkStatusConnecting:
return qsTr("Connecting...");
case WirelessSetupManager.NetworkStatusLocal:
return qsTr("Connected local.");
case WirelessSetupManager.NetworkStatusConnectedSite:
return qsTr("Connected site.");
case WirelessSetupManager.NetworkStatusGlobal:
return qsTr("Online.");
}
}
}
BusyIndicator {
Layout.alignment: Qt.AlignHCenter
running: networkManger.manager.working
}
ThinDivider { }
ListView {
Layout.fillWidth: true
Layout.fillHeight: true
model: networkManger.manager.accessPoints
clip: true
delegate: ItemDelegate {
width: parent.width
height: model.selectedNetwork ? app.delegateHeight * 1.5 : app.delegateHeight
Rectangle {
anchors.fill: parent
color: guhAccent
visible: model.selectedNetwork
}
RowLayout {
anchors.verticalCenter: parent.verticalCenter
anchors.left: parent.left
anchors.right: parent.right
Item {
Layout.preferredHeight: app.delegateHeight
Layout.preferredWidth: height
ColorIcon {
id: image
anchors.fill: parent
anchors.margins: app.margins / 2
name: {
if (model.protected) {
if (model.signalStrength <= 25)
return Qt.resolvedUrl("images/nm-signal-25-secure.svg")
if (model.signalStrength <= 50)
return Qt.resolvedUrl("images/nm-signal-50-secure.svg")
if (model.signalStrength <= 75)
return Qt.resolvedUrl("images/nm-signal-75-secure.svg")
if (model.signalStrength <= 100)
return Qt.resolvedUrl("images/nm-signal-100-secure.svg")
} else {
if (model.signalStrength <= 25)
return Qt.resolvedUrl("images/nm-signal-25.svg")
if (model.signalStrength <= 50)
return Qt.resolvedUrl("images/nm-signal-50.svg")
if (model.signalStrength <= 75)
return Qt.resolvedUrl("images/nm-signal-75.svg")
if (model.signalStrength <= 100)
return Qt.resolvedUrl("images/nm-signal-100.svg")
}
}
}
}
Label {
Layout.alignment: Qt.AlignVCenter
text: model.signalStrength + "%"
}
ColumnLayout {
Layout.fillWidth: true
Layout.alignment: Qt.AlignVCenter
Label {
text: model.ssid
}
Label {
text: model.macAddress
font.pixelSize: app.smallFont
}
Label {
text: {
switch (networkManger.manager.wirelessStatus) {
case WirelessSetupManager.WirelessStatusUnknown:
return qsTr("Unknown status.");
case WirelessSetupManager.WirelessStatusUnmanaged:
return qsTr("Network unmanaged.");
case WirelessSetupManager.WirelessStatusUnavailable:
return qsTr("Network unavailable.");
case WirelessSetupManager.WirelessStatusDisconnected:
return qsTr("Disconnected.");
case WirelessSetupManager.WirelessStatusPrepare:
return qsTr("Prepare connection...");
case WirelessSetupManager.WirelessStatusConfig:
return qsTr("Configure network...");
case WirelessSetupManager.WirelessStatusNeedAuth:
return qsTr("Authentication needed");
case WirelessSetupManager.WirelessStatusIpConfig:
return qsTr("Configuration IP...");
case WirelessSetupManager.WirelessStatusIpCheck:
return qsTr("Check IP...");
case WirelessSetupManager.WirelessStatusSecondaries:
return qsTr("Secondaries...");
case WirelessSetupManager.WirelessStatusActivated:
return qsTr("Network connected.");
case WirelessSetupManager.WirelessStatusDeactivating:
return qsTr("Network disconnecting...");
case WirelessSetupManager.WirelessStatusFailed:
return qsTr("Network connection failed.");
}
}
font.pixelSize: app.smallFont
visible: model.selectedNetwork
}
}
Button {
text: qsTr("Disconnect")
visible: model.selectedNetwork && networkManger.manager.wirelessStatus === WirelessSetupManager.WirelessStatusActivated
onClicked: networkManger.manager.disconnectWirelessNetwork()
}
}
onClicked: {
print("Connect to ", model.ssid, " --> ", model.macAddress)
pageStack.push(authenticationPage, { ssid: model.ssid, macAddress: model.macAddress })
}
}
}
}
Component {
id: authenticationPage
Page {
id: root
property string ssid
property string macAddress
header: GuhHeader {
text: qsTr("Wireless authentication")
onBackPressed: pageStack.pop()
}
ColumnLayout {
anchors.fill: parent
anchors.margins: app.margins
Label {
wrapMode: Text.WordWrap
font.pixelSize: app.largeFont
Layout.fillWidth: true
text: ssid + " (" + macAddress + ")"
}
Label {
wrapMode: Text.WordWrap
Layout.fillWidth: true
text: qsTr("Please enter the password for the Wifi network.")
}
RowLayout {
Layout.fillWidth: true
TextField {
id: passwordTextField
Layout.fillWidth: true
echoMode: TextInput.Password
}
Button {
text: qsTr("Show password")
onClicked: {
if (passwordTextField.echoMode === TextInput.Normal) {
text = qsTr("Show password")
passwordTextField.echoMode = TextInput.Password
} else {
text = qsTr("Hide password")
passwordTextField.echoMode = TextInput.Normal
}
}
}
}
Button {
Layout.fillWidth: true
text: qsTr("Connect")
onPressed: {
networkManger.manager.connectWirelessNetwork(ssid, passwordTextField.text)
networkManger.manager.accessPoints.setSelectedNetwork(ssid, macAddress)
pageStack.pop()
}
}
}
}
}
Dialog {
id: errorDialog
width: Math.min(parent.width * .9, 400)
x: (parent.width - width) / 2
y: (parent.height - height) / 2
standardButtons: Dialog.Ok
property string errorText
ColumnLayout {
anchors { left: parent.left; right: parent.right; top: parent.top }
spacing: app.margins
Label {
Layout.fillWidth: true
wrapMode: Text.WordWrap
text: errorDialog.errorText
}
}
}
Component {
id: settingsPage
Page {
id: root
header: GuhHeader {
text: qsTr("Network settings")
onBackPressed: pageStack.pop()
}
ColumnLayout {
anchors.fill: parent
anchors.margins: app.margins
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Networking")
}
Switch {
id: networkingSwitch
checked: networkManger.manager.networkingEnabled
onCheckedChanged: networkManger.manager.enableNetworking(checked)
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Wireless networking")
}
Switch {
id: wirelessNetworkingSwitch
checked: networkManger.manager.wirelessEnabled
onCheckedChanged: networkManger.manager.enableWireless(checked)
}
}
ThinDivider { }
Label {
Layout.fillWidth: true
text: qsTr("Bluetooth device information")
}
ThinDivider { }
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("System UUID")
}
Label {
text: networkManger.manager.modelNumber
}
}
RowLayout {
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Manufacturer")
}
Label {
text: networkManger.manager.manufacturer
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Software revision")
}
Label {
text: networkManger.manager.softwareRevision
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Firmware revision")
}
Label {
text: networkManger.manager.firmwareRevision
}
}
RowLayout {
anchors.margins: app.margins
Layout.fillWidth: true
Label {
Layout.fillWidth: true
text: qsTr("Hardware revision")
}
Label {
text: networkManger.manager.hardwareRevision
}
}
}
}
}
}