diff options
author | Scott Murray <scott.murray@konsulko.com> | 2017-02-28 18:55:58 -0500 |
---|---|---|
committer | Scott Murray <scott.murray@konsulko.com> | 2017-03-01 00:09:50 +0000 |
commit | 9f227dc72607106641269560608b0297358adfa8 (patch) | |
tree | 4906277254f1b701f6d0c892f1477c0f56bcc93c /app | |
parent | c2172e13a8209638731e3f921833cc38ada03702 (diff) |
Import latest Chinook code from CES2017 repo
Change-Id: I52a49fa8b3b8ba33157622c7bc78c6bfae793196
Signed-off-by: Scott Murray <scott.murray@konsulko.com>
Diffstat (limited to 'app')
-rw-r--r-- | app/PresetDataObject.cpp | 63 | ||||
-rw-r--r-- | app/PresetDataObject.h | 57 | ||||
-rw-r--r-- | app/Radio.qml | 230 | ||||
-rw-r--r-- | app/app.pri | 12 | ||||
-rw-r--r-- | app/app.pro | 11 | ||||
-rw-r--r-- | app/config.tests/libhomescreen/libhomescreen.cpp | 8 | ||||
-rw-r--r-- | app/config.tests/libhomescreen/libhomescreen.pro | 5 | ||||
-rw-r--r-- | app/images/AGL_MediaPlayer_BackArrow.svg | 56 | ||||
-rw-r--r-- | app/images/AGL_MediaPlayer_ForwardArrow.svg | 56 | ||||
-rw-r--r-- | app/images/AGL_MediaPlayer_Player_Pause.svg | 67 | ||||
-rw-r--r-- | app/images/AGL_MediaPlayer_Player_Play.svg | 67 | ||||
-rw-r--r-- | app/images/FM_Icons_AM.svg | 71 | ||||
-rw-r--r-- | app/images/FM_Icons_FM.svg | 65 | ||||
-rw-r--r-- | app/images/HMI_Radio_Equalizer.svg | 335 | ||||
-rw-r--r-- | app/images/Radio_Active_Icon.svg | 299 | ||||
-rw-r--r-- | app/images/images.qrc | 12 | ||||
-rw-r--r-- | app/main.cpp | 83 | ||||
-rw-r--r-- | app/radio.qrc | 5 |
18 files changed, 1502 insertions, 0 deletions
diff --git a/app/PresetDataObject.cpp b/app/PresetDataObject.cpp new file mode 100644 index 0000000..6e69626 --- /dev/null +++ b/app/PresetDataObject.cpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2016 by Scott Murray <scott.murray@konsulko.com> + * + * 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. + */ + +#include "PresetDataObject.h" + +PresetDataObject::PresetDataObject(QObject *parent) : QObject(parent) +{ +} + +PresetDataObject::PresetDataObject(const QString &title, const quint32 &frequency, const quint32 &band, QObject *parent) + : QObject(parent), m_title(title), m_frequency(frequency), m_band(band) +{ +} + +QString PresetDataObject::title() const +{ + return m_title; +} + +void PresetDataObject::setTitle(const QString &title) +{ + if (title != m_title) { + m_title = title; + emit titleChanged(); + } +} + +quint32 PresetDataObject::frequency() const +{ + return m_frequency; +} + +void PresetDataObject::setFrequency(const quint32 &frequency) { + if (frequency != m_frequency) { + m_frequency = frequency; + emit frequencyChanged(); + } +} + +quint32 PresetDataObject::band() const +{ + return m_band; +} + +void PresetDataObject::setBand(const quint32 &band) { + if (band != m_band) { + m_band = band; + emit bandChanged(); + } +} diff --git a/app/PresetDataObject.h b/app/PresetDataObject.h new file mode 100644 index 0000000..a43b853 --- /dev/null +++ b/app/PresetDataObject.h @@ -0,0 +1,57 @@ +/* + * Copyright (C) 2016 by Scott Murray <scott.murray@konsulko.com> + * + * 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. + */ + +#ifndef PRESETDATAOBJECT_H +#define PRESETDATAOBJECT_H + +#include <QObject> + +class PresetDataObject : public QObject +{ + Q_OBJECT + + Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) + Q_PROPERTY(quint32 frequency READ frequency WRITE setFrequency NOTIFY frequencyChanged) + Q_PROPERTY(quint32 band READ band WRITE setBand NOTIFY bandChanged) + +public: + PresetDataObject(QObject *parent = Q_NULLPTR); + PresetDataObject(const QString &title, const quint32 &frequency, const quint32 &band, QObject *parent = Q_NULLPTR); + + QString title() const; + + void setTitle(const QString &title); + + quint32 frequency() const; + + void setFrequency(const quint32 &frequency); + + quint32 band() const; + + void setBand(const quint32 &band); + +signals: + void titleChanged(); + void frequencyChanged(); + void bandChanged(); + +private: + QString m_title; + quint32 m_frequency; + quint32 m_band; +}; + +#endif // PRESETDATAOBJECT_H diff --git a/app/Radio.qml b/app/Radio.qml new file mode 100644 index 0000000..8bcd56e --- /dev/null +++ b/app/Radio.qml @@ -0,0 +1,230 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * + * 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 QtMultimedia 5.5 +import AGL.Demo.Controls 1.0 + +ApplicationWindow { + id: root + + Radio { + id: radio + property string title + onBandChanged: frequency = minimumFrequency + onStationFound: title = stationId + onFrequencyChanged: { + title = '' + slider.value = frequency + } + + function freq2str(freq) { + if (freq > 5000000) { + return '%1 MHz'.arg((freq / 1000000).toFixed(1)) + } else { + return '%1 kHz'.arg((freq / 1000).toFixed(0)) + } + } + } + + 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.AM : Radio.FM +// 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 + Item { Layout.fillWidth: true } + ImageButton { + offImage: './images/AGL_MediaPlayer_BackArrow.svg' + Timer { + running: parent.pressed + triggeredOnStart: true + interval: 100 + repeat: true + onTriggered: radio.tuneDown() + } + } + ImageButton { + id: play + offImage: './images/AGL_MediaPlayer_Player_Play.svg' + onClicked: radio.start() + states: [ + State { + when: radio.state === Radio.ActiveState + PropertyChanges { + target: play + offImage: './images/AGL_MediaPlayer_Player_Pause.svg' + onClicked: radio.stop() + } + } + ] + } + ImageButton { + offImage: './images/AGL_MediaPlayer_ForwardArrow.svg' + Timer { + running: parent.pressed + triggeredOnStart: true + interval: 100 + repeat: true + onTriggered: radio.tuneUp() + } + } + + Item { Layout.fillWidth: true } + } + } + } + } + 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.FM: + return './images/FM_Icons_FM.svg' + case Radio.AM: + return './images/FM_Icons_AM.svg' + } + return null + } + } + } + } + } + } + } +} diff --git a/app/app.pri b/app/app.pri new file mode 100644 index 0000000..014646f --- /dev/null +++ b/app/app.pri @@ -0,0 +1,12 @@ +TEMPLATE = app + +load(configure) +qtCompileTest(libhomescreen) + +config_libhomescreen { + CONFIG += link_pkgconfig + PKGCONFIG += homescreen + DEFINES += HAVE_LIBHOMESCREEN +} + +DESTDIR = $${OUT_PWD}/../package/root/bin diff --git a/app/app.pro b/app/app.pro new file mode 100644 index 0000000..e0a927e --- /dev/null +++ b/app/app.pro @@ -0,0 +1,11 @@ +TARGET = radio +QT = quickcontrols2 + +HEADERS = PresetDataObject.h +SOURCES = main.cpp PresetDataObject.cpp + +RESOURCES += \ + radio.qrc \ + images/images.qrc + +include(app.pri) diff --git a/app/config.tests/libhomescreen/libhomescreen.cpp b/app/config.tests/libhomescreen/libhomescreen.cpp new file mode 100644 index 0000000..d698b05 --- /dev/null +++ b/app/config.tests/libhomescreen/libhomescreen.cpp @@ -0,0 +1,8 @@ +#include <libhomescreen.hpp> + +int main(int argc,char **argv) +{ + LibHomeScreen libHomeScreen; + return 0; +} + diff --git a/app/config.tests/libhomescreen/libhomescreen.pro b/app/config.tests/libhomescreen/libhomescreen.pro new file mode 100644 index 0000000..eb4e8f3 --- /dev/null +++ b/app/config.tests/libhomescreen/libhomescreen.pro @@ -0,0 +1,5 @@ +SOURCES = libhomescreen.cpp + +CONFIG -= qt +CONFIG += link_pkgconfig +PKGCONFIG += homescreen diff --git a/app/images/AGL_MediaPlayer_BackArrow.svg b/app/images/AGL_MediaPlayer_BackArrow.svg new file mode 100644 index 0000000..c49b519 --- /dev/null +++ b/app/images/AGL_MediaPlayer_BackArrow.svg @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 80 80" + style="enable-background:new 0 0 80 80;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="AGL_MediaPlayer_BackArrow.svg"><metadata + id="metadata18"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs16" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview14" + showgrid="false" + inkscape:zoom="2.95" + inkscape:cx="-116.94915" + inkscape:cy="40" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#66FF99;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="previous_1_"><g + id="g10"><path + class="st0" + d="M68,38.4H18.3c3.4-3.4,11.1-11,11.1-11c0-0.1-1.6-3.2-1.6-3.2L12,40l15.8,15.8c0,0,1.6-3.2,1.6-3.2 c0,0-7.7-7.7-11-11.1H68V38.4z" + id="path12" /></g></g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/AGL_MediaPlayer_ForwardArrow.svg b/app/images/AGL_MediaPlayer_ForwardArrow.svg new file mode 100644 index 0000000..56576ac --- /dev/null +++ b/app/images/AGL_MediaPlayer_ForwardArrow.svg @@ -0,0 +1,56 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 80 80" + style="enable-background:new 0 0 80 80;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="AGL_MediaPlayer_ForwardArrow.svg"><metadata + id="metadata18"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs16" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview14" + showgrid="false" + inkscape:zoom="2.95" + inkscape:cx="-118.98305" + inkscape:cy="40" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#66FF99;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="previous_1_"><g + id="g10"><path + class="st0" + d="M12,38.4h49.7c-3.4-3.4-11.1-11-11.1-11c0-0.1,1.6-3.2,1.6-3.2L68,40L52.2,55.8c0,0-1.6-3.2-1.6-3.2 c0,0,7.7-7.7,11-11.1H12V38.4z" + id="path12" /></g></g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/AGL_MediaPlayer_Player_Pause.svg b/app/images/AGL_MediaPlayer_Player_Pause.svg new file mode 100644 index 0000000..ee55213 --- /dev/null +++ b/app/images/AGL_MediaPlayer_Player_Pause.svg @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 100 100" + style="enable-background:new 0 0 100 100;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="AGL_MediaPlayer_Player_Pause.svg"><metadata + id="metadata23"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs21" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview19" + showgrid="false" + inkscape:zoom="2.36" + inkscape:cx="-133.05085" + inkscape:cy="50" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{opacity:0.851;} + .st1{fill:none;stroke:#66FF99;stroke-width:2;stroke-miterlimit:10;} + .st2{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="button_2_" + class="st0"><g + id="g10"><ellipse + class="st1" + cx="49.3" + cy="49.6" + rx="46" + ry="46" + id="ellipse12" /></g></g><g + id="pause_2_"><g + id="g15"><path + class="st2" + d="M43.1,29.8h-5.6c-1.6,0-2.8,1.2-2.8,2.8v33.2c0,1.5,1.3,2.8,2.8,2.8h5.6c1.6,0,2.8-1.2,2.8-2.8V32.5 C45.9,31,44.6,29.8,43.1,29.8z M60,29.8h-5.6c-1.6,0-2.8,1.2-2.8,2.8v33.2c0,1.5,1.3,2.8,2.8,2.8H60c1.6,0,2.8-1.2,2.8-2.8V32.5 C62.8,31,61.6,29.8,60,29.8z" + id="path17" /></g></g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/AGL_MediaPlayer_Player_Play.svg b/app/images/AGL_MediaPlayer_Player_Play.svg new file mode 100644 index 0000000..c296f8a --- /dev/null +++ b/app/images/AGL_MediaPlayer_Player_Play.svg @@ -0,0 +1,67 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 100 100" + style="enable-background:new 0 0 100 100;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="AGL_MediaPlayer_Player_Play.svg"><metadata + id="metadata23"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs21" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview19" + showgrid="false" + inkscape:zoom="2.36" + inkscape:cx="-159.95763" + inkscape:cy="50" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{opacity:0.851;} + .st1{fill:none;stroke:#66FF99;stroke-width:2;stroke-miterlimit:10;} + .st2{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="button_2_" + class="st0"><g + id="g10"><ellipse + class="st1" + cx="49.3" + cy="49.6" + rx="46" + ry="46" + id="ellipse12" /></g></g><g + id="play_icon_2_"><g + id="g15"><path + class="st2" + d="M65,48L43.3,33.9c-1.3-0.7-2.8-0.6-2.8,1.9v27.7c0,2.3,1.6,2.7,2.8,1.9L65,51.3C65.9,50.4,65.9,48.9,65,48z " + id="path17" /></g></g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/FM_Icons_AM.svg b/app/images/FM_Icons_AM.svg new file mode 100644 index 0000000..ea6e5e1 --- /dev/null +++ b/app/images/FM_Icons_AM.svg @@ -0,0 +1,71 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 120 80" + style="enable-background:new 0 0 120 80;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="FM_Icons_AM.svg"><metadata + id="metadata23"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs21" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview19" + showgrid="false" + inkscape:zoom="2.95" + inkscape:cx="-112.0339" + inkscape:cy="40" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{fill:#999999;} + .st1{font-family:'Roboto-Regular';} + .st2{font-size:23.1521px;} + .st3{letter-spacing:4;} + .st4{fill:#66FF99;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><text + transform="matrix(0.9958 0 0 1 74.5477 46.0002)" + class="st0 st1 st2 st3" + id="text9">FM</text> +<g + id="g11"><text + transform="matrix(0.9958 0 0 1 7.0003 46.0002)" + id="text13"><tspan + x="0" + y="0" + class="st4 st1 st2 st3" + id="tspan15">AM </tspan><tspan + x="53.4" + y="0" + class="st0 st1 st2 st3" + id="tspan17">|</tspan></text> +</g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/FM_Icons_FM.svg b/app/images/FM_Icons_FM.svg new file mode 100644 index 0000000..0f3ae59 --- /dev/null +++ b/app/images/FM_Icons_FM.svg @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 120 80" + style="enable-background:new 0 0 120 80;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="FM_Icons_FM.svg"><metadata + id="metadata21"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs19" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview17" + showgrid="false" + inkscape:zoom="2.95" + inkscape:cx="-92.542373" + inkscape:cy="40" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{fill:#66FF99;} + .st1{font-family:'Roboto-Regular';} + .st2{font-size:23.1521px;} + .st3{letter-spacing:4;} + .st4{fill:#999999;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="g9"><text + transform="matrix(0.9958 0 0 1 74.5477 46.0002)" + class="st0 st1 st2 st3" + id="text11">FM</text> +</g><g + id="g13"><text + transform="matrix(0.9958 0 0 1 7.0003 46.0002)" + class="st4 st1 st2 st3" + id="text15">AM |</text> +</g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/HMI_Radio_Equalizer.svg b/app/images/HMI_Radio_Equalizer.svg new file mode 100644 index 0000000..6959144 --- /dev/null +++ b/app/images/HMI_Radio_Equalizer.svg @@ -0,0 +1,335 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 1080 1000" + style="enable-background:new 0 0 1080 1000;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="HMI_Radio_Equalizer.svg"><metadata + id="metadata115"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs113" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview111" + showgrid="false" + inkscape:zoom="0.236" + inkscape:cx="-1481.1864" + inkscape:cy="500" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{opacity:0.2;clip-path:url(#SVGID_2_);} + .st1{fill:#4DCE9B;} + .st2{opacity:0.2;} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="g9"><g + id="g11"><defs + id="defs13"><rect + id="SVGID_1_" + x="-0.2" + y="77.3" + width="1080.4" + height="458.1" /></defs><clipPath + id="SVGID_2_"><use + xlink:href="#SVGID_1_" + style="overflow:visible;" + id="use17" /></clipPath><g + class="st0" + id="g19" + clip-path="url(#SVGID_2_)"><rect + x="20.6" + y="489.8" + class="st1" + width="15.7" + height="89" + id="rect21" /><rect + x="118.1" + y="236.6" + class="st1" + width="15.7" + height="595.5" + id="rect23" /><rect + x="166.8" + y="281" + class="st1" + width="15.7" + height="506.6" + id="rect25" /><rect + x="215.6" + y="309.1" + class="st1" + width="15.7" + height="450.4" + id="rect27" /><rect + x="264.3" + y="337.6" + class="st1" + width="15.7" + height="393.4" + id="rect29" /><rect + x="313" + y="368.3" + class="st1" + width="15.7" + height="332.1" + id="rect31" /><rect + x="361.8" + y="404.5" + class="st1" + width="15.7" + height="259.6" + id="rect33" /><rect + x="410.5" + y="381.9" + class="st1" + width="15.7" + height="304.8" + id="rect35" /><rect + x="459.3" + y="344.4" + class="st1" + width="15.7" + height="379.9" + id="rect37" /><rect + x="508" + y="267.5" + class="st1" + width="15.7" + height="533.6" + id="rect39" /><rect + x="605.5" + y="253.4" + class="st1" + width="15.7" + height="561.9" + id="rect41" /><rect + x="654.2" + y="309.1" + class="st1" + width="15.7" + height="450.4" + id="rect43" /><rect + x="703" + y="374.7" + class="st1" + width="15.7" + height="319.3" + id="rect45" /><rect + x="751.7" + y="429.3" + class="st1" + width="15.7" + height="210" + id="rect47" /><rect + x="849.2" + y="404.5" + class="st1" + width="15.7" + height="259.6" + id="rect49" /><rect + x="897.9" + y="368.3" + class="st1" + width="15.7" + height="332.1" + id="rect51" /><rect + x="946.7" + y="429.3" + class="st1" + width="15.7" + height="210" + id="rect53" /><rect + x="995.4" + y="488.8" + class="st1" + width="15.7" + height="91" + id="rect55" /><rect + x="1044.1" + y="517.9" + class="st1" + width="15.7" + height="32.9" + id="rect57" /><rect + x="800.4" + y="488.8" + class="st1" + width="15.7" + height="91" + id="rect59" /><rect + x="556.7" + y="145.9" + class="st1" + width="15.7" + height="776.8" + id="rect61" /><rect + x="69.4" + y="404.5" + class="st1" + width="15.7" + height="259.6" + id="rect63" /></g></g><g + class="st2" + id="g65"><rect + x="20.6" + y="489.8" + class="st1" + width="15.7" + height="89" + id="rect67" /><rect + x="118.1" + y="236.6" + class="st1" + width="15.7" + height="595.5" + id="rect69" /><rect + x="166.8" + y="281" + class="st1" + width="15.7" + height="506.6" + id="rect71" /><rect + x="215.6" + y="309.1" + class="st1" + width="15.7" + height="450.4" + id="rect73" /><rect + x="264.3" + y="337.6" + class="st1" + width="15.7" + height="393.4" + id="rect75" /><rect + x="313" + y="368.3" + class="st1" + width="15.7" + height="332.1" + id="rect77" /><rect + x="361.8" + y="404.5" + class="st1" + width="15.7" + height="259.6" + id="rect79" /><rect + x="410.5" + y="381.9" + class="st1" + width="15.7" + height="304.8" + id="rect81" /><rect + x="459.3" + y="344.4" + class="st1" + width="15.7" + height="379.9" + id="rect83" /><rect + x="508" + y="267.5" + class="st1" + width="15.7" + height="533.6" + id="rect85" /><rect + x="605.5" + y="253.4" + class="st1" + width="15.7" + height="561.9" + id="rect87" /><rect + x="654.2" + y="309.1" + class="st1" + width="15.7" + height="450.4" + id="rect89" /><rect + x="703" + y="374.7" + class="st1" + width="15.7" + height="319.3" + id="rect91" /><rect + x="751.7" + y="429.3" + class="st1" + width="15.7" + height="210" + id="rect93" /><rect + x="849.2" + y="404.5" + class="st1" + width="15.7" + height="259.6" + id="rect95" /><rect + x="897.9" + y="368.3" + class="st1" + width="15.7" + height="332.1" + id="rect97" /><rect + x="946.7" + y="429.3" + class="st1" + width="15.7" + height="210" + id="rect99" /><rect + x="995.4" + y="488.8" + class="st1" + width="15.7" + height="91" + id="rect101" /><rect + x="1044.1" + y="517.9" + class="st1" + width="15.7" + height="32.9" + id="rect103" /><rect + x="800.4" + y="488.8" + class="st1" + width="15.7" + height="91" + id="rect105" /><rect + x="556.7" + y="145.9" + class="st1" + width="15.7" + height="776.8" + id="rect107" /><rect + x="69.4" + y="404.5" + class="st1" + width="15.7" + height="259.6" + id="rect109" /></g></g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/Radio_Active_Icon.svg b/app/images/Radio_Active_Icon.svg new file mode 100644 index 0000000..383f2cd --- /dev/null +++ b/app/images/Radio_Active_Icon.svg @@ -0,0 +1,299 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<!-- Generator: Adobe Illustrator 21.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) --> + +<svg + xmlns:i="&ns_ai;" + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + version="1.1" + id="Layer_1" + x="0px" + y="0px" + viewBox="0 0 80 80" + style="enable-background:new 0 0 80 80;" + xml:space="preserve" + inkscape:version="0.91 r13725" + sodipodi:docname="Radio_Active_Icon.svg"><metadata + id="metadata132"><rdf:RDF><cc:Work + rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /></cc:Work></rdf:RDF></metadata><defs + id="defs130" /><sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="2560" + inkscape:window-height="1464" + id="namedview128" + showgrid="false" + inkscape:zoom="2.95" + inkscape:cx="-157.79661" + inkscape:cy="40" + inkscape:window-x="0" + inkscape:window-y="0" + inkscape:window-maximized="1" + inkscape:current-layer="Layer_1" /><style + type="text/css" + id="style3"> + .st0{fill:url(#SVGID_1_);} + .st1{fill:url(#SVGID_2_);} + .st2{fill:url(#SVGID_3_);} + .st3{fill:url(#SVGID_4_);} + .st4{fill:url(#SVGID_5_);} + .st5{fill:url(#SVGID_6_);} + .st6{fill:url(#SVGID_7_);} + .st7{fill:url(#SVGID_8_);} + .st8{fill:url(#SVGID_9_);} + .st9{fill:url(#SVGID_10_);} + .st10{fill:url(#SVGID_11_);} + .st11{fill:url(#SVGID_12_);} + .st12{fill:url(#SVGID_13_);} +</style><switch + id="switch5"><g + i:extraneous="self" + id="g7"><g + id="g9"><linearGradient + id="SVGID_1_" + gradientUnits="userSpaceOnUse" + x1="3.9276" + y1="95.1698" + x2="82.4232" + y2="-24.8823"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop12" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop14" /></linearGradient><path + class="st0" + d="M40,80c-0.1,0-0.1,0-0.2,0C17.7,79.9-0.1,61.8,0,39.8C0.1,17.8,18,0,40,0c0.1,0,0.1,0,0.2,0 C62.3,0.1,80.1,18.2,80,40.2l0,0C79.9,62.2,62,80,40,80z M40,1.4C18.8,1.4,1.5,18.6,1.4,39.8C1.3,61.1,18.5,78.5,39.8,78.6 c0.1,0,0.1,0,0.2,0c21.2,0,38.5-17.2,38.6-38.4C78.7,18.9,61.5,1.5,40.2,1.4C40.1,1.4,40.1,1.4,40,1.4z" + id="path16" /><g + id="g18"><g + id="g20"><linearGradient + id="SVGID_2_" + gradientUnits="userSpaceOnUse" + x1="0.6657" + y1="93.037" + x2="79.1612" + y2="-27.015"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop23" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop25" /></linearGradient><path + class="st1" + d="M43.8,51.7l-0.5-1.6c3.7-1.2,6.1-4.4,6.1-8V23.5c0-4.7-4.2-8.5-9.3-8.5s-9.3,3.8-9.3,8.5v18.6 c0,3.5,2.4,6.7,6.1,8l-0.5,1.6c-4.3-1.5-7.2-5.3-7.2-9.6V23.5c0-5.6,4.9-10.2,11-10.2s11,4.6,11,10.2v18.6 C51,46.4,48.1,50.3,43.8,51.7z" + id="path27" /></g><g + id="g29"><linearGradient + id="SVGID_3_" + gradientUnits="userSpaceOnUse" + x1="6.4911" + y1="96.8461" + x2="84.9869" + y2="-23.2062"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop32" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop34" /></linearGradient><path + class="st2" + d="M40,56.6c-8.4,0-15.3-5.6-15.3-12.5h1.7c0,6,6.1,10.9,13.6,10.9S53.6,50,53.6,44h1.7 C55.3,50.9,48.4,56.6,40,56.6z" + id="path36" /></g><g + id="g38"><linearGradient + id="SVGID_4_" + gradientUnits="userSpaceOnUse" + x1="13.5651" + y1="101.4712" + x2="92.0607" + y2="-18.5808"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop41" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop43" /></linearGradient><rect + x="39.2" + y="59.2" + class="st3" + width="1.7" + height="3.7" + id="rect45" /></g><g + id="g47"><linearGradient + id="SVGID_5_" + gradientUnits="userSpaceOnUse" + x1="-6.0323" + y1="88.6578" + x2="72.4634" + y2="-31.3946"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop50" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop52" /></linearGradient><rect + x="29.9" + y="27.8" + class="st4" + width="6.6" + height="1.7" + id="rect54" /></g><g + id="g56"><linearGradient + id="SVGID_6_" + gradientUnits="userSpaceOnUse" + x1="-8.3573" + y1="87.1376" + x2="70.1385" + y2="-32.9148"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop59" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop61" /></linearGradient><rect + x="29.9" + y="22.7" + class="st5" + width="6.6" + height="1.7" + id="rect63" /></g><g + id="g65"><linearGradient + id="SVGID_7_" + gradientUnits="userSpaceOnUse" + x1="-3.6831" + y1="90.1938" + x2="74.8127" + y2="-29.8586"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop68" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop70" /></linearGradient><rect + x="29.9" + y="32.9" + class="st6" + width="6.6" + height="1.7" + id="rect72" /></g><g + id="g74"><linearGradient + id="SVGID_8_" + gradientUnits="userSpaceOnUse" + x1="-1.3579" + y1="91.7141" + x2="77.1379" + y2="-28.3383"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop77" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop79" /></linearGradient><rect + x="29.9" + y="38" + class="st7" + width="6.6" + height="1.7" + id="rect81" /></g><g + id="g83"><linearGradient + id="SVGID_9_" + gradientUnits="userSpaceOnUse" + x1="3.4647" + y1="94.8674" + x2="81.9605" + y2="-25.185"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop86" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop88" /></linearGradient><rect + x="43.5" + y="27.8" + class="st8" + width="6.6" + height="1.7" + id="rect90" /></g><g + id="g92"><linearGradient + id="SVGID_10_" + gradientUnits="userSpaceOnUse" + x1="1.1397" + y1="93.3472" + x2="79.6355" + y2="-26.7052"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop95" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop97" /></linearGradient><rect + x="43.5" + y="22.7" + class="st9" + width="6.6" + height="1.7" + id="rect99" /></g><g + id="g101"><linearGradient + id="SVGID_11_" + gradientUnits="userSpaceOnUse" + x1="5.8139" + y1="96.4034" + x2="84.3097" + y2="-23.649"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop104" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop106" /></linearGradient><rect + x="43.5" + y="32.9" + class="st10" + width="6.6" + height="1.7" + id="rect108" /></g><g + id="g110"><linearGradient + id="SVGID_12_" + gradientUnits="userSpaceOnUse" + x1="8.1391" + y1="97.9237" + x2="86.6349" + y2="-22.1287"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop113" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop115" /></linearGradient><rect + x="43.5" + y="38" + class="st11" + width="6.6" + height="1.7" + id="rect117" /></g><g + id="g119"><linearGradient + id="SVGID_13_" + gradientUnits="userSpaceOnUse" + x1="15.826" + y1="102.9496" + x2="94.3218" + y2="-17.1028"><stop + offset="0" + style="stop-color:#59FF7F" + id="stop122" /><stop + offset="1" + style="stop-color:#6BFBFF" + id="stop124" /></linearGradient><path + class="st12" + d="M50.2,66.7h-1.7c0-2.1-1.1-2.5-4.1-2.5h-8.8c-3,0-4.1,0.4-4.1,2.5h-1.7c0-4.2,3.6-4.2,5.8-4.2h8.8 C46.6,62.5,50.2,62.5,50.2,66.7z" + id="path126" /></g></g></g></g></switch></svg>
\ No newline at end of file diff --git a/app/images/images.qrc b/app/images/images.qrc new file mode 100644 index 0000000..9161221 --- /dev/null +++ b/app/images/images.qrc @@ -0,0 +1,12 @@ +<RCC> + <qresource prefix="/images"> + <file>AGL_MediaPlayer_BackArrow.svg</file> + <file>AGL_MediaPlayer_ForwardArrow.svg</file> + <file>AGL_MediaPlayer_Player_Pause.svg</file> + <file>AGL_MediaPlayer_Player_Play.svg</file> + <file>FM_Icons_AM.svg</file> + <file>FM_Icons_FM.svg</file> + <file>HMI_Radio_Equalizer.svg</file> + <file>Radio_Active_Icon.svg</file> + </qresource> +</RCC> diff --git a/app/main.cpp b/app/main.cpp new file mode 100644 index 0000000..9d2785e --- /dev/null +++ b/app/main.cpp @@ -0,0 +1,83 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (C) 2016 Scott Murray <scott.murray@konsulko.com> + * + * 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. + */ + +#include <QtCore/QDebug> +#include <QtCore/QSettings> +#include <QtGui/QGuiApplication> +#include <QtQml/QQmlApplicationEngine> +#include <QtQml/QQmlContext> +#include <QtQuickControls2/QQuickStyle> +#include <QtMultimedia/QRadioTunerControl> +#include <stdlib.h> +#include "PresetDataObject.h" + + +#ifdef HAVE_LIBHOMESCREEN +#include <libhomescreen.hpp> +#endif + +int main(int argc, char *argv[]) +{ +#ifdef HAVE_LIBHOMESCREEN + LibHomeScreen libHomeScreen; + + if (!libHomeScreen.renderAppToAreaAllowed(0, 1)) { + qWarning() << "renderAppToAreaAllowed is denied"; + return -1; + } +#endif + + QGuiApplication app(argc, argv); + + QQuickStyle::setStyle("AGL"); + + // Read presets from configuration file + // + // If HOME is set, use $HOME/app-data/radio/presets.conf, else fall back + // to the QSettings default locations with organization "AGL" and a + // file name of radio-presets.conf. See: + // + // http://doc.qt.io/qt-5/qsettings.html#platform-specific-notes + // + // for details on the locations and their order of priority. + // + QSettings *pSettings = NULL; + char *p = getenv("HOME"); + if(p) { + QString confPath = p; + confPath.append("/app-data/radio/presets.conf"); + pSettings = new QSettings(confPath, QSettings::NativeFormat); + } else { + pSettings = new QSettings("AGL", "radio-presets"); + } + QList<QObject*> presetDataList; + int size = pSettings->beginReadArray("fmPresets"); + for (int i = 0; i < size; ++i) { + pSettings->setArrayIndex(i); + presetDataList.append(new PresetDataObject(pSettings->value("title").toString(), + pSettings->value("frequency").toInt(), + QRadioTuner::FM)); + } + pSettings->endArray(); + + QQmlApplicationEngine engine; + QQmlContext *context = engine.rootContext(); + context->setContextProperty("presetModel", QVariant::fromValue(presetDataList)); + engine.load(QUrl(QStringLiteral("qrc:/Radio.qml"))); + + return app.exec(); +} diff --git a/app/radio.qrc b/app/radio.qrc new file mode 100644 index 0000000..347894c --- /dev/null +++ b/app/radio.qrc @@ -0,0 +1,5 @@ +<RCC> + <qresource prefix="/"> + <file>Radio.qml</file> + </qresource> +</RCC> |