Files
DankMaterialShell/quickshell/Modules/ControlCenter/Widgets/NetworkTile.qml
T
bbedward 014c69b09a settings: tile color restyle and re-org, use materials own shift for
them towards theme
controlCenter: make a real grid, add numerous more tile varieties, add
icon size option
surfaces: fix elevation levels in general, and shift them down
settings: restyles and re-org
sliders: scale down universally
2026-09-18 14:32:55 -04:00

140 lines
5.7 KiB
QML

import QtQuick
import qs.Common
import qs.Services
import qs.Modules.Network
import "../../../Common/QmlUtils.js" as QmlUtils
CcTile {
id: root
readonly property string status: NetworkService.networkStatus
readonly property bool wifiConnecting: NetworkService.isConnecting && !NetworkService.ethernetConnected
iconBlinking: NetworkService.isWifiConnecting
iconName: {
if (NetworkService.wifiToggling)
return "sync";
if (wifiConnecting)
return NetworkService.wifiSignalIcon;
switch (status) {
case "ethernet":
return "settings_ethernet";
case "cellular":
return "network_cell";
case "vpn":
if (NetworkService.ethernetConnected)
return "settings_ethernet";
return NetworkService.cellularConnected ? "network_cell" : NetworkService.wifiSignalIcon;
case "wifi":
return NetworkService.wifiSignalIcon;
default:
return "wifi";
}
}
title: {
if (NetworkService.wifiToggling)
return NetworkService.wifiEnabled ? I18n.tr("Disabling WiFi...", "network status") : I18n.tr("Enabling WiFi...", "network status");
if (wifiConnecting)
return NetworkService.connectingSSID || I18n.tr("Connecting...", "network status");
switch (status) {
case "ethernet":
return I18n.tr("Ethernet", "network status");
case "cellular":
return I18n.tr("Cellular", "network status");
case "vpn":
if (NetworkService.ethernetConnected)
return I18n.tr("Ethernet", "network status");
if (NetworkService.cellularConnected)
return I18n.tr("Cellular", "network status");
if (NetworkService.wifiConnected && NetworkService.currentWifiSSID)
return NetworkService.currentWifiSSID;
break;
case "wifi":
if (NetworkService.currentWifiSSID)
return NetworkService.currentWifiSSID;
break;
}
return NetworkService.wifiEnabled ? I18n.tr("Not connected", "network status") : I18n.tr("WiFi is off", "network status");
}
subtitle: {
if (NetworkService.wifiToggling)
return I18n.tr("Please wait...", "network status");
if (wifiConnecting)
return I18n.tr("Connecting...", "network status");
const signal = NetworkService.wifiSignalStrength > 0 ? NetworkService.wifiSignalStrength + "%" : I18n.tr("Connected", "network status");
switch (status) {
case "ethernet":
return I18n.tr("Connected", "network status");
case "cellular":
return NetworkService.cellularIP || I18n.tr("Connected", "network status");
case "vpn":
if (NetworkService.ethernetConnected)
return I18n.tr("Connected", "network status");
if (NetworkService.cellularConnected)
return NetworkService.cellularIP || I18n.tr("Connected", "network status");
if (NetworkService.wifiConnected)
return signal;
break;
case "wifi":
return signal;
}
return NetworkService.wifiEnabled ? I18n.tr("Select network", "network status") : "";
}
active: {
if (NetworkService.wifiToggling)
return false;
switch (status) {
case "ethernet":
case "cellular":
case "wifi":
return true;
case "vpn":
return NetworkService.ethernetConnected || NetworkService.wifiConnected || NetworkService.cellularConnected;
default:
return NetworkService.wifiEnabled;
}
}
showExpand: true
enabled: widgetDef?.enabled ?? true
onClicked: {
if (status === "ethernet" || status === "cellular" || NetworkService.wifiToggling)
return;
NetworkService.toggleWifiRadio();
}
expandedContent: Component {
CcTileActions {
readonly property var pins: QmlUtils.normalizePinList((CacheData.wifiNetworkPins || {}).preferredWifi)
readonly property var networks: {
if (!NetworkService.wifiEnabled)
return [];
return (NetworkService.wifiNetworks || []).filter(network => network.ssid).slice().sort((a, b) => {
const aPin = pins.indexOf(a.ssid);
const bPin = pins.indexOf(b.ssid);
if (aPin !== bPin)
return (aPin < 0 ? Infinity : aPin) - (bPin < 0 ? Infinity : bPin);
const current = NetworkService.currentWifiSSID;
if ((a.ssid === current) !== (b.ssid === current))
return a.ssid === current ? -1 : 1;
return (b.signal || 0) - (a.signal || 0);
});
}
actions: networks.map(network => ({
text: network.ssid,
icon: "wifi",
active: NetworkService.wifiConnected && network.ssid === NetworkService.currentWifiSSID,
enabled: !NetworkService.wifiToggling && !(NetworkService.isWifiConnecting && NetworkService.connectingSSID === network.ssid),
trigger: () => WifiConnectionActions.connectToNetwork(network, {
connected: NetworkService.wifiConnected && network.ssid === NetworkService.currentWifiSSID
})
})).concat([
{
text: I18n.tr("Select network", "network status"),
icon: "wifi_find",
trigger: () => root.expandClicked()
}
])
}
}
}