+ source: './images/Utility_Logo_Grey-01.svg'
+ }
+
+ Timer {
+ id: volume_timer
+ interval: 5000; running: false; repeat: false
+ onTriggered: displayVolume = false
+ }
+
+ states: [
+ State { when: displayVolume;
+ PropertyChanges { target: master_volume; opacity: 1.0 }
+ PropertyChanges { target: slider; enabled: true }
+ PropertyChanges { target: logo_image; opacity: 0.0 }
+ },
+ State { when: !displayVolume;
+ PropertyChanges { target: master_volume; opacity: 0.0 }
+ PropertyChanges { target: slider; enabled: false }
+ PropertyChanges { target: logo_image; opacity: 1.0 }
+ }
+ ]
+
+ transitions: Transition {
+ NumberAnimation { property: "opacity"; duration: 500}
+ }
+
+ MasterVolume {
+ id: mv
+ objectName: "mv"
+ onVolumeChanged: slider.value = volume
+ Component.onCompleted: {
+ mv.open(bindingAddress);
+ }
+ }
+
+ Item {
+ id: master_volume
+ anchors.fill: parent
+ anchors.centerIn: parent
+ visible: false
+
+ Label {
+ font.pixelSize: 36
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "white"
+ text: qsTr("Active Volume")
+ }
+
+ RowLayout {
+ anchors.fill: parent
+ anchors.centerIn: parent
+ anchors.margins: 20
+ spacing: 20
+ Label {
+ font.pixelSize: 36
+ color: "white"
+ text: "0 %"
+ }
+ Slider {
+ id: slider
+ Layout.fillWidth: true
+ from: 0
+ to: 100
+ stepSize: 1
+ snapMode: Slider.SnapOnRelease
+ onValueChanged: mv.volume = value
+ Component.onCompleted: value = mv.volume
+ onPressedChanged: {
+ if (pressed) {volume_timer.stop()}
+ else {volume_timer.restart()}
+ }
+ }
+ Label {
+ font.pixelSize: 36
+ color: "white"
+ text: "100 %"
+ }
+ }