Tbh idk what the issue was, but the entire implementation is extremely scuffed and we need to remake it completely
171 lines
4.8 KiB
QML
171 lines
4.8 KiB
QML
pragma ComponentBehavior: Bound
|
|
|
|
import ".."
|
|
import "../components"
|
|
import qs.components
|
|
import qs.components.controls
|
|
import qs.components.containers
|
|
import qs.components.effects
|
|
import qs.services
|
|
import qs.config
|
|
import QtQuick
|
|
import QtQuick.Controls
|
|
import QtQuick.Layouts
|
|
|
|
ColumnLayout {
|
|
id: root
|
|
|
|
required property Session session
|
|
|
|
spacing: Appearance.spacing.normal
|
|
|
|
SettingsHeader {
|
|
icon: "router"
|
|
title: qsTr("Network Settings")
|
|
}
|
|
|
|
SectionHeader {
|
|
Layout.topMargin: Appearance.spacing.large
|
|
title: qsTr("Ethernet")
|
|
description: qsTr("Ethernet device information")
|
|
}
|
|
|
|
SectionContainer {
|
|
contentSpacing: Appearance.spacing.small / 2
|
|
|
|
PropertyRow {
|
|
label: qsTr("Total devices")
|
|
value: qsTr("%1").arg(Nmcli.ethernetDevices.length)
|
|
}
|
|
|
|
PropertyRow {
|
|
showTopMargin: true
|
|
label: qsTr("Connected devices")
|
|
value: qsTr("%1").arg(Nmcli.ethernetDevices.filter(d => d.connected).length)
|
|
}
|
|
}
|
|
|
|
SectionHeader {
|
|
Layout.topMargin: Appearance.spacing.large
|
|
title: qsTr("Wireless")
|
|
description: qsTr("WiFi network settings")
|
|
}
|
|
|
|
SectionContainer {
|
|
ToggleRow {
|
|
label: qsTr("WiFi enabled")
|
|
checked: Nmcli.wifiEnabled
|
|
toggle.onToggled: {
|
|
Nmcli.enableWifi(checked);
|
|
}
|
|
}
|
|
}
|
|
|
|
SectionHeader {
|
|
Layout.topMargin: Appearance.spacing.large
|
|
title: qsTr("VPN")
|
|
description: qsTr("VPN provider settings")
|
|
visible: Config.utilities.vpn.enabled || Config.utilities.vpn.provider.length > 0
|
|
}
|
|
|
|
SectionContainer {
|
|
visible: Config.utilities.vpn.enabled || Config.utilities.vpn.provider.length > 0
|
|
|
|
ToggleRow {
|
|
label: qsTr("VPN enabled")
|
|
checked: Config.utilities.vpn.enabled
|
|
toggle.onToggled: {
|
|
Config.utilities.vpn.enabled = checked;
|
|
Config.save();
|
|
}
|
|
}
|
|
|
|
PropertyRow {
|
|
showTopMargin: true
|
|
label: qsTr("Providers")
|
|
value: qsTr("%1").arg(Config.utilities.vpn.provider.length)
|
|
}
|
|
|
|
TextButton {
|
|
Layout.fillWidth: true
|
|
Layout.topMargin: Appearance.spacing.normal
|
|
Layout.minimumHeight: Appearance.font.size.normal + Appearance.padding.normal * 2
|
|
text: qsTr("⚙ Manage VPN Providers")
|
|
inactiveColour: Colours.palette.m3secondaryContainer
|
|
inactiveOnColour: Colours.palette.m3onSecondaryContainer
|
|
|
|
onClicked: {
|
|
vpnSettingsDialog.open();
|
|
}
|
|
}
|
|
}
|
|
|
|
SectionHeader {
|
|
Layout.topMargin: Appearance.spacing.large
|
|
title: qsTr("Current connection")
|
|
description: qsTr("Active network connection information")
|
|
}
|
|
|
|
SectionContainer {
|
|
contentSpacing: Appearance.spacing.small / 2
|
|
|
|
PropertyRow {
|
|
label: qsTr("Network")
|
|
value: Nmcli.active ? Nmcli.active.ssid : (Nmcli.activeEthernet ? Nmcli.activeEthernet.interface : qsTr("Not connected"))
|
|
}
|
|
|
|
PropertyRow {
|
|
showTopMargin: true
|
|
visible: Nmcli.active !== null
|
|
label: qsTr("Signal strength")
|
|
value: Nmcli.active ? qsTr("%1%").arg(Nmcli.active.strength) : qsTr("N/A")
|
|
}
|
|
|
|
PropertyRow {
|
|
showTopMargin: true
|
|
visible: Nmcli.active !== null
|
|
label: qsTr("Security")
|
|
value: Nmcli.active ? (Nmcli.active.isSecure ? qsTr("Secured") : qsTr("Open")) : qsTr("N/A")
|
|
}
|
|
|
|
PropertyRow {
|
|
showTopMargin: true
|
|
visible: Nmcli.active !== null
|
|
label: qsTr("Frequency")
|
|
value: Nmcli.active ? qsTr("%1 MHz").arg(Nmcli.active.frequency) : qsTr("N/A")
|
|
}
|
|
}
|
|
|
|
Popup {
|
|
id: vpnSettingsDialog
|
|
|
|
parent: Overlay.overlay
|
|
anchors.centerIn: parent
|
|
width: Math.min(600, parent.width - Appearance.padding.large * 2)
|
|
height: Math.min(700, parent.height - Appearance.padding.large * 2)
|
|
|
|
modal: true
|
|
closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside
|
|
|
|
background: StyledRect {
|
|
color: Colours.palette.m3surface
|
|
radius: Appearance.rounding.large
|
|
}
|
|
|
|
StyledFlickable {
|
|
anchors.fill: parent
|
|
anchors.margins: Appearance.padding.large * 1.5
|
|
flickableDirection: Flickable.VerticalFlick
|
|
contentHeight: vpnSettingsContent.height
|
|
clip: true
|
|
|
|
VpnSettings {
|
|
id: vpnSettingsContent
|
|
|
|
anchors.left: parent.left
|
|
anchors.right: parent.right
|
|
session: root.session
|
|
}
|
|
}
|
|
}
|
|
}
|