summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorATMDA <atdma2600@gmail.com>2025-11-13 20:52:09 -0500
committerATMDA <atdma2600@gmail.com>2025-11-13 20:52:09 -0500
commitf0ea26a71bb1359479c620ba3d571e129547c912 (patch)
treeb06deb81f263027deb63ff86ca267479018a21ef
parentnmcli: migrated all of ethernet controlcenter (diff)
downloadcaelestia-shell-f0ea26a71bb1359479c620ba3d571e129547c912.tar.gz
caelestia-shell-f0ea26a71bb1359479c620ba3d571e129547c912.tar.bz2
caelestia-shell-f0ea26a71bb1359479c620ba3d571e129547c912.zip
controlcenter: removed dev panels
-rw-r--r--modules/controlcenter/dev/DevControlCenter.qml94
-rw-r--r--modules/controlcenter/dev/DevDebugPane.qml1979
-rw-r--r--modules/controlcenter/dev/DevNavRail.qml194
-rw-r--r--modules/controlcenter/dev/DevPanes.qml70
-rw-r--r--modules/controlcenter/dev/DevSession.qml23
-rw-r--r--modules/controlcenter/dev/DevWindowFactory.qml62
-rw-r--r--modules/controlcenter/dev/DevWindowTitle.qml53
-rw-r--r--modules/controlcenter/dev/DevWirelessPane.qml68
-rw-r--r--modules/utilities/cards/Toggles.qml12
9 files changed, 0 insertions, 2555 deletions
diff --git a/modules/controlcenter/dev/DevControlCenter.qml b/modules/controlcenter/dev/DevControlCenter.qml
deleted file mode 100644
index 29592ca..0000000
--- a/modules/controlcenter/dev/DevControlCenter.qml
+++ /dev/null
@@ -1,94 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import "."
-import ".."
-import qs.components
-import qs.components.controls
-import qs.services
-import qs.config
-import Quickshell
-import QtQuick
-import QtQuick.Layouts
-
-Item {
- id: root
-
- required property ShellScreen screen
- readonly property int rounding: floating ? 0 : Appearance.rounding.normal
-
- property alias floating: session.floating
- property alias active: session.active
- property alias navExpanded: session.navExpanded
-
- readonly property DevSession session: DevSession {
- id: session
-
- root: root
- }
-
- function close(): void {
- }
-
- implicitWidth: implicitHeight * Config.controlCenter.sizes.ratio
- implicitHeight: screen.height * Config.controlCenter.sizes.heightMult
-
- GridLayout {
- anchors.fill: parent
-
- rowSpacing: 0
- columnSpacing: 0
- rows: root.floating ? 2 : 1
- columns: 2
-
- Loader {
- Layout.fillWidth: true
- Layout.columnSpan: 2
-
- asynchronous: true
- active: root.floating
- visible: active
-
- sourceComponent: DevWindowTitle {
- screen: root.screen
- session: root.session
- }
- }
-
- StyledRect {
- Layout.fillHeight: true
-
- topLeftRadius: root.rounding
- bottomLeftRadius: root.rounding
- implicitWidth: navRail.implicitWidth
- color: Colours.tPalette.m3surfaceContainer
-
- CustomMouseArea {
- anchors.fill: parent
-
- function onWheel(event: WheelEvent): void {
- if (event.angleDelta.y < 0)
- root.session.activeIndex = Math.min(root.session.activeIndex + 1, root.session.panes.length - 1);
- else if (event.angleDelta.y > 0)
- root.session.activeIndex = Math.max(root.session.activeIndex - 1, 0);
- }
- }
-
- DevNavRail {
- id: navRail
-
- screen: root.screen
- session: root.session
- }
- }
-
- DevPanes {
- Layout.fillWidth: true
- Layout.fillHeight: true
-
- topRightRadius: root.rounding
- bottomRightRadius: root.rounding
- session: root.session
- }
- }
-}
-
diff --git a/modules/controlcenter/dev/DevDebugPane.qml b/modules/controlcenter/dev/DevDebugPane.qml
deleted file mode 100644
index 1150f35..0000000
--- a/modules/controlcenter/dev/DevDebugPane.qml
+++ /dev/null
@@ -1,1979 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import "."
-import ".."
-import qs.components
-import qs.components.controls
-import qs.components.containers
-import qs.components.effects
-import qs.config
-import qs.services
-import Quickshell
-import Quickshell.Widgets
-import QtQuick
-import QtQuick.Layouts
-
-Item {
- id: root
-
- required property DevSession session
-
- anchors.fill: parent
-
- // Track last failed connection
- property string lastFailedSsid: ""
-
- // Connect to connection failure signal
- Connections {
- target: Nmcli
- function onConnectionFailed(ssid: string) {
- root.lastFailedSsid = ssid;
- appendLog("Connection failed signal received for: " + ssid);
- }
- }
-
- StyledFlickable {
- id: flickable
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- flickableDirection: Flickable.VerticalFlick
- contentWidth: width
- contentHeight: contentLayout.implicitHeight
-
- StyledScrollBar.vertical: StyledScrollBar {
- flickable: flickable
- }
-
- ColumnLayout {
- id: contentLayout
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.top: parent.top
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Debug Panel")
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- // Action Buttons Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: buttonsLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: buttonsLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Actions")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- Flow {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- TextButton {
- text: qsTr("Clear Log")
- onClicked: {
- debugOutput.text = "";
- appendLog("Debug log cleared");
- }
- }
-
- TextButton {
- text: qsTr("Test Action")
- onClicked: {
- appendLog("Test action executed at " + new Date().toLocaleTimeString());
- }
- }
-
- TextButton {
- text: qsTr("Log Network State")
- onClicked: {
- appendLog("Network state:");
- appendLog(" Active: " + (root.session.network.active ? "Yes" : "No"));
- }
- }
-
- TextButton {
- text: qsTr("Get Device Status")
- onClicked: {
- appendLog("Getting device status...");
- try {
- Nmcli.getDeviceStatus((output) => {
- if (!output) {
- appendLog(" Error: No output received");
- return;
- }
- appendLog("Device Status:");
- const lines = output.trim().split("\n");
- if (lines.length === 0 || (lines.length === 1 && lines[0].length === 0)) {
- appendLog(" No devices found");
- } else {
- for (const line of lines) {
- if (line.length > 0) {
- appendLog(" " + line);
- }
- }
- }
- });
- } catch (e) {
- appendLog("Error: " + e);
- }
- }
- }
-
- TextButton {
- text: qsTr("Get Wireless Interfaces")
- onClicked: {
- appendLog("Getting wireless interfaces...");
- Nmcli.getWirelessInterfaces((interfaces) => {
- appendLog("Wireless Interfaces: " + interfaces.length);
- for (const iface of interfaces) {
- appendLog(` ${iface.device}: ${iface.state} (${iface.connection})`);
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("Get Ethernet Interfaces")
- onClicked: {
- appendLog("Getting ethernet interfaces...");
- Nmcli.getEthernetInterfaces((interfaces) => {
- appendLog("Ethernet Interfaces: " + interfaces.length);
- for (const iface of interfaces) {
- appendLog(` ${iface.device}: ${iface.state} (${iface.connection})`);
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("Refresh Status")
- onClicked: {
- appendLog("Refreshing connection status...");
- Nmcli.refreshStatus((status) => {
- appendLog("Connection Status:");
- appendLog(" Connected: " + (status.connected ? "Yes" : "No"));
- appendLog(" Interface: " + (status.interface || "None"));
- appendLog(" Connection: " + (status.connection || "None"));
- });
- }
- }
-
- TextButton {
- text: qsTr("Check Interface")
- onClicked: {
- appendLog("Checking interface connection status...");
- // Check first wireless interface if available
- if (Nmcli.wirelessInterfaces.length > 0) {
- const iface = Nmcli.wirelessInterfaces[0].device;
- appendLog("Checking: " + iface);
- Nmcli.isInterfaceConnected(iface, (connected) => {
- appendLog(` ${iface}: ${connected ? "Connected" : "Disconnected"}`);
- });
- } else {
- appendLog("No wireless interfaces found");
- }
- }
- }
- }
- }
- }
-
- // WiFi Radio Control Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: wifiRadioLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: wifiRadioLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("WiFi Radio Control")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Status: ") + (Nmcli.wifiEnabled ? qsTr("Enabled") : qsTr("Disabled"))
- color: Nmcli.wifiEnabled ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Toggle WiFi")
- onClicked: {
- appendLog("Toggling WiFi radio...");
- Nmcli.toggleWifi((result) => {
- if (result.success) {
- appendLog("WiFi radio toggled: " + (Nmcli.wifiEnabled ? "Enabled" : "Disabled"));
- } else {
- appendLog("Failed to toggle WiFi: " + (result.error || "Unknown error"));
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("Enable")
- onClicked: {
- appendLog("Enabling WiFi radio...");
- Nmcli.enableWifi(true, (result) => {
- if (result.success) {
- appendLog("WiFi radio enabled");
- } else {
- appendLog("Failed to enable WiFi: " + (result.error || "Unknown error"));
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("Disable")
- onClicked: {
- appendLog("Disabling WiFi radio...");
- Nmcli.enableWifi(false, (result) => {
- if (result.success) {
- appendLog("WiFi radio disabled");
- } else {
- appendLog("Failed to disable WiFi: " + (result.error || "Unknown error"));
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("Check Status")
- onClicked: {
- appendLog("Checking WiFi radio status...");
- Nmcli.getWifiStatus((enabled) => {
- appendLog("WiFi radio status: " + (enabled ? "Enabled" : "Disabled"));
- });
- }
- }
- }
- }
- }
-
- // Network List Management Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: networkListLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: networkListLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Network List Management")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Networks: %1").arg(Nmcli.networks.length)
- }
-
- StyledText {
- visible: Nmcli.active
- text: qsTr("Active: %1").arg(Nmcli.active.ssid)
- color: Colours.palette.m3primary
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Refresh Networks")
- onClicked: {
- appendLog("Refreshing network list...");
- Nmcli.getNetworks((networks) => {
- appendLog("Found " + networks.length + " networks");
- if (Nmcli.active) {
- appendLog("Active network: " + Nmcli.active.ssid + " (Signal: " + Nmcli.active.strength + "%, Security: " + (Nmcli.active.isSecure ? Nmcli.active.security : "Open") + ")");
- } else {
- appendLog("No active network");
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("List All Networks")
- onClicked: {
- appendLog("Network list:");
- if (Nmcli.networks.length === 0) {
- appendLog(" No networks found");
- } else {
- for (let i = 0; i < Nmcli.networks.length; i++) {
- const net = Nmcli.networks[i];
- const activeMark = net.active ? " [ACTIVE]" : "";
- appendLog(` ${i + 1}. ${net.ssid}${activeMark}`);
- appendLog(` Signal: ${net.strength}%, Freq: ${net.frequency}MHz, Security: ${net.isSecure ? net.security : "Open"}`);
- if (net.bssid) {
- appendLog(` BSSID: ${net.bssid}`);
- }
- }
- }
- }
- }
- }
- }
- }
-
- // Interface Selector Section (for future features)
- Item {
- Layout.fillWidth: true
- implicitHeight: interfaceSelectorContainer.implicitHeight
- z: 10 // Ensure dropdown menu appears above other elements
-
- StyledRect {
- id: interfaceSelectorContainer
-
- anchors.fill: parent
- implicitHeight: interfaceSelectorLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: interfaceSelectorLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Interface Selector")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- SplitButton {
- id: interfaceSelector
-
- type: SplitButton.Tonal
- fallbackText: qsTr("Select Interface")
- fallbackIcon: "settings_ethernet"
- menuItems: interfaceList.instances
- menuOnTop: true // Position menu above button to avoid being covered
-
- property string selectedInterface: ""
-
- menu.onItemSelected: (item) => {
- interfaceSelector.selectedInterface = item.modelData.device;
- appendLog("Selected interface: " + item.modelData.device + " (" + item.modelData.type + ")");
- }
-
- Variants {
- id: interfaceList
-
- model: interfaceSelector.interfaces
-
- MenuItem {
- required property var modelData
-
- text: modelData.device + " (" + modelData.type + ")"
- icon: modelData.type === "wifi" ? "wifi" : "settings_ethernet"
- }
- }
-
- property list<var> interfaces: []
-
- function refreshInterfaces(): void {
- appendLog("Refreshing interface list...");
- Nmcli.getAllInterfaces((interfaces) => {
- interfaceSelector.interfaces = interfaces;
- if (interfaces.length > 0) {
- // Wait for Variants to create instances, then set active
- Qt.callLater(() => {
- if (interfaceList.instances.length > 0) {
- interfaceSelector.active = interfaceList.instances[0];
- interfaceSelector.selectedInterface = interfaces[0].device;
- }
- });
- appendLog("Found " + interfaces.length + " interfaces");
- } else {
- interfaceSelector.selectedInterface = "";
- appendLog("No interfaces found");
- }
- });
- }
-
- Component.onCompleted: {
- // Ensure menu appears above other elements
- menu.z = 100;
- }
- }
-
- TextButton {
- text: qsTr("Refresh")
- onClicked: {
- interfaceSelector.refreshInterfaces();
- }
- }
-
- TextButton {
- text: qsTr("Up")
- enabled: interfaceSelector.selectedInterface.length > 0
- onClicked: {
- if (interfaceSelector.selectedInterface) {
- appendLog("Bringing interface up: " + interfaceSelector.selectedInterface);
- Nmcli.bringInterfaceUp(interfaceSelector.selectedInterface, (result) => {
- if (result.success) {
- appendLog("Interface up: Success");
- } else {
- appendLog("Interface up: Failed (exit code: " + result.exitCode + ")");
- if (result.error && result.error.length > 0) {
- appendLog("Error: " + result.error);
- }
- }
- // Refresh interface list after bringing up
- Qt.callLater(() => {
- interfaceSelector.refreshInterfaces();
- }, 500);
- });
- }
- }
- }
-
- TextButton {
- text: qsTr("Down")
- enabled: interfaceSelector.selectedInterface.length > 0
- onClicked: {
- if (interfaceSelector.selectedInterface) {
- appendLog("Bringing interface down: " + interfaceSelector.selectedInterface);
- Nmcli.bringInterfaceDown(interfaceSelector.selectedInterface, (result) => {
- if (result.success) {
- appendLog("Interface down: Success");
- } else {
- appendLog("Interface down: Failed (exit code: " + result.exitCode + ")");
- if (result.error && result.error.length > 0) {
- appendLog("Error: " + result.error);
- }
- }
- // Refresh interface list after bringing down
- Qt.callLater(() => {
- interfaceSelector.refreshInterfaces();
- }, 500);
- });
- }
- }
- }
- }
- }
- }
- }
-
- // Wireless SSID Selector Section
- Item {
- Layout.fillWidth: true
- implicitHeight: ssidSelectorContainer.implicitHeight
- z: 10 // Ensure dropdown menu appears above other elements
-
- StyledRect {
- id: ssidSelectorContainer
-
- anchors.fill: parent
- implicitHeight: ssidSelectorLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: ssidSelectorLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Wireless SSID Selector")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- SplitButton {
- id: ssidSelector
-
- type: SplitButton.Tonal
- fallbackText: qsTr("Select SSID")
- fallbackIcon: "wifi"
- menuItems: ssidList.instances
- menuOnTop: true
-
- property string selectedSSID: ""
-
- menu.onItemSelected: (item) => {
- ssidSelector.selectedSSID = item.modelData.ssid;
- appendLog("Selected SSID: " + item.modelData.ssid + " (Signal: " + item.modelData.signal + ", Security: " + item.modelData.security + ")");
- }
-
- Component.onCompleted: {
- // Ensure menu appears above other elements
- menu.z = 100;
- }
-
- Variants {
- id: ssidList
-
- model: ssidSelector.ssids
-
- MenuItem {
- required property var modelData
-
- text: modelData.ssid + (modelData.signal ? " (" + modelData.signal + "%)" : "")
- icon: "wifi"
- }
- }
-
- property list<var> ssids: []
-
- function scanForSSIDs(): void {
- appendLog("Scanning for wireless networks...");
- // Use first wireless interface if available, or let nmcli choose
- let iface = "";
- if (interfaceSelector.selectedInterface) {
- // Check if selected interface is wireless
- for (const i of interfaceSelector.interfaces) {
- if (i.device === interfaceSelector.selectedInterface && i.type === "wifi") {
- iface = interfaceSelector.selectedInterface;
- break;
- }
- }
- }
-
- // If no wireless interface selected, use first available
- if (!iface && Nmcli.wirelessInterfaces.length > 0) {
- iface = Nmcli.wirelessInterfaces[0].device;
- }
-
- Nmcli.scanWirelessNetworks(iface, (scanResult) => {
- if (scanResult.success) {
- appendLog("Scan completed, fetching SSID list...");
- // Wait a moment for scan results to be available
- Qt.callLater(() => {
- Nmcli.getWirelessSSIDs(iface, (ssids) => {
- ssidSelector.ssids = ssids;
- if (ssids.length > 0) {
- Qt.callLater(() => {
- if (ssidList.instances.length > 0) {
- ssidSelector.active = ssidList.instances[0];
- ssidSelector.selectedSSID = ssids[0].ssid;
- }
- });
- appendLog("Found " + ssids.length + " SSIDs");
- } else {
- appendLog("No SSIDs found");
- }
- });
- }, 1000);
- } else {
- appendLog("Scan failed: " + (scanResult.error || "Unknown error"));
- }
- });
- }
- }
-
- TextButton {
- text: qsTr("Scan")
- onClicked: {
- ssidSelector.scanForSSIDs();
- }
- }
- }
- }
- }
- }
-
- // Wireless Connection Test Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: connectionTestLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: connectionTestLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Wireless Connection Test")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("SSID: %1").arg(ssidSelector.selectedSSID || "None selected")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Connect (No Password)")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- appendLog("Connecting to: " + ssidSelector.selectedSSID + " (no password)");
- // Find the network to get BSSID
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- const bssid = network ? network.bssid : "";
- Nmcli.connectWireless(ssidSelector.selectedSSID, "", bssid, (result) => {
- if (result.success) {
- appendLog("Connection succeeded!");
- // Refresh network list after connection
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- } else {
- appendLog("Connection failed: " + (result.error || "Unknown error"));
- // Refresh network list anyway to check status
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- }
- });
- appendLog("Connection initiated, tracking pending connection...");
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Password:")
- }
-
- Item {
- Layout.fillWidth: true
- implicitHeight: passwordField.implicitHeight + Appearance.padding.small * 2
-
- StyledRect {
- anchors.fill: parent
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
- border.width: passwordField.activeFocus ? 2 : 1
- border.color: passwordField.activeFocus ? Colours.palette.m3primary : Colours.palette.m3outline
-
- Behavior on border.color {
- CAnim {}
- }
- }
-
- StyledTextField {
- id: passwordField
-
- anchors.left: parent.left
- anchors.right: parent.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.margins: Appearance.padding.normal
-
- echoMode: TextField.Password
- placeholderText: qsTr("Enter password")
-
- Keys.onReturnPressed: {
- if (connectWithPasswordButton.enabled) {
- connectWithPasswordButton.clicked();
- }
- }
- Keys.onEnterPressed: {
- if (connectWithPasswordButton.enabled) {
- connectWithPasswordButton.clicked();
- }
- }
- }
- }
-
- TextButton {
- id: connectWithPasswordButton
- text: qsTr("Connect")
- enabled: ssidSelector.selectedSSID.length > 0 && passwordField.text.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID && passwordField.text) {
- appendLog("Connecting to: " + ssidSelector.selectedSSID + " (with password)");
- // Find the network to get BSSID
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- const bssid = network ? network.bssid : "";
- Nmcli.connectWireless(ssidSelector.selectedSSID, passwordField.text, bssid, (result) => {
- if (result.success) {
- appendLog("Connection succeeded!");
- // Clear password field
- passwordField.text = "";
- // Refresh network list after connection
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- } else {
- appendLog("Connection failed: " + (result.error || "Unknown error"));
- if (result.exitCode !== 0) {
- appendLog("Exit code: " + result.exitCode);
- }
- // Refresh network list anyway to check status
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- }
- });
- appendLog("Connection initiated, tracking pending connection...");
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: {
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- const bssid = network && network.bssid ? network.bssid : "N/A";
- return qsTr("BSSID: %1").arg(bssid);
- }
- }
-
- Item {
- Layout.fillWidth: true
- }
- }
- }
- }
-
- // Saved Connection Profiles Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: savedProfilesLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: savedProfilesLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Saved Connection Profiles")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Connections: %1").arg(Nmcli.savedConnections.length)
- }
-
- StyledText {
- text: qsTr("WiFi SSIDs: %1").arg(Nmcli.savedConnectionSsids.length)
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Refresh")
- onClicked: {
- appendLog("Refreshing saved connections...");
- Nmcli.loadSavedConnections((ssids) => {
- appendLog("Found " + Nmcli.savedConnections.length + " saved connections");
- appendLog("Found " + Nmcli.savedConnectionSsids.length + " WiFi SSIDs");
- });
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Selected SSID: %1").arg(ssidSelector.selectedSSID || "None")
- }
-
- StyledText {
- visible: ssidSelector.selectedSSID.length > 0
- text: {
- if (!ssidSelector.selectedSSID) return "";
- const hasProfile = Nmcli.hasSavedProfile(ssidSelector.selectedSSID);
- return hasProfile ? qsTr("[Saved Profile]") : qsTr("[Not Saved]");
- }
- color: {
- if (!ssidSelector.selectedSSID) return Colours.palette.m3onSurface;
- const hasProfile = Nmcli.hasSavedProfile(ssidSelector.selectedSSID);
- return hasProfile ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant;
- }
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Check Profile")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- const hasProfile = Nmcli.hasSavedProfile(ssidSelector.selectedSSID);
- appendLog("Profile check for '" + ssidSelector.selectedSSID + "': " + (hasProfile ? "Saved" : "Not saved"));
- }
- }
- }
-
- TextButton {
- text: qsTr("Forget Network")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- appendLog("Forgetting network: " + ssidSelector.selectedSSID);
- Nmcli.forgetNetwork(ssidSelector.selectedSSID, (result) => {
- if (result.success) {
- appendLog("Network forgotten successfully");
- } else {
- appendLog("Failed to forget network: " + (result.error || "Unknown error"));
- }
- });
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- TextButton {
- text: qsTr("List All Saved SSIDs")
- onClicked: {
- appendLog("Saved WiFi SSIDs:");
- if (Nmcli.savedConnectionSsids.length === 0) {
- appendLog(" No saved SSIDs");
- } else {
- for (let i = 0; i < Nmcli.savedConnectionSsids.length; i++) {
- appendLog(" " + (i + 1) + ". " + Nmcli.savedConnectionSsids[i]);
- }
- }
- }
- }
-
- TextButton {
- text: qsTr("List All Connections")
- onClicked: {
- appendLog("Saved Connections:");
- if (Nmcli.savedConnections.length === 0) {
- appendLog(" No saved connections");
- } else {
- for (let i = 0; i < Nmcli.savedConnections.length; i++) {
- appendLog(" " + (i + 1) + ". " + Nmcli.savedConnections[i]);
- }
- }
- }
- }
- }
- }
- }
-
- // Pending Connection Tracking Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: pendingConnectionLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: pendingConnectionLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Pending Connection Tracking")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Status: %1").arg(Nmcli.pendingConnection ? "Connecting..." : "No pending connection")
- color: Nmcli.pendingConnection ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
- }
-
- StyledText {
- visible: Nmcli.pendingConnection
- text: qsTr("SSID: %1").arg(Nmcli.pendingConnection ? Nmcli.pendingConnection.ssid : "")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Check Status")
- onClicked: {
- if (Nmcli.pendingConnection) {
- appendLog("Pending connection: " + Nmcli.pendingConnection.ssid);
- appendLog("BSSID: " + (Nmcli.pendingConnection.bssid || "N/A"));
- const connected = Nmcli.active && Nmcli.active.ssid === Nmcli.pendingConnection.ssid;
- appendLog("Connected: " + (connected ? "Yes" : "No"));
- if (connected) {
- appendLog("Connection succeeded!");
- } else {
- appendLog("Still connecting...");
- }
- } else {
- appendLog("No pending connection");
- }
- }
- }
-
- TextButton {
- text: qsTr("Clear Pending")
- enabled: Nmcli.pendingConnection !== null
- onClicked: {
- if (Nmcli.pendingConnection) {
- appendLog("Clearing pending connection: " + Nmcli.pendingConnection.ssid);
- Nmcli.pendingConnection = null;
- appendLog("Pending connection cleared");
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Active Network: %1").arg(Nmcli.active ? Nmcli.active.ssid : "None")
- color: Nmcli.active ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Refresh Networks & Check")
- onClicked: {
- appendLog("Refreshing network list to check pending connection...");
- Nmcli.getNetworks((networks) => {
- appendLog("Network list refreshed");
- if (Nmcli.pendingConnection) {
- const connected = Nmcli.active && Nmcli.active.ssid === Nmcli.pendingConnection.ssid;
- appendLog("Pending connection check: " + (connected ? "Connected!" : "Still connecting..."));
- }
- });
- }
- }
- }
- }
- }
-
- // Connection Failure Handling Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: connectionFailureLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: connectionFailureLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Connection Failure Handling")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Last Failed SSID: %1").arg(lastFailedSsid || "None")
- color: lastFailedSsid ? Colours.palette.m3error : Colours.palette.m3onSurfaceVariant
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Clear Failure")
- enabled: lastFailedSsid.length > 0
- onClicked: {
- lastFailedSsid = "";
- appendLog("Cleared failure status");
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Test Password Detection")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test Secure Network (No Password)")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- if (network && network.isSecure) {
- appendLog("Testing connection to secure network without password (should detect password requirement)");
- const bssid = network ? network.bssid : "";
- Nmcli.connectWireless(ssidSelector.selectedSSID, "", bssid, (result) => {
- if (result.needsPassword) {
- appendLog("✓ Password requirement detected correctly!");
- appendLog("Error: " + (result.error || "N/A"));
- } else if (result.success) {
- appendLog("Connection succeeded (saved password used)");
- } else {
- appendLog("Connection failed: " + (result.error || "Unknown error"));
- }
- });
- } else {
- appendLog("Selected network is not secure, cannot test password detection");
- }
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Connection Retry Test")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test Retry Logic")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- appendLog("Testing connection retry logic (will retry up to 2 times on failure)");
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- const bssid = network ? network.bssid : "";
- // Use invalid password to trigger failure
- Nmcli.connectWireless(ssidSelector.selectedSSID, "invalid_password_test", bssid, (result) => {
- if (result.success) {
- appendLog("Connection succeeded (unexpected)");
- } else {
- appendLog("Connection failed after retries: " + (result.error || "Unknown error"));
- }
- });
- }
- }
- }
- }
- }
- }
-
- // Password Callback Handling Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: passwordCallbackLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: passwordCallbackLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Password Callback Handling")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Selected SSID: %1").arg(ssidSelector.selectedSSID || "None")
- }
-
- StyledText {
- visible: ssidSelector.selectedSSID.length > 0
- text: {
- if (!ssidSelector.selectedSSID) return "";
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- if (!network) return "";
- return network.isSecure ? qsTr("[Secure]") : qsTr("[Open]");
- }
- color: {
- if (!ssidSelector.selectedSSID) return Colours.palette.m3onSurface;
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- if (!network) return Colours.palette.m3onSurface;
- return network.isSecure ? Colours.palette.m3error : Colours.palette.m3primary;
- }
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test Password Check (Secure)")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- if (network && network.isSecure) {
- appendLog("Testing password check for secure network: " + ssidSelector.selectedSSID);
- appendLog("This will try saved password first, then prompt if needed");
- const bssid = network ? network.bssid : "";
- Nmcli.connectToNetworkWithPasswordCheck(ssidSelector.selectedSSID, true, (result) => {
- if (result.success) {
- if (result.usedSavedPassword) {
- appendLog("✓ Connection succeeded using saved password!");
- } else {
- appendLog("✓ Connection succeeded!");
- }
- // Refresh network list
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- } else if (result.needsPassword) {
- appendLog("→ Password required - callback triggered");
- appendLog(" Error: " + (result.error || "N/A"));
- appendLog(" (In real UI, this would show password dialog)");
- } else {
- appendLog("✗ Connection failed: " + (result.error || "Unknown error"));
- }
- }, bssid);
- } else {
- appendLog("Selected network is not secure, cannot test password check");
- }
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Test Open Network")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test Password Check (Open)")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- if (network && !network.isSecure) {
- appendLog("Testing password check for open network: " + ssidSelector.selectedSSID);
- appendLog("Open networks should connect directly without password");
- const bssid = network ? network.bssid : "";
- Nmcli.connectToNetworkWithPasswordCheck(ssidSelector.selectedSSID, false, (result) => {
- if (result.success) {
- appendLog("✓ Connection succeeded!");
- // Refresh network list
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- } else {
- appendLog("✗ Connection failed: " + (result.error || "Unknown error"));
- }
- }, bssid);
- } else {
- appendLog("Selected network is not open, cannot test open network handling");
- }
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Test with Saved Password")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test Secure Network (Has Saved Password)")
- enabled: ssidSelector.selectedSSID.length > 0
- onClicked: {
- if (ssidSelector.selectedSSID) {
- const network = Nmcli.networks.find(n => n.ssid === ssidSelector.selectedSSID);
- if (network && network.isSecure) {
- const hasSaved = Nmcli.hasSavedProfile(ssidSelector.selectedSSID);
- appendLog("Testing password check for: " + ssidSelector.selectedSSID);
- appendLog("Has saved profile: " + (hasSaved ? "Yes" : "No"));
- if (hasSaved) {
- appendLog("This should connect using saved password without prompting");
- } else {
- appendLog("This should prompt for password since no saved profile exists");
- }
- const bssid = network ? network.bssid : "";
- Nmcli.connectToNetworkWithPasswordCheck(ssidSelector.selectedSSID, true, (result) => {
- if (result.success) {
- if (result.usedSavedPassword) {
- appendLog("✓ Connection succeeded using saved password!");
- } else {
- appendLog("✓ Connection succeeded!");
- }
- // Refresh network list
- Qt.callLater(() => {
- Nmcli.getNetworks(() => {});
- }, 1000);
- } else if (result.needsPassword) {
- appendLog("→ Password required - callback triggered");
- appendLog(" (In real UI, this would show password dialog)");
- } else {
- appendLog("✗ Connection failed: " + (result.error || "Unknown error"));
- }
- }, bssid);
- } else {
- appendLog("Selected network is not secure, cannot test saved password");
- }
- }
- }
- }
- }
- }
- }
-
- // Device Details Parsing Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: deviceDetailsLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: deviceDetailsLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Device Details Parsing")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Wireless Device Details")
- font.weight: 500
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Get Wireless Details")
- onClicked: {
- const activeInterface = interfaceSelector.selectedInterface;
- if (activeInterface && activeInterface.length > 0) {
- appendLog("Getting wireless device details for: " + activeInterface);
- Nmcli.getWirelessDeviceDetails(activeInterface, (details) => {
- if (details) {
- appendLog("Wireless Device Details:");
- appendLog(" IP Address: " + (details.ipAddress || "N/A"));
- appendLog(" Gateway: " + (details.gateway || "N/A"));
- appendLog(" Subnet: " + (details.subnet || "N/A"));
- appendLog(" MAC Address: " + (details.macAddress || "N/A"));
- appendLog(" DNS: " + (details.dns && details.dns.length > 0 ? details.dns.join(", ") : "N/A"));
- } else {
- appendLog("Failed to get wireless device details");
- }
- });
- } else {
- appendLog("Getting wireless device details for active interface");
- Nmcli.getWirelessDeviceDetails("", (details) => {
- if (details) {
- appendLog("Wireless Device Details:");
- appendLog(" IP Address: " + (details.ipAddress || "N/A"));
- appendLog(" Gateway: " + (details.gateway || "N/A"));
- appendLog(" Subnet: " + (details.subnet || "N/A"));
- appendLog(" MAC Address: " + (details.macAddress || "N/A"));
- appendLog(" DNS: " + (details.dns && details.dns.length > 0 ? details.dns.join(", ") : "N/A"));
- } else {
- appendLog("No active wireless interface or failed to get details");
- }
- });
- }
- }
- }
-
- TextButton {
- text: qsTr("Show Current")
- onClicked: {
- if (Nmcli.wirelessDeviceDetails) {
- const details = Nmcli.wirelessDeviceDetails;
- appendLog("Current Wireless Device Details:");
- appendLog(" IP Address: " + (details.ipAddress || "N/A"));
- appendLog(" Gateway: " + (details.gateway || "N/A"));
- appendLog(" Subnet: " + (details.subnet || "N/A"));
- appendLog(" MAC Address: " + (details.macAddress || "N/A"));
- appendLog(" DNS: " + (details.dns && details.dns.length > 0 ? details.dns.join(", ") : "N/A"));
- } else {
- appendLog("No wireless device details available");
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Ethernet Device Details")
- font.weight: 500
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Get Ethernet Details")
- onClicked: {
- const activeInterface = interfaceSelector.selectedInterface;
- if (activeInterface && activeInterface.length > 0) {
- appendLog("Getting ethernet device details for: " + activeInterface);
- Nmcli.getEthernetDeviceDetails(activeInterface, (details) => {
- if (details) {
- appendLog("Ethernet Device Details:");
- appendLog(" IP Address: " + (details.ipAddress || "N/A"));
- appendLog(" Gateway: " + (details.gateway || "N/A"));
- appendLog(" Subnet: " + (details.subnet || "N/A"));
- appendLog(" MAC Address: " + (details.macAddress || "N/A"));
- appendLog(" Speed: " + (details.speed || "N/A"));
- appendLog(" DNS: " + (details.dns && details.dns.length > 0 ? details.dns.join(", ") : "N/A"));
- } else {
- appendLog("Failed to get ethernet device details");
- }
- });
- } else {
- appendLog("Getting ethernet device details for active interface");
- Nmcli.getEthernetDeviceDetails("", (details) => {
- if (details) {
- appendLog("Ethernet Device Details:");
- appendLog(" IP Address: " + (details.ipAddress || "N/A"));
- appendLog(" Gateway: " + (details.gateway || "N/A"));
- appendLog(" Subnet: " + (details.subnet || "N/A"));
- appendLog(" MAC Address: " + (details.macAddress || "N/A"));
- appendLog(" Speed: " + (details.speed || "N/A"));
- appendLog(" DNS: " + (details.dns && details.dns.length > 0 ? details.dns.join(", ") : "N/A"));
- } else {
- appendLog("No active ethernet interface or failed to get details");
- }
- });
- }
- }
- }
-
- TextButton {
- text: qsTr("Show Current")
- onClicked: {
- if (Nmcli.ethernetDeviceDetails) {
- const details = Nmcli.ethernetDeviceDetails;
- appendLog("Current Ethernet Device Details:");
- appendLog(" IP Address: " + (details.ipAddress || "N/A"));
- appendLog(" Gateway: " + (details.gateway || "N/A"));
- appendLog(" Subnet: " + (details.subnet || "N/A"));
- appendLog(" MAC Address: " + (details.macAddress || "N/A"));
- appendLog(" Speed: " + (details.speed || "N/A"));
- appendLog(" DNS: " + (details.dns && details.dns.length > 0 ? details.dns.join(", ") : "N/A"));
- } else {
- appendLog("No ethernet device details available");
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("CIDR to Subnet Mask Test")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test CIDR Conversion")
- onClicked: {
- appendLog("Testing CIDR to Subnet Mask conversion:");
- const testCases = ["8", "16", "24", "32", "0", "25", "30"];
- for (let i = 0; i < testCases.length; i++) {
- const cidr = testCases[i];
- const subnet = Nmcli.cidrToSubnetMask(cidr);
- appendLog(" /" + cidr + " -> " + (subnet || "Invalid"));
- }
- }
- }
- }
- }
- }
-
- // Connection Status Monitoring Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: connectionMonitoringLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: connectionMonitoringLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Connection Status Monitoring")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Active Network: %1").arg(Nmcli.active ? Nmcli.active.ssid : "None")
- color: Nmcli.active ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
- }
-
- StyledText {
- visible: Nmcli.active
- text: Nmcli.active ? qsTr("Signal: %1%").arg(Nmcli.active.strength) : ""
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Refresh Networks")
- onClicked: {
- appendLog("Manually refreshing network list...");
- Nmcli.getNetworks((networks) => {
- appendLog("Network list refreshed: " + networks.length + " networks");
- if (Nmcli.active) {
- appendLog("Active network: " + Nmcli.active.ssid);
- } else {
- appendLog("No active network");
- }
- });
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Monitor Status")
- }
-
- StyledText {
- text: qsTr("Monitoring connection changes (automatic refresh enabled)")
- color: Colours.palette.m3primary
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Test Connection Change")
- onClicked: {
- appendLog("Testing connection change detection...");
- appendLog("This will trigger a manual refresh to simulate a connection change");
- Nmcli.refreshOnConnectionChange();
- appendLog("Refresh triggered - check if network list and device details updated");
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Device Details Auto-Refresh")
- }
-
- StyledText {
- text: {
- if (Nmcli.wirelessDeviceDetails) {
- return qsTr("Wireless: %1").arg(Nmcli.wirelessDeviceDetails.ipAddress || "N/A");
- } else if (Nmcli.ethernetDeviceDetails) {
- return qsTr("Ethernet: %1").arg(Nmcli.ethernetDeviceDetails.ipAddress || "N/A");
- } else {
- return qsTr("No device details");
- }
- }
- color: (Nmcli.wirelessDeviceDetails || Nmcli.ethernetDeviceDetails) ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Refresh Device Details")
- onClicked: {
- appendLog("Manually refreshing device details...");
- if (Nmcli.active && Nmcli.active.active) {
- appendLog("Active network detected, refreshing device details...");
- // Refresh wireless device details
- if (Nmcli.wirelessInterfaces.length > 0) {
- const activeWireless = Nmcli.wirelessInterfaces.find(iface => {
- return iface.state === "connected" || iface.state.startsWith("connected");
- });
- if (activeWireless && activeWireless.device) {
- Nmcli.getWirelessDeviceDetails(activeWireless.device, (details) => {
- if (details) {
- appendLog("Wireless device details refreshed");
- }
- });
- }
- }
- // Refresh ethernet device details
- if (Nmcli.ethernetInterfaces.length > 0) {
- const activeEthernet = Nmcli.ethernetInterfaces.find(iface => {
- return iface.state === "connected" || iface.state.startsWith("connected");
- });
- if (activeEthernet && activeEthernet.device) {
- Nmcli.getEthernetDeviceDetails(activeEthernet.device, (details) => {
- if (details) {
- appendLog("Ethernet device details refreshed");
- }
- });
- }
- }
- } else {
- appendLog("No active network, clearing device details");
- Nmcli.wirelessDeviceDetails = null;
- Nmcli.ethernetDeviceDetails = null;
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Connection Events")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Show Active Network Info")
- onClicked: {
- if (Nmcli.active) {
- appendLog("Active Network Information:");
- appendLog(" SSID: " + Nmcli.active.ssid);
- appendLog(" BSSID: " + (Nmcli.active.bssid || "N/A"));
- appendLog(" Signal: " + Nmcli.active.strength + "%");
- appendLog(" Frequency: " + Nmcli.active.frequency + " MHz");
- appendLog(" Security: " + (Nmcli.active.security || "Open"));
- appendLog(" Is Secure: " + (Nmcli.active.isSecure ? "Yes" : "No"));
- } else {
- appendLog("No active network");
- }
- }
- }
- }
- }
- }
-
- // Ethernet Device Management Section
- StyledRect {
- Layout.fillWidth: true
- implicitHeight: ethernetManagementLayout.implicitHeight + Appearance.padding.large * 2
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- id: ethernetManagementLayout
-
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.normal
-
- StyledText {
- text: qsTr("Ethernet Device Management")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Ethernet Devices: %1").arg(Nmcli.ethernetDevices.length)
- }
-
- StyledText {
- text: qsTr("Active: %1").arg(Nmcli.activeEthernet ? Nmcli.activeEthernet.interface : "None")
- color: Nmcli.activeEthernet ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Refresh Devices")
- onClicked: {
- appendLog("Refreshing ethernet devices...");
- Nmcli.getEthernetInterfaces((interfaces) => {
- appendLog("Found " + Nmcli.ethernetDevices.length + " ethernet devices");
- for (let i = 0; i < Nmcli.ethernetDevices.length; i++) {
- const dev = Nmcli.ethernetDevices[i];
- appendLog(" " + (i + 1) + ". " + dev.interface + " - " + dev.state + (dev.connected ? " [Connected]" : ""));
- }
- if (Nmcli.activeEthernet) {
- appendLog("Active ethernet: " + Nmcli.activeEthernet.interface);
- }
- });
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("Selected Interface: %1").arg(interfaceSelector.selectedInterface || "None")
- }
-
- StyledText {
- visible: interfaceSelector.selectedInterface.length > 0
- text: {
- if (!interfaceSelector.selectedInterface) return "";
- const device = Nmcli.ethernetDevices.find(d => d.interface === interfaceSelector.selectedInterface);
- if (!device) return "";
- return device.connected ? qsTr("[Connected]") : qsTr("[Disconnected]");
- }
- color: {
- if (!interfaceSelector.selectedInterface) return Colours.palette.m3onSurface;
- const device = Nmcli.ethernetDevices.find(d => d.interface === interfaceSelector.selectedInterface);
- if (!device) return Colours.palette.m3onSurface;
- return device.connected ? Colours.palette.m3primary : Colours.palette.m3onSurfaceVariant;
- }
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Connect Ethernet")
- enabled: interfaceSelector.selectedInterface.length > 0
- onClicked: {
- if (interfaceSelector.selectedInterface) {
- const device = Nmcli.ethernetDevices.find(d => d.interface === interfaceSelector.selectedInterface);
- if (device) {
- appendLog("Connecting ethernet: " + interfaceSelector.selectedInterface);
- appendLog("Connection name: " + (device.connection || "N/A"));
- Nmcli.connectEthernet(device.connection || "", interfaceSelector.selectedInterface, (result) => {
- if (result.success) {
- appendLog("✓ Ethernet connection initiated");
- appendLog("Refreshing device list...");
- } else {
- appendLog("✗ Failed to connect: " + (result.error || "Unknown error"));
- }
- });
- } else {
- appendLog("Device not found in ethernet devices list");
- }
- }
- }
- }
-
- TextButton {
- text: qsTr("Disconnect Ethernet")
- enabled: interfaceSelector.selectedInterface.length > 0
- onClicked: {
- if (interfaceSelector.selectedInterface) {
- const device = Nmcli.ethernetDevices.find(d => d.interface === interfaceSelector.selectedInterface);
- if (device && device.connection) {
- appendLog("Disconnecting ethernet: " + device.connection);
- Nmcli.disconnectEthernet(device.connection, (result) => {
- if (result.success) {
- appendLog("✓ Ethernet disconnected");
- appendLog("Refreshing device list...");
- } else {
- appendLog("✗ Failed to disconnect: " + (result.error || "Unknown error"));
- }
- });
- } else {
- appendLog("No connection name available for this device");
- }
- }
- }
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- spacing: Appearance.spacing.small
-
- StyledText {
- text: qsTr("List All Ethernet Devices")
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("List Devices")
- onClicked: {
- appendLog("Ethernet Devices:");
- if (Nmcli.ethernetDevices.length === 0) {
- appendLog(" No ethernet devices found");
- } else {
- for (let i = 0; i < Nmcli.ethernetDevices.length; i++) {
- const dev = Nmcli.ethernetDevices[i];
- appendLog(" " + (i + 1) + ". " + dev.interface);
- appendLog(" Type: " + dev.type);
- appendLog(" State: " + dev.state);
- appendLog(" Connection: " + (dev.connection || "None"));
- appendLog(" Connected: " + (dev.connected ? "Yes" : "No"));
- }
- }
- }
- }
-
- TextButton {
- text: qsTr("Show Active Device")
- onClicked: {
- if (Nmcli.activeEthernet) {
- appendLog("Active Ethernet Device:");
- appendLog(" Interface: " + Nmcli.activeEthernet.interface);
- appendLog(" State: " + Nmcli.activeEthernet.state);
- appendLog(" Connection: " + (Nmcli.activeEthernet.connection || "None"));
- } else {
- appendLog("No active ethernet device");
- }
- }
- }
- }
- }
- }
-
- // Debug Output Section
- StyledRect {
- Layout.fillWidth: true
- Layout.preferredHeight: 300
- Layout.minimumHeight: 200
- radius: Appearance.rounding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- ColumnLayout {
- anchors.fill: parent
- anchors.margins: Appearance.padding.large
- spacing: Appearance.spacing.small
-
- RowLayout {
- Layout.fillWidth: true
-
- StyledText {
- text: qsTr("Debug Output")
- font.pointSize: Appearance.font.size.normal
- font.weight: 500
- }
-
- Item {
- Layout.fillWidth: true
- }
-
- TextButton {
- text: qsTr("Copy")
- onClicked: {
- debugOutput.selectAll();
- debugOutput.copy();
- debugOutput.deselect();
- appendLog("Output copied to clipboard");
- }
- }
- }
-
- StyledFlickable {
- id: debugOutputFlickable
-
- Layout.fillWidth: true
- Layout.fillHeight: true
- flickableDirection: Flickable.VerticalFlick
- clip: true
-
- TextEdit {
- id: debugOutput
-
- width: debugOutputFlickable.width
- readOnly: true
- wrapMode: TextEdit.Wrap
- font.family: Appearance.font.family.mono
- font.pointSize: Appearance.font.size.smaller
- renderType: TextEdit.NativeRendering
- textFormat: TextEdit.PlainText
- color: "#ffb0ca" // Use primary color - will be set programmatically
-
- Component.onCompleted: {
- color = Colours.palette.m3primary;
- appendLog("Debug panel initialized");
- }
-
- onTextChanged: {
- // Ensure color stays set when text changes
- color = Colours.palette.m3primary;
- // Update content height
- debugOutputFlickable.contentHeight = Math.max(implicitHeight, debugOutputFlickable.height);
- // Auto-scroll to bottom
- Qt.callLater(() => {
- if (debugOutputFlickable.contentHeight > debugOutputFlickable.height) {
- debugOutputFlickable.contentY = debugOutputFlickable.contentHeight - debugOutputFlickable.height;
- }
- });
- }
- }
- }
-
- StyledScrollBar {
- flickable: debugOutputFlickable
- policy: ScrollBar.AlwaysOn
- }
- }
- }
- }
- }
-
- function appendLog(message: string): void {
- const timestamp = new Date().toLocaleTimeString();
- debugOutput.text += `[${timestamp}] ${message}\n`;
- }
-
- function log(message: string): void {
- appendLog(message);
- }
-
- Component.onCompleted: {
- // Set up debug logger for Nmcli service
- Nmcli.setDebugLogger((msg) => {
- appendLog("[Nmcli] " + msg);
- });
- }
-}
-
diff --git a/modules/controlcenter/dev/DevNavRail.qml b/modules/controlcenter/dev/DevNavRail.qml
deleted file mode 100644
index d2f2d57..0000000
--- a/modules/controlcenter/dev/DevNavRail.qml
+++ /dev/null
@@ -1,194 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import "."
-import ".."
-import qs.components
-import qs.services
-import qs.config
-import Quickshell
-import QtQuick
-import QtQuick.Layouts
-
-Item {
- id: root
-
- required property ShellScreen screen
- required property DevSession session
-
- implicitWidth: layout.implicitWidth + Appearance.padding.larger * 4
- implicitHeight: layout.implicitHeight + Appearance.padding.large * 2
-
- ColumnLayout {
- id: layout
-
- anchors.left: parent.left
- anchors.verticalCenter: parent.verticalCenter
- anchors.leftMargin: Appearance.padding.larger * 2
- spacing: Appearance.spacing.normal
-
- states: State {
- name: "expanded"
- when: root.session.navExpanded
-
- PropertyChanges {
- layout.spacing: Appearance.spacing.small
- menuIcon.opacity: 0
- menuIconExpanded.opacity: 1
- menuIcon.rotation: 180
- menuIconExpanded.rotation: 0
- }
- }
-
- transitions: Transition {
- Anim {
- properties: "spacing,opacity,rotation"
- }
- }
-
- Item {
- id: menuBtn
-
- Layout.topMargin: Appearance.spacing.large
- implicitWidth: menuIcon.implicitWidth + menuIcon.anchors.leftMargin * 2
- implicitHeight: menuIcon.implicitHeight + Appearance.padding.normal * 2
-
- StateLayer {
- radius: Appearance.rounding.small
-
- function onClicked(): void {
- root.session.navExpanded = !root.session.navExpanded;
- }
- }
-
- MaterialIcon {
- id: menuIcon
-
- anchors.left: parent.left
- anchors.verticalCenter: parent.verticalCenter
- anchors.leftMargin: Appearance.padding.large
-
- text: "menu"
- font.pointSize: Appearance.font.size.large
- }
-
- MaterialIcon {
- id: menuIconExpanded
-
- anchors.fill: menuIcon
- text: "menu_open"
- font.pointSize: menuIcon.font.pointSize
- opacity: 0
- rotation: -180
- }
- }
-
- NavItem {
- Layout.topMargin: Appearance.spacing.large * 2
- icon: "wifi"
- label: "wireless"
- }
-
- NavItem {
- icon: "bug_report"
- label: "debug"
- }
- }
-
- component NavItem: Item {
- id: item
-
- required property string icon
- required property string label
- readonly property bool active: root.session.active === label
-
- implicitWidth: background.implicitWidth
- implicitHeight: background.implicitHeight + smallLabel.implicitHeight + smallLabel.anchors.topMargin
-
- states: State {
- name: "expanded"
- when: root.session.navExpanded
-
- PropertyChanges {
- expandedLabel.opacity: 1
- smallLabel.opacity: 0
- background.implicitWidth: icon.implicitWidth + icon.anchors.leftMargin * 2 + expandedLabel.anchors.leftMargin + expandedLabel.implicitWidth
- background.implicitHeight: icon.implicitHeight + Appearance.padding.normal * 2
- item.implicitHeight: background.implicitHeight
- }
- }
-
- transitions: Transition {
- Anim {
- property: "opacity"
- duration: Appearance.anim.durations.small
- }
-
- Anim {
- properties: "implicitWidth,implicitHeight"
- duration: Appearance.anim.durations.expressiveDefaultSpatial
- easing.bezierCurve: Appearance.anim.curves.expressiveDefaultSpatial
- }
- }
-
- StyledRect {
- id: background
-
- radius: Appearance.rounding.full
- color: Qt.alpha(Colours.palette.m3secondaryContainer, item.active ? 1 : 0)
-
- implicitWidth: icon.implicitWidth + icon.anchors.leftMargin * 2
- implicitHeight: icon.implicitHeight + Appearance.padding.small
-
- StateLayer {
- color: item.active ? Colours.palette.m3onSecondaryContainer : Colours.palette.m3onSurface
-
- function onClicked(): void {
- root.session.active = item.label;
- }
- }
-
- MaterialIcon {
- id: icon
-
- anchors.left: parent.left
- anchors.verticalCenter: parent.verticalCenter
- anchors.leftMargin: Appearance.padding.large
-
- text: item.icon
- color: item.active ? Colours.palette.m3onSecondaryContainer : Colours.palette.m3onSurface
- font.pointSize: Appearance.font.size.large
- fill: item.active ? 1 : 0
-
- Behavior on fill {
- Anim {}
- }
- }
-
- StyledText {
- id: expandedLabel
-
- anchors.left: icon.right
- anchors.verticalCenter: parent.verticalCenter
- anchors.leftMargin: Appearance.spacing.normal
-
- opacity: 0
- text: item.label
- color: item.active ? Colours.palette.m3onSecondaryContainer : Colours.palette.m3onSurface
- font.capitalization: Font.Capitalize
- }
-
- StyledText {
- id: smallLabel
-
- anchors.horizontalCenter: icon.horizontalCenter
- anchors.top: icon.bottom
- anchors.topMargin: Appearance.spacing.small / 2
-
- text: item.label
- font.pointSize: Appearance.font.size.small
- font.capitalization: Font.Capitalize
- }
- }
- }
-}
-
diff --git a/modules/controlcenter/dev/DevPanes.qml b/modules/controlcenter/dev/DevPanes.qml
deleted file mode 100644
index 6b5ce06..0000000
--- a/modules/controlcenter/dev/DevPanes.qml
+++ /dev/null
@@ -1,70 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import "."
-import ".."
-import qs.components
-import qs.services
-import qs.config
-import Quickshell.Widgets
-import QtQuick
-import QtQuick.Layouts
-
-ClippingRectangle {
- id: root
-
- required property DevSession session
-
- color: "transparent"
-
- ColumnLayout {
- id: layout
-
- spacing: 0
- y: -root.session.activeIndex * root.height
-
- Pane {
- index: 0
- sourceComponent: DevWirelessPane {
- session: root.session
- }
- }
-
- Pane {
- index: 1
- sourceComponent: DevDebugPane {
- session: root.session
- }
- }
-
- Behavior on y {
- Anim {}
- }
- }
-
- component Pane: Item {
- id: pane
-
- required property int index
- property alias sourceComponent: loader.sourceComponent
-
- implicitWidth: root.width
- implicitHeight: root.height
-
- Loader {
- id: loader
-
- anchors.fill: parent
- clip: true
- asynchronous: true
- active: {
- if (root.session.activeIndex === pane.index)
- return true;
-
- const ly = -layout.y;
- const ty = pane.index * root.height;
- return ly + root.height > ty && ly < ty + root.height;
- }
- }
- }
-}
-
diff --git a/modules/controlcenter/dev/DevSession.qml b/modules/controlcenter/dev/DevSession.qml
deleted file mode 100644
index d911386..0000000
--- a/modules/controlcenter/dev/DevSession.qml
+++ /dev/null
@@ -1,23 +0,0 @@
-import QtQuick
-
-QtObject {
- readonly property list<string> panes: ["wireless", "debug"]
-
- required property var root
- property bool floating: false
- property string active: panes[0]
- property int activeIndex: 0
- property bool navExpanded: false
-
- component Network: QtObject {
- property var active
- property bool showPasswordDialog: false
- property var pendingNetwork
- }
-
- readonly property Network network: Network {}
-
- onActiveChanged: activeIndex = panes.indexOf(active)
- onActiveIndexChanged: active = panes[activeIndex]
-}
-
diff --git a/modules/controlcenter/dev/DevWindowFactory.qml b/modules/controlcenter/dev/DevWindowFactory.qml
deleted file mode 100644
index 5682588..0000000
--- a/modules/controlcenter/dev/DevWindowFactory.qml
+++ /dev/null
@@ -1,62 +0,0 @@
-pragma Singleton
-
-import "."
-import qs.components
-import qs.services
-import Quickshell
-import QtQuick
-
-Singleton {
- id: root
-
- function create(parent: Item, props: var): void {
- devControlCenter.createObject(parent ?? dummy, props);
- }
-
- QtObject {
- id: dummy
- }
-
- Component {
- id: devControlCenter
-
- FloatingWindow {
- id: win
-
- property alias active: cc.active
- property alias navExpanded: cc.navExpanded
-
- color: Colours.tPalette.m3surface
-
- onVisibleChanged: {
- if (!visible)
- destroy();
- }
-
- minimumSize.width: 1000
- minimumSize.height: 600
-
- implicitWidth: cc.implicitWidth
- implicitHeight: cc.implicitHeight
-
- title: qsTr("Dev Panel - Wireless")
-
- DevControlCenter {
- id: cc
-
- anchors.fill: parent
- screen: win.screen
- floating: true
-
- function close(): void {
- win.destroy();
- }
- }
-
- Behavior on color {
- CAnim {}
- }
- }
- }
-}
-
diff --git a/modules/controlcenter/dev/DevWindowTitle.qml b/modules/controlcenter/dev/DevWindowTitle.qml
deleted file mode 100644
index 9395532..0000000
--- a/modules/controlcenter/dev/DevWindowTitle.qml
+++ /dev/null
@@ -1,53 +0,0 @@
-import "."
-import qs.components
-import qs.services
-import qs.config
-import Quickshell
-import QtQuick
-
-StyledRect {
- id: root
-
- required property ShellScreen screen
- required property DevSession session
-
- implicitHeight: text.implicitHeight + Appearance.padding.normal
- color: Colours.tPalette.m3surfaceContainer
-
- StyledText {
- id: text
-
- anchors.horizontalCenter: parent.horizontalCenter
- anchors.bottom: parent.bottom
-
- text: qsTr("Dev Panel - %1").arg(root.session.active.slice(0, 1).toUpperCase() + root.session.active.slice(1))
- font.capitalization: Font.Capitalize
- font.pointSize: Appearance.font.size.larger
- font.weight: 500
- }
-
- Item {
- anchors.right: parent.right
- anchors.top: parent.top
- anchors.margins: Appearance.padding.normal
-
- implicitWidth: implicitHeight
- implicitHeight: closeIcon.implicitHeight + Appearance.padding.small
-
- StateLayer {
- radius: Appearance.rounding.full
-
- function onClicked(): void {
- QsWindow.window.destroy();
- }
- }
-
- MaterialIcon {
- id: closeIcon
-
- anchors.centerIn: parent
- text: "close"
- }
- }
-}
-
diff --git a/modules/controlcenter/dev/DevWirelessPane.qml b/modules/controlcenter/dev/DevWirelessPane.qml
deleted file mode 100644
index feb0ce7..0000000
--- a/modules/controlcenter/dev/DevWirelessPane.qml
+++ /dev/null
@@ -1,68 +0,0 @@
-pragma ComponentBehavior: Bound
-
-import "."
-import ".."
-import qs.components
-import qs.components.effects
-import qs.components.containers
-import qs.config
-import Quickshell.Widgets
-import QtQuick
-import QtQuick.Layouts
-
-RowLayout {
- id: root
-
- required property DevSession session
-
- anchors.fill: parent
-
- spacing: 0
-
- Item {
- Layout.preferredWidth: Math.floor(parent.width * 0.4)
- Layout.minimumWidth: 420
- Layout.fillHeight: true
-
- // Blank placeholder for wireless list
- Item {
- anchors.fill: parent
- anchors.margins: Appearance.padding.large + Appearance.padding.normal
- anchors.leftMargin: Appearance.padding.large
- anchors.rightMargin: Appearance.padding.large + Appearance.padding.normal / 2
- }
-
- InnerBorder {
- leftThickness: 0
- rightThickness: Appearance.padding.normal / 2
- }
- }
-
- Item {
- Layout.fillWidth: true
- Layout.fillHeight: true
-
- ClippingRectangle {
- anchors.fill: parent
- anchors.margins: Appearance.padding.normal
- anchors.leftMargin: 0
- anchors.rightMargin: Appearance.padding.normal / 2
-
- radius: rightBorder.innerRadius
- color: "transparent"
-
- // Blank placeholder for settings/details area
- Item {
- anchors.fill: parent
- anchors.margins: Appearance.padding.large * 2
- }
- }
-
- InnerBorder {
- id: rightBorder
-
- leftThickness: Appearance.padding.normal / 2
- }
- }
-}
-
diff --git a/modules/utilities/cards/Toggles.qml b/modules/utilities/cards/Toggles.qml
index ccf1c7d..d3ad51e 100644
--- a/modules/utilities/cards/Toggles.qml
+++ b/modules/utilities/cards/Toggles.qml
@@ -3,7 +3,6 @@ import qs.components.controls
import qs.services
import qs.config
import qs.modules.controlcenter
-import "../../controlcenter/dev"
import Quickshell
import Quickshell.Bluetooth
import QtQuick
@@ -94,17 +93,6 @@ StyledRect {
onClicked: VPN.toggle()
}
- Toggle {
- icon: "bug_report"
- inactiveOnColour: Colours.palette.m3onSurfaceVariant
- toggle: false
- onClicked: {
- root.visibilities.utilities = false;
- DevWindowFactory.create(null, {
- screen: QsWindow.window?.screen ?? null
- });
- }
- }
}
}