mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
172 lines
4.8 KiB
QML
172 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
|
|
}
|
|
}
|
|
}
|
|
}
|