SampleHomeScreenInterfaceApp \
SampleNavigationApp \
SampleMediaApp \
- sample-qml \
- HomeScreenNG
+ sample-qml
HomeScreen.depends = interfaces
HomeScreenSimulator.depends = interfaces
InputEventManager.depends = interfaces
SampleAppTimeDate.depends = interfaces
WindowManager.depends = interfaces
-HomeScreenNG.depends = interfaces
SampleHomeScreenInterfaceApp.depends = libhomescreen
+++ /dev/null
-TEMPLATE = app
-QT = quick dbus
-
-include(../interfaces/interfaces.pri)
-
-HEADERS += \
- statusbarmodel.h \
- statusbarserver.h \
- applicationlauncher.h
-
-SOURCES += main.cpp \
- statusbarmodel.cpp \
- statusbarserver.cpp \
- applicationlauncher.cpp
-
-RESOURCES += \
- qml/images/MediaPlayer/mediaplayer.qrc \
- qml/images/MediaMusic/mediamusic.qrc \
- qml/images/Weather/weather.qrc \
- qml/images/Shortcut/shortcut.qrc \
- qml/images/Status/status.qrc \
- qml/images/images.qrc \
- qml/qml.qrc
-
-# The following define makes your compiler emit warnings if you use
-# any feature of Qt which as been marked deprecated (the exact warnings
-# depend on your compiler). Please consult the documentation of the
-# deprecated API in order to know how to port your code away from it.
-DEFINES += QT_DEPRECATED_WARNINGS
-
-target.path = /opt/$${TARGET}/bin
-INSTALLS += target
-
+++ /dev/null
-#include "applicationlauncher.h"
-
-#include <QtCore/QDebug>
-
-ApplicationLauncher::ApplicationLauncher(QObject *parent)
- : QObject(parent)
-{
-}
-
-void ApplicationLauncher::launch(const QString &application)
-{
- qDebug() << "launch" << application;
-}
+++ /dev/null
-#ifndef APPLICATIONLAUNCHER_H
-#define APPLICATIONLAUNCHER_H
-
-#include <QtCore/QObject>
-
-class ApplicationLauncher : public QObject
-{
- Q_OBJECT
-public:
- explicit ApplicationLauncher(QObject *parent = nullptr);
-
-public slots:
- void launch(const QString &application);
-};
-
-#endif // APPLICATIONLAUNCHER_H
+++ /dev/null
-#include <QtGui/QGuiApplication>
-#include <QtGui/QWindow>
-#include <QtQml/QQmlApplicationEngine>
-#include <QtQml/qqml.h>
-#include <QtCore/QDebug>
-
-#include "applicationlauncher.h"
-#include "statusbarmodel.h"
-
-int main(int argc, char *argv[])
-{
- QCoreApplication::setOrganizationDomain(QStringLiteral("automotivelinux.org"));
- QCoreApplication::setOrganizationName(QStringLiteral("AutomotiveGradeLinux"));
- QCoreApplication::setApplicationName(QStringLiteral("HomeScreen"));
- QCoreApplication::setApplicationVersion(QStringLiteral("0.0.1"));
-
- QGuiApplication app(argc, argv);
-
- qmlRegisterType<ApplicationLauncher>("HomeScreen", 1, 0, "ApplicationLauncher");
- qmlRegisterType<StatusBarModel>("HomeScreen", 1, 0, "StatusBarModel");
-
- QQmlApplicationEngine engine;
- engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
-
- return app.exec();
-}
+++ /dev/null
-import QtQuick 2.7
-import QtQuick.Controls 2.0
-
-StackView {
- id: root
- width: 1080
- height: 215
-
- initialItem: blank
-
- Component {
- id: blank
- MediaAreaBlank {
- MouseArea {
- anchors.fill: parent
- onClicked: root.push(mouse.x < 540 ? music : radio)
- }
- }
- }
-
- Component {
- id: music
- MediaAreaMusic {
- MouseArea {
- anchors.fill: parent
- onClicked: root.pop()
- }
- }
- }
-
- Component {
- id: radio
- MediaAreaRadio {
- MouseArea {
- anchors.fill: parent
- onClicked: root.pop()
- }
- }
- }
-}
+++ /dev/null
-import QtQuick 2.7
-
-Image {
- width: 1080
- height: 215
- source: './images/Utility_Logo_Background-01.png'
-
- Image {
- anchors.centerIn: parent
- source: './images/Utility_Logo_Colour-01.png'
- }
-}
+++ /dev/null
-import QtQuick 2.6
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.0
-
-Image {
- width: 1080
- height: 215
- source: './images/Utility_Music_Background-01.png'
-
- ColumnLayout {
- anchors.fill: parent
- spacing: 1
- RowLayout {
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredHeight: 107
- spacing: 10
- Image {
- source: './images/MediaMusic/AlbumArtwork.png'
- width: 105.298
- height: 110.179
- fillMode: Image.PreserveAspectFit
- }
- Label {
- text: 'Come Together - The Beatles'
- font.family: 'Roboto'
- font.pixelSize: 32
- color: 'white'
- }
- }
-
- RowLayout {
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredHeight: 107
- Image {
- source: './images/MediaPlayer/AGL_MediaPlayer_BackArrow.png'
- }
- Image {
- source: './images/MediaPlayer/AGL_MediaPlayer_Player_Pause.png'
- }
- Image {
- source: './images/MediaPlayer/AGL_MediaPlayer_ForwardArrow.png'
- }
-
- ProgressBar {
- Layout.fillWidth: true
- Layout.preferredWidth: 2
- }
-
- Label {
- text: '2:12/4:19'
- font.family: 'Roboto'
- font.pixelSize: 20
- }
- Image {
- source: './images/MediaPlayer/AGL_MediaPlayer_Shuffle_Active.png'
- }
- Image {
- source: './images/MediaPlayer/AGL_MediaPlayer_Shuffle_Active.png'
- }
- ProgressBar {
- Layout.fillWidth: true
- Layout.preferredWidth: 1
- }
- }
- }
-}
+++ /dev/null
-import QtQuick 2.6
-
-Image {
- width: 1080
- height: 215
- source: './images/Utility_Radio_Background-01.png'
-}
+++ /dev/null
-import QtQuick 2.7
-import QtQuick.Layouts 1.1
-import HomeScreen 1.0
-
-Item {
- id: root
- width: 785
- height: 218
-
- ApplicationLauncher {
- id: launcher
- }
-
- ListModel {
- id: applicationModel
- ListElement {
- name: 'Home'
- application: 'launcher'
- }
- ListElement {
- name: 'Multimedia'
- application: 'musicplayer'
- }
- ListElement {
- name: 'HVAC'
- application: 'hvac'
- }
- ListElement {
- name: 'Navigation'
- application: 'navigation'
- }
- }
-
- property int currentIndex: -1 // TODO: to be moved to whereever right
-
- RowLayout {
- anchors.fill: parent
- spacing: 2
- Repeater {
- model: applicationModel
- delegate: ShortcutIcon {
- Layout.fillWidth: true
- Layout.fillHeight: true
- name: model.name
- active: model.index === root.currentIndex
- onClicked: {
- root.currentIndex = active ? -1 : model.index
- launcher.launch(model.application)
- }
- }
- }
- }
-}
+++ /dev/null
-import QtQuick 2.6
-
-MouseArea {
- id: root
- width: 195
- height: 216.8
- property string name: 'Home'
- property bool active: false
- Image {
- id: icon
- anchors.fill: parent
- source: './images/Shortcut/HMI_Shortcut_%1-01.png'.arg(root.name)
- }
- Image {
- anchors.fill: parent
- source: './images/Shortcut/HMI_Shortcut_%1_Active-01.png'.arg(root.name)
- opacity: 1.0 - icon.opacity
- }
- states: [
- State {
- when: root.active
- PropertyChanges {
- target: icon
- opacity: 0.0
- }
- }
- ]
-
- transitions: [
- Transition {
- NumberAnimation {
- properties: 'opacity'
- easing.type: Easing.OutExpo
- }
- }
- ]
-}
+++ /dev/null
-import QtQuick 2.7
-import QtQuick.Layouts 1.1
-import QtQuick.Controls 2.0
-import HomeScreen 1.0
-
-Item {
- id: root
- width: 295
- height: 218
-
- property date now: new Date
- Timer {
- interval: 100; running: true; repeat: true;
- onTriggered: root.now = new Date
- }
-
- RowLayout {
- anchors.fill: parent
- spacing: 0
- Item {
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredWidth: 295 - 76
- ColumnLayout {
- anchors.fill: parent
- anchors.margins: 40
- spacing: 0
- Label {
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: Qt.formatDate(now, 'dddd').toUpperCase()
- font.family: 'Roboto'
- font.pixelSize: 13
- color: 'white'
- verticalAlignment: Text.AlignVCenter
-// Rectangle {
-// anchors.fill: parent
-// anchors.margins: 5
-// color: 'red'
-// border.color: 'blue'
-// border.width: 1
-// z: -1
-// }
- }
- Label {
- Layout.fillWidth: true
- Layout.fillHeight: true
- text: Qt.formatTime(now, 'h:mm ap').toUpperCase()
- font.family: 'Roboto'
- font.pixelSize: 40
- color: 'white'
- horizontalAlignment: Text.AlignHCenter
- verticalAlignment: Text.AlignVCenter
- }
- RowLayout {
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredHeight: 20
- Image {
- source: './images/Weather/WeatherIcons_Rain-01.png'
- }
- Label {
- text: '64°F'
- color: 'white'
- font.family: 'Helvetica'
- font.pixelSize: 32
- }
- }
- }
- }
- ColumnLayout {
- id: icons
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredWidth: 76
- spacing: -10
- Repeater {
- model: StatusBarModel {}
- delegate: Image {
- source: model.modelData
- fillMode: Image.PreserveAspectFit
- }
- }
- }
- }
-}
+++ /dev/null
-import QtQuick 2.7
-import QtQuick.Layouts 1.1
-
-Image {
- width: 1920
- height: 218
- source: './images/TopSection_NoText_NoIcons-01.png'
- fillMode: Image.PreserveAspectCrop
-
- RowLayout {
- anchors.fill: parent
- spacing: 0
- ShortcutArea {
- id: shortcutArea
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredWidth: 785
- }
- StatusArea {
- id: statusArea
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredWidth: 295
- }
- }
-}
+++ /dev/null
-<RCC>
- <qresource prefix="/images/MediaMusic">
- <file>AlbumArtwork.png</file>
- <file>BackArrow.png</file>
- <file>ForwardArrow.png</file>
- <file>ShuffleIcon.png</file>
- <file>Volume_Loud.png</file>
- <file>Volume_Medium.png</file>
- <file>Volume_Off.png</file>
- </qresource>
-</RCC>
+++ /dev/null
-<RCC>
- <qresource prefix="/images/MediaPlayer">
- <file>AGL_MediaPlayer_AlbumArtwork.png</file>
- <file>AGL_MediaPlayer_BackArrow.png</file>
- <file>AGL_MediaPlayer_Bluetooth_Active.png</file>
- <file>AGL_MediaPlayer_Bluetooth_Inactive.png</file>
- <file>AGL_MediaPlayer_CD_Active.png</file>
- <file>AGL_MediaPlayer_CD_Inactive.png</file>
- <file>AGL_MediaPlayer_DividingLine.png</file>
- <file>AGL_MediaPlayer_ForwardArrow.png</file>
- <file>AGL_MediaPlayer_Loop_Active.png</file>
- <file>AGL_MediaPlayer_Loop_Inactive.png</file>
- <file>AGL_MediaPlayer_Player_Pause.png</file>
- <file>AGL_MediaPlayer_Player_Play.png</file>
- <file>AGL_MediaPlayer_Playlist_Active.png</file>
- <file>AGL_MediaPlayer_Playlist_Inactive.png</file>
- <file>AGL_MediaPlayer_PlaylistToggle_Active.png</file>
- <file>AGL_MediaPlayer_PlaylistToggle_Inactive.png</file>
- <file>AGL_MediaPlayer_Radio_Active.png</file>
- <file>AGL_MediaPlayer_Radio_Inactive.png</file>
- <file>AGL_MediaPlayer_Shuffle_Active.png</file>
- <file>AGL_MediaPlayer_Shuffle_Inactive.png</file>
- <file>Albums_Active.png</file>
- <file>Albums_Inactive.png</file>
- <file>DividingLine.png</file>
- <file>GreenLine.png</file>
- <file>Music_Active.png</file>
- <file>Music_Inactive.png</file>
- <file>Podcasts_Active.png</file>
- <file>Podcasts_Inactive.png</file>
- <file>Popup_Highlight.png</file>
- <file>Popup_PauseIcon.png</file>
- <file>Popup_PlayIcon.png</file>
- <file>Popup_VerticalLine.png</file>
- <file>X.png</file>
- </qresource>
-</RCC>
+++ /dev/null
-<RCC>
- <qresource prefix="/images/Shortcut">
- <file>HMI_Shortcut_Home_Active-01.png</file>
- <file>HMI_Shortcut_Home-01.png</file>
- <file>HMI_Shortcut_HVAC_Active-01.png</file>
- <file>HMI_Shortcut_HVAC-01.png</file>
- <file>HMI_Shortcut_Multimedia_Active-01.png</file>
- <file>HMI_Shortcut_Multimedia-01.png</file>
- <file>HMI_Shortcut_Navigation_Active-01.png</file>
- <file>HMI_Shortcut_Navigation-01.png</file>
- </qresource>
-</RCC>
+++ /dev/null
-<RCC>
- <qresource prefix="/images/Status">
- <file>HMI_Status_Wifi_NoBars-01.png</file>
- <file>HMI_Status_Bluetooth_Inactive-01.png</file>
- <file>HMI_Status_Bluetooth_On-01.png</file>
- <file>HMI_Status_Signal_1Bars-01.png</file>
- <file>HMI_Status_Signal_2Bars-01.png</file>
- <file>HMI_Status_Signal_3Bars-01.png</file>
- <file>HMI_Status_Signal_4Bars-01.png</file>
- <file>HMI_Status_Signal_Full-01.png</file>
- <file>HMI_Status_Signal_NoBars-01.png</file>
- <file>HMI_Status_Wifi_1Bar-01.png</file>
- <file>HMI_Status_Wifi_2Bars-01.png</file>
- <file>HMI_Status_Wifi_3Bars-01.png</file>
- <file>HMI_Status_Wifi_Full-01.png</file>
- </qresource>
-</RCC>
+++ /dev/null
-<RCC>
- <qresource prefix="/images/Weather">
- <file>WeatherIcons_ALL-01.png</file>
- <file>WeatherIcons_Cloudy-01.png</file>
- <file>WeatherIcons_Moon-01.png</file>
- <file>WeatherIcons_PartiallyCloudy-01.png</file>
- <file>WeatherIcons_Rain-01.png</file>
- <file>WeatherIcons_Snow-01.png</file>
- <file>WeatherIcons_Sun-01.png</file>
- <file>WeatherIcons_Thunderstorm-01.png</file>
- </qresource>
-</RCC>
+++ /dev/null
-<RCC>
- <qresource prefix="/images">
- <file>TopSection_NoText_NoIcons-01.png</file>
- <file>Utility_Logo_Background-01.png</file>
- <file>Utility_Logo_Colour-01.png</file>
- <file>Utility_Music_Background-01.png</file>
- <file>Utility_Radio_Background-01.png</file>
- <file>AGL_HMI_Background_NoCar-01.png</file>
- </qresource>
-</RCC>
+++ /dev/null
-import QtQuick 2.7
-import QtQuick.Window 2.2
-import QtQuick.Layouts 1.1
-
-Window {
- visible: true
- flags: Qt.FramelessWindowHint
- width: container.width * container.scale
- height: container.height * container.scale
- title: 'HomeScreen'
-
- Image {
- id: container
- anchors.centerIn: parent
- width: 1080
- height: 1920
- scale: 0.7
- source: './images/AGL_HMI_Background_NoCar-01.png'
-
- ColumnLayout {
- anchors.fill: parent
- spacing: 0
- TopArea {
- id: topArea
- Layout.fillWidth: true
- Layout.preferredHeight: 218
- }
-
- Item {
- id: applicationArea
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredHeight: 1920 - 218 - 215
- }
-
- MediaArea {
- id: mediaArea
- Layout.fillWidth: true
- Layout.fillHeight: true
- Layout.preferredHeight: 215
- }
- }
- }
-}
+++ /dev/null
-<RCC>
- <qresource prefix="/">
- <file>main.qml</file>
- <file>MediaArea.qml</file>
- <file>MediaAreaBlank.qml</file>
- <file>MediaAreaMusic.qml</file>
- <file>MediaAreaRadio.qml</file>
- <file>ShortcutArea.qml</file>
- <file>ShortcutIcon.qml</file>
- <file>StatusArea.qml</file>
- <file>TopArea.qml</file>
- </qresource>
-</RCC>
+++ /dev/null
-#include "statusbarmodel.h"
-#include "statusbarserver.h"
-
-#include <QtDBus/QDBusConnection>
-
-class StatusBarModel::Private
-{
-public:
- Private(StatusBarModel *parent);
-
-private:
- StatusBarModel *q;
-public:
- StatusBarServer server;
- QString iconList[StatusBarServer::SupportedCount];
-};
-
-StatusBarModel::Private::Private(StatusBarModel *parent)
- : q(parent)
-{
- QDBusConnection dbus = QDBusConnection::sessionBus();
- dbus.registerObject("/StatusBar", &server);
- dbus.registerService("org.agl.homescreen");
- connect(&server, &StatusBarServer::statusIconChanged, [&](int placeholderIndex, const QString &icon) {
- if (placeholderIndex < 0 || StatusBarServer::SupportedCount <= placeholderIndex) return;
- if (iconList[placeholderIndex] == icon) return;
- iconList[placeholderIndex] = icon;
- emit q->dataChanged(q->index(placeholderIndex), q->index(placeholderIndex));
- });
- for (int i = 0; i < StatusBarServer::SupportedCount; i++) {
- iconList[i] = server.getStatusIcon(i);
- }
-}
-
-StatusBarModel::StatusBarModel(QObject *parent)
- : QAbstractListModel(parent)
- , d(new Private(this))
-{
-}
-
-StatusBarModel::~StatusBarModel()
-{
- delete d;
-}
-
-int StatusBarModel::rowCount(const QModelIndex &parent) const
-{
- if (parent.isValid())
- return 0;
-
- return StatusBarServer::SupportedCount;
-}
-
-QVariant StatusBarModel::data(const QModelIndex &index, int role) const
-{
- QVariant ret;
- if (!index.isValid())
- return ret;
-
- switch (role) {
- case Qt::DisplayRole:
- ret = d->iconList[index.row()];
- break;
- default:
- break;
- }
-
- return ret;
-}
-
-QHash<int, QByteArray> StatusBarModel::roleNames() const
-{
- QHash<int, QByteArray> roles;
- roles[Qt::DisplayRole] = "icon";
- return roles;
-}
+++ /dev/null
-#ifndef STATUSBARMODEL_H
-#define STATUSBARMODEL_H
-
-#include <QtCore/QAbstractListModel>
-
-class StatusBarModel : public QAbstractListModel
-{
- Q_OBJECT
-public:
- explicit StatusBarModel(QObject *parent = nullptr);
- ~StatusBarModel();
-
- int rowCount(const QModelIndex &parent = QModelIndex()) const override;
-
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
- QHash<int, QByteArray> roleNames() const override;
-
-private:
- class Private;
- Private *d;
-};
-
-#endif // STATUSBARMODEL_H
+++ /dev/null
-#include "statusbarserver.h"
-#include "statusbar_adaptor.h"
-
-class StatusBarServer::Private
-{
-public:
- Private(StatusBarServer *parent);
- QString texts[SupportedCount];
- QString icons[SupportedCount];
- StatusbarAdaptor adaptor;
-};
-
-StatusBarServer::Private::Private(StatusBarServer *parent)
- : adaptor(parent)
-{
- icons[0] = QStringLiteral("./images/Status/HMI_Status_Wifi_Full-01.png");
- icons[1] = QStringLiteral("./images/Status/HMI_Status_Bluetooth_Inactive-01.png");
- icons[2] = QStringLiteral("./images/Status/HMI_Status_Signal_Full-01.png");
-}
-
-StatusBarServer::StatusBarServer(QObject *parent)
- : QObject(parent)
- , d(new Private(this))
-{
-}
-
-StatusBarServer::~StatusBarServer()
-{
- delete d;
-}
-
-QList<int> StatusBarServer::getAvailablePlaceholders() const
-{
- QList<int> ret;
- for (int i = 0; i < SupportedCount; ++i){
- ret.append(i);
- }
- return ret;
-}
-
-QString StatusBarServer::getStatusIcon(int placeholderIndex) const
-{
- QString ret;
- if (-1 < placeholderIndex && placeholderIndex < SupportedCount)
- ret = d->icons[placeholderIndex];
- return ret;
-}
-
-void StatusBarServer::setStatusIcon(int placeholderIndex, const QString &icon)
-{
- if (-1 < placeholderIndex && placeholderIndex < SupportedCount) {
- if (d->icons[placeholderIndex] == icon) return;
- d->icons[placeholderIndex] = icon;
- emit statusIconChanged(placeholderIndex, icon);
- }
-}
-
-QString StatusBarServer::getStatusText(int placeholderIndex) const
-{
- QString ret;
- if (-1 < placeholderIndex && placeholderIndex < SupportedCount) {
- ret = d->texts[placeholderIndex];
- }
- return ret;
-}
-
-void StatusBarServer::setStatusText(int placeholderIndex, const QString &text)
-{
- if (-1 < placeholderIndex && placeholderIndex < SupportedCount) {
- if (d->texts[placeholderIndex] == text) return;
- d->texts[placeholderIndex] = text;
- emit statusTextChanged(placeholderIndex, text);
- }
-}
+++ /dev/null
-#ifndef STATUSBARSERVER_H
-#define STATUSBARSERVER_H
-
-#include <QtCore/QObject>
-
-class StatusBarServer : public QObject
-{
- Q_OBJECT
-public:
- enum {
- SupportedCount = 3,
- };
- explicit StatusBarServer(QObject *parent = nullptr);
- ~StatusBarServer();
-
- Q_INVOKABLE QList<int> getAvailablePlaceholders() const;
- Q_INVOKABLE QString getStatusIcon(int placeholderIndex) const;
- Q_INVOKABLE QString getStatusText(int placeholderIndex) const;
-
-public slots:
- void setStatusIcon(int placeholderIndex, const QString &icon);
- void setStatusText(int placeholderIndex, const QString &text);
-
-signals:
- void statusIconChanged(int placeholderIndex, const QString &icon);
- void statusTextChanged(int placeholderIndex, const QString &text);
-
-private:
- class Private;
- Private *d;
-};
-
-#endif // STATUSBARSERVER_H