107 lines
3.1 KiB
QML
107 lines
3.1 KiB
QML
import Quickshell.Services.Pipewire
|
|
import QtQuick
|
|
|
|
import qs.config
|
|
import qs.modules.quicksettings
|
|
import qs.services
|
|
import qs.widgets
|
|
|
|
Rectangle {
|
|
id: root
|
|
|
|
required property var application
|
|
|
|
readonly property real volume: AudioDevices.applicationVolume(root.application)
|
|
readonly property bool muted: AudioDevices.applicationMuted(root.application)
|
|
|
|
width: parent ? parent.width : 620
|
|
implicitHeight: 78
|
|
radius: Theme.cardRadius
|
|
color: Theme.alpha(Theme.fg, 0.025)
|
|
border.width: 1
|
|
border.color: Theme.alpha(Theme.fg, 0.07)
|
|
|
|
PwObjectTracker {
|
|
objects: root.application?.nodes ?? []
|
|
}
|
|
|
|
ThemedIcon {
|
|
id: applicationIcon
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 12
|
|
anchors.top: parent.top
|
|
anchors.topMargin: 11
|
|
size: 20
|
|
icon: root.application?.icon ?? "audio-x-generic-symbolic"
|
|
iconFallback: "audio-x-generic-symbolic"
|
|
tint: Theme.fg
|
|
}
|
|
|
|
Column {
|
|
anchors.left: applicationIcon.right
|
|
anchors.leftMargin: 10
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 12
|
|
anchors.verticalCenter: applicationIcon.verticalCenter
|
|
spacing: 1
|
|
|
|
Text {
|
|
width: parent.width
|
|
text: root.application?.label ?? "Unknown application"
|
|
color: Theme.fg
|
|
font.family: Theme.fontFamily
|
|
font.pixelSize: Theme.fontSize
|
|
font.weight: Font.Medium
|
|
elide: Text.ElideRight
|
|
}
|
|
|
|
Text {
|
|
width: parent.width
|
|
visible: (root.application?.nodes?.length ?? 0) > 1
|
|
text: `${root.application?.nodes?.length ?? 0} audio streams`
|
|
color: Theme.fgDim
|
|
font.family: Theme.fontFamily
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
}
|
|
}
|
|
|
|
IconButton {
|
|
id: muteButton
|
|
anchors.left: parent.left
|
|
anchors.leftMargin: 8
|
|
anchors.bottom: parent.bottom
|
|
anchors.bottomMargin: 6
|
|
size: 30
|
|
iconSize: 17
|
|
icon: root.muted || root.volume <= 0.001
|
|
? "audio-volume-muted-symbolic"
|
|
: "audio-volume-high-symbolic"
|
|
iconFallback: "audio-volume-high-symbolic"
|
|
onClicked: AudioDevices.setApplicationMuted(root.application, !root.muted)
|
|
}
|
|
|
|
ValueSlider {
|
|
anchors.left: muteButton.right
|
|
anchors.leftMargin: 7
|
|
anchors.right: volumeText.left
|
|
anchors.rightMargin: 10
|
|
anchors.verticalCenter: muteButton.verticalCenter
|
|
value: root.muted ? 0 : root.volume
|
|
onMoved: value => AudioDevices.setApplicationVolume(root.application, value)
|
|
}
|
|
|
|
Text {
|
|
id: volumeText
|
|
anchors.right: parent.right
|
|
anchors.rightMargin: 12
|
|
anchors.verticalCenter: muteButton.verticalCenter
|
|
width: 38
|
|
text: Math.round(root.volume * 100) + "%"
|
|
color: Theme.fgDim
|
|
font.family: Theme.fontMono
|
|
font.features: Theme.tabularFigures
|
|
font.pixelSize: Theme.fontSizeSmall
|
|
horizontalAlignment: Text.AlignRight
|
|
}
|
|
}
|