Add sound manager initial source code
[staging/soundmanager.git] / sample / radio_qml / app / Radio.qml
diff --git a/sample/radio_qml/app/Radio.qml b/sample/radio_qml/app/Radio.qml
new file mode 100644 (file)
index 0000000..1b68b94
--- /dev/null
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2016 The Qt Company Ltd.
+ * Copyright (C) 2017 Konsulko Group
+ * Copyright (c) 2017 TOYOTA MOTOR CORPORATION
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import QtQuick 2.6
+import QtQuick.Layouts 1.1
+import QtQuick.Controls 2.0
+import AGL.Demo.Controls 1.0
+import 'api' as API
+
+ApplicationWindow {
+    id: root
+
+    API.Binding {
+        id: radio
+
+        property string title
+
+        onBandChanged: frequency = minimumFrequency
+        onStationFound: title = stationId
+        onFrequencyChanged: {
+            title = ''
+            slider.value = frequency
+        }
+    }
+
+    API.BindingSoundManager {
+        id: soundmgr 
+        onConnected: {
+            radio.start()
+        }
+        onDisconnected: {
+            radio.stop()
+        }
+        onPaused: {
+            radio.stop()
+        }
+    }
+
+    ColumnLayout {
+        anchors.fill: parent
+        Item {
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+            Layout.preferredHeight: 3
+            clip: true
+            Image {
+                anchors.left: parent.left
+                anchors.right: parent.right
+                anchors.bottom: parent.bottom
+                fillMode: Image.PreserveAspectFit
+                source: './images/HMI_Radio_Equalizer.svg'
+            }
+            Item {
+                anchors.left: parent.left
+                anchors.right: parent.right
+                anchors.bottom: parent.bottom
+                height :307
+                Rectangle {
+                    anchors.fill: parent
+                    color: 'black'
+                    opacity: 0.75
+                }
+
+                ColumnLayout {
+                    anchors.fill: parent
+                    anchors.margins: root.width * 0.02
+                    Item {
+                        Layout.fillWidth: true
+                        Layout.fillHeight: true
+                        Row {
+                            spacing: 20
+                            Image {
+                                source: './images/FM_Icons_FM.svg'
+                            }
+//                            ToggleButton {
+//                                offImage: './images/FM_Icons_FM.svg'
+//                                onImage: './images/FM_Icons_AM.svg'
+//                                onCheckedChanged: {
+//                                    radio.band = checked ? radio.amBand : radio.fmBand
+//                                    radio.frequency = radio.minimumFrequency
+//                                }
+//                            }
+                        }
+                        ColumnLayout {
+                            anchors.fill: parent
+                            Label {
+                                id: label
+                                Layout.alignment: Layout.Center
+                                text: radio.freq2str(radio.frequency)
+                                horizontalAlignment: Label.AlignHCenter
+                                verticalAlignment: Label.AlignVCenter
+                            }
+                            Label {
+                                id: artist
+                                Layout.alignment: Layout.Center
+                                text: radio.title
+                                horizontalAlignment: Label.AlignHCenter
+                                verticalAlignment: Label.AlignVCenter
+                                font.pixelSize: label.font.pixelSize * 0.6
+                            }
+                        }
+                    }
+                    Slider {
+                        id: slider
+                        Layout.fillWidth: true
+                        from: radio.minimumFrequency
+                        to: radio.maximumFrequency
+                        stepSize: radio.frequencyStep
+                        snapMode: Slider.SnapOnRelease
+                        onValueChanged: radio.frequency = value
+                        Label {
+                            anchors.left: parent.left
+                            anchors.bottom: parent.top
+                            font.pixelSize: 32
+                            text: radio.freq2str(radio.minimumFrequency)
+                        }
+                        Label {
+                            anchors.right: parent.right
+                            anchors.bottom: parent.top
+                            font.pixelSize: 32
+                            text: radio.freq2str(radio.maximumFrequency)
+                        }
+                    }
+                    RowLayout {
+                        Layout.fillHeight: true
+
+                        Label {
+                            text: 'TUNE'
+                        }
+
+                        ImageButton {
+                            offImage: './images/AGL_MediaPlayer_BackArrow.svg'
+                            Timer {
+                                running: parent.pressed
+                                triggeredOnStart: true
+                                interval: 100
+                                repeat: true
+                                onTriggered: radio.tuneDown()
+                            }
+                        }
+
+                        ImageButton {
+                            offImage: './images/AGL_MediaPlayer_ForwardArrow.svg'
+                            Timer {
+                                running: parent.pressed
+                                triggeredOnStart: true
+                                interval: 100
+                                repeat: true
+                                onTriggered: radio.tuneUp()
+                            }
+                        }
+
+                        Item { Layout.fillWidth: true }
+
+                        ImageButton {
+                            id: play
+                            offImage: './images/AGL_MediaPlayer_Player_Play.svg'
+                            onClicked: {
+                                console.log("connect")
+                                soundmgr.connect()
+                                //radio.start()
+                            }
+                            states: [
+                                State {
+                                    when: radio.state === radio.activeState
+                                    PropertyChanges {
+                                        target: play
+                                        offImage: './images/AGL_MediaPlayer_Player_Pause.svg'
+                                        onClicked: soundmgr.disconnect()//radio.stop()
+                                    }
+                                }
+                            ]
+                        }
+
+                        Item { Layout.fillWidth: true }
+
+                        Label {
+                            //Layout.fillWidth: true
+                            text: 'SCAN'
+                        }
+
+                        ImageButton {
+                            offImage: './images/AGL_MediaPlayer_BackArrow.svg'
+                            Timer {
+                                running: parent.pressed
+                                triggeredOnStart: true
+                                interval: 100
+                                repeat: true
+                                onTriggered: radio.scanDown()
+                            }
+                        }
+
+                        ImageButton {
+                            offImage: './images/AGL_MediaPlayer_ForwardArrow.svg'
+                            Timer {
+                                running: parent.pressed
+                                triggeredOnStart: true
+                                interval: 100
+                                repeat: true
+                                onTriggered: radio.scanUp()
+                            }
+                        }
+
+                    }
+                }
+            }
+        }
+        Item {
+            Layout.fillWidth: true
+            Layout.fillHeight: true
+            Layout.preferredHeight: 2
+            ListView {
+                anchors.fill: parent
+                anchors.leftMargin: 50
+                anchors.rightMargin: 50
+                clip: true
+                header: Label { text: 'PRESETS'; opacity: 0.5 }
+                model: presetModel
+
+                delegate: MouseArea {
+                    width: ListView.view.width
+                    height: ListView.view.height / 4
+
+                    onClicked: {
+                        radio.band = model.modelData.band
+                        radio.frequency = model.modelData.frequency
+                        radio.title = model.modelData.title
+                    }
+
+                    RowLayout {
+                        anchors.fill: parent
+                        Image {
+                            source: './images/Radio_Active_Icon.svg'
+                        }
+                        ColumnLayout {
+                            Layout.fillWidth: true
+                            Label {
+                                Layout.fillWidth: true
+                                text: model.title
+                            }
+                            Label {
+                                Layout.fillWidth: true
+                                text: radio.freq2str(model.frequency)
+                                color: '#59FF7F'
+                                font.pixelSize: 32
+                            }
+                        }
+                        Image {
+                            source: {
+                                switch (model.modelData.band) {
+                                case radio.fmBand:
+                                    return './images/FM_Icons_FM.svg'
+                                case radio.amBand:
+                                    return './images/FM_Icons_AM.svg'
+                                }
+                                return null
+                            }
+                        }
+                    }
+                }
+            }
+        }
+    }
+}