mirror of
https://github.com/belsabbagh/dotfiles.git
synced 2026-04-11 09:36:46 +00:00
quickshell and hyprland additions
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
import QtQuick
|
||||
import QtQuick.Layouts
|
||||
import qs.config
|
||||
import qs.modules.components
|
||||
import qs.services
|
||||
import qs.modules.functions
|
||||
|
||||
Item {
|
||||
id: networkRow
|
||||
property var connection
|
||||
property bool isActive: false
|
||||
property bool showConnect: false
|
||||
property bool showDisconnect: false
|
||||
property bool showPasswordField: false
|
||||
property string password: ""
|
||||
|
||||
width: parent.width
|
||||
implicitHeight: mainLayout.implicitHeight
|
||||
|
||||
function signalIcon(strength, secure) {
|
||||
if (!connection) return "network_wifi";
|
||||
if (connection.type === "ethernet") return "settings_ethernet";
|
||||
if (strength >= 75) return "network_wifi";
|
||||
if (strength >= 50) return "network_wifi_3_bar";
|
||||
if (strength >= 25) return "network_wifi_2_bar";
|
||||
if (strength > 0) return "network_wifi_1_bar";
|
||||
return "network_wifi_1_bar";
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
id: mainLayout
|
||||
anchors.fill: parent
|
||||
spacing: Metrics.spacing(10)
|
||||
|
||||
RowLayout {
|
||||
spacing: Metrics.spacing(10)
|
||||
|
||||
// Signal icon with lock overlay
|
||||
Item {
|
||||
width: Metrics.spacing(32)
|
||||
height: Metrics.spacing(32)
|
||||
|
||||
MaterialSymbol {
|
||||
anchors.fill: parent
|
||||
icon: connection ? signalIcon(connection.strength, connection.isSecure) : "network_wifi"
|
||||
font.pixelSize: Metrics.fontSize(32)
|
||||
}
|
||||
|
||||
// Lock overlay (anchors are safe because Item is not layout-managed)
|
||||
MaterialSymbol {
|
||||
icon: "lock"
|
||||
visible: connection && connection.type === "wifi" && connection.isSecure
|
||||
font.pixelSize: Metrics.fontSize(12)
|
||||
anchors.right: parent.right
|
||||
anchors.bottom: parent.bottom
|
||||
}
|
||||
}
|
||||
|
||||
ColumnLayout {
|
||||
Layout.alignment: Qt.AlignVCenter
|
||||
spacing: Metrics.spacing(0)
|
||||
|
||||
StyledText {
|
||||
text: connection ? connection.name : ""
|
||||
font.pixelSize: Metrics.fontSize(16)
|
||||
font.bold: true
|
||||
}
|
||||
|
||||
StyledText {
|
||||
text: connection ? (
|
||||
isActive ? "Connected" :
|
||||
connection.type === "ethernet" ? connection.device || "Ethernet" :
|
||||
connection.isSecure ? "Secured" : "Open"
|
||||
) : ""
|
||||
font.pixelSize: Metrics.fontSize(12)
|
||||
color: isActive
|
||||
? Appearance.m3colors.m3primary
|
||||
: ColorUtils.transparentize(Appearance.m3colors.m3onSurface, 0.4)
|
||||
}
|
||||
}
|
||||
|
||||
Item { Layout.fillWidth: true }
|
||||
|
||||
StyledButton {
|
||||
visible: showConnect && !showPasswordField
|
||||
icon: "link"
|
||||
onClicked: {
|
||||
if (!connection) return;
|
||||
if (connection.type === "ethernet") Network.connect(connection, "")
|
||||
else if (connection.isSecure) showPasswordField = true
|
||||
else Network.connect(connection, "")
|
||||
}
|
||||
}
|
||||
|
||||
StyledButton {
|
||||
visible: showDisconnect && !showPasswordField
|
||||
icon: "link_off"
|
||||
onClicked: Network.disconnect()
|
||||
}
|
||||
}
|
||||
|
||||
// Password row
|
||||
RowLayout {
|
||||
visible: showPasswordField && connection && connection.type === "wifi"
|
||||
spacing: Metrics.spacing(10)
|
||||
|
||||
StyledTextField {
|
||||
padding: Metrics.padding(10)
|
||||
Layout.fillWidth: true
|
||||
placeholderText: "Enter password"
|
||||
echoMode: parent.showPassword ? TextInput.Normal : TextInput.Password
|
||||
onTextChanged: networkRow.password = text
|
||||
onAccepted: {
|
||||
if (!connection) return;
|
||||
Network.connect(connection, networkRow.password)
|
||||
showPasswordField = false
|
||||
}
|
||||
}
|
||||
|
||||
StyledButton {
|
||||
property bool showPassword: false
|
||||
icon: parent.showPassword ? "visibility" : "visibility_off"
|
||||
onClicked: parent.showPassword = !parent.showPassword
|
||||
}
|
||||
|
||||
StyledButton {
|
||||
icon: "link"
|
||||
onClicked: {
|
||||
if (!connection) return;
|
||||
Network.connect(connection, networkRow.password)
|
||||
showPasswordField = false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user