summaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/Dashboard.qml201
-rw-r--r--app/TirePressure.qml62
-rw-r--r--app/app.pri12
-rw-r--r--app/app.pro10
-rw-r--r--app/config.tests/libhomescreen/libhomescreen.cpp8
-rw-r--r--app/config.tests/libhomescreen/libhomescreen.pro5
-rw-r--r--app/dashboard.qrc6
-rw-r--r--app/images/HMI_Dashboard_Car.pngbin0 -> 253513 bytes
-rw-r--r--app/images/HMI_Dashboard_Fuel_Details.svg95
-rw-r--r--app/images/HMI_Dashboard_Fuel_Icon.svg76
-rw-r--r--app/images/HMI_Dashboard_LeftTire.svg121
-rw-r--r--app/images/HMI_Dashboard_RightTire.svg120
-rw-r--r--app/images/HMI_Dashboard_Speed_Icon.svg90
-rw-r--r--app/images/HMI_Dashboard_TirePressure_OK.svg102
-rw-r--r--app/images/images.qrc11
-rw-r--r--app/main.cpp46
-rw-r--r--app/models/CarsModel.qml35
-rw-r--r--app/models/TireModel.qml64
-rw-r--r--app/models/TripModel.qml19
-rw-r--r--app/models/qmldir9
20 files changed, 1092 insertions, 0 deletions
diff --git a/app/Dashboard.qml b/app/Dashboard.qml
new file mode 100644
index 0000000..07bf19f
--- /dev/null
+++ b/app/Dashboard.qml
@@ -0,0 +1,201 @@
+/*
+ * 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
+
+ApplicationWindow {
+ id: root
+
+ Label {
+ id: speed
+ anchors.left: parent.left
+ anchors.top: parent.top
+ anchors.margins: 20
+ text: '1'
+ font.pixelSize: 256
+ }
+ Label {
+ id: unit
+ anchors.left: speed.right
+ anchors.baseline: speed.baseline
+ text: 'MPH'
+ font.pixelSize: 64
+ }
+ Label {
+ anchors.left: unit.left
+ anchors.top: unit.bottom
+ text: '100,000.5 MI'
+ font.pixelSize: 32
+ opacity: 0.5
+ }
+
+ Image {
+ id: car
+ anchors.centerIn: parent
+ source: './images/HMI_Dashboard_Car.png'
+ }
+
+ TirePressure {
+ anchors.right: car.left
+ anchors.rightMargin: -20
+ anchors.top: car.top
+ anchors.topMargin: 150
+ title: 'LEFT FRONT TIRE'
+ pressure: '23.1 PSI'
+ }
+
+ TirePressure {
+ anchors.right: car.left
+ anchors.rightMargin: -20
+ anchors.bottom: car.bottom
+ anchors.bottomMargin: 120
+ title: 'LEFT REAR TIRE'
+ pressure: '31.35 PSI'
+ }
+
+ TirePressure {
+ mirror: true
+ anchors.left: car.right
+ anchors.leftMargin: -20
+ anchors.top: car.top
+ anchors.topMargin: 150
+ title: 'RIGHT FRONT TIRE'
+ pressure: '24.2 PSI'
+ }
+
+ TirePressure {
+ mirror: true
+ anchors.left: car.right
+ anchors.leftMargin: -20
+ anchors.bottom : car.bottom
+ anchors.bottomMargin: 120
+ title: 'RIGHT REAR TIRE'
+ pressure: '33.0 PSI'
+ }
+
+ RowLayout {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.margins: 100
+
+ Image {
+ id: speedIcon
+ source: './images/HMI_Dashboard_Speed_Icon.svg'
+ }
+ ProgressBar {
+ Layout.fillWidth: true
+ value: 0.25
+ Label {
+ anchors.left: parent.left
+ anchors.top: parent.bottom
+ anchors.topMargin: 10
+ text: 'SPEED (MPH)'
+ font.pixelSize: 26
+ }
+ }
+ Item {
+ width: 30
+ height: 30
+ }
+ Image {
+ id: fuelIcon
+ source: './images/HMI_Dashboard_Fuel_Icon.svg'
+ }
+ ProgressBar {
+ Layout.fillWidth: true
+ value: 0.66
+ Image {
+ anchors.left: parent.left
+ anchors.leftMargin: -40
+ anchors.bottom: parent.top
+ source: './images/HMI_Dashboard_Fuel_Details.svg'
+ GridLayout {
+ anchors.fill: parent
+ columns: 2
+ rowSpacing: -10
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 3
+ Layout.fillHeight: true
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignRight
+ text: 'LEVEL:'
+ font.pixelSize: 24
+ }
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 4
+ Layout.fillHeight: true
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignLeft
+ text: '9 GALLONS'
+ font.pixelSize: 24
+ color: '#66FF99'
+ }
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 3
+ Layout.fillHeight: true
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignRight
+ text: 'RANGE:'
+ font.pixelSize: 24
+ }
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 4
+ Layout.fillHeight: true
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignLeft
+ text: '229 MI'
+ font.pixelSize: 24
+ color: '#66FF99'
+ }
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 3
+ Layout.fillHeight: true
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignRight
+ text: 'AVG:'
+ font.pixelSize: 24
+ }
+ Label {
+ Layout.fillWidth: true
+ Layout.preferredWidth: 4
+ Layout.fillHeight: true
+ verticalAlignment: Label.AlignVCenter
+ horizontalAlignment: Label.AlignLeft
+ text: '25.5 MPG'
+ font.pixelSize: 24
+ color: '#66FF99'
+ }
+ }
+ }
+
+ Label {
+ anchors.left: parent.left
+ anchors.top: parent.bottom
+ anchors.topMargin: 10
+ text: 'FUEL'
+ font.pixelSize: 26
+ }
+ }
+ }
+}
diff --git a/app/TirePressure.qml b/app/TirePressure.qml
new file mode 100644
index 0000000..b390eac
--- /dev/null
+++ b/app/TirePressure.qml
@@ -0,0 +1,62 @@
+import QtQuick 2.6
+import QtQuick.Controls 2.0
+
+Image {
+ id: root
+ width: sourceSize.width
+ height: sourceSize.height
+ property bool mirror: false
+ property alias title: title.text
+ property alias pressure: pressure.text
+
+ Label {
+ id: title
+ anchors.bottom: pressure.top
+ font.pixelSize: 24
+ }
+
+ Label {
+ id: pressure
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 55
+ anchors.leftMargin: 140
+ anchors.rightMargin: 140
+ color: '#66FF99'
+ font.pixelSize: 20
+ }
+
+ states: [
+ State {
+ name: 'left'
+ when: !mirror
+ PropertyChanges {
+ target: root
+ source: './images/HMI_Dashboard_LeftTire.svg'
+ }
+ AnchorChanges {
+ target: title
+ anchors.right: pressure.right
+ }
+ AnchorChanges {
+ target: pressure
+ anchors.right: parent.right
+ }
+ },
+ State {
+ name: 'right'
+ when: mirror
+ PropertyChanges {
+ target: root
+ source: './images/HMI_Dashboard_RightTire.svg'
+ }
+ AnchorChanges {
+ target: title
+ anchors.left: pressure.left
+ }
+ AnchorChanges {
+ target: pressure
+ anchors.left: parent.left
+ }
+ }
+ ]
+}
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..6e768d5
--- /dev/null
+++ b/app/app.pro
@@ -0,0 +1,10 @@
+TARGET = dashboard
+QT = quickcontrols2
+
+SOURCES = main.cpp
+
+RESOURCES += \
+ dashboard.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/dashboard.qrc b/app/dashboard.qrc
new file mode 100644
index 0000000..7e8961f
--- /dev/null
+++ b/app/dashboard.qrc
@@ -0,0 +1,6 @@
+<RCC>
+ <qresource prefix="/">
+ <file>Dashboard.qml</file>
+ <file>TirePressure.qml</file>
+ </qresource>
+</RCC>
diff --git a/app/images/HMI_Dashboard_Car.png b/app/images/HMI_Dashboard_Car.png
new file mode 100644
index 0000000..b17d135
--- /dev/null
+++ b/app/images/HMI_Dashboard_Car.png
Binary files differ
diff --git a/app/images/HMI_Dashboard_Fuel_Details.svg b/app/images/HMI_Dashboard_Fuel_Details.svg
new file mode 100644
index 0000000..026e560
--- /dev/null
+++ b/app/images/HMI_Dashboard_Fuel_Details.svg
@@ -0,0 +1,95 @@
+<?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="&amp;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_2"
+ x="0px"
+ y="0px"
+ viewBox="0 0 350 155"
+ style="enable-background:new 0 0 350 155;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Dashboard_Fuel_Details.svg"><metadata
+ id="metadata63"><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="defs61" /><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="namedview59"
+ showgrid="false"
+ inkscape:zoom="1.5225806"
+ inkscape:cx="-83.442797"
+ inkscape:cy="77.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_2" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:#FFFFFF;}
+ .st1{font-family:'Roboto-Regular';}
+ .st2{font-size:20.4887px;}
+ .st3{letter-spacing:3;}
+ .st4{fill:#4DCE9B;}
+ .st5{fill:none;stroke:url(#SVGID_1_);stroke-miterlimit:10;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><g
+ id="g11"><g
+ id="g37"><linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="44.7964"
+ y1="74.6998"
+ x2="45.7964"
+ y2="74.6998"><stop
+ offset="0"
+ style="stop-color:#8BC53F"
+ id="stop40" /><stop
+ offset="1"
+ style="stop-color:#0DF9FF"
+ id="stop42" /></linearGradient><line
+ class="st5"
+ x1="45.3"
+ y1="21.5"
+ x2="45.3"
+ y2="127.9"
+ id="line44" /><circle
+ class="st0"
+ cx="45.3"
+ cy="76.7"
+ r="4.8"
+ id="circle46" /><circle
+ class="st0"
+ cx="45.3"
+ cy="26.3"
+ r="4.8"
+ id="circle48" /><circle
+ class="st0"
+ cx="45.3"
+ cy="127.4"
+ r="4.8"
+ id="circle50" /></g></g><path
+ class="st6"
+ d="M45.3,26.6"
+ id="path57" /></g></g></switch></svg>
diff --git a/app/images/HMI_Dashboard_Fuel_Icon.svg b/app/images/HMI_Dashboard_Fuel_Icon.svg
new file mode 100644
index 0000000..91d1675
--- /dev/null
+++ b/app/images/HMI_Dashboard_Fuel_Icon.svg
@@ -0,0 +1,76 @@
+<?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="&amp;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 82 82"
+ style="enable-background:new 0 0 82 82;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Dashboard_Fuel_Icon.svg"><metadata
+ id="metadata24"><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="defs22" /><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="namedview20"
+ showgrid="false"
+ inkscape:zoom="2.8780488"
+ inkscape:cx="-201.52542"
+ inkscape:cy="41"
+ 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:none;stroke:url(#SVGID_1_);stroke-miterlimit:10;}
+ .st1{fill-rule:evenodd;clip-rule:evenodd;fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="5.022039e-04"
+ y1="43.56"
+ x2="81.0005"
+ y2="43.56"
+ gradientTransform="matrix(0.9999 1.092937e-02 -1.092937e-02 0.9999 0.978 -3.0001)"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop12" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop14" /></linearGradient><ellipse
+ transform="matrix(1.092937e-02 -0.9999 0.9999 1.092937e-02 -0.4457 81.5494)"
+ class="st0"
+ cx="41"
+ cy="41"
+ rx="40"
+ ry="40"
+ id="ellipse16" /><path
+ class="st1"
+ d="M29.5,20.9L46.7,21c0.3,0,0.6,0.3,0.6,0.6l0,3.8l0,2.2l0,7.1l-18.4-0.1l0-7.1l0-2.2l0-3.8 C28.9,21.1,29.2,20.9,29.5,20.9L29.5,20.9z M28.7,17.9c-1.5,0-2.8,1.2-2.8,2.7l-0.2,39.7l-1.5,0c-0.4,0-0.6,0.3-0.6,0.6l0,0 l0,0.8l0,1.9l28.6,0.2l0-1.9l0-0.8l0,0c0-0.4-0.3-0.6-0.6-0.6l-1.4,0l0.1-21.7l2.9,0l-0.1,20.4l0,0c0,2.5,2.3,4.8,4.9,4.9 c2.3,0.1,4-1,4.8-2.6L63,41.2c-1.6-3.3-4.2-4.6-7.5-4.6l0.1-10.7l-5.2-2.2l0-2.9c0-1.5-1.2-2.7-2.7-2.7L28.7,17.9L28.7,17.9z M50.4,26.2l3,1.1l0,9.1l-3,0L50.4,26.2L50.4,26.2z M55.4,59.5l0.2-20.6c3.2,0.1,5.2,1.7,5.7,5l0,0.2l-0.1,15.2l0,0 c0,0,0,0.1,0,0.1l0,0.1l0,0c-0.2,1.1-1.3,2.1-2.9,2.1S55.6,60.6,55.4,59.5L55.4,59.5z"
+ id="path18" /></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/HMI_Dashboard_LeftTire.svg b/app/images/HMI_Dashboard_LeftTire.svg
new file mode 100644
index 0000000..7f98fe4
--- /dev/null
+++ b/app/images/HMI_Dashboard_LeftTire.svg
@@ -0,0 +1,121 @@
+<?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="&amp;#38;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_3"
+ x="0px"
+ y="0px"
+ viewBox="0 0 350 155"
+ style="enable-background:new 0 0 350 155;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Dashboard_Left_BackTire.svg"><metadata
+ id="metadata64"><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="defs62" /><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="namedview60"
+ showgrid="false"
+ inkscape:zoom="1.5225806"
+ inkscape:cx="299.92128"
+ inkscape:cy="108.70642"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_3" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:url(#SVGID_1_);}
+ .st1{fill:url(#SVGID_2_);}
+ .st2{fill:url(#SVGID_3_);}
+ .st3{fill:#FFFFFF;}
+ .st4{font-family:'Roboto-Regular';}
+ .st5{font-size:17px;}
+ .st6{letter-spacing:3;}
+ .st7{fill:#66FF99;}
+ .st8{fill:none;stroke:#66FF99;stroke-miterlimit:10;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><g
+ id="g11"><g
+ id="g13"><g
+ id="g15"><linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="206.3706"
+ y1="118.8609"
+ x2="280.2762"
+ y2="26.9783"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop18" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop20" /></linearGradient><polygon
+ class="st0"
+ points="239.8,77.6 238.4,76.2 248.9,65.7 250.3,67.1 "
+ id="polygon22" /></g><g
+ id="g24"><linearGradient
+ id="SVGID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="202.652"
+ y1="115.8698"
+ x2="276.5576"
+ y2="23.9872"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop27" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop29" /></linearGradient><polygon
+ class="st1"
+ points="238.9,77.1 233.1,71.4 234.5,70 240.3,75.7 "
+ id="polygon31" /></g><g
+ id="g33"><linearGradient
+ id="SVGID_3_"
+ gradientUnits="userSpaceOnUse"
+ x1="203.884"
+ y1="116.8608"
+ x2="277.7896"
+ y2="24.9782"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop36" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop38" /></linearGradient><path
+ class="st2"
+ d="M240.1,93.8c-12.1,0-22-9.9-22-22c0-12.1,9.9-22,22-22c2.4,0,4.8,0.4,7.1,1.2l-0.6,1.9 c-2.1-0.7-4.2-1.1-6.5-1.1c-11,0-20,9-20,20s9,20,20,20s20-9,20-20c0-2-0.3-3.9-0.9-5.8l1.9-0.6c0.6,2.1,0.9,4.2,0.9,6.4 C262.1,83.9,252.3,93.8,240.1,93.8z"
+ id="path40" /></g></g></g><g
+ id="g50"><g
+ id="g52"><polyline
+ class="st8"
+ points="99.9,86.7 99.9,105.2 328,105.2 "
+ id="polyline54" /><g
+ id="g56"><circle
+ class="st7"
+ cx="327.8"
+ cy="105.2"
+ r="3.8"
+ id="circle58" /></g></g></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/HMI_Dashboard_RightTire.svg b/app/images/HMI_Dashboard_RightTire.svg
new file mode 100644
index 0000000..fc7b660
--- /dev/null
+++ b/app/images/HMI_Dashboard_RightTire.svg
@@ -0,0 +1,120 @@
+<?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="&amp;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_2"
+ x="0px"
+ y="0px"
+ viewBox="0 0 350 155"
+ style="enable-background:new 0 0 350 155;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Dashboard_RightTire.svg"><metadata
+ id="metadata62"><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="defs60" /><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="namedview58"
+ showgrid="false"
+ inkscape:zoom="1.5225806"
+ inkscape:cx="-143.20975"
+ inkscape:cy="77.5"
+ inkscape:window-x="0"
+ inkscape:window-y="0"
+ inkscape:window-maximized="1"
+ inkscape:current-layer="Layer_2" /><style
+ type="text/css"
+ id="style3">
+ .st0{fill:url(#SVGID_1_);}
+ .st1{fill:url(#SVGID_2_);}
+ .st2{fill:url(#SVGID_3_);}
+ .st3{fill:#FFFFFF;}
+ .st4{font-family:'Roboto-Regular';}
+ .st5{font-size:17px;}
+ .st6{letter-spacing:3;}
+ .st7{fill:#66FF99;}
+ .st8{fill:none;stroke:#66FF99;stroke-miterlimit:10;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><g
+ id="g11"><g
+ id="g13"><linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="70.3134"
+ y1="119.0398"
+ x2="144.219"
+ y2="27.1571"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop16" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop18" /></linearGradient><polygon
+ class="st0"
+ points="103.7,77.8 102.3,76.4 112.9,65.9 114.3,67.3 "
+ id="polygon20" /></g><g
+ id="g22"><linearGradient
+ id="SVGID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="66.5948"
+ y1="116.0487"
+ x2="140.5004"
+ y2="24.166"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop25" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop27" /></linearGradient><polygon
+ class="st1"
+ points="102.8,77.3 97,71.6 98.5,70.2 104.2,75.9 "
+ id="polygon29" /></g><g
+ id="g31"><linearGradient
+ id="SVGID_3_"
+ gradientUnits="userSpaceOnUse"
+ x1="67.8268"
+ y1="117.0396"
+ x2="141.7324"
+ y2="25.157"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop34" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop36" /></linearGradient><path
+ class="st2"
+ d="M104.1,94c-12.1,0-22-9.9-22-22c0-12.1,9.9-22,22-22c2.4,0,4.8,0.4,7.1,1.2l-0.6,1.9 c-2.1-0.7-4.2-1.1-6.5-1.1c-11,0-20,9-20,20s9,20,20,20s20-9,20-20c0-2-0.3-3.9-0.9-5.8l1.9-0.6c0.6,2.1,0.9,4.2,0.9,6.4 C126.1,84.1,116.2,94,104.1,94z"
+ id="path38" /></g></g><g
+ id="g48"><g
+ id="g50"><polyline
+ class="st8"
+ points="240.6,86.6 240.6,105 13.6,105 "
+ id="polyline52" /><g
+ id="g54"><circle
+ class="st7"
+ cx="13.8"
+ cy="105"
+ r="3.8"
+ id="circle56" /></g></g></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/HMI_Dashboard_Speed_Icon.svg b/app/images/HMI_Dashboard_Speed_Icon.svg
new file mode 100644
index 0000000..94361fe
--- /dev/null
+++ b/app/images/HMI_Dashboard_Speed_Icon.svg
@@ -0,0 +1,90 @@
+<?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="&amp;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 82 82"
+ style="enable-background:new 0 0 82 82;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Dashboard_Speed_Icon.svg"><metadata
+ id="metadata35"><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="defs33" /><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="namedview31"
+ showgrid="false"
+ inkscape:zoom="2.8780488"
+ inkscape:cx="-132.90254"
+ inkscape:cy="41"
+ 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:none;stroke:url(#SVGID_1_);stroke-miterlimit:10;}
+ .st1{fill:#FFFFFF;}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="-2.180208e-02"
+ y1="40.8391"
+ x2="80.9782"
+ y2="40.8391"
+ gradientTransform="matrix(0.9999 1.092937e-02 -1.092937e-02 0.9999 0.9706 -0.279)"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop12" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop14" /></linearGradient><ellipse
+ transform="matrix(1.092937e-02 -0.9999 0.9999 1.092937e-02 -0.4457 81.5494)"
+ class="st0"
+ cx="41"
+ cy="41"
+ rx="40"
+ ry="40"
+ id="ellipse16" /><g
+ id="g18"><path
+ class="st1"
+ d="M41.1,15.2c-15.5-0.1-28.2,12.4-28.3,28c0,6.9,2.5,13.6,7.1,18.8c0.3,0.4,0.8,0.6,1.3,0.6l39.3,0.2 c0.5,0,1-0.2,1.3-0.6c4.7-5.1,7.2-11.8,7.3-18.7C69.2,28,56.7,15.3,41.1,15.2z M60.6,61.1l-39.3-0.2c-4.2-4.7-6.7-10.9-6.6-17.6 c0.1-14.6,12-26.3,26.5-26.2c14.6,0.1,26.3,12,26.2,26.5C67.3,50.3,64.8,56.4,60.6,61.1z M43.5,40.9 C43.5,40.9,43.5,40.9,43.5,40.9c-2.1-2-8.9-6.2-11.7-8c-0.4-0.2-0.8-0.2-1.1,0.1c-0.3,0.3-0.3,0.8-0.1,1.1 c1.8,2.8,5.9,9.7,7.8,11.7c0,0,0.1,0.1,0.1,0.1c0.6,0.6,1.5,1,2.4,1c1.9,0,3.5-1.6,3.5-3.5C44.5,42.4,44.1,41.6,43.5,40.9z"
+ id="path20" /><path
+ class="st1"
+ d="M54.7,56.5l-3.5-5.3c-0.3-0.5-0.9-0.8-1.5-0.8l-17.6-0.1c-0.6,0-1.1,0.3-1.5,0.8l-3.5,5.3 c-0.4,0.6-0.4,1.2-0.1,1.8s0.9,0.9,1.5,0.9c8.2,0,16.4,0.1,24.6,0.1c0.7,0,1.2-0.3,1.6-0.9C55.1,57.8,55.1,57.1,54.7,56.5z"
+ id="path22" /><path
+ class="st1"
+ d="M52.9,22.5c-0.1-0.5-0.4-0.9-0.9-1.1c-3.4-1.7-7.1-2.6-10.8-2.6c-3.8,0-7.5,0.8-10.9,2.5 c-0.5,0.2-0.8,0.6-0.9,1.1c-0.1,0.5,0,1,0.3,1.4l3.1,4.4c0.5,0.7,1.4,0.9,2.1,0.6c2-0.9,4.1-1.3,6.3-1.3c2.2,0,4.3,0.5,6.3,1.3 c0.8,0.3,1.7,0.1,2.1-0.6l3.1-4.4C52.9,23.5,53,23,52.9,22.5z"
+ id="path24" /><path
+ class="st1"
+ d="M58.1,25.7c-0.4-0.4-0.9-0.5-1.4-0.5c-0.5,0-1,0.3-1.3,0.7l-3.1,4.4c-0.5,0.7-0.4,1.6,0.2,2.2 c2.8,3,4.3,6.8,4.3,10.9c0,0.3,0,0.6,0,1c-0.1,0.8,0.5,1.6,1.3,1.8l5.2,1.4c0.5,0.1,1,0.1,1.5-0.2c0.4-0.3,0.7-0.7,0.8-1.3 c0.1-0.9,0.2-1.8,0.2-2.6C65.6,36.8,63,30.4,58.1,25.7z"
+ id="path26" /><path
+ class="st1"
+ d="M29.7,30.2l-3-4.4c-0.3-0.4-0.7-0.7-1.3-0.7c-0.5-0.1-1,0.1-1.4,0.5c-4.9,4.6-7.6,11-7.7,17.7 c0,0.9,0,1.8,0.1,2.6c0.1,0.5,0.3,1,0.7,1.3s0.9,0.4,1.4,0.3l5.2-1.4c0.8-0.2,1.4-1,1.3-1.8c0-0.3,0-0.6,0-1 c0-4.1,1.6-7.9,4.4-10.9C30.1,31.8,30.2,30.9,29.7,30.2z"
+ id="path28" /><g
+ id="Layer_1_2_" /></g></g></g></switch></svg> \ No newline at end of file
diff --git a/app/images/HMI_Dashboard_TirePressure_OK.svg b/app/images/HMI_Dashboard_TirePressure_OK.svg
new file mode 100644
index 0000000..9328967
--- /dev/null
+++ b/app/images/HMI_Dashboard_TirePressure_OK.svg
@@ -0,0 +1,102 @@
+<?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="&amp;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 44 44"
+ style="enable-background:new 0 0 44 44;"
+ xml:space="preserve"
+ inkscape:version="0.91 r13725"
+ sodipodi:docname="HMI_Dashboard_TirePressure_OK.svg"><metadata
+ id="metadata42"><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="defs40" /><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="namedview38"
+ showgrid="false"
+ inkscape:zoom="5.3636364"
+ inkscape:cx="-50.245763"
+ inkscape:cy="22"
+ 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_);}
+</style><switch
+ id="switch5"><g
+ i:extraneous="self"
+ id="g7"><g
+ id="g9"><g
+ id="g11"><linearGradient
+ id="SVGID_1_"
+ gradientUnits="userSpaceOnUse"
+ x1="-11.7622"
+ y1="69.0661"
+ x2="62.1434"
+ y2="-22.8165"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop14" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop16" /></linearGradient><polygon
+ class="st0"
+ points="21.6,27.8 20.2,26.4 30.8,15.9 32.2,17.3 "
+ id="polygon18" /></g><g
+ id="g20"><linearGradient
+ id="SVGID_2_"
+ gradientUnits="userSpaceOnUse"
+ x1="-15.4808"
+ y1="66.075"
+ x2="58.4248"
+ y2="-25.8076"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop23" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop25" /></linearGradient><polygon
+ class="st1"
+ points="20.7,27.3 15,21.6 16.4,20.2 22.1,25.9 "
+ id="polygon27" /></g><g
+ id="g29"><linearGradient
+ id="SVGID_3_"
+ gradientUnits="userSpaceOnUse"
+ x1="-14.2488"
+ y1="67.066"
+ x2="59.6568"
+ y2="-24.8166"><stop
+ offset="0"
+ style="stop-color:#59FF7F"
+ id="stop32" /><stop
+ offset="1"
+ style="stop-color:#6BFBFF"
+ id="stop34" /></linearGradient><path
+ class="st2"
+ d="M22,44C9.9,44,0,34.1,0,22C0,9.9,9.9,0,22,0c2.4,0,4.8,0.4,7.1,1.2L28.5,3C26.4,2.3,24.2,2,22,2 C11,2,2,11,2,22s9,20,20,20s20-9,20-20c0-2-0.3-3.9-0.9-5.8l1.9-0.6c0.6,2.1,0.9,4.2,0.9,6.4C44,34.1,34.1,44,22,44z"
+ id="path36" /></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..a0ad957
--- /dev/null
+++ b/app/images/images.qrc
@@ -0,0 +1,11 @@
+<RCC>
+ <qresource prefix="/images">
+ <file>HMI_Dashboard_Car.png</file>
+ <file>HMI_Dashboard_Fuel_Icon.svg</file>
+ <file>HMI_Dashboard_LeftTire.svg</file>
+ <file>HMI_Dashboard_RightTire.svg</file>
+ <file>HMI_Dashboard_Speed_Icon.svg</file>
+ <file>HMI_Dashboard_TirePressure_OK.svg</file>
+ <file>HMI_Dashboard_Fuel_Details.svg</file>
+ </qresource>
+</RCC>
diff --git a/app/main.cpp b/app/main.cpp
new file mode 100644
index 0000000..a86082e
--- /dev/null
+++ b/app/main.cpp
@@ -0,0 +1,46 @@
+/*
+ * 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.
+ */
+
+#include <QtCore/QDebug>
+#include <QtGui/QGuiApplication>
+#include <QtQml/QQmlApplicationEngine>
+#include <QtQuickControls2/QQuickStyle>
+
+#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");
+
+ QQmlApplicationEngine engine;
+ engine.load(QUrl(QStringLiteral("qrc:/Dashboard.qml")));
+
+ return app.exec();
+}
+
diff --git a/app/models/CarsModel.qml b/app/models/CarsModel.qml
new file mode 100644
index 0000000..3dcdb74
--- /dev/null
+++ b/app/models/CarsModel.qml
@@ -0,0 +1,35 @@
+/* Copyright (C) 2015, Jaguar Land Rover. All Rights Reserved.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pragma Singleton
+
+import QtQuick 2.0
+
+ListModel {
+ ListElement {
+ name: "F-Type"
+ mpg: 25
+ tank: 18.5
+ speed: 171
+ image: "images/F-Type_Call_Outs.png"
+ }
+
+ ListElement {
+ name: "Range Rover"
+ mpg: 22
+ tank: 27.7
+ speed: 162
+ image: "images/Range_Rover_Outline_Call_Outs.png"
+ }
+
+ ListElement {
+ name: "Land Rover LR4"
+ mpg: 18
+ tank: 22.8
+ speed: 121
+ image: "images/LR4_Outline_Call_Outs.png"
+ }
+}
diff --git a/app/models/TireModel.qml b/app/models/TireModel.qml
new file mode 100644
index 0000000..5c7e5ab
--- /dev/null
+++ b/app/models/TireModel.qml
@@ -0,0 +1,64 @@
+/* Copyright (C) 2015, Jaguar Land Rover. All Rights Reserved.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pragma Singleton
+
+import QtQuick 2.0
+
+Item {
+ property bool metric: false
+ property alias pressure: pressureItem
+
+ function psiToBar(value) {
+ return (metric ? 0.06895 : 1) * value
+ }
+
+ Item {
+ id: pressureItem
+
+ property real frontLeft: psiToBar(28 + flDiff)
+ property real frontRight: psiToBar(28 + frDiff)
+ property real rearLeft: psiToBar(28 + rlDiff)
+ property real rearRight: psiToBar(28 + rrDiff)
+
+ property real flDiff: 0
+ property real frDiff: 0
+ property real rlDiff: 0
+ property real rrDiff: 0
+
+ NumberAnimation on flDiff {
+ from: -5
+ to: 5
+ duration: 5000
+ loops: Animation.Infinite
+ easing.type: Easing.CosineCurve
+ }
+
+ NumberAnimation on frDiff {
+ from: -5
+ to: 5
+ duration: 5300
+ loops: Animation.Infinite
+ easing.type: Easing.CosineCurve
+ }
+
+ NumberAnimation on rlDiff {
+ from: -5
+ to: 5
+ duration: 5700
+ loops: Animation.Infinite
+ easing.type: Easing.CosineCurve
+ }
+
+ NumberAnimation on rrDiff {
+ from: -5
+ to: 5
+ duration: 6100
+ loops: Animation.Infinite
+ easing.type: Easing.CosineCurve
+ }
+ }
+}
diff --git a/app/models/TripModel.qml b/app/models/TripModel.qml
new file mode 100644
index 0000000..f2c4d02
--- /dev/null
+++ b/app/models/TripModel.qml
@@ -0,0 +1,19 @@
+/* Copyright (C) 2015, Jaguar Land Rover. All Rights Reserved.
+ *
+ * This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+pragma Singleton
+
+import QtQuick 2.0
+
+Item {
+ property bool metric: false
+
+ function milesToKm(value) {
+ return (metric ? 1.60934 : 1) * value
+ }
+
+ property real distance: milesToKm(100000.5)
+}
diff --git a/app/models/qmldir b/app/models/qmldir
new file mode 100644
index 0000000..1dc659e
--- /dev/null
+++ b/app/models/qmldir
@@ -0,0 +1,9 @@
+#/* Copyright (C) 2015, Jaguar Land Rover. All Rights Reserved.
+# *
+# * This Source Code Form is subject to the terms of the Mozilla Public
+# * License, v. 2.0. If a copy of the MPL was not distributed with this
+# * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+singleton CarsModel 1.0 CarsModel.qml
+singleton TireModel 1.0 TireModel.qml
+singleton TripModel 1.0 TripModel.qml