summaryrefslogtreecommitdiffstats
path: root/app/Mixer.qml
diff options
context:
space:
mode:
authorLoïc Collignon <loic.collignon@iot.bzh>2018-12-18 17:16:35 +0100
committerLoïc Collignon <loic.collignon@iot.bzh>2018-12-19 18:26:34 +0100
commit449ae663fadf654bbe46f6e4c927a60e8d1a61bb (patch)
tree4cb17287002965e1f661ff521221d607982caea7 /app/Mixer.qml
parent34ff9f8c02a90fa0cce8ee6c1d4b87c300771bdc (diff)
Reworked the way qml create sliders
Use the qml MVC to populate a ListView with components based on a template VolumeSlider. Should now handle potential disconnections, volume changes by third-party and also fix the issue where sliders are set to 0 at startup. Change-Id: I2961d5a1584a121c473ece253faa90a747c64445 Signed-off-by: Loïc Collignon <loic.collignon@iot.bzh>
Diffstat (limited to 'app/Mixer.qml')
-rw-r--r--app/Mixer.qml138
1 files changed, 41 insertions, 97 deletions
diff --git a/app/Mixer.qml b/app/Mixer.qml
index 73587a5..455743a 100644
--- a/app/Mixer.qml
+++ b/app/Mixer.qml
@@ -21,101 +21,45 @@ import AGL.Demo.Controls 1.0
import Mixer 1.0
ApplicationWindow {
- // ----- Signals
-
- // ----- Properties
- property Component volumeSlider
-
- // ----- Setup
- id: root
- width: container.width * container.scale
- height: container.height * container.scale
-
- // ----- Childs
- Mixer {
- // ----- Signals
- signal sliderVolumeChanged(string role, int value)
-
- // ----- Properties
-
- // ----- Setup
- id: mixer
-
- onSliderVolumeChanged: {
- console.log("======role: " + role + ", volume: " + value);
- mixer.setVolume(role, value);
- }
-
- Component.onCompleted: {
- var vs = Qt.createComponent("VolumeSlider.qml");
- if (vs.status !== Component.Ready) {
- console.log("Failed to load the VolumeSlider.qml component: " + vs.errorString());
- }
- root.volumeSlider = vs
- mixer.open(bindingAddress);
- }
-
- onRolesChanged: {
- // Remove existing sliders
- for(var i = sliders.children.length; i > 0 ; --i) {
- console.log("destroying: " + i);
- sliders.children[i-1].destroy();
- }
-
- // Add slider for each role
- for(var j = 0; j < mixer.roles.length; ++j) {
- addSlider(mixer.roles[j]);
- }
- }
-
- onVolumeChanged: {
- console.log("onVolumeChanged(\"" + name + "\", " + value + ")");
- for(var i = 0; i < sliders.children.length ; i++) {
- var sld = sliders.children[i];
- console.log(i + " - Slider found:" + sld + "[\"" + sld.role + "\"] = " + sld.value);
- if (sld.role === name) {
- sld.value = value;
- }
- }
- }
-
- // ----- Functions
- function addSlider(name) {
- var sld = root.volumeSlider.createObject(sliders)
- sld.role = name
- sld.onSliderValueChanged.connect(mixer.sliderVolumeChanged)
- mixer.getVolume(name); // Update volume
- }
-
- function deleteChilds(item) {
- for(var i = item.children.length; i > 0 ; i--) {
- deleteChilds(item.children[i-1]);
- }
- item.destroy();
- }
- }
-
- Item {
- id: container
- anchors.centerIn: parent
- width: 1080
- height: 1487
- scale: screenInfo.scale_factor()
-
- Label {
- id: title
- font.pixelSize: 48
- text: "Mixer"
- anchors.horizontalCenter: parent.horizontalCenter
- }
-
- ColumnLayout {
- id: sliders
- anchors.margins: 80
- anchors.top: title.bottom
- anchors.left: parent.left
- anchors.right: parent.right
- }
- }
+ // ----- Signals
+
+ // ----- Properties
+ property Component volumeSlider
+
+ // ----- Setup
+ id: root
+ width: 1080 * roles.scale
+ height: 1487 * roles.scale
+
+ // ----- Childs
+ Label {
+ id: title
+ font.pixelSize: 48
+ text: "Mixer"
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Mixer {
+ signal sliderVolumeChanged(string role, int value)
+
+ id: mixer
+
+ Component.onCompleted: {
+ mixer.open(bindingAddress);
+ }
+ }
+
+ ListView {
+ id: roles
+ model: mixer.roles
+ scale: scale_factor
+
+ anchors.margins: 80
+ anchors.top: title.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+
+ delegate: VolumeSlider {}
+ }
}
-