diff options
author | Justin Dickow <jjdickow@gmail.com> | 2014-10-20 17:44:41 -0400 |
---|---|---|
committer | Justin Dickow <jjdickow@gmail.com> | 2014-10-20 17:44:41 -0400 |
commit | 34e7256493ff0e6594029b9857d7e2aa31f5dbeb (patch) | |
tree | 367306b507c52d3af211533810adbc22004e0192 /src/components/qt_hmi/qml_model_qt4 | |
parent | 2eef966e9b5fd4d94dd98820095eb765e200c64b (diff) | |
download | sdl_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')
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 + } + } + } + } +} |