summaryrefslogtreecommitdiff
path: root/src/components/qt_hmi/qml_model_qt4
diff options
context:
space:
mode:
authorJustin Dickow <jjdickow@gmail.com>2014-10-20 17:44:41 -0400
committerJustin Dickow <jjdickow@gmail.com>2014-10-20 17:44:41 -0400
commit34e7256493ff0e6594029b9857d7e2aa31f5dbeb (patch)
tree367306b507c52d3af211533810adbc22004e0192 /src/components/qt_hmi/qml_model_qt4
parent2eef966e9b5fd4d94dd98820095eb765e200c64b (diff)
downloadsdl_core-34e7256493ff0e6594029b9857d7e2aa31f5dbeb.tar.gz
SDL 3.8!
Signed-off-by: Justin Dickow <jjdickow@gmail.com>
Diffstat (limited to 'src/components/qt_hmi/qml_model_qt4')
-rw-r--r--src/components/qt_hmi/qml_model_qt4/CMakeLists.txt87
-rw-r--r--src/components/qt_hmi/qml_model_qt4/MainWindow.qml356
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ArrowKeys.qml68
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/BackButton.qml48
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/CheckBox.qml78
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/CircleButton.qml87
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ClickableImage.qml66
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ClickableText.qml77
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ClimateControlBtn.qml93
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ComboBox.qml143
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/GradientRectangle.qml125
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/GridItem.qml53
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/HardwareButton.qml108
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/HeaderMenu.qml134
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/Icon.qml65
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ListItem.qml70
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/MaskedButton.qml64
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/MultiTouchArea.qml77
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/OvalButton.qml240
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/PagedFlickable.qml105
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/Pager.qml53
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/PlayPauseButton.qml77
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/PowerSwitchButton.qml75
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/PresetRow.qml106
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/PushButton.qml136
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ScrollableListView.qml49
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/ScrollableText.qml70
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/SoftButton.js39
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/SoftButton.qml104
-rw-r--r--src/components/qt_hmi/qml_model_qt4/controls/StatusBar.qml42
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/Async.js7
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/BasicCommunication.qml88
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/Buttons.qml48
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/Navigation.qml127
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/TTS.qml115
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/UI.qml449
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/VR.qml93
-rw-r--r--src/components/qt_hmi/qml_model_qt4/hmi_api/VehicleInfo.qml749
-rw-r--r--src/components/qt_hmi/qml_model_qt4/log4cxx.properties41
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/ApplicationData.qml57
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/ApplicationModel.qml91
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/CarMenuModel.qml78
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/Constants.js249
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/ContactsListModel.qml98
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/DataStorage.qml510
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/InteractionModel.qml58
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/Internal.js163
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/MainMenuListModel.qml79
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/MediaClockModel.qml112
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/MusicSourceModel.qml78
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/NavigationMenuModel.qml72
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/NavigationModel.qml52
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/PerformAudioPassThruModel.qml43
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/PhoneMenuModel.qml78
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/PlayerState.qml51
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/ScrollableMessageModel.qml54
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/SettingsStorage.qml125
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/SliderModel.qml45
-rw-r--r--src/components/qt_hmi/qml_model_qt4/models/VehicleInfoModel.qml234
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/AlertWindow.qml285
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/ContextPopup.qml56
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/ExitAllApplicationsPopup.qml81
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/InteractionPopup.qml103
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/PerformAudioPassThruPopup.qml149
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/PopUp.qml94
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/SliderPopup.qml214
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/TBTClientStatePopUp.qml71
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/TTSPopUp.qml79
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/VRHelpPopup.qml92
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/VRPopUp.qml92
-rw-r--r--src/components/qt_hmi/qml_model_qt4/popups/VehicleInfoPopUp.qml111
-rw-r--r--src/components/qt_hmi/qml_model_qt4/qml_model.qmlproject20
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/AMPlayerView.qml48
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/ApplicationListView.qml123
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/BTPlayerView.qml62
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/CDPlayerView.qml63
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/CarMenuGridView.qml54
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/ChangeDeviceView.qml102
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/ClimateControlView.qml94
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/ContactsListView.qml118
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/FMPlayerView.qml121
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/GeneralView.qml45
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/GridMenu.qml86
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/HardwareButtonsView.qml173
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/IPodPlayerView.qml61
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/LineInPlayerView.qml61
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/MainMenuView.qml54
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/MediaClockView.qml73
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/MediaPlayer.qml325
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/MusicSourceView.qml75
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/NavigationInRouteGridView.qml250
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/NavigationKeyboardView.qml221
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/NavigationMenuView.qml75
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/NavigationNoRouteGridView.qml205
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/PhoneKeyboardView.qml171
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/PhoneMenuGridView.qml55
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/RadioPlayer.qml160
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/SDLNavi.qml223
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/SDLNonMediaView.qml194
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/SDLPlayerOptionsListView.qml120
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/SDLPlayerView.qml79
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/ScrollableMessageView.qml216
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/SimulationView.qml284
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/SiriusPlayerView.qml46
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/TurnByTurnView.qml201
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/TurnListView.qml103
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/UsbPlayerView.qml61
-rw-r--r--src/components/qt_hmi/qml_model_qt4/views/WarningInfo.qml135
108 files changed, 12923 insertions, 0 deletions
diff --git a/src/components/qt_hmi/qml_model_qt4/CMakeLists.txt b/src/components/qt_hmi/qml_model_qt4/CMakeLists.txt
new file mode 100644
index 0000000000..e6eeb9e525
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/CMakeLists.txt
@@ -0,0 +1,87 @@
+# Copyright (c) 2013, Ford Motor Company
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are met:
+#
+# Redistributions of source code must retain the above copyright notice, this
+# list of conditions and the following disclaimer.
+#
+# Redistributions in binary form must reproduce the above copyright notice,
+# this list of conditions and the following
+# disclaimer in the documentation and/or other materials provided with the
+# distribution.
+#
+# Neither the name of the Ford Motor Company nor the names of its contributors
+# may be used to endorse or promote products derived from this software
+# without specific prior written permission.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+# POSSIBILITY OF SUCH DAMAGE.
+
+cmake_minimum_required(VERSION 2.8.11)
+
+set(components_dir ${CMAKE_CURRENT_SOURCE_DIR}/../..)
+set(dbus_dir ${components_dir}/dbus)
+set(codegen_dir ${dbus_dir}/codegen)
+set(codegen ${codegen_dir}/make_qml_dbus_qml.py)
+set(parser ${codegen_dir}/ford_xml_parser.py)
+set(interfaces_dir ${components_dir}/interfaces)
+set(api_xml ${interfaces_dir}/QT_HMI_API.xml)
+set(proxy_dir ${CMAKE_CURRENT_BINARY_DIR}/hmi_api)
+set(qml_dirs hmi_api controls models popups views)
+set(qml_files MainWindow.qml)
+
+add_custom_target(qml_auto ALL
+ COMMAND python ${codegen} --infile ${api_xml} --version ${qt_version} --outdir ${proxy_dir}
+ DEPENDS ${api_xml} ${codegen} ${parser}
+ COMMENT "Generating files:
+ ${proxy_dir}/BasicCommunicationProxy.qml
+ ${proxy_dir}/ButtonsProxy.qml
+ ${proxy_dir}/NavigationProxy.qml
+ ${proxy_dir}/TTSProxy.qml
+ ${proxy_dir}/UIProxy.qml
+ ${proxy_dir}/VehicleInfoProxy.qml
+ ${proxy_dir}/VRProxy.qml
+ from:
+ ${api_xml} ..."
+)
+
+add_custom_target(qml_copy_resources ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/../res ${CMAKE_CURRENT_BINARY_DIR}/res
+ COMMENT "Copying resources")
+
+if(NOT "${CMAKE_SOURCE_DIR}" STREQUAL "${CMAKE_BINARY_DIR}")
+ foreach(qml_dir ${qml_dirs})
+ add_custom_target(qml_copy_${qml_dir} ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/${qml_dir} ${CMAKE_CURRENT_BINARY_DIR}/${qml_dir}
+ COMMENT "Copying directory ${qml_dir}")
+ endforeach(qml_dir)
+
+ add_dependencies(qml_auto qml_copy_hmi_api)
+
+ foreach(qml_file ${qml_files})
+ add_custom_target(qml_copy_${qml_file} ALL
+ COMMAND ${CMAKE_COMMAND} -E copy_if_different ${CMAKE_CURRENT_SOURCE_DIR}/${qml_file} ${CMAKE_CURRENT_BINARY_DIR}/${qml_file}
+ COMMENT "Copying file ${qml_file}")
+ endforeach(qml_file)
+endif()
+
+install(DIRECTORY
+ ${CMAKE_CURRENT_BINARY_DIR}/controls
+ ${CMAKE_CURRENT_BINARY_DIR}/hmi_api
+ ${CMAKE_CURRENT_BINARY_DIR}/models
+ ${CMAKE_CURRENT_BINARY_DIR}/popups
+ ${CMAKE_CURRENT_BINARY_DIR}/res
+ ${CMAKE_CURRENT_BINARY_DIR}/views
+ DESTINATION bin/hmi)
+install(FILES ${CMAKE_CURRENT_BINARY_DIR}/MainWindow.qml DESTINATION bin/hmi)
diff --git a/src/components/qt_hmi/qml_model_qt4/MainWindow.qml b/src/components/qt_hmi/qml_model_qt4/MainWindow.qml
new file mode 100644
index 0000000000..1a3b06fd41
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/MainWindow.qml
@@ -0,0 +1,356 @@
+/**
+ * @file MainWindow.qml
+ * @brief Implementation of main window.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import com.ford.sdl.hmi.dbus_adapter 1.0
+import com.ford.sdl.hmi.log4cxx 1.0
+import "./controls"
+import "./views"
+import "./hmi_api" as HmiApi
+import "./models"
+import "./popups"
+import "hmi_api/Common.js" as Common
+import "./models/Constants.js" as Constants
+import "models/Internal.js" as Internal
+
+Rectangle {
+ width: 1280
+ height: 768
+ property string startQml: "./views/ApplicationListView.qml"
+ property int minWidth: Constants.mainScreenMinWidth
+ property int minHeight: Constants.mainScreenMiHeight
+ color: Constants.secondaryColor
+
+ DataStorage {
+ id: dataContainer
+
+ onSystemContextChanged: {
+ sdlUI.onSystemContext(systemContext)
+ }
+
+ // Please note that applicationContext is changed only after setting currentApplication
+ onApplicationContextChanged: {
+ if (applicationContext) {
+ sdlBasicCommunication.onAppActivated(currentApplication.appId)
+ } else {
+ sdlBasicCommunication.onAppDeactivated(currentApplication.appId, contentLoader.item.category)
+ }
+ }
+ }
+
+// TODO(KKolodiy): find way for play sound
+// Audio {
+// id: beep
+// source: "res/initial.wav"
+// }
+
+ SettingsStorage {
+ id: settingsContainer
+ }
+
+ Item {
+ id: mainScreen
+ anchors.top: parent. top
+ anchors.left: parent.left
+ width: (parent.width - simulationScreen.width < minWidth) ?
+ minWidth : parent.width - simulationScreen.width
+ height: (parent.height - hardwareScreen.height < minHeight) ?
+ minHeight : parent.height - hardwareScreen.height
+ clip: true
+ visible: false
+
+ Item {
+ anchors.top: parent.top
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: parent.height * 0.10
+ width: parent.width
+ HeaderMenu {}
+ }
+
+ Item {
+ height: parent.height * 0.90
+ width: parent.width
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Loader {
+ id: contentLoader
+ height: parent.height - Constants.margin
+ width: parent.width - 2 * Constants.margin
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.leftMargin: Constants.margin
+ anchors.rightMargin: Constants.margin
+ anchors.bottomMargin: Constants.margin
+
+
+ source:startQml
+ property variant viewTransitionStack : []
+
+ function reset() {
+ viewTransitionStack = []
+ }
+
+ property string currentLocation
+ function go(path, appId) {
+ console.debug("enter:", path, ", appId:", appId)
+ if (path) {
+ if (currentLocation !== path) {
+ viewTransitionStack.push({ uri: source.toString(), applicationContext: false })
+ if (appId) {
+ dataContainer.setCurrentApplication(appId)
+ }
+ currentLocation = path
+ source = path
+ }
+ }
+ console.debug("exit")
+ }
+
+ function back() {
+ if (viewTransitionStack.length) {
+ source = viewTransitionStack.pop().uri
+ }
+ currentLocation = ""
+ }
+
+ onStatusChanged: {
+ if (status == Component.Ready) {
+ if (!dataContainer.activeAlert) {
+ dataContainer.applicationContext = item.applicationContext
+ }
+ else {
+ dataContainer.applicationSavedContext = item.applicationContext
+ }
+ if (viewTransitionStack && viewTransitionStack.length) {
+ viewTransitionStack[viewTransitionStack.length - 1].applicationContext = item.applicationContext
+ }
+ dataContainer.setSystemContext()
+ }
+ }
+ }
+ }
+
+ WarningInfo { id: warningInfo }
+
+ InteractionPopup {
+ id: interactionPopup
+ popUpName: "UI.PerformInteraction"
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ SliderPopup {
+ id: sliderPopup
+ popUpName: "UI.Slider"
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ PerformAudioPassThruPopup {
+ id: performAudioPassThruPopup
+ popUpName: "UI.PerformAudioPassThru"
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ VRHelpPopup {
+ id: vrHelpPopup
+ popUpName: "UI.VrHelp"
+ anchors.centerIn: parent
+ visible: false
+ }
+
+ AlertWindow {
+ id: alertWindow
+ popUpName: "UI.Alert"
+ objectName: "AlertWindow"
+ anchors.fill: parent
+ visible: false
+ }
+ }
+
+ Item {
+ id: simulationScreen
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.left: mainScreen.right
+ width: simulationPanel.width
+ clip: true
+ SimulationView {
+ id: simulationPanel
+
+ VRPopUp {
+ id: vrPopUp
+ visible: false
+ anchors.fill: parent
+ }
+
+ TTSPopUp {
+ id: ttsPopUp
+ anchors.top: parent.top
+ anchors.right: parent.right
+ visible: false
+ }
+ }
+ }
+
+ Item {
+ id: hardwareScreen
+ anchors.top: mainScreen.bottom
+ anchors.left: parent.left
+ anchors.right: simulationScreen.left
+ height: hardwarePanel.height
+ clip: true
+ HardwareButtonsView { id: hardwarePanel }
+ }
+
+ HMIProxy {
+ HmiApi.ButtonsProxy {
+ id: sdlButtons
+ objectName: "Buttons"
+ }
+ HmiApi.BasicCommunicationProxy {
+ id: sdlBasicCommunication
+ objectName: "BasicCommunication"
+ }
+ HmiApi.VRProxy {
+ id: sdlVR
+ objectName: "VR"
+ }
+ HmiApi.TTSProxy {
+ id: sdlTTS
+ objectName: "TTS"
+ }
+ HmiApi.NavigationProxy {
+ id: sdlNavigation
+ objectName: "Navigation"
+ }
+ HmiApi.VehicleInfoProxy {
+ id: sdlVehicleInfo
+ objectName: "VehicleInfo"
+ }
+ HmiApi.UIProxy {
+ id: sdlUI
+ objectName: "UI"
+ }
+ }
+
+ SDLProxy {
+ id: sdlProxy
+
+ onAppRegistered: {
+ dataContainer.addApplication(
+ {
+ appName: application.appName,
+ ngnMediaScreenAppName: application.ngnMediaScreenAppName,
+ icon: application.icon,
+ deviceName: application.deviceName,
+ appId: application.appId,
+ hmiDisplayLanguageDesired: application.hmiDisplayLanguageDesired,
+ isMediaApplication: application.isMediaApplication,
+ appType: application.appType,
+ hmiUIText: { },
+ mediaClock: {
+ "updateMode": Internal.MediaClockUpdateMode.MCU_COUNTUP,
+ "runningMode": Internal.MediaClockRunningMode.MCR_STOPPED,
+ "startTime": -1,
+ "endTime": -1,
+ "startTimeForProgress": -1
+ }
+ });
+ }
+
+ onAppUnregistered: {
+ console.debug("enter")
+ dataContainer.removeApplication(appId);
+ if ((dataContainer.currentApplication.appId === appId)) {
+ if (dataContainer.applicationContext) {
+ contentLoader.go("views/ApplicationListView.qml");
+ }
+ if (contentLoader.viewTransitionStack.filter(function(x) { return x.applicationContext })) {
+ contentLoader.reset();
+ }
+ dataContainer.currentApplication.reset()
+ }
+ console.debug("exit")
+ }
+
+ onPlayTone: {
+ beep.play()
+ }
+
+ }
+
+ Component.onCompleted: {
+ dataContainer.hmiVRAvailable = true
+ dataContainer.hmiTTSAvailable = true
+ dataContainer.hmiNavigationAvailable = true
+ dataContainer.hmiVehicleInfoAvailable = true
+ dataContainer.hmiUIAvailable = true
+
+ sdlBasicCommunication.onReady()
+ }
+
+ /*
+ * Test Support Section
+ *
+ */
+ function getSlider(){
+ return sliderPopup
+ }
+
+ function getDataStorage(){
+ return dataContainer
+ }
+
+ function getUIProxy(){
+ return sdlUI
+ }
+
+ function getMainScreen(){
+ return mainScreen
+ }
+
+ function getContentLoader(){
+ return contentLoader
+ }
+
+ function getWarningInfo(){
+ return warningInfo
+ }
+ /*
+ * Test Support Section End
+ */
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ArrowKeys.qml b/src/components/qt_hmi/qml_model_qt4/controls/ArrowKeys.qml
new file mode 100644
index 0000000000..4f33960127
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ArrowKeys.qml
@@ -0,0 +1,68 @@
+/**
+ * @file ArrowKeys.qml
+ * @brief Keys with arrow for cursor movement.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+Item {
+ width: buttonOk.width
+ height: buttonOk.height
+
+ HardwareButton {
+ id: arrowUp
+ buttonId: Common.ButtonName.TUNEUP
+ name: "Up"
+ }
+ HardwareButton {
+ id: arrowDown
+ buttonId: Common.ButtonName.TUNEDOWN
+ name: "Down"
+ }
+ HardwareButton {
+ id: arrowLeft
+ buttonId: Common.ButtonName.SEEKLEFT
+ name: "Left"
+ }
+ HardwareButton {
+ id: arrowRight
+ buttonId: Common.ButtonName.SEEKRIGHT
+ name: "Right"
+ }
+ HardwareButton {
+ id: buttonOk
+ buttonId: Common.ButtonName.OK
+ name: "Ok"
+ longPressAvailable: false
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/BackButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/BackButton.qml
new file mode 100644
index 0000000000..906b3098ba
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/BackButton.qml
@@ -0,0 +1,48 @@
+/**
+ * @file BackButton.qml
+ * @brief Button "Back" that return to previous menu.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+OvalButton {
+ text: "Back"
+ onClicked: { contentLoader.back() }
+ fontSize: Constants.fontSize
+ opacity: 0
+
+ NumberAnimation on opacity {
+ to: 1;
+ duration: Constants.animationDuration
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/CheckBox.qml b/src/components/qt_hmi/qml_model_qt4/controls/CheckBox.qml
new file mode 100644
index 0000000000..39d693b971
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/CheckBox.qml
@@ -0,0 +1,78 @@
+/**
+ * @file CheckBox.qml
+ * @brief Check box
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ property alias text: text.text
+ property alias color: text.color
+ property bool checked: false
+
+ signal clicked
+
+ onCheckedChanged: {
+ selector.color = checked ? Constants.primaryColorPressed : Constants.transparentColor
+ }
+
+ height: checkbox.height + Constants.generalSpacing / 2
+ width: checkbox.width + text.width + 1.5 * Constants.generalSpacing
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: { checked = !checked; parent.clicked() }
+ }
+ Rectangle {
+ id: checkbox
+ width: text.font.pixelSize + Constants.generalSpacing / 2
+ height: width
+ anchors.left: parent.left
+ border.color: Constants.controlsBorderColor
+ border.width: Constants.controlsBorderWidth
+ color: Constants.panelTextColor
+ radius: Constants.controlsRadius
+ Rectangle {
+ id: selector
+ anchors.fill: parent
+ anchors.margins: checkbox.width / 8
+ color: Constants.transparentColor
+ }
+ }
+ Text {
+ id: text
+ anchors.left: checkbox.right
+ anchors.leftMargin: Constants.generalSpacing
+ anchors.verticalCenter: checkbox.verticalCenter
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/CircleButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/CircleButton.qml
new file mode 100644
index 0000000000..818f07ffc5
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/CircleButton.qml
@@ -0,0 +1,87 @@
+/**
+ * @file CircleButton.qml
+ * @brief Parent class for circle button.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Image {
+ id: circleBtn
+ source: imgOff
+ property alias text: btnText.text
+ property alias pixelSize: btnText.font.pixelSize
+ property string dest: ""
+ property bool isPressed: false
+ property string imgOff: "../res/buttons/round_btn.png"
+ property string imgOn: "../res/buttons/round_pressed_btn.png"
+ property string textColorOnPressed: Constants.secondaryColor
+ property string textColorDefault: Constants.primaryColor
+
+ signal clicked()
+ function wasClicked()
+ {
+ clicked()
+ }
+
+ Text {
+ anchors.centerIn: parent
+ id: btnText
+ color: textColorDefault
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ console.log("CircleButton onPressed enter");
+ source = imgOn
+ btnText.color = textColorOnPressed
+ isPressed = true
+ console.log("CircleButton onPressed exit");
+ }
+ onReleased: {
+ console.log("CircleButton onReleased enter");
+ source = imgOff
+ btnText.color = textColorDefault
+ isPressed = false
+ console.log("CircleButton onReleased exit");
+ }
+ onClicked: {
+ console.log("CircleButton onClicked enter");
+ if(dest !== ""){
+ contentLoader.go(dest)
+ }
+ circleBtn.wasClicked()
+ console.log("CircleButton onClicked enter");
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ClickableImage.qml b/src/components/qt_hmi/qml_model_qt4/controls/ClickableImage.qml
new file mode 100644
index 0000000000..f35f7c3020
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ClickableImage.qml
@@ -0,0 +1,66 @@
+/**
+ * @file ClickableImage.qml
+ * @brief Clickable image item
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Image {
+ signal pressed ()
+ signal released ()
+ signal canceled ()
+ signal clicked()
+
+ MouseArea {
+ anchors.fill: parent
+
+ onPressed: {
+ parent.scale = Constants.pressedIconScale
+ parent.pressed()
+ }
+
+ onReleased: {
+ parent.scale = 1
+ parent.released()
+ }
+
+ onCanceled: {
+ parent.scale = 1
+ parent.canceled()
+ }
+
+ onClicked: {
+ parent.clicked()
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ClickableText.qml b/src/components/qt_hmi/qml_model_qt4/controls/ClickableText.qml
new file mode 100644
index 0000000000..e6b9fbf246
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ClickableText.qml
@@ -0,0 +1,77 @@
+/**
+ * @file ClickableText.qml
+ * @brief Clickable text item
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Text {
+ property string defaultColor
+ property string pressedColor
+ signal pressed ()
+ signal released ()
+ signal canceled ()
+ signal clicked ()
+
+ color: defaultColor
+
+ MouseArea {
+ anchors.fill: parent
+
+ onPressed: {
+ press()
+ parent.pressed()
+ }
+
+ onReleased: {
+ release()
+ parent.released()
+ }
+
+ onCanceled: {
+ release()
+ parent.canceled()
+ }
+
+ onClicked: {
+ parent.clicked()
+ }
+ }
+
+ function press () {
+ color = pressedColor
+ }
+
+ function release () {
+ color = defaultColor
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ClimateControlBtn.qml b/src/components/qt_hmi/qml_model_qt4/controls/ClimateControlBtn.qml
new file mode 100644
index 0000000000..abd344272c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ClimateControlBtn.qml
@@ -0,0 +1,93 @@
+/**
+ * @file ClimateControlBtn.qml
+ * @brief Round button, which is used at climat menu.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item
+{
+ id: climateControlBtn
+ width: climateBtnImg.width
+ height: climateBtnImg.height
+ property string name: ""
+ property string txt: ""
+ state: "off"
+
+ Image {
+ id: climateBtnImg
+ source: climateControlBtn.state === "off" ? "../res/climate/climate_round_off_btn.png" : "../res/climate/climate_round_on_btn.png"
+
+ Image {
+ id: hoverImg
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ property string st: climateControlBtn.state === "off" ? "_off" : "_on"
+ source: climateControlBtn.name === "" ? "": "../res/climate/" + climateControlBtn.name + st + ".png"
+ }
+
+ Text {
+ id: hoverText
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ text: climateControlBtn.txt
+ font.pixelSize: Constants.fontSize
+ color: climateControlBtn.state === "off" ? Constants.primaryColor : Constants.secondaryColor
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ if(climateControlBtn.state === "on") {
+ climateControlBtn.state = "off"
+ climateBtnImg.source = "../res/climate/climate_round_off_btn.png"
+ if(climateControlBtn.txt != "") {
+ hoverText.color = Constants.primaryColor
+ }
+ if(climateControlBtn.name != "") {
+ hoverImg.source = "../res/climate/" + climateControlBtn.name + "_off.png"
+ }
+ } else {
+ climateControlBtn.state = "on"
+ climateBtnImg.source = "../res/climate/climate_round_on_btn.png"
+ if(climateControlBtn.txt != "") {
+ hoverText.color = Constants.secondaryColor
+ }
+ if(climateControlBtn.name != "") {
+ hoverImg.source = "../res/climate/" + climateControlBtn.name + "_on.png"
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ComboBox.qml b/src/components/qt_hmi/qml_model_qt4/controls/ComboBox.qml
new file mode 100644
index 0000000000..d5129a2a10
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ComboBox.qml
@@ -0,0 +1,143 @@
+/**
+ * @file ComboBox.qml
+ * @brief Combo box
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ id: container
+ width: Constants.defaultComboboxWidth
+ height: main.height
+
+ property alias model: listView.model
+ property alias currentIndex: listView.currentIndex
+ property alias currentText: textMain.text
+ property string textRole
+
+ function choose(name) {
+ var count = listView.count
+ for (var i = 0; i < count; ++i) {
+ if (name === listView.model.get(i).name) {
+ listView.currentIndex = i
+ break
+ }
+ }
+
+ textMain.text = name
+ }
+
+ Rectangle {
+ id: main
+
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: label.font.pixelSize + Constants.generalSpacing
+ color: Constants.panelTextColor
+ border.color: Constants.controlsBorderColor
+ border.width: Constants.controlsBorderWidth
+ radius: Constants.controlsRadius
+
+ Text {
+ id: textMain
+ anchors.left: parent.left
+ anchors.right: arrow.left
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ color: Constants.secondaryColor
+ verticalAlignment: Text.AlignVCenter
+ anchors.leftMargin: Constants.generalSpacing
+ anchors.rightMargin: Constants.generalSpacing
+ elide: Text.ElideRight
+ }
+
+ Rectangle {
+ id: arrow
+ anchors.right: parent.right
+ height: parent.height; width: height
+
+ color: Constants.panelTextColor
+ border.color: Constants.controlsBorderColor
+ border.width: Constants.controlsBorderWidth
+ radius: Constants.controlsRadius
+
+ Text {
+ anchors.fill: parent
+ text: "v"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ color: Constants.secondaryColor
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: listView.visible = !listView.visible
+ }
+ }
+
+ ScrollableListView {
+ id: listView
+ anchors.top: main.bottom
+ anchors.left: main.left
+ anchors.right: main.right
+ height: 150
+ visible: false
+ delegate: Rectangle {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: label.font.pixelSize + Constants.generalSpacing
+ color: Constants.panelTextColor
+ border.color: Constants.controlsBorderColor
+ border.width: Constants.controlsBorderWidth
+ Text {
+ id: label
+ anchors.fill: parent
+ anchors.leftMargin: Constants.generalSpacing
+ anchors.rightMargin: Constants.generalSpacing
+ verticalAlignment: Text.AlignVCenter
+ text: model.name
+ color: Constants.secondaryColor
+ elide: Text.ElideRight
+ }
+ MouseArea {
+ anchors.fill: parent
+ hoverEnabled: true
+ onClicked: { choose(model.name); listView.visible = false }
+ onEntered: { parent.color = Constants.primaryColorPressed }
+ onExited: { parent.color = Constants.panelTextColor }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/GradientRectangle.qml b/src/components/qt_hmi/qml_model_qt4/controls/GradientRectangle.qml
new file mode 100644
index 0000000000..7b21bb4567
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/GradientRectangle.qml
@@ -0,0 +1,125 @@
+/**
+ * @file GradientRectangle.qml
+ * @brief Rectangle with gradient.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+
+Rectangle {
+ property string firstColor: "grey"
+ property string secondColor: "#2E2E2E"
+ property alias fontSize: text.font.pixelSize
+ property alias text: text.text
+ property int customButtonID
+ property bool isCustomButton: false
+ property bool clickProcessed
+ signal pressed()
+ signal released()
+
+ radius: 5
+ border.color: "#D3D3D3"
+
+ Text {
+ id: text
+ anchors.fill: parent
+ font.pixelSize: Constants.titleFontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ elide: Text.ElideRight
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ onPressed: {
+ firstColor = "#2E2E2E"
+ secondColor = "grey"
+ parent.pressed()
+ }
+ onReleased: {
+ firstColor = "grey"
+ secondColor = "#2E2E2E"
+ parent.released()
+ }
+ }
+
+ Timer {
+ id: timer
+ interval: Constants.customButtonTimer
+ repeat: false
+ triggeredOnStart: false
+ }
+
+ onPressed: {
+ if (isCustomButton) {
+ timer.start()
+ clickProcessed = false
+ sdlButtons.onButtonEvent(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonEventMode.BUTTONDOWN, customButtonID)
+ }
+ }
+
+ onReleased: {
+ if (isCustomButton) {
+ sdlButtons.onButtonEvent(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonEventMode.BUTTONUP, customButtonID)
+ timer.stop()
+ if (!clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonPressMode.SHORT, customButtonID)
+ }
+ }
+ }
+
+ Connections {
+ target: timer
+ onTriggered: {
+ if (isCustomButton) {
+ if(!clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonPressMode.LONG, customButtonID)
+ clickProcessed = true
+ }
+ }
+ }
+ }
+
+ gradient: Gradient {
+ GradientStop {
+ position: 0.1
+ color: firstColor
+ }
+ GradientStop {
+ position: 0.5
+ color: secondColor
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/GridItem.qml b/src/components/qt_hmi/qml_model_qt4/controls/GridItem.qml
new file mode 100644
index 0000000000..84528ab800
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/GridItem.qml
@@ -0,0 +1,53 @@
+/**
+ * @file GridItem.qml
+ * @brief Item with animation for GridMenu
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ id: item
+ opacity: 0
+ SequentialAnimation {
+ id: animation
+ PauseAnimation {duration: index * 100 }
+ NumberAnimation {
+ target: item
+ duration: Constants.animationDuration
+ property: "opacity"
+ from: 0; to: 1;
+ }
+ }
+ Component.onCompleted: {
+ animation.start()
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/HardwareButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/HardwareButton.qml
new file mode 100644
index 0000000000..ea8e406c6e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/HardwareButton.qml
@@ -0,0 +1,108 @@
+/**
+ * @file HardwareButton.qml
+ * @brief Parent class for hardware button.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import com.ford.sdl.hmi.hw_buttons 1.0
+import "../hmi_api/Common.js" as Common
+
+MaskedContainer {
+ property string name
+ property int buttonId: Common.ButtonName.CUSTOM_BUTTON
+ property bool upDownAvailable: true
+ property bool shortPressAvailable: true
+ property bool longPressAvailable: true
+
+ signal hold
+
+ Image {
+ source: "../res/controlButtons/" + name + "Button.png"
+ }
+ Image {
+ id: pressedImg
+ source: "../res/controlButtons/" + name + "Button_pressed.png"
+ visible: false
+ Behavior on opacity {
+ NumberAnimation { duration: 80 }
+ }
+ }
+ Timer {
+ id: timer
+ interval: 2000
+ repeat: false
+ triggeredOnStart: false
+ }
+ property bool clickProcessed
+ onPressed: {
+ clickProcessed = false
+ pressedImg.visible = true
+ timer.start()
+ if (upDownAvailable) {
+ sdlButtons.onButtonEvent(buttonId, Common.ButtonEventMode.BUTTONDOWN, undefined)
+ }
+ }
+
+ onReleased: {
+ if (upDownAvailable) {
+ sdlButtons.onButtonEvent(buttonId, Common.ButtonEventMode.BUTTONUP, undefined)
+ }
+ timer.stop()
+ if (!clickProcessed && shortPressAvailable) {
+ sdlButtons.onButtonPress(buttonId, Common.ButtonPressMode.SHORT, undefined)
+ }
+ pressedImg.visible = false
+ }
+
+ Connections {
+ target: timer
+ onTriggered: {
+ if(!clickProcessed && longPressAvailable) {
+ sdlButtons.onButtonPress(buttonId, Common.ButtonPressMode.LONG, undefined)
+ clickProcessed = true
+ hold()
+ }
+ }
+ }
+
+ Component.onCompleted: {
+ if (buttonId !== Common.ButtonName.CUSTOM_BUTTON) {
+ settingsContainer.buttonCapabilities.push(
+ {
+ name: buttonId,
+ upDownAvailable: upDownAvailable,
+ shortPressAvailable: shortPressAvailable,
+ longPressAvailable: longPressAvailable
+ });
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/HeaderMenu.qml b/src/components/qt_hmi/qml_model_qt4/controls/HeaderMenu.qml
new file mode 100644
index 0000000000..2b0b418c54
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/HeaderMenu.qml
@@ -0,0 +1,134 @@
+/**
+ * @file HeaderMenu.qml
+ * @brief Header menu view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ id: headerMenu
+ anchors.fill: parent
+
+ Text {
+ anchors.leftMargin: Constants.margin
+ anchors.topMargin: Constants.margin
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize
+ text: "75°"
+ }
+
+ Item {
+ width: menuText.width
+ height: parent.height
+ anchors.topMargin: Constants.margin
+ anchors.horizontalCenter: headerMenu.horizontalCenter
+ signal clicked ()
+
+ ClickableText {
+ id: menuLogo
+ anchors.horizontalCenter: menuText.horizontalCenter
+ anchors.bottom: parent.verticalCenter
+ text: "≡"
+ defaultColor: Constants.primaryColor
+ pressedColor: Constants.primaryColorPressed
+ font.pixelSize: Constants.fontSize
+
+ onClicked: parent.clicked()
+ onPressed: menuLogo.press()
+ onReleased: menuLogo.release()
+ onCanceled: menuLogo.release()
+ }
+
+ ClickableText {
+ id: menuText
+ anchors.top: parent.verticalCenter
+ text: "MENU";
+ defaultColor: Constants.primaryColor
+ pressedColor: Constants.primaryColorPressed
+ font.pixelSize: Constants.fontSize
+
+ onClicked: parent.clicked()
+ onPressed: menuText.press()
+ onReleased: menuText.release()
+ onCanceled: menuText.release()
+ }
+
+ onClicked: {
+ contentLoader.go("./views/MainMenuView.qml")
+ }
+ }
+
+ Row {
+ id: clock
+ height: childrenRect.height
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.rightMargin: Constants.margin
+ anchors.topMargin: Constants.margin
+ property date date: new Date()
+
+ Timer {
+ running: true
+ repeat: true
+ interval: 1000
+ onTriggered: {
+ clock.date = new Date();
+ }
+ }
+
+ Text {
+ text: Qt.formatTime(clock.date, "hh");
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize;
+ }
+
+ Item {
+ width: 10
+ height: parent.height
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: clock.date.getSeconds() % 2 ? ":" : ""
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize;
+ }
+ }
+
+ Text {
+ text: Qt.formatTime(clock.date, "mm");
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize;
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/Icon.qml b/src/components/qt_hmi/qml_model_qt4/controls/Icon.qml
new file mode 100644
index 0000000000..d0bfdba78b
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/Icon.qml
@@ -0,0 +1,65 @@
+/**
+ * @file Navigation.qml
+ * @brief Icon.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+Item {
+ property variant source
+
+ Image {
+ anchors.fill: parent
+ source: url(parent.source)
+
+ function image(turnIcon) {
+ if (turnIcon && turnIcon.imageType === Common.ImageType.STATIC) {
+ return turnIcon.value;
+ } else {
+ return "";
+ }
+ }
+
+ function url(turnIcon) {
+ if (turnIcon && turnIcon.imageType === Common.ImageType.DYNAMIC) {
+ return turnIcon.value;
+ } else {
+ return "";
+ }
+ }
+ }
+
+ function reset () {
+ source = undefined
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ListItem.qml b/src/components/qt_hmi/qml_model_qt4/controls/ListItem.qml
new file mode 100644
index 0000000000..c87c24de4d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ListItem.qml
@@ -0,0 +1,70 @@
+/**
+ * @file Entry.qml
+ * @brief Entry with icon and text for list.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Rectangle {
+ id: main
+ color: Constants.transparentColor
+
+ property alias text: label.text
+ property alias fontSize: label.font.pixelSize
+ property alias icon: image.source
+
+ Icon {
+ id: image
+ width: Constants.iconItemListSize
+ height: Constants.iconItemListSize
+ anchors.left: parent.left
+ anchors.leftMargin: Constants.generalSpacing
+ anchors.verticalCenter: parent.verticalCenter
+ visible: source ? true : false
+ }
+ Text {
+ id: label
+ anchors.verticalCenter: parent.verticalCenter
+ height: image.height
+ width: parent.width - image.width
+ z: 50
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: Constants.fontSize
+ text: "Name Entry"
+ anchors.left: image.right
+ anchors.leftMargin: Constants.generalSpacing
+ anchors.verticalCenterOffset: 0
+ visible: text !== ""
+ color: Constants.primaryColor
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/MaskedButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/MaskedButton.qml
new file mode 100644
index 0000000000..d8a95d1a00
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/MaskedButton.qml
@@ -0,0 +1,64 @@
+/**
+ * @file MaskedButton.qml
+ * @brief Masked button.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import com.ford.sdl.hmi.hw_buttons 1.0
+
+MaskedContainer {
+ property string name
+
+ Image {
+ id: icon
+ source: "../res/controlButtons/" + name + "Button.png"
+ }
+
+ onPressed: {
+ state = "pressed";
+ }
+
+ onReleased: {
+ state = "";
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ PropertyChanges {
+ target: icon
+ source: "../res/controlButtons/" + name + "Button_pressed.png"
+ }
+ }
+
+ ]
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/MultiTouchArea.qml b/src/components/qt_hmi/qml_model_qt4/controls/MultiTouchArea.qml
new file mode 100644
index 0000000000..e86dcedc8f
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/MultiTouchArea.qml
@@ -0,0 +1,77 @@
+/**
+ * @file MultiTouchArea.qml
+ * @brief Area for multitouch.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+MultiPointTouchArea {
+ readonly property int created: Date.now()
+
+ signal pressed(var touchPoints)
+ signal released(var touchPoints)
+ signal canceled(var touchPoints)
+ signal updated(var touchPoints)
+
+ function fillEvent(touchPoints) {
+ var event = []
+ for (var i = 0; i < touchPoints.length; ++i) {
+ event.push({
+ id: touchPoints[i].pointId,
+ ts: [Date.now() - created],
+ c: [{ x: touchPoints.x, y: touchPoints.y }] // TODO(KKolodiy): need cast to int
+ })
+ }
+ return event
+ }
+
+ minimumTouchPoints: 1
+ maximumTouchPoints: 10
+
+ onPressed: {
+ sdlUI.onTouchEvent(Common.BEGIN, fillEvent(touchPoints))
+ parent.pressed(touchPoints)
+ }
+ onReleased: {
+ sdlUI.onTouchEvent(Common.END, fillEvent(touchPoints))
+ parent.released(touchPoints)
+ }
+ onCanceled: {
+ sdlUI.onTouchEvent(Common.END, fillEvent(touchPoints))
+ parent.canceled(touchPoints)
+ }
+ onUpdated: {
+ sdlUI.onTouchEvent(Common.MOVE, fillEvent(touchPoints))
+ parent.updated(touchPoints)
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/OvalButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/OvalButton.qml
new file mode 100644
index 0000000000..59458499a7
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/OvalButton.qml
@@ -0,0 +1,240 @@
+/**
+ * @file OvalButton.qml
+ * @brief Oval button with flexible width.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import com.ford.sdl.hmi.hw_buttons 1.0
+import "../models/Constants.js" as Constants
+
+// Don't change constants. It break button
+// TODO (dchmerev@luxoft.com): make this comment more clear
+// todo (ykazakov): eliminate this problem and remove all such comments
+
+Item {
+ id: main
+ width: dynamic ? field.width + 2 * left.width : Constants.ovalButtonWidth
+ height: Constants.ovalButtonHeight
+
+ signal clicked;
+ signal pressed;
+ signal released;
+ signal pressAndHold;
+ property alias text: label.text
+ property alias fontSize: label.font.pixelSize
+ property alias icon: image.source
+ property bool highlighted: false
+ property bool dynamic: false
+ property bool disabled: false
+ property color colorizeColor
+ property real colorizeStrength
+
+ onDisabledChanged: colorize()
+ onHighlightedChanged: colorize()
+ Component.onCompleted: colorize()
+
+ function colorize() {
+ if (disabled) {
+ colorizeColor = "gray";
+ colorizeStrength = 1;
+ } else if (highlighted) {
+ colorizeColor = "cyan";
+ colorizeStrength = 1;
+ } else {
+ colorizeStrength = 0;
+ }
+ }
+
+ Item {
+ id: buttonBorderImage
+ visible: true
+ anchors.fill: parent
+ Image {
+ id: left
+ width: 31
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ anchors.top: parent.top
+ source: "../res/buttons/oval_btn_left.png"
+ effect: Colorize {
+ color: main.colorizeColor
+ strength: main.colorizeStrength
+ }
+ }
+
+ Image {
+ id: right
+ width: 31
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ anchors.right: parent.right
+ source: "../res/buttons/oval_btn_right.png"
+ effect: Colorize {
+ color: main.colorizeColor
+ strength: main.colorizeStrength
+ }
+ }
+
+ Image {
+ id: top
+ height: 10
+ anchors.right: parent.right
+ anchors.rightMargin: 31
+ anchors.left: parent.left
+ anchors.leftMargin: 31
+ anchors.top: parent.top
+ fillMode: Image.TileHorizontally
+ source: "../res/buttons/oval_btn_top.png"
+ effect: Colorize {
+ color: main.colorizeColor
+ strength: main.colorizeStrength
+ }
+ }
+
+ Image {
+ id: bottom
+ height: 11
+ anchors.right: parent.right
+ anchors.rightMargin: 31
+ anchors.left: parent.left
+ anchors.leftMargin: 31
+ anchors.bottom: parent.bottom
+ fillMode: Image.TileHorizontally
+ source: "../res/buttons/oval_btn_bottom.png"
+ effect: Colorize {
+ color: main.colorizeColor
+ strength: main.colorizeStrength
+ }
+ }
+ }
+
+ Rectangle {
+ id: background
+ color: Constants.transparentColor
+ anchors.fill: parent
+ anchors.rightMargin: 31
+ anchors.leftMargin: 31
+ anchors.bottomMargin: 10
+ anchors.topMargin: 10
+ visible: true
+ effect: Colorize {
+ color: main.colorizeColor
+ strength: main.colorizeStrength
+ }
+ }
+
+ MouseArea {
+ id: mousearea
+ anchors.rightMargin: 15
+ anchors.leftMargin: 15
+ anchors.bottomMargin: 11
+ anchors.topMargin: 10
+ anchors.fill: parent
+ enabled: !parent.disabled
+ onPressed: {
+ parent.state = "pressed";
+ parent.pressed();
+ }
+ onReleased: {
+ parent.state = "";
+ parent.released();
+ }
+ onClicked: {
+ parent.clicked();
+ }
+ onPressAndHold: {
+ parent.pressAndHold();
+ }
+ onCanceled: {
+ parent.state = "";
+ }
+ }
+
+ Item {
+ id: field
+ anchors.fill: background
+
+ Icon {
+ id: image
+ width: Constants.iconButtonSize
+ height: Constants.iconButtonSize
+ anchors.verticalCenter: parent.verticalCenter
+ visible: source ? true : false
+ }
+ Text {
+ id: label
+ width: image.visible ? parent.width - image.width : parent.width
+ color: Constants.primaryColor
+ anchors.centerIn: parent
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ font.pixelSize: Constants.ovalButtonFontSize
+ visible: true
+ elide: Text.ElideRight
+ effect: Colorize {
+ id: colorizeLabel
+ color: main.colorizeColor
+ strength: main.colorizeStrength
+ }
+ }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ PropertyChanges {
+ target: left
+ source: "../res/buttons/oval_btn_pressed_left.png"
+ }
+
+ PropertyChanges {
+ target: right
+ source: "../res/buttons/oval_btn_pressed_right.png"
+ }
+
+ PropertyChanges {
+ target: background
+ color: Constants.primaryColor
+ }
+
+ PropertyChanges {
+ target: label
+ color: Constants.secondaryColor
+ }
+
+ PropertyChanges {
+ target: colorizeLabel
+ strength: 0
+ }
+ }
+ ]
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/PagedFlickable.qml b/src/components/qt_hmi/qml_model_qt4/controls/PagedFlickable.qml
new file mode 100644
index 0000000000..6d40ad6478
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/PagedFlickable.qml
@@ -0,0 +1,105 @@
+/**
+ * @file PagedFlickable.qml
+ * @brief Animated row.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Item
+{
+ id: flickablePage
+ height: container.height + pager.height
+ default property alias content: containerRow.children
+ property alias spacing: containerRow.spacing
+ property int elementWidth
+ property int snapTo
+ property int count: 0
+
+ Flickable {
+ id: container
+ anchors.bottom: parent.bottom
+ maximumFlickVelocity: 1500
+ contentWidth: containerRow.width
+ height: containerRow.height
+ width: parent.width
+ interactive: contentWidth > width
+
+ onMovementEnded: {
+ var rest = contentX % snapTo
+ var t = 0.25
+ if (rest > parent.snapTo / 2) {
+ rest = rest - parent.snapTo
+ }
+ var vel = 2 * rest / t
+ flickDeceleration = Math.abs(vel) / t
+ flick(vel, 0)
+ flickDeceleration = 1500
+ }
+ Row {
+ id: containerRow
+ anchors.verticalCenter: parent.verticalCenter
+ }
+ }
+
+ Pager {
+ id: pager
+ space: 7
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+
+ pages: {
+ if ( (container.contentWidth % container.width) >= (flickablePage.elementWidth / 2 + flickablePage.spacing)) {
+ return Math.ceil(container.contentWidth / container.width)
+ }
+ else {
+ return Math.floor(container.contentWidth / container.width)
+ }
+ }
+
+ activePage: {
+ if (container.contentX <= 0) {
+ return 0
+ }
+ else if ( (container.contentWidth - container.contentX) < container.width) {
+ return pages -1
+ }
+ else {
+ if ( (container.contentX % container.width) >= (flickablePage.elementWidth / 2 + flickablePage.spacing)) {
+ return Math.ceil(container.contentX / container.width)
+ }
+ else if ( (container.contentX % container.width) > 0) {
+ return Math.floor(container.contentX / container.width)
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/Pager.qml b/src/components/qt_hmi/qml_model_qt4/controls/Pager.qml
new file mode 100644
index 0000000000..471d932113
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/Pager.qml
@@ -0,0 +1,53 @@
+/**
+ * @file Pager.qml
+ * @brief Bubbles that indicate about page switch.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Row {
+ id: pager
+ property int pages
+ property int activePage: 0
+ property int space
+ property int itemsInRowOnScreen: 3
+
+ spacing: space
+ visible: pages !== 1
+
+ Repeater {
+ model: pages
+ Image {
+ source: index === activePage ? "../res/white_ball.png" : "../res/blue_ball.png"
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/PlayPauseButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/PlayPauseButton.qml
new file mode 100644
index 0000000000..825884cc1e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/PlayPauseButton.qml
@@ -0,0 +1,77 @@
+/**
+ * @file PlayPauseButton.qml
+ * @brief Behavior of Play/Pause button.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Image {
+ id: playPauseButton
+ property string sourceOnPressed: ""
+ property string sourceOnReleased: ""
+
+ signal clicked
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ playPauseButton.source = playPauseButton.sourceOnPressed
+ }
+ onReleased: {
+ playPauseButton.source = playPauseButton.sourceOnReleased
+ }
+ onClicked: {
+ playPauseButton.clicked()
+ }
+ }
+ states: [
+ State {
+ name: "Play"
+ PropertyChanges {
+ target: playPauseButton
+ source: "../res/buttons/player_play_btn.png"
+ sourceOnPressed: "../res/buttons/player_play_pressed_btn.png"
+ sourceOnReleased: "../res/buttons/player_pause_btn.png"
+ }
+ },
+
+ State {
+ name: "Pause"
+ PropertyChanges {
+ target: playPauseButton
+ source: "../res/buttons/player_pause_btn.png"
+ sourceOnPressed: "../res/buttons/player_pause_pressed_btn.png"
+ sourceOnReleased: "../res/buttons/player_play_btn.png"
+ }
+ }
+ ]
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/PowerSwitchButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/PowerSwitchButton.qml
new file mode 100644
index 0000000000..2027e1f592
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/PowerSwitchButton.qml
@@ -0,0 +1,75 @@
+/**
+ * @file PowerSwitchBtn.qml
+ * @brief On/Off button.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Rectangle {
+ id: powerSwitchBtn
+ state: "Turn ON"
+ width: 120
+ height: 80
+ radius: 5
+ property bool pressed;
+
+ gradient: Gradient {
+ GradientStop { position: pressed ? 1.0 : 0.0; color: "#2c2c2c" }
+ GradientStop { position: pressed ? 0.0 : 1.0; color: "black" }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.pressed = true
+ }
+ onReleased: {
+ parent.pressed = false
+ parent.state = parent.state === "Turn ON" ? "Turn OFF" : "Turn ON"
+ btnText.text = parent.state
+ if (parent.state === "Turn OFF") {
+ contentLoader.reset()
+ mainScreen.visible = true
+ warningInfo.showOkButton()
+ }
+ }
+ }
+
+ Text {
+ id: btnText
+ color: "red"
+ text: parent.state
+ anchors.centerIn: parent
+ font.pixelSize: Constants.powerButtonFornSize
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/PresetRow.qml b/src/components/qt_hmi/qml_model_qt4/controls/PresetRow.qml
new file mode 100644
index 0000000000..1454ed812d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/PresetRow.qml
@@ -0,0 +1,106 @@
+/**
+ * @file PresetRow.qml
+ * @brief Animated row with radio stations.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ id: presetRow
+ height: childrenRect.height
+ property variant presets: []
+ property int selectedIndex: 0
+ signal presetSelected
+ signal presetButtonPressed()
+ signal presetButtonReleased()
+ signal presetButtonClicked()
+ signal presetButtonHold()
+
+ Image {
+ id: circleButton
+ source: "../res/buttons/preset_pressed_btn.png"
+ visible: false
+ enabled: false
+ }
+
+ PagedFlickable {
+ width: parent.width
+ spacing: (width - (circleButton.width * 4)) / 3
+ snapTo: spacing + circleButton.width
+ elementWidth: circleButton.width
+
+ Repeater {
+ model: presetRow.presets.length
+ delegate:
+ Column {
+ width: circleButton.width
+ Image {
+ anchors.horizontalCenter: parent.horizontalCenter
+ source: presetRow.selectedIndex === index ? "../res/buttons/preset_pressed_btn.png" : "../res/buttons/preset_btn.png"
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ presetRow.selectedIndex = index;
+ presetButtonPressed()
+ }
+ onReleased: {
+ presetRow.selectedIndex = index;
+ presetButtonReleased()
+ }
+ onClicked: {
+ presetRow.selectedIndex = index
+ presetButtonClicked()
+ }
+ onPressAndHold: {
+ presetRow.selectedIndex = index;
+ presetButtonHold()
+ }
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ text: index + 1
+ font.pixelSize: Constants.fontSize
+ color: presetRow.selectedIndex === index ? Constants.secondaryColor : Constants.primaryColor
+ }
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: presetRow.presets[index]
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/PushButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/PushButton.qml
new file mode 100644
index 0000000000..36ee9bbb3f
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/PushButton.qml
@@ -0,0 +1,136 @@
+/**
+ * @file PushButton.qml
+ * @brief Simple button
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Rectangle {
+ id: toggleButton
+ width: 160
+ height: 40
+ radius: 2
+ border.width: 2
+ border.color: "#000000"
+ gradient: grUnpressed
+
+ property alias label : label.text
+
+ signal pressed()
+ signal unpressed()
+ signal clicked()
+
+ property bool toggleMode: false
+
+ state: "unpressed"
+ onStateChanged: {
+ if (state == "pressed") {
+ pressed();
+ } else {
+ unpressed();
+ }
+ }
+
+ Text {
+ id: label
+ color: "white"
+ text: "PushButton"
+ font.pixelSize: 18
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.fill: parent
+ }
+ MouseArea {
+ id: mouseArea
+
+ anchors.fill: parent
+ onPressed: {
+ if (toggleMode) {
+ if (parent.state == "unpressed") {
+ parent.state = "pressed"
+ } else {
+ parent.state = "unpressed"
+ }
+ } else {
+ parent.state = "pressed"
+ }
+ }
+ onReleased: {
+ if (!toggleMode) {
+ parent.state = "unpressed"
+ if (mouse.isClick) {
+ parent.clicked()
+ }
+ }
+ }
+ }
+
+ states: [
+ State {
+ name: "pressed"
+ PropertyChanges {
+ target: toggleButton
+ gradient: grPressed
+ }
+ },
+ State {
+ name: "unpressed"
+ PropertyChanges {
+ target: toggleButton
+ gradient: grUnpressed
+ }
+ }
+ ]
+
+ Gradient {
+ id: grUnpressed
+
+ GradientStop { position: 0.0; color: "#2c2c2c" }
+ GradientStop { position: 1.0; color: "#0c0c0c" }
+ }
+
+ Gradient {
+ id: grPressed
+
+ GradientStop { position: 0.0; color: "black" }
+ GradientStop { position: 1.0; color: "black" }
+ }
+
+ transitions: [
+ Transition {
+ from: "unpressed"
+ to: "pressed"
+ reversible: true
+ }
+ ]
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ScrollableListView.qml b/src/components/qt_hmi/qml_model_qt4/controls/ScrollableListView.qml
new file mode 100644
index 0000000000..cc26c87271
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ScrollableListView.qml
@@ -0,0 +1,49 @@
+/**
+ * @file ScrollableListView.qml
+ * @brief ListView with scrollbar on the right
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+ListView {
+ clip: true
+
+ Rectangle {
+ visible: parent.height < parent.contentHeight
+ anchors.right: parent.right
+ y: parent.visibleArea.yPosition * parent.height
+ width: Constants.scrollBarWidth
+ height: parent.visibleArea.heightRatio * parent.height
+ color: Constants.primaryColor
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/ScrollableText.qml b/src/components/qt_hmi/qml_model_qt4/controls/ScrollableText.qml
new file mode 100644
index 0000000000..82f568414b
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/ScrollableText.qml
@@ -0,0 +1,70 @@
+/**
+ * @file ScrollableText.qml
+ * @brief Text with scrollers if text more than zone
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ property alias text: text.text
+ clip: true
+
+ Flickable {
+ id: flickable
+ anchors.fill: parent
+ contentWidth: text.width
+ contentHeight: text.height
+
+ Text {
+ id: text
+ color: Constants.popUpBorderColor
+ font.pixelSize: Constants.ttsFontSize
+ }
+ }
+ Rectangle {
+ visible: flickable.height < flickable.contentHeight
+ anchors.right: flickable.right
+ y: flickable.visibleArea.yPosition * flickable.height
+ width: Constants.scrollBarWidth
+ height: flickable.visibleArea.heightRatio * flickable.height
+ color: Constants.popUpBorderColor
+ }
+ Rectangle {
+ visible: flickable.width < flickable.contentWidth
+ anchors.bottom: flickable.bottom
+ x: flickable.visibleArea.xPosition * flickable.width
+ height: Constants.scrollBarWidth
+ width: flickable.visibleArea.widthRatio * flickable.width
+ color: Constants.popUpBorderColor
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/SoftButton.js b/src/components/qt_hmi/qml_model_qt4/controls/SoftButton.js
new file mode 100644
index 0000000000..227f638366
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/SoftButton.js
@@ -0,0 +1,39 @@
+/**
+ * @file SoftButton.js
+ * @brief Soft button view constants
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+.pragma library
+
+var Action = {
+ doOnClicked: 0,
+ doOnReleased: 1
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/SoftButton.qml b/src/components/qt_hmi/qml_model_qt4/controls/SoftButton.qml
new file mode 100644
index 0000000000..b92cd51263
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/SoftButton.qml
@@ -0,0 +1,104 @@
+/**
+ * @file SoftButton.qml
+ * @brief Soft button view
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "SoftButton.js" as SoftButton
+
+OvalButton {
+ property variant button
+ property int appId
+ visible: !!button
+
+ signal defaultAction;
+ signal stealFocus;
+ signal keepContext;
+
+ property int actionOrder: SoftButton.Action.doOnClicked
+
+ highlighted: button ? button.isHighlighted : false
+ onPressed: {
+ actionOrder = SoftButton.Action.doOnClicked
+ sdlButtons.onButtonEvent(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonEventMode.BUTTONDOWN, button.softButtonID)
+ }
+
+ onReleased: {
+ if (actionOrder === SoftButton.Action.doOnReleased) {
+ switch (button.systemAction) {
+ case Common.SystemAction.DEFAULT_ACTION:
+ defaultAction();
+ break;
+ case Common.SystemAction.STEAL_FOCUS:
+ if (dataContainer.currentApplication.isMediaApplication) {
+ contentLoader.go("views/SDLPlayerView.qml", appId);
+ } else {
+ contentLoader.go("views/SDLNonMediaView.qml", appId);
+ }
+ stealFocus();
+ break;
+ case Common.SystemAction.KEEP_CONTEXT:
+ keepContext();
+ break;
+ }
+ }
+
+ sdlButtons.onButtonEvent(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonEventMode.BUTTONUP, button.softButtonID)
+ }
+
+ onClicked: {
+ sdlButtons.onButtonPress(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonPressMode.SHORT, button.softButtonID);
+ switch (button.systemAction) {
+ case Common.SystemAction.DEFAULT_ACTION:
+ defaultAction();
+ break;
+ case Common.SystemAction.STEAL_FOCUS:
+ if (dataContainer.currentApplication.isMediaApplication) { contentLoader.go("views/SDLPlayerView.qml", appId); }
+ else { contentLoader.go("views/SDLNonMediaView.qml", appId); }
+ stealFocus();
+ break;
+ case Common.SystemAction.KEEP_CONTEXT:
+ keepContext();
+ break;
+ }
+ }
+
+ onPressAndHold: {
+ actionOrder = SoftButton.Action.doOnReleased; // action should be triggered on release
+ sdlButtons.onButtonPress(Common.ButtonName.CUSTOM_BUTTON, Common.ButtonPressMode.LONG, button.softButtonID);
+ }
+
+ onButtonChanged: {
+ icon = button && button.type !== Common.SoftButtonType.SBT_TEXT ? button.image : undefined;
+ text = button && button.type !== Common.SoftButtonType.SBT_IMAGE ? button.text : ""
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/controls/StatusBar.qml b/src/components/qt_hmi/qml_model_qt4/controls/StatusBar.qml
new file mode 100644
index 0000000000..a6d7640f36
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/controls/StatusBar.qml
@@ -0,0 +1,42 @@
+/**
+ * @file StatusBar.qml
+ * @brief Status bar that contains text string.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Text {
+ text: dataContainer.currentApplication.hmiUIText.statusBar
+ color: Constants.primaryColor
+ font.pixelSize: Constants.statusBarFontSize
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/Async.js b/src/components/qt_hmi/qml_model_qt4/hmi_api/Async.js
new file mode 100644
index 0000000000..ebc5bfa3ca
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/Async.js
@@ -0,0 +1,7 @@
+.pragma library
+
+var async_uid = 1;
+
+function AsyncCall() {
+ this.__async_uid = async_uid++;
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/BasicCommunication.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/BasicCommunication.qml
new file mode 100644
index 0000000000..9d7e0432f2
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/BasicCommunication.qml
@@ -0,0 +1,88 @@
+/**
+ * @file BasicCommunication.qml
+ * @brief Implement of interface Basic Communication.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Item {
+ function updateDeviceList (deviceList) {
+ dataContainer.deviceList.clear();
+ for(var i = 0; i < deviceList.length; i++) {
+ dataContainer.deviceList.append({ name: deviceList[i].name, devid: deviceList[i].id })
+ }
+ }
+
+ function updateAppList (applications) {
+ dataContainer.applicationList.clear();
+ for(var i = 0; i < applications.length; i++) {
+ dataContainer.applicationList.append({
+ appName: applications[i].appName,
+ ngnMediaScreenAppName: applications[i].ngnMediaScreenAppName,
+ icon: applications[i].icon,
+ deviceName: applications[i].deviceName,
+ appId: applications[i].appID,
+ hmiDisplayLanguageDesired: applications[i].hmiDisplayLanguageDesired,
+ isMediaApplication: applications[i].isMediaApplication,
+ appType: applications[i].appType
+ });
+ }
+ }
+
+ function allowDeviceToConnect (device) {
+ return {
+ allow: true
+ }
+ }
+
+ function mixingAudioSupported() {
+ return {
+ attenuatedSupport: true
+ }
+ }
+
+ function allowAllApps() {
+ return {
+ allowed: true
+ }
+ }
+
+ function allowApp(app, appPermissions) {
+ return {
+ allowed: true
+ }
+ }
+
+ function activateApp() {
+ contentLoader.go("views/SDLPlayerView.qml", appID);
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/Buttons.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/Buttons.qml
new file mode 100644
index 0000000000..83ea933eda
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/Buttons.qml
@@ -0,0 +1,48 @@
+/**
+ * @file Buttons.qml
+ * @brief Implement of interface Buttons.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+Item
+{
+ function getCapabilities()
+ {
+ return {
+ capabilities: settingsContainer.buttonCapabilities,
+ presetBankCapabilities: {
+ onScreenPresetsAvailable: true
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/Navigation.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/Navigation.qml
new file mode 100644
index 0000000000..3ec131c8c1
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/Navigation.qml
@@ -0,0 +1,127 @@
+/**
+ * @file Navigation.qml
+ * @brief Navigation.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "Common.js" as Common
+
+Item {
+ function isReady () {
+ return {
+ available: dataContainer.hmiNavigationAvailable
+ }
+ }
+
+ function showConstantTBT(navigationTexts, turnIcon, nextTurnIcon, distanceToManeuver,
+ distanceToManeuverScale, maneuverComplete,
+ softButtons, appID) {
+ console.debug("enter")
+ navigationTexts.forEach(fillTexts);
+ dataContainer.navigationModel.turnIcon = turnIcon ? turnIcon.value : ""
+ dataContainer.navigationModel.nextTurnIcon = nextTurnIcon ? nextTurnIcon.value : ""
+ dataContainer.navigationModel.distanceToManeuver = distanceToManeuver;
+ dataContainer.navigationModel.distanceToManeuverScale = distanceToManeuverScale;
+ if (maneuverComplete !== undefined) {
+ dataContainer.navigationModel.maneuverComplete = maneuverComplete;
+ }
+ if (softButtons !== undefined) {
+ dataContainer.navigationModel.softButtons.clear();
+ softButtons.forEach(fillSoftButtons, dataContainer.navigationModel.softButtons);
+ }
+ dataContainer.navigationModel.appId = appID;
+ contentLoader.go("./views/TurnByTurnView.qml");
+ console.debug("exit")
+ }
+
+ function alertManeuver(softButtons) {
+ console.debug("enter")
+ if (softButtons !== undefined) {
+ dataContainer.navigationModel.alertManeuverSoftButtons.clear();
+ softButtons.forEach(fillSoftButtons, dataContainer.navigationModel.alertManeuverSoftButtons);
+ }
+ console.debug("exit")
+ }
+
+ function updateTurnList(turnList, softButtons, appID) {
+ console.debug("enter")
+ if (turnList !== undefined) {
+ dataContainer.getApplication(appID).turnList.clear();
+ turnList.forEach(fillTurnList, dataContainer.getApplication(appID).turnList);
+ }
+ if (softButtons !== undefined) {
+ dataContainer.getApplication(appID).turnListSoftButtons.clear();
+ softButtons.forEach(fillSoftButtons, dataContainer.getApplication(appID).turnListSoftButtons);
+ }
+ dataContainer.navigationModel.appId = appID;
+ console.debug("exit")
+ }
+
+ function fillTexts(element, index, array) {
+ switch (element.fieldName) {
+ case Common.TextFieldName.navigationText1:
+ dataContainer.navigationModel.text1 = element.fieldText;
+ break;
+ case Common.TextFieldName.navigationText2:
+ dataContainer.navigationModel.text2 = element.fieldText;
+ break;
+ case Common.TextFieldName.ETA:
+ dataContainer.navigationModel.eta = element.fieldText;
+ break;
+ case Common.TextFieldName.totalDistance:
+ dataContainer.navigationModel.totalDistance = element.fieldText;
+ break;
+ case Common.TextFieldName.timeToDestination:
+ dataContainer.navigationModel.timeToDestination = element.fieldText;
+ break;
+ }
+ }
+
+ function fillSoftButtons(element, index, array) {
+ this.append({
+ type: element.type,
+ text: element.text,
+ image: element.image,
+ isHighlighted: element.isHighlighted,
+ buttonId: element.softButtonID,
+ systemAction: element.systemAction
+ });
+ }
+
+ function fillTurnList(element, index, array) {
+ this.append({
+ navigationText: element.navigationText,
+ turnIcon: element.turnIcon
+ });
+ console.debug(element.navigationText)
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/TTS.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/TTS.qml
new file mode 100644
index 0000000000..96aa9b2c29
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/TTS.qml
@@ -0,0 +1,115 @@
+/**
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "Common.js" as Common
+import "Async.js" as Async
+
+Item {
+ function isReady() {
+ return {
+ available: dataContainer.hmiTTSAvailable
+ }
+ }
+
+ function speak(ttsChunks, appID) {
+ // appID unused
+ console.debug('enter:', ttsChunks, appID);
+ if (ttsPopUp.async) {
+ console.log('speak send abort');
+ throw Common.Result.ABORTED;
+ }
+
+ var message = ttsChunks.map(function(str) { return str.text }).join('\n');
+ ttsPopUp.activate(message);
+ ttsPopUp.async = new Async.AsyncCall();
+ console.debug('exit');
+ return ttsPopUp.async;
+ }
+
+ function stopSpeaking() {
+ console.debug("enter");
+ ttsPopUp.deactivate();
+ console.debug("exit");
+ }
+
+ function getLanguage() {
+ return {
+ language: dataContainer.hmiTTSVRLanguage
+ }
+ }
+
+ function getSupportedLanguages() {
+ return {
+ languages: settingsContainer.sdlLanguagesList
+ }
+ }
+
+ function getCapabilities() {
+ return {
+ capabilities: Common.SpeechCapabilities.SC_TEXT
+ }
+ }
+
+ function changeRegistration(language, appID) {
+ console.debug("enter:", language, appID);
+ dataContainer.changeRegistrationTTSVR(language, appID);
+ console.debug("exit");
+ }
+
+ function setGlobalProperties(helpPrompt, timeoutPrompt, appID) {
+ console.debug("enter: " + helpPrompt + ", " + timeoutPrompt + ", " + appID)
+
+ var newHelpPropmt = helpPrompt ?
+ helpPrompt.map(
+ function (structure) {
+ return structure.text
+ }
+ ).join(", ") :
+ dataContainer.currentApplication.helpPrompt
+
+ var newTimeoutPrompt = timeoutPrompt ?
+ timeoutPrompt.map(
+ function (structure) {
+ return structure.text
+ }
+ ).join(", ") :
+ dataContainer.currentApplication.timeoutPrompt
+
+ dataContainer.setApplicationProperties(dataContainer.currentApplication.appId, {
+ helpPrompt: newHelpPropmt,
+ timeoutPrompt: newTimeoutPrompt
+ })
+ console.debug("exit")
+ }
+}
+
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/UI.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/UI.qml
new file mode 100644
index 0000000000..648cd1397f
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/UI.qml
@@ -0,0 +1,449 @@
+/**
+ * @file UI.qml
+ * @brief UI interface implementation.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "Common.js" as Common
+import "Async.js" as Async
+import "../models/Internal.js" as Internal
+
+Item {
+ function filter (strings, fields) {
+ console.debug("enter")
+// substrings for each allowed field
+ var fieldSubstrings = {}
+// this cycle concatenates allowed lines sorting them by field
+ for (var stringIndex = 0; stringIndex < strings.length; ++stringIndex) {
+ for (var fieldIndex = 0; fieldIndex < fields.length; ++fieldIndex) {
+ var fieldName = strings[stringIndex].fieldName
+ if (fieldName === fields[fieldIndex]) {
+ if (fieldSubstrings[fieldName] !== undefined) {
+ fieldSubstrings[fieldName] += "\n";
+ fieldSubstrings[fieldName] += strings[stringIndex].fieldText
+ }
+ else {
+ fieldSubstrings[fieldName] = strings[stringIndex].fieldText
+ }
+ }
+ }
+ }
+ console.debug("exit")
+ return fieldSubstrings
+ }
+
+ function alert (alertStrings, duration, softButtons, progressIndicator, appID) {
+ var fieldSubstrings = alertStrings
+ .sort(function(a, b) { return a.fieldName - b.fieldName }) // sorting by fieldName
+ .map(function(val) { return val.fieldText }); // mapping to array of strings
+
+ var tryAgainTime = alertWindow.alert(fieldSubstrings, duration, progressIndicator, softButtons, appID)
+ if (tryAgainTime === undefined) {
+ alertWindow.async = new Async.AsyncCall();
+ return alertWindow.async;
+ }
+ else {
+ return {
+ "__retCode": Common.Result.REJECTED,
+ "tryAgainTime": tryAgainTime
+ }
+ }
+ }
+
+ function show (showStrings, alignment, graphic, softButtons, customPresets, appID) {
+ console.debug("enter: " + showStrings + ", " + alignment + ", " + graphic + ", "+ softButtons + ", " + customPresets + ", " + appID)
+ var app = dataContainer.getApplication(appID);
+
+ if (softButtons) {
+ app.softButtons.clear()
+ softButtons.forEach(function(x) { app.softButtons.append(x); });
+ }
+
+ if (customPresets) {
+ app.customPresets.clear()
+ customPresets.forEach( function(x) { app.customPresets.append( {text: x} ); } )
+ }
+
+ var textAlignment
+ switch (alignment) {
+ case Common.TextAlignment.LEFT_ALIGNED:
+ textAlignment = Text.AlignLeft
+ break;
+ case Common.TextAlignment.RIGHT_ALIGNED:
+ textAlignment = Text.AlignRight
+ break;
+ case Common.TextAlignment.CENTERED:
+ textAlignment = Text.AlignHCenter
+ break;
+ default:
+ textAlignment = Text.AlignHCenter
+ break;
+ }
+
+ // with this array we grab only the lines we need
+ var showFields = [
+ Common.TextFieldName.mainField1,
+ Common.TextFieldName.mainField2,
+ Common.TextFieldName.mainField3,
+ Common.TextFieldName.mainField4,
+ Common.TextFieldName.statusBar,
+ Common.TextFieldName.mediaClock,
+ Common.TextFieldName.mediaTrack
+ ]
+ var fieldSubstrings = filter(showStrings, showFields)
+ var showData = { hmiUIText: {} }
+ if (fieldSubstrings[Common.TextFieldName.mainField1] !== undefined) { showData.hmiUIText.mainField1 = fieldSubstrings[Common.TextFieldName.mainField1]; }
+ if (fieldSubstrings[Common.TextFieldName.mainField2] !== undefined) { showData.hmiUIText.mainField2 = fieldSubstrings[Common.TextFieldName.mainField2]; }
+ if (fieldSubstrings[Common.TextFieldName.mainField3] !== undefined) { showData.hmiUIText.mainField3 = fieldSubstrings[Common.TextFieldName.mainField3]; }
+ if (fieldSubstrings[Common.TextFieldName.mainField4] !== undefined) { showData.hmiUIText.mainField4 = fieldSubstrings[Common.TextFieldName.mainField4]; }
+ if (fieldSubstrings[Common.TextFieldName.statusBar] !== undefined) { showData.hmiUIText.statusBar = fieldSubstrings[Common.TextFieldName.statusBar]; }
+ if (fieldSubstrings[Common.TextFieldName.mediaTrack] !== undefined) { showData.hmiUIText.mediaTrack = fieldSubstrings[Common.TextFieldName.mediaTrack]; }
+ if (graphic) { showData.hmiUIText.image = graphic.value; }
+ if (textAlignment) { showData.hmiUITextAlignment = textAlignment; }
+ if (fieldSubstrings[Common.TextFieldName.mediaClock]) {
+ showData.mediaClock = {
+ "updateMode": Internal.MediaClockUpdateMode.MCU_COUNTUP,
+ "runningMode": Internal.MediaClockRunningMode.MCR_STOPPED,
+ "magic": Internal.stringToHmsTime(fieldSubstrings[Common.TextFieldName.mediaClock]),
+ "total": 0
+ }
+ }
+
+ dataContainer.setApplicationProperties(appID, showData);
+ console.debug("exit")
+ }
+
+ function addCommand (cmdID, menuParams, cmdIcon, appID) {
+ dataContainer.addCommand(cmdID, menuParams, cmdIcon, appID)
+ }
+
+ function deleteCommand (cmdID, appID) {
+ dataContainer.deleteCommand(cmdID, appID)
+ }
+
+ function addSubMenu (menuID, menuParams, appID) {
+ dataContainer.addSubMenu(menuID, menuParams, appID)
+ }
+
+ function deleteSubMenu (menuID, appID) {
+ dataContainer.deleteSubMenu(menuID, appID)
+ }
+
+ function performInteraction (initialText, choiceSet, vrHelp, timeout, appID) {
+ console.debug("enter")
+ var async = dataContainer.interactionModel.performInteraction(initialText, choiceSet, vrHelp, timeout, appID)
+ console.debug("exit")
+ return async
+ }
+
+ function setMediaClockTimer (startTime, endTime, updateMode, appID) {
+ console.debug("enter: {", startTime, ", ", endTime, ", ", updateMode, ", ", appID, "}")
+
+ var app = dataContainer.getApplication(appID)
+ var newStartTime
+ var newEndTime
+ var newUpdateMode
+ var newRunningMode
+ var newStartTimeForProgress
+ var resultCode
+ var sendErrorResponce = false
+
+ switch (updateMode) {
+ case Common.ClockUpdateMode.COUNTUP:
+ if (startTime === undefined) {
+ resultCode = Common.Result.INVALID_DATA
+ sendErrorResponce = true
+ break
+ }
+ newStartTime = Internal.hmsTime(startTime.hours, startTime.minutes, startTime.seconds)
+ newEndTime = endTime ? Internal.hmsTime(endTime.hours, endTime.minutes, endTime.seconds) : -1
+ newUpdateMode = Internal.MediaClockUpdateMode.MCU_COUNTUP
+ newRunningMode = Internal.MediaClockRunningMode.MCR_RUNNING
+ newStartTimeForProgress = Internal.hmsTime(startTime.hours, startTime.minutes, startTime.seconds)
+ resultCode = Common.Result.SUCCESS
+ break
+
+ case Common.ClockUpdateMode.COUNTDOWN:
+ if (startTime === undefined) {
+ resultCode = Common.Result.INVALID_DATA
+ sendErrorResponce = true
+ break
+ }
+ newStartTime = Internal.hmsTime(startTime.hours, startTime.minutes, startTime.seconds)
+ newEndTime = endTime ? Internal.hmsTime(endTime.hours, endTime.minutes, endTime.seconds) : -1
+ newUpdateMode = Internal.MediaClockUpdateMode.MCU_COUNTDOWN
+ newRunningMode = Internal.MediaClockRunningMode.MCR_RUNNING
+ newStartTimeForProgress = Internal.hmsTime(startTime.hours, startTime.minutes, startTime.seconds)
+ resultCode = Common.Result.SUCCESS
+ break
+
+ case Common.ClockUpdateMode.PAUSE:
+ // Already paused or cleared
+ if ((app.mediaClock.runningMode === Internal.MediaClockRunningMode.MCR_STOPPED)
+ || (app.mediaClock.startTime === -1 && app.mediaClock.endTime === -1)) {
+ resultCode = Common.Result.IGNORED
+ sendErrorResponce = true
+ break
+ }
+ newStartTime = app.mediaClock.startTime
+ newEndTime = app.mediaClock.endTime
+ newRunningMode = Internal.MediaClockRunningMode.MCR_STOPPED
+ newUpdateMode = app.mediaClock.updateMode
+ newStartTimeForProgress = app.mediaClock.startTime
+ resultCode = Common.Result.SUCCESS
+ break
+
+ case Common.ClockUpdateMode.RESUME:
+ // Already resumed or cleared
+ if ((app.mediaClock.runningMode === Internal.MediaClockRunningMode.MCR_RUNNING)
+ || (app.mediaClock.startTime === -1 && app.mediaClock.endTime === -1)) {
+ resultCode = Common.Result.IGNORED
+ sendErrorResponce = true
+ break
+ }
+ newStartTime = app.mediaClock.startTime
+ newEndTime = app.mediaClock.endTime
+ newRunningMode = Internal.MediaClockRunningMode.MCR_RUNNING
+ newStartTimeForProgress = app.mediaClock.startTime
+ newUpdateMode = app.mediaClock.updateMode
+ resultCode = Common.Result.SUCCESS
+ break
+
+ case Common.ClockUpdateMode.CLEAR:
+ newStartTime = -1
+ newEndTime = -1
+ newRunningMode = Internal.MediaClockRunningMode.MCR_STOPPED
+ newUpdateMode = app.mediaClock.updateMode
+ newStartTimeForProgress = -1
+ resultCode = Common.Result.SUCCESS
+ break
+ }
+
+ if (sendErrorResponce) {
+ console.debug("exit with result code: ", resultCode)
+ return { __retCode: resultCode }
+ }
+
+ dataContainer.setApplicationProperties(appID, {
+ "mediaClock": {
+ "updateMode": newUpdateMode,
+ "runningMode": newRunningMode,
+ "startTime": newStartTime,
+ "endTime": newEndTime,
+ "startTimeForProgress": newStartTimeForProgress
+ }
+ })
+
+ console.debug("exit")
+ return { __retCode: resultCode }
+ }
+
+ function setGlobalProperties (vrHelpTitle, vrHelp, menuTitle, menuIcon, keyboardProperties, appID) {
+ console.debug("enter: " + vrHelpTitle + ", " + vrHelp + ", " + menuTitle + ", " + menuIcon + ", " + keyboardProperties + ", " + appID)
+ if (vrHelpTitle) {
+ vrHelpPopup.title = vrHelpTitle
+ }
+ dataContainer.setVrHelp(vrHelp)
+ console.debug("exit")
+ }
+
+ function showVrHelp (vrHelpTitle, vrHelp, appID) {
+ console.debug("enter: " + vrHelpTitle + ", " + vrHelp + ", " + appID)
+ if (vrHelpTitle) {
+ vrHelpPopup.title = vrHelpTitle
+ }
+ dataContainer.setVrHelp(vrHelp)
+ vrHelpPopup.show()
+ console.debug("exit")
+ }
+
+ function isReady () {
+ return {
+ available: dataContainer.hmiUIAvailable
+ }
+ }
+
+ function getLanguage () {
+ return {
+ language: dataContainer.hmiUILanguage
+ }
+ }
+
+ function getSupportedLanguages () {
+ return {
+ languages: settingsContainer.sdlLanguagesList
+ }
+ }
+
+ function changeRegistration (language, appID) {
+ dataContainer.changeRegistrationUI(language, appID)
+ }
+
+ function setAppIcon (syncFileName, appID) {
+ dataContainer.setApplicationProperties(appID, { icon: syncFileName.value })
+ }
+
+ function slider (numTicks, position, sliderHeader, sliderFooter, timeout, appID) {
+ console.debug("enter", numTicks, position, sliderHeader, sliderFooter, timeout, appID)
+ if (dataContainer.uiSlider.running) {
+ console.debug("aborted")
+ return {__retCode: Common.Result.ABORTED, sliderPosition: position}
+ }
+
+ dataContainer.uiSlider.appName = dataContainer.getApplication(appID).appName
+ dataContainer.uiSlider.header = sliderHeader
+ dataContainer.uiSlider.footer = sliderFooter
+ dataContainer.uiSlider.numTicks = numTicks
+ dataContainer.uiSlider.position = position
+ dataContainer.uiSlider.timeout = timeout
+
+ if (timeout !== 0) {
+ sliderPopup.showSlider()
+ sliderPopup.async = new Async.AsyncCall();
+ console.debug("exit")
+ return sliderPopup.async;
+ } else {
+ return { sliderPosition: position }
+ }
+ }
+
+ function scrollableMessage (messageText, timeout, softButtons, appID) {
+ console.debug("scrollableMessage ", messageText, timeout, softButtons, appID)
+ if(dataContainer.scrollableMessageModel.running){
+ //send error response if long message already running
+ console.debug("scrollableMessage throw")
+ throw Common.Result.ABORTED
+ }
+
+ dataContainer.scrollableMessageModel.longMessageText = messageText.fieldText
+ dataContainer.scrollableMessageModel.softButtons.clear();
+ if (softButtons !== undefined) {
+ softButtons.forEach(fillSoftButtons, dataContainer.scrollableMessageModel.softButtons);
+ }
+ dataContainer.scrollableMessageModel.timeout = timeout
+ dataContainer.scrollableMessageModel.appId = appID
+ dataContainer.scrollableMessageModel.async = new Async.AsyncCall()
+ contentLoader.go("./views/ScrollableMessageView.qml")
+ console.debug("scrollableMessage exit")
+ return dataContainer.scrollableMessageModel.async
+ }
+
+ function getCapabilities() {
+ return {
+ "audioPassThruCapabilities": {
+ "samplingRate": Common.SamplingRate.RATE_44KHZ,
+ "bitsPerSample": Common.BitsPerSample.RATE_8_BIT,
+ "audioType": Common.AudioType.PCM
+ },
+ "displayCapabilities": settingsContainer.displayCapabilities,
+ "hmiZoneCapabilities": Common.HmiZoneCapabilities.FRONT,
+ "softButtonCapabilities": settingsContainer.softButtonCapabilities
+ }
+ }
+
+ function performAudioPassThru (audioPassThruDisplayTexts, timeout, appID) {
+ console.debug("enter", audioPassThruDisplayTexts, timeout)
+
+ if (dataContainer.uiAudioPassThru.running) {
+ console.debug("aborted")
+ throw Common.Result.ABORTED
+ }
+
+ dataContainer.uiAudioPassThru.appName = dataContainer.getApplication(appID).appName
+ dataContainer.uiAudioPassThru.timeout = timeout
+ if (audioPassThruDisplayTexts.length === 2) {
+ dataContainer.uiAudioPassThru.firstLine = audioPassThruDisplayTexts[0].fieldText
+ dataContainer.uiAudioPassThru.secondLine = audioPassThruDisplayTexts[1].fieldText
+ }
+ performAudioPassThruPopup.async = new Async.AsyncCall();
+ performAudioPassThruPopup.showAudioPassThru()
+ console.debug("exit")
+ return performAudioPassThruPopup.async;
+ }
+
+ function endAudioPassThru () {
+ console.debug("enter")
+ if (!dataContainer.uiAudioPassThru.running) {
+ console.debug("rejected")
+ throw Common.Result.REJECTED
+ }
+ DBus.sendReply({__retCode: Common.Result.SUCCESS})
+ performAudioPassThruPopup.complete(Common.Result.SUCCESS)
+ console.debug("exit")
+ }
+
+ function closePopUp (methodName) {
+ console.debug("enter")
+ var popUpToClose
+
+ if (dataContainer.activePopup.length === 0) {
+ return { __retCode: Common.Result.ABORT, __message: "No active PopUps"}
+ }
+
+ if (methodName !== undefined) {
+ popUpToClose = methodName
+ } else {
+ popUpToClose = dataContainer.activePopup[dataContain.activePopUp.length - 1]
+ }
+
+ switch (popUpToClose) {
+ case "UI.PerformInteraction":
+ interactionPopup.complete(Common.Result.SUCCESS)
+ break
+ case "UI.Slider":
+ sliderPopup.complete(Common.Result.SUCCESS)
+ break
+ case "UI.PerformAudioPassThru":
+ performAudioPassThruPopup.complete(Common.Result.SUCCESS)
+ break
+ case "UI.Alert":
+ alertWindow.complete(Common.Result.SUCCESS)
+ break
+ case "UI.VrHelp":
+ vrHelpPopup.complete(Common.Result.SUCCESS)
+ break
+ }
+ console.debug("exit")
+ }
+
+ function fillSoftButtons(element, index, array) {
+ this.append({
+ type: element.type,
+ text: element.text,
+ image: element.image,
+ isHighlighted: element.isHighlighted,
+ softButtonID: element.softButtonID,
+ systemAction: element.systemAction
+ });
+ }
+
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/VR.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/VR.qml
new file mode 100644
index 0000000000..37d19f6a46
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/VR.qml
@@ -0,0 +1,93 @@
+/**
+ * @file VR.qml
+ * @brief Implement of interface VR.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "Common.js" as Common
+
+Item {
+ function isReady() {
+ return {
+ available: dataContainer.hmiVRAvailable
+ }
+ }
+
+ function addCommand(cmdID, vrCommands, appID) {
+ console.log("VR.AddCommand: cmd ", cmdID, ", app ", appID);
+ for (var i = 0; i < vrCommands.length; ++i) {
+ dataContainer.vrCommands.append({
+ cmdID: cmdID,
+ command: vrCommands[i],
+ appID: appID === undefined ? 0 : appID,
+ });
+ }
+ console.log("exit")
+ }
+
+ function deleteCommand(cmdID, appID) {
+ console.log("VR.DeleteCommand: cmd ", cmdID, ", app ", appID);
+ for (var i = 0; i < dataContainer.vrCommands.count; ) {
+ if ((dataContainer.vrCommands.get(i).cmdID === cmdID) &&
+ ((appID === undefined) || (dataContainer.vrCommands.get(i).appID === appID))) {
+ dataContainer.vrCommands.remove(i);
+ continue;
+ }
+ ++i;
+ }
+ console.log("exit")
+ }
+
+ function getLanguage() {
+ return {
+ language: dataContainer.hmiTTSVRLanguage
+ }
+ }
+
+ function getSupportedLanguages() {
+ return {
+ languages: settingsContainer.sdlLanguagesList
+ }
+ }
+
+ function getCapabilities() {
+ return {
+ vrCapabilities: [ Common.VrCapabilities.VR_TEXT ]
+ }
+ }
+
+ function changeRegistration(language, appID) {
+ console.debug("enter:", language, appID);
+ dataContainer.changeRegistrationTTSVR(language, appID);
+ console.debug("exit");
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/hmi_api/VehicleInfo.qml b/src/components/qt_hmi/qml_model_qt4/hmi_api/VehicleInfo.qml
new file mode 100644
index 0000000000..18f3a1ce9e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/hmi_api/VehicleInfo.qml
@@ -0,0 +1,749 @@
+/**
+ * @file VehicleInfo.qml
+ * @brief Vehicle information interface realisation.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "Common.js" as Common
+
+Item {
+ function isReady () {
+ return {
+ available: dataContainer.hmiVehicleInfoAvailable
+ }
+ }
+
+ function getVehicleType() {
+ return {
+ "vehicleType": {
+ "make": "Ford",
+ "model": "Fiesta",
+ "modelYear": "2013",
+ "trim": "SE"
+ }
+ }
+ }
+
+ function getGpsData(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { gps: dataContainer.vehicleInfoModel.gps }
+ }
+
+ function getSpeed(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { speed: dataContainer.vehicleInfoModel.speed }
+ }
+
+ function getRpm(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return {
+ rpm: dataContainer.vehicleInfoModel.rpm,
+ __retCode: Common.Result.DATA_NOT_AVAILABLE
+ }
+ }
+
+ function getFuelLevel(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { fuelLevel: dataContainer.vehicleInfoModel.fuelLevel }
+ }
+
+ function getFuelLevelState(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { fuelLevel_State: dataContainer.vehicleInfoModel.fuelLevel_State }
+ }
+
+ function getInstantFuelConsumption(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { instantFuelConsumption: dataContainer.vehicleInfoModel.instantFuelConsumption }
+ }
+
+ function getExternalTemperature(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { externalTemperature: dataContainer.vehicleInfoModel.externalTemperature }
+ }
+
+ function getVin(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { vin: dataContainer.vehicleInfoModel.vin }
+ }
+
+ function getPrndl(appID) {
+ console.debug("enter")
+ if (dataContainer.vehicleInfoModel.prndl === -1) { // Test value, to check response
+ console.debug("exit")
+ return {
+ prndl: dataContainer.vehicleInfoModel.prndl,
+ __retCode: Common.Result.DATA_NOT_AVAILABLE
+ }
+ }
+ console.debug("exit")
+ return { prndl: dataContainer.vehicleInfoModel.prndl }
+ }
+
+ function getTirePressure(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { tirePressure: dataContainer.vehicleInfoModel.tirePressure }
+ }
+
+ function getOdometer(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { odometer: dataContainer.vehicleInfoModel.odometer }
+ }
+
+ function getBeltStatus(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { beltStatus: dataContainer.vehicleInfoModel.beltStatus }
+ }
+
+ function getBodyInformation(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { bodyInformation: dataContainer.vehicleInfoModel.bodyInformation }
+ }
+
+ function getDeviceStatus(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { deviceStatus: dataContainer.vehicleInfoModel.deviceStatus }
+ }
+
+ function getDriverBraking(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { driverBraking: dataContainer.vehicleInfoModel.driverBraking }
+ }
+
+ function getWiperStatus(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { wiperStatus: dataContainer.vehicleInfoModel.wiperStatus }
+ }
+
+ function getHeadLampStatus(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { headLampStatus: dataContainer.vehicleInfoModel.headLampStatus }
+ }
+
+ function getEngineTorque(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { engineTorque: dataContainer.vehicleInfoModel.engineTorque }
+ }
+
+ function getAccPedalPosition(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { accPedalPosition: dataContainer.vehicleInfoModel.accPedalPosition }
+ }
+
+ function getSteeringWheelAngle(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { steeringWheelAngle: dataContainer.vehicleInfoModel.steeringWheelAngle }
+ }
+
+ function getECallInfo(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { eCallInfo: dataContainer.vehicleInfoModel.eCallInfo }
+ }
+
+ function getAirbagStatus(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { airbagStatus: dataContainer.vehicleInfoModel.airbagStatus }
+ }
+
+ function getEmergencyEvent(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { emergencyEvent: dataContainer.vehicleInfoModel.emergencyEvent }
+ }
+
+ function getClusterModeStatus(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { clusterModeStatus: dataContainer.vehicleInfoModel.clusterModeStatus }
+ }
+
+ function getMyKey(appID) {
+ console.debug("enter")
+ console.debug("exit")
+ return { myKey: dataContainer.vehicleInfoModel.myKey }
+ }
+
+ function getDTCs(ecuName, dtcMask, appID) {
+ var ecuHeader = 2
+ var dtc = []
+
+ for (var i = 0; i < 3; i++) {
+ dtc.push("line" + i)
+ }
+ return {ecuHeader: ecuHeader, dtc: dtc}
+ }
+
+ function readDID(ecuName, didLocation, appID) {
+ console.debug("Enter")
+ //TODO{ALeshin}: refactoring of this function, when we'll have Vehicle Info module
+ var didResult = []
+
+ for (var i = 0; i < didLocation.length; i++) {
+ if (i < 10) {
+ didResult[i] = {}
+ didResult[i].resultCode = Common.VehicleDataResultCode.VDRC_SUCCESS
+ didResult[i].didLocation = didLocation[i]
+ didResult[i].data = '0'
+ }
+ else {
+ didResult[i] = {}
+ didResult[i].resultCode = Common.VehicleDataResultCode.VDRC_DATA_NOT_AVAILABLE
+ didResult[i].didLocation = didLocation[i]
+ didResult[i].data = '0'
+ }
+ }
+ console.debug("Exit")
+ return {didResult: didResult}
+ }
+
+ function subscribeGps(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onGpsChanged.disconnect(model.sendGpsChange)
+ model.onGpsChanged.connect(model.sendGpsChange)
+ console.debug("exit")
+ return {gps:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_GPS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS} }
+ }
+ function unsubscribeGps(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onGpsChanged.disconnect(model.sendGpsChange)
+ console.debug("exit")
+ return {gps:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_GPS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS} }
+
+ }
+
+ function subscribeSpeed(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onSpeedChanged.disconnect(model.sendSpeedChange)
+ model.onSpeedChanged.connect(model.sendSpeedChange)
+ console.debug("exit")
+ return { speed:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_SPEED,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeSpeed(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onSpeedChanged.disconnect(model.sendSpeedChange)
+ console.debug("exit")
+ return { speed:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_SPEED,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeRpm(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onRpmChanged.disconnect(model.sendRpmChange)
+ model.onRpmChanged.connect(model.sendRpmChange)
+ console.debug("exit")
+ return { rpm:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_RPM,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeRpm(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onRpmChanged.disconnect(model.sendRpmChange)
+ console.debug("exit")
+ return { rpm:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_RPM,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeFuelLevel(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onFuelLevelChanged.disconnect(model.sendFuelLevelChange)
+ model.onFuelLevelChanged.connect(model.sendFuelLevelChange)
+ console.debug("exit")
+ return { fuelLevel:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_FUELLEVEL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeFuelLevel(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onFuelLevelChanged.disconnect(model.sendFuelLevelChange)
+ console.debug("exit")
+ return { fuelLevel:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_FUELLEVEL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeFuelLevel_State(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onFuelLevel_StateChanged.disconnect(model.sendFuelLevel_StateChange)
+ model.onFuelLevel_StateChanged.connect(model.sendFuelLevel_StateChange)
+ console.debug("exit")
+ return { fuelLevel_State:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_FUELLEVEL_STATE,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeFuelLevel_State(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onFuelLevel_StateChanged.disconnect(model.sendFuelLevel_StateChange)
+ console.debug("exit")
+ return { fuelLevel_State:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_FUELLEVEL_STATE,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeInstantFuelConsumption(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onInstantFuelConsumptionChanged.disconnect(model.sendInstantFuelConsumptionChange)
+ model.onInstantFuelConsumptionChanged.connect(model.sendInstantFuelConsumptionChange)
+ console.debug("exit")
+ return { instantFuelConsumption:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_FUELCONSUMPTION,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeInstantFuelConsumption(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onInstantFuelConsumptionChanged.disconnect(model.sendInstantFuelConsumptionChange)
+ console.debug("exit")
+ return { instantFuelConsumption:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_FUELCONSUMPTION,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeExternalTemperature(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onExternalTemperatureChanged.disconnect(model.sendExternalTemperatureChange)
+ model.onExternalTemperatureChanged.connect(model.sendExternalTemperatureChange)
+ console.debug("exit")
+ return { externalTemperature:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_EXTERNTEMP,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeExternalTemperature(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onExternalTemperatureChanged.disconnect(model.sendExternalTemperatureChange)
+ console.debug("exit")
+ return { externalTemperature:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_EXTERNTEMP,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribePrndl(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onPrndlChanged.disconnect(model.sendPrndlChange)
+ model.onPrndlChanged.connect(model.sendPrndlChange)
+ console.debug("exit")
+ return { prndl:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_PRNDL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribePrndl(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onPrndlChanged.disconnect(model.sendPrndlChange)
+ console.debug("exit")
+ return { prndl:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_PRNDL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeVin(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onVinChanged.disconnect(model.sendVinChange)
+ model.onVinChanged.connect(model.sendVinChange)
+ console.debug("exit")
+ return { vin:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_VIN,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeVin(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onVinChanged.disconnect(model.sendVinChange)
+ console.debug("exit")
+ return { vin:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_VIN,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeTirePressure(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onTirePressureChanged.disconnect(model.sendTirePressureChange)
+ model.onTirePressureChanged.connect(model.sendTirePressureChange)
+ console.debug("exit")
+ return { tirePressure:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_TIREPRESSURE,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeTirePressure(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onTirePressureChanged.disconnect(model.sendTirePressureChange)
+ console.debug("exit")
+ return { tirePressure:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_TIREPRESSURE,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeOdometer(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onOdometerChanged.disconnect(model.sendOdometerChange)
+ model.onOdometerChanged.connect(model.sendOdometerChange)
+ console.debug("exit")
+ return { odometer:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ODOMETER,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeOdometer(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onOdometerChanged.disconnect(model.sendOdometerChange)
+ console.debug("exit")
+ return { odometer:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ODOMETER,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeBeltStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onBeltStatusChanged.disconnect(model.sendBeltStatusChange)
+ model.onBeltStatusChanged.connect(model.sendBeltStatusChange)
+ console.debug("exit")
+ return { beltStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_BELTSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeBeltStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onBeltStatusChanged.disconnect(model.sendBeltStatusChange)
+ console.debug("exit")
+ return { beltStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_BELTSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeBodyInformation(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onBodyInformationChanged.disconnect(model.sendBodyInformationChange)
+ model.onBodyInformationChanged.connect(model.sendBodyInformationChange)
+ console.debug("exit")
+ return { bodyInformation:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_BODYINFO,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeBodyInformation(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onBodyInformationChanged.disconnect(model.sendBodyInformationChange)
+ console.debug("exit")
+ return { bodyInformation:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_BODYINFO,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeDeviceStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onDeviceStatusChanged.disconnect(model.sendDeviceStatusChange)
+ model.onDeviceStatusChanged.connect(model.sendDeviceStatusChange)
+ console.debug("exit")
+ return { deviceStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_DEVICESTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeDeviceStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onDeviceStatusChanged.disconnect(model.sendDeviceStatusChange)
+ console.debug("exit")
+ return { deviceStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_DEVICESTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeDriverBraking(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onDriverBrakingChanged.disconnect(model.sendDriverBrakingChange)
+ model.onDriverBrakingChanged.connect(model.sendDriverBrakingChange)
+ console.debug("exit")
+ return { driverBraking:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_BRAKING,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeDriverBraking(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onDriverBrakingChanged.disconnect(model.sendDriverBrakingChange)
+ console.debug("exit")
+ return { driverBraking:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_BRAKING,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeWiperStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onWiperStatusChanged.disconnect(model.sendWiperStatusChange)
+ model.onWiperStatusChanged.connect(model.sendWiperStatusChange)
+ console.debug("exit")
+ return { wiperStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_WIPERSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeWiperStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onWiperStatusChanged.disconnect(model.sendWiperStatusChange)
+ console.debug("exit")
+ return { wiperStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_WIPERSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeHeadLampStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onHeadLampStatusChanged.disconnect(model.sendHeadLampStatusChange)
+ model.onHeadLampStatusChanged.connect(model.sendHeadLampStatusChange)
+ console.debug("exit")
+ return { headLampStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_HEADLAMPSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeHeadLampStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onHeadLampStatusChanged.disconnect(model.sendHeadLampStatusChange)
+ console.debug("exit")
+ return { headLampStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_HEADLAMPSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeEngineTorque(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onEngineTorqueChanged.disconnect(model.sendEngineTorqueChange)
+ model.onEngineTorqueChanged.connect(model.sendEngineTorqueChange)
+ console.debug("exit")
+ return { engineTorque:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ENGINETORQUE,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeEngineTorque(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onEngineTorqueChanged.disconnect(model.sendEngineTorqueChange)
+ console.debug("exit")
+ return { engineTorque:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ENGINETORQUE,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeAccPedalPosition(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onAccPedalPositionChanged.disconnect(model.sendAccPedalPositionChange)
+ model.onAccPedalPositionChanged.connect(model.sendAccPedalPositionChange)
+ console.debug("exit")
+ return { accPedalPosition:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ACCPEDAL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeAccPedalPosition(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onAccPedalPositionChanged.disconnect(model.sendAccPedalPositionChange)
+ console.debug("exit")
+ return { accPedalPosition:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ACCPEDAL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeSteeringWheelAngle(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onSteeringWheelAngleChanged.disconnect(model.sendSteeringWheelAngleChange)
+ model.onSteeringWheelAngleChanged.connect(model.sendSteeringWheelAngleChange)
+ console.debug("exit")
+ return { steeringWheelAngle:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_STEERINGWHEEL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeSteeringWheelAngle(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onSteeringWheelAngleChanged.disconnect(model.sendSteeringWheelAngleChange)
+ console.debug("exit")
+ return { steeringWheelAngle:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_STEERINGWHEEL,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeECallInfo(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onECallInfoChanged.disconnect(model.sendECallInfoChange)
+ model.onECallInfoChanged.connect(model.sendECallInfoChange)
+ console.debug("exit")
+ return { eCallInfo:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ECALLINFO,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeECallInfo(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onECallInfoChanged.disconnect(model.sendECallInfoChange)
+ console.debug("exit")
+ return { eCallInfo:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_ECALLINFO,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeAirbagStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onAirbagStatusChanged.disconnect(model.sendAirbagStatusChange)
+ model.onAirbagStatusChanged.connect(model.sendAirbagStatusChange)
+ console.debug("exit")
+ return { airbagStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_AIRBAGSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeAirbagStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onAirbagStatusChanged.disconnect(model.sendAirbagStatusChange)
+ console.debug("exit")
+ return { airbagStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_AIRBAGSTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeEmergencyEvent(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onEmergencyEventChanged.disconnect(model.sendEmergencyEventChange)
+ model.onEmergencyEventChanged.connect(model.sendEmergencyEventChange)
+ console.debug("exit")
+ return { emergencyEvent:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_EMERGENCYEVENT,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeEmergencyEvent(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onEmergencyEventChanged.disconnect(model.sendEmergencyEventChange)
+ console.debug("exit")
+ return { emergencyEvent:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_EMERGENCYEVENT,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeClusterModeStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onClusterModeStatusChanged.disconnect(model.sendClusterModeStatusChange)
+ model.onClusterModeStatusChanged.connect(model.sendClusterModeStatusChange)
+ console.debug("exit")
+ return { clusterModeStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_CLUSTERMODESTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeClusterModeStatus(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onClusterModeStatusChanged.disconnect(model.sendClusterModeStatusChange)
+ console.debug("exit")
+ return { clusterModeStatus:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_CLUSTERMODESTATUS,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+
+ function subscribeMyKey(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onMyKeyChanged.disconnect(model.sendMyKeyChange)
+ model.onMyKeyChanged.connect(model.sendMyKeyChange)
+ console.debug("exit")
+ return { myKey:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_MYKEY,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+ function unsubscribeMyKey(appID) {
+ console.debug("enter")
+ var model = dataContainer.vehicleInfoModel;
+ model.onMyKeyChanged.disconnect(model.sendMyKeyChange)
+ console.debug("exit")
+ return { myKey:
+ { dataType: Common.VehicleDataType.VEHICLEDATA_MYKEY,
+ resultCode: Common.VehicleDataResultCode.VDRC_SUCCESS } }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/log4cxx.properties b/src/components/qt_hmi/qml_model_qt4/log4cxx.properties
new file mode 100644
index 0000000000..0bc5ac8fdf
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/log4cxx.properties
@@ -0,0 +1,41 @@
+# Socket logger
+log4j.appender.SocketHub=org.apache.log4j.net.SocketHubAppender
+log4j.appender.SocketHub.port=4555
+log4j.appender.SocketHub.locationInfo=true
+
+# Only ERROR and FATAL messages are logged to console
+log4j.appender.Console=org.apache.log4j.ConsoleAppender
+log4j.appender.Console.ImmediateFlush=true
+log4j.appender.Console.layout=org.apache.log4j.PatternLayout
+log4j.appender.Console.layout.ConversionPattern=%-5p [%d{dd MMM yyyy HH:mm:ss,SSS}][%c] %m%n
+log4j.appender.Console.Threshold=ERROR
+
+# Log for all DBus plugin messages
+log4j.appender.DBusPluginLogFile=org.apache.log4j.FileAppender
+log4j.appender.DBusPluginLogFile.File=DBusPlugin.log
+log4j.appender.DBusPluginLogFile.append=false
+log4j.appender.DBusPluginLogFile.DatePattern='.' yyyy-MM-dd
+log4j.appender.DBusPluginLogFile.ImmediateFlush=true
+log4j.appender.DBusPluginLogFile.layout=org.apache.log4j.PatternLayout
+log4j.appender.DBusPluginLogFile.layout.ConversionPattern=%-5p [%d{dd MMM yyyy HH:mm:ss,SSS}][%c] %F:%L %M: %m%n
+
+# Log for all HMI Framework plugin
+log4j.appender.HmiFrameworkPluginLogFile=org.apache.log4j.FileAppender
+log4j.appender.HmiFrameworkPluginLogFile.File=HmiFrameworkPlugin.log
+log4j.appender.HmiFrameworkPluginLogFile.append=false
+log4j.appender.HmiFrameworkPluginLogFile.DatePattern='.' yyyy-MM-dd
+log4j.appender.HmiFrameworkPluginLogFile.ImmediateFlush=true
+log4j.appender.HmiFrameworkPluginLogFile.layout=org.apache.log4j.PatternLayout
+log4j.appender.HmiFrameworkPluginLogFile.layout.ConversionPattern=%-5p [%d{dd MMM yyyy HH:mm:ss,SSS}][%c] %F:%L %M: %m%n
+
+# Log for all Qt HMI
+log4j.rootLogger=ALL, Console
+
+# Log for DBus plugin QtHMI
+log4j.logger.DBusPlugin=ALL, DBusPluginLogFile
+
+# Log for HMI Framework plugin
+log4j.logger.HmiFrameworkPlugin=ALL, HmiFrameworkPluginLogFile
+
+# Log by log4cxx plugin
+log4j.logger.Log4cxxPlugin=ALL, HmiFrameworkPluginLogFile
diff --git a/src/components/qt_hmi/qml_model_qt4/models/ApplicationData.qml b/src/components/qt_hmi/qml_model_qt4/models/ApplicationData.qml
new file mode 100644
index 0000000000..a50113095c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/ApplicationData.qml
@@ -0,0 +1,57 @@
+/**
+ * @file ApplicationData.qml
+ * @brief Model for Application.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+QtObject {
+ property string mainField1
+ property string mainField2
+ property string mainField3
+ property string mainField4
+ property string statusBar
+ property string mediaTrack
+ property string image
+
+ function reset () {
+ console.debug("enter")
+ mainField1 = ""
+ mainField2 = ""
+ mainField3 = ""
+ mainField4 = ""
+ statusBar = ""
+ mediaTrack = ""
+ image = ""
+ console.debug("exit")
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/ApplicationModel.qml b/src/components/qt_hmi/qml_model_qt4/models/ApplicationModel.qml
new file mode 100644
index 0000000000..206eaa9185
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/ApplicationModel.qml
@@ -0,0 +1,91 @@
+/**
+ * @file ApplicationModel.qml
+ * @brief Own fields for each application.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+
+QtObject {
+ property int appId
+ property string appName
+ property string ngnMediaScreenAppName
+ property Icon appIcon: Icon { }
+ property string deviceName
+ property int hmiDisplayLanguageDesired
+ property bool isMediaApplication
+ property variant appType
+ property int hmiUITextAlignment
+
+ // media player
+ property string playPauseState
+ property ApplicationData hmiUIText: ApplicationData { }
+ property MediaClockModel mediaClock: MediaClockModel { }
+
+ property string helpPrompt
+ property string timeoutPrompt
+ property ListModel options: ListModel { }
+
+ property ListModel currentSubMenu: options
+ property ListModel turnList
+ property ListModel softButtons
+ property ListModel turnListSoftButtons
+ property ListModel customPresets
+ property int languageTTSVR
+ // This place is for adding new properties
+
+ function reset () {
+ console.debug("enter")
+ appId = -1
+ appName = ""
+ ngnMediaScreenAppName = ""
+ appIcon.reset()
+ deviceName = ""
+ hmiDisplayLanguageDesired = -1
+ isMediaApplication = false
+ appType = undefined
+ playPauseState = ""
+ hmiUIText.reset()
+// no need to reset mediaClock
+ helpPrompt = ""
+ timeoutPrompt = ""
+ options.clear()
+ currentSubMenu = options
+ turnList = null
+ softButtons = null
+ turnListSoftButtons = null
+ customPresets = null
+ languageTTSVR = -1
+ hmiUITextAlignment = null
+ console.debug("exit")
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/CarMenuModel.qml b/src/components/qt_hmi/qml_model_qt4/models/CarMenuModel.qml
new file mode 100644
index 0000000000..f636d1e794
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/CarMenuModel.qml
@@ -0,0 +1,78 @@
+/**
+ * @file CarMenuModel.qml
+ * @brief Car menu list of elements.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+
+ListModel
+{
+ ListElement {
+ name: "ambient"
+ icon: "../res/vehicle/Ambient Lighti Icon.png"
+ qml: ""
+ }
+ ListElement {
+ name: "cal"
+ icon: "../res/vehicle/cal.png"
+ qml: ""
+ }
+ ListElement {
+ name: "ev"
+ icon: "../res/vehicle/EV Icon.png"
+ qml: ""
+ }
+ ListElement {
+ name: "folders"
+ icon: "../res/vehicle/folders.png"
+ qml: ""
+ }
+ ListElement {
+ name: "key"
+ icon: "../res/vehicle/key_car.png"
+ qml: ""
+ }
+ ListElement {
+ name: "mcs"
+ icon: "../res/vehicle/MCS Icon.png"
+ qml: ""
+ }
+ ListElement {
+ name: "sun"
+ icon: "../res/vehicle/sun.png"
+ qml: ""
+ }
+ ListElement {
+ name: "sync"
+ icon: "../res/vehicle/SYNC Services.png"
+ qml: ""
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/Constants.js b/src/components/qt_hmi/qml_model_qt4/models/Constants.js
new file mode 100644
index 0000000000..1bc5c558ba
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/Constants.js
@@ -0,0 +1,249 @@
+/**
+ * @file Constants.js
+ * @brief Namespace of constants.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+.pragma library
+
+// Colors
+
+// Main color of HMI model(now it ~lightblue). Buttons, text, icons of this color.
+var primaryColor = "#1d81d5"
+
+// Color of pressed buttons, text, icons etc.
+var primaryColorPressed = "#8ec0ea"
+
+// Secondary color of HMI model, backgroud of this color.
+var secondaryColor = "black"
+
+// Color of text at buttonts that are inactive (at phone keyboard, when no any contact started with current letter).
+var inactiveButtonTextColor = "grey"
+
+// Color of text at buttonts that are inactive but nevertheless pressed (at phone keyboard, when no any contact started with current letter).
+var inactiveButtonTextColorPressed = "lightgrey"
+
+// Color of text at contact list screen view (Name, number and number type).
+var contactTextColor = "lightblue"
+
+// Color of text at buttons, when they are pressed.
+var pressedButtonTextColor = "black"
+
+// Color of text at "white" buttons, for all other buttons (which most) use primaryColor.
+var releasedButtonTextColor = "white"
+
+// Transparent background.
+var transparentColor = "#00000000"
+
+// "Warning" word color
+var warningColor = "red"
+
+// Color for PopUp
+var popUpBorderColor = "white"
+
+// Color for hardware and simulation panels
+var panelColor = "#003"
+
+// Color for text in hardware and simulation panels
+var panelTextColor = "white"
+
+// Audio pass thru PopUp text color
+var audioPassThruTextColor = "white"
+
+// Color for border of controls
+var controlsBorderColor = "#ababab"
+
+//--------------------------------------------------------------------------------------
+
+// Font sizes of different elements
+
+// Font size for most of text in HMI model.
+var fontSize = 20
+
+// Font size for text inside oval buttons.
+var ovalButtonFontSize = 15
+
+// Title font size
+var titleFontSize = 35
+
+// Power on/off button font size
+var powerButtonFornSize = 25
+
+// Font size of status bar
+var statusBarFontSize = 15
+
+// Size icon for buttons
+var iconButtonSize = 30
+
+// Size icon for item list
+var iconItemListSize = 40
+
+// font size fo TTS popup
+var ttsFontSize = 12
+
+// Font size for list of applications
+var appListFontSize = 40
+
+// Size of contact list fields
+var contactListNameFieldSize = 0.4
+var contactListPhoneFieldSize = 0.3
+var contactListDescriptionFieldSize = 0.3
+
+//--------------------------------------------------------------------------------------
+
+// Sizes of buttons, menus, screen, etc
+
+// Minimal width and height of screen (screen wont resize, if height and width are lower).
+var mainScreenMinWidth = 800
+var mainScreenMiHeight = 600
+
+// Width for long oval button
+var ovalButtonWidth = 163
+
+// Height for oval button
+var ovalButtonHeight = 65
+
+// Height item list
+var itemListHeight = 60
+
+// Width for TTS popup
+var ttsPopUpWidth = 250
+
+// Height for TTS popup
+var ttsPopUpHeight = 100
+
+// Width for popup view
+var popupWidth = 700
+
+// Width for alert window
+var alertWidth = 360
+
+// Height for popup view
+var popupHeigth = 500
+
+// Width for combobox
+var defaultComboboxWidth = 150
+
+// Size icon for list of applications
+var appListIconSize = 100
+
+// DistanceBar height
+var distanceBarHeight = 1
+
+
+//---------------------------------------------------------------------------------------
+
+// Other
+
+// Offset from the edges of the screen.
+var margin = 20
+
+// Offset from the edges of the popup
+var popupMargin = 15
+
+// Spacing between contacts at contact screen view.
+var contactListSpacing = 30
+
+// Duration of appearance of icon/button at icon/button menus.
+var animationDuration = 500
+
+// Duration of appearence of "OK" button at warning screen view, when HMI starts.
+var warningScreenDuration = 1000
+
+// Timer to check how long preset button is pressed.
+var presetButtonTimer = 800
+
+// Spacing between icon and item in list
+var iconItemListSpacing = 20
+
+// Spacing between item on views
+var generalSpacing = 10
+
+// Width of scrollBar
+var scrollBarWidth = 5
+
+// Speak text for a given time
+var ttsSpeakTime = 2000
+
+// Maximal number of submenus
+var maximumSubmenus = 1000
+
+// Maximal number of commands in submenu or root menu
+var maximumCommandsPerSubmenu = 1000
+
+// padding for popup view
+var popUpPadding = 20
+
+// Padding for TTS popup
+var ttsPopUpPadding = 10
+
+// -------------------------
+var sliderBarWidth = 400
+var sliderBarHeight = 50
+var sliderBarRadius = 3
+var sliderBarBorderWidth = 1
+var sliderTextColor = "white"
+var sliderBarBorderColor = "white"
+var sliderBarFillColor = "white"
+
+// -------------------------
+var scrollableMessageTextColor = "white"
+var scrollableMessageScrollBarColor = "gray"
+var scrollableMessageScrollBarWidth = 10
+
+// Padding for hardware and simulation panels
+var panelPadding = 20
+
+// Scale for pressed icon in menu
+var pressedIconScale = 1.1
+
+// Values of color effect for highlighted button
+var highlightedButtonHue = 0.9
+var highlightedButtonSaturation = 0.0
+var highlightedButtonLightness = 0.1
+
+// Values of color effect for disabled button
+var disabledButtonHue = 0.0
+var disabledButtonSaturation = -1.0
+var disabledButtonLightness = 0.1
+
+// Count of rows for grid menu
+var menuRowCount = 2
+
+// Count of columns for grid menu
+var menuColumnCount = 3
+
+// Radius of controls
+var controlsRadius = 2
+
+// Width of border of controls
+var controlsBorderWidth = 1
+// Position for element that came without position value (should be always at the end)
+var positionOfElementWithoutPosition = 1001
diff --git a/src/components/qt_hmi/qml_model_qt4/models/ContactsListModel.qml b/src/components/qt_hmi/qml_model_qt4/models/ContactsListModel.qml
new file mode 100644
index 0000000000..348d30156c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/ContactsListModel.qml
@@ -0,0 +1,98 @@
+/**
+ * @file ContactsListModel.qml
+ * @brief List of contacts.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+
+ListModel
+{
+ // TODO {ALeshin}: This list model should be sorted in ABC and Upper/lower case order,
+ // when it will be filled dynamically.
+ ListElement { name: "Aaron" ; phone:"(614)555-2444";type:"Mobile"}
+ ListElement { name: "Adrian" ; phone:"(740)245-3434";type:"Mobile" }
+ ListElement { name: "Albert" ; phone:"(614)245-5584";type:"Mobile" }
+ ListElement { name: "Alice" ; phone:"(313)878-3566";type:"Office"}
+ ListElement { name: "Alec" ; phone:"(917)608-2418";type:"Mobile"}
+ ListElement { name: "Alexander" ; phone:"(614)608-2400";type:"Home"}
+ ListElement { name: "Alexander Vasil'evich Michail Leontiy" ; phone:"(614)608-2400";type:"Mobile"}
+ ListElement { name: "Amber" ; phone:"(614)608-2111";type:"Mobile"}
+ ListElement { name: "Amy" ; phone:"(440)245-3434";type:"Mobile" }
+ ListElement { name: "Andy" ; phone:"(313)245-3434";type:"Mobile" }
+ ListElement { name: "Antje" ; phone:"(567)245-3434";type:"Home" }
+ ListElement { name: "buddy" ; phone:"(614)813-6610";type:"Mobile" }
+ ListElement { name: "Barry" ; phone:"(313)555-2211";type:"Mobile" }
+ ListElement { name: "Bea" ; phone:"(614)455-3434";type:"Mobile" }
+ ListElement { name: "Ben" ; phone:"(614)882-1843";type:"Office" }
+ ListElement { name: "Blake" ; phone:"(330)149-7778";type:"Mobile" }
+ ListElement { name: "Bob Mould" ; phone:"(313)245-3434";type:"Mobile" }
+ ListElement { name: "Brian" ; phone:"(614)332-7499";type:"Mobile" }
+ ListElement { name: "Calvin" ; phone:"(614)442-9974";type:"Mobile" }
+ ListElement { name: "Carl" ; phone:"(567)773-3434";type:"Home" }
+ ListElement { name: "Cat Power" ; phone:"(313)608-3434";type:"Home"}
+ ListElement { name: "Cathy" ; phone:"(313)444-456";type:"Home"}
+ ListElement { name: "Chris" ; phone:"(734)997-6514";type:"Home" }
+ ListElement { name: "Cloud Nothings"; phone:"(444)608-543";type:"Mobile"}
+ ListElement { name: "Cody" ; phone:"(567)365-8413";type:"Home" }
+ ListElement { name: "Curtis" ; phone:"(614)245-1547";type:"Office" }
+ ListElement { name: "Dakota" ; phone:"(567)555-4444";type:"Home" }
+ ListElement { name: "Dale" ; phone:"(567)723-1974";type:"Mobile" }
+ ListElement { name: "Dallas"; phone:"(614)556-879";type:"Home"}
+ ListElement { name: "Damian" ; phone:"(614)245-3434";type:"Office" }
+ ListElement { name: "Daniel"; phone:"(614)556-879";type:"Home"}
+ ListElement { name: "Darina"; phone:"(313)895-888";type:"Mobile"}
+ ListElement { name: "Dee "; phone:"(313)432-3434";type:"Home"}
+// ListElement { name: "Edward" ; phone:"(917)608-975";type:"Office"}
+ ListElement { name: "Ferdinand" ; phone:"(917)879-795";type:"Mobile"}
+ ListElement { name: "gomez" ; phone:"(313)455-543";type:"Mobile"}
+ ListElement { name: "Harry Potter"; phone:"(313)888-432";type:"Home"}
+ ListElement { name: "Ivan"; phone:"(313)996-225";type:"Home"}
+// ListElement { name: "James" ; phone:"(917)608-3434";type:"Mobile"}
+ ListElement { name: "Karen"; phone:"(313)998-332";type:"Home"}
+ ListElement { name: "Luis Torres"; phone:"(313)779-111";type:"Home"}
+ ListElement { name: "Mary"; phone:"(313)234-098";type:"Mobile"}
+ ListElement { name: "Neil"; phone:"(313)444-112";type:"Mobile"}
+ ListElement { name: "Oswald"; phone:"(313)456-921";type:"Mobile"}
+ ListElement { name: "Oscar"; phone:"(313)332-778";type:"Home"}
+ ListElement { name: "~1123"; phone:"(313)1332";type:"Home"}
+ ListElement { name: "Patrice"; phone:"(313)789-111";type:"Mobile"}
+ ListElement { name: "Queen Elizabeth"; phone:"(313)897-666";type:"Mobile"}
+ ListElement { name: "Rose"; phone:"(313)111-211";type:"Mobile"}
+ ListElement { name: "Susell"; phone:"(313)345-122";type:"Home"}
+ ListElement { name: "Thomas"; phone:"(917)608-342";type:"Mobile"}
+ ListElement { name: "Titus Andronicus" ; phone:"(917)608-321";type:"Office"}
+ ListElement { name: "Toretto" ; phone:"(917)608-3434";type:"Home"}
+ ListElement { name: "Uhl" ; phone:"(313)444-654";type:"Office"}
+ ListElement { name: "willi" ; phone:"(313)224-5712";type:"Office"}
+ ListElement { name: "Wanda" ; phone:"(313)666-6969";type:"Office"}
+ ListElement { name: "wanda" ; phone:"(313)666-6969";type:"Office"}
+ ListElement { name: "Zara" ; phone:"(313)231-009";type:"Mobile"}
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/DataStorage.qml b/src/components/qt_hmi/qml_model_qt4/models/DataStorage.qml
new file mode 100644
index 0000000000..cc5f6fc215
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/DataStorage.qml
@@ -0,0 +1,510 @@
+/**
+ * @file DataStorage.qml
+ * @brief Container for data.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "Internal.js" as Internal
+import "Constants.js" as Constants
+
+QtObject {
+
+ property string contactsFirstLetter // first letter of contact's name that need to find at contact list
+ property ApplicationModel currentApplication: ApplicationModel { }
+ property SliderModel uiSlider: SliderModel { }
+ property PerformAudioPassThruModel uiAudioPassThru: PerformAudioPassThruModel { }
+
+ function getApplication(appId) {
+ console.log("dataContainer getApplication enter");
+ for(var i = 0; i < applicationList.count; i++) {
+ if(applicationList.get(i).appId === appId) {
+ console.log("Application found", applicationList.get(i));
+ return applicationList.get(i);
+ }
+ }
+ console.log("dataContainer getApplication exit");
+ }
+
+ onApplicationListChanged: {
+ console.log("onApplicationListChanged()");
+ setCurrentApplication(appId);
+ }
+
+ function setCurrentApplication(appId) {
+ console.log("Enter setCurrentApplication function");
+ var oldApplicationContext = applicationContext;
+ if (currentApplication.appId !== appId) {
+ applicationContext = false;
+ }
+
+ for(var i = 0; i < applicationList.count; i++) {
+ if(applicationList.get(i).appId === appId) {
+ currentApplication.appId = appId
+ var application = applicationList.get(i)
+ currentApplication.appName = application.appName
+ currentApplication.appType = application.appType
+ currentApplication.appIcon.source = application.icon
+ currentApplication.playPauseState = application.playPauseState
+ currentApplication.options = application.options
+ currentApplication.softButtons = application.softButtons
+ currentApplication.customPresets = application.customPresets
+
+ if (application.hmiUIText.mainField1 !== undefined) {
+ currentApplication.hmiUIText.mainField1 = application.hmiUIText.mainField1
+ }
+ if (application.hmiUIText.mainField2 !== undefined) {
+ currentApplication.hmiUIText.mainField2 = application.hmiUIText.mainField2
+ }
+ if (application.hmiUIText.mainField3 !== undefined) {
+ currentApplication.hmiUIText.mainField3 = application.hmiUIText.mainField3
+ }
+ if (application.hmiUIText.mainField4 !== undefined) {
+ currentApplication.hmiUIText.mainField4 = application.hmiUIText.mainField4
+ }
+ if (application.hmiUIText.statusBar !== undefined) {
+ currentApplication.hmiUIText.statusBar = application.hmiUIText.statusBar
+ }
+ if (application.hmiUIText.mediaTrack !== undefined) {
+ currentApplication.hmiUIText.mediaTrack = application.hmiUIText.mediaTrack
+ }
+ if (application.hmiUIText.image !== undefined) {
+ currentApplication.hmiUIText.image = application.hmiUIText.image
+ }
+ if (application.hmiUITextAlignment !== undefined) {
+ currentApplication.hmiUITextAlignment = application.hmiUITextAlignment
+ }
+ if (application.helpPrompt !== undefined) {
+ currentApplication.helpPrompt = application.helpPrompt
+ }
+ if (application.timeoutPrompt !== undefined) {
+ currentApplication.timeoutPrompt = application.timeoutPrompt
+ }
+ // Check fields with mandatory = false
+
+ currentApplication.deviceName = application.deviceName
+ currentApplication.isMediaApplication = application.isMediaApplication
+ currentApplication.turnList = application.turnList
+ currentApplication.turnListSoftButtons = application.turnListSoftButtons
+ currentApplication.mediaClock.updateMode = application.mediaClock.updateMode
+ currentApplication.mediaClock.runningMode = application.mediaClock.runningMode
+ currentApplication.mediaClock.startTimeForProgress = application.mediaClock.startTimeForProgress
+ if (application.mediaClock.startTime !== undefined) {
+ currentApplication.mediaClock.startTime = application.mediaClock.startTime
+ }
+ if (application.mediaClock.endTime !== undefined) {
+ currentApplication.mediaClock.endTime = application.mediaClock.endTime
+ }
+ currentApplication.languageTTSVR = application.languageTTSVR
+ currentApplication.hmiDisplayLanguageDesired = application.hmiDisplayLanguageDesired
+ // This place is for adding new properties
+ }
+ }
+ applicationContext = oldApplicationContext;
+ currentApplicationChanged()
+ console.log("Exit setCurrentApplication function")
+ }
+
+ function addApplication(app) {
+ console.log("enter")
+ applicationList.append({
+ appName: app.appName,
+ ngnMediaScreenAppName: app.ngnMediaScreenAppName,
+ icon: app.icon,
+ deviceName: app.deviceName,
+ appId: app.appId,
+ hmiDisplayLanguageDesired: app.hmiDisplayLanguageDesired,
+ isMediaApplication: app.isMediaApplication,
+ appType: app.appType,
+ helpPrompt: "",
+ timeoutPrompt: "",
+ customPresets: app.customPresets ? app.customPresets : [],
+ playPauseState: 'Pause',
+ hmiUIText: app.hmiUIText,
+ hmiUITextAlignment: app.hmiUITextAlignment,
+ options: [],
+ turnList: [],
+ turnListSoftButtons: [],
+ mediaClock: app.mediaClock,
+ languageTTSVR: Common.Language.EN_US,
+ softButtons: []
+ // This place is for adding new properties
+ })
+
+ if (app.isMediaApplication) {
+ musicSourceModel.insert(0, {
+ "title": app.appName,
+ "qml": "views/SDLPlayerView.qml",
+ "appId": app.appId
+ })
+ }
+
+ console.log("exit")
+ }
+
+ function setApplicationProperties(appId, props) {
+ console.log("Enter setApplicationProperties function");
+ var app = getApplication(appId)
+ for (var p in props) {
+ if (props[p] !== undefined) {
+ app[p] = props[p]
+ }
+ }
+ if (currentApplication.appId === appId) {
+ setCurrentApplication(appId); // copy new values to current application
+ }
+ console.log("Exit setApplicationProperties function");
+ }
+
+ function removeApplication(appId) {
+ console.log("enter");
+ for (var j = 0; j < musicSourceModel.count; ++j) {
+ if (musicSourceModel.get(j).appId === appId) {
+ musicSourceModel.remove(j);
+ break;
+ }
+ }
+ for (var i = 0; i < applicationList.count; i++) {
+ if (applicationList.get(i).appId === appId) {
+ applicationList.remove(i);
+ break;
+ }
+ }
+ console.log("exit");
+ }
+
+ property int systemContext
+ property int hmiContext
+ property bool applicationContext: false
+ property bool applicationSavedContext
+ property string routeText: ""
+ property PlayerState cdPlayerState: PlayerState {
+ playPauseState: 'Pause'
+ albumImage: "../res/album_art.png"
+ trackNumber: "13/16"
+ trackName: "The Dog Days Are Over"
+ albumName: "Florence and the Machine"
+ }
+ property PlayerState ipodPlayerState: PlayerState {
+ albumImage: "../res/album_art.png"
+ trackNumber: "13/16"
+ trackName: "The Dog Days Are Over"
+ albumName: "Florence and the Machine"
+ playPauseState: 'Pause'
+ }
+ property PlayerState usbPlayerState: PlayerState {
+ playPauseState: 'Pause'
+ albumImage: "../res/album_art.png"
+ trackNumber: "13/16"
+ trackName: "The Dog Days Are Over"
+ albumName: "Florence and the Machine"
+ }
+ property PlayerState linePlayerState: PlayerState {
+ playPauseState: 'Pause'
+ albumImage: "../res/album_art.png"
+ trackNumber: "13/16"
+ trackName: "The Dog Days Are Over"
+ albumName: "Florence and the Machine"
+ }
+ property PlayerState btPlayerState: PlayerState {
+ playPauseState: 'Pause'
+ albumImage: "../res/album_art.png"
+ trackNumber: "13/16"
+ trackName: "The Dog Days Are Over"
+ albumName: "Florence and the Machine"
+ }
+ property PlayerState amPlayerState: PlayerState {
+ songName: "So Far Around The Bend"
+ albumName: "The National"
+ presets: [ "1130", "950", "760", "1270", "1400", "2100", "940", "1001" ]
+ }
+ property PlayerState fmPlayerState: PlayerState {
+ songName: "So Far Around The Bend"
+ albumName: "The National"
+ presets: ["96.3", "107.9", "104.3", "101.9", "105.3", "100.5", "107.9", "103.4"]
+ }
+ property PlayerState siriusPlayerState: PlayerState {
+ songName: "So Far Around The Bend"
+ albumName: "The National"
+ presets: [ "Lithium", "Spectrum", "ESPN", "Alt Nation", "Lithium", "Spectrum", "ESPN", "Alt Nation" ]
+ }
+
+ property bool hmiVRAvailable: false
+ property bool hmiTTSAvailable: false
+ property bool hmiNavigationAvailable: false
+ property bool hmiVehicleInfoAvailable: false
+ property bool hmiUIAvailable: false
+
+ property int hmiUILanguage: Common.Language.EN_US
+ property int hmiTTSVRLanguage: Common.Language.EN_US
+
+ property ListModel deviceList: ListModel { }
+ property ListModel applicationList: ListModel { }
+
+ property ListModel vrCommands: ListModel {}
+
+ property ListModel vrHelp: ListModel {}
+
+ function reset () {
+ console.log("dataContainer reset enter");
+ routeText = ""
+ console.log("dataContainer reset exit");
+ }
+
+ function changeRegistrationUI (language, appID) {
+ console.log("dataContainer changeRegistrarionUI enter");
+ setApplicationProperties(appID, { hmiDisplayLanguageDesired: language });
+ console.log("dataContainer changeRegistrarionUI exit");
+ }
+
+ function changeRegistrationTTSVR(language, appID) {
+ console.log("dataContainer changeRegistrationTTSVR enter");
+ setApplicationProperties(appID, { languageTTSVR: language });
+ console.log("dataContainer changeRegistrationTTSVR exit");
+ }
+
+ function addCommand (cmdID, menuParams, cmdIcon, appID) {
+ console.debug("enter: " +
+ cmdID +
+ ", " +
+ (menuParams ?
+ "{" + menuParams.parentID + ", " + menuParams.position + ", " + menuParams.menuName + "}" : menuParams) +
+ ", " +
+ (cmdIcon ?
+ "{" + cmdIcon.value + ", " + cmdIcon.imageType + "}" : cmdIcon) +
+ ", " +
+ appID
+ )
+ var commandToAddPosition
+ var app = getApplication(appID)
+ var currentMenu = app.options
+ var maximumCommands = Constants.maximumCommandsPerSubmenu
+ var index = 0
+
+ if ((menuParams) && (menuParams.parentID)) { // Work with sub menu
+ var parentNotFound = true
+ for (var optionIndex = 0; optionIndex < app.options.count; ++optionIndex) {
+ if ((app.options.get(optionIndex).type === Internal.MenuItemType.MI_SUBMENU) && (app.options.get(optionIndex).id === menuParams.parentID)) {
+ currentMenu = app.options.get(optionIndex).subMenu
+ parentNotFound = false
+ maximumCommands += 1
+ }
+ }
+ if (parentNotFound) {
+ console.log("UI::addCommand(): parentID " + menuParams.parentID + " not found")
+ }
+ }
+
+ if (currentMenu.count < maximumCommands) {
+ if (menuParams && (menuParams.position !== undefined)) {
+ commandToAddPosition = menuParams.position
+ } else {
+ commandToAddPosition = Constants.positionOfElementWithoutPosition
+ }
+ for (var i = 0; i < currentMenu.count; i++) {
+ if (commandToAddPosition >= currentMenu.get(i).position) {
+ index = i + 1
+ } else {
+ break
+ }
+ }
+ currentMenu.insert( index,
+ { id: cmdID,
+ name: menuParams.menuName,
+ type: Internal.MenuItemType.MI_NODE,
+ position: commandToAddPosition,
+ icon: cmdIcon ? cmdIcon : {},
+ subMenu: []
+ })
+ } else {
+ console.log("addCommand(): too many commands in menu: ", menuParams.parentID, " rejecting")
+ throw Common.Result.REJECTED
+ }
+ console.debug("exit")
+ }
+
+ function deleteCommand (cmdID, appID) {
+ console.debug("enter: " + cmdID + ", " + appID)
+ for (var optionIndex = 0; optionIndex < getApplication(appID).options.count; ++optionIndex) {
+ var option = getApplication(appID).options.get(optionIndex)
+ if (option.type === Internal.MenuItemType.MI_NODE) {
+ if (option.id === cmdID) {
+ getApplication(appID).options.remove(optionIndex)
+ break
+ }
+ }
+ if (option.type === Internal.MenuItemType.MI_SUBMENU) {
+ var subMenu = option.subMenu
+ var idMatchFound = false
+ for (var subOptionIndex = 0; subOptionIndex < subMenu.count; ++subOptionIndex) {
+ if (subMenu.get(subOptionIndex).id === cmdID) {
+ idMatchFound = true
+ if (subMenu !== currentApplication.currentSubMenu) {
+ subMenu.remove(subOptionIndex)
+ }
+ else {
+ console.log("UI::deleteCommand(): cannot remove item from current submenu")
+ throw Common.Result.IN_USE
+ }
+ break
+ }
+ }
+ if (idMatchFound) {
+ break
+ }
+ }
+ }
+ console.debug("exit")
+ }
+
+ function addSubMenu (menuID, menuParams, appID) {
+ console.debug("enter: " + menuID + ", {" + menuParams.parentID + ", " + menuParams.position + ", " + menuParams.menuName + "}, " + appID)
+ var app = getApplication(appID)
+ var index = 0
+ var count = app.options.count
+ var subMenuToAddPosition
+
+ if (count < Constants.maximumSubmenus) {
+ if (menuParams.position !== undefined) {
+ subMenuToAddPosition = menuParams.position
+ } else {
+ subMenuToAddPosition = Constants.positionOfElementWithoutPosition
+ }
+ for (var i = 0; i < count; i++) {
+ if (subMenuToAddPosition >= app.options.get(i).position) {
+ index = i + 1
+ } else {
+ break
+ }
+ }
+ app.options.insert(index, {
+ "id": menuID,
+ "name": menuParams.menuName,
+ "position": subMenuToAddPosition,
+ "type": Internal.MenuItemType.MI_SUBMENU,
+ "icon": undefined,
+ "subMenu": [{
+ "id": -1,
+ "name": menuParams.menuName,
+ "position": -1,
+ "type": Internal.MenuItemType.MI_PARENT,
+ "icon": {
+ "imageType": Common.ImageType.DYNAMIC,
+ "value": "../res/nav/turnArrow.png"
+ },
+ "subMenu": getApplication(appID).options
+ }]
+ })
+ }
+ else {
+ console.log("addSubMenu(): too many submenus, rejecting")
+ throw Common.Result.REJECTED
+ }
+ console.debug("exit")
+ }
+
+ function deleteSubMenu (menuID, appID) {
+ console.debug("enter: " + menuID + ", " + appID)
+ for (var optionIndex = 0; optionIndex < getApplication(appID).options.count; ++optionIndex) {
+ var option = getApplication(appID).options.get(optionIndex)
+ if ((option.type === Internal.MenuItemType.MI_SUBMENU) && (option.id === menuID)) {
+ if (option.subMenu !== currentApplication.currentSubMenu) {
+ getApplication(appID).options.remove(optionIndex)
+ }
+ else {
+ console.log("UI::deleteSubMenu(): cannot remove current submenu")
+ throw Common.Result.IN_USE
+ }
+ break
+ }
+ }
+ console.debug("exit")
+ }
+
+ function setVrHelp (vrHelp) {
+ this.vrHelp.clear()
+ var index
+ for (var i = 0; i < vrHelp.length; ++i) {
+ index = 0
+// sort by simple inserts
+ while ((index < this.vrHelp.count) && (this.vrHelp.get(index).position < vrHelp[i].position)) {
+ ++index
+ }
+ this.vrHelp.insert(index, {
+ "text": vrHelp[i].text,
+ "icon": vrHelp[i].image ? vrHelp[i].image : {},
+ "position": vrHelp[i].position
+ })
+ }
+ }
+
+ property NavigationModel navigationModel: NavigationModel { }
+ property VehicleInfoModel vehicleInfoModel: VehicleInfoModel { }
+ property ScrollableMessageModel scrollableMessageModel: ScrollableMessageModel { }
+ property bool activeVR: false
+
+ property InteractionModel interactionModel: InteractionModel {
+ }
+
+ property int driverDistractionState: Common.DriverDistractionState.DD_OFF
+ onDriverDistractionStateChanged: {
+ sdlUI.onDriverDistraction(driverDistractionState);
+ }
+ property bool activeTTS: false
+ property variant activePopup
+ property int popups: 0
+
+ property bool activeAlert: false
+
+ onActiveVRChanged: setSystemContext()
+ onActiveAlertChanged: setSystemContext()
+ onPopupsChanged: setSystemContext()
+
+ function setSystemContext () {
+ console.debug("enter")
+ if (popups > 0) {
+ systemContext = Common.SystemContext.SYSCTXT_HMI_OBSCURED
+ }
+ else if (activeAlert) {
+ systemContext = Common.SystemContext.SYSCTXT_ALERT
+ }
+ else if (activeVR) {
+ systemContext = Common.SystemContext.SYSCTXT_VRSESSION
+ }
+ else if (contentLoader.item !== null) {
+ systemContext = contentLoader.item.systemContext
+ }
+ console.debug("exit")
+ }
+ property MusicSourceModel musicSourceModel: MusicSourceModel {
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/InteractionModel.qml b/src/components/qt_hmi/qml_model_qt4/models/InteractionModel.qml
new file mode 100644
index 0000000000..8da8a035db
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/InteractionModel.qml
@@ -0,0 +1,58 @@
+/**
+ * @file InteractionModel.qml
+ * @brief Interaction model.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Async.js" as Async
+
+QtObject {
+ property string initialText
+ property ListModel choice: ListModel {
+ }
+ property int timeout
+ property variant async
+
+ function performInteraction (initialText, choiceSet, vrHelp, timeout, appID) {
+ console.debug("enter")
+ this.initialText = initialText.fieldText
+ choice.clear()
+ for (var i = 0; i < choiceSet.length; ++i) {
+ choice.append({"id": choiceSet[i].choiceID, "name": choiceSet[i].menuName ? choiceSet[i].menuName : "choiceID = " + choiceSet[i].choiceID, image: choiceSet[i].image})
+ }
+ this.timeout = timeout
+ interactionPopup.activate()
+ async = new Async.AsyncCall()
+ console.debug("exit")
+ return async
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/Internal.js b/src/components/qt_hmi/qml_model_qt4/models/Internal.js
new file mode 100644
index 0000000000..4a1ebc625a
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/Internal.js
@@ -0,0 +1,163 @@
+/**
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var MenuItemType = {
+ MI_NODE: 0,
+ MI_SUBMENU: 1,
+ MI_PARENT: 2
+}
+
+function activePageChoose(flickElement, pages) {
+ if (flickElement.contentX <= 0) {
+ return 0
+ }
+ else if ( (flickElement.contentWidth - flickElement.contentX) < flickElement.width) {
+ return pages -1
+ }
+ else {
+ if ( (flickElement.contentX % flickElement.width) >= (1/6 * flickElement.width)) {
+ return Math.ceil(flickElement.contentX / flickElement.width)
+ }
+ else if ( (flickElement.contentX % flickElement.width) > 0) {
+ return Math.floor(flickElement.contentX / flickElement.width)
+ }
+ }
+}
+
+var MediaClockUpdateMode = {
+ MCU_COUNTUP: 0,
+ MCU_COUNTDOWN: 1,
+}
+
+var MediaClockRunningMode = {
+ MCR_RUNNING: 0,
+ MCR_STOPPED: 1
+}
+
+function appendVrHelpItem (arrayElement, index, array) {
+ this.append({
+ text: arrayElement.text,
+ image: arrayElement.image ? arrayElement.image : "",
+ position: arrayElement.position
+ })
+}
+
+function checkBit(value, bitPosition) {
+ return (value & (1 << bitPosition))
+}
+
+function getArrayForPresetRow() {
+ var array = []
+ for (var i = 0; i < dataContainer.currentApplication.customPresets.count; i++) {
+ array.push(dataContainer.currentApplication.customPresets.get(i).text)
+ }
+ return array
+}
+
+function pad (string, length, lead) {
+ if (!lead) {
+ lead = '0'
+ }
+ var paddedString = "" + string
+ while (paddedString.length < length) {
+ paddedString = lead + paddedString
+ }
+ return paddedString
+}
+
+function hmsTime (hours, minutes, seconds) {
+ return 60 * (60 * hours + minutes) + seconds
+}
+
+function hmsTimeToString (hmsTime) {
+ if (hmsTime === -1) {
+ return "0:00:00"
+ }
+
+ var _time = hmsTime
+ var seconds = _time % 60
+ _time -= seconds
+ _time /= 60
+ var minutes = _time % 60
+ _time -= minutes
+ _time /= 60
+ var hours = _time
+ var string = ""
+ string += hours
+ string += ":"
+ string += pad(minutes, 2)
+ string += ":"
+ string += pad(seconds, 2)
+ return string
+}
+
+function stringToHmsTime (hmsString) {
+ console.debug("enter: \"" + hmsString + "\"")
+ var substrings = hmsString.split(":")
+ var seconds = substrings.length > 0 ? parseInt(substrings.pop()) : 0
+ if (seconds >= 60) {
+ console.log("incorrect field \"seconds\": " + seconds)
+ console.debug("exit")
+ return 0
+ }
+ var minutes = substrings.length > 0 ? parseInt(substrings.pop()) : 0
+ if (minutes >= 60) {
+ console.log("incorrect field \"minutes\": " + minutes)
+ console.debug("exit")
+ return 0
+ }
+ var hours = substrings.length > 0 ? parseInt(substrings.pop()) : 0
+ console.debug("exit")
+ return hmsTime(hours, minutes, seconds)
+}
+
+function mediaClockUpdateModeToString (mediaClockUpdateMode) {
+ switch (mediaClockUpdateMode) {
+ case MediaClockUpdateMode.MCU_COUNTUP:
+ return "Internal.MediaClockUpdateMode.MCU_COUNTUP"
+ case MediaClockUpdateMode.MCU_COUNTDOWN:
+ return "Internal.MediaClockUpdateMode.MCU_COUNTDOWN"
+ default:
+ return ""
+ }
+}
+
+function mediaClockRunningModeToString (mediaClockRunningMode) {
+ switch (mediaClockRunningMode) {
+ case MediaClockRunningMode.MCR_RUNNING:
+ return "Internal.MediaClockRunningMode.MCR_RUNNING"
+ case MediaClockRunningMode.MCR_STOPPED:
+ return "Internal.MediaClockRunningMode.MCR_STOPPED"
+ default:
+ return ""
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/MainMenuListModel.qml b/src/components/qt_hmi/qml_model_qt4/models/MainMenuListModel.qml
new file mode 100644
index 0000000000..49b4e7fb9a
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/MainMenuListModel.qml
@@ -0,0 +1,79 @@
+/**
+ * @file MainMenuListModel.qml
+ * @brief Main menu list of elements.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+
+ListModel
+{
+ ListElement {
+ name: "Climate"
+ icon: "../res/snow.png"
+ qml: "./views/ClimateControlView.qml"
+ }
+
+ ListElement {
+ name: "Navigation"
+ icon: "../res/arrow.png"
+ qml: "./views/NavigationNoRouteGridView.qml"
+ }
+
+ ListElement {
+ name: "Media"
+ icon: "../res/notes.png"
+ qml: "./views/MusicSourceView.qml"
+ }
+
+ ListElement {
+ name: "Preferences"
+ icon: "../res/gear.png"
+ qml: ""
+ }
+
+ ListElement {
+ name: "Apps"
+ icon: "../res/apps.png"
+ qml: "./views/ApplicationListView.qml"
+ }
+
+ ListElement {
+ name: "Phone"
+ icon: "../res/phone/phone.png"
+ qml: "./views/PhoneMenuGridView.qml"
+ }
+
+ ListElement {
+ name: "Car"
+ icon: "../res/car.png"
+ qml: "./views/CarMenuGridView.qml"
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/MediaClockModel.qml b/src/components/qt_hmi/qml_model_qt4/models/MediaClockModel.qml
new file mode 100644
index 0000000000..8f062008a4
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/MediaClockModel.qml
@@ -0,0 +1,112 @@
+/**
+ * @file MediaClockModel.qml
+ * @brief Media clock model
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "Internal.js" as Internal
+
+QtObject {
+ property int updateMode
+ property int runningMode
+ property int startTime
+ property int endTime
+ property int upperTimeLimit: 60 * 60 * 60 - 1
+ property int startTimeForProgress
+ property real progress
+
+ property Timer timer: Timer {
+ id: timer
+ interval: 1000
+ repeat: true
+ onTriggered: onTimer()
+ }
+ onRunningModeChanged: {
+ if (runningMode === Internal.MediaClockRunningMode.MCR_STOPPED) {
+ timer.stop()
+ } else {
+ timer.start()
+ }
+ }
+
+ onStartTimeChanged: {
+ if (startTime === -1) {
+ progress = 0
+ } else {
+ if (updateMode === Internal.MediaClockUpdateMode.MCU_COUNTUP) {
+ progress = (endTime !== -1) ? (startTime / endTime) : (startTime / upperTimeLimit)
+ } else {
+ progress = (endTime !== -1) ? ( (startTime - endTime) / (startTimeForProgress - endTime) )
+ : (startTime / startTimeForProgress)
+ }
+ }
+ }
+
+ function onTimer () {
+ switch (updateMode) {
+ case Internal.MediaClockUpdateMode.MCU_COUNTUP:
+ if (endTime !== -1) {
+ if (startTime < endTime) {
+ startTime++
+ } else {
+ timer.stop()
+ runningMode = Internal.MediaClockRunningMode.MCR_STOPPED
+ console.debug("count Up timer stopped")
+ }
+ } else {
+ if (startTime < upperTimeLimit) {
+ startTime++
+ } else {
+ startTime = 0
+ }
+ }
+ break
+ case Internal.MediaClockUpdateMode.MCU_COUNTDOWN:
+ console.debug("count down")
+ if (--startTime === 0) {
+ timer.stop()
+ runningMode = Internal.MediaClockRunningMode.MCR_STOPPED
+ startTime = endTime = -1
+ console.debug("count Down timer stopped")
+ }
+ break
+ }
+ dataContainer.setApplicationProperties(dataContainer.currentApplication.appId, {
+ "mediaClock": {startTime: startTime,
+ endTime: endTime,
+ updateMode: updateMode,
+ runningMode: runningMode,
+ startTimeForProgress: startTimeForProgress
+ }
+ })
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/MusicSourceModel.qml b/src/components/qt_hmi/qml_model_qt4/models/MusicSourceModel.qml
new file mode 100644
index 0000000000..b01c4cf834
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/MusicSourceModel.qml
@@ -0,0 +1,78 @@
+/**
+ * @file MusicSourceModel.qml
+ * @brief Music source menu list of elements.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+
+ListModel
+{
+ ListElement {
+ title: "FM"
+ qml: "./views/FMPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "AM"
+ qml: "./views/AMPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "BT Audio"
+ qml: "./views/BTPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "Sirius"
+ qml: "./views/SiriusPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "CD"
+ qml: "./views/CDPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "iPod"
+ qml: "./views/IPodPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "USB"
+ qml: "./views/UsbPlayerView.qml"
+ appId: 0
+ }
+ ListElement {
+ title: "LineIn"
+ qml: "./views/LineInPlayerView.qml"
+ appId: 0
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/NavigationMenuModel.qml b/src/components/qt_hmi/qml_model_qt4/models/NavigationMenuModel.qml
new file mode 100644
index 0000000000..963225719e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/NavigationMenuModel.qml
@@ -0,0 +1,72 @@
+/**
+ * @file NavigationMenuModel.qml
+ * @brief Music source menu list of elements.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+ListModel
+{
+ ListElement {
+ title: "Home"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+ ListElement {
+ title: "Keyboard"
+ icon: "../res/buttons/long_oval_btn.png"
+ qml: "./views/NavigationKeyboardView.qml"
+ }
+ ListElement {
+ title: "Favorites"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+ ListElement {
+ title: "Work"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+ ListElement {
+ title: "Recent"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+ ListElement {
+ title: "POI"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+ ListElement {
+ title: "Scout"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+ ListElement {
+ title: "Waze"
+ icon: "../res/buttons/long_oval_btn.png"
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/NavigationModel.qml b/src/components/qt_hmi/qml_model_qt4/models/NavigationModel.qml
new file mode 100644
index 0000000000..f9203875d3
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/NavigationModel.qml
@@ -0,0 +1,52 @@
+/**
+ * @file NavigationModel.qml
+ * @brief Model for Navigation.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+QtObject {
+ property string text1: ""
+ property string text2: ""
+ property string totalDistance: ""
+ property string eta: ""
+ property string timeToDestination: ""
+ property variant turnIcon
+ property variant nextTurnIcon
+
+ property real distanceToManeuver: 0
+ property real distanceToManeuverScale: 0
+ property bool maneuverComplete
+ property ListModel softButtons: ListModel {}
+ property int appId: -1
+ property ListModel alertManeuverSoftButtons: ListModel {}
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/PerformAudioPassThruModel.qml b/src/components/qt_hmi/qml_model_qt4/models/PerformAudioPassThruModel.qml
new file mode 100644
index 0000000000..8b861d37a2
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/PerformAudioPassThruModel.qml
@@ -0,0 +1,43 @@
+/**
+ * @file PerformAudioPassThruModel.qml
+ * @brief Data model audio pass thru.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+QtObject {
+ property string appName: ""
+ property string firstLine: ""
+ property string secondLine: ""
+ property int timeout: 0
+ property bool running: false
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/PhoneMenuModel.qml b/src/components/qt_hmi/qml_model_qt4/models/PhoneMenuModel.qml
new file mode 100644
index 0000000000..a191f46e46
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/PhoneMenuModel.qml
@@ -0,0 +1,78 @@
+/**
+ * @file PhoneMenuModel.qml
+ * @brief Phone menu list of elements.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+
+ListModel
+{
+ ListElement {
+ name: "phone"
+ icon: "../res/phone/phone.png"
+ qml: ""
+ }
+ ListElement {
+ name: "contacts"
+ icon: "../res/phone/contacts.png"
+ qml: "./views/PhoneKeyboardView.qml"
+ }
+ ListElement {
+ name: "messages"
+ icon: "../res/phone/messages.png"
+ qml: ""
+ }
+ ListElement {
+ name: "DND"
+ icon: "../res/phone/dnd_off.png"
+ qml: ""
+ }
+ ListElement {
+ name: "texts"
+ icon: "../res/phone/texts.png"
+ qml: ""
+ }
+ ListElement {
+ name: "recent"
+ icon: "../res/phone/recent.png"
+ qml: ""
+ }
+ ListElement {
+ name: "keyboard"
+ icon: "../res/phone/keypad.png"
+ qml: ""
+ }
+ ListElement {
+ name: "more"
+ icon: "../res/phone/more.png"
+ qml: ""
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/PlayerState.qml b/src/components/qt_hmi/qml_model_qt4/models/PlayerState.qml
new file mode 100644
index 0000000000..bbacd49f8c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/PlayerState.qml
@@ -0,0 +1,51 @@
+/**
+ * @file PlayerState.qml
+ * @brief List of parameters for each player.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+
+// Player state for all players except SDL media player
+Item {
+ // Media players
+ property string playPauseState
+ property string albumImage
+ property string trackNumber
+ property int songPosition
+ property string trackName
+
+ // Radio Players
+ property variant presets: []
+
+ // Both players
+ property string songName
+ property string albumName
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/ScrollableMessageModel.qml b/src/components/qt_hmi/qml_model_qt4/models/ScrollableMessageModel.qml
new file mode 100644
index 0000000000..6fd441ac3d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/ScrollableMessageModel.qml
@@ -0,0 +1,54 @@
+/**
+ * @file ScrollableMessageModel.qml
+ * @brief Model for Scrollable Message.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+QtObject {
+ property string longMessageText: "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh" +
+ "ffsdjjjjjjjjj jjjjjjjjjjjjjjjjjj jjjjjjjjjjjjjjjjjjj jjjjiiiiiiiiiiiii iiiiiiiiiiii iiiiiiiii iiiiiiiiiiiii iiiiiiiiiiiiioooooo ooooooooo oooooooooooooooo ooooooooooooo ooooooooooooooooooooooooooooooooooooooooooooooo oooooooooooooooooooooooooooo ooooooohhhhhhhhhh hhhhhhhhhhhhh hhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh hhhhhhhhhhhhhh hhhhhhhhhhhhhhhhhh hhhhh"
+ property ListModel softButtons: ListModel {}
+ property int appId: -1
+ property int timeout: 0
+ property variant async
+ property bool running: false
+
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/SettingsStorage.qml b/src/components/qt_hmi/qml_model_qt4/models/SettingsStorage.qml
new file mode 100644
index 0000000000..7fb6cfcdd6
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/SettingsStorage.qml
@@ -0,0 +1,125 @@
+/**
+ * @file SettingsStorage.qml
+ * @brief Storage for keeping settings.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+Item
+{
+ property variant sdlLanguagesList: [
+ Common.Language.EN_US,
+ Common.Language.ES_MX,
+ Common.Language.FR_CA,
+ Common.Language.DE_DE,
+ Common.Language.ES_ES,
+ Common.Language.EN_GB,
+ Common.Language.RU_RU,
+ Common.Language.TR_TR,
+ Common.Language.PL_PL,
+ Common.Language.FR_FR,
+ Common.Language.IT_IT,
+ Common.Language.SV_SE,
+ Common.Language.PT_PT,
+ Common.Language.NL_NL,
+ Common.Language.ZH_TW,
+ Common.Language.JA_JP,
+ Common.Language.AR_SA,
+ Common.Language.KO_KR,
+ Common.Language.PT_BR,
+ Common.Language.CS_CZ,
+ Common.Language.DA_DK,
+ Common.Language.NO_NO
+ ]
+
+ property variant displayCapabilities: {
+ "displayType": Common.DisplayType.GEN2_8_DMA,
+ "textFields": [
+ Common.TextFieldName.mainField1,
+ Common.TextFieldName.mainField2,
+ Common.TextFieldName.mainField3,
+ Common.TextFieldName.mainField4,
+ Common.TextFieldName.statusBar,
+ Common.TextFieldName.mediaClock,
+ Common.TextFieldName.mediaTrack,
+ Common.TextFieldName.alertText1,
+ Common.TextFieldName.alertText2,
+ Common.TextFieldName.alertText3,
+ Common.TextFieldName.scrollableMessageBody,
+ Common.TextFieldName.initialInteractionText,
+ Common.TextFieldName.navigationText1,
+ Common.TextFieldName.navigationText2,
+ Common.TextFieldName.ETA,
+ Common.TextFieldName.totalDistance,
+ Common.TextFieldName.navigationText,
+ Common.TextFieldName.audioPassThruDisplayText1,
+ Common.TextFieldName.audioPassThruDisplayText2,
+ Common.TextFieldName.sliderHeader,
+ Common.TextFieldName.sliderFooter,
+ Common.TextFieldName.notificationText
+ ],
+ "mediaClockFormats": [
+ Common.MediaClockFormat.CLOCK1,
+ Common.MediaClockFormat.CLOCK2,
+ Common.MediaClockFormat.CLOCK3,
+ Common.MediaClockFormat.CLOCKTEXT1,
+ Common.MediaClockFormat.CLOCKTEXT2,
+ Common.MediaClockFormat.CLOCKTEXT3,
+ Common.MediaClockFormat.CLOCKTEXT4
+ ],
+ "graphicSupported": true,
+ "imageCapabilities": [ Common.ImageType.DYNAMIC ],
+ "templatesAvailable": [ "" ],
+ "screenParams": {
+ "resolution": {
+ "resolutionWidth": 800,
+ "resolutionHeight": 480
+ },
+ "touchEventAvailable": {
+ "pressAvailable": true,
+ "multiTouchAvailable": true,
+ "doublePressAvailable": true
+ }
+ },
+ "numCustomPresetsAvailable": 6
+ }
+
+ property variant softButtonCapabilities: {
+ "shortPressAvailable": true,
+ "longPressAvailable": true,
+ "upDownAvailable": true,
+ "imageSupported": true
+ }
+
+ property variant buttonCapabilities: []
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/SliderModel.qml b/src/components/qt_hmi/qml_model_qt4/models/SliderModel.qml
new file mode 100644
index 0000000000..d335c9eb2a
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/SliderModel.qml
@@ -0,0 +1,45 @@
+/**
+ * @file SliderModel.qml
+ * @brief Data model for slider.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+QtObject {
+ property string appName: ""
+ property string header: ""
+ property variant footer: []
+ property int numTicks: 0
+ property int position: 0
+ property int timeout: 0
+ property bool running: false
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/models/VehicleInfoModel.qml b/src/components/qt_hmi/qml_model_qt4/models/VehicleInfoModel.qml
new file mode 100644
index 0000000000..f5c309880c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/models/VehicleInfoModel.qml
@@ -0,0 +1,234 @@
+/**
+ * @file VehicleInfoModel.qml
+ * @brief Data model for vehicle info.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+QtObject {
+ id: vehicleInfo
+ property real speed: 80.1
+ property int rpm: 5000
+ property real fuelLevel: 0.2
+ property int fuelLevel_State: Common.ComponentVolumeStatus.CVS_LOW
+ property real instantFuelConsumption: 2.2
+ property int driverBraking: Common.VehicleDataEventStatus.VDES_NO_EVENT
+ property int wiperStatus: Common.WiperStatus.OFF
+ property real engineTorque: 2.5
+ property real accPedalPosition: 0.5
+ property real steeringWheelAngle: 1.2
+ property real externalTemperature: 40.0
+ property string vin: '52-452-52-752'
+ property int odometer: 2
+ property int prndl: Common.PRNDL.FIFTH
+
+ property variant headLampStatus: {
+ "lowBeamsOn": false,
+ "highBeamsOn": false,
+ "ambientLightSensorStatus": Common.AmbientLightStatus.TWILIGHT_1
+ }
+ property variant deviceStatus: {
+ 'voiceRecOn': false,
+ 'btIconOn': false,
+ 'callActive': false,
+ 'phoneRoaming': false,
+ 'textMsgAvailable': false,
+ 'battLevelStatus': Common.DeviceLevelStatus.ZERO_LEVEL_BARS,
+ 'stereoAudioOutputMuted': false,
+ 'monoAudioOutputMuted': false,
+ 'signalLevelStatus': Common.DeviceLevelStatus.ZERO_LEVEL_BARS,
+ 'primaryAudioSource': Common.PrimaryAudioSource.NO_SOURCE_SELECTED,
+ 'eCallEventActive': false
+ }
+ property variant bodyInformation: {
+ 'parkBrakeActive': false,
+ 'ignitionStableStatus': Common.IgnitionStableStatus.IGNITION_SWITCH_NOT_STABLE,
+ 'ignitionStatus': Common.IgnitionStatus.IS_UNKNOWN
+ }
+ property variant beltStatus: {
+ 'driverBeltDeployed': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'passengerBeltDeployed': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'passengerBuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'driverBuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'leftRow2BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'passengerChildDetected': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'rightRow2BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'middleRow2BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'middleRow3BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'leftRow3BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'rightRow3BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'leftRearInflatableBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'rightRearInflatableBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'middleRow1BeltDeployed': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ 'middleRow1BuckleBelted': Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ }
+ property variant tirePressure: {
+ 'pressureTelltale': Common.WarningLightStatus.WLS_ON,
+ 'leftFront': { status: Common.ComponentVolumeStatus.CVS_NORMAL},
+ 'rightFront': { status: Common.ComponentVolumeStatus.CVS_UNKNOWN },
+ 'leftRear': { status: Common.ComponentVolumeStatus.CVS_NORMAL },
+ 'rightRear': { status: Common.ComponentVolumeStatus.CVS_UNKNOWN },
+ 'innerLeftRear': { status: Common.ComponentVolumeStatus.CVS_UNKNOWN },
+ 'innerRightRear': { status: Common.ComponentVolumeStatus.CVS_UNKNOWN }
+ }
+ property variant gps: {
+ 'longitudeDegrees': 42.3293,
+ 'latitudeDegrees': -83.0464,
+ 'utcYear': 2013,
+ 'utcMonth': 2,
+ 'utcDay': 14,
+ 'utcHours': 13,
+ 'utcMinutes': 16,
+ 'utcSeconds': 54,
+ 'compassDirection': Common.CompassDirection.SOUTHWEST,
+ 'pdop': 4,
+ 'hdop': 5,
+ 'vdop': 6,
+ 'actual': false,
+ 'satellites': 8,
+ 'dimension': Common.Dimension.Dimension_2D,
+ 'altitude': 7,
+ 'heading': 173,
+ 'speed': 2
+ }
+ property variant ecuDIDData: {
+ 'data1': 'ECU 1 Test Data',
+ 'data2': 'ECU 2 Test Data'
+ }
+ property variant eCallInfo: {
+ "eCallNotificationStatus" : Common.VehicleDataNotificationStatus.VDNS_NORMAL,
+ "auxECallNotificationStatus" : Common.VehicleDataNotificationStatus.VDNS_ACTIVE,
+ "eCallConfirmationStatus" : Common.ECallConfirmationStatus.ECCS_NORMAL
+ }
+ property variant airbagStatus: {
+ "driverAirbagDeployed" : Common.VehicleDataEventStatus.VDES_NO_EVENT,
+ "driverSideAirbagDeployed" : Common.VehicleDataEventStatus.VDES_NO,
+ "driverCurtainAirbagDeployed" : Common.VehicleDataEventStatus.VDES_YES,
+ "passengerAirbagDeployed" : Common.VehicleDataEventStatus.VDES_NOT_SUPPORTED,
+ "passengerCurtainAirbagDeployed" : Common.VehicleDataEventStatus.VDES_FAULT,
+ "driverKneeAirbagDeployed" : Common.VehicleDataEventStatus.VDES_NO,
+ "passengerSideAirbagDeployed" : Common.VehicleDataEventStatus.VDES_YES,
+ "passengerKneeAirbagDeployed" : Common.VehicleDataEventStatus.VDES_NOT_SUPPORTED
+ }
+ property variant emergencyEvent: {
+ "emergencyEventType" : Common.EmergencyEventType.EET_NO_EVENT,
+ "fuelCutoffStatus" : Common.EmergencyEventType.EET_FRONTAL,
+ "rolloverEvent" : Common.EmergencyEventType.EET_SIDE,
+ "maximumChangeVelocity" : Common.EmergencyEventType.EET_REAR,
+ "multipleEvents" : Common.EmergencyEventType.EET_ROLLOVER
+ }
+ property variant clusterModeStatus: {
+ "powerModeActive" : true,
+ "powerModeQualificationStatus" : Common.PowerModeQualificationStatus.POWER_MODE_UNDEFINED,
+ "carModeStatus" : Common.CarModeStatus.CMS_NORMAL,
+ "powerModeStatus" : Common.PowerModeStatus.KEY_OUT
+ }
+ property variant myKey: {
+ "e911Override": Common.VehicleDataStatus.VDS_NO_DATA_EXISTS
+ }
+
+
+ function sendGpsChange(){
+ sdlVehicleInfo.onGps(vehicleInfo.gps)
+ }
+ function sendSpeedChange(){
+ sdlVehicleInfo.onSpeed(vehicleInfo.speed)
+ }
+ function sendRpmChange(){
+ sdlVehicleInfo.onRpm(vehicleInfo.rpm)
+ }
+ function sendFuelLevelChange(){
+ sdlVehicleInfo.onFuelLevel(vehicleInfo.fuelLevel)
+ }
+ function sendFuelLevel_StateChange(){
+ sdlVehicleInfo.onFuelLevel_State(vehicleInfo.fuelLevel_State)
+ }
+ function sendInstantFuelConsumptionChange(){
+ sdlVehicleInfo.onInstantFuelConsumption(vehicleInfo.instantFuelConsumption)
+ }
+ function sendExternalTemperatureChange(){
+ sdlVehicleInfo.onExternalTemperature(vehicleInfo.externalTemperature)
+ }
+ function sendPrndlChange() {
+ if (dataContainer.vehicleInfoModel.prndl !== -1)
+ {sdlVehicleInfo.onPrndl(vehicleInfo.prndl)}
+ }
+ function sendTirePressureChange(){
+ sdlVehicleInfo.onTirePressure(vehicleInfo.tirePressure)
+ }
+ function sendOdometerChange(){
+ sdlVehicleInfo.onOdometer(vehicleInfo.odometer)
+ }
+ function sendBeltStatusChange(){
+ sdlVehicleInfo.onBeltStatus(vehicleInfo.beltStatus)
+ }
+ function sendBodyInformationChange(){
+ sdlVehicleInfo.onBodyInformation(vehicleInfo.bodyInformation)
+ }
+ function sendDeviceStatusChange(){
+ sdlVehicleInfo.onDeviceStatus(vehicleInfo.deviceStatus)
+ }
+ function sendDriverBrakingChange(){
+ sdlVehicleInfo.onDriverBraking(vehicleInfo.driverBraking)
+ }
+ function sendWiperStatusChange(){
+ sdlVehicleInfo.onWiperStatus(vehicleInfo.wiperStatus)
+ }
+ function sendHeadLampStatusChange(){
+ sdlVehicleInfo.onHeadLampStatus(vehicleInfo.headLampStatus)
+ }
+ function sendEngineTorqueChange(){
+ sdlVehicleInfo.onEngineTorque(vehicleInfo.engineTorque)
+ }
+ function sendAccPedalPositionChange(){
+ sdlVehicleInfo.onAccPedalPosition(vehicleInfo.accPedalPosition)
+ }
+ function sendSteeringWheelAngleChange(){
+ sdlVehicleInfo.onSteeringWheelAngle(vehicleInfo.steeringWheelAngle)
+ }
+ function sendECallInfoChange(){
+ sdlVehicleInfo.onECallInfo(vehicleInfo.eCallInfo)
+ }
+ function sendAirbagStatusChange(){
+ sdlVehicleInfo.onAirbagStatus(vehicleInfo.airbagStatus)
+ }
+ function sendEmergencyEventChange(){
+ sdlVehicleInfo.onEmergencyEvent(vehicleInfo.emergencyEvent)
+ }
+ function sendClusterModeStatusChange(){
+ sdlVehicleInfo.onClusterModeStatus(vehicleInfo.clusterModeStatus)
+ }
+ function sendMyKeyChange(){
+ sdlVehicleInfo.onMyKey(vehicleInfo.myKey)
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/AlertWindow.qml b/src/components/qt_hmi/qml_model_qt4/popups/AlertWindow.qml
new file mode 100644
index 0000000000..70e7ba29ef
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/AlertWindow.qml
@@ -0,0 +1,285 @@
+/**
+ * @file AlertWindow.qml
+ * @brief Alert popup window
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+
+Rectangle {
+ id: alertWindow
+ property date lastAlertTime
+ property variant softButtons
+ property int appId
+ property string popUpName // TODO{ALESHIN}: No requerments for closePopUp, if alert couldn't be closed by closePopUp request - delete everywhere
+
+ color: "transparent"
+
+ property variant async
+
+ Rectangle {
+ id: rectangle
+
+ anchors.centerIn: parent
+ color: "black"
+ border.color: "white"
+
+ width: alertContent.width + 60
+ height: alertContent.height + 60
+
+ property alias alertString: alert.text
+ property alias appNameString: appName.text
+ property int duration
+
+ Column {
+ id: alertContent
+ anchors.centerIn: parent
+ spacing: 20
+
+ Text {
+ id: appName
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: "white"
+ font.pointSize: 16
+ }
+
+ Row {
+ width: Constants.alertWidth
+ spacing: 20
+
+ Image {
+ id: alertLogo
+ source: "../res/warning.png"
+ }
+
+ Text {
+ id: alert
+ width: parent.width - alertLogo.width - parent.spacing
+ clip: true
+ color: "white"
+ font.pointSize: 16
+ }
+ }
+
+ Rectangle {
+ id: progressIndicator
+ color: "white"
+ height: 10
+ }
+
+ Column {
+ Item {
+ width: Constants.alertWidth
+ height: alertButton1.visible ? alertButton1.height : 0
+
+ SoftButton {
+ id: alertButton1
+ appId: alertWindow.appId
+ button: softButtons && softButtons.length > 0 ? softButtons[0] : undefined
+ anchors.left: parent.left
+ anchors.right: alertButton2.visible ? alertButton2.left : parent.right
+ width: Constants.alertWidth / 2
+ onPressed: { alertWindow.keep = true; }
+ onReleased: { alertWindow.keep = false; }
+ onKeepContext: {
+ alertWindow.restart();
+ sdlUI.onResetTimeout(appId, "UI.Alert")
+ }
+ onDefaultAction: { alertWindow.complete(Common.Result.SUCCESS); }
+ onStealFocus: {
+ contentLoader.go("views/SDLPlayerView.qml", appId);
+ alertWindow.complete(Common.Result.SUCCESS);
+ }
+ }
+ SoftButton {
+ id: alertButton2
+ appId: alertWindow.appId
+ button: softButtons && softButtons.length > 1 ? softButtons[1] : undefined
+ anchors.right: parent.right
+ width: Constants.alertWidth / 2
+ onPressed: { alertWindow.keep = true; }
+ onReleased: { alertWindow.keep = false; }
+ onKeepContext: {
+ alertWindow.restart();
+ sdlUI.onResetTimeout(appId, "UI.Alert")
+ }
+ onDefaultAction: { alertWindow.complete(Common.Result.SUCCESS); }
+ onStealFocus: {
+ contentLoader.go("views/SDLPlayerView.qml", appId);
+ alertWindow.complete(Common.Result.SUCCESS);
+ }
+ }
+ }
+ Item {
+ width: Constants.alertWidth
+ height: alertButton3.visible ? childrenRect.height : 0
+ SoftButton {
+ id: alertButton3
+ appId: alertWindow.appId
+ button: softButtons && softButtons.length > 2 ? softButtons[2] : undefined
+ anchors.left: parent.left
+ anchors.right: alertButton4.visible ? alertButton4.left : parent.right
+ width: Constants.alertWidth / 2
+ onPressed: { alertWindow.keep = true; }
+ onReleased: { alertWindow.keep = false; }
+ onKeepContext: {
+ alertWindow.restart();
+ sdlUI.onResetTimeout(appId, "UI.Alert")
+ }
+ onDefaultAction: { alertWindow.complete(Common.Result.SUCCESS); }
+ onStealFocus: {
+ contentLoader.go("views/SDLPlayerView.qml", appId);
+ alertWindow.complete(Common.Result.SUCCESS);
+ }
+ }
+ SoftButton {
+ id: alertButton4
+ appId: alertWindow.appId
+ button: softButtons && softButtons.length > 3 ? softButtons[3] : undefined
+ anchors.right: parent.right
+ width: Constants.alertWidth / 2
+ onPressed: { alertWindow.keep = true; }
+ onReleased: { alertWindow.keep = false; }
+ onKeepContext: {
+ alertWindow.restart();
+ sdlUI.onResetTimeout(appId, "UI.Alert")
+ }
+ onDefaultAction: { alertWindow.complete(Common.Result.SUCCESS); }
+ onStealFocus: {
+ contentLoader.go("views/SDLPlayerView.qml", appId);
+ alertWindow.complete(Common.Result.SUCCESS);
+ }
+ }
+ }
+ }
+ }
+
+ SequentialAnimation {
+ id: animation
+ PropertyAction { target: progressIndicator; property: "width"; value: alertContent.width }
+ PropertyAnimation {
+ id: shrinkProgressAnimation
+ target: progressIndicator
+ property: "width"
+ to: 0
+ duration: rectangle.duration
+ }
+ }
+ }
+
+ Timer {
+ id: timer
+ onTriggered: {
+ complete(Common.Result.SUCCESS)
+ }
+ }
+
+ function alert (alertStrings, duration, showIndicator, sButtons, applicationId) {
+ if (timer.running) { // we have alert already
+ var currentTime = new Date()
+ var timeFromLastAlert = currentTime - lastAlertTime
+ var timeLeft = timer.interval - timeFromLastAlert
+ var discreteInMilliseconds = 1000 // wish to round left time to integer seconds
+ var timeLeftRounded = discreteInMilliseconds * Math.ceil(timeLeft / discreteInMilliseconds)
+ return timeLeftRounded
+ }
+ else {
+ lastAlertTime = new Date();
+ appId = applicationId
+ rectangle.appNameString = dataContainer.getApplication(appId).appName;
+ softButtons = sButtons;
+ rectangle.alertString = alertStrings.join('\n');
+ timer.interval = duration;
+ rectangle.duration = duration;
+ timer.start();
+ show();
+
+ progressIndicator.visible = !!showIndicator
+ progressIndicator.width = alertContent.width
+ console.log("ProgressIndicator.width:", progressIndicator.width)
+ animation.start()
+ }
+ }
+
+ function show () {
+ dataContainer.activeAlert = true
+ dataContainer.applicationSavedContext = dataContainer.applicationContext
+ visible = true
+ }
+
+ function complete (reason, data) {
+ if (!keep) {
+ hide()
+ switch (reason) {
+ case Common.Result.SUCCESS:
+ DBus.sendReply(async, { __retCode: Common.Result.SUCCESS, __message: "UI.Alert" })
+ break
+ // For other cases
+ }
+ }
+ timer.stop()
+ }
+
+ function hide() {
+ console.debug(popUpName, "HIDE")
+ dataContainer.activeAlert = false
+ dataContainer.applicationContext = dataContainer.applicationSavedContext
+ visible = false
+ }
+
+ function restart() {
+ animation.restart();
+ timer.restart();
+ }
+
+ property bool keep: false
+
+ onKeepChanged: {
+ if (visible && !keep && !timer.running) {
+ hide()
+ }
+ }
+
+ onVisibleChanged: {
+ if (visible) {
+ dataContainer.activePopup.push(popUpName)
+ } else {
+ for (var i in dataContainer.activePopup) {
+ if (dataContainer.activePopup[i] === popUpName) {
+ dataContainer.activePopup.splice(i, 1)
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/ContextPopup.qml b/src/components/qt_hmi/qml_model_qt4/popups/ContextPopup.qml
new file mode 100644
index 0000000000..a1ef64144d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/ContextPopup.qml
@@ -0,0 +1,56 @@
+/**
+ * @file ContextPopup.qml
+ * @brief Popup view with system context.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+
+PopUp {
+ function show() {
+ console.debug("enter")
+ if (!visible) { // must not increment counter if show() called for visible popup
+ visible = true;
+ dataContainer.popups++
+ }
+ console.debug("exit")
+ }
+
+ function hide() {
+ console.debug("enter")
+ console.debug(popUpName, "HIDE")
+ if (visible) { // must not decrement counter if hide() called for invisible popup
+ visible = false;
+ dataContainer.popups--
+ }
+ console.debug("exit")
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/ExitAllApplicationsPopup.qml b/src/components/qt_hmi/qml_model_qt4/popups/ExitAllApplicationsPopup.qml
new file mode 100644
index 0000000000..17e5de50b7
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/ExitAllApplicationsPopup.qml
@@ -0,0 +1,81 @@
+/**
+ * @file ExitAllApplicationsPopup.qml
+ * @brief Popup "Exit all applications"
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+import "../controls"
+
+PopUp {
+ function complete(reason){
+ hide()
+ }
+
+ Item {
+ ListModel {
+ id: reasonExit
+
+ Component.onCompleted: {
+ for (var name in Common.ApplicationsCloseReason) {
+ append({name: name});
+ }
+ }
+ }
+ }
+
+ Column
+ {
+ anchors.centerIn: parent
+ Row {
+ Text {
+ text: "Select reason: "
+ color: "white"
+ }
+
+ ComboBox {
+ id: reasonComboBox
+ model: reasonExit
+ }
+ z: 1000
+ }
+ OvalButton {
+ text: "Exit"
+ anchors.horizontalCenter: parent.horizontalCenter
+ onClicked: {
+ sdlBasicCommunication.onExitAllApplications(Common.ApplicationsCloseReason[reasonComboBox.currentText])
+ hide()
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/InteractionPopup.qml b/src/components/qt_hmi/qml_model_qt4/popups/InteractionPopup.qml
new file mode 100644
index 0000000000..7a5c53501e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/InteractionPopup.qml
@@ -0,0 +1,103 @@
+/**
+ * @file InteractionPopup.qml
+ * @brief Interaction popup view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+
+ContextPopup {
+ Text {
+ id: initialText
+ text: dataContainer.interactionModel.initialText
+ anchors.top: parent.top
+ anchors.topMargin: Constants.popupMargin
+ anchors.left: parent.left
+ anchors.leftMargin: Constants.popupMargin
+ font.pixelSize: Constants.fontSize
+ color: Constants.primaryColor
+ }
+
+ ListView {
+ anchors.top: initialText.bottom
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: Constants.popupMargin
+ model: dataContainer.interactionModel.choice
+ delegate: OvalButton {
+ width: parent.width
+ text: name
+ icon: image
+ onClicked: {
+ complete(Common.Result.SUCCESS, {"choiceID": id})
+ }
+ }
+ }
+
+ Item {
+ Timer {
+ id: timer
+ onTriggered: {
+ complete(Common.Result.TIMED_OUT)
+ }
+ }
+ }
+
+ function activate () {
+ console.debug("enter")
+ timer.interval = dataContainer.interactionModel.timeout
+ timer.start()
+ show()
+ console.debug("exit")
+ }
+
+ function complete (reason, data) {
+ console.debug("enter")
+ switch (reason) {
+ case Common.Result.SUCCESS:
+ DBus.sendReply(dataContainer.interactionModel.async, data)
+ break
+ case Common.Result.ABORTED:
+ DBus.sendReply(dataContainer.interactionModel.async, { __retCode: Common.Result.ABORTED })
+ break
+ case Common.Result.TIMED_OUT:
+ DBus.sendReply(dataContainer.interactionModel.async, { __retCode: Common.Result.TIMED_OUT })
+ break
+ }
+ timer.stop()
+ hide()
+ console.debug("exit")
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/PerformAudioPassThruPopup.qml b/src/components/qt_hmi/qml_model_qt4/popups/PerformAudioPassThruPopup.qml
new file mode 100644
index 0000000000..e65519d363
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/PerformAudioPassThruPopup.qml
@@ -0,0 +1,149 @@
+/**
+ * @file PerformAudioPassThruPopup.qml
+ * @brief Popup for audio pass thru
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+import "../controls"
+
+ContextPopup {
+ property variant async
+
+ function showAudioPassThru(){
+ console.debug("entered")
+ dataContainer.uiAudioPassThru.running = true
+ show()
+ if (dataContainer.uiAudioPassThru.timeout) {
+ timer.start()
+ }
+ console.debug("exited")
+ }
+
+ function complete(reason){
+ console.debug("enter", reason)
+ timer.stop()
+ dataContainer.uiAudioPassThru.timeout = 0
+ dataContainer.uiAudioPassThru.running = false
+ switch (reason) {
+ case Common.Result.ABORTED:
+ console.debug("exit with abort")
+ DBus.sendError(async, Common.Result.ABORTED)
+ break;
+ case Common.Result.SUCCESS:
+ console.debug("exit with success")
+ DBus.sendReply(async, {})
+ break;
+ case Common.Result.RETRY:
+ console.debug("exit with retry")
+ DBus.sendError(async, Common.Result.RETRY)
+ break;
+ }
+ hide()
+ }
+
+
+ Column {
+ spacing: Constants.generalSpacing
+ anchors.centerIn: parent
+ Timer {
+ id: timer
+ interval: dataContainer.uiAudioPassThru.timeout
+ onTriggered: {
+ complete(Common.Result.SUCCESS)
+ }
+ }
+
+ Text {
+ id: appNameText
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: dataContainer.uiAudioPassThru.appName
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize * 2
+ }
+
+ Row {
+ spacing: Constants.generalSpacing
+ Image {
+ source: "../res/controlButtons/vrImage.png"
+ }
+
+ Column {
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: dataContainer.uiAudioPassThru.firstLine
+ color: Constants.audioPassThruTextColor
+ font.pixelSize: Constants.fontSize
+ }
+ Text {
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: dataContainer.uiAudioPassThru.secondLine
+ color: Constants.audioPassThruTextColor
+ font.pixelSize: Constants.fontSize
+ }
+ }
+ }
+
+
+ Row {
+ anchors.horizontalCenter: parent.horizontalCenter
+ spacing: Constants.generalSpacing
+
+ OvalButton {
+ text: "Retry"
+ fontSize: Constants.fontSize
+ onClicked: {
+ complete(Common.Result.RETRY)
+ }
+ }
+
+ OvalButton {
+ text: "Done"
+ fontSize: Constants.fontSize
+ onClicked: {
+ complete(Common.Result.SUCCESS)
+ }
+ }
+ }
+
+ OvalButton {
+ text: "Close"
+ anchors.horizontalCenter: parent.horizontalCenter
+ onClicked: {
+ console.debug("enter")
+ complete(Common.Result.ABORTED)
+ console.debug("exit")
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/PopUp.qml b/src/components/qt_hmi/qml_model_qt4/popups/PopUp.qml
new file mode 100644
index 0000000000..07f8c98011
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/PopUp.qml
@@ -0,0 +1,94 @@
+/**
+ * @file PopUp.qml
+ * @brief General popup view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+Item {
+ default property alias content: content.children
+ property int padding: Constants.popUpPadding
+ property string popUpName
+
+ visible: false
+
+ width: Constants.popupWidth
+ height: Constants.popupHeigth
+
+ MouseArea { anchors.fill: parent }
+
+ Rectangle {
+ width: parent.width - padding / 2
+ height: parent.height - padding / 2
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: Constants.secondaryColor
+ border.width: 1
+ border.color: Constants.popUpBorderColor
+ radius: padding
+ Rectangle {
+ id: content
+ width: parent.width - padding
+ height: parent.height - padding
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: parent.horizontalCenter
+ color: Constants.transparentColor
+ }
+ }
+
+ onVisibleChanged: {
+ if (popUpName) {
+ if (visible) {
+ dataContainer.activePopup.push(popUpName)
+ } else {
+ for (var i in dataContainer.activePopup) {
+ if (dataContainer.activePopup[i] === popUpName) {
+ dataContainer.activePopup.splice(i, 1)
+ }
+ }
+ }
+ }
+ }
+
+ function show() {
+ console.debug("enter");
+ visible = true;
+ console.debug("exit");
+ }
+
+ function hide() {
+ console.debug("enter");
+ visible = false;
+ console.debug("exit");
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/SliderPopup.qml b/src/components/qt_hmi/qml_model_qt4/popups/SliderPopup.qml
new file mode 100644
index 0000000000..6dcd222ed3
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/SliderPopup.qml
@@ -0,0 +1,214 @@
+/**
+ * @file ExitAllApplicationsPopup.qml
+ * @brief Popup "Exit all applications"
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+import "../controls"
+
+ContextPopup {
+ property variant async
+ property int position: 1
+ /**
+ * Test Support Section
+ */
+ property int resultCode: -1
+ signal onReady
+ /**
+ * Test Support Section End
+ */
+
+ function showSlider(){
+ console.debug("enter")
+
+ dataContainer.uiSlider.running = true
+ dataContainer.applicationSavedContext = dataContainer.applicationContext
+ if(dataContainer.uiSlider.footer.length === 0 || dataContainer.uiSlider.position === 0 ) {
+ footerText.text = ""
+ } else {
+ footerText.text = dataContainer.uiSlider.footer.length === 1 ? dataContainer.uiSlider.footer[0] : dataContainer.uiSlider.footer[dataContainer.uiSlider.position - 1]
+ }
+ position = dataContainer.uiSlider.position
+ show()
+ timer.start()
+ onReady()
+ console.debug("exit")
+ }
+
+ function complete(reason){
+ console.debug("enter reason = ", reason)
+ timer.stop()
+ dataContainer.applicationContext = dataContainer.applicationSavedContext
+ dataContainer.uiSlider.running = false
+ switch(reason) {
+ case Common.Result.ABORTED:
+ console.debug("aborted position is", position)
+ resultCode = Common.Result.ABORTED
+ DBus.sendReply(async, {__retCode: resultCode, sliderPosition: position})
+ break
+ case Common.Result.SUCCESS:
+ console.debug("send position", position)
+ resultCode = Common.Result.SUCCESS
+ dataContainer.uiSlider.position = position
+ DBus.sendReply(async, {sliderPosition:position})
+ break
+ default:
+ break
+ }
+ hide()
+ position = 1
+ console.debug("exit")
+ }
+
+
+ Column
+ {
+ spacing: Constants.generalSpacing
+ anchors.centerIn: parent
+ Timer {
+ id: timer
+ interval: dataContainer.uiSlider.timeout
+ onTriggered: {
+ console.debug("triggered")
+ complete(Common.Result.SUCCESS)
+ }
+ }
+
+ Text {
+ id: appNameText
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: dataContainer.uiSlider.appName
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize * 2
+ }
+
+ Text {
+ id: headerText
+ width: borderRectangle.width
+ elide: Text.ElideRight
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: dataContainer.uiSlider.header
+ color: Constants.sliderTextColor
+ font.pixelSize: Constants.fontSize * 2
+ }
+
+ Rectangle {
+ id: borderRectangle
+ width: Constants.sliderBarWidth
+ height: Constants.sliderBarHeight
+ anchors.horizontalCenter: parent.horizontalCenter
+ border.color: Constants.sliderBarBorderColor
+ border.width: Constants.sliderBarBorderWidth
+ radius: Constants.sliderBarRadius
+ color: "black"
+
+ Rectangle {
+ id: rectangle
+ color: Constants.sliderBarFillColor
+ height: parent.height
+ border.color: parent.border.color
+ border.width: parent.border.width
+ radius: parent.radius
+
+ onVisibleChanged: {
+ var tickWidth = borderRectangle.width / dataContainer.uiSlider.numTicks
+ rectangle.width = dataContainer.uiSlider.position * tickWidth
+ }
+ }
+
+ MouseArea{
+ id: mouseArea
+ anchors.fill: parent
+ onClicked: {
+ onPositionChanged(mouse)
+ }
+
+ onPositionChanged: {
+ if(mouseX <= 0){
+ rectangle.width = borderRectangle.width / dataContainer.uiSlider.numTicks
+ position = 1
+ }
+
+ if(mouseX > borderRectangle.width) {
+ rectangle.width = borderRectangle.width
+ position = dataContainer.uiSlider.numTicks
+ }
+
+ if(mouseX > 0 && mouseX < borderRectangle.width) {
+ var tickWidth = borderRectangle.width / dataContainer.uiSlider.numTicks
+ position = Math.ceil(mouseX / tickWidth)
+ rectangle.width = position * tickWidth
+ }
+
+ if(dataContainer.uiSlider.footer.length > 1){
+ footerText.text = dataContainer.uiSlider.footer[position - 1]
+ }
+ }
+ }
+ }
+
+ Text {
+ id:footerText
+ width: borderRectangle.width
+ elide: Text.ElideRight
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: ""
+ color: Constants.sliderTextColor
+ font.pixelSize: Constants.fontSize * 2
+ }
+
+ OvalButton {
+ text: "Close"
+ anchors.horizontalCenter: parent.horizontalCenter
+ onClicked: {
+ console.debug("enter")
+ complete(Common.Result.ABORTED)
+ console.debug("exit")
+ }
+ }
+ }
+
+ function getTimer() {
+ return timer
+ }
+ function getBackButton() {
+ return backButton
+ }
+ function getFooterText() {
+ return footerText
+ }
+ function getBorderRectangle() {
+ return borderRectangle
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/TBTClientStatePopUp.qml b/src/components/qt_hmi/qml_model_qt4/popups/TBTClientStatePopUp.qml
new file mode 100644
index 0000000000..9a833b19e7
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/TBTClientStatePopUp.qml
@@ -0,0 +1,71 @@
+/**
+ * @file TBTClientStatePopUp.qml
+ * @brief Popup view for TBT interface (list of states).
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+PopUp {
+ Item {
+ ListModel {
+ id: tbtState
+
+ Component.onCompleted: {
+ for (var name in Common.TBTState) {
+ append({name: name});
+ }
+ }
+ }
+ }
+ Text {
+ text: "TBT Client State"
+ verticalAlignment: Text.AlignVCenter
+ anchors.right: parent.right
+ anchors.left: parent.left
+ anchors.top: parent.top
+ color: Constants.primaryColor
+ }
+ ComboBox {
+ id: comboBox
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.verticalCenter: parent.verticalCenter
+ model: tbtState
+ onCurrentTextChanged: {
+ console.log("Send signal onTBTClientState:", currentText);
+ sdlNavigation.onTBTClientState(Common.TBTState[currentText]);
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/TTSPopUp.qml b/src/components/qt_hmi/qml_model_qt4/popups/TTSPopUp.qml
new file mode 100644
index 0000000000..ce64a6be89
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/TTSPopUp.qml
@@ -0,0 +1,79 @@
+/**
+ * @file TTSPopUp.qml
+ * @brief Popup view for TTS
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+PopUp {
+ height: Constants.ttsPopUpHeight
+ width: Constants.ttsPopUpWidth
+ padding: Constants.ttsPopUpPadding
+ property variant async
+
+ ScrollableText {
+ id: text
+ anchors.fill: parent
+ }
+
+ resources: [
+ Timer {
+ id: timer
+ interval: Constants.ttsSpeakTime
+ onTriggered: deactivate()
+ }
+ ]
+
+ function activate(message) {
+ console.debug("Activate TTS popup:", message);
+ dataContainer.activeTTS = true;
+ text.text = message;
+ show();
+ timer.restart();
+ console.debug("Exit");
+ }
+
+ function deactivate() {
+ console.debug("Deactivate TTS popup");
+ dataContainer.activeTTS = false;
+ text.text = '';
+ timer.stop();
+ hide();
+ DBus.sendReply(async, {});
+ async = null;
+ console.debug("Exit");
+ }
+}
+
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/VRHelpPopup.qml b/src/components/qt_hmi/qml_model_qt4/popups/VRHelpPopup.qml
new file mode 100644
index 0000000000..8718c8cd69
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/VRHelpPopup.qml
@@ -0,0 +1,92 @@
+/**
+ * @file VRHelpPopup.qml
+ * @brief Popup view for VR help
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+
+PopUp {
+ Text {
+ id: title
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: Constants.popupMargin
+ text: "VR HELP" // default title
+ font.pixelSize: Constants.titleFontSize
+ color: Constants.primaryColor
+ }
+
+ ScrollableListView {
+ anchors.top: title.bottom
+ anchors.bottom: closeButton.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: Constants.popupMargin
+
+ model: dataContainer.vrHelp
+
+ delegate: Row {
+ spacing: Constants.iconItemListSpacing
+ Icon {
+ source: model.icon
+ width: Constants.iconItemListSize
+ height: Constants.iconItemListSize
+ }
+
+ Text {
+ text: model.text
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize
+ }
+ }
+ }
+
+ OvalButton {
+ id: closeButton
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.margins: Constants.popupMargin
+ width: Constants.ovalButtonWidth
+ text: "Close"
+ onClicked: complete()
+ }
+
+ property alias title: title.text
+
+ function complete(reason, data) {
+ hide()
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/VRPopUp.qml b/src/components/qt_hmi/qml_model_qt4/popups/VRPopUp.qml
new file mode 100644
index 0000000000..8a8be54be7
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/VRPopUp.qml
@@ -0,0 +1,92 @@
+/**
+ * @file VRPopUp.qml
+ * @brief Popup view for VR interface (list commands).
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+import "../views"
+import "../controls"
+
+PopUp {
+ Text {
+ id: title
+ anchors.left: parent.left
+ anchors.top: parent.top
+ height: voice.height
+ width: parent.width - voice.width
+ text: "Speak the command"
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: Constants.fontSize
+ color: Constants.primaryColor
+ }
+
+ Image {
+ id: voice
+ anchors.top: parent.top
+ anchors.right: parent.right
+ source: "../res/controlButtons/vrImage.png"
+ }
+
+ ScrollableListView {
+ anchors.bottomMargin: Constants.popupMargin
+ anchors.rightMargin: Constants.popupMargin
+ anchors.leftMargin: Constants.popupMargin
+ anchors.top: voice.bottom
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+
+ model: dataContainer.vrCommands
+
+ delegate: OvalButton {
+ width: parent.width
+ text: command
+ onClicked: {
+ sdlVR.onCommand(cmdID, appID === 0 ? undefined : appID);
+ }
+ }
+ }
+
+ function activate() {
+ dataContainer.activeVR = true;
+ sdlVR.started();
+ show();
+ }
+
+ function complete(reason) {
+ dataContainer.activeVR = false;
+ sdlVR.stopped();
+ hide();
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/popups/VehicleInfoPopUp.qml b/src/components/qt_hmi/qml_model_qt4/popups/VehicleInfoPopUp.qml
new file mode 100644
index 0000000000..f4582c28ca
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/popups/VehicleInfoPopUp.qml
@@ -0,0 +1,111 @@
+/**
+ * @file VIPopUp.qml
+ * @brief Pop up window with information about vehicle.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+import "../controls"
+
+PopUp {
+ //TODO{ALeshin}: Redraw this window as ListView or Column, when we'll get requirements
+ Column {
+ anchors.fill: parent
+ Text {
+ id: viText
+ width: parent.width
+ height: 1/5 * parent.height
+ text: "Vehicle Information"
+ font.pixelSize: Constants.fontSize
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ color: Constants.primaryColor
+ }
+
+ Row {
+ height: 1/5 * parent.height
+ width: parent.width
+
+ Text {
+ width: 1/4 * parent.width
+ height: 1/5 * parent.height
+ anchors.verticalCenter: parent.verticalCenter
+ text: "PRNDL: "
+ font.pixelSize: Constants.fontSize
+ verticalAlignment: Text.AlignVCenter
+ color: Constants.primaryColor
+ }
+
+ ComboBox {
+ anchors.verticalCenter: parent.verticalCenter
+ id: comboBox
+ model: prndlList
+
+ onCurrentIndexChanged: {
+ console.debug("PRNDL:", currentIndex)
+ dataContainer.vehicleInfoModel.prndl = model.get(currentIndex).id
+ }
+
+ textRole: "name"
+ ListModel {
+ id: prndlList
+ Component.onCompleted: {
+ append({ id: -1, name: "<NO DATA (prndl)>" })
+ for (var name in Common.PRNDL) {
+ append({ id: Common.PRNDL[name], name: name });
+ }
+ }
+ }
+ }
+ z: 1000
+ }
+
+ Text {
+ width: parent.width
+ height: 1/5 * parent.height
+ text: "ECU 1: " + dataContainer.vehicleInfoModel.ecuDIDData.data1
+ font.pixelSize: Constants.fontSize
+ verticalAlignment: Text.AlignVCenter
+ color: Constants.primaryColor
+ }
+
+ Text {
+ width: parent.width
+ height: 1/5 * parent.height
+ text: "ECU 2: " + dataContainer.vehicleInfoModel.ecuDIDData.data2
+ font.pixelSize: Constants.fontSize
+ verticalAlignment: Text.AlignVCenter
+ color: Constants.primaryColor
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/qml_model.qmlproject b/src/components/qt_hmi/qml_model_qt4/qml_model.qmlproject
new file mode 100644
index 0000000000..ea820e8019
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/qml_model.qmlproject
@@ -0,0 +1,20 @@
+/* File generated by Qt Creator, version 2.7.0 */
+
+import QmlProject 1.1
+
+Project {
+ mainFile: "MainWindow.qml"
+
+ /* Include .qml, .js, and image files from current directory and subdirectories */
+ QmlFiles {
+ directory: "."
+ }
+ JavaScriptFiles {
+ directory: "."
+ }
+ ImageFiles {
+ directory: "../res"
+ }
+ /* List of plugin directories passed to QML runtime */
+ importPaths: [ "." ]
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/AMPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/AMPlayerView.qml
new file mode 100644
index 0000000000..4a29168881
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/AMPlayerView.qml
@@ -0,0 +1,48 @@
+/**
+ * @file AMPlayerView.qml
+ * @brief AM player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ RadioPlayer {
+ id: amRadioPlayer
+ anchors.fill: parent
+ radioType: "AM"
+ radioName: "AM Radio"
+
+ playerState: dataContainer.amPlayerState
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/ApplicationListView.qml b/src/components/qt_hmi/qml_model_qt4/views/ApplicationListView.qml
new file mode 100644
index 0000000000..19ecf4ca47
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/ApplicationListView.qml
@@ -0,0 +1,123 @@
+/**
+ * @file ApplicationListView.qml
+ * @brief Application list view
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models"
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ Column {
+ anchors.fill: parent
+ Item {
+ // top 1/4 of screen
+ width: parent.width
+ height: 1/4 * parent.height
+
+ PagedFlickable {
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width
+ elementWidth: Constants.ovalButtonWidth
+ snapTo: elementWidth + spacing
+ spacing: (width - 4 * elementWidth) / 3
+
+ OvalButton {
+ text: "Find New Apps"
+ }
+
+ OvalButton {
+ text: "Change device"
+ onReleased: contentLoader.go("./views/ChangeDeviceView.qml")
+ }
+
+ OvalButton {
+ text: "911 Assist"
+ }
+
+ OvalButton {
+ text: "Vehicle Health Report"
+ }
+
+ OvalButton {
+ text: "Install applications/Up"
+ }
+ }
+ }
+
+ Item {
+ height: parent.height / 2
+ width: parent.width
+
+ ScrollableListView {
+ id: applicationListView
+ anchors.fill: parent
+ model: dataContainer.applicationList
+
+ delegate: Item {
+ width: parent.width
+ height: Math.max(applicationName.height, appIcon.height)
+ Image {
+ id: appIcon
+ source: icon
+ height: Constants.appListIconSize
+ width: height
+ }
+ ClickableText {
+ id: applicationName
+ text: appName
+ defaultColor: Constants.primaryColor
+ pressedColor: Constants.primaryColorPressed
+ font.pixelSize: Constants.appListFontSize
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: appIcon.right
+ anchors.leftMargin: Constants.margin
+ onClicked: {
+ dataContainer.setCurrentApplication(appId)
+ dataContainer.currentApplication.isMediaApplication ? contentLoader.go("./views/SDLPlayerView.qml", dataContainer.currentApplication.appId)
+ : contentLoader.go("./views/SDLNonMediaView.qml", dataContainer.currentApplication.appId)
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ // bottom 1/4 of screen
+ width: parent.width
+ height: 1/4 * parent.height
+
+ BackButton { anchors.centerIn: parent }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/BTPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/BTPlayerView.qml
new file mode 100644
index 0000000000..0a5390e920
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/BTPlayerView.qml
@@ -0,0 +1,62 @@
+/**
+ * @file BTPlayerView.qml
+ * @brief FM player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ MediaPlayer {
+ id: btPlayer
+ playerName: "BT Audio"
+ anchors.fill: parent
+
+ playerState: dataContainer.btPlayerState
+ image: playerState.albumImage
+
+ buttons: [
+ OvalButton {
+ text: btPlayer.playerName
+ onReleased: contentLoader.go("./views/MusicSourceView.qml")
+ fontSize: Constants.fontSize
+ },
+
+ OvalButton {
+ text: "Browse"
+ fontSize: Constants.fontSize
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/CDPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/CDPlayerView.qml
new file mode 100644
index 0000000000..f582ff2f7e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/CDPlayerView.qml
@@ -0,0 +1,63 @@
+/**
+ * @file CDPlayerView.qml
+ * @brief CD player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ MediaPlayer {
+ id: cdPlayer
+ playerName: "CD"
+ anchors.fill: parent
+ image: playerState.albumImage
+ playerState: dataContainer.cdPlayerState
+
+ buttons: [
+ OvalButton {
+ text: cdPlayer.playerName
+ onReleased: contentLoader.go("./views/MusicSourceView.qml")
+ fontSize: Constants.fontSize
+ },
+
+ OvalButton {
+ text: "Browse"
+ fontSize: Constants.fontSize
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/CarMenuGridView.qml b/src/components/qt_hmi/qml_model_qt4/views/CarMenuGridView.qml
new file mode 100644
index 0000000000..9b04b1bad7
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/CarMenuGridView.qml
@@ -0,0 +1,54 @@
+/**
+ * @file CarMenuGridView.qml
+ * @brief Car menu screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../models"
+import "../controls"
+
+GridMenu {
+ id: menu
+ model: CarMenuModel { }
+ delegate: GridItem {
+ width: menu.width / menu.columnsOnPage
+ height: menu.height / menu.rows
+ ClickableImage {
+ anchors.centerIn: parent
+ source: icon
+ onClicked: {
+ if(qml !== "") {
+ contentLoader.go(qml)
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/ChangeDeviceView.qml b/src/components/qt_hmi/qml_model_qt4/views/ChangeDeviceView.qml
new file mode 100644
index 0000000000..643b074506
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/ChangeDeviceView.qml
@@ -0,0 +1,102 @@
+/**
+ * @file ChangeDeviceView.qml
+ * @brief Screen view with list of available devices.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models"
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ Item {
+ anchors.fill: parent
+
+ Item {
+ // 3/4 top screen
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+
+ Text {
+ id: searchDeviceText
+ anchors.left: parent.left
+ anchors.top: parent.top
+ height: 1/4 * parent.height
+ width: parent.width
+ color: Constants.primaryColor
+ font.pixelSize: Constants.titleFontSize
+ text: "Devices available:"
+ verticalAlignment: Text.AlignVCenter
+ }
+
+ ListView {
+ id: changeDeviceListView
+ anchors.left: parent.left
+ anchors.top: searchDeviceText.bottom
+ model: dataContainer.deviceList
+ width:parent.width
+ height:parent.height - searchDeviceText.height
+
+ delegate: Text {
+ MouseArea {
+ anchors.fill: parent
+ onClicked: {
+ sdlBasicCommunication.onDeviceChosen({ name: name, id: devid });
+ sdlBasicCommunication.onFindApplications({ name: name, id: devid })
+ contentLoader.go("./views/ApplicationListView.qml")
+ }
+ }
+ text: name
+ color: Constants.primaryColor
+ font.pixelSize: Constants.titleFontSize
+ }
+ }
+ }
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ BackButton { anchors.centerIn: parent }
+ }
+
+ Component.onCompleted: {
+ console.log("ChangeDeviceView Component.onCompleted enter");
+ sdlBasicCommunication.onStartDeviceDiscovery();
+ console.log("ChangeDeviceView Component.onCompleted exit");
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/ClimateControlView.qml b/src/components/qt_hmi/qml_model_qt4/views/ClimateControlView.qml
new file mode 100644
index 0000000000..01c289b139
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/ClimateControlView.qml
@@ -0,0 +1,94 @@
+/**
+ * @file ClimateControlView.qml
+ * @brief Screen view of climat menu.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+
+GeneralView {
+ Item {
+ id: climatMenu
+ anchors.fill: parent
+
+ Item {
+ height: parent.height
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+
+ Column {
+ id: leftItem
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 1/4*parent.width - useThisToGetButtonSize.width
+
+ Row {
+ ClimateControlBtn {name: "heated_seat"}
+ ClimateControlBtn {name: "heated_wheel"}
+ }
+ Row {
+ ClimateControlBtn {name: "AC"}
+ ClimateControlBtn {name: "headed_dash"}
+ }
+ }
+
+ Column {
+ id: centralItem
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+
+ ClimateControlBtn {id: useThisToGetButtonSize; name: "defrost"; state: "on"}
+ ClimateControlBtn {name: "face"; state: "on"}
+ ClimateControlBtn {name: "feet"}
+ }
+
+ Row {
+ id: rightItem
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 1/4*parent.width - useThisToGetButtonSize.width
+
+ ClimateControlBtn {
+ anchors.verticalCenter: parent.verticalCenter
+ txt: "Dual"
+ state: "on"
+ }
+
+ Column {
+ ClimateControlBtn { name: "heated_seat" }
+ ClimateControlBtn { name: "AC" }
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/ContactsListView.qml b/src/components/qt_hmi/qml_model_qt4/views/ContactsListView.qml
new file mode 100644
index 0000000000..a2b2be590b
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/ContactsListView.qml
@@ -0,0 +1,118 @@
+/**
+ * @file ContactsListView.qml
+ * @brief Contact list screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models"
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ function setCurrent(firstLetter){
+ for(var i = 0; i < contactsListView.count; i ++) {
+ if (contactsListView.model.get(i).name[0].toUpperCase() === firstLetter) {
+ contactsListView.positionViewAtIndex(i, ListView.Beginning)
+ break;
+ }
+ }
+ }
+ Component.onCompleted: setCurrent(dataContainer.contactsFirstLetter)
+
+ Item {
+ // 3/4 top screen
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+
+ ScrollableListView {
+ id: contactsListView
+ anchors.fill: parent
+ clip: true
+ spacing: 1/2 * Constants.fontSize
+ model: ContactsListModel { }
+
+ section.property: "name"
+ section.criteria: ViewSection.FirstCharacter
+ section.delegate: Text {
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize
+ text: section.toUpperCase()
+ }
+
+ delegate: Item {
+ anchors.left: parent.left
+ width: parent.width - Constants.scrollBarWidth
+ height: typeText.height
+
+ Text {
+ id: contactName
+ anchors.left: parent.left
+ text: name
+ width: Constants.contactListNameFieldSize * parent.width
+ color: Constants.contactTextColor
+ font.pixelSize: Constants.fontSize
+ elide: Text.ElideRight
+ }
+ Text {
+ id: phoneText
+ anchors.left: contactName.right
+ width: Constants.contactListPhoneFieldSize * parent.width
+ text: phone
+ color: Constants.contactTextColor
+ font.pixelSize: Constants.fontSize
+ horizontalAlignment: Text.AlignHCenter
+ }
+ Text {
+ id: typeText
+ anchors.right: parent.right
+ width: Constants.contactListDescriptionFieldSize * parent.width
+ text: type
+ color: Constants.contactTextColor
+ font.pixelSize: Constants.fontSize
+ horizontalAlignment: Text.AlignHCenter
+ }
+ }
+ }
+ }
+
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ BackButton { anchors.centerIn: parent }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/FMPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/FMPlayerView.qml
new file mode 100644
index 0000000000..5c3ca6a5a9
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/FMPlayerView.qml
@@ -0,0 +1,121 @@
+/**
+ * @file FMPlayerView.qml
+ * @brief FM player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ RadioPlayer {
+ id: fmRadioPlayer
+ anchors.fill: parent
+ radioType: "FM"
+ radioName: "FM Radio"
+
+ playerState: dataContainer.fmPlayerState
+
+ property int hdButtonValue: 1
+
+ buttonHD: [
+ Image {
+ id: hdButton
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ source: "../res/buttons/long_oval_btn.png"
+ property string textColor: Constants.primaryColor
+
+ Row {
+ anchors.centerIn: parent
+ spacing: (hdButton.width - hdLogo.width - one.width - two.width - three.width - four.width) / 10
+
+ Image {
+ id: hdLogo
+ anchors.verticalCenter: parent.verticalCenter
+ source:"../res/hd_logo_on.png"
+ }
+
+ Text {
+ id: one
+ anchors.verticalCenter: parent.verticalCenter
+ text: "1"
+ color: fmRadioPlayer.hdButtonValue === 1 ? "white" : hdButton.textColor
+ font.pixelSize: Constants.fontSize
+ }
+
+ Text {
+ id: two
+ anchors.verticalCenter: parent.verticalCenter
+ text: "2"
+ color: fmRadioPlayer.hdButtonValue === 2 ? "white" : hdButton.textColor
+ font.pixelSize: Constants.fontSize
+ }
+
+ Text {
+ id: three
+ anchors.verticalCenter: parent.verticalCenter
+ text: "3"
+ color: fmRadioPlayer.hdButtonValue === 3 ? "white" : hdButton.textColor
+ font.pixelSize: Constants.fontSize
+ }
+
+ Text {
+ id: four
+ anchors.verticalCenter: parent.verticalCenter
+ text: "4"
+ color: fmRadioPlayer.hdButtonValue === 4 ? "white" : hdButton.textColor
+ font.pixelSize: Constants.fontSize
+ }
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ hdLogo.source = "../res/hd_logo_off.png"
+ hdButton.source = "../res/buttons/long_oval_pressed_btn.png"
+ hdButton.textColor = Constants.secondaryColor
+
+ }
+ onReleased: {
+ hdLogo.source = "../res/hd_logo_on.png"
+ hdButton.source = "../res/buttons/long_oval_btn.png"
+ hdButton.textColor = Constants.primaryColor
+ fmRadioPlayer.hdButtonValue === 4 ? fmRadioPlayer.hdButtonValue = 1 : fmRadioPlayer.hdButtonValue++
+ }
+ }
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/GeneralView.qml b/src/components/qt_hmi/qml_model_qt4/views/GeneralView.qml
new file mode 100644
index 0000000000..40f809299d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/GeneralView.qml
@@ -0,0 +1,45 @@
+/**
+ * @file GeneralView.qml
+ * @brief Base view class. Defines properties and behavior common for all views
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+
+Item {
+ /// HMI context view is related to
+ property int systemContext: Common.SystemContext.SYSCTXT_MAIN
+ /// True if view is in application context
+ property bool applicationContext: false
+ /// View category for AppDeactivated notification (reason)
+ property int category: Common.DeactivateReason.GENERAL
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/GridMenu.qml b/src/components/qt_hmi/qml_model_qt4/views/GridMenu.qml
new file mode 100644
index 0000000000..4cc2f4f615
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/GridMenu.qml
@@ -0,0 +1,86 @@
+/**
+ * @file GridMenu.qml
+ * @brief Parent class for main menu.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models/Constants.js" as Constants
+import "../models/Internal.js" as Internal
+
+GeneralView {
+ id: main
+ property alias model: repeater.model
+ property alias delegate: repeater.delegate
+ property alias rows: grid.rows
+ property int columnsOnPage: Constants.menuColumnCount
+
+ Flickable {
+ id: flicker
+ anchors.fill: parent
+ contentWidth: grid.width
+ flickableDirection: Flickable.HorizontalFlick
+
+ Grid {
+ id: grid
+ anchors.centerIn: parent
+ rows: Constants.menuRowCount
+ columns: Math.ceil(model.count / rows)
+ flow: Grid.TopToBottom
+ Repeater {
+ id: repeater
+ }
+ }
+
+ property int snapTo: width / parent.columnsOnPage
+ onMovementEnded: {
+ var rest = flicker.contentX % snapTo
+ var time = 0.25
+ if (rest > flicker.snapTo / 2) { rest = rest - flicker.snapTo }
+ var vel = 2 * rest / time
+ flickDeceleration = Math.abs(vel) / time
+ flick(vel, 0)
+ flickDeceleration = 1500
+ }
+ }
+
+ Pager {
+ id: pager
+ space: 10
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.top: parent.top
+ anchors.topMargin: Constants.margin
+
+ pages: Math.ceil(grid.columns / parent.columnsOnPage)
+ activePage: Internal.activePageChoose(flicker, pager.pages)
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/HardwareButtonsView.qml b/src/components/qt_hmi/qml_model_qt4/views/HardwareButtonsView.qml
new file mode 100644
index 0000000000..83f1ffcd01
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/HardwareButtonsView.qml
@@ -0,0 +1,173 @@
+/**
+ * @file HardwareButtonsView.qml
+ * @brief Area of screen responsible for hardware buttons
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+
+Rectangle {
+ height: row.height + row.anchors.margins
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.panelColor
+
+ signal buttonDown(string name)
+ signal buttonUp(string name)
+
+ function pressButton(name) {
+ buttonDown(name)
+ }
+
+ function longPressButton(name) {
+ console.log("long press " + name)
+ }
+
+ function releaseButton(name) {
+ buttonUp(name)
+ }
+
+ Row {
+ id: row
+ spacing: Constants.panelPadding
+ anchors.centerIn: parent
+ anchors.margins: Constants.panelPadding
+
+ PowerSwitchButton {anchors.verticalCenter: parent.verticalCenter}
+
+ MaskedButton {
+ name: "vr"
+ anchors.verticalCenter: parent.verticalCenter
+ onReleased: {
+ console.debug("Clicked VR button");
+ if (!dataContainer.activeVR) {
+ vrPopUp.activate();
+ } else {
+ vrPopUp.complete();
+ }
+ }
+ }
+
+ ArrowKeys {anchors.verticalCenter: parent.verticalCenter}
+
+ Grid {
+ columns: 5
+ rows: 2
+ spacing: 5
+ anchors.verticalCenter: parent.verticalCenter
+ Repeater {
+ model: 10
+ delegate : Rectangle {
+ width: 40
+ height: 40
+ radius: 5
+ gradient: Gradient {
+ GradientStop
+ {
+ position: 0.0;
+ color: "#2c2c2c"
+ Behavior on position {
+ NumberAnimation { duration: 80 }
+ }
+ }
+
+ GradientStop
+ {
+ position: 1.0;
+ color: "black"
+ Behavior on position {
+ NumberAnimation { duration: 80 }
+ }
+ }
+ }
+
+ Text {
+ text: (1 + index) % 10
+ font.pixelSize: 30
+ color: Constants.panelTextColor
+ anchors.centerIn: parent
+ }
+
+ Timer {
+ id: timer
+ interval: Constants.presetButtonTimer
+ repeat: false
+ triggeredOnStart: false
+ }
+
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ property bool clickProcessed
+ onPressed: {
+ parent.gradient.stops[0].position = 1.0
+ parent.gradient.stops[1].position = 0.0
+ clickProcessed = false
+ timer.start()
+ sdlButtons.onButtonEvent(Common.ButtonName.PRESET_0 + index, Common.ButtonEventMode.BUTTONDOWN, undefined)
+ }
+ onReleased: {
+ parent.gradient.stops[0].position = 0.0
+ parent.gradient.stops[1].position = 1.0
+ sdlButtons.onButtonEvent(Common.ButtonName.PRESET_0 + index, Common.ButtonEventMode.BUTTONUP, undefined)
+ timer.stop()
+ if (!clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.PRESET_0 + index, Common.ButtonPressMode.SHORT, undefined)
+ }
+ }
+ Connections {
+ target: timer
+ onTriggered: {
+ if(!mouseArea.clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.PRESET_0 + index, Common.ButtonPressMode.LONG, undefined)
+ mouseArea.clickProcessed = true
+ }
+ }
+ }
+ }
+
+ Component.onCompleted: {
+ settingsContainer.buttonCapabilities.push(
+ {
+ name: Common.ButtonName.PRESET_0 + index,
+ upDownAvailable: true,
+ shortPressAvailable: true,
+ longPressAvailable: true
+ });
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/IPodPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/IPodPlayerView.qml
new file mode 100644
index 0000000000..4d9b8091d7
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/IPodPlayerView.qml
@@ -0,0 +1,61 @@
+/**
+ * @file IPodPlayerView.qml
+ * @brief IPod player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ MediaPlayer {
+ id: ipodPlayer
+ playerName: "iPod"
+ anchors.fill: parent
+ image: playerState.albumImage
+ playerState: dataContainer.ipodPlayerState
+
+ buttons: [
+ OvalButton {
+ text: ipodPlayer.playerName
+ onReleased: contentLoader.go("./views/MusicSourceView.qml")
+ fontSize: Constants.fontSize
+ },
+
+ OvalButton {
+ text: "Browse"
+ fontSize: Constants.fontSize
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/LineInPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/LineInPlayerView.qml
new file mode 100644
index 0000000000..eca575d6b1
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/LineInPlayerView.qml
@@ -0,0 +1,61 @@
+/**
+ * @file LineInPlayerView.qml
+ * @brief LineIn player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ MediaPlayer {
+ id: lineInPlayer
+ playerName: "LineIn"
+ anchors.fill: parent
+ image: playerState.albumImage
+ playerState: dataContainer.linePlayerState
+
+ buttons: [
+ OvalButton {
+ text: lineInPlayer.playerName
+ onReleased: contentLoader.go("./views/MusicSourceView.qml")
+ fontSize: Constants.fontSize
+ },
+
+ OvalButton {
+ text: "Browse"
+ fontSize: Constants.fontSize
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/MainMenuView.qml b/src/components/qt_hmi/qml_model_qt4/views/MainMenuView.qml
new file mode 100644
index 0000000000..321a67831c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/MainMenuView.qml
@@ -0,0 +1,54 @@
+/**
+ * @file MainMenuView.qml
+ * @brief Main menu screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../models"
+import "../controls"
+
+GridMenu {
+ id: menu
+ model: MainMenuListModel { }
+ delegate: GridItem {
+ width: menu.width / menu.columnsOnPage
+ height: menu.height / menu.rows
+ ClickableImage {
+ anchors.centerIn: parent
+ source: icon
+ onClicked: {
+ if(qml !== "") {
+ contentLoader.go(qml)
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/MediaClockView.qml b/src/components/qt_hmi/qml_model_qt4/views/MediaClockView.qml
new file mode 100644
index 0000000000..183798eb49
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/MediaClockView.qml
@@ -0,0 +1,73 @@
+/**
+ * @file MediaClockView.qml
+ * @brief Media clock view
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+import "../models/Internal.js" as Internal
+
+Item {
+ property alias time: timeText.text
+ Text {
+ id: timeText
+ anchors.left: parent.left
+ width: 1/10 * parent.width
+ anchors.verticalCenter: parent.verticalCenter
+ horizontalAlignment: Text.AlignRight
+ color: "white"
+ text: (mediaPlayerView.playerType === "SDL") ? Internal.hmsTimeToString(dataContainer.currentApplication.mediaClock.startTime)
+ : "02:36" //TODO {Aleshin}: get track time for all players except SDL
+ font.pixelSize: 18
+ }
+
+ Row {
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ height: parent.height
+ width: 2/3 * parent.width
+
+ Rectangle {
+ anchors.verticalCenter: parent.verticalCenter
+ height: 2
+ width: dataContainer.currentApplication.mediaClock.progress * parent.width
+ color: "white"
+ }
+
+ Rectangle {
+ anchors.verticalCenter: parent.verticalCenter
+ height: 2
+ width: (1 - dataContainer.currentApplication.mediaClock.progress) * parent.width
+ color: Constants.primaryColor
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/MediaPlayer.qml b/src/components/qt_hmi/qml_model_qt4/views/MediaPlayer.qml
new file mode 100644
index 0000000000..866f5399cb
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/MediaPlayer.qml
@@ -0,0 +1,325 @@
+/**
+ * @file MediaPlayerView.qml
+ * @brief Parent for BT, IPod, CD players screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../models/Internal.js" as Internal
+
+Item {
+ id: mediaPlayerView
+
+ property string playerName: ""
+ property string playerType: ""
+
+ signal rewind
+ signal forward
+ signal play
+ signal pause
+
+ // Holds players state(song name, play/pause state, track number etc). For all players except SDL.
+ property PlayerState playerState;
+
+ property alias buttons: buttonsRow.content
+ property alias buttonsSpacing: buttonsRow.spacing
+ property alias image: image.source
+
+ Item {
+ // row of oval buttons
+ id: ovalButtonsRow
+ width: parent.width
+ height: 1/5 * parent.height
+ anchors.left: parent.left
+ anchors.top: parent.top
+
+ PagedFlickable {
+ id: buttonsRow
+ width: parent.width
+ spacing: (mediaPlayerView.playerType === "SDL") ? ((width - 4 * elementWidth) / 3)
+ : (width - 2 * elementWidth)
+ anchors.verticalCenter: parent.verticalCenter
+ snapTo: Constants.ovalButtonWidth + spacing
+ elementWidth: Constants.ovalButtonWidth
+ }
+ }
+
+ Item {
+ id: spacingBetweenItems
+ width: parent.width
+ height: 1/10 * parent.height
+ anchors.left: parent.left
+ anchors.top: ovalButtonsRow.bottom
+
+ Behavior on height {
+ NumberAnimation {
+ duration : Constants.animationDuration
+ }
+ }
+ }
+
+ Column {
+ // Picture + text information + media clock
+ id: mediaContent
+ width: parent.width
+ height: 2/5 * parent.height
+ anchors.left: parent.left
+ anchors.top: spacingBetweenItems.bottom
+
+ Row {
+ // picture + text info
+ width: parent.width
+ height: 3/4 * parent.height
+ spacing: Constants.margin
+
+ Image {
+ id: image
+ height: parent.height
+ width: height
+ }
+
+ Column {
+ // text info
+ id: textInfo
+ height: parent.height
+ width: parent.width - image.width - parent.spacing
+ spacing: (height - titleText.height - 3 * text.height) / 3
+
+ Text {
+ id: titleText
+ anchors.left: parent.left
+ anchors.right: parent.right
+ horizontalAlignment: dataContainer.currentApplication.hmiUITextAlignment
+ color: Constants.primaryColor
+ text: (mediaPlayerView.playerType === "SDL") ? dataContainer.currentApplication.hmiUIText.mainField1
+ : playerState.trackName
+ font.pixelSize: Constants.titleFontSize
+ font.bold: true
+ }
+
+ Text {
+ id: text
+ anchors.left: parent.left
+ anchors.right: parent.right
+ horizontalAlignment: dataContainer.currentApplication.hmiUITextAlignment
+ color: Constants.primaryColor
+ text: (mediaPlayerView.playerType === "SDL") ? dataContainer.currentApplication.hmiUIText.mainField2
+ : playerState.albumName
+ font.pixelSize: Constants.fontSize
+ }
+
+ Text {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ horizontalAlignment: Text.AlignHCenter
+ color: Constants.primaryColor
+ text: (mediaPlayerView.playerType === "SDL") ? dataContainer.currentApplication.hmiUIText.mediaTrack
+ : playerState.trackNumber
+ font.pixelSize: Constants.fontSize
+ }
+
+ Text {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.primaryColor
+ text: "Time to destination: " + dataContainer.navigationModel.timeToDestination
+ font.pixelSize: Constants.fontSize
+ horizontalAlignment: dataContainer.hmiUITextAlignment
+ visible: mediaPlayerView.playerType === "SDL" && dataContainer.navigationModel.timeToDestination
+ }
+ }
+ }
+
+ MediaClockView {
+ width: parent.width
+ height: parent.height * 1/4
+ }
+ }
+
+ Item {
+ id: spacingBetweenItems2
+ width: parent.width
+ height: 1/10 * parent.height
+ anchors.left: parent.left
+ anchors.top: mediaContent.bottom
+
+ Behavior on height {
+ NumberAnimation {
+ duration : Constants.animationDuration
+ }
+ }
+ }
+
+ Row {
+ // Rewind, play, pause, forward buttons
+ id: playPauseRewindForward
+ width: parent.width
+ height: 1/5 * parent.height - statusBar.height
+ anchors.left: parent.left
+ anchors.leftMargin: (width - playPauseButton.width - prevButton.width - nextButton.width) / 2
+ anchors.top: spacingBetweenItems2.bottom
+
+ Image {
+ id: prevButton
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../res/buttons/player_prev_btn.png"
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ prevButton.source = "../res/buttons/player_prev_pressed_btn.png"
+ }
+ onReleased: {
+ prevButton.source = "../res/buttons/player_prev_btn.png"
+ }
+ }
+ }
+
+ PlayPauseButton {
+ id: playPauseButton
+ anchors.verticalCenter: parent.verticalCenter
+ state: (mediaPlayerView.playerType === "SDL") ? dataContainer.currentApplication.playPauseState : playerState.playPauseState
+ onClicked: {
+ (state == 'Play') ? play() : pause();
+ var newState = state === "Play" ? "Pause" : "Play";
+ (mediaPlayerView.playerType === "SDL") ? dataContainer.setApplicationProperties(dataContainer.currentApplication.appId, { playPauseState: newState } )
+ : playerState.playPauseState = newState
+ }
+ }
+
+ Image {
+ id: nextButton
+ anchors.verticalCenter: parent.verticalCenter
+ source: "../res/buttons/player_next_btn.png"
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ nextButton.source = "../res/buttons/player_next_pressed_btn.png"
+ }
+ onReleased: {
+ nextButton.source = "../res/buttons/player_next_btn.png"
+ }
+ }
+ }
+ }
+
+ Item {
+ id: presetButtons
+ width: parent.width
+ height: 1/5 * parent.height
+ anchors.top: playPauseRewindForward.bottom
+ anchors.left: parent.left
+
+ PresetRow {
+ id: presetsRow
+ anchors.top: parent.top
+ anchors.left: parent.left
+ presets: mediaPlayerView.playerType === "SDL" ? Internal.getArrayForPresetRow() : []
+ width: parent.width
+ property bool clickProcessed
+
+ Timer {
+ id: timer
+ interval: Constants.presetButtonTimer
+ repeat: false
+ triggeredOnStart: false
+ onTriggered: {
+ console.log("preset button hold")
+ presetsRow.clickProcessed = true
+ sdlButtons.onButtonPress(Common.ButtonName.PRESET_0 + presetsRow.selectedIndex, Common.ButtonPressMode.LONG, undefined)
+ }
+ }
+
+ onPresetButtonPressed: {
+ console.log("preset button pressed")
+ timer.start()
+ clickProcessed = false
+ sdlButtons.onButtonEvent(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonEventMode.BUTTONDOWN, undefined)
+ }
+
+ onPresetButtonReleased: {
+ console.log("preset button released")
+ sdlButtons.onButtonEvent(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonEventMode.BUTTONUP, undefined)
+ timer.stop()
+ if (!clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonPressMode.SHORT, undefined)
+ }
+ }
+ }
+ }
+
+ StatusBar {
+ id: statusBar
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ }
+
+ states: [
+ State {
+ name: 'presetButtonsON'
+ when: (dataContainer.currentApplication.customPresets.count > 0) && (mediaPlayerView.playerType === "SDL")
+ PropertyChanges {
+ target: spacingBetweenItems
+ height: 1
+ }
+ PropertyChanges {
+ target: spacingBetweenItems2
+ height: 1
+ }
+ PropertyChanges {
+ target: presetButtons
+ visible: true
+ enabled: true
+ }
+ },
+
+ State {
+ name: 'presetButtonsOFF'
+ when: (dataContainer.currentApplication.customPresets.count === 0) || (mediaPlayerView.playerType !== "SDL")
+ PropertyChanges {
+ target: spacingBetweenItems
+ height: 1/10 * mediaPlayerView.height
+ }
+ PropertyChanges {
+ target: spacingBetweenItems2
+ height: 1/10 * mediaPlayerView.height
+ }
+ PropertyChanges {
+ target: presetButtons
+ visible: false
+ enabled: false
+ }
+ }
+ ]
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/MusicSourceView.qml b/src/components/qt_hmi/qml_model_qt4/views/MusicSourceView.qml
new file mode 100644
index 0000000000..c9c30e200c
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/MusicSourceView.qml
@@ -0,0 +1,75 @@
+/**
+ * @file MusicSourceView.qml
+ * @brief Music source screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../models"
+import "../controls"
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ Item {
+ anchors.fill: parent
+ GridMenu {
+ id: menu
+ model: dataContainer.musicSourceModel
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: bottomPanel.top
+ delegate: GridItem {
+ width: menu.width / menu.columnsOnPage
+ height: menu.height / menu.rows
+ OvalButton {
+ text: title
+ onReleased: contentLoader.go(qml, appId)
+ anchors.centerIn: parent
+ fontSize: Constants.fontSize
+ }
+ }
+ }
+
+ Item {
+ id: bottomPanel
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ height: 1/4 * parent.height
+ width: parent.width
+
+ BackButton { anchors.centerIn: parent }
+ }
+ }
+}
+
+
+
diff --git a/src/components/qt_hmi/qml_model_qt4/views/NavigationInRouteGridView.qml b/src/components/qt_hmi/qml_model_qt4/views/NavigationInRouteGridView.qml
new file mode 100644
index 0000000000..6d5ad5027f
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/NavigationInRouteGridView.qml
@@ -0,0 +1,250 @@
+/**
+ * @file NavigationInRouteGridView.qml
+ * @brief Navigation in route screen veiw.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+
+GeneralView {
+ Item {
+ id: navInRoute
+ anchors.fill: parent
+
+ Image {
+ // 3/4 top screen
+ id: map
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ source: "../res/nav/map.png"
+
+ Image {
+ id: compas
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 1/4 * compas.width
+ anchors.left: parent.left
+ anchors.leftMargin: 1/4 * compas.width
+ source: "../res/nav/compass.png"
+ }
+
+ Column {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: compas.horizontalCenter
+ spacing: 1/8 * parent.height
+
+ // Zoom "+" button
+ Image {
+ id: zoomIn
+ source: "../res/buttons/zoom.png"
+
+ Text {
+ id: zoomInBtn
+ anchors.centerIn: parent
+ text: "+"
+ color: Constants.releasedButtonTextColor
+ font.pixelSize: 30
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/buttons/zoom_pressed.png"
+ zoomInBtn.color = Constants.pressedButtonTextColor
+ }
+ onReleased: {
+ parent.source = "../res/buttons/zoom.png"
+ zoomInBtn.color = Constants.releasedButtonTextColor
+ }
+
+ onClicked: {
+ //Some behavior
+ }
+ }
+ }
+
+ // Zoom "-" button
+ Image {
+ id: zoomOut
+ source: "../res/buttons/zoom.png"
+
+ Text {
+ id: zoomOutBtn
+ anchors.centerIn: parent
+ text: "-"
+ color: "white"
+ font.pixelSize: 30
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/buttons/zoom_pressed.png"
+ zoomOutBtn.color = Constants.pressedButtonTextColor
+ }
+ onReleased: {
+ parent.source = "../res/buttons/zoom.png"
+ zoomOutBtn.color = Constants.releasedButtonTextColor
+ }
+
+ onClicked: {
+ //Some behavior
+ }
+ }
+ }
+ } // column
+
+ // Options button
+ Image {
+ id: navOptions
+ anchors.top: parent.top
+ anchors.right: parent.right
+ source: "../res/nav/options.png"
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/nav/options_pressed.png"
+ }
+ onReleased: {
+ parent.source = "../res/nav/options.png"
+ }
+ onClicked: {
+ //Options screen
+ }
+ }
+ }
+ } //map
+
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ Image {
+ id: muteBtnImg
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 1/4 * muteBtnImg.width
+ source: "../res/nav/mute_off.png"
+ MouseArea {
+ anchors.fill: parent
+ onClicked: if (muteBtnImg.state === "off") {
+ muteBtnImg.state = "on"
+ muteBtnImg.source = "../res/nav/mute_off.png"
+ }
+ else {
+ muteBtnImg.source = "../res/nav/mute_on.png"
+ muteBtnImg.state = "off"
+ }
+ }
+ }
+
+ Image {
+ id: turnArrow
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: muteBtnImg.right
+ anchors.leftMargin: 1/20 * contentLoader.width
+ source: "../res/nav/turnArrow.png"
+ }
+
+ Text {
+ id: street
+ anchors.verticalCenter: cancel.verticalCenter
+ anchors.left: turnArrow.right
+ anchors.leftMargin: 1/20 * contentLoader.width
+ text: "0.2 mi on Cherry Hill Rd."
+ color: "White"
+ font.pixelSize: 20
+ }
+
+ Text {
+ id: timeToDest
+ anchors.verticalCenter: cancel.verticalCenter
+ anchors.right: cancel.left
+ anchors.rightMargin: 1/20 * contentLoader.width
+ text: "2 hrs 27 min"
+ color: "White"
+ font.pixelSize: 20
+ }
+
+ Image {
+ id: cancel
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+
+ source: "../res/buttons/long_oval_btn.png"
+
+ Image {
+ id: destIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: cancel.left
+ anchors.leftMargin: Constants.fontSize
+ source: "../res/nav/dest_icon.png"
+ }
+
+ Text {
+ id: cancelText
+ anchors.centerIn: parent
+ text: "Cancel"
+ color: Constants.primaryColor
+ font.pixelSize: 20
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ onPressed: {
+ cancel.source = "../res/buttons/long_oval_pressed_btn.png"
+ destIcon.source = "../res/nav/dest_icon_black.png"
+ cancelText.color = Constants.pressedButtonTextColor
+ }
+
+ onReleased: {
+ cancel.source = "../res/buttons/long_oval_btn.png"
+ destIcon.source = "../res/nav/dest_icon.png"
+ cancelText.color = Constants.primaryColor
+ }
+
+ onClicked: {
+ contentLoader.go("./views/NavigationNoRouteGridView.qml")
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/NavigationKeyboardView.qml b/src/components/qt_hmi/qml_model_qt4/views/NavigationKeyboardView.qml
new file mode 100644
index 0000000000..3ef73ee67d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/NavigationKeyboardView.qml
@@ -0,0 +1,221 @@
+/**
+ * @file NavigationKeyboardView.qml
+ * @brief Navigation keyboard screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ Item {
+ id: navKeyboard
+ anchors.fill: parent
+
+ Item {
+ // 3/4 top screen
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+
+ // Text line with input text
+ TextInput {
+ id: inputText
+ anchors.top:parent.top
+ anchors.left:parent.left
+ maximumLength: 30
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize
+ text: dataContainer.routeText
+ }
+
+ // Keyboard
+ Column {
+ anchors.centerIn: parent
+ Row {
+ id: upperRow
+ property string qWERTY : "QWERTYUIOP"
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ Repeater {
+ model: 10
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: upperRow.qWERTY.charAt(index)
+ pixelSize: Constants.fontSize
+
+ onClicked: {
+ dataContainer.routeText += upperRow.qWERTY.charAt(index)
+ }
+ }
+ }
+ }
+ Row {
+ id: middleRow
+ property string aSDFGH : "ASDFGHJKL"
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: "123"
+ pixelSize: 15
+ }
+ //--------------
+ Repeater {
+ model: 9
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: middleRow.aSDFGH.charAt(index)
+ pixelSize: Constants.fontSize
+
+ onClicked: {
+ dataContainer.routeText += middleRow.aSDFGH.charAt(index)
+ }
+ }
+ }
+ //--------------
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ onIsPressedChanged: {
+ hoverImg.source = isPressed ? "../res/nav/delete_icon_black.png" : "../res/nav/delete_icon.png";
+ }
+ Image {
+ id: hoverImg
+ anchors.centerIn: parent
+ source: "../res/nav/delete_icon.png"
+ }
+
+ onClicked: {
+ dataContainer.routeText = dataContainer.routeText.substring(0,dataContainer.routeText.length - 1)
+ }
+ }
+ }
+ Row {
+ id: lowerRow
+ property string zXCVBN : "ZXCVBNM"
+ anchors.horizontalCenter: parent.horizontalCenter
+
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: "!@#"
+ pixelSize: 15
+ }
+ //-----------------
+ Repeater {
+ model: 7
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: lowerRow.zXCVBN.charAt(index)
+ pixelSize: Constants.fontSize
+
+ onClicked: {
+ dataContainer.routeText += lowerRow.zXCVBN.charAt(index)
+ }
+ }
+ }
+ //----------------
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: "Clear"
+ pixelSize: 12
+
+ onClicked: {
+ dataContainer.routeText = ""
+ }
+ }
+ //----------------
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: "Space"
+ pixelSize: 12
+
+ onClicked: {
+ dataContainer.routeText += " "
+ }
+ }
+ }
+
+ } // column
+
+ Image {
+ id: goBtn
+ anchors.right: parent.right
+ anchors.top: parent.top
+ source: "../res/buttons/short_oval_btn.png"
+
+ Text {
+ id: goText
+ anchors.centerIn: parent
+ text: "Go"
+ color: Constants.primaryColor
+ font.pixelSize: Constants.fontSize
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ onPressed: {
+ goBtn.source = "../res/buttons/short_oval_btn_pressed.png"
+ goText.color = Constants.pressedButtonTextColor
+ }
+
+ onReleased: {
+ goBtn.source = "../res/buttons/short_oval_btn.png"
+ goText.color = Constants.primaryColor
+ }
+
+ onClicked: {
+ contentLoader.go("./views/NavigationInRouteGridView.qml")
+ }
+ }
+ }
+ } // 3/4 top screen
+
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+ BackButton { anchors.centerIn: parent }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/NavigationMenuView.qml b/src/components/qt_hmi/qml_model_qt4/views/NavigationMenuView.qml
new file mode 100644
index 0000000000..5ceffe0526
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/NavigationMenuView.qml
@@ -0,0 +1,75 @@
+/**
+ * @file NavigationMenuView.qml
+ * @brief Navigation menu screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models"
+import "../controls"
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ Item {
+ anchors.fill: parent
+ GridMenu {
+ id: menu
+ model: NavigationMenuModel {}
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.top: parent.top
+ anchors.bottom: bottomPanel.top
+ delegate: GridItem {
+ width: menu.width / menu.columnsOnPage
+ height: menu.height / menu.rows
+ OvalButton {
+ text: title
+ onReleased: contentLoader.go(qml)
+ anchors.centerIn: parent
+ fontSize: Constants.fontSize
+ }
+ }
+ }
+
+ Item {
+ id: bottomPanel
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ height: 1/4 * parent.height
+ width: parent.width
+
+ BackButton { anchors.centerIn: parent }
+ }
+ }
+}
+
+
diff --git a/src/components/qt_hmi/qml_model_qt4/views/NavigationNoRouteGridView.qml b/src/components/qt_hmi/qml_model_qt4/views/NavigationNoRouteGridView.qml
new file mode 100644
index 0000000000..312f076394
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/NavigationNoRouteGridView.qml
@@ -0,0 +1,205 @@
+/**
+ * @file NavigationNoRouteGridView.qml
+ * @brief Navigation no route screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ Item {
+ id: navNoRoute
+ anchors.fill: parent
+
+ Image {
+ // 3/4 top screen
+ id: map
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ source: "../res/nav/map.png"
+
+ Image {
+ id: compas
+ anchors.bottom: parent.bottom
+ anchors.bottomMargin: 1/4 * compas.width
+ anchors.left: parent.left
+ anchors.leftMargin: 1/4 * compas.width
+ source: "../res/nav/compass.png"
+ }
+
+ Column {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.horizontalCenter: compas.horizontalCenter
+ spacing: 1/8 * parent.height
+
+ // Zoom "+" button
+ Image {
+ id: zoomIn
+ source: "../res/buttons/zoom.png"
+
+ Text {
+ id: zoomInBtn
+ anchors.centerIn: parent
+ text: "+"
+ color: "white"
+ font.pixelSize: Constants.fontSize
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/buttons/zoom_pressed.png"
+ zoomInBtn.color = Constants.pressedButtonTextColor
+ }
+ onReleased: {
+ parent.source = "../res/buttons/zoom.png"
+ zoomInBtn.color = Constants.releasedButtonTextColor
+ }
+
+ onClicked: {
+ //Some behavior
+ }
+ }
+ }
+
+ // Zoom "-" button
+ Image {
+ id: zoomOut
+ source: "../res/buttons/zoom.png"
+
+ Text {
+ id: zoomOutBtn
+ anchors.centerIn: parent
+ text: "-"
+ color: "white"
+ font.pixelSize: Constants.fontSize
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/buttons/zoom_pressed.png"
+ zoomOutBtn.color = Constants.pressedButtonTextColor
+ }
+ onReleased: {
+ parent.source = "../res/buttons/zoom.png"
+ zoomOutBtn.color = Constants.releasedButtonTextColor
+ }
+
+ onClicked: {
+ //Some behavior
+ }
+ }
+ }
+ } // column
+
+ // Options button
+ Image {
+ id: navOptions
+ anchors.top: parent.top
+ anchors.right: parent.right
+ source: "../res/nav/options.png"
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/nav/options_pressed.png"
+ }
+ onReleased: {
+ parent.source = "../res/nav/options.png"
+ }
+ onClicked: {
+ //Options screen
+ }
+ }
+ }
+ } //map
+
+ Item {
+ // 1/4 bottom screen
+ id: bottomPart
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ // Destination search button
+ Image {
+ id: destSearch
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ source: "../res/buttons/longest_oval_btn.png"
+
+ Image {
+ id: destIcon
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 15
+ source: "../res/nav/dest_icon.png"
+ }
+
+ Text {
+ id: destText
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: destIcon.right
+ anchors.leftMargin: 5
+ text: "Destination"
+ color: Constants.primaryColor
+ font.pixelSize: 20
+ }
+
+ MouseArea {
+ anchors.fill: parent
+
+ onPressed: {
+ destSearch.source = "../res/buttons/longest_oval_btn_pressed.png"
+ destIcon.source = "../res/nav/dest_icon_black.png"
+ destText.color = Constants.pressedButtonTextColor
+ }
+
+ onReleased: {
+ destSearch.source = "../res/buttons/longest_oval_btn.png"
+ destIcon.source = "../res/nav/dest_icon.png"
+ destText.color = Constants.primaryColor
+ }
+
+ onClicked: {
+ contentLoader.go("./views/NavigationMenuView.qml")
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/PhoneKeyboardView.qml b/src/components/qt_hmi/qml_model_qt4/views/PhoneKeyboardView.qml
new file mode 100644
index 0000000000..b328406d68
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/PhoneKeyboardView.qml
@@ -0,0 +1,171 @@
+/**
+ * @file PhoneKeyboardView.qml
+ * @brief Phone keyboard screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models"
+import "../models/Constants.js" as Constants
+
+GeneralView{
+ Component.onCompleted: phoneKeyboard.changeColorOfActiveButtons()
+
+ Item {
+ function changeColorOfActiveButtons() {
+ for (var i = 0; i < contactsListModel.count; i++) {
+ activeButtons[contactsListModel.get(i).name[0].toUpperCase()] = true
+ }
+ }
+
+ id: phoneKeyboard
+ anchors.fill: parent
+
+ property variant activeButtons: {
+ "A": false, "B": false, "C": false, "D": false, "E": false,
+ "F": false, "G": false, "H": false, "I": false, "J": false,
+ "K": false, "L": false, "M": false, "N": false, "O": false,
+ "P": false, "Q": false, "R": false, "S": false, "T": false,
+ "U": false, "V": false, "W": false, "X": false, "Y": false, "Z": false
+ }
+
+ ContactsListModel {
+ id: contactsListModel
+ }
+
+ Item {
+ // 3/4 top screen
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ Column {
+ anchors.centerIn: parent
+
+ Row {
+ id: upperRow
+ property string contentLoader : "ABCDEFGHI"
+ anchors.horizontalCenter: parent.horizontalCenter
+ Repeater {
+ model: 9
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ textColorDefault: phoneKeyboard.activeButtons[upperRow.contentLoader.charAt(index)]
+ ? Constants.primaryColor : Constants.inactiveButtonTextColor
+ text: upperRow.contentLoader.charAt(index)
+ pixelSize: Constants.fontSize
+ onIsPressedChanged: {
+ if (!isPressed){
+ if (phoneKeyboard.activeButtons[upperRow.contentLoader.charAt(index)]) {
+ dataContainer.contactsFirstLetter = text
+ contentLoader.go("./views/ContactsListView.qml")
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Row {
+ id: middleRow
+ property string contentLoader : "JKLMNOPQR"
+ anchors.horizontalCenter: parent.horizontalCenter
+ Repeater {
+ model: 9
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ textColorDefault: phoneKeyboard.activeButtons[middleRow.contentLoader.charAt(index)]
+ ? Constants.primaryColor : Constants.inactiveButtonTextColor
+ text: middleRow.contentLoader.charAt(index)
+ pixelSize: Constants.fontSize
+ onIsPressedChanged: {
+ if (!isPressed){
+ if (phoneKeyboard.activeButtons[middleRow.contentLoader.charAt(index)]) {
+ dataContainer.contactsFirstLetter = text
+ contentLoader.go("./views/ContactsListView.qml")
+ }
+ }
+ }
+ }
+ }
+ }
+
+ Row {
+ id: lowerRow
+ property string contentLoader : "STUVWXYZ"
+ anchors.horizontalCenter: parent.horizontalCenter
+ Repeater {
+ model: 8
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ textColorDefault: phoneKeyboard.activeButtons[lowerRow.contentLoader.charAt(index)]
+ ? Constants.primaryColor : Constants.inactiveButtonTextColor
+ text: lowerRow.contentLoader.charAt(index)
+ pixelSize: Constants.fontSize
+ onIsPressedChanged: {
+ if (!isPressed){
+ if (phoneKeyboard.activeButtons[lowerRow.contentLoader.charAt(index)]) {
+ dataContainer.contactsFirstLetter = text
+ contentLoader.go("./views/ContactsListView.qml")
+ }
+ }
+ }
+ }
+ }
+ CircleButton {
+ imgOff: "../res/buttons/preset_btn.png"
+ imgOn: "../res/buttons/preset_pressed_btn.png"
+ text: "123"
+ pixelSize: 20
+ }
+ }
+ }
+ }
+
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ BackButton { anchors.centerIn: parent}
+ }
+ }
+}
+
+
diff --git a/src/components/qt_hmi/qml_model_qt4/views/PhoneMenuGridView.qml b/src/components/qt_hmi/qml_model_qt4/views/PhoneMenuGridView.qml
new file mode 100644
index 0000000000..7d52b1223a
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/PhoneMenuGridView.qml
@@ -0,0 +1,55 @@
+/**
+ * @file PhoneMenuGridView.qml
+ * @brief View for phone menu.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../models"
+import "../controls"
+
+GridMenu {
+ id: menu
+ model: PhoneMenuModel {}
+ delegate: GridItem {
+ width: menu.width / menu.columnsOnPage
+ height: menu.height / menu.rows
+ ClickableImage {
+ anchors.centerIn: parent
+ source: icon
+ onClicked: {
+ if(qml !== "") {
+ contentLoader.go(qml)
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/RadioPlayer.qml b/src/components/qt_hmi/qml_model_qt4/views/RadioPlayer.qml
new file mode 100644
index 0000000000..1df65d4235
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/RadioPlayer.qml
@@ -0,0 +1,160 @@
+/**
+ * @file RadioPlayerView.qml
+ * @brief Parent for AM, FM, Sirius players screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models"
+import "../models/Constants.js" as Constants
+
+Item {
+ id: radioPlayerView
+
+ property string radioType: ""
+ property string radioName: ""
+ property alias buttonHD: bot.children
+
+ property PlayerState playerState
+
+ Item {
+ // top 3/4 screen
+ id: upperContent
+ anchors.top: parent.top
+ anchors.left: parent.left
+ height: parent.height * 3/4
+ width: parent.width
+
+ Item {
+ // top part for buttons
+ id: top
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: parent.height * 1/4
+
+ OvalButton {
+ text: radioName
+ onReleased: contentLoader.go("./views/MusicSourceView.qml")
+ fontSize: Constants.fontSize
+ }
+
+ OvalButton {
+ anchors.right: parent.right
+ anchors.top: parent.top
+ text: "Tune"
+ fontSize: Constants.fontSize
+ }
+ }
+
+ Item {
+ // mid part for information about song
+ id: mid
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ width: parent.width
+ height: parent.height / 2
+
+ Column {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+
+ Row {
+ Text {
+ id: radioChannelNameText
+ color: Constants.primaryColor
+ text: playerState.presets[0]
+ font.pixelSize: 45
+ }
+ Text {
+ anchors.bottom: radioChannelNameText.bottom
+ color: Constants.primaryColor
+ text: " " + radioType
+ font.pixelSize: 25
+ }
+ }
+
+ Text {
+ color: Constants.primaryColor
+ text: playerState.songName
+ font.pixelSize: 25
+ font.bold: true
+ }
+
+ Text {
+ color: Constants.primaryColor
+ text: playerState.albumName
+ font.pixelSize: 25
+ }
+ }
+ }
+
+ Item {
+ // bottom part for HD button (for FM radio)
+ id: bot
+ anchors.left: parent.left
+ anchors.bottom: parent. bottom
+ width: parent.width
+ height: parent.height * 1/4
+ }
+ }
+
+ Item {
+ // bottom 1/4 screen
+ id: lowerContent
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ // Line that divide screen in two parts
+ Rectangle {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: 2
+ color: Constants.primaryColor
+ }
+
+ PresetRow {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ presets: playerState.presets
+ width: parent.width
+ onSelectedIndexChanged: {
+ radioChannelNameText.text = presets[selectedIndex];
+ }
+ }
+ }
+}
+
+
diff --git a/src/components/qt_hmi/qml_model_qt4/views/SDLNavi.qml b/src/components/qt_hmi/qml_model_qt4/views/SDLNavi.qml
new file mode 100644
index 0000000000..620b0434c6
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/SDLNavi.qml
@@ -0,0 +1,223 @@
+/**
+ * @file SDLNavi.qml
+ * @brief SDL navigation screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+
+GeneralView {
+ applicationContext: true
+
+ Item {
+ anchors.fill: parent
+ id: wholeWindow
+
+ Row {
+ // Top items
+ id: topItems
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/6 * parent.height
+ spacing: Constants.sdlNaviSpacing
+
+ Rectangle {
+ anchors.top: parent.top
+ width: 1/5 * parent.width
+ height: 4/5 * parent.height
+ color: Constants.sdlNaviTransparentItemColor
+ radius: 5
+
+ Text {
+ text: dataContainer.currentApplication.hmiUIText.mainField1
+ anchors.fill: parent
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ Rectangle {
+ anchors.top: parent.top
+ width: 3/5 * parent.width - 2 * parent.spacing
+ height: parent.height
+ color: Constants.sdlNaviTransparentItemColor
+ radius: 5
+
+ Text {
+ text: dataContainer.currentApplication.hmiUIText.mainField2
+ anchors.fill: parent
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ Rectangle {
+ id: rightRectOfTopItems
+ anchors.top: parent.top
+ width: 1/5 * parent.width
+ height: 4/5 * parent.height
+ color: Constants.sdlNaviTransparentItemColor
+ radius: 5
+ Text {
+ text: dataContainer.currentApplication.hmiUIText.mainField3 ? dataContainer.currentApplication.hmiUIText.mainField3 : "field3"
+ anchors.fill: parent
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ }
+
+ Column {
+ // "+", "-" button at left
+ anchors.left: parent.left
+ anchors.verticalCenter: parent.verticalCenter
+ width: 1/12 * parent.width
+ height: 2/10 * parent.height + spacing
+ spacing: Constants.sdlNaviSpacing
+
+ GradientRectangle {
+ width: parent.width
+ height: 1/10 * wholeWindow.height
+ text: "+"
+ isCustomButton: true
+ customButtonID: 3
+ }
+ GradientRectangle {
+ width: parent.width
+ height: 1/10 * wholeWindow.height
+ text: "-"
+ isCustomButton: true
+ customButtonID: 4
+ }
+ }
+
+ Column {
+ anchors.right: parent.right
+ anchors.top: topItems.bottom
+ width: 1/6 * parent.width
+ height: 2/10 * parent.height + spacing
+ spacing: Constants.sdlNaviSpacing
+
+ Rectangle {
+ width: parent.width
+ height: 1/10 * wholeWindow.height
+ color: Constants.sdlNaviTransparentItemColor
+ radius: 5
+ Text {
+ text: ""
+ anchors.fill: parent
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ Rectangle {
+ width: parent.width
+ height: 1/10 * wholeWindow.height
+ color: Constants.sdlNaviTransparentItemColor
+ radius: 5
+ Text {
+ text: dataContainer.currentApplication.hmiUIText.mainField4 ? dataContainer.currentApplication.hmiUIText.mainField4 : "mainField4"
+ anchors.fill: parent
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ }
+
+ Row {
+ // bottom items
+ id: bottomItems
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/6 * parent.height
+ spacing: Constants.sdlNaviSpacing
+
+ GradientRectangle {
+ anchors.bottom: parent.bottom
+ width: 1/3 * parent.width
+ height: parent.height
+ text: "Menu"
+ isCustomButton: true
+ customButtonID: 1
+ }
+ Rectangle {
+ anchors.bottom: parent.bottom
+ width: 1/3 * parent.width - 2 * parent.spacing
+ height: parent.height
+ color: Constants.sdlNaviTransparentItemColor
+ radius: 5
+ Text {
+ text: "mainField5"
+ anchors.fill: parent
+ font.pixelSize: Constants.fontSize
+ color: "white"
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+ }
+ }
+ GradientRectangle {
+ anchors.bottom: parent.bottom
+ width: 1/3 * parent.width
+ height: parent.height
+ text: "Custom Button"
+ isCustomButton: true
+ customButtonID: 2
+ }
+ }
+
+ GradientRectangle {
+ anchors.right: parent.right
+ anchors.bottom: bottomItems.top
+ anchors.bottomMargin: Constants.sdlNaviSpacing
+ width: 1/6 * parent.width
+ height: 1/10 * parent.height
+ text: "Options"
+ fontSize: Constants.fontSize
+ onReleased: {
+ contentLoader.go("./views/SDLPlayerOptionsListView.qml", dataContainer.currentApplication.appId)
+ }
+
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/SDLNonMediaView.qml b/src/components/qt_hmi/qml_model_qt4/views/SDLNonMediaView.qml
new file mode 100644
index 0000000000..bebfe9585d
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/SDLNonMediaView.qml
@@ -0,0 +1,194 @@
+/**
+ * @file SDLNonMediaView.qml
+ * @brief SDL non media screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+import QtQuick 1.1
+import "../models"
+import "../controls"
+import "../models/Constants.js" as Constants
+import "../models/Internal.js" as Internal
+import "../hmi_api/Common.js" as Common
+
+GeneralView {
+ applicationContext: true
+
+ Item {
+ id: upperContent
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+
+ Item {
+ id: topButtonRow
+ // top 1/4 of screen
+ width: parent.width
+ height: 1/4 * parent.height
+
+ PagedFlickable {
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width
+ elementWidth: Constants.ovalButtonWidth
+ spacing: (width - 4 * elementWidth) / 3
+ snapTo: elementWidth + spacing
+
+ OvalButton {
+ text: "Options"
+ onClicked: { contentLoader.go("./views/SDLPlayerOptionsListView.qml") }
+ }
+
+ Repeater {
+ model: dataContainer.currentApplication.softButtons ?
+ dataContainer.currentApplication.softButtons.count :
+ 0
+ delegate:
+ SoftButton {
+ appId: dataContainer.currentApplication.appId
+ button: dataContainer.currentApplication.softButtons.get(index)
+ }
+ }
+ }
+ }
+
+ Column {
+ id: midContent
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: topButtonRow.bottom
+ anchors.left: parent.left
+
+ Text {
+ id: deviceName
+ width: parent.width
+ height: 1/5 * parent.height
+ text: "Device: " + dataContainer.currentApplication.deviceName
+ verticalAlignment: Text.AlignVCenter
+ font.pixelSize: Constants.fontSize
+ color: Constants.primaryColor
+ }
+
+ Row {
+ width: parent.width
+ height: 4/5 * parent.height
+ spacing: Constants.margin
+
+ Image {
+ id: image
+ height: parent.height
+ width: height
+ source: dataContainer.currentApplication.hmiUIText.image
+ }
+
+ Column {
+ height: parent.height
+ width: parent.width - image.width - parent.spacing
+ spacing: Constants.margin
+
+ Text {
+ id: text1
+ width: parent.width
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: dataContainer.hmiUITextAlignment
+ text: dataContainer.currentApplication.hmiUIText.mainField1
+ font.pixelSize: Constants.fontSize
+ color: Constants.primaryColor
+ }
+
+ Text {
+ width: parent.width
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: dataContainer.hmiUITextAlignment
+ text: dataContainer.currentApplication.hmiUIText.mainField2
+ font.pixelSize: Constants.fontSize
+ color: Constants.primaryColor
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ // bottom 1/4 screen
+ id: lowerContent
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: parent.height * 1/4
+
+ PresetRow {
+ id: presetsRow
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ presets: Internal.getArrayForPresetRow()
+ width: parent.width
+ property bool clickProcessed
+
+ Timer {
+ id: timer
+ interval: Constants.presetButtonTimer
+ repeat: false
+ triggeredOnStart: false
+ }
+
+ onPresetButtonPressed: {
+ timer.start()
+ clickProcessed = false
+ sdlButtons.onButtonEvent(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonEventMode.BUTTONDOWN, undefined)
+ }
+
+ onPresetButtonReleased: {
+ sdlButtons.onButtonEvent(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonEventMode.BUTTONUP, undefined)
+ timer.stop()
+ if (!clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonPressMode.SHORT, undefined)
+ }
+ }
+
+ Connections {
+ target: timer
+ onTriggered: {
+ if(!clickProcessed) {
+ sdlButtons.onButtonPress(Common.ButtonName.PRESET_0 + selectedIndex, Common.ButtonPressMode.LONG, undefined)
+ clickProcessed = true
+ }
+ }
+ }
+ }
+ }
+
+ StatusBar {
+ anchors.left: parent.left
+ anchors.bottom: parent.bottom
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/SDLPlayerOptionsListView.qml b/src/components/qt_hmi/qml_model_qt4/views/SDLPlayerOptionsListView.qml
new file mode 100644
index 0000000000..076851b29a
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/SDLPlayerOptionsListView.qml
@@ -0,0 +1,120 @@
+/**
+ * @file SDLPlayerOptionsListView.qml
+ * @brief SDL player options screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../models/Internal.js" as Internal
+
+GeneralView {
+ applicationContext: true
+ systemContext: Common.SystemContext.SYSCTXT_MENU
+ Item {
+ // 3/4 top screen
+ height: parent.height * 3/4
+ width: parent.width
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+
+ ListView {
+ id: sdlPlayerOptionsListView
+ anchors.horizontalCenter: parent.horizontalCenter
+ width:parent.width
+ height:parent.height
+
+ model: dataContainer.currentApplication.currentSubMenu
+
+ delegate: Row {
+ spacing: Constants.iconItemListSpacing
+ Icon {
+ source: model.icon
+ width: Constants.iconItemListSize
+ height: Constants.iconItemListSize
+
+ MouseArea {
+ anchors.fill: parent
+ enabled: model.icon.value !== undefined
+
+ onPressed: text.press()
+ onReleased: text.release()
+ onCanceled: text.release()
+ onClicked: text.click()
+ }
+ }
+
+ ClickableText {
+ id: text
+ text: name + (type === Internal.MenuItemType.MI_SUBMENU ? " >" : "")
+ width: sdlPlayerOptionsListView.width - x
+ elide: Text.ElideRight
+ defaultColor: type === Internal.MenuItemType.MI_PARENT ?
+ Constants.inactiveButtonTextColor :
+ Constants.primaryColor
+ pressedColor: type === Internal.MenuItemType.MI_PARENT ?
+ Constants.inactiveButtonTextColorPressed :
+ Constants.primaryColorPressed
+ font.pixelSize: Constants.titleFontSize
+
+ function click() {
+ console.debug("enter")
+ switch (type) {
+ case Internal.MenuItemType.MI_NODE:
+ sdlUI.onCommand(model.id, dataContainer.currentApplication.appId)
+ contentLoader.back()
+ break;
+ case Internal.MenuItemType.MI_SUBMENU:
+ case Internal.MenuItemType.MI_PARENT:
+ dataContainer.currentApplication.currentSubMenu = subMenu
+ break;
+ }
+ console.debug("exit")
+ }
+ onClicked: click()
+ }
+ }
+ }
+ }
+
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ BackButton { anchors.centerIn: parent }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/SDLPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/SDLPlayerView.qml
new file mode 100644
index 0000000000..0c1bd5b7e9
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/SDLPlayerView.qml
@@ -0,0 +1,79 @@
+/**
+ * @file SDLPlayerView.qml
+ * @brief SDL player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+
+GeneralView {
+ applicationContext: true
+ MediaPlayer {
+ id: mediaPlayer
+ onPlay: { sdlButtons.onButtonPress(Common.ButtonName.OK, Common.ButtonPressMode.SHORT, undefined) }
+ onPause: { sdlButtons.onButtonPress(Common.ButtonName.OK, Common.ButtonPressMode.SHORT, undefined) }
+ playerName: "SDL music"
+ playerType: "SDL"
+ image: dataContainer.currentApplication.hmiUIText.image
+ anchors.fill: parent
+
+ buttons: [
+ OvalButton {
+ text: dataContainer.currentApplication.appName
+ onReleased: { contentLoader.go("./views/MusicSourceView.qml") }
+ },
+
+ OvalButton {
+ text: "SDL Menu"
+ onReleased: { contentLoader.go("./views/ApplicationListView.qml") }
+ },
+
+ OvalButton {
+ text: "Options"
+ onReleased: { contentLoader.go("./views/SDLPlayerOptionsListView.qml") }
+ },
+
+ Repeater {
+ model: dataContainer.currentApplication.softButtons ?
+ dataContainer.currentApplication.softButtons.count :
+ 0
+
+ delegate: SoftButton {
+ appId: dataContainer.currentApplication.appId
+ button: dataContainer.currentApplication.softButtons.get(index)
+ }
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/ScrollableMessageView.qml b/src/components/qt_hmi/qml_model_qt4/views/ScrollableMessageView.qml
new file mode 100644
index 0000000000..f7111906de
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/ScrollableMessageView.qml
@@ -0,0 +1,216 @@
+/**
+ * @file ScrollableMessageView.qml
+ * @brief Scrollable Message View .
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../models"
+import "../popups"
+
+GeneralView {
+ applicationContext: true
+ id: scrollableMessageView
+
+ function complete(abort){
+ console.debug("enter")
+ timer.stop()
+ dataContainer.scrollableMessageModel.running = false
+
+ dataContainer.popups--
+ dataContainer.applicationContext = dataContainer.applicationSavedContext
+
+ if(abort) {
+ console.debug("send error")
+ DBus.sendError(dataContainer.scrollableMessageModel.async, Common.Result.ABORTED)
+ } else {
+ console.debug("send ok")
+ DBus.sendReply(dataContainer.scrollableMessageModel.async, {})
+ }
+
+ contentLoader.back()
+ console.debug("exit")
+ }
+
+
+ Connections {
+ target: contentLoader
+ onStatusChanged: {
+ if (status == Component.Ready) {
+ console.debug("enter")
+ console.debug("timeout in timer", timer.interval)
+ dataContainer.popups++
+ dataContainer.applicationSavedContext = dataContainer.applicationContext
+ dataContainer.scrollableMessageModel.running = true
+ timer.start()
+ console.debug("exit")
+ }
+ }
+ }
+
+ Rectangle {
+ anchors.fill: parent
+ color: Constants.secondaryColor
+
+ Timer {
+ id: timer
+ interval: dataContainer.scrollableMessageModel.timeout
+ onTriggered: {
+ complete(false)
+ }
+ }
+
+ Item {
+ // top 1/6 of screen
+ id: top
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: dataContainer.scrollableMessageModel.softButtons.count > 0 ? parent.height * 1/6 : 1
+
+ OvalButton {
+ //this button is used only to get item size for PagedFlickable
+ id: fakeButton
+ text: "defaultBtnSize"//remove this line when default size for btn will be introduced
+ visible:false
+ }
+
+ PagedFlickable {
+ id: flickRow
+ width: top.width
+ spacing: (width - fakeButton.width * 4) / 3
+ snapTo: fakeButton.width + spacing
+ elementWidth: fakeButton.width
+
+
+ ListView {
+ id: softButtons
+ width: model.count * fakeButton.width + (model.count - 1) * flickRow.spacing
+ height: fakeButton.height
+ spacing: flickRow.spacing
+
+ orientation: ListView.Horizontal
+ interactive: false
+ model: dataContainer.scrollableMessageModel.softButtons
+
+ delegate: SoftButton {
+ appId: dataContainer.currentApplication.appId
+ button: model
+ onKeepContext: timer.restart()
+ onDefaultAction: scrollableMessageView.complete(true)
+ }
+ }
+ }
+ }
+
+ Item {
+ id: middle
+ anchors.top: top.bottom
+ anchors.left: parent.left
+ anchors.bottom: bottom.top
+ width: parent.width
+
+ Flickable {
+ id:flickable
+ anchors.fill: middle
+ flickableDirection: Flickable.VerticalFlick
+ contentWidth: longMessageText.width
+ contentHeight: longMessageText.height
+ clip: true
+
+
+ Text {
+ id: longMessageText
+ wrapMode: Text.Wrap
+ width: middle.width
+ text: dataContainer.scrollableMessageModel.longMessageText
+ color: Constants.scrollableMessageTextColor
+ font.pixelSize: Constants.fontSize
+
+ }
+ }
+ Rectangle {
+ id: scrollbar
+ anchors.right: flickable.right
+ y: flickable.visibleArea.yPosition * flickable.height
+ width: Constants.scrollableMessageScrollBarWidth
+ height: flickable.visibleArea.heightRatio * flickable.height
+ visible: !(flickable.visibleArea.heightRatio > 1)
+ color: Constants.scrollableMessageScrollBarColor
+ }
+
+ }
+
+ Item {
+ // 1/4 bottom screen
+ id: bottom
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ BackButton {
+ id:backButton
+ anchors.centerIn: parent
+ onClicked: {
+ console.debug("enter")
+ complete(true)
+ console.debug("exit")
+ }
+ }
+ }
+ }
+ /**
+ * Test Support Section
+ *
+ */
+ function getTimer(){
+ return timer
+ }
+ function getSoftButtonsListView(){
+ return softButtons
+ }
+ function getScrollbar(){
+ return scrollbar
+ }
+ function getTextArea(){
+ return middle
+ }
+ function getBackButton(){
+ return backButton
+ }
+ /**
+ * Test Support Section End
+ */
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/SimulationView.qml b/src/components/qt_hmi/qml_model_qt4/views/SimulationView.qml
new file mode 100644
index 0000000000..c30d83f019
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/SimulationView.qml
@@ -0,0 +1,284 @@
+/**
+ * @file SimulationView.qml
+ * @brief Area of screen responsible for simulation actions
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../views"
+import "../popups"
+import "../models/Constants.js" as Constants
+
+Rectangle {
+ width: controlArea.width + controlArea.anchors.margins
+ anchors.top: parent.top
+ anchors.bottom: parent.bottom
+ color: Constants.panelColor
+
+ Item {
+ id: showArea
+ anchors.top: parent.top
+ anchors.left: parent.left
+ anchors.right: parent.right
+ height: parent.height - (controlArea.childrenRect.height + controlArea.anchors.margins)
+
+ ExitAllApplicationsPopup {
+ id: exitAllApplicationsPopup
+ anchors.fill: parent
+ visible: false
+ }
+
+ VehicleInfoPopUp {
+ id: viPopUp
+ anchors.fill: parent
+ }
+
+ TBTClientStatePopUp {
+ id: tbtClientStatePopUp
+ anchors.fill: parent
+ visible: false
+ }
+ }
+
+ Item {
+ id: controlArea
+ anchors.bottom: parent.bottom
+ anchors.margins: Constants.panelPadding
+ anchors.horizontalCenter: parent.horizontalCenter
+ width: table.width
+
+ ListModel {
+ id: languagesList
+
+ Component.onCompleted: {
+ for (var name in Common.Language) {
+ if (settingsContainer.sdlLanguagesList.indexOf(Common.Language[name]) != -1) {
+ append({name: name.replace('_', '-')});
+ }
+ }
+ }
+ }
+
+ Text {
+ id: label
+ text: "Languages"
+ color: Constants.panelTextColor
+ anchors.bottom: table.top
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Grid {
+ id: table
+ spacing: 5
+ columns: 2
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.bottom: globalProperties.top
+
+ Text {
+ text: "HMI UI"
+ color: Constants.panelTextColor
+ }
+
+ Text {
+ text: "HMI TTS + VR"
+ color: Constants.panelTextColor
+ }
+
+ ComboBox {
+ width: table.width / table.columns - table.spacing
+ model: languagesList
+ onCurrentIndexChanged: {
+ dataContainer.hmiUILanguage = settingsContainer.sdlLanguagesList[currentIndex];
+ sdlUI.onLanguageChange(dataContainer.hmiUILanguage);
+ }
+ z: 1000
+ }
+
+ ComboBox {
+ width: table.width / table.columns - table.spacing
+ model: languagesList
+ onCurrentIndexChanged: {
+ dataContainer.hmiTTSVRLanguage = settingsContainer.sdlLanguagesList[currentIndex];
+ sdlTTS.onLanguageChange(dataContainer.hmiTTSVRLanguage);
+ sdlVR.onLanguageChange(dataContainer.hmiTTSVRLanguage);
+ }
+ z: 1000
+ }
+
+ Text {
+ text: "Application UI"
+ color: Constants.panelTextColor
+ }
+
+ Text {
+ text: "Application TTS + VR"
+ color: Constants.panelTextColor
+ }
+
+ Text {
+ id: uiLanguageLabel
+ color: Constants.panelTextColor
+ text: " "
+ Connections {
+ target: dataContainer
+ onCurrentApplicationChanged: {
+ for (var s in Common.Language) {
+ if (Common.Language[s] === dataContainer.currentApplication.hmiDisplayLanguageDesired) {
+ uiLanguageLabel.text = s;
+ }
+ }
+ }
+ }
+ }
+
+ Text {
+ id: ttsLanguageLabel
+ color: Constants.panelTextColor
+ text: " "
+ Connections {
+ target: dataContainer
+ onCurrentApplicationChanged: {
+ for (var s in Common.Language) {
+ if (Common.Language[s] === dataContainer.currentApplication.languageTTSVR) {
+ ttsLanguageLabel.text = s;
+ }
+ }
+ }
+ }
+ }
+
+ PushButton {
+ id: vehicleInfo
+ label: "Vehicle info"
+ toggleMode: true
+ onPressed: {
+ viPopUp.show();
+ }
+ onUnpressed: {
+ viPopUp.hide();
+ }
+ }
+
+ PushButton {
+ id: tbtClientState
+ label: "TBT Client state"
+ toggleMode: true
+ onPressed: {
+ tbtClientStatePopUp.show();
+ }
+ onUnpressed: {
+ tbtClientStatePopUp.hide();
+ }
+ }
+
+ PushButton {
+ label: "Exit application"
+ onClicked: {
+ if (dataContainer.applicationContext) {
+ sdlBasicCommunication.onExitApplication(dataContainer.currentApplication.appId)
+ }
+ }
+ }
+
+ PushButton {
+ id: exitAllAppsButton
+ label: "Exit all apps"
+ toggleMode: true
+ onPressed: {
+ exitAllApplicationsPopup.show()
+
+ }
+ onUnpressed: {
+ exitAllApplicationsPopup.hide()
+ }
+ Connections {
+ target: exitAllApplicationsPopup
+ onVisibleChanged: {
+ if (!exitAllApplicationsPopup.visible) {
+ exitAllAppsButton.state = "unpressed"
+ }
+ }
+ }
+ }
+
+ CheckBox {
+ color: Constants.panelTextColor
+ text: "Use URL"
+ }
+
+ CheckBox {
+ color: Constants.panelTextColor
+ text: "DD"
+
+ onClicked: {
+ if (checked) {
+ dataContainer.driverDistractionState =
+ Common.DriverDistractionState.DD_ON;
+ } else {
+ dataContainer.driverDistractionState =
+ Common.DriverDistractionState.DD_OFF;
+ }
+ }
+ }
+ }
+
+ Rectangle {
+ id: globalProperties
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.bottom: parent.bottom
+ height: listGlobalProperties.height + Constants.panelPadding
+ border.color: Constants.panelTextColor
+ border.width: 1
+ color: Constants.panelColor
+ Column {
+ id: listGlobalProperties
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: Constants.panelPadding / 4
+ Text {
+ text: "HELP_PROMPT: " + dataContainer.currentApplication.helpPrompt
+ color: Constants.panelTextColor
+ }
+ Text {
+ text: "TIMEOUT_PROMPT: " + dataContainer.currentApplication.timeoutPrompt
+ color: Constants.panelTextColor
+ }
+ Text {
+ text: "AUTOCOMPLETE_TEXT: " // TODO(ALeshin): Function didn' realized yet
+ color: Constants.panelTextColor
+ }
+ }
+ }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/SiriusPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/SiriusPlayerView.qml
new file mode 100644
index 0000000000..14dd211303
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/SiriusPlayerView.qml
@@ -0,0 +1,46 @@
+/**
+ * @file SiriusPlayerView.qml
+ * @brief Sirius player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../controls"
+
+GeneralView {
+ RadioPlayer {
+ id: siriusRadioPlayer
+ anchors.fill: parent
+ radioType: ""
+ radioName: "Sirius"
+
+ playerState: dataContainer.siriusPlayerState
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/TurnByTurnView.qml b/src/components/qt_hmi/qml_model_qt4/views/TurnByTurnView.qml
new file mode 100644
index 0000000000..630113334e
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/TurnByTurnView.qml
@@ -0,0 +1,201 @@
+/**
+ * @file TurnByTurnView.qml
+ * @brief View for TurnByTurn.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../models"
+
+GeneralView {
+ applicationContext: true
+
+ Item {
+ id: turnByTurnView
+ anchors.fill: parent
+
+ Item {
+ // top 3/4 of screen
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: parent.height * 3/4
+
+ Item {
+ // row of oval buttons
+ id: ovalButtonsRow
+ anchors.top: parent.top
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+
+ PagedFlickable {
+ id: buttonsRow
+ width: parent.width
+ spacing: (width - 4 * elementWidth) / 3
+ anchors.verticalCenter: parent.verticalCenter
+ snapTo: Constants.ovalButtonWidth + spacing
+ elementWidth: Constants.ovalButtonWidth
+
+ OvalButton {
+ id: turnListButton
+ text: "TurnList"
+ onClicked: {
+ console.log("Go to TurnListView");
+ contentLoader.go("./views/TurnListView.qml");
+ }
+ }
+
+ Repeater {
+ model: dataContainer.navigationModel.softButtons ?
+ dataContainer.navigationModel.softButtons.count :
+ 0
+ delegate:
+ SoftButton {
+ appId: dataContainer.navigationModel.appId
+ button: dataContainer.navigationModel.softButtons.get(index)
+ }
+ }
+ }
+ }
+
+ Column {
+ // Picture + text information + media clock
+ id: mediaContent
+ width: parent.width
+ height: 3/4 * parent.height
+ anchors.left: parent.left
+ anchors.top: ovalButtonsRow.bottom
+
+ Row {
+ // picture + text info
+ width: parent.width
+ height: 3/4 * parent.height
+ spacing: Constants.margin
+
+ Image {
+ id: image
+ height: parent.height
+ width: height
+ source: dataContainer.navigationModel.turnIcon
+ }
+
+ Column {
+ // text info
+ id: textInfo
+ height: parent.height
+ width: parent.width - image.width - parent.spacing
+ spacing: (height - 5 * navText1.height) / 4
+
+ Text {
+ id: navText1
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.primaryColor
+ text: dataContainer.navigationModel.text1
+ font.pixelSize: Constants.fontSize
+ visible: dataContainer.navigationModel.text1
+ }
+
+ Text {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.primaryColor
+ text: dataContainer.navigationModel.text2
+ font.pixelSize: Constants.fontSize
+ visible: dataContainer.navigationModel.text2
+ }
+
+ Text {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.primaryColor
+ text: "Total distance: " + dataContainer.navigationModel.totalDistance
+ font.pixelSize: Constants.fontSize
+ visible: dataContainer.navigationModel.totalDistance
+ }
+
+ Text {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.primaryColor
+ text: "Time to destination: " + dataContainer.navigationModel.timeToDestination
+ font.pixelSize: Constants.fontSize
+ visible: dataContainer.navigationModel.timeToDestination
+ }
+
+ Text {
+ anchors.left: parent.left
+ anchors.right: parent.right
+ color: Constants.primaryColor
+ text: "ETA: " + dataContainer.navigationModel.eta
+ font.pixelSize: Constants.fontSize
+ visible: dataContainer.navigationModel.eta
+ }
+ }
+ }
+
+ Row {
+ anchors.horizontalCenter: parent.horizontalCenter
+ height: 1/4 * parent.height
+ width: 2/3 * parent.width
+
+ Rectangle {
+ id: coveredDistance
+ anchors.verticalCenter: parent.verticalCenter
+ height: Constants.distanceBarHeight
+ width: dataContainer.navigationModel.distanceToManeuver / dataContainer.navigationModel.distanceToManeuverScale * parent.width
+ color: "white"
+ }
+
+ Rectangle {
+ anchors.verticalCenter: parent.verticalCenter
+ height: Constants.distanceBarHeight
+ width: parent.width - coveredDistance.width
+ color: Constants.primaryColor
+ }
+ }
+ }
+ }
+ }
+
+ Item {
+ // 1/4 bottom screen
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+ BackButton { anchors.centerIn: parent }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/TurnListView.qml b/src/components/qt_hmi/qml_model_qt4/views/TurnListView.qml
new file mode 100644
index 0000000000..91ff02ea02
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/TurnListView.qml
@@ -0,0 +1,103 @@
+/**
+ * @file TurnListView.qml
+ * @brief View for TurnByTurn list.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models/Constants.js" as Constants
+import "../hmi_api/Common.js" as Common
+
+GeneralView {
+ applicationContext: true
+
+ Item {
+ anchors.left: parent.left
+ anchors.top: parent.top
+ width: parent.width
+ height: 3/4 * parent.height
+
+ Item {
+ id: sotfButtons
+ width: parent.width
+ height: 1/4 * parent.height
+
+ PagedFlickable {
+ anchors.verticalCenter: parent.verticalCenter
+ width: parent.width
+ elementWidth: Constants.ovalButtonWidth
+ snapTo: elementWidth + spacing
+ spacing: (width - 4 * elementWidth) / 3
+
+ Repeater {
+ model: dataContainer.currentApplication.turnListSoftButtons ?
+ dataContainer.currentApplication.turnListSoftButtons.count :
+ 0
+ delegate:
+ SoftButton {
+ appId: dataContainer.currentApplication.appId
+ button: dataContainer.currentApplication.turnListSoftButtons.get(index)
+ }
+ }
+ }
+ }
+
+ ScrollableListView {
+ id: scrollableList
+ anchors.top: sotfButtons.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 3/4 * parent.height
+
+ model: dataContainer.currentApplication.turnList
+
+ delegate:
+ ListItem {
+ width: scrollableList.width
+ height: Constants.iconItemListSize
+ text: dataContainer.currentApplication.turnList.get(index).navigationText.fieldText
+ fontSize: Constants.fontSize
+ icon: dataContainer.currentApplication.turnList.get(index).turnIcon
+ }
+ }
+ }
+
+ Item {
+ // 1/4 bottom screen
+ id: back
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+ BackButton { anchors.centerIn: parent }
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/UsbPlayerView.qml b/src/components/qt_hmi/qml_model_qt4/views/UsbPlayerView.qml
new file mode 100644
index 0000000000..4b17b55c10
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/UsbPlayerView.qml
@@ -0,0 +1,61 @@
+/**
+ * @file UsbPlayerView.qml
+ * @brief USB player screen view.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+import QtQuick 1.1
+import "../hmi_api/Common.js" as Common
+import "../models/Constants.js" as Constants
+import "../controls"
+
+GeneralView {
+ category: Common.DeactivateReason.AUDIO
+ MediaPlayer {
+ id: usbPlayer
+ playerName: "USB"
+ anchors.fill: parent
+ playerState: dataContainer.usbPlayerState
+ image: playerState.albumImage
+
+ buttons: [
+ OvalButton {
+ text: usbPlayer.playerName
+ onReleased: contentLoader.go("./views/MusicSourceView.qml")
+ fontSize: Constants.fontSize
+ },
+
+ OvalButton {
+ text: "Browse"
+ fontSize: Constants.fontSize
+ }
+ ]
+ }
+}
diff --git a/src/components/qt_hmi/qml_model_qt4/views/WarningInfo.qml b/src/components/qt_hmi/qml_model_qt4/views/WarningInfo.qml
new file mode 100644
index 0000000000..e096cb80d1
--- /dev/null
+++ b/src/components/qt_hmi/qml_model_qt4/views/WarningInfo.qml
@@ -0,0 +1,135 @@
+/**
+ * @file WarningInfo.qml
+ * @brief Screen with warning information.
+ * Copyright (c) 2013, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+import QtQuick 1.1
+import "../controls"
+import "../models/Constants.js" as Constants
+
+Rectangle {
+ id: warningInfo
+ anchors.fill: parent
+ color: Constants.secondaryColor
+ Text {
+ anchors.top: parent.top
+ anchors.left: parent.left
+ height: 1/4 * parent.height
+ width: parent.width
+ horizontalAlignment: Text.AlignHCenter
+ verticalAlignment: Text.AlignVCenter
+
+ text: "WARNING!"
+ color: Constants.warningColor
+ font.pixelSize: Constants.titleFontSize
+ font.bold: true
+ style: Text.Raised
+ styleColor: "gray"
+ }
+
+ Text {
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.right: parent.right
+ anchors.margins: Constants.margin
+ height: 1/2 * parent.height
+ width: parent.width
+ verticalAlignment: Text.AlignVCenter
+ horizontalAlignment: Text.AlignHCenter
+ wrapMode: Text.WordWrap
+
+ text: "This application is intended to be used as a demonstrative aid only, "
+ + "while the vehicle is parked. Don't use it while driving. <br /><br />"
+ + "Use extreme caution when using any device that takes your attention off the road. "
+ + "Ford recommends against the use of any hand-held device while driving and that you comply "
+ + "with all applicable laws. Your primary responsibility is the safe operation of the vehicle."
+ color: "white"
+ font.pixelSize: 25
+ font.bold: true
+ }
+
+ function showOkButton() {
+ okButtonAnimation.start()
+ }
+
+ Item {
+ id: ok
+ anchors.bottom: parent.bottom
+ anchors.left: parent.left
+ width: parent.width
+ height: 1/4 * parent.height
+ opacity: 0
+
+ SequentialAnimation
+ {
+ id: okButtonAnimation
+ // Decrease this value while debugging
+ PauseAnimation { duration: Constants.warningScreenDuration }
+ NumberAnimation {
+ target: ok
+ duration: Constants.animationDuration
+ property: "opacity"
+ from: 0; to: 1;
+ }
+ }
+
+ Image {
+ id: okButton
+ anchors.centerIn: parent
+ source: "../res/buttons/longest_oval_btn.png"
+
+ Text {
+ id: text
+ anchors.centerIn: parent
+ text: "OK"
+ font.pixelSize: Constants.fontSize
+ color: Constants.primaryColor
+ }
+
+ MouseArea {
+ anchors.fill: parent
+ onPressed: {
+ parent.source = "../res/buttons/longest_oval_btn_pressed.png"
+ text.color = Constants.secondaryColor
+ }
+ onReleased: {
+ parent.source = "../res/buttons/longest_oval_btn.png"
+ text.color = Constants.primaryColor
+ }
+ onClicked: {
+ console.log("WarningInfo OkButton - on clicked enter");
+ warningInfo.visible = false
+ }
+ }
+ }
+ }
+}