quickshell/modules/Bar/StatusIcons.qml

84 lines
2.2 KiB
QML

import Quickshell.Services.UPower
import Quickshell.Services.Pipewire
import QtQuick
import QtQuick.Layouts
import qs
import qs.settings
import qs.widgets
Rectangle {
id: root
color: Colors.base01
implicitWidth: iconLayout.implicitWidth + 14
implicitHeight: Settings.config.barHeight / 2 + 6
radius: Settings.config.rounding
property var battery: UPower.displayDevice
property var percentage: UPower.displayDevice.percentage
property bool charging: UPower.displayDevice.state == UPowerDeviceState.Charging
property bool hasBattery: UPower.displayDevice.isLaptopBattery
property var audio: Pipewire.ready ? Pipewire.defaultAudioSink : ""
property var audioPercentage: Pipewire.ready ? Pipewire.defaultAudioSink.audio.volume : 0
property bool audioMute: Pipewire.ready ? Pipewire.defaultAudioSink.audio.muted : false
function getBatteryIcon() {
if (charging) {
return "\uf250";
}
if (percentage <= 0.12) {
return "\uf251";
}
if (percentage <= 0.24) {
return "\uf257";
}
if (percentage <= 0.36) {
return "\uf256";
}
if (percentage <= 0.48) {
return "\uf255";
}
if (percentage <= 0.60) {
return "\uf254";
}
if (percentage <= 0.72) {
return "\uf253";
}
if (percentage <= 0.84) {
return "\uf252";
}
if (percentage >= 0.84) {
return "\uf24f";
}
}
function getVolumeIcon() {
if (audioMute) {
return "\ue04f";
}
if (audioPercentage <= 0.33) {
return "\ue04e";
}
if (audioPercentage <= 0.66) {
return "\ue04d";
}
if (audioPercentage >= 0.66) {
return "\ue050";
}
}
RowLayout {
id: iconLayout
anchors.centerIn: parent
CIcon {
id: batteryIcon
text: root.getBatteryIcon()
}
CIcon {
id: volIcon
text: root.getVolumeIcon()
}
}
property var audioSink: Pipewire.defaultAudioSink
PwObjectTracker {
objects: Pipewire.ready ? Pipewire.defaultAudioSink : []
}
}