Add mute button with dynamic icon to MPRIS volume control
Summary: The icon changes depending on the slider value and clicking it will switch the volume between 0 and 100 Reviewers: #kde_connect, nicolasfella Reviewed By: #kde_connect, nicolasfella Subscribers: apol, broulik, albertvaka, nicolasfella, kdeconnect Tags: #kde_connect Differential Revision: https://phabricator.kde.org/D16962
This commit is contained in:
parent
793c74e89e
commit
05a34747f3
1 changed files with 45 additions and 3 deletions
|
@ -27,8 +27,37 @@ Kirigami.Page
|
||||||
{
|
{
|
||||||
id: root
|
id: root
|
||||||
property QtObject pluginInterface
|
property QtObject pluginInterface
|
||||||
|
property bool muted: false
|
||||||
|
property int volumeUnmuted
|
||||||
|
property var volume: pluginInterface.volume
|
||||||
title: i18n("Multimedia Controls")
|
title: i18n("Multimedia Controls")
|
||||||
|
|
||||||
|
onVolumeChanged: {
|
||||||
|
if (muted && volume != 0) {
|
||||||
|
toggleMute()
|
||||||
|
volumeUnmuted = volume
|
||||||
|
} else if (!muted) {
|
||||||
|
volumeUnmuted = volume
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function soundState(volume)
|
||||||
|
{
|
||||||
|
if (volume <= 25) {
|
||||||
|
return "audio-volume-low"
|
||||||
|
} else if (volume <= 75) {
|
||||||
|
return "audio-volume-medium"
|
||||||
|
} else {
|
||||||
|
return "audio-volume-high"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function toggleMute() {
|
||||||
|
muted = !muted
|
||||||
|
root.pluginInterface.volume = muted ? 0 : volumeUnmuted
|
||||||
|
muteButton.icon.name = muted ? "audio-volume-muted" : soundState(root.pluginInterface.volume)
|
||||||
|
}
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
id: noPlayersText
|
id: noPlayersText
|
||||||
text: i18n("No players available")
|
text: i18n("No players available")
|
||||||
|
@ -103,13 +132,26 @@ Kirigami.Page
|
||||||
}
|
}
|
||||||
RowLayout {
|
RowLayout {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Label { text: i18n("Volume:") }
|
Button {
|
||||||
|
id: muteButton
|
||||||
|
icon.name: soundState(root.pluginInterface.volume)
|
||||||
|
onClicked: toggleMute()
|
||||||
|
}
|
||||||
Slider {
|
Slider {
|
||||||
value: root.pluginInterface.volume
|
id: volumeSlider
|
||||||
to: 100
|
value: volumeUnmuted
|
||||||
|
to: 99
|
||||||
|
enabled: !muted
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
onValueChanged: {
|
||||||
|
volumeUnmuted = value
|
||||||
|
root.pluginInterface.volume = value
|
||||||
|
muteButton.icon.name = soundState(root.pluginInterface.volume)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Item { Layout.fillHeight: true }
|
Item { Layout.fillHeight: true }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Component.onCompleted: volumeUnmuted = root.pluginInterface.volume
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue