X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=app%2FMixer.qml;h=73587a5715bcdcfb6849977f298e9c941bfb9f80;hb=refs%2Fheads%2Fsandbox%2Fruke47%2Fflounder_RPi3;hp=58124c70f2ee4328739060e8021dafe3a0dc4577;hpb=288256f33f6298204cd0166cea3202d1fde100da;p=apps%2Fmixer.git diff --git a/app/Mixer.qml b/app/Mixer.qml index 58124c7..73587a5 100644 --- a/app/Mixer.qml +++ b/app/Mixer.qml @@ -18,81 +18,104 @@ import QtQuick 2.6 import QtQuick.Layouts 1.1 import QtQuick.Controls 2.0 import AGL.Demo.Controls 1.0 -import PaControlModel 1.0 +import Mixer 1.0 ApplicationWindow { - id: root - - Label { - id: title - font.pixelSize: 48 - text: "Mixer" - anchors.horizontalCenter: parent.horizontalCenter - } - - Component { - id: ctldesc - Label { - font.pixelSize: 32 - width: listView.width - wrapMode: Text.WordWrap - property var typeString: {modelType ? "Output" : "Input"} - text: "[" + typeString + " #" + modelCIndex + "]: " + modelDesc - } - } - - Component { - id: empty - Item { - } - } - - ListView { - id: listView - anchors.left: parent.left - anchors.top: title.bottom - anchors.margins: 80 - anchors.fill: parent - model: PaControlModel { objectName: "pacm" } - delegate: ColumnLayout { - width: parent.width - spacing: 40 - Connections { - target: listView.model - onDataChanged: slider.value = volume - } - Loader { - property int modelType: type - property int modelCIndex: cindex - property string modelDesc: desc - sourceComponent: (channel == 0) ? ctldesc : empty - } - RowLayout { - Layout.minimumHeight: 75 - Label { - font.pixelSize: 24 - text: cdesc - Layout.minimumWidth: 150 - } - Label { - font.pixelSize: 24 - text: "0 %" - } - Slider { - id: slider - Layout.fillWidth: true - from: 0 - to: 65536 - stepSize: 256 - snapMode: Slider.SnapOnRelease - onValueChanged: volume = value - Component.onCompleted: value = volume - } - Label { - font.pixelSize: 24 - text: "100 %" - } - } - } - } + // ----- 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 + } + } } +