Files
dots-hyprland/dots/.config/quickshell/ii/modules/waffle/bar/SystemButton.qml
T
2025-11-23 11:39:11 +01:00

108 lines
3.5 KiB
QML

import QtQuick
import QtQuick.Layouts
import qs
import qs.services
import qs.modules.common
import qs.modules.common.widgets
import qs.modules.waffle.looks
BarButton {
id: root
checked: GlobalStates.sidebarLeftOpen
onClicked: {
GlobalStates.sidebarLeftOpen = !GlobalStates.sidebarLeftOpen;
}
contentItem: Item {
anchors.fill: parent
implicitHeight: column.implicitHeight
implicitWidth: column.implicitWidth
Row {
id: column
anchors {
top: parent.top
bottom: parent.bottom
horizontalCenter: parent.horizontalCenter
}
spacing: 4
IconHoverArea {
id: internetHoverArea
iconItem: FluentIcon {
anchors.verticalCenter: parent.verticalCenter
icon: "wifi-1"
color: Looks.colors.inactiveIcon
FluentIcon {
anchors.fill: parent
icon: WIcons.internetIcon
}
}
}
IconHoverArea {
id: volumeHoverArea
iconItem: FluentIcon {
anchors.verticalCenter: parent.verticalCenter
icon: "speaker"
color: Looks.colors.inactiveIcon
FluentIcon {
anchors.fill: parent
icon: WIcons.volumeIcon
}
}
onScrollDown: Audio.decrementVolume();
onScrollUp: Audio.incrementVolume();
}
IconHoverArea {
id: batteryHoverArea
visible: Battery?.available ?? false
iconItem: FluentIcon {
anchors.verticalCenter: parent.verticalCenter
icon: WIcons.batteryLevelIcon
FluentIcon {
anchors.fill: parent
icon: WIcons.batteryIcon
}
}
}
}
}
component IconHoverArea: FocusedScrollMouseArea {
id: hoverArea
required property var iconItem
anchors {
top: parent.top
bottom: parent.bottom
}
hoverEnabled: true
implicitHeight: hoverArea.iconItem.implicitHeight
implicitWidth: hoverArea.iconItem.implicitWidth
onPressed: (event) => event.accepted = false; // Don't consume clicks
children: [iconItem]
}
BarToolTip {
extraVisibleCondition: root.shouldShowTooltip && internetHoverArea.containsMouse
text: Translation.tr("%1\nInternet access").arg(Network.ethernet ? Translation.tr("Network") : Network.networkName)
}
BarToolTip {
extraVisibleCondition: root.shouldShowTooltip && volumeHoverArea.containsMouse
text: Translation.tr("Speakers (%1): %2") //
.arg(Audio.sink?.nickname || Audio.sink?.description || Translation.tr("Unknown")) //
.arg(Audio.sink?.audio.muted ? Translation.tr("Muted") : `${Math.round(Audio.sink?.audio.volume * 100) || 0}%`) //
}
BarToolTip {
extraVisibleCondition: root.shouldShowTooltip && batteryHoverArea.containsMouse
text: Translation.tr("Battery: %1%2") //
.arg(`${Math.round(Battery.percentage * 100) || 0}%`) //
.arg(Battery.isPluggedIn ? (" " + Translation.tr("(Plugged in)")) : "")
}
}