import QtQuick import Quickshell import "." as M import "../services" as S M.HoverPanel { id: menuWindow contentWidth: 250 panelNamespace: "nova-network" panelTitle: "Wi-Fi" titleActionsComponent: Component { Item { width: 20 height: 20 Text { anchors.centerIn: parent text: "\uF011" color: S.NetworkService.wifiEnabled ? menuWindow.accentColor : S.Theme.base04 font.pixelSize: S.Theme.fontSize font.family: S.Theme.iconFontFamily Behavior on color { ColorAnimation { duration: 100 } } } HoverHandler { cursorShape: Qt.PointingHandCursor } TapHandler { onTapped: S.NetworkService.setWifi(!S.NetworkService.wifiEnabled) } } } onVisibleChanged: if (visible) S.NetworkService.refresh() Repeater { model: S.NetworkService.networks delegate: Item { id: entry required property var modelData required property int index width: menuWindow.contentWidth height: 32 Rectangle { anchors.fill: parent anchors.leftMargin: 4 anchors.rightMargin: 4 color: entryHover.hovered ? S.Theme.base02 : "transparent" radius: S.Theme.radius } Text { id: netIcon anchors.left: parent.left anchors.leftMargin: 12 anchors.verticalCenter: parent.verticalCenter text: entry.modelData.isWifi ? "\uF1EB" : "\uDB80\uDE00" color: entry.modelData.active ? menuWindow.accentColor : S.Theme.base05 font.pixelSize: S.Theme.fontSize + 1 font.family: S.Theme.iconFontFamily } Text { anchors.left: netIcon.right anchors.leftMargin: 8 anchors.right: sigLabel.left anchors.rightMargin: 4 anchors.verticalCenter: parent.verticalCenter text: entry.modelData.name color: entry.modelData.active ? menuWindow.accentColor : S.Theme.base05 font.pixelSize: S.Theme.fontSize font.family: S.Theme.fontFamily font.bold: entry.modelData.active elide: Text.ElideRight } Text { id: sigLabel anchors.right: parent.right anchors.rightMargin: 12 anchors.verticalCenter: parent.verticalCenter text: entry.modelData.signal >= 0 ? entry.modelData.signal + "%" : "" color: S.Theme.base04 font.pixelSize: S.Theme.fontSize - 1 font.family: S.Theme.fontFamily width: entry.modelData.signal >= 0 ? implicitWidth : 0 } HoverHandler { id: entryHover cursorShape: Qt.PointingHandCursor } TapHandler { onTapped: { if (entry.modelData.active) S.NetworkService.disconnectNetwork(entry.modelData.uuid); else S.NetworkService.connectNetwork(entry.modelData.uuid); menuWindow.keepOpen(500); } } } } Text { visible: S.NetworkService.networks.length === 0 width: menuWindow.contentWidth height: 32 horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter text: S.NetworkService.wifiEnabled ? "No networks available" : "Wi-Fi is off" color: S.Theme.base04 font.pixelSize: S.Theme.fontSize font.family: S.Theme.fontFamily } }