summaryrefslogtreecommitdiffstats
path: root/GUIModel
diff options
context:
space:
mode:
author0 <0>2021-05-21 22:50:39 +0900
committer0 <0>2021-05-21 22:50:39 +0900
commit32264925b9cc54b8b8b92fa40e0717095a1bb9d7 (patch)
tree640baf7342f30e5cfb6f39a5952a06a172bc75cd /GUIModel
parent5c0cca5b770cb30d547f3d7c56be9f46aa1a31b8 (diff)
initial commit
Diffstat (limited to 'GUIModel')
-rw-r--r--GUIModel/ACC/ACC_Animation.qml1099
-rw-r--r--GUIModel/ACC/Material_ColorFactor.qml91
-rw-r--r--GUIModel/ACC/Material_ColorFactor_Tbt.qml92
-rw-r--r--GUIModel/ACC/Material_ColorFactor_noAlpha.qml85
-rw-r--r--GUIModel/ACC/Stage.qml891
-rw-r--r--GUIModel/ACC/Transform_NextGen.qml59
-rw-r--r--GUIModel/CruisingRange/CruisingRange.qml206
-rw-r--r--GUIModel/FPSItem/FpsItem.qml97
-rw-r--r--GUIModel/FPSItem/spinner.pngbin0 -> 5222 bytes
-rw-r--r--GUIModel/GUIModel.qrc48
-rw-r--r--GUIModel/Header/Clock.qml135
-rw-r--r--GUIModel/Header/Header.qml77
-rw-r--r--GUIModel/Header/OutsideTemperature.qml101
-rw-r--r--GUIModel/Map/Map.qml128
-rw-r--r--GUIModel/Menu/Menu.qml115
-rw-r--r--GUIModel/Menu/MenuAdas.qml194
-rw-r--r--GUIModel/Menu/MenuAdasIconAdas.qml73
-rw-r--r--GUIModel/Menu/MenuAdasIconNormal.qml72
-rw-r--r--GUIModel/Menu/MenuAudio.qml108
-rw-r--r--GUIModel/Menu/MenuAudioPanel.qml339
-rw-r--r--GUIModel/Menu/MenuContents.qml304
-rw-r--r--GUIModel/Menu/MenuFrame.qml417
-rw-r--r--GUIModel/Menu/MenuFrameScrollTo0.qml126
-rw-r--r--GUIModel/Menu/MenuFrameScrollTo1.qml127
-rw-r--r--GUIModel/Menu/MenuFrameScrollTo2.qml127
-rw-r--r--GUIModel/Menu/MenuFrameScrollTo3.qml133
-rw-r--r--GUIModel/Menu/MenuFrameScrollTo4.qml131
-rw-r--r--GUIModel/Menu/MenuMain.qml246
-rw-r--r--GUIModel/Menu/MenuRadio.qml108
-rw-r--r--GUIModel/Menu/MenuRadioPanel.qml338
-rw-r--r--GUIModel/Menu/MenuShade.qml165
-rw-r--r--GUIModel/Meter/ChargeGuage.qml272
-rw-r--r--GUIModel/Meter/DigitalSpeed.qml302
-rw-r--r--GUIModel/Meter/Mask.qml145
-rw-r--r--GUIModel/Meter/Meter.qml169
-rw-r--r--GUIModel/Meter/Ready.qml138
-rw-r--r--GUIModel/Meter/Ring.qml142
-rw-r--r--GUIModel/Meter/Sideline.qml166
-rw-r--r--GUIModel/Meter/SpeedGuage.qml284
-rw-r--r--GUIModel/Meter/SpeedNeedle.qml293
-rw-r--r--GUIModel/Meter/Tachometer.qml142
-rw-r--r--GUIModel/ShiftPosition/ShiftPosition.qml249
-rw-r--r--GUIModel/Telltale/Telltale.qml380
-rw-r--r--GUIModel/TurnByTurn/TurnByTurn.qml652
-rw-r--r--GUIModel/main.qml388
45 files changed, 9954 insertions, 0 deletions
diff --git a/GUIModel/ACC/ACC_Animation.qml b/GUIModel/ACC/ACC_Animation.qml
new file mode 100644
index 0000000..ff543d1
--- /dev/null
+++ b/GUIModel/ACC/ACC_Animation.qml
@@ -0,0 +1,1099 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import Qt3D.Animation 2.14
+
+Item {
+ id:car_Anim
+
+ property int acc_line_pos : 0 //0:hide 1:far 2:mid 3:near
+ property int cur_line_pos : 0
+ property int acc_enable : 0 //0:OFF 1:ON (follow)
+ property int acc_icon : 0 //0:hide 1:icon 2:???
+ property int acc_value : 148 //0:hide 1~999:value
+ property int acc_value1 : acc_value%10
+ property int acc_value10 : (acc_value/10)%10
+ property int acc_value100 : (acc_value/100)%10
+ property int acc_car_pos : 0 //0:hide 1:far 2:mid 3:near
+ property int cur_car_pos : 0
+ property int received_tbt_id: stage.received_id
+ property int current_tbt_id
+
+ onAcc_line_posChanged: {
+ lineposchange()
+ }
+ onAcc_enableChanged: {
+ enablechange()
+ }
+ onAcc_car_posChanged: {
+ carposchange()
+ }
+ onReceived_tbt_idChanged: {
+ tbt_idchange()
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ if(rootItem.set_state == "set_default"){
+ fadeout_in_default.start()
+ }else if(rootItem.set_state == "set_middle"){
+ fadeout_in_mid.start()
+ }else if(rootItem.set_state == "set_near"){
+ fadeout_in_near.start()
+ }
+ cameraToAdasPos.start()
+
+ if(rootItem.car_state == "normal_default"){
+ rootItem.car_state = "adas_default"}
+ else if(rootItem.car_state == "normal_middle"){
+ rootItem.car_state = "adas_middle"}
+ else if(rootItem.car_state == "normal_near"){
+ rootItem.car_state = "adas_near"}
+
+ if(rootItem.arrow_state == "arrow_normal_default"){
+ rootItem.arrow_state = "arrow_adas_default"}
+ else if(rootItem.arrow_state == "arrow_normal_middle"){
+ rootItem.arrow_state = "arrow_adas_middle"}
+ else if(rootItem.arrow_state == "arrow_normal_near"){
+ rootItem.arrow_state = "arrow_adas_near"}
+ }
+
+ onTransAdasToMap:{
+ adasToMapAnimation_acc3d.start()
+
+ }
+
+ onTransMapToNormal:{
+ ddditemTonormalsize.start()
+ if(rootItem.set_state == "set_default"){
+ fadeout_in_default.start()
+ }else if(rootItem.set_state == "set_middle"){
+ fadeout_in_mid.start()
+ }else if(rootItem.set_state == "set_near"){
+ fadeout_in_near.start()
+ }
+ cameraTonormalPos.start()
+
+
+ if(rootItem.car_state == "adas_default"){
+ rootItem.car_state = "normal_default"}
+ else if(rootItem.car_state == "adas_middle"){
+ rootItem.car_state = "normal_middle"}
+ else if(rootItem.car_state == "adas_near"){
+ rootItem.car_state = "normal_near"}
+
+ if(rootItem.arrow_state == "arrow_adas_default"){
+ rootItem.arrow_state = "arrow_normal_default"}
+ else if(rootItem.arrow_state == "arrow_adas_middle"){
+ rootItem.arrow_state = "arrow_normal_middle"}
+ else if(rootItem.arrow_state == "arrow_adas_near"){
+ rootItem.arrow_state = "arrow_normal_near"}
+ }
+ }
+
+ function lineposchange(){
+ }
+
+ function enablechange(){
+ }
+
+ function carposchange(){
+ }
+
+ function tbt_idchange(){////////////////////
+ switch(received_tbt_id){
+ case 1:
+ tbt_arrow_anim_to_LF.start()
+ break;
+ case 2:
+ tbt_arrow_anim_to_L.start()
+ break;
+ case 3:
+ tbt_arrow_anim_to_RF.start()
+ break;
+ case 4:
+ tbt_arrow_anim_to_R.start()
+ break;
+ default:
+ break;
+ }
+ stage.current_id=stage.received_id
+ }
+ /*----------------------------------- arrow animation ------------------------------------*/
+ ParallelAnimation{
+ id: tbt_arrow_anim_to_LF
+ NumberAnimation {
+ target: stage.material_tbt_LF
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_L,stage.material_tbt_RF,stage.material_tbt_R]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_tbt_shadow_LF
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_shadow_L,stage.material_tbt_shadow_RF,stage.material_tbt_shadow_R]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_LF
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.52 : 0.5
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_L,stage.trans_tbt_RF,stage.trans_tbt_R]
+ properties: "default_py"
+ duration: 1000
+ to: 0.5
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_shadow_LF
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.2 : 0.1
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_shadow_L,stage.trans_tbt_RF,stage.trans_tbt_R]
+ properties: "default_py"
+ duration: 1000
+ to: 0.1
+ }
+ }
+ ParallelAnimation{
+ id: tbt_arrow_anim_to_L
+ NumberAnimation {
+ target: stage.material_tbt_L
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_LF,stage.material_tbt_RF,stage.material_tbt_R]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_tbt_shadow_L
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_shadow_LF,stage.material_tbt_shadow_RF,stage.material_tbt_shadow_R]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_L
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.52 : 0.5
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_LF,stage.trans_tbt_RF,stage.trans_tbt_R]
+ properties: "default_py"
+ duration: 1000
+ to: 0.5
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_shadow_L
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.2 : 0.1
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_shadow_LF,stage.trans_tbt_shadow_RF,stage.trans_tbt_shadow_R]
+ properties: "default_py"
+ duration: 1000
+ to: 0.1
+ }
+ }
+ ParallelAnimation{
+ id: tbt_arrow_anim_to_RF
+ NumberAnimation {
+ target: stage.material_tbt_RF
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_LF,stage.material_tbt_L,stage.material_tbt_R]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_tbt_shadow_RF
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_shadow_LF,stage.material_tbt_shadow_L,stage.material_tbt_shadow_R]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_RF
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.52 : 0.5
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_LF,stage.trans_tbt_L,stage.trans_tbt_R]
+ properties: "default_py"
+ duration: 1000
+ to: 0.5
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_shadow_RF
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.2 : 0.1
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_shadow_LF,stage.trans_tbt_shadow_L,stage.trans_tbt_shadow_R]
+ properties: "default_py"
+ duration: 1000
+ to: 0.1
+ }
+ }
+ ParallelAnimation{
+ id: tbt_arrow_anim_to_R
+ NumberAnimation {
+ target: stage.material_tbt_R
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_LF,stage.material_tbt_L,stage.material_tbt_RF]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_tbt_shadow_R
+ property: "u_alphaFactor"
+ duration: 1000
+ to: rootItem.mode == 1 ? 1 : 0
+ }
+ NumberAnimation {
+ targets: [stage.material_tbt_shadow_LF,stage.material_tbt_shadow_L,stage.material_tbt_shadow_RF]
+ properties: "u_alphaFactor"
+ duration: 1000
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_R
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.52 : 0.5
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_LF,stage.trans_tbt_L,stage.trans_tbt_RF]
+ properties: "default_py"
+ duration: 1000
+ to: 0.5
+ }
+ NumberAnimation {
+ target: stage.trans_tbt_shadow_R
+ property: "default_py"
+ duration: 1000
+ to: rootItem.mode == 1 ? 0.2 : 0.1
+ }
+ NumberAnimation {
+ targets: [stage.trans_tbt_shadow_LF,stage.trans_tbt_shadow_L,stage.trans_tbt_shadow_RF]
+ properties: "default_py"
+ duration: 1000
+ to: 0.1
+ }
+ }
+ SequentialAnimation{
+ id:fadeout_in_default
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation { target: stage.material_distance_set; property: "u_alphaFactor"; duration: 330; from:0.2; to: 0 }
+ NumberAnimation { target: stage.material_distance_arrow; property: "u_alphaFactor"; duration: 330; from:1; to: 0 }
+ NumberAnimation { target: stage.material_distance_base; property: "u_alphaFactor"; duration: 330; from:1; to: 0 }
+ NumberAnimation { targets: [stage.material_tbt_LF, stage.material_tbt_L, stage.material_tbt_RF, stage.material_tbt_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_LF, stage.trans_tbt_L, stage.trans_tbt_RF, stage.trans_tbt_R];property: "default_py";duration: 0;to: 0.0 }
+ NumberAnimation { targets: [stage.material_tbt_shadow_LF, stage.material_tbt_shadow_L, stage.material_tbt_shadow_RF, stage.material_tbt_shadow_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_shadow_LF, stage.trans_tbt_shadow_L, stage.trans_tbt_shadow_RF, stage.trans_tbt_shadow_R];property: "default_py";duration: 0;to: 0.0 }
+ }
+ PauseAnimation {duration: 957}
+ ParallelAnimation{
+ NumberAnimation { target: stage.material_distance_set; property: "u_alphaFactor"; duration: 330; from:0; to: 0.2 }
+ NumberAnimation { target: stage.material_distance_arrow; property: "u_alphaFactor"; duration: 330; from:0; to: 1 }
+ NumberAnimation { target: stage.material_distance_base; property: "u_alphaFactor"; duration: 330; from:0; to: 1 }
+ }
+ }
+ SequentialAnimation{
+ id:fadeout_in_mid
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation { target: stage.material_distance_set_mid; property: "u_alphaFactor"; duration: 330; from:0.2; to: 0 }
+ NumberAnimation { target: stage.material_distance_arrow; property: "u_alphaFactor"; duration: 330; from:1; to: 0 }
+ NumberAnimation { target: stage.material_distance_base; property: "u_alphaFactor"; duration: 330; from:1; to: 0 }
+ NumberAnimation { targets: [stage.material_tbt_LF, stage.material_tbt_L, stage.material_tbt_RF, stage.material_tbt_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_LF, stage.trans_tbt_L, stage.trans_tbt_RF, stage.trans_tbt_R];property: "default_py";duration: 0;to: 0.0 }
+ NumberAnimation { targets: [stage.material_tbt_shadow_LF, stage.material_tbt_shadow_L, stage.material_tbt_shadow_RF, stage.material_tbt_shadow_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_shadow_LF, stage.trans_tbt_shadow_L, stage.trans_tbt_shadow_RF, stage.trans_tbt_shadow_R];property: "default_py";duration: 0;to: 0.0 }
+ }
+ PauseAnimation {duration: 957}
+ ParallelAnimation{
+ NumberAnimation { target: stage.material_distance_set_mid; property: "u_alphaFactor"; duration: 330; from:0; to: 0.2 }
+ NumberAnimation { target: stage.material_distance_arrow; property: "u_alphaFactor"; duration: 330; from:0; to: 1 }
+ NumberAnimation { target: stage.material_distance_base; property: "u_alphaFactor"; duration: 330; from:0; to: 1 }
+ }
+ }
+ SequentialAnimation{
+ id:fadeout_in_near
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation { target: stage.material_distance_set_near; property: "u_alphaFactor"; duration: 330; from:0.2; to: 0 }
+ NumberAnimation { target: stage.material_distance_arrow; property: "u_alphaFactor"; duration: 330; from:1; to: 0 }
+ NumberAnimation { target: stage.material_distance_base; property: "u_alphaFactor"; duration: 330; from:1; to: 0 }
+ NumberAnimation { targets: [stage.material_tbt_LF, stage.material_tbt_L, stage.material_tbt_RF, stage.material_tbt_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_LF, stage.trans_tbt_L, stage.trans_tbt_RF, stage.trans_tbt_R];property: "default_py";duration: 0;to: 0.0 }
+ NumberAnimation { targets: [stage.material_tbt_shadow_LF, stage.material_tbt_shadow_L, stage.material_tbt_shadow_RF, stage.material_tbt_shadow_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_shadow_LF, stage.trans_tbt_shadow_L, stage.trans_tbt_shadow_RF, stage.trans_tbt_shadow_R];property: "default_py";duration: 0;to: 0.0 }
+ }
+ PauseAnimation {duration: 957}
+ ParallelAnimation{
+ NumberAnimation { target: stage.material_distance_set_near; property: "u_alphaFactor"; duration: 330; from:0; to: 0.2 }
+ NumberAnimation { target: stage.material_distance_arrow; property: "u_alphaFactor"; duration: 330; from:0; to: 1 }
+ NumberAnimation { target: stage.material_distance_base; property: "u_alphaFactor"; duration: 330; from:0; to: 1 }
+ }
+ }
+
+
+ SequentialAnimation{
+ id: cameraToAdasPos
+ onStarted: rootItem.focus=false
+ property int duration_camera: 891//957
+ property int duration_all: 330//363
+ property var easing_camera: Easing.InOutQuart
+ property var easing_all: Easing.InOutQuart
+ PauseAnimation {duration: 330}
+ ParallelAnimation{
+ NumberAnimation { target: ddditem; property: "scale"; to: 1.0; duration: cameraToAdasPos.duration_camera ; easing.type: Easing.OutBack}//cameraToAdasPos.easing_camera }
+ NumberAnimation { target: ddditem; property: "x"; to: 512; duration: cameraToAdasPos.duration_camera ; easing.type: Easing.InOutQuad}//cameraToAdasPos.easing_camera }
+ NumberAnimation { target: ddditem; property: "y"; to: -35; duration: cameraToAdasPos.duration_camera ; easing.type: Easing.OutBack}//cameraToAdasPos.easing_camera }
+ NumberAnimation { target: stage.trans_camera; property: "posX"; to: -10; duration: cameraToAdasPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.InOutCubic }
+ NumberAnimation { target: stage.trans_camera; property: "posY"; to:7; duration: cameraToAdasPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutExpo }
+ NumberAnimation { target: stage.trans_camera; property: "posZ"; to: 8; duration: cameraToAdasPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutExpo }
+ NumberAnimation { target: stage.trans_camera; property: "rotX"; to: -24.2039; duration: cameraToAdasPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutBack }
+ NumberAnimation { target: stage.trans_camera; property: "rotY"; to: -46.4688; duration: cameraToAdasPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.InOutQuart }
+ NumberAnimation { target: stage.trans_camera; property: "rotZ"; to: -0.999999; duration: cameraToAdasPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutExpo }
+ NumberAnimation { target: stage.trans_distance_arrow; property: "scale_x"; to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_arrow; property: "scale_z"; to: 0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_base; property: "posi_z"; to: 6.7*0.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_base; property: "scale_x"; to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_base; property: "scale_z"; to: 0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set; property: "posi_z"; to: 6.7*0.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set; property: "scale_x"; to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set; property: "scale_z"; to: 0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_mid ;property: "posi_z"; to: 6.7*0.4+4*0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_mid ;property: "scale_x";to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_mid ;property: "scale_z";to: 0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_near;property: "posi_z"; to: 6.7*0.4+8*0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_near;property: "scale_x";to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_near;property: "scale_z";to: 0.75; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_road; property: "posi_z"; to: 6*0.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_road; property: "scale_x"; to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_road; property: "scale_z"; to: 0.6; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_sensorline; property: "posi_z"; to: 6*0.25; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_sensorline; property: "scale_x"; to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_sensorline; property: "scale_z"; to: 0.6; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_road_light; property: "posi_z"; to: 6*0.6; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_road_light; property: "scale_x"; to: 1.4; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ NumberAnimation { target: stage.trans_road_light; property: "scale_z"; to: 0.6; duration: cameraToAdasPos.duration_all; easing.type: cameraToAdasPos.easing_all }
+ }
+ ParallelAnimation{
+ NumberAnimation {
+ target: {
+ switch(received_tbt_id){
+ case 1:
+ stage.material_tbt_LF
+ break;
+ case 2:
+ stage.material_tbt_L
+ break;
+ case 3:
+ stage.material_tbt_RF
+ break;
+ case 4:
+ stage.material_tbt_R
+ break;
+ default:
+ stage.material_tbt_LF
+ break;
+ }
+ }
+ property: "u_alphaFactor"
+ duration: 330
+ from:0
+ to: 1
+ }
+ NumberAnimation {
+ target: {
+ switch(received_tbt_id){
+ case 1:
+ stage.material_tbt_shadow_LF
+ break;
+ case 2:
+ stage.material_tbt_shadow_L
+ break;
+ case 3:
+ stage.material_tbt_shadow_RF
+ break;
+ case 4:
+ stage.material_tbt_shadow_R
+ break;
+ default:
+ stage.material_tbt_shadow_LF
+ break;
+ }
+ }
+ property: "u_alphaFactor"
+ duration: 330
+ from:0
+ to: 1
+ }
+ NumberAnimation {
+ target: {
+ switch(received_tbt_id){
+ case 1:
+ stage.trans_tbt_LF
+ break;
+ case 2:
+ stage.trans_tbt_L
+ break;
+ case 3:
+ stage.trans_tbt_RF
+ break;
+ case 4:
+ stage.trans_tbt_R
+ break;
+ default:
+ stage.trans_tbt_LF
+ break;
+ }
+ }
+ property: "default_py"
+ duration: 330
+ from: 0
+ to: 0.52
+ }
+ NumberAnimation {
+ target: {
+ switch(received_tbt_id){
+ case 1:
+ stage.trans_tbt_shadow_LF
+ break;
+ case 2:
+ stage.trans_tbt_shadow_L
+ break;
+ case 3:
+ stage.trans_tbt_shadow_RF
+ break;
+ case 4:
+ stage.trans_tbt_shadow_R
+ break;
+ default:
+ stage.trans_tbt_shadow_LF
+ break;
+ }
+ }
+ property: "default_py"
+ duration: 330
+ from: 0
+ to: 0.2
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id: cameraTonormalPos
+ onStarted: rootItem.focus=false
+ property int duration_camera: 891//957
+ property int duration_all: 330//363
+ property var easing_camera: Easing.InOutQuart
+ property var easing_all: Easing.InOutQuart
+ PauseAnimation {duration: 330}
+ ParallelAnimation{
+ NumberAnimation { target: ddditem; property: "scale"; to: 0.6; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//cameraTonormalPos.easing_camera }
+ NumberAnimation { target: ddditem; property: "x"; to: 548; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//cameraTonormalPos.easing_camera }
+ NumberAnimation { target: ddditem; property: "y"; to: -23; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//cameraTonormalPos.easing_camera }
+ NumberAnimation { target: stage.trans_camera; property: "posX"; to: 0.0; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.InOutCubic }
+ NumberAnimation { target: stage.trans_camera; property: "posY"; to:2.6; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutExpo }
+ NumberAnimation { target: stage.trans_camera; property: "posZ"; to: 2.35; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutExpo }
+ NumberAnimation { target: stage.trans_camera; property: "rotX"; to:-8.29241; duration: cameraTonormalPos.duration_camera*1.2; easing.type: Easing.InOutQuad}//Easing.InBack }
+ NumberAnimation { target: stage.trans_camera; property: "rotY"; to: 0.0; duration: cameraTonormalPos.duration_camera*1.2; easing.type: Easing.InOutQuad}//Easing.InOutQuart }
+ NumberAnimation { target: stage.trans_camera; property: "rotZ"; to: 0.0; duration: cameraTonormalPos.duration_camera; easing.type: Easing.InOutQuad}//Easing.OutExpo }
+ NumberAnimation { target: stage.trans_distance_arrow; property: "scale_x"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_arrow; property: "scale_z"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_base; property: "posi_z"; to: 0.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_base; property: "scale_x"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_base; property: "scale_z"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set; property: "posi_z"; to: 0.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set; property: "scale_x"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set; property: "scale_z"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_mid ;property: "posi_z"; to: 0.0+4; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_mid ;property: "scale_x";to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_mid ;property: "scale_z";to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_near;property: "posi_z"; to: 0.0+8; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_near;property: "scale_x";to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_distance_set_near;property: "scale_z";to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_road; property: "posi_z"; to: 0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_road; property: "scale_x"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_road; property: "scale_z"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_sensorline; property: "posi_z"; to: 0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_sensorline; property: "scale_x"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_sensorline; property: "scale_z"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_road_light; property: "posi_z"; to: 0.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_road_light; property: "scale_x"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { target: stage.trans_road_light; property: "scale_z"; to: 1.0; duration: cameraTonormalPos.duration_all; easing.type: cameraTonormalPos.easing_all }
+ NumberAnimation { targets: [stage.material_tbt_LF, stage.material_tbt_L, stage.material_tbt_RF, stage.material_tbt_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_LF, stage.trans_tbt_L, stage.trans_tbt_RF, stage.trans_tbt_R];property: "default_py";duration: 0;to: 0.0 }
+ NumberAnimation { targets: [stage.material_tbt_shadow_LF, stage.material_tbt_shadow_L, stage.material_tbt_shadow_RF, stage.material_tbt_shadow_R];property: "u_alphaFactor";duration: 330;to: 0 }
+ NumberAnimation { targets: [stage.trans_tbt_shadow_LF, stage.trans_tbt_shadow_L, stage.trans_tbt_shadow_RF, stage.trans_tbt_shadow_R];property: "default_py";duration: 0;to: 0.0 }
+ }
+ }
+
+ SequentialAnimation{
+ id: adasToMapAnimation_acc3d
+ onStarted: rootItem.focus=false
+ NumberAnimation {
+ target: ddditem
+ property: "opacity"
+ duration: 330
+ from:1
+ to:0
+ }
+
+ PropertyAnimation{
+ target: ddditem
+ property: "visible"
+ duration:0
+ to:false
+ }
+ }
+
+ SequentialAnimation{
+ id: ddditemTonormalsize
+ onStarted: rootItem.focus=false
+ PauseAnimation {duration: 330}
+ PropertyAnimation{
+ target: ddditem
+ property: "visible"
+ duration:0
+ to:true
+ }
+
+ NumberAnimation {
+ target: ddditem
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ }
+ Item{
+ id: distance_set_3d_Anim
+ states:[
+ State{
+ name:"set_default"
+ when: rootItem.set_state === "set_default"
+ },
+ State{
+ name:"set_middle"
+ when: rootItem.set_state === "set_middle"
+ },
+ State{
+ name:"set_near"
+ when: rootItem.set_state === "set_near"
+ }
+ ]
+
+ transitions: [
+ Transition {
+ SequentialAnimation{
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation {
+ target: stage.material_distance_set_mid
+ property: "u_alphaFactor"
+ duration: 0
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_distance_set_near
+ property: "u_alphaFactor"
+ duration: 0
+ to: 0
+ }
+ }
+ PauseAnimation { duration: 300}
+ NumberAnimation{
+ target: stage.material_distance_set
+ property: "u_alphaFactor"
+ duration: 50
+ to: 0.2
+ }
+ }
+ from: "*"
+ to: "set_default"
+ },
+ Transition {
+ SequentialAnimation{
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation{
+ target: stage.material_distance_set
+ property: "u_alphaFactor"
+ duration: 0
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_distance_set_near
+ property: "u_alphaFactor"
+ duration: 0
+ to: 0
+ }
+ }
+ PauseAnimation { duration: 300}
+ NumberAnimation {
+ target: stage.material_distance_set_mid
+ property: "u_alphaFactor"
+ duration: 50
+ to: 0.2
+ }
+ }
+ from: "*"
+ to: "set_middle"
+ },
+ Transition {
+ SequentialAnimation{
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation{
+ target: stage.material_distance_set
+ property: "u_alphaFactor"
+ duration: 0
+ to: 0
+ }
+ NumberAnimation {
+ target: stage.material_distance_set_mid
+ property: "u_alphaFactor"
+ duration: 0
+ to: 0
+ }
+ }
+ PauseAnimation { duration: 300}
+ NumberAnimation {
+ target: stage.material_distance_set_near
+ property: "u_alphaFactor"
+ duration: 50
+ to: 0.2
+ }
+ }
+ from: "*"
+ to: "set_near"
+ }
+ ]
+ }
+ Item{
+ id: arrow_3d_Anim
+
+ states:[
+ State{
+ name:"arrow_normal_default"
+ when: rootItem.arrow_state == "arrow_normal_default"
+ },
+ State{
+ name:"arrow_normal_middle"
+ when: rootItem.arrow_state == "arrow_normal_middle"
+ },
+ State{
+ name:"arrow_normal_near"
+ when: rootItem.arrow_state == "arrow_normal_near"
+ },
+ State{
+ name:"arrow_adas_default"
+ when: rootItem.arrow_state == "arrow_adas_default"
+ },
+ State{
+ name:"arrow_adas_middle"
+ when: rootItem.arrow_state == "arrow_adas_middle"
+ },
+ State{
+ name:"arrow_adas_near"
+ when: rootItem.arrow_state == "arrow_adas_near"
+ }
+ ]
+
+ transitions: [
+ Transition {
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_distance_arrow.default_pz
+ }
+ from: "*"
+ to: "arrow_normal_default"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_distance_arrow.default_pz + 4
+ }
+ from: "*"
+ to: "arrow_normal_middle"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_distance_arrow.default_pz + 7.99
+ }
+ from: "*"
+ to: "arrow_normal_near"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ duration: 300
+ to: 6.7*0.4
+ }
+ from: "*"
+ to: "arrow_adas_default"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ duration: 300
+ to: 6.7*0.4+4*0.75
+ }
+ from: "*"
+ to: "arrow_adas_middle"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ duration: 300
+ to: 6.7*0.4+8 * 0.75
+ }
+ from: "*"
+ to: "arrow_adas_near"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: 6.7 * 0.75
+ }
+ }
+ from: "normal_default"
+ to: "adas_default"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: 6.7+4 * 0.75
+ }
+ }
+ from: "normal_middle"
+ to: "adas_middle"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: 6.7+8 * 0.75
+ }
+ }
+ from: "normal_near"
+ to: "adas_near"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: stage.trans_distance_arrow.default_pz
+ }
+ }
+ from: "adas_default"
+ to: "normal_default"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: stage.trans_distance_arrow.default_pz + 4
+ }
+ }
+ from: "adas_middle"
+ to: "normal_middle"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_distance_arrow
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: stage.trans_distance_arrow.default_pz + 7.99
+ }
+ }
+ from: "adas_near"
+ to: "normal_near"
+ }
+ ]
+
+ }
+
+ Item{
+ id: car_3d_Anim
+
+ states:[
+ State{
+ name:"normal_default"
+ when: rootItem.car_state == "normal_default"
+ },
+ State{
+ name:"normal_middle"
+ when: rootItem.car_state == "normal_middle"
+ },
+ State{
+ name:"normal_near"
+ when: rootItem.car_state == "normal_near"
+ },
+ State{
+ name:"adas_default"
+ when: rootItem.car_state == "adas_default"
+ },
+ State{
+ name:"adas_middle"
+ when: rootItem.car_state == "adas_middle"
+ },
+ State{
+ name:"adas_near"
+ when: rootItem.car_state == "adas_near"
+ }
+ ]
+
+ transitions: [
+ Transition {
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_other_car.default_pz
+ }
+ from: "*"
+ to: "normal_default"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_other_car.default_pz + 4
+ }
+ from: "*"
+ to: "normal_middle"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_other_car.default_pz + 8
+ }
+ from: "*"
+ to: "normal_near"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_other_car.default_pz + 7.35
+ }
+ from: "*"
+ to: "adas_default"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_other_car.default_pz + 7.35 + 4*0.75
+ }
+ from: "*"
+ to: "adas_middle"
+ },
+ Transition {
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ duration: 300
+ to: stage.trans_other_car.default_pz + 7.35 + 8*0.75
+ }
+ from: "*"
+ to: "adas_near"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: stage.trans_other_car.default_pz + 7.35
+ }
+ }
+ from: "normal_default"
+ to: "adas_default"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: stage.trans_other_car.default_pz + 7.35 + 4*0.75
+ }
+ }
+ from: "normal_middle"
+ to: "adas_middle"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ easing.type: Easing.OutCubic
+ duration: 957
+ to: stage.trans_other_car.default_pz + 7.35 + 8*0.75
+ }
+ }
+ from: "normal_near"
+ to: "adas_near"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ easing.type: Easing.InCubic
+ duration: 957
+ to: stage.trans_other_car.default_pz
+ }
+ }
+ from: "adas_default"
+ to: "normal_default"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ easing.type: Easing.InCubic
+ duration: 957
+ to: stage.trans_other_car.default_pz + 4
+ }
+ }
+ from: "adas_middle"
+ to: "normal_middle"
+ },
+ Transition {
+ SequentialAnimation{
+ PauseAnimation { duration: 330}
+ NumberAnimation{
+ target: stage.trans_other_car
+ properties: "posi_z"
+ easing.type: Easing.InCubic
+ duration: 957
+ to: stage.trans_other_car.default_pz + 8
+ }
+ }
+ from: "adas_near"
+ to: "normal_near"
+ }
+ ]
+ }
+}
diff --git a/GUIModel/ACC/Material_ColorFactor.qml b/GUIModel/ACC/Material_ColorFactor.qml
new file mode 100644
index 0000000..0081a73
--- /dev/null
+++ b/GUIModel/ACC/Material_ColorFactor.qml
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import Qt3D.Core 2.14
+import Qt3D.Render 2.14
+
+Material{
+ id: root
+ property color u_rgbFactor : Qt.rgba(1,1,1,1)
+ property real u_alphaFactor : 1.0
+ property url u_Texture
+
+ parameters: [
+ Parameter{name:"u_rgbFactor" ; value: Qt.vector3d(root.u_rgbFactor.r,root.u_rgbFactor.g,root.u_rgbFactor.b) },
+ Parameter{name:"u_alphaFactor" ; value: root.u_alphaFactor },
+ Parameter{
+ name:"u_Texture";
+ value: Texture2D{
+ id:shaderTexture
+ minificationFilter: Texture.LinearMipMapLinear
+ magnificationFilter: Texture.Linear
+ generateMipMaps: true
+ maximumAnisotropy: 4.0
+ TextureImage{
+ source: u_Texture
+ }
+ }
+ }
+ ]
+
+ effect: Effect{
+
+ techniques: [
+ Technique {
+ graphicsApiFilter {
+ api: GraphicsApiFilter.OpenGLES
+ profile: GraphicsApiFilter.NoProfile
+ majorVersion: 2
+ minorVersion: 0
+ }
+
+ filterKeys: [ FilterKey { name: "renderingStyle"; value: "forward" } ]
+
+ renderPasses: [
+ RenderPass {
+ shaderProgram: ShaderProgram {
+ vertexShaderCode : loadSource("qrc:/Shaders/vert/RefTrans_Qt.vert")
+ fragmentShaderCode : loadSource("qrc:/Shaders/frag/RefTexRefColorFactor_Qt.frag")
+ }
+ renderStates: [
+
+ CullFace{mode:CullFace.Back},
+ ScissorTest{
+ left: 300;
+ bottom: 150;
+ width:winl.width-ddditem.x-250;
+ height: winl.height -100
+ },
+ BlendEquationArguments{
+ sourceRgb: BlendEquationArguments.SourceAlpha
+ destinationRgb: BlendEquationArguments.OneMinusSourceAlpha
+ sourceAlpha: BlendEquationArguments.OneMinusDestinationAlpha
+ destinationAlpha: BlendEquationArguments.One
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/GUIModel/ACC/Material_ColorFactor_Tbt.qml b/GUIModel/ACC/Material_ColorFactor_Tbt.qml
new file mode 100644
index 0000000..9b3786e
--- /dev/null
+++ b/GUIModel/ACC/Material_ColorFactor_Tbt.qml
@@ -0,0 +1,92 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import Qt3D.Core 2.14
+import Qt3D.Render 2.14
+
+Material{
+ id: root
+
+ property color u_rgbFactor : Qt.rgba(1,1,1,1)
+ property real u_alphaFactor : 1.0
+ property url u_Texture
+
+ parameters: [
+ Parameter{name:"u_rgbFactor" ; value: Qt.vector3d(root.u_rgbFactor.r,root.u_rgbFactor.g,root.u_rgbFactor.b) },
+ Parameter{name:"u_alphaFactor" ; value: root.u_alphaFactor },
+ Parameter{
+ name:"u_Texture";
+ value: Texture2D{
+ id:shaderTexture
+ minificationFilter: Texture.LinearMipMapLinear
+ magnificationFilter: Texture.Linear
+ generateMipMaps: true
+ maximumAnisotropy: 4.0
+ TextureImage{
+ source: u_Texture
+ }
+ }
+ }
+ ]
+
+ effect: Effect{
+
+ techniques: [
+ Technique {
+ graphicsApiFilter {
+ api: GraphicsApiFilter.OpenGLES
+ profile: GraphicsApiFilter.NoProfile
+ majorVersion: 2
+ minorVersion: 0
+ }
+
+ filterKeys: [ FilterKey { name: "renderingStyle"; value: "forward" } ]
+
+ renderPasses: [
+ RenderPass {
+ shaderProgram: ShaderProgram {
+ vertexShaderCode : loadSource("qrc:/Shaders/vert/RefTrans_Qt.vert")
+ fragmentShaderCode : loadSource("qrc:/Shaders/frag/RefTexRefColorFactor_Qt.frag")
+ }
+ renderStates: [
+
+ CullFace{mode:CullFace.Back},
+ ScissorTest{
+ left: 500;
+ bottom: 450;
+ width:500;
+ height: 500
+ },
+ BlendEquationArguments{
+ sourceRgb: BlendEquationArguments.SourceAlpha
+ destinationRgb: BlendEquationArguments.OneMinusSourceAlpha
+ sourceAlpha: BlendEquationArguments.OneMinusDestinationAlpha
+ destinationAlpha: BlendEquationArguments.One
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/GUIModel/ACC/Material_ColorFactor_noAlpha.qml b/GUIModel/ACC/Material_ColorFactor_noAlpha.qml
new file mode 100644
index 0000000..d49e42a
--- /dev/null
+++ b/GUIModel/ACC/Material_ColorFactor_noAlpha.qml
@@ -0,0 +1,85 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import Qt3D.Core 2.14
+import Qt3D.Render 2.14
+
+Material{
+ id: root
+ property color u_rgbFactor : Qt.rgba(1,1,1,1)
+ property real u_alphaFactor : 1.0
+ property url u_Texture
+
+ parameters: [
+ Parameter{name:"u_rgbFactor" ; value: Qt.vector3d(root.u_rgbFactor.r,root.u_rgbFactor.g,root.u_rgbFactor.b) },
+ Parameter{name:"u_alphaFactor" ; value: root.u_alphaFactor },
+ Parameter{
+ name:"u_Texture";
+ value: Texture2D{
+ id:shaderTexture
+ minificationFilter: Texture.LinearMipMapLinear
+ magnificationFilter: Texture.Linear
+ generateMipMaps: true
+ maximumAnisotropy: 4.0
+ TextureImage{
+ source: u_Texture
+ }
+ }
+ }
+ ]
+
+ effect: Effect{
+
+ techniques: [
+ Technique {
+ graphicsApiFilter {
+ api: GraphicsApiFilter.OpenGLES
+ profile: GraphicsApiFilter.NoProfile
+ majorVersion: 2
+ minorVersion: 0
+ }
+
+ filterKeys: [ FilterKey { name: "renderingStyle"; value: "forward" } ]
+
+ renderPasses: [
+ RenderPass {
+ shaderProgram: ShaderProgram {
+ vertexShaderCode : loadSource("qrc:/Shaders/vert/RefTrans_Qt.vert")
+ fragmentShaderCode : loadSource("qrc:/Shaders/frag/RefTexRefColorFactor_Qt.frag")
+ }
+ renderStates: [
+
+ CullFace{mode:CullFace.Back},
+ ScissorTest{
+ left: 200;
+ bottom: 250;
+ width:winl.width-ddditem.x-100;
+ height: winl.height-100
+ }
+ ]
+ }
+ ]
+ }
+ ]
+ }
+}
diff --git a/GUIModel/ACC/Stage.qml b/GUIModel/ACC/Stage.qml
new file mode 100644
index 0000000..c8fe6c6
--- /dev/null
+++ b/GUIModel/ACC/Stage.qml
@@ -0,0 +1,891 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14 as Quick
+import Qt3D.Core 2.14
+import Qt3D.Input 2.14
+import Qt3D.Render 2.14
+import Qt3D.Extras 2.14
+import Qt3D.Animation 2.14
+
+Entity {
+
+ id: dddroot
+ property alias material_sensorline: material_sensorline
+ property alias material_distance_base: material_distance_base
+ property alias material_distance_arrow: material_distance_arrow
+ property alias material_distance_set: material_distance_set
+ property alias material_distance_set_mid: material_distance_set_mid
+ property alias material_distance_set_near: material_distance_set_near
+
+
+ property alias trans_camera: trans_camera
+ property alias trans_other_car: trans_other_car
+ property alias trans_car: trans_car
+ property alias trans_road: trans_road
+ property alias trans_road_light: trans_road_light
+ property alias trans_sensorline: trans_sensorline
+ property alias trans_distance_base: trans_distance_base
+ property alias trans_distance_arrow: trans_distance_arrow
+ property alias trans_distance_set: trans_distance_set
+ property alias trans_distance_set_mid: trans_distance_set_mid
+ property alias trans_distance_set_near: trans_distance_set_near
+
+
+
+ property int current_id: 0
+ property int received_id: 0
+
+ property alias material_tbt_LF: material_tbt_LF
+ property alias material_tbt_L: material_tbt_L
+ property alias material_tbt_RF: material_tbt_RF
+ property alias material_tbt_R: material_tbt_R
+ property alias trans_tbt_LF: trans_tbt_LF
+ property alias trans_tbt_L: trans_tbt_L
+ property alias trans_tbt_RF: trans_tbt_RF
+ property alias trans_tbt_R: trans_tbt_R
+
+ property alias material_tbt_shadow_LF: material_tbt_shadow_LF
+ property alias material_tbt_shadow_L: material_tbt_shadow_L
+ property alias material_tbt_shadow_RF: material_tbt_shadow_RF
+ property alias material_tbt_shadow_R: material_tbt_shadow_R
+ property alias trans_tbt_shadow_LF: trans_tbt_shadow_LF
+ property alias trans_tbt_shadow_L: trans_tbt_shadow_L
+ property alias trans_tbt_shadow_RF: trans_tbt_shadow_RF
+ property alias trans_tbt_shadow_R: trans_tbt_shadow_R
+
+ Entity {
+ components: [
+ trans_camera,
+ camera
+ ]
+ Camera {
+ id: camera
+ projectionType: CameraLens.PerspectiveProjection
+ fieldOfView: 44.09591363
+ aspectRatio: 16 / 9
+ nearPlane: 7
+ farPlane : 30
+ upVector: Qt.vector3d( 0.0, 1.0, 0.0 )
+ position: trans_camera.translation
+ }
+
+ Transform{
+ id: trans_camera
+ property real posX: 0.0
+ property real posY: 2.6
+ property real posZ: 2.35
+
+ property real rotX: -8.29241
+ property real rotY: 0.0
+ property real rotZ: 0.0
+
+ translation:Qt.vector3d(posX, posY, posZ)
+
+ rotationX:rotX
+ rotationY:rotY
+ rotationZ:rotZ
+
+ scale3D:Qt.vector3d(0.01, 0.01, 0.01)
+ }
+ }
+
+ components: [
+ RenderSettings {
+ activeFrameGraph: ForwardRenderer {
+ clearColor: "transparent"
+ camera: camera
+ frustumCulling: true
+ }
+ renderPolicy: RenderSettings.OnDemand
+ }
+ ]
+
+ Entity {
+ id : other_car
+
+ components: [
+ object_other_car,
+ trans_other_car,
+ material_other_car
+ ]
+
+ Mesh {
+ id: object_other_car
+ source: "qrc:/3DModelData/car.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_other_car
+ default_px: 0.0
+ default_py: 0.0
+ default_pz: -21
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_noAlpha{
+ id: material_other_car
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/uvmap_gray.jpg"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+
+ Entity {
+ id: mycar
+
+ components: [
+ object_car,
+ trans_car,
+ material_car
+ ]
+
+ Mesh {
+ id: object_car
+ source: "qrc:/3DModelData/car.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_car
+
+ default_px: 0.0
+ default_py: 0.0
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_noAlpha{
+ id: material_car
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/uvmap.jpg"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : road
+
+ components: [
+ object_road,
+ trans_road,
+ material_road
+ ]
+
+ Mesh {
+ id: object_road
+ source: "qrc:/3DModelData/road.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_road
+
+ default_px: 0.0
+ default_py: 0.0
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_noAlpha{
+ id: material_road
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/road.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+
+ }
+ }
+
+ Entity {
+ id : road_light
+
+ components: [
+ object_road_light,
+ trans_road_light,
+ material_road_light
+ ]
+
+ Mesh {
+ id: object_road_light
+ source: "qrc:/3DModelData/road_light.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_road_light
+
+ default_px: 0.0
+ default_py: 0.0
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_road_light
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/road_light.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : sensorline
+
+ components: [
+ object_sensorline,
+ trans_sensorline,
+ material_sensorline
+ ]
+
+ Mesh {
+ id: object_sensorline
+ source: "qrc:/3DModelData/sensor_line.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_sensorline
+
+ default_px: 0.0
+ default_py: 0.01
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_sensorline
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/sensor_line.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_base
+
+ components: [
+ object_distance_base,
+ trans_distance_base,
+ material_distance_base
+ ]
+
+ Mesh {
+ id: object_distance_base
+ source: "qrc:/3DModelData/distance_base.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_distance_base
+
+ default_px: 0.0
+ default_py: 0.03
+ default_pz: 0.0
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_distance_base
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/distance_base.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_arrow
+
+ components: [
+ object_distance_arrow,
+ trans_distance_arrow,
+ material_distance_arrow,
+ ]
+
+ Mesh {
+ id: object_distance_arrow
+ source: "qrc:/3DModelData/distance_arrow.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_distance_arrow
+
+ default_px: 0.0
+ default_py: 0.035
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_distance_arrow
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 1.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/distance_arrow.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_set
+
+ components: [
+ object_distance_set,
+ trans_distance_set,
+ material_distance_set
+ ]
+
+ Mesh {
+ id: object_distance_set
+ source: "qrc:/3DModelData/distance_set.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_distance_set
+
+ default_px: 0.0
+ default_py: 0.038
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_distance_set
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/distance_set.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_set_mid
+
+ components: [
+ object_distance_set_mid,
+ trans_distance_set_mid,
+ material_distance_set_mid,
+ ]
+
+ Mesh {
+ id: object_distance_set_mid
+ source: "qrc:/3DModelData/distance_set.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_distance_set_mid
+
+ default_px: 0.0
+ default_py: 0.043
+ default_pz: 4.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_distance_set_mid
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/distance_set.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_set_near
+
+ components: [
+ object_distance_set_near,
+ trans_distance_set_near,
+ material_distance_set_near
+ ]
+
+ Mesh {
+ id: object_distance_set_near
+ source: "qrc:/3DModelData/distance_set.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_distance_set_near
+
+ default_px: 0.0
+ default_py: 0.048
+ default_pz: 8.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor{
+ id: material_distance_set_near
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0.0
+
+ property url u_texture_name : "qrc:/3DModelTexture/distance_set.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+
+ Entity {
+ id : distance_tbt_shadow_LF
+ property int current_id: parent.current_id
+ property real material_alpha: 0.0
+ components: [object_tbt_shadow_LF,trans_tbt_shadow_LF,material_tbt_shadow_LF]
+
+ Mesh {
+ id: object_tbt_shadow_LF
+ source: "qrc:/3DModelData/tbt_shadow.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_shadow_LF
+
+ default_px: -1.0
+ default_py: 0.1
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_Tbt{
+ id: material_tbt_shadow_LF
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_shadow_LF.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+ Entity {
+ id : distance_tbt_shadow_L
+ property int current_id: parent.current_id
+ property real material_alpha: 0.0
+ components: [object_tbt_shadow_L,trans_tbt_shadow_L,material_tbt_shadow_L]
+
+ Mesh {
+ id: object_tbt_shadow_L
+ source: "qrc:/3DModelData/tbt_shadow.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_shadow_L
+
+ default_px: -1.0
+ default_py: 0.1
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_Tbt{
+ id: material_tbt_shadow_L
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_shadow_L.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_tbt_shadow_RF
+ property int current_id: parent.current_id
+ property real material_alpha: 0.0
+ components: [object_tbt_shadow_RF,trans_tbt_shadow_RF,material_tbt_shadow_RF]
+
+ Mesh {
+ id: object_tbt_shadow_RF
+ source: "qrc:/3DModelData/tbt_shadow.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_shadow_RF
+
+ default_px: -1.0
+ default_py: 0.1
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_Tbt{
+ id: material_tbt_shadow_RF
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_shadow_RF.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+ Entity {
+ id : distance_tbt_shadow_R
+ property int current_id: parent.current_id
+ property real material_alpha: 0.0
+ components: [object_tbt_shadow_R,trans_tbt_shadow_R,material_tbt_shadow_R]
+
+ Mesh {
+ id: object_tbt_shadow_R
+ source: "qrc:/3DModelData/tbt_shadow.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_shadow_R
+
+ default_px: -1.0
+ default_py: 0.1
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ default_s : 1.0
+ }
+
+ Material_ColorFactor_Tbt{
+ id: material_tbt_shadow_R
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_shadow_R.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_tbt_LF
+ property int current_id:parent.current_id
+ property real material_alpha: 0.0
+ components: [object_tbt_LF,trans_tbt_LF,material_tbt_LF]
+
+ Mesh {
+ id: object_tbt_LF
+ source: "qrc:/3DModelData/tbt.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_LF
+
+ //-----init-----//
+ default_px: -1.0
+ default_py: 0.5//0.11
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ scale_x : 1.0
+ }
+ Material_ColorFactor_Tbt{
+ id: material_tbt_LF
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_LF.png"
+
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+ Entity {
+ id : distance_tbt_L
+ property int current_id:parent.current_id
+ property real material_alpha: 0.0
+
+ components: [object_tbt_L,trans_tbt_L,material_tbt_L]
+
+ Mesh {
+ id: object_tbt_L
+ source: "qrc:/3DModelData/tbt.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_L
+
+ default_px: -1.0
+ default_py: 0.5
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ scale_x : 1.0
+ }
+ Material_ColorFactor_Tbt{
+ id: material_tbt_L
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_L.png"
+
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_tbt_RF
+ property int current_id:parent.current_id
+ property real material_alpha: 0.0
+
+ components: [object_tbt_RF,trans_tbt_RF,material_tbt_RF]
+
+ Mesh {
+ id: object_tbt_RF
+ source: "qrc:/3DModelData/tbt.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_RF
+
+ default_px: -1.0
+ default_py: 0.5
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ scale_x : 1.0
+ }
+ Material_ColorFactor_Tbt{
+ id: material_tbt_RF
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_RF.png"
+
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+
+ Entity {
+ id : distance_tbt_R
+ property int current_id:parent.current_id
+ property real material_alpha: 0.0
+
+ components: [object_tbt_R,trans_tbt_R,material_tbt_R]
+
+ Mesh {
+ id: object_tbt_R
+ source: "qrc:/3DModelData/tbt.obj"
+ }
+
+ Transform_NextGen {
+ id: trans_tbt_R
+
+ default_px: -1.0
+ default_py: 0.5
+ default_pz: 0.0
+
+ default_rx: 0.0
+ default_ry: 0.0
+ default_rz: 0.0
+
+ scale_x : 1.0
+ }
+ Material_ColorFactor_Tbt{
+ id: material_tbt_R
+
+ property real u_red : 1.0
+ property real u_green : 1.0
+ property real u_blue : 1.0
+ property real u_alpha : 0
+
+ property url u_texture_name : "qrc:/3DModelTexture/TbT_R.png"
+
+ u_rgbFactor : Qt.rgba(u_red,u_green,u_blue, 1)
+ u_alphaFactor : u_alpha
+ u_Texture : u_texture_name
+ }
+ }
+}
diff --git a/GUIModel/ACC/Transform_NextGen.qml b/GUIModel/ACC/Transform_NextGen.qml
new file mode 100644
index 0000000..34d9433
--- /dev/null
+++ b/GUIModel/ACC/Transform_NextGen.qml
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import Qt3D.Core 2.14
+import Qt3D.Extras 2.14
+
+Transform {
+ id: root
+
+ //----- initial parameter -----//
+ property real default_px: 0.0
+ property real default_py: 0.0
+ property real default_pz: 0.0
+ property real default_rx: 0.0
+ property real default_ry: 0.0
+ property real default_rz: 0.0
+ property real default_s : 1.0
+
+ //----- for animation -----//
+ property real posi_x: default_px
+ property real posi_y: default_py
+ property real posi_z: default_pz
+
+ property real roll_x: default_rx
+ property real roll_y: default_ry
+ property real roll_z: default_rz
+
+ property real scale: default_s
+
+ property real scale_x: scale
+ property real scale_y: scale
+ property real scale_z: scale
+
+ scale3D: Qt.vector3d(scale_x,scale_y,scale_z)
+ rotationX: roll_x
+ rotationY: roll_y
+ rotationZ: roll_z
+ translation: Qt.vector3d(posi_x,posi_y,posi_z)
+}
diff --git a/GUIModel/CruisingRange/CruisingRange.qml b/GUIModel/CruisingRange/CruisingRange.qml
new file mode 100644
index 0000000..cc49b80
--- /dev/null
+++ b/GUIModel/CruisingRange/CruisingRange.qml
@@ -0,0 +1,206 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item{
+ id: cruisingRange
+
+ x:258
+ y:309
+ width:268
+ height:39
+
+ property real cruisingRangeValue
+
+ readonly property real cruisingRangeValueMax: 999.9
+ readonly property real cruisingRangeValueMin: 0
+
+ onCruisingRangeValueChanged: {
+ updateCruisingRangeValue();
+ updateCruisingRangeVisible();
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimationFuel.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimationFuel.start()
+ }
+ }
+
+ function updateCruisingRangeValue(){
+ cruisingRangeParts.cruisingRangeValue100 = (cruisingRangeValue/100)%10
+ cruisingRangeParts.cruisingRangeValue10 = (cruisingRangeValue/10)%10
+ cruisingRangeParts.cruisingRangeValue1 = cruisingRangeValue%10
+ cruisingRangeParts.cruisingRangeValue01 = 0
+ }
+
+ function updateCruisingRangeVisible(){
+ if((100 <= cruisingRangeValue) && (cruisingRangeValue <= cruisingRangeValueMax)){
+ fuelNum01.visible = true
+ fuelNum1.visible = true
+ fuelNum10.visible = true
+ fuelNum100.visible = true
+ }else if((10 <= cruisingRangeValue) && (cruisingRangeValue < 100)){
+ fuelNum01.visible = true
+ fuelNum1.visible = true
+ fuelNum10.visible = true
+ fuelNum100.visible = false
+ }else if((1 <= cruisingRangeValue) && (cruisingRangeValue < 10)){
+ fuelNum01.visible = true
+ fuelNum1.visible = true
+ fuelNum10.visible = false
+ fuelNum100.visible = false
+ }else if((cruisingRangeValueMin <= cruisingRangeValue) && (cruisingRangeValue < 1)){
+ fuelNum01.visible = true
+ fuelNum1.visible = true
+ fuelNum10.visible = false
+ fuelNum100.visible = false
+ }else{
+ fuelNum01.visible = false
+ fuelNum1.visible = false
+ fuelNum10.visible = false
+ fuelNum100.visible = false
+ }
+ }
+
+ Item{
+ id: cruisingRangeParts
+ property int cruisingRangeValue100 //hundreds place
+ property int cruisingRangeValue10 //tens place
+ property int cruisingRangeValue1 //ones place
+ property int cruisingRangeValue01 //first decimal place
+ Image{
+ id: fuelUnit
+ source: "qrc:/Images/NormalView/FUEL/fuel_unit.png"
+ x:228
+ y:9
+ width:40
+ height:26
+ }
+ Image{
+ id: fuelNum01
+ source: "qrc:/Images/NormalView/FUEL/fuel_num1-" + parent.cruisingRangeValue01 + ".png"
+ x:202
+ y:6
+ width:19
+ height:29
+ visible: false
+ }
+ Image{
+ id: fuelNum1
+ source: "qrc:/Images/NormalView/FUEL/fuel_num10-" + parent.cruisingRangeValue1 + ".png"
+ x:174
+ y:6
+ width:19
+ height:29
+ visible: false
+ }
+ Image{
+ id: fuelNum10
+ source: "qrc:/Images/NormalView/FUEL/fuel_num100-" + parent.cruisingRangeValue10 + ".png"
+ x:154
+ y:6
+ width:19
+ height:29
+ visible:false
+ }
+ Image{
+ id: fuelNum100
+ source: "qrc:/Images/NormalView/FUEL/fuel_num1000-" + parent.cruisingRangeValue100 + ".png"
+ x:134
+ y:6
+ width:19
+ height:29
+ visible:false
+ }
+ Image{
+ id: fuelDot
+ source: "qrc:/Images/NormalView/FUEL/fuel_dot.png"
+ x:194
+ y:28
+ width:6
+ height:6
+ }
+ Image{
+ id: fuelIcon
+ source: "qrc:/Images/NormalView/FUEL/fuel_icon.png"
+ x:0
+ y:0
+ width:119
+ height:39
+ }
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimationFuel
+ onStarted: rootItem.focus=false
+ PauseAnimation{
+ duration:330
+ }
+
+ PathAnimation{
+ target: cruisingRange
+ duration: 891
+ easing.type: Easing.InOutSine
+ path:Path {
+ startX: 258; startY: 309
+ PathArc {
+ x: 238; y: 657
+ radiusX: 180; radiusY: 180
+ direction: PathArc.Counterclockwise
+ }
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimationFuel
+ onStarted: rootItem.focus=false
+ PauseAnimation{
+ duration: 254 + 330
+ }
+
+ PathAnimation{
+ target: cruisingRange
+ duration: 891
+ easing.type: Easing.InOutSine
+ path:Path {
+ startX: 238; startY: 657
+ PathArc {
+ x: 258; y: 309
+ radiusX: 180; radiusY: 180
+ direction: PathArc.Clockwise
+ }
+ }
+ }
+
+ }
+}
diff --git a/GUIModel/FPSItem/FpsItem.qml b/GUIModel/FPSItem/FpsItem.qml
new file mode 100644
index 0000000..22a1da0
--- /dev/null
+++ b/GUIModel/FPSItem/FpsItem.qml
@@ -0,0 +1,97 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtQuick.Window 2.14
+
+Rectangle {
+ id: root
+ property int frameCounter: 0
+ property int frameCounterAvg: 0
+ property int counter: 0
+ property int fps: 0
+ property int fpsAvg: 0
+ property string part
+ property int maxFPS: 0
+ property int minFPS: 60
+
+ property real dp:Screen.pixelDensity * 25.4/160
+
+ color: "black"
+ width: spinnerImage.width + 10*dp;
+ height: spinnerImage.height + 10*dp;
+
+ Image {
+ id: spinnerImage
+ anchors.verticalCenter: parent.verticalCenter
+ x: 4 * dp
+ width: 36 * dp
+ height: 36 * dp
+ source: "qrc:/FPSItem/spinner.png"
+ NumberAnimation on rotation {
+ from:0
+ to: 360
+ duration: 800
+ loops: Animation.Infinite
+ }
+ onRotationChanged: frameCounter++;
+ }
+
+
+ Text {
+ id: text1
+ anchors.left: spinnerImage.right
+ anchors.leftMargin: 8 * dp
+ anchors.verticalCenter: spinnerImage.verticalCenter
+ color: "#c0c0c0"
+ font.pixelSize: 25 * dp
+ text: "Ø " + root.part + " | fps " + root.fps + " | Avg (/10s) " + root.fpsAvg +" | MAX " + root.maxFPS + " | MIN " + root.minFPS
+ }
+
+
+ Timer {
+ interval: 1000
+ repeat: true
+ running: true
+ onTriggered: {
+ frameCounterAvg += frameCounter;
+// console.info("frameCounter = ",frameCounter);
+// console.info(childrenRect.width, childrenRect.height);
+ root.fps = frameCounter;
+ counter++;
+ frameCounter = 0;
+ if (counter >= 10) {
+ root.fpsAvg = frameCounterAvg/(counter)
+ frameCounterAvg = 0;
+ counter = 0;
+ }
+ if (root.maxFPS <= root.fps){
+ root.maxFPS = root.fps
+ }
+ if (root.fps != 0){
+ if(root.minFPS >= root.fps){
+ root.minFPS = root.fps
+ }
+ }
+ }
+ }
+}
diff --git a/GUIModel/FPSItem/spinner.png b/GUIModel/FPSItem/spinner.png
new file mode 100644
index 0000000..5c6eefd
--- /dev/null
+++ b/GUIModel/FPSItem/spinner.png
Binary files differ
diff --git a/GUIModel/GUIModel.qrc b/GUIModel/GUIModel.qrc
new file mode 100644
index 0000000..f412f46
--- /dev/null
+++ b/GUIModel/GUIModel.qrc
@@ -0,0 +1,48 @@
+<RCC>
+ <qresource prefix="/">
+ <file>main.qml</file>
+ <file>Meter/ChargeGuage.qml</file>
+ <file>Meter/DigitalSpeed.qml</file>
+ <file>Meter/Mask.qml</file>
+ <file>Meter/Meter.qml</file>
+ <file>Meter/Ready.qml</file>
+ <file>Meter/Ring.qml</file>
+ <file>Meter/Sideline.qml</file>
+ <file>Meter/SpeedGuage.qml</file>
+ <file>Meter/SpeedNeedle.qml</file>
+ <file>Meter/Tachometer.qml</file>
+ <file>ACC/ACC_Animation.qml</file>
+ <file>ACC/Material_ColorFactor.qml</file>
+ <file>ACC/Stage.qml</file>
+ <file>ACC/Transform_NextGen.qml</file>
+ <file>CruisingRange/CruisingRange.qml</file>
+ <file>Header/Clock.qml</file>
+ <file>Header/Header.qml</file>
+ <file>Header/OutsideTemperature.qml</file>
+ <file>Map/Map.qml</file>
+ <file>ShiftPosition/ShiftPosition.qml</file>
+ <file>Telltale/Telltale.qml</file>
+ <file>TurnByTurn/TurnByTurn.qml</file>
+ <file>Menu/Menu.qml</file>
+ <file>Menu/MenuAdas.qml</file>
+ <file>Menu/MenuAdasIconAdas.qml</file>
+ <file>Menu/MenuAdasIconNormal.qml</file>
+ <file>Menu/MenuAudio.qml</file>
+ <file>Menu/MenuAudioPanel.qml</file>
+ <file>Menu/MenuContents.qml</file>
+ <file>Menu/MenuFrame.qml</file>
+ <file>Menu/MenuFrameScrollTo0.qml</file>
+ <file>Menu/MenuFrameScrollTo1.qml</file>
+ <file>Menu/MenuFrameScrollTo2.qml</file>
+ <file>Menu/MenuFrameScrollTo3.qml</file>
+ <file>Menu/MenuFrameScrollTo4.qml</file>
+ <file>Menu/MenuMain.qml</file>
+ <file>Menu/MenuRadio.qml</file>
+ <file>Menu/MenuRadioPanel.qml</file>
+ <file>Menu/MenuShade.qml</file>
+ <file>ACC/Material_ColorFactor_Tbt.qml</file>
+ <file>ACC/Material_ColorFactor_noAlpha.qml</file>
+ <file>FPSItem/FpsItem.qml</file>
+ <file>FPSItem/spinner.png</file>
+ </qresource>
+</RCC>
diff --git a/GUIModel/Header/Clock.qml b/GUIModel/Header/Clock.qml
new file mode 100644
index 0000000..e69e2d6
--- /dev/null
+++ b/GUIModel/Header/Clock.qml
@@ -0,0 +1,135 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item{
+ id: clock
+ property int timeHour
+ property int timeMinute
+
+ readonly property int timeHourMax: 23
+ readonly property int timeHourMin: 0
+ readonly property int timeMinuteMax: 59
+ readonly property int timeMinuteMin: 0
+
+ onTimeMinuteChanged: {
+ updateMinute();
+ updateClockVisible();
+ }
+ onTimeHourChanged: {
+ hourUpdate();
+ updateClockVisible();
+ }
+
+ function updateMinute(){
+ clockParts.timeMinute10 = (timeMinute/10)%10
+ clockParts.timeMinute1 = timeMinute%10
+ }
+
+ function hourUpdate(){
+ clockParts.timeHour10 = (timeHour/10)%10
+ clockParts.timeHour1 = timeHour%10
+ }
+
+ function updateClockVisible(){
+ if((timeMinuteMin <= timeMinute) && (timeMinute <= timeMinuteMax)){
+ if((timeHourMin <= timeHour) && (timeHour <= 9)){
+ timeMinute1.visible = true
+ timeMinute10.visible = true
+ timeHour1.visible = true
+ timeHour10.visible = false
+ }else if((10 <= timeHour) && (timeHour <= timeHourMax)){
+ timeMinute1.visible = true
+ timeMinute10.visible = true
+ timeHour1.visible = true
+ timeHour10.visible = true
+ }else{
+ timeMinute1.visible = false
+ timeMinute10.visible = false
+ timeHour1.visible = false
+ timeHour10.visible = false
+ }
+ }else{
+ timeMinute1.visible = false
+ timeMinute10.visible = false
+ timeHour1.visible = false
+ timeHour10.visible = false
+ }
+ }
+
+ Component.onCompleted: {
+ timeHour = 20
+ timeMinute = 34
+ }
+ Item{
+ id: clockParts
+ property int timeHour10 //tens place of hour
+ property int timeHour1 //ones place of hour
+ property int timeMinute10 //tens place of minute
+ property int timeMinute1 //ones place of minute
+ Image{
+ id: timeCron
+ source: "qrc:/Images/NormalView/TIME/time_cron.png"
+ x:1239
+ y:49
+ width:11
+ height:34
+ }
+ Image{
+ id: timeMinute1
+ source: "qrc:/Images/NormalView/TIME/time_m1-" + parent.timeMinute1 + ".png"
+ x:1275
+ y:49
+ width:23
+ height:34
+ visible: false
+ }
+ Image{
+ id: timeMinute10
+ source: "qrc:/Images/NormalView/TIME/time_m10-" + parent.timeMinute10 + ".png"
+ x:1252
+ y:49
+ width:23
+ height:34
+ visible: false
+ }
+ Image{
+ id: timeHour1
+ source: "qrc:/Images/NormalView/TIME/time_h1-" + parent.timeHour1 + ".png"
+ x:1214
+ y:49
+ width:23
+ height:34
+ visible: false
+ }
+ Image{
+ id: timeHour10
+ source: "qrc:/Images/NormalView/TIME/time_h10-" + parent.timeHour10 + ".png"
+ x:1191
+ y:49
+ width:23
+ height:34
+ visible: false
+ }
+ }
+}
diff --git a/GUIModel/Header/Header.qml b/GUIModel/Header/Header.qml
new file mode 100644
index 0000000..d16d7ee
--- /dev/null
+++ b/GUIModel/Header/Header.qml
@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item {
+ id: header
+/***********Outside temperature************/
+ OutsideTemperature {
+ id: outsideTemperature
+ }
+
+/***********clock************/
+ Clock {
+ id: clock
+ }
+
+/***********Turn_parts************/
+ Item{
+ id: turn_parts
+ Image{
+ id: turn_l_on
+ source: "qrc:/Images/NormalView/TURN/turn_l_on.png"
+ x: 467
+ y: 43
+ width: 44
+ height: 44
+ visible: false
+ }
+ Image{
+ id: turn_l_off
+ source: "qrc:/Images/NormalView/TURN/turn_l_off.png"
+ x: 467
+ y: 43
+ width: 44
+ height: 44
+ visible: true
+ }
+ Image{
+ id: turn_r_on
+ source: "qrc:/Images/NormalView/TURN/turn_r_on.png"
+ x: 1409
+ y: 43
+ width: 44
+ height: 44
+ visible: false
+ }
+ Image{
+ id: turn_r_off
+ source: "qrc:/Images/NormalView/TURN/turn_r_off.png"
+ x: 1409
+ y: 43
+ width: 44
+ height: 44
+ visible: true
+ }
+ }
+}
diff --git a/GUIModel/Header/OutsideTemperature.qml b/GUIModel/Header/OutsideTemperature.qml
new file mode 100644
index 0000000..0d90360
--- /dev/null
+++ b/GUIModel/Header/OutsideTemperature.qml
@@ -0,0 +1,101 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item {
+ id: outsideTemperature
+ property int tempValue
+
+ readonly property int tempValueMax: 131
+ readonly property int tempValueMin: -20
+
+ // property int tempValue_10: (tempValue/10)%10
+ // property int tempValue_1: tempValue%10
+ onTempValueChanged: {
+ updateOutsideTemperatureVisible();
+ }
+ Component.onCompleted: tempValue = -20
+
+ function updateOutsideTemperatureVisible(){
+ if((tempValueMin <= tempValue) && (tempValue <= tempValueMax)){
+ tempValueText.visible = true
+ }else{
+ tempValueText.visible = false
+ }
+ }
+
+ Image{
+ id: tempUnit
+ source: "qrc:/Images/NormalView/TEMP/temp_unit.png"
+ x: 671
+ y: 58
+ width: 32
+ height: 24
+ }
+ FontLoader { id: localFont; source: "qrc:/Fonts/Inter-Regular.ttf"; }
+ Text{
+ id: tempValueText
+ text: parent.tempValue
+ renderType: Text.NativeRendering
+ anchors.right: tempUnit.left
+ horizontalAlignment :Text.AlignRight
+ verticalAlignment: Text.AlignVCenter
+ anchors.rightMargin: 1
+
+ y: 49
+ width: 46
+ height: 33
+ //font { family: localFont.name; pointSize: 29; capitalization: Font.Capitalize }
+ font.family: localFont.name
+ font.pointSize: 29
+ font.letterSpacing: 1
+ color: "White"
+ visible: false
+
+ }
+
+ // Image{
+ // id: temp_01
+ // source: "qrc:/Images/NormalView/TEMP/temp_01-" + parent.tempValue_1 + ".png"
+ // x:647
+ // y:49
+ // width:23
+ // height:33
+ // opacity: 0.7
+ // visible: {
+ // true
+ // }
+ // }
+ // Image{
+ // id: temp_10
+ // source: "qrc:/Images/NormalView/TEMP/temp_10-" + parent.tempValue_10 + ".png"
+ // x:624
+ // y:49
+ // width:23
+ // height:33
+ // opacity: 0.7
+ // visible: {
+ // true
+ // }
+ // }
+}
diff --git a/GUIModel/Map/Map.qml b/GUIModel/Map/Map.qml
new file mode 100644
index 0000000..04327f5
--- /dev/null
+++ b/GUIModel/Map/Map.qml
@@ -0,0 +1,128 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtMultimedia 5.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: map
+ x:1920 - 1200
+ y:0
+ width : 1200
+ height : 720
+ Component.onCompleted: {
+ mapVideo.play()
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ }
+
+ onTransAdasToMap:{
+ adasToMapAnimationMap.start()
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimationMap.start()
+ }
+ }
+
+ Item{
+ id: mapParts
+ visible:false
+ anchors.fill: parent
+ Video {
+ id: mapVideo
+ autoLoad: true
+ anchors.fill: parent
+ visible: true
+ loops: MediaPlayer.Infinite
+ source: "gst-pipeline: filesrc location=" + CurDirPath + "/map_movie.mp4 ! decodebin ! videoconvert ! qtvideosink"
+ }
+
+ Item{
+ id:mapMask
+ x: 0
+ y: 0
+ Image{
+ width: 1200
+ height: 720
+ source: "qrc:/Images/ADASView/MAP/map_mask.ktx"
+ }
+
+ Image{ source:"qrc:/Images/ADASView/MAP/acc_cover.ktx"; width:1412; height:98; x:508-map.x; y:622 }
+ }
+ }
+
+ SequentialAnimation{
+ id:adasToMapAnimationMap
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+
+ PauseAnimation {
+ duration: 330
+ }
+
+ PropertyAnimation {
+ target: mapParts
+ property: "visible"
+ duration: 0
+ to: true
+ }
+
+ PropertyAnimation{
+ target: mapParts
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimationMap
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 254
+ }
+
+
+ PropertyAnimation{
+ target: mapParts
+ property: "opacity"
+ duration: 330
+ from: 1
+ to: 0
+ }
+
+ PropertyAnimation {
+ target: mapParts
+ property: "visible"
+ duration: 0
+ to: false
+ }
+ }
+
+
+}
diff --git a/GUIModel/Menu/Menu.qml b/GUIModel/Menu/Menu.qml
new file mode 100644
index 0000000..ed81d36
--- /dev/null
+++ b/GUIModel/Menu/Menu.qml
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+
+Item{
+ id: menuRoot
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ menuMain.startAnimationNormalToAdas()
+ menuContents.startAnimationNormalToAdas()
+ menuShade.startAnimationNormalToAdas()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ menuMain.startAnimationMapToNormal()
+ menuContents.startAnimationMapToNormal()
+ menuShade.startAnimationMapToNormal()
+ }
+
+ onKeyPressed_Up:{
+ if(menu.state === "open"){
+ menuMain.incrementIndex()
+ }
+ }
+
+ onKeyPressed_Down:{
+ if(menu.state === "open"){
+ menuMain.decrementIndex()
+ }
+ }
+
+ onKeyPressed_Left:{
+ if(menu.state === "close"){
+ menuContents.decrementIndex()
+ }
+ }
+
+ onKeyPressed_Right:{
+ if(menu.state === "close"){
+ menuContents.incrementIndex()
+ }
+ }
+
+ onKeyPressed_Enter:{
+ if(menu.state === "close"){
+ menuContents.enter()
+ }else if(menu.state === "open"){
+ menuContents.close()
+ menuMain.close()
+ menu.state = "close"
+ }
+ }
+
+ onKeyPressed_Menu:{
+ if(menu.state === "close"){
+ menuContents.open()
+ menuMain.open()
+ menu.state = "open"
+ }
+ }
+ }
+
+ Item{
+ id: menu
+
+ property var mode: "normal" /* Normal or Adas */
+ property var state: "open" /* open or close */
+
+ MenuContents {
+ id: menuContents
+ }
+
+ /************************************************menu_area****************************************************/
+ MenuMain {
+ id: menuMain
+ }
+
+ MenuShade {
+ id: menuShade
+ }
+ }
+
+
+
+
+}
diff --git a/GUIModel/Menu/MenuAdas.qml b/GUIModel/Menu/MenuAdas.qml
new file mode 100644
index 0000000..4efa772
--- /dev/null
+++ b/GUIModel/Menu/MenuAdas.qml
@@ -0,0 +1,194 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item{
+ id:menuAdasRoot
+ visible: false
+
+ /* public properties */
+ property alias mode:menuAdas.mode
+
+ /* public functions */
+ function incrementIndex(){
+ menuAdas.incrementIndex()
+ }
+
+ function decrementIndex(){
+ menuAdas.decrementIndex()
+ }
+
+ function changeEnabled(){
+ menuAdas.changeEnabled()
+ }
+
+
+ Item {
+ id: menuAdas
+ visible:true
+ width: 826
+ height: 358
+
+ property var mode: "normal" /* normal or adas */
+
+ property int index : 0
+ property bool icon0Enabled : false
+ property bool icon1Enabled : false
+ property bool icon2Enabled : false
+
+ property bool icon0Focused : true
+ property bool icon1Focused : false
+ property bool icon2Focused : false
+
+ onModeChanged: {
+ if(mode === "normal"){
+ menuAdasNormal.visible = true
+ menuAdasAdas.visible = false
+ }else if(mode === "adas"){
+ menuAdasNormal.visible = false
+ menuAdasAdas.visible = true
+ }else{
+ menuAdasNormal.visible = true
+ menuAdasAdas.visible = false
+ }
+ }
+
+ function incrementIndex(){
+ index++
+ if(index === 3) index = 0
+
+ if(index == 0){
+ icon0Focused = true
+ icon1Focused = false
+ icon2Focused = false
+ }
+ else if(index == 1){
+ icon0Focused = false
+ icon1Focused = true
+ icon2Focused = false
+ }
+ else if(index == 2){
+ icon0Focused = false
+ icon1Focused = false
+ icon2Focused = true
+ }
+ }
+ function decrementIndex(){
+ index--
+ if(index === -1) index = 2
+
+ if(index == 0){
+ icon0Focused = true
+ icon1Focused = false
+ icon2Focused = false
+ }
+ else if(index == 1){
+ icon0Focused = false
+ icon1Focused = true
+ icon2Focused = false
+ }
+ else if(index == 2){
+ icon0Focused = false
+ icon1Focused = false
+ icon2Focused = true
+ }
+ }
+ function changeEnabled(){
+ if(index === 0){ // left
+ icon0Enabled = !(icon0Enabled)
+ }
+ if(index === 1) { //center
+ icon1Enabled = !(icon1Enabled)
+ }
+ if(index === 2) { //right
+ icon2Enabled = !(icon2Enabled)
+ }
+ }
+
+ /**************adas image******************/
+ Item{
+ id: menuAdasNormal
+
+ MenuAdasIconNormal {
+ enabled: menuAdas.icon0Enabled
+ focused: menuAdas.icon0Focused
+ offImage: "qrc:/Images/NormalView/ADAS/adas_icon1_off.png"
+ onImage: "qrc:/Images/NormalView/ADAS/adas_icon1_on.png"
+ textImage: "qrc:/Images/NormalView/ADAS/adas_text1.png"
+ }
+
+ MenuAdasIconNormal {
+ x:130
+ enabled: menuAdas.icon1Enabled
+ focused: menuAdas.icon1Focused
+ offImage: "qrc:/Images/NormalView/ADAS/adas_icon2_off.png"
+ onImage: "qrc:/Images/NormalView/ADAS/adas_icon2_on.png"
+ textImage: "qrc:/Images/NormalView/ADAS/adas_text2.png"
+ }
+
+ MenuAdasIconNormal {
+ x:260
+ enabled: menuAdas.icon2Enabled
+ focused: menuAdas.icon2Focused
+ offImage: "qrc:/Images/NormalView/ADAS/adas_icon3_off.png"
+ onImage: "qrc:/Images/NormalView/ADAS/adas_icon3_on.png"
+ textImage: "qrc:/Images/NormalView/ADAS/adas_text3.png"
+ }
+ }
+
+
+ Item{
+ id: menuAdasAdas
+ visible: false
+
+ MenuAdasIconAdas {
+ enabled: menuAdas.icon0Enabled
+ focused: menuAdas.icon0Focused
+ offImage: "qrc:/Images/ADASView/MENU/adas_icon1_off.png"
+ onImage: "qrc:/Images/ADASView/MENU/adas_icon1_on.png"
+ textImage: "qrc:/Images/ADASView/MENU/adas_text1.png"
+ }
+
+ MenuAdasIconAdas {
+ x:120
+ enabled: menuAdas.icon1Enabled
+ focused: menuAdas.icon1Focused
+ offImage: "qrc:/Images/ADASView/MENU/adas_icon2_off.png"
+ onImage: "qrc:/Images/ADASView/MENU/adas_icon2_on.png"
+ textImage: "qrc:/Images/ADASView/MENU/adas_text2.png"
+ }
+
+ MenuAdasIconAdas {
+ x:240
+ enabled: menuAdas.icon2Enabled
+ focused: menuAdas.icon2Focused
+ offImage: "qrc:/Images/ADASView/MENU/adas_icon3_off.png"
+ onImage: "qrc:/Images/ADASView/MENU/adas_icon3_on.png"
+ textImage: "qrc:/Images/ADASView/MENU/adas_text3.png"
+ }
+
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuAdasIconAdas.qml b/GUIModel/Menu/MenuAdasIconAdas.qml
new file mode 100644
index 0000000..d519891
--- /dev/null
+++ b/GUIModel/Menu/MenuAdasIconAdas.qml
@@ -0,0 +1,73 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item{
+ id: adasIconAdas
+
+ property bool enabled: false
+ property bool focused: false
+
+ property alias onImage: onImage.source
+ property alias offImage: offImage.source
+ property alias textImage: textImage.source
+
+ Image{
+ id: offImage
+ source: "qrc:/Images/ADASView/MENU/adas_icon1_off.png"
+ x:170
+ y:186
+ width:104
+ height:90
+ visible: !(adasIconAdas.enabled)
+ }
+ Image{
+ id: onImage
+ source: "qrc:/Images/ADASView/MENU/adas_icon1_on.png"
+ x:170
+ y:186
+ width:104
+ height:90
+ visible: adasIconAdas.enabled
+ }
+ Image{
+ id: textImage
+ source: "qrc:/Images/ADASView/MENU/adas_text1.png"
+ x:202
+ y:278
+ width:40
+ height:18
+ visible:true
+ }
+ Image{
+ source: "qrc:/Images/ADASView/MENU/adas_panel1.png"
+ x:165
+ y:170
+ width:114
+ height:144
+ visible: adasIconAdas.focused
+ }
+
+}
diff --git a/GUIModel/Menu/MenuAdasIconNormal.qml b/GUIModel/Menu/MenuAdasIconNormal.qml
new file mode 100644
index 0000000..f1c7621
--- /dev/null
+++ b/GUIModel/Menu/MenuAdasIconNormal.qml
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item{
+ id: adasIconNormal
+ property bool enabled: false
+ property bool focused: false
+
+ property alias onImage: onImage.source
+ property alias offImage: offImage.source
+ property alias textImage: textImage.source
+
+ Image{
+ id: offImage
+ source: "qrc:/Images/NormalView/ADAS/adas_icon1_off.png"
+ x: 171
+ y: 186
+ width: 102
+ height: 90
+ visible: !(adasIconNormal.enabled)
+ }
+ Image{
+ id: onImage
+ source: "qrc:/Images/NormalView/ADAS/adas_icon1_on.png"
+ x: 171
+ y: 186
+ width: 102
+ height: 90
+ visible: adasIconNormal.enabled
+ }
+ Image{
+ id: textImage
+ source: "qrc:/Images/NormalView/ADAS/adas_text1.png"
+ x: 202
+ y: 278
+ width: 40
+ height: 18
+ visible: true
+ }
+ Image{
+ id: focusImage
+ source: "qrc:/Images/NormalView/ADAS/adas_panel1.png"
+ x: 160
+ y: 164
+ width: 124
+ height: 158
+ visible: adasIconNormal.focused
+ }
+}
diff --git a/GUIModel/Menu/MenuAudio.qml b/GUIModel/Menu/MenuAudio.qml
new file mode 100644
index 0000000..647ba72
--- /dev/null
+++ b/GUIModel/Menu/MenuAudio.qml
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item {
+ id: menuAudio
+ visible:false
+ width: 826
+ height: 358
+ property string mode: "normal"
+
+ function incrementIndex(){
+ audioPanels.incrementIndex()
+ }
+
+ function decrementIndex(){
+ audioPanels.decrementIndex()
+ }
+
+ Item{
+ id: audioPanels
+ height: 358
+
+ property int index: 0
+
+ function incrementIndex(){
+ index++
+ if(index === 3) index = 0
+
+ if(index === 0){
+ audioPanel2.slideOut(+1) /*Slide out to right*/
+ audioPanel0.slideIn(+1) /*Slide in from left*/
+ }else if(index === 1){
+ audioPanel0.slideOut(+1)
+ audioPanel1.slideIn(+1)
+ }else if(index === 2){
+ audioPanel1.slideOut(+1)
+ audioPanel2.slideIn(+1)
+ }
+ }
+
+ function decrementIndex(){
+ index--
+ if(index === -1) index = 2
+
+ if(index === 2){
+ audioPanel0.slideOut(-1) /*Slide out to left*/
+ audioPanel2.slideIn(-1) /*Slide in from right*/
+ }else if(index === 1){
+ audioPanel2.slideOut(-1)
+ audioPanel1.slideIn(-1)
+ }else if(index === 0){
+ audioPanel1.slideOut(-1)
+ audioPanel0.slideIn(-1)
+ }
+ }
+
+ MenuAudioPanel{
+ id: audioPanel0
+ mode: menuAudio.mode
+ icon: "qrc:/Images/ADASView/MENU/jacket1.png"
+ title: "You Don't Know Me"
+ artist: "Martin Crown"
+ bg: "qrc:/Images/ADASView/MENU/jacket_blur1.png"
+ panelVisible: true
+ }
+ MenuAudioPanel{
+ id: audioPanel1
+ mode: menuAudio.mode
+ icon: "qrc:/Images/ADASView/MENU/jacket2.png"
+ title: "LIGHT"
+ artist: "Amelia Sedgwick"
+ bg: "qrc:/Images/ADASView/MENU/jacket_blur2.png"
+ panelVisible: false
+ }
+ MenuAudioPanel{
+ id: audioPanel2
+ mode: menuAudio.mode
+ icon: "qrc:/Images/ADASView/MENU/jacket3.png"
+ title: "Ocean Power"
+ artist: "Oceania Poseidon"
+ bg: "qrc:/Images/ADASView/MENU/jacket_blur3.png"
+ panelVisible: false
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuAudioPanel.qml b/GUIModel/Menu/MenuAudioPanel.qml
new file mode 100644
index 0000000..6725b33
--- /dev/null
+++ b/GUIModel/Menu/MenuAudioPanel.qml
@@ -0,0 +1,339 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+Item{
+ id: menuAudioPanelRoot
+
+ /* public properties */
+ property alias icon: audioPanel.icon
+ property alias title: audioPanel.title
+ property alias artist: audioPanel.artist
+ property alias bg: audioPanel.bg
+ property alias mode: audioPanel.mode
+ property alias panelVisible: audioPanel.visible
+ visible: true
+
+ /* public functions */
+ function slideIn(direction){
+ audioPanel.slideIn(direction)
+ }
+
+ function slideOut(direction){
+ audioPanel.slideOut(direction)
+ }
+
+ Item {
+ id: audioPanel
+ width: 826
+ height: 358
+
+ property url icon: ""
+ property string title: ""
+ property string artist: ""
+ property url bg: ""
+
+ property var mode: "normal" /* normal or adas */
+ property double slideDirection: 1 /* +1:Right -1:Left */
+
+ FontLoader { id: localFont; source: "qrc:/Fonts/Inter-Regular.ttf" }
+
+ onModeChanged: {
+ if(mode === "normal"){
+ adasToNormalAnimationAudio.start()
+ }else if(mode === "adas"){
+ normalToAdasAnimationAudio.start()
+ }
+ }
+
+ function slideIn(direction){
+ slideDirection = direction
+
+ if(delayTimer.running){
+ delayTimer.stop()
+ }
+
+ inAnimation.start()
+
+ delayTimer.start()
+ }
+
+ function slideOut(direction){
+ slideDirection = direction
+ if(delayTimer.running){
+ delayTimer.stop()
+ }
+
+ outAnimation.start()
+ }
+
+
+ Timer {
+ id:delayTimer
+ interval: 330
+ repeat: false
+ running: false
+ onTriggered: {
+ blurFadeInAnimation.start()
+ }
+ }
+
+ Item{
+ width:826
+ height: 358
+
+ Image {
+ id: bgImage
+ width:826; height:358
+ source: audioPanel.bg
+ }
+
+ Image {
+ id: iconImage
+ width: 112; height: 112
+ x:301
+ y:156
+ source: audioPanel.icon
+ }
+
+ Text{
+ id: titleText
+ y:308
+ color: "white"
+ font { family: localFont.name; pointSize: 20; capitalization: Font.Capitalize }
+ anchors.horizontalCenterOffset: -59
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: audioPanel.title
+ property var anchor: "center"
+
+ onAnchorChanged: {
+ if(anchor === "center"){
+ changeAnchorsToCenter()
+ }else if(anchor === "left"){
+ changeAnchorsToLeft()
+ }
+ }
+
+ function changeAnchorsToCenter(){
+ anchors.leftMargin = 0
+ anchors.left = undefined
+ anchors.horizontalCenter = parent.horizontalCenter
+ anchors.horizontalCenterOffset = -59
+ }
+
+ function changeAnchorsToLeft(){
+ anchors.horizontalCenterOffset = 0
+ anchors.horizontalCenter = undefined
+ anchors.left = parent.left
+ anchors.leftMargin = 302
+ }
+ }
+ Text{
+ id:artistName
+ y:336
+ color: "white"
+ font { family: localFont.name; pointSize: 16; capitalization: Font.Capitalize }
+ anchors.horizontalCenterOffset: -59
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: audioPanel.artist
+ property var anchor: "center"
+
+ onAnchorChanged: {
+ if(anchor === "center"){
+ changeAnchorsToCenter()
+ }else if(anchor === "left"){
+ changeAnchorsToLeft()
+ }
+ }
+
+ function changeAnchorsToCenter(){
+ anchors.leftMargin = 0
+ anchors.left = undefined
+ anchors.horizontalCenter = parent.horizontalCenter
+ anchors.horizontalCenterOffset = -59
+ }
+
+ function changeAnchorsToLeft(){
+ anchors.horizontalCenterOffset = 0
+ anchors.horizontalCenter = undefined
+ anchors.left = parent.left
+ anchors.leftMargin = 302
+ }
+ }
+ }
+
+ PropertyAnimation {
+ id:outAnimation
+
+ target: audioPanel
+ property: "visible"
+ duration: 0
+ to: false
+ }
+
+ ParallelAnimation{
+ id:inAnimation
+
+ PropertyAnimation {
+ target: audioPanel
+ property: "visible"
+ duration: 0
+ to: true
+
+ }
+ NumberAnimation {
+ target: bgImage
+ property: "opacity"
+ duration: 0
+ to:0
+ }
+
+ NumberAnimation {
+ target: iconImage
+ property: "x"
+ duration: 260
+ from:if(audioPanel.mode === "normal"){
+ 301 - 20 * audioPanel.slideDirection
+ }else if(audioPanel.mode === "adas"){
+ 172 - 20 * audioPanel.slideDirection
+ }
+ to: if(audioPanel.mode === "normal"){
+ 301
+ }else if(audioPanel.mode === "adas"){
+ 172
+ }
+ easing.type: Easing.OutSine
+ }
+ }
+
+ PropertyAnimation {
+ id: blurFadeInAnimation
+ target: bgImage
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ easing.type: Easing.Linear
+ }
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimationAudio
+
+ PropertyAnimation {
+ target: bgImage
+ property: "visible"
+ duration: 0
+ to: true
+ }
+
+ PropertyAnimation{
+ target: iconImage
+ property: "x"
+ duration: 0
+ to: 172
+ }
+ PropertyAnimation{
+ target: iconImage
+ property: "y"
+ duration: 0
+ to: 194
+ }
+
+ PropertyAnimation {
+ target: titleText
+ property: "anchor"
+ duration: 0
+ to: "left"
+ }
+ PropertyAnimation{
+ target: titleText
+ property: "y"
+ duration: 0
+ to: 226
+ }
+
+ PropertyAnimation {
+ target: artistName
+ property: "anchor"
+ duration: 0
+ to: "left"
+ }
+ PropertyAnimation{
+ target: artistName
+ property: "y"
+ duration: 0
+ to: 256
+ }
+ }
+
+ SequentialAnimation{
+ id:adasToNormalAnimationAudio
+
+ PropertyAnimation {
+ target: bgImage
+ property: "visible"
+ duration: 0
+ to: false
+ }
+
+ PropertyAnimation{
+ target: iconImage
+ property: "x"
+ duration: 0
+ to: 301
+ }
+ PropertyAnimation{
+ target: iconImage
+ property: "y"
+ duration: 0
+ to: 156
+ }
+
+ PropertyAnimation{
+ target: titleText
+ property: "y"
+ duration: 0
+ to: 308
+ }
+ PropertyAnimation {
+ target: titleText
+ property: "anchor"
+ duration: 0
+ to: "center"
+ }
+
+ PropertyAnimation{
+ target: artistName
+ property: "y"
+ duration: 0
+ to: 336
+ }
+ PropertyAnimation {
+ target: artistName
+ property: "anchor"
+ duration: 0
+ to: "center"
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuContents.qml b/GUIModel/Menu/MenuContents.qml
new file mode 100644
index 0000000..4a508bc
--- /dev/null
+++ b/GUIModel/Menu/MenuContents.qml
@@ -0,0 +1,304 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+
+Item{
+ /* public functions */
+ function open(){
+ menuContentsClear.open()
+ }
+
+ function close(){
+ menuContentsClear.close()
+ }
+
+ function incrementIndex(){
+ if(menuMain.index === 0){
+ menuRadio.incrementIndex()
+ }else if(menuMain.index === 1){
+ menuAdas.incrementIndex()
+ }else if(menuMain.index === 2){
+ menuAudio.incrementIndex()
+ }
+ }
+
+ function decrementIndex(){
+ if(menuMain.index === 0){
+ menuRadio.decrementIndex()
+ }else if(menuMain.index === 1){
+ menuAdas.decrementIndex()
+ }else if(menuMain.index === 2){
+ menuAudio.decrementIndex()
+ }
+ }
+
+ function enter(){
+ if(menuMain.index === 0){
+ /* nop */
+ }else if(menuMain.index === 1){
+ menuAdas.changeEnabled()
+ }else if(menuMain.index === 2){
+ /* nop */
+ }
+ }
+
+ function startAnimationNormalToAdas(){
+ normalToAdasAnimation.start()
+ }
+
+ function startAnimationMapToNormal(){
+ mapToNormalAnimation.start()
+ }
+
+
+ Item{
+ id: menuContentsClear
+ width:826
+ height: 358
+ visible: false
+ x: 52
+ y: 298
+
+ function open(){
+ menuContentsClear.visible = false
+ menuContentsBlur.visible = true
+ }
+
+ function close(){
+ checkVisibleMenuContent()
+
+ menuContentsClear.visible = true
+ menuContentsBlur.visible = false
+ }
+
+ function checkVisibleMenuContent(){
+ if(menuMain.index === 0){//radio
+ menuAudio.visible = false
+ menuAdas.visible = false
+ menuRadio.visible = true
+ }
+ else if(menuMain.index === 1){//adas
+ menuAudio.visible = false
+ menuRadio.visible = false
+ menuAdas.visible = true
+ }
+ else if(menuMain.index === 2){//music
+ menuRadio.visible = false
+ menuAdas.visible = false
+ menuAudio.visible = true
+ }
+ else{
+ //NOP
+ }
+ }
+
+ MenuAdas {
+ id: menuAdas
+ }
+
+ MenuAudio {
+ id: menuAudio
+ }
+
+ MenuRadio {
+ id: menuRadio
+ }
+
+ }
+
+ GaussianBlur {
+ id:menuContentsBlur
+ anchors.fill:menuContentsClear
+ source: menuContentsClear
+ deviation: 4
+ radius: 8
+ samples: 16
+ visible: true
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation {
+ target: menuContentsClear
+ property: "opacity"
+ duration: 330
+ from:1
+ to:0
+ }
+
+ NumberAnimation {
+ target: menuContentsBlur
+ property: "opacity"
+ duration: 330
+ from:1
+ to:0
+ }
+ }
+
+ NumberAnimation{
+ target: menuContentsClear
+ property: "x"
+ duration:0
+ from:52
+ to:582
+ }
+ NumberAnimation{
+ target: menuContentsClear
+ property: "y"
+ duration:0
+ from:298
+ to:362
+ }
+
+ PropertyAnimation{
+ target: menuAudio
+ property: "mode"
+ duration:0
+ to:"adas"
+ }
+
+ PropertyAnimation{
+ target: menuRadio
+ property: "mode"
+ duration:0
+ to:"adas"
+ }
+
+ PropertyAnimation{
+ target: menuAdas
+ property: "mode"
+ duration:0
+ to:"adas"
+ }
+
+ PauseAnimation {
+ duration:891
+ }
+
+ ParallelAnimation{
+ NumberAnimation {
+ target: menuContentsClear
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ NumberAnimation {
+ target: menuContentsBlur
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimation
+ onStarted: rootItem.focus=false
+
+ PauseAnimation {
+ duration: 254
+ }
+
+ ParallelAnimation{
+ NumberAnimation {
+ target: menuContentsClear
+ property: "opacity"
+ duration: 330
+ from: 1
+ to: 0
+ }
+
+ NumberAnimation {
+ target: menuContentsBlur
+ property: "opacity"
+ duration: 330
+ from: 1
+ to: 0
+ }
+ }
+
+ PauseAnimation {
+ duration: 891
+ }
+
+ NumberAnimation{
+ target: menuContentsClear
+ property: "x"
+ duration: 0
+ from: 582
+ to: 52
+ }
+ NumberAnimation{
+ target: menuContentsClear
+ property: "y"
+ duration: 0
+ from: 362
+ to: 298
+ }
+
+ PropertyAnimation{
+ target: menuAdas
+ property: "mode"
+ duration: 0
+ to: "normal"
+ }
+
+ PropertyAnimation{
+ target: menuRadio
+ property: "mode"
+ duration: 0
+ to: "normal"
+ }
+
+ PropertyAnimation{
+ target: menuAudio
+ property: "mode"
+ duration: 0
+ to: "normal"
+ }
+
+ ParallelAnimation{
+ NumberAnimation {
+ target: menuContentsClear
+ property: "opacity"
+ duration: 330
+ from: 0
+ to: 1
+ }
+ NumberAnimation {
+ target: menuContentsBlur
+ property: "opacity"
+ duration: 330
+ from: 0
+ to: 1
+ }
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuFrame.qml b/GUIModel/Menu/MenuFrame.qml
new file mode 100644
index 0000000..2c1db60
--- /dev/null
+++ b/GUIModel/Menu/MenuFrame.qml
@@ -0,0 +1,417 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+
+Item{
+ /* public properties */
+ property alias icon: menuFrame.icon
+ property alias txt: menuFrame.txt
+ property alias position: menuFrame.position
+ property alias mode: menuFrame.mode
+
+ /* public functions */
+ function upScroll(){
+ menuFrame.upScroll()
+ }
+
+ function downScroll(){
+ menuFrame.downScroll()
+ }
+
+ function open(){
+ menuFrame.open()
+ }
+
+ function close(){
+ menuFrame.close()
+ }
+
+
+ Item{
+ id:menuFrame
+
+ property string icon: ""
+ property string txt: ""
+ property var position: -1
+ property var mode: "normal" /* normal or adas */
+
+ property double direction: +1 /* +1:Left -1:Right */
+ property int margin: 0
+
+ FontLoader { id: localFont; source: "qrc:/Fonts/Inter-Regular.ttf" }
+
+ onModeChanged: {
+ if(mode === "normal"){
+ direction = +1
+ margin = 0
+ } else if(mode === "adas"){
+ direction = -1
+ margin = 380
+ } else {
+ direction = +1
+ margin = 0
+ }
+
+ menuFrame.x = 0
+ menuFrameItem.resetPosition()
+ }
+
+ onPositionChanged: {
+ if(menuFrameItem.isInited === 0){
+ menuFrameItem.resetPosition()
+ menuFrameItem.isInited = 1
+ }
+ }
+
+
+ function upScroll(){
+ if(position === 0){
+ position = 5
+ }
+ else if(position === 1){
+ animationMenuScrollTo0.start()
+ position = 0
+ }
+ else if(position === 2){
+ animationMenuScrollTo1.start()
+ position = 1
+ }
+ else if(position === 3){
+ animationMenuScrollTo2.start()
+ position = 2
+ }
+ else if(position === 4){
+ animationMenuScrollTo3.start()
+ position = 3
+ }
+ else if(position === 5){
+ animationMenuScrollTo4.start()
+ position = 4
+ }
+ }
+
+ function downScroll(){
+ if(position === 0){
+ animationMenuScrollTo1.start()
+ position = 1
+ }
+ else if(position === 1){
+ animationMenuScrollTo2.start()
+ position = 2
+ }
+ else if(position === 2){
+ animationMenuScrollTo3.start()
+ position = 3
+ }
+ else if(position === 3){
+ animationMenuScrollTo4.start()
+ position = 4
+ }
+ else if(position === 4){
+ position = 5
+ }
+ else if(position === 5){
+ animationMenuScrollTo0.start()
+ position = 0
+ }
+ }
+
+ function open(){
+ animationMenuOpen.start()
+ }
+
+ function close(){
+ animationMenuClose.start()
+ }
+
+
+ Item{
+ id: menuFrameItem
+
+ property double direction: menuFrame.direction
+ property int margin: menuFrame.margin
+ property int isInited: 0
+
+ function resetPosition(){
+ if(position === 0){
+ menuFrameBgTop.opacity = 1.0
+ menuFrameBg.width = 460
+ menuFrameBg.height = 116*0.4
+ menuIcon.scale = 0.4
+ menuFrameBg.x = 0
+ menuIcon.x = 26 * 0.4 * menuFrameItem.direction + menuFrameItem.margin
+ menuText.scale = 0.4
+ menuText.x = 122 * 0.4 * menuFrameItem.direction + menuFrameItem.margin
+ menuFrameItem.opacity = 0
+ menuFrameItem.x = 100 * menuFrameItem.direction
+ menuFrameItem.y = -68
+ }
+ if(position === 1){
+ menuFrameBgTop.opacity = 1.0
+ menuFrameBg.width = 460
+ menuFrameBg.height = 116*0.5
+ menuFrameBg.x = 0
+ menuIcon.scale = 0.5
+ menuIcon.x = 26 * 0.5 * menuFrameItem.direction + menuFrameItem.margin
+ menuText.scale = 0.5
+ menuText.x = 122 * 0.5 * menuFrameItem.direction + menuFrameItem.margin
+ menuFrameItem.opacity = 1
+ menuFrameItem.x = 50 * menuFrameItem.direction
+ menuFrameItem.y = -48
+ }
+ if(position === 2){
+ menuFrameBgCenter.opacity = 1.0
+ menuFrameBg.width = 460
+ menuFrameBg.height = 116
+ menuFrameBg.x = 0
+ menuIcon.x = 26 * menuFrameItem.direction + menuFrameItem.margin
+ menuText.x = 122 * menuFrameItem.direction + menuFrameItem.margin
+ menuFrameItem.opacity = 1
+ menuFrameItem.x = 0
+ menuFrameItem.y = 0
+ }
+
+ if(position === 3){
+ menuFrameBgBottom.opacity = 1.0
+ menuFrameBg.width = 460 - 50
+ menuFrameBg.height = 74
+ if(menuFrameItem.direction === +1) {
+ menuFrameBg.x = 0
+ } else {
+ menuFrameBg.x = 50
+ }
+ menuIcon.scale = (74/116)
+ menuIcon.x = 26 * (74/116) * menuFrameItem.direction + menuFrameItem.margin
+ menuText.scale = (74/116)
+ menuText.x = 122 * (74/116) * menuFrameItem.direction + menuFrameItem.margin
+ menuFrameItem.opacity = 1
+ menuFrameItem.x = 100 * menuFrameItem.direction
+ menuFrameItem.y = 104
+ }
+ if(position === 4){
+ menuFrameBgBottom.opacity = 1.0
+ menuFrameBg.width = 460 - 50
+ menuFrameBg.height = 116*(0.7)
+ if(menuFrameItem.direction === +1) {
+ menuFrameBg.x = 0
+ } else {
+ menuFrameBg.x = 50
+ }
+ menuIcon.scale = (0.7)
+ menuIcon.x = 26 * (0.7) * menuFrameItem.direction + menuFrameItem.margin
+ menuText.scale = (0.7)
+ menuText.x = 122 * (0.7) *menuFrameItem.direction + menuFrameItem.margin
+ menuFrameItem.opacity = 0
+ menuFrameItem.x = 160 * menuFrameItem.direction
+ menuFrameItem.y = 140
+ }
+ if(position === 5){
+ menuFrameBgBottom.opacity = 1.0
+ menuFrameBg.width = 460 - 50
+ menuFrameBg.height = 116*(0.7)
+ if(menuFrameItem.direction === +1) {
+ menuFrameBg.x = 0
+ } else {
+ menuFrameBg.x = 50
+ }
+ menuIcon.scale = (0.7)
+ menuIcon.x = 26 * (0.7) * menuFrameItem.direction + menuFrameItem.margin
+ menuText.scale = (0.7)
+ menuText.x = 122 * (0.7) * menuFrameItem.direction + menuFrameItem.margin
+ menuFrameItem.opacity = 0
+ menuFrameItem.x = 160 * menuFrameItem.direction
+ menuFrameItem.y = 140
+ }
+ }
+
+
+ Item{
+ id: menuFrameBg
+ x:0
+ y:0
+ width: 460
+ height: 116
+ Image{
+ id: menuFrameBgTop
+ anchors.fill: parent
+ source: "qrc:/Images/NormalView/MENU/menu_panel1.png"
+ opacity: 0
+ }
+ Image{
+ id: menuFrameBgCenter
+ anchors.fill: parent
+ source: "qrc:/Images/NormalView/MENU/menu_panel2.png"
+ opacity: 0
+ }
+ Image{
+ id: menuFrameBgBottom
+ anchors.fill: parent
+ source: "qrc:/Images/NormalView/MENU/menu_panel3.png"
+ opacity: 0
+ }
+ }
+
+ Image{
+ id: menuIcon
+ source:menuFrame.icon
+ x: 26 * direction + margin
+ width: 76
+ height: 90
+ anchors.verticalCenter: menuFrameBg.verticalCenter
+ }
+
+ Text {
+ id: menuText
+ x: 122 * direction + margin
+ width: 68
+ height: 26
+ y:46
+ text: menuFrame.txt
+ font { family: localFont.name; pointSize: 20; capitalization: Font.Capitalize }
+ anchors.verticalCenter: menuFrameBg.verticalCenter
+ color: "white"
+
+ }
+
+ MenuFrameScrollTo0{
+ id:animationMenuScrollTo0
+ scrollDuration: 330
+ }
+
+ MenuFrameScrollTo1{
+ id:animationMenuScrollTo1
+ scrollDuration: 330
+ }
+
+ MenuFrameScrollTo2 {
+ id:animationMenuScrollTo2
+ scrollDuration: 330
+ }
+
+ MenuFrameScrollTo3 {
+ id:animationMenuScrollTo3
+ scrollDuration: 330
+ }
+
+ MenuFrameScrollTo4{
+ id:animationMenuScrollTo4
+ scrollDuration: 330
+ }
+
+
+ /* Open */
+ SequentialAnimation{
+ id:animationMenuOpen
+
+ NumberAnimation{
+ target: menuFrame
+ property: "x"
+ to: 360 * menuFrameItem.direction
+ duration: 0
+ }
+
+ PropertyAnimation{
+ target: menuFrame
+ property: "visible"
+ from:false
+ to: true
+ duration: 0
+ }
+
+ PauseAnimation {
+ duration: if(position === 0){
+ 0
+ }else if(position === 1){
+ 48
+ }else if(position === 2){
+ 96
+ }else if(position === 3){
+ 144
+ }else if(position === 4){
+ 0
+ }else if(position === 5){
+ 0
+ }
+ }
+
+ NumberAnimation{
+ target: menuFrame
+ property: "x"
+ from: 360 * menuFrameItem.direction
+ to: 0
+ duration: 260
+ easing.type: Easing.InQuad
+ }
+
+ }
+
+ SequentialAnimation{
+ id:animationMenuClose
+
+ NumberAnimation{
+ target: menuFrame
+ property: "x"
+ to: 0
+ duration: 0
+ }
+
+ PauseAnimation {
+ duration: if(position === 0){
+ 0
+ }else if(position === 1){
+ 48
+ }else if(position === 2){
+ 96
+ }else if(position === 3){
+ 144
+ }else if(position === 4){
+ 0
+ }else if(position === 5){
+ 0
+ }
+ }
+
+ NumberAnimation{
+ target: menuFrame
+ property: "x"
+ from: 0
+ to: 360 * menuFrameItem.direction
+ duration: 260
+ easing.type: Easing.OutQuad
+ }
+
+ PropertyAnimation{
+ target: menuFrame
+ property: "visible"
+ from: true
+ to: false
+ duration: 0
+ }
+ }
+
+ }
+
+
+ }
+}
diff --git a/GUIModel/Menu/MenuFrameScrollTo0.qml b/GUIModel/Menu/MenuFrameScrollTo0.qml
new file mode 100644
index 0000000..b5ea0c3
--- /dev/null
+++ b/GUIModel/Menu/MenuFrameScrollTo0.qml
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+ParallelAnimation{
+ property int scrollDuration: 240
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+ PropertyAnimation{
+ target: menuFrameBgTop
+ property: "opacity"
+ to: 1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgCenter
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgBottom
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "width"
+ to: 460
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "height"
+ to: 116 * 0.4
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "x"
+ to: 0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "scale"
+ to:0.4
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "x"
+ to: 26 * 0.4 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "scale"
+ to: 0.4
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "x"
+ to: 122 * 0.4 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameItem
+ properties: "opacity"
+ to: 0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "x"
+ to: 100 * menuFrameItem.direction
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrameItem
+ property: "y"
+ to: -68
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrame
+ property: "z"
+ to: 0
+ duration: 0
+ }
+}
diff --git a/GUIModel/Menu/MenuFrameScrollTo1.qml b/GUIModel/Menu/MenuFrameScrollTo1.qml
new file mode 100644
index 0000000..386de59
--- /dev/null
+++ b/GUIModel/Menu/MenuFrameScrollTo1.qml
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+ParallelAnimation{
+ property int scrollDuration: 240
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+
+ PropertyAnimation{
+ target: menuFrameBgTop
+ property: "opacity"
+ to: 1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgCenter
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgBottom
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "width"
+ to: 460
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "height"
+ to: 58
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "x"
+ to: 0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "scale"
+ to: 0.5
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "x"
+ to: 26 * 0.5 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "scale"
+ to: 0.5
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "x"
+ to: 122 * 0.5 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "opacity"
+ to: 1
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "x"
+ to: 50 * menuFrameItem.direction
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrameItem
+ property: "y"
+ to: -48
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrame
+ property: "z"
+ to: 0.2
+ duration: 0
+ }
+}
diff --git a/GUIModel/Menu/MenuFrameScrollTo2.qml b/GUIModel/Menu/MenuFrameScrollTo2.qml
new file mode 100644
index 0000000..c31bf4d
--- /dev/null
+++ b/GUIModel/Menu/MenuFrameScrollTo2.qml
@@ -0,0 +1,127 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+ParallelAnimation{
+ property int scrollDuration: 240
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+
+ PropertyAnimation{
+ target: menuFrameBgTop
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgCenter
+ property: "opacity"
+ to: 1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgBottom
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "width"
+ to: 460
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "height"
+ to: 116
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "x"
+ to: 0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "scale"
+ to:1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "x"
+ to:26 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "scale"
+ to:1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "x"
+ to: 122 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "opacity"
+ to: 1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "x"
+ to:0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrameItem
+ property: "y"
+ to:0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrame
+ property: "z"
+ to: 0.4
+ duration: 0
+ }
+}
diff --git a/GUIModel/Menu/MenuFrameScrollTo3.qml b/GUIModel/Menu/MenuFrameScrollTo3.qml
new file mode 100644
index 0000000..dc180eb
--- /dev/null
+++ b/GUIModel/Menu/MenuFrameScrollTo3.qml
@@ -0,0 +1,133 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+ParallelAnimation{
+ property int scrollDuration: 240
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+
+ PropertyAnimation{
+ target: menuFrameBgTop
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgCenter
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgBottom
+ property: "opacity"
+ to: 1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "width"
+ to: 460 - 50
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "height"
+ to: 74
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "x"
+ to: if(menuFrameItem.direction ===1){
+ 0
+ }else{
+ 50
+ }
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+
+ NumberAnimation{
+ target: menuIcon
+ properties: "scale"
+ to:74/116
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "x"
+ to:26 * (74/116) * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "scale"
+ to:74/116
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "x"
+ to:122 * (74/116) * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "opacity"
+ to: 1
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "x"
+ to: 100 * menuFrameItem.direction
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+
+ NumberAnimation {
+ target: menuFrameItem
+ property: "y"
+ to: 104
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrame
+ property: "z"
+ to: 0.6
+ duration: 0
+ }
+}
diff --git a/GUIModel/Menu/MenuFrameScrollTo4.qml b/GUIModel/Menu/MenuFrameScrollTo4.qml
new file mode 100644
index 0000000..9d4337c
--- /dev/null
+++ b/GUIModel/Menu/MenuFrameScrollTo4.qml
@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+ParallelAnimation{
+ property int scrollDuration: 240
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+
+ PropertyAnimation{
+ target: menuFrameBgTop
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgCenter
+ property: "opacity"
+ to: 0.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ PropertyAnimation{
+ target: menuFrameBgBottom
+ property: "opacity"
+ to: 1.0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "width"
+ to: 460 - 50
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "height"
+ to: 116 * 0.7
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameBg
+ properties: "x"
+ to: if(menuFrameItem.direction ===1){
+ 0
+ }else{
+ 50
+ }
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "scale"
+ to:0.7
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuIcon
+ properties: "x"
+ to: 26 * 0.7 * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "scale"
+ to:0.7
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuText
+ properties: "x"
+ to: 122 * (0.7) * menuFrameItem.direction + menuFrameItem.margin
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "opacity"
+ to: 0
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation{
+ target: menuFrameItem
+ properties: "x"
+ to: 160 * menuFrameItem.direction
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrameItem
+ property: "y"
+ to: 140
+ duration: scrollDuration
+ easing.type: Easing.InOutSine
+ }
+ NumberAnimation {
+ target: menuFrame
+ property: "z"
+ to: 1
+ duration: 0
+ }
+}
diff --git a/GUIModel/Menu/MenuMain.qml b/GUIModel/Menu/MenuMain.qml
new file mode 100644
index 0000000..7cb9a02
--- /dev/null
+++ b/GUIModel/Menu/MenuMain.qml
@@ -0,0 +1,246 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item{
+ id: menuMain
+
+ /* public propeties */
+ readonly property alias index: menuFrames.index
+
+ /* public functions */
+ function incrementIndex(){
+ menuFrames.incrementIndex()
+ }
+
+ function decrementIndex(){
+ menuFrames.decrementIndex()
+ }
+
+ function open(){
+ menuFrames.open()
+ }
+
+ function close(){
+ menuFrames.close()
+ }
+
+ function startAnimationNormalToAdas(){
+ normalToAdasAnimation.start()
+ }
+
+ function startAnimationMapToNormal(){
+ mapToNormalAnimation.start()
+ }
+
+ Item {
+ id: menuFrames
+ x: 326
+ y: 468
+ width: 500; height:280
+ layer.textureMirroring: ShaderEffectSource.MirrorVertically
+ property int index: 0 /* 0:radio 1:ADAS 2:audio */
+ property var mode: "normal" /* normal or adas */
+
+
+ function incrementIndex(){
+ menuFrame0.upScroll()
+ menuFrame1.upScroll()
+ menuFrame2.upScroll()
+ menuFrame3.upScroll()
+ menuFrame4.upScroll()
+ menuFrame5.upScroll()
+
+ index++
+ if(index === 3) index = 0
+ }
+
+ function decrementIndex(){
+ menuFrame0.downScroll()
+ menuFrame1.downScroll()
+ menuFrame2.downScroll()
+ menuFrame3.downScroll()
+ menuFrame4.downScroll()
+ menuFrame5.downScroll()
+
+ index--
+ if(index === -1) index = 2
+ }
+
+ function open(){
+ menuFrame0.open()
+ menuFrame1.open()
+ menuFrame2.open()
+ menuFrame3.open()
+ menuFrame4.open()
+ menuFrame5.open()
+ }
+
+ function close(){
+ menuFrame0.close()
+ menuFrame1.close()
+ menuFrame2.close()
+ menuFrame3.close()
+ menuFrame4.close()
+ menuFrame5.close()
+ }
+
+ MenuFrame{
+ id: menuFrame0
+ position: 0
+ mode: menuFrames.mode
+ icon: "qrc:/Images/NormalView/MENU/ADAS/L_icon_adas.png"
+ txt: "ADAS"
+ }
+
+ MenuFrame{
+ id: menuFrame1
+ position: 1
+ mode: menuFrames.mode
+ icon: "qrc:/Images/NormalView/MENU/MUSIC/L_icon_music.png"
+ txt: "MUSIC"
+ }
+
+ MenuFrame{
+ id: menuFrame2
+ position: 2
+ mode: menuFrames.mode
+ icon: "qrc:/Images/NormalView/MENU/RADIO/L_icon_radio.png"
+ txt: "RADIO"
+ }
+
+ MenuFrame{
+ id: menuFrame3
+ position: 3
+ mode: menuFrames.mode
+ icon: "qrc:/Images/NormalView/MENU/ADAS/L_icon_adas.png"
+ txt: "ADAS"
+ }
+
+ MenuFrame{
+ id: menuFrame4
+ position: 4
+ mode: menuFrames.mode
+ icon: "qrc:/Images/NormalView/MENU/MUSIC/L_icon_music.png"
+ txt: "MUSIC"
+ }
+
+ MenuFrame{
+ id: menuFrame5
+ position: 5
+ mode: menuFrames.mode
+ icon: "qrc:/Images/NormalView/MENU/RADIO/L_icon_radio.png"
+ txt: "RADIO"
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ NumberAnimation {
+ target: menuFrames
+ property: "opacity"
+ duration: 330
+ from:1
+ to:0
+ }
+ PauseAnimation {
+ duration:891
+ }
+ PropertyAnimation {
+ target: menuFrames
+ property: "mode"
+ duration: 0
+ to: "adas"
+ }
+ NumberAnimation {
+ target: menuFrames
+ property: "x"
+ duration: 0
+ to:80 + 444
+ }
+ NumberAnimation {
+ target: menuFrames
+ property: "y"
+ duration: 0
+ to:498
+ }
+ NumberAnimation {
+ target: menuFrames
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimation
+ onStarted: rootItem.focus=false
+
+ PauseAnimation {
+ duration: 254
+ }
+ ParallelAnimation{
+ NumberAnimation {
+ target: menuFrames
+ property: "opacity"
+ duration: 330
+ from:1
+ to:0
+ }
+ PauseAnimation {
+ duration:891
+ }
+ }
+
+ PropertyAnimation {
+ target: menuFrames
+ property: "mode"
+ duration: 0
+ to: "normal"
+ }
+ NumberAnimation {
+ target: menuFrames
+ property: "x"
+ duration: 0
+ to:326
+ }
+ NumberAnimation {
+ target: menuFrames
+ property: "y"
+ duration: 0
+ to:468
+ }
+
+ NumberAnimation {
+ target: menuFrames
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuRadio.qml b/GUIModel/Menu/MenuRadio.qml
new file mode 100644
index 0000000..df58b21
--- /dev/null
+++ b/GUIModel/Menu/MenuRadio.qml
@@ -0,0 +1,108 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item {
+ id: menuRadio
+ visible:false
+ width: 826
+ height: 358
+ property string mode: "normal"
+
+ function incrementIndex(){
+ radioPanels.incrementIndex()
+ }
+
+ function decrementIndex(){
+ radioPanels.decrementIndex()
+ }
+
+ Item{
+ id:radioPanels
+
+ property int index: 0
+
+ function incrementIndex(){
+ index++
+ if(index === 3) index = 0
+
+ if(index === 0){
+ radioPanel2.slideOut(+1) /*Slide out to right*/
+ radioPanel0.slideIn(+1) /*Slide in from left*/
+ }else if(index === 1){
+ radioPanel0.slideOut(+1)
+ radioPanel1.slideIn(+1)
+ }else if(index === 2){
+ radioPanel1.slideOut(+1)
+ radioPanel2.slideIn(+1)
+ }
+ }
+
+ function decrementIndex(){
+ index--
+ if(index === -1) index = 2
+
+ if(index === 2){
+ radioPanel0.slideOut(-1) /*Slide out to left*/
+ radioPanel2.slideIn(-1) /*Slide in from right*/
+ }else if(index === 1){
+ radioPanel2.slideOut(-1)
+ radioPanel1.slideIn(-1)
+ }else if(index === 0){
+ radioPanel1.slideOut(-1)
+ radioPanel0.slideIn(-1)
+ }
+ }
+
+
+ MenuRadioPanel{
+ id: radioPanel0
+ mode: menuRadio.mode
+ icon: "qrc:/Images/ADASView/MENU/radio_icon_FM.png"
+ title: "InterFM"
+ channel: "89.7MHz"
+ bg: "qrc:/Images/ADASView/MENU/radio_blur_FM.png"
+ panelVisible: true
+ }
+ MenuRadioPanel{
+ id: radioPanel1
+ mode: menuRadio.mode
+ icon: "qrc:/Images/ADASView/MENU/radio_icon_FM.png"
+ title: "J-WAVE"
+ channel: "81.3MHz"
+ bg: "qrc:/Images/ADASView/MENU/radio_blur_FM.png"
+ panelVisible: false
+ }
+ MenuRadioPanel{
+ id: radioPanel2
+ mode: menuRadio.mode
+ icon: "qrc:/Images/ADASView/MENU/radio_icon_AM.png"
+ title: "TBS Radio"
+ channel: "954kHz"
+ bg: "qrc:/Images/ADASView/MENU/radio_blur_AM.png"
+ panelVisible: false
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuRadioPanel.qml b/GUIModel/Menu/MenuRadioPanel.qml
new file mode 100644
index 0000000..62f8295
--- /dev/null
+++ b/GUIModel/Menu/MenuRadioPanel.qml
@@ -0,0 +1,338 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+
+Item{
+ id: menuRadioPanelRoot
+
+ /* public properties */
+ property alias icon: radioPanel.icon
+ property alias title: radioPanel.title
+ property alias channel: radioPanel.channel
+ property alias bg: radioPanel.bg
+ property alias mode: radioPanel.mode
+ property alias panelVisible: radioPanel.visible
+ visible: true
+
+ /* public functions */
+ function slideIn(direction){
+ radioPanel.slideIn(direction)
+ }
+
+ function slideOut(direction){
+ radioPanel.slideOut(direction)
+ }
+
+ Item {
+ id: radioPanel
+ width: 826
+ height: 358
+ property url icon: ""
+ property string title: ""
+ property string channel: ""
+ property url bg: ""
+
+ property var mode: "normal" /* normal or adas */
+ property double slideDirection: 1 /* +1:Right -1:Left */
+
+ FontLoader { id: localFont; source: "qrc:/Fonts/Inter-Regular.ttf" }
+
+ onModeChanged: {
+ if(mode === "normal"){
+ adasToNormalAnimationRadio.start()
+ }else if(mode === "adas"){
+ normalToAdasAnimationRadio.start()
+ }
+ }
+
+ function slideIn(direction){
+ slideDirection = direction
+
+ if(delayTimer.running){
+ delayTimer.stop()
+ }
+
+ inAnimation.start()
+
+ delayTimer.start()
+ }
+
+ function slideOut(direction){
+ slideDirection = direction
+ if(delayTimer.running){
+ delayTimer.stop()
+ }
+
+ outAnimation.start()
+ }
+
+
+ Timer {
+ id: delayTimer
+ interval: 330
+ repeat: false
+ running: false
+ onTriggered: {
+ blurFadeInAnimation.start()
+ }
+ }
+
+ Item{
+ width:826
+ height: 358
+
+ Image {
+ id: bgImage
+ width:826
+ height:358
+ source: bg
+ }
+ Image {
+ id: iconImage
+ width: 112
+ height: 112
+ x:172
+ y:194
+ source: icon
+ }
+ Text {
+ id: titleText
+ y:226
+ color: "white"
+ font { family: localFont.name; pointSize: 20; capitalization: Font.Capitalize }
+ anchors.horizontalCenterOffset: -59
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: title
+ property var anchor: "center"
+
+ onAnchorChanged: {
+ if(anchor === "center"){
+ changeAnchorsToCenter()
+ }else if(anchor === "left"){
+ changeAnchorsToLeft()
+ }
+ }
+
+ function changeAnchorsToCenter(){
+ anchors.leftMargin = 0
+ anchors.left = undefined
+ anchors.horizontalCenter = parent.horizontalCenter
+ anchors.horizontalCenterOffset = -59
+ }
+
+ function changeAnchorsToLeft(){
+ anchors.horizontalCenterOffset = 0
+ anchors.horizontalCenter = undefined
+ anchors.left = parent.left
+ anchors.leftMargin = 302
+ }
+ }
+ Text {
+ id:channelName
+ y:256
+ color: "white"
+ font { family: localFont.name; pointSize: 20; capitalization: Font.Capitalize }
+ anchors.horizontalCenterOffset: -59
+ anchors.horizontalCenter: parent.horizontalCenter
+ text: channel
+ property var anchor: "center"
+
+ onAnchorChanged: {
+ if(anchor === "center"){
+ changeAnchorsToCenter()
+ }else if(anchor === "left"){
+ changeAnchorsToLeft()
+ }
+ }
+
+ function changeAnchorsToCenter(){
+ anchors.leftMargin = 0
+ anchors.left = undefined
+ anchors.horizontalCenter = parent.horizontalCenter
+ anchors.horizontalCenterOffset = -59
+ }
+
+ function changeAnchorsToLeft(){
+ anchors.horizontalCenterOffset = 0
+ anchors.horizontalCenter = undefined
+ anchors.left = parent.left
+ anchors.leftMargin = 302
+ }
+ }
+ }
+
+ PropertyAnimation {
+ id:outAnimation
+ target: radioPanel
+ property: "visible"
+ duration: 0
+ to: false
+ }
+
+ ParallelAnimation{
+ id:inAnimation
+
+ NumberAnimation {
+ target: bgImage
+ property: "opacity"
+ duration: 0
+ to:0
+ }
+
+ PropertyAnimation {
+ target: radioPanel
+ property: "visible"
+ duration: 0
+ to: true
+ }
+ NumberAnimation {
+ target: iconImage
+ property: "x"
+ duration: 260
+ from:if(radioPanel.mode === "normal"){
+ 301 - 20 * radioPanel.slideDirection
+ }else if(mode === "adas"){
+ 172 - 20 * radioPanel.slideDirection
+ }
+ to: if(radioPanel.mode === "normal"){
+ 301
+ }else if(radioPanel.mode === "adas"){
+ 172
+ }
+ easing.type: Easing.OutSine
+ }
+ }
+
+
+ PropertyAnimation {
+ id: blurFadeInAnimation
+
+ target: bgImage
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ easing.type: Easing.Linear
+ }
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimationRadio
+
+ PropertyAnimation {
+ target: bgImage
+ property: "visible"
+ duration: 0
+ to:1
+ }
+
+ PropertyAnimation{
+ target: iconImage
+ property: "x"
+ duration: 0
+ to: 172
+ }
+ PropertyAnimation{
+ target: iconImage
+ property: "y"
+ duration: 0
+ to: 194
+ }
+
+ PropertyAnimation {
+ target: titleText
+ property: "anchor"
+ duration: 0
+ to: "left"
+ }
+ PropertyAnimation{
+ target: titleText
+ property: "y"
+ duration: 0
+ to: 226
+ }
+
+ PropertyAnimation {
+ target: channelName
+ property: "anchor"
+ duration: 0
+ to: "left"
+ }
+ PropertyAnimation{
+ target: channelName
+ property: "y"
+ duration: 0
+ to: 256
+ }
+ }
+
+ SequentialAnimation{
+ id:adasToNormalAnimationRadio
+
+ PropertyAnimation {
+ target: bgImage
+ property: "visible"
+ duration: 0
+ to:0
+ }
+
+ PropertyAnimation{
+ target: iconImage
+ property: "x"
+ duration: 0
+ to: 301
+ }
+ PropertyAnimation{
+ target: iconImage
+ property: "y"
+ duration: 0
+ to: 156
+ }
+
+ PropertyAnimation{
+ target: titleText
+ property: "y"
+ duration: 0
+ to: 308
+ }
+ PropertyAnimation {
+ target: titleText
+ property: "anchor"
+ duration: 0
+ to: "center"
+ }
+
+ PropertyAnimation{
+ target: channelName
+ property: "y"
+ duration: 0
+ to: 336
+ }
+ PropertyAnimation {
+ target: channelName
+ property: "anchor"
+ duration: 0
+ to: "center"
+ }
+ }
+}
diff --git a/GUIModel/Menu/MenuShade.qml b/GUIModel/Menu/MenuShade.qml
new file mode 100644
index 0000000..a8a6e82
--- /dev/null
+++ b/GUIModel/Menu/MenuShade.qml
@@ -0,0 +1,165 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.0
+import QtGraphicalEffects 1.0
+import QtQuick.Shapes 1.11
+
+Item{
+ /* public function */
+ function startAnimationNormalToAdas(){
+ normalToAdasAnimation.start()
+ }
+
+ function startAnimationMapToNormal(){
+ mapToNormalAnimation.start()
+ }
+
+ Item{
+ id: menuShades
+ Item{
+ id: menuShadeNormal
+ visible: true
+
+ Image{
+ source: "qrc:/Images/NormalView/MENU/menu_shade.png"
+ x: 522
+ y: 390
+ width: 444
+ height: 330
+ }
+
+ Rectangle{
+ color: "black"
+ x: 960
+ y: 390
+ width: 300
+ height: 300
+ }
+ }
+
+ Item{
+ id: menuShadeAdas
+ visible: false
+
+ Image{
+ source: "qrc:/Images/ADASView/MENU/menu_shade.png"
+ x: 436
+ y: 360
+ width: 444
+ height: 332
+
+ }
+
+ Rectangle{
+ color: "black"
+ x: 100
+ y: 400
+ width: 440
+ height: 300
+ }
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ NumberAnimation {
+ target: menuShades
+ property: "opacity"
+ duration: 330
+ from:1
+ to: 0
+ }
+ PropertyAnimation{
+ target: menuShadeNormal
+ property: "visible"
+ duration: 0
+ from: true
+ to: false
+ }
+ PropertyAnimation{
+ target: menuShadeAdas
+ property:"visible"
+ duration: 0
+ from: false
+ to: true
+ }
+
+ PauseAnimation {
+ duration: 891
+ }
+
+ NumberAnimation {
+ target: menuShades
+ property: "opacity"
+ duration: 330
+ from: 0
+ to: 1
+ }
+ }
+
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+
+ PauseAnimation {
+ duration: 254
+ }
+
+ NumberAnimation {
+ target: menuShades
+ property: "opacity"
+ duration: 330
+ from: 1
+ to: 0
+ }
+ PropertyAnimation{
+ target: menuShadeNormal
+ property: "visible"
+ duration: 0
+ from: false
+ to: true
+ }
+ PropertyAnimation{
+ target: menuShadeAdas
+ property: "visible"
+ duration: 0
+ from: true
+ to: false
+ }
+
+ PauseAnimation {
+ duration: 891
+ }
+
+ NumberAnimation {
+ target: menuShades
+ property: "opacity"
+ duration: 330
+ from: 0
+ to: 1
+ }
+ }
+ }
+
+}
diff --git a/GUIModel/Meter/ChargeGuage.qml b/GUIModel/Meter/ChargeGuage.qml
new file mode 100644
index 0000000..7331727
--- /dev/null
+++ b/GUIModel/Meter/ChargeGuage.qml
@@ -0,0 +1,272 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: chargeGuage
+ x:666
+ y:97
+ width:588
+ height:588
+ property real chargeValue
+
+ readonly property real chargeGuageMax: 100
+ readonly property real chargeGuageMin: 0
+
+ onChargeValueChanged: {
+ limitChargeValue();
+ effectChr.angleBase = (-0.45 * chargeValue*Math.PI/180)+effectChr.angle
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ function limitChargeValue(){
+ if(chargeValue > chargeGuageMax){
+ chargeValue = chargeGuageMax
+ }else if(chargeValue < chargeGuageMin){
+ chargeValue = chargeGuageMin
+ }
+ }
+
+ Item{
+ id: chrGuageGroup
+ width:588
+ height:588
+ Item {
+ id: chrGuage
+ width:588
+ height:588
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ visible: false
+ Image{
+ id: chrGuageImg
+ source: "qrc:/Images/NormalView/METER/charge_guage.ktx"
+ width:588
+ height:588
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ visible: true
+ }
+ Image {
+ id: chrEffect
+ source: ""
+ width:588
+ height:588
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ visible: true
+ }
+ }
+ ShaderEffect{
+ id: effectChr
+ anchors.fill: parent
+ visible: true
+ blending: true
+ supportsAtlasTextures: true
+ property real angleBase: -pi*1/2
+ property real angle:-pi*1/2
+ property var src: ShaderEffectSource{
+ sourceItem: chrGuage
+ live: false
+ }
+
+ readonly property real pi: 3.1415926535
+
+ vertexShader: "qrc:/Shaders/vert/guageMask.vert"
+ fragmentShader:"qrc:/Shaders/frag/guageMask.frag"
+ }
+ }
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ SequentialAnimation{
+ NumberAnimation{
+ target: chrGuageGroup
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:1.0
+ to:0.0
+ }
+ PropertyAnimation{
+ target: chrGuageGroup
+ property: "visible"
+ duration: 0
+ easing.type: Easing.InOutSine
+ from:true
+ to:false
+ }
+ }
+
+ ParallelAnimation{
+ /* down size */
+ NumberAnimation{
+ target: chargeGuage
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1
+ to:0.75
+ }
+
+ /* translation */
+ PathAnimation{
+ target: chargeGuage
+ anchorPoint: Qt.point(chargeGuage.width/2, chargeGuage.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 960; startY: 391
+ PathLine { x: 540; y: 402 }
+ }
+ }
+ PropertyAnimation{
+ target: chrGuageImg
+ property: "source"
+ to: "qrc:/Images/ADASView/METER/chr_wave.png"
+ duration: 0
+ }
+ PropertyAnimation{
+ target: chrEffect
+ property: "source"
+ to: "qrc:/Images/ADASView/METER/chr_glow.png"
+ duration: 0
+ }
+ }
+ PauseAnimation{
+ duration: 396
+ }
+ PropertyAnimation{
+ target: chrGuageGroup
+ property: "visible"
+ to: true
+ duration: 0
+ }
+ PropertyAnimation{
+ target: chrGuageGroup
+ property: "opacity"
+ to: 1
+ duration: 198
+ }
+ }
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+ PropertyAnimation{
+ target: chrGuageGroup
+ property: "opacity"
+ to: 0
+ duration: 198
+ }
+ PropertyAnimation{
+ target: chrGuageGroup
+ property: "visible"
+ to: true
+ duration: 0
+ }
+ PauseAnimation {
+ duration: 254 + 330
+ }
+
+
+ ParallelAnimation{
+ /* scaling */
+ NumberAnimation{
+ target: chargeGuage
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.75
+ to:1.0
+ }
+
+ /* slide */
+ PathAnimation{
+ target: chargeGuage
+ anchorPoint: Qt.point(chargeGuage.width/2, chargeGuage.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 540; startY: 402
+ PathLine { x: 960; y: 391 }
+ }
+ }
+ PropertyAnimation{
+ target: chrGuageImg
+ property: "source"
+ to: "qrc:/Images/NormalView/METER/charge_guage.ktx"
+ duration: 0
+ }
+ PropertyAnimation{
+ target: chrEffect
+ property: "source"
+ to: ""
+ duration: 0
+ }
+ }
+
+ SequentialAnimation{
+ PropertyAnimation{
+ target: chrGuageGroup
+ property: "visible"
+ duration: 0
+ easing.type: Easing.InOutSine
+ from:false
+ to:true
+ }
+
+ NumberAnimation{
+ target: chrGuageGroup
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:0.0
+ to:1.0
+ }
+ }
+ PauseAnimation {
+ duration: 330
+ }
+ }
+}
diff --git a/GUIModel/Meter/DigitalSpeed.qml b/GUIModel/Meter/DigitalSpeed.qml
new file mode 100644
index 0000000..107962a
--- /dev/null
+++ b/GUIModel/Meter/DigitalSpeed.qml
@@ -0,0 +1,302 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item{
+ id: digitalSpeed
+ property real speedValue
+
+ readonly property real digitalSpeedMax: 300
+ readonly property real digitalSpeedMin: 0
+
+ onSpeedValueChanged: {
+ updateSpeedValue();
+ updateSpeedNumPosition();
+ updateSpeedNumVisible();
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ function updateSpeedValue(){
+ digitalSpeedParts.speedValue1 = speedValue%10
+ digitalSpeedParts.speedValue10 = (speedValue/10)%10
+ digitalSpeedParts.speedValue100 = (speedValue/100)%10
+ }
+
+ function updateSpeedNumPosition(){
+ if((0 <= speedValue) && (speedValue < 10)){
+ speedNum1.x = 93
+ }else if((10 <= speedValue) && (speedValue < 100)){
+ speedNum1.x = 137
+ speedNum10.x = 47
+ }else if(100 <= speedValue){
+ speedNum1.x = 180
+ speedNum10.x = 90
+ }
+ }
+
+ function updateSpeedNumVisible(){
+ if((digitalSpeedMin <= speedValue) && (speedValue < 10)){
+ speedNum1.visible = true
+ speedNum10.visible = false
+ speedNum100.visible = false
+ }else if((10 <= speedValue) && (speedValue < 100)){
+ speedNum1.visible = true
+ speedNum10.visible = true
+ speedNum100.visible = false
+ }else if((100 <= speedValue) && (speedValue <= digitalSpeedMax)){
+ speedNum1.visible = true
+ speedNum10.visible = true
+ speedNum100.visible = true
+ }else{
+ speedNum1.visible = false
+ speedNum10.visible = false
+ speedNum100.visible = false
+ }
+ }
+
+ Item{
+ id:digitalSpeedParts
+ property int speedValue1
+ property int speedValue10
+ property int speedValue100
+
+ Image{
+ id:ring4
+ source: "qrc:/Images/NormalView/METER/ring4.ktx"
+ x:762
+ y:200
+ width:396
+ height:395
+ }
+
+ Image{
+ id:speedUnit
+ source: "qrc:/Images/NormalView/SPEED/speed_unit.png"
+ x:907
+ y:457
+ width:97
+ height:59
+ }
+
+ Item{
+ id:speedNum
+
+ x:816
+ y:324
+ Image{
+ id:speedNum1
+ source: "qrc:/Images/NormalView/SPEED/speed_num1-" + digitalSpeedParts.speedValue1 + ".png"
+ x:93
+ width:98
+ height:120
+ visible: true
+ }
+ Image{
+ id:speedNum10
+ source: "qrc:/Images/NormalView/SPEED/speed_num1-" + digitalSpeedParts.speedValue10 + ".png"
+ width:98
+ height:120
+ visible: false
+ }
+ Image{
+ id:speedNum100
+ source: "qrc:/Images/NormalView/SPEED/speed_num1-" + digitalSpeedParts.speedValue100 + ".png"
+ width:98
+ height:120
+ visible: false
+ }
+ }
+
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ /* remove background */
+ SequentialAnimation{
+ NumberAnimation{
+ target: ring4
+ property: "scale"
+ duration: 330
+ easing.type: Easing.Linear
+ from:1.0
+ to:0
+ }
+
+ PropertyAnimation{
+ target: ring4
+ property: "visible"
+ duration: 0
+ from:true
+ to:false
+ }
+ }
+
+ ParallelAnimation{
+ /* scaling */
+ NumberAnimation {
+ target: speedNum
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1
+ to:0.725
+ }
+
+ /* translation */
+ PathAnimation{
+ target: speedNum
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 816; startY: 324
+ PathLine { x: 860; y: 41 }
+ }
+ }
+
+ /* scaling */
+ NumberAnimation {
+ target: speedUnit
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1
+ to:0.73
+ }
+
+ /* slide */
+ PathAnimation{
+ target: speedUnit
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 907; startY: 457
+ PathLine { x: 914; y: 128 }
+ }
+ }
+ }
+
+ }
+
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+ PauseAnimation {
+ duration: 254
+ }
+
+ PauseAnimation {
+ duration: 330
+ }
+
+ ParallelAnimation{
+ /* scaling */
+ NumberAnimation {
+ target: speedNum
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.725
+ to:1.00
+ }
+
+ /* translation */
+ PathAnimation{
+ target: speedNum
+ duration: 891
+ easing.type: meterParts.easing
+ path: Path {
+ startX: 860; startY: 41
+ PathLine { x: 816; y: 324 }
+ }
+ }
+
+ /* scaling */
+ NumberAnimation {
+ target: speedUnit
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.73
+ to:1.00
+ }
+
+ /* translation */
+ PathAnimation{
+ target: speedUnit
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 914; startY: 128
+ PathLine { x: 907; y: 457 }
+ }
+ }
+ }
+
+ /* visible backgournd */
+ SequentialAnimation{
+ PropertyAnimation{
+ target: ring4
+ property: "visible"
+ duration: 0
+ from:false
+ to:true
+ }
+
+ NumberAnimation{
+ target: ring4
+ property: "scale"
+ duration: 330
+ easing.type: Easing.Linear
+ from:0.0
+ to:1.0
+ }
+ }
+ PauseAnimation {
+ duration: 330
+ }
+
+ }
+ }
+}
diff --git a/GUIModel/Meter/Mask.qml b/GUIModel/Meter/Mask.qml
new file mode 100644
index 0000000..932df8f
--- /dev/null
+++ b/GUIModel/Meter/Mask.qml
@@ -0,0 +1,145 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item{
+ id:mask
+ visible: false
+ opacity: 0
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /* nop */
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ Item {
+ id:maskTop
+ width: 1920
+ height: 128
+
+ Rectangle {
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop {
+ position: 0.0
+ color: "#FF000000"
+ }
+ GradientStop {
+ position: 0.25
+ color: "#FF000000"
+ }
+ GradientStop {
+ position: 1.0
+ color: "#00000000"
+ }
+
+ }
+ }
+ }
+
+ Item {
+ id:maskBottom
+ x:480
+ y:720 - 64
+ width: 120
+ height: 64
+
+ Rectangle {
+ anchors.fill: parent
+ gradient: Gradient {
+ GradientStop {
+ position: 1.0
+ color: "#FF000000"
+ }
+ GradientStop {
+ position: 0.0
+ color: "#00000000"
+ }
+
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 330
+ }
+
+ PropertyAnimation{
+ target: mask
+ property: "visible"
+ duration:0
+ from:false
+ to:true
+ }
+
+ PropertyAnimation{
+ target: mask
+ property: "opacity"
+ duration:891
+ from:0
+ to:1
+ }
+
+
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 254 + 330
+ }
+
+ PropertyAnimation{
+ target: mask
+ property: "opacity"
+ duration:891
+ from:1
+ to:0
+ }
+
+ PropertyAnimation{
+ target: mask
+ property: "visible"
+ duration:0
+ from:true
+ to:false
+ }
+
+ }
+
+}
diff --git a/GUIModel/Meter/Meter.qml b/GUIModel/Meter/Meter.qml
new file mode 100644
index 0000000..b1a4a78
--- /dev/null
+++ b/GUIModel/Meter/Meter.qml
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: meter
+ property real speedValue: 0
+ property real tachoValue: 0
+ property real chargeValue:100
+
+ onSpeedValueChanged: {
+ speedGuage.speedValue = speedValue
+ speedNeedle.speedValue = speedValue
+ digitalSpeed.speedValue = speedValue
+ }
+
+ onTachoValueChanged: {
+ tachometer.tachoValue = tachoValue
+ }
+ onChargeValueChanged: {
+ chargeGuage.chargeValue = chargeValue
+ }
+
+
+ Item {
+ id: meterParts
+ property var easing: Easing.InOutQuad
+ Component.onCompleted: {
+ testAnim.start()
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ / *nop */
+ }
+
+ onTransAdasToMap:{
+ / *nop */
+ }
+
+ onTransMapToNormal:{
+ / *nop */
+ }
+ }
+
+ Sideline {
+ id: sideline
+ }
+
+ Ring {
+ id: ring
+ }
+
+ ChargeGuage {
+ id: chargeGuage
+ }
+
+ SpeedGuage {
+ id: speedGuage
+ }
+
+ SpeedNeedle {
+ id: speedNeedle
+ }
+
+ Tachometer {
+ id: tachometer
+ }
+
+ Ready {
+ id: ready
+ }
+
+ Mask {
+ id: mask
+ }
+
+ DigitalSpeed {
+ id: digitalSpeed
+ }
+
+ ParallelAnimation{
+ id: testAnim
+ SequentialAnimation{
+ id: testAnimSpeed
+ loops: Animation.Infinite
+ NumberAnimation {
+ target: meter
+ property: "speedValue"
+ duration: 1000
+ easing.type: Easing.InOutQuad
+ to: 300
+ }
+ NumberAnimation{
+ duration: 5000
+ }
+
+ NumberAnimation {
+ target: meter
+ property: "speedValue"
+ duration: 5000
+ easing.type: Easing.InOutQuad
+ to: 0
+ }
+ }
+
+ SequentialAnimation{
+ id: testAnimTacho
+ loops: Animation.Infinite
+ NumberAnimation {
+ target: meter
+ property: "tachoValue"
+ duration: 500
+ easing.type: Easing.InOutQuad
+ to: 8000
+ }
+ NumberAnimation {
+ target: meter
+ property: "tachoValue"
+ duration: 2500
+ easing.type: Easing.InOutQuad
+ to: 0
+ }
+ }
+ SequentialAnimation{
+ id: testAnimCharge
+ loops: Animation.Infinite
+ NumberAnimation {
+ target: meter
+ property: "chargeValue"
+ duration: 10000
+ easing.type: Easing.Linear
+ to: 0
+ }
+ NumberAnimation {
+ target: meter
+ property: "chargeValue"
+ duration: 10000
+ easing.type: Easing.Linear
+ to: 100
+ }
+ }
+ }
+ }
+}
+
+
diff --git a/GUIModel/Meter/Ready.qml b/GUIModel/Meter/Ready.qml
new file mode 100644
index 0000000..7719fd0
--- /dev/null
+++ b/GUIModel/Meter/Ready.qml
@@ -0,0 +1,138 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: ready
+ x:666
+ y:97
+ width:588
+ height:588
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ Image{
+ id:readyBase
+ source: "qrc:/Images/NormalView/METER/ready_base.png"
+ width:159
+ height:51
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+ Image{
+ id:readyText
+ source: "qrc:/Images/NormalView/METER/ready_text-on.png"
+ width:159
+ height:51
+ anchors.bottom: parent.bottom
+ anchors.horizontalCenter: parent.horizontalCenter
+ }
+
+
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ /* delay */
+ PauseAnimation {
+ duration: 330
+ }
+
+ ParallelAnimation{
+ NumberAnimation{
+ target: ready
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1.0
+ to:0.75
+ }
+
+ /* translation */
+ PathAnimation{
+ target: ready
+ anchorPoint: Qt.point(ready.width/2, ready.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 960; startY: 391
+ PathLine { x: 540; y: 402 }
+ }
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ /* delay */
+ PauseAnimation {
+ duration: 254
+ }
+
+ PauseAnimation {
+ duration: 330
+ }
+
+ ParallelAnimation{
+ NumberAnimation{
+ target: ready
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.75
+ to:1.00
+ }
+
+ /* translation */
+ PathAnimation{
+ target: ready
+ anchorPoint: Qt.point(ready.width/2, ready.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 540; startY: 402
+ PathLine { x: 960; y: 391 }
+ }
+ }
+ }
+ }
+}
diff --git a/GUIModel/Meter/Ring.qml b/GUIModel/Meter/Ring.qml
new file mode 100644
index 0000000..46c2f50
--- /dev/null
+++ b/GUIModel/Meter/Ring.qml
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: ring
+ width:656
+ height:656
+ x:632
+ y:63
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ Image{
+ id:ring1
+ source: "qrc:/Images/NormalView/METER/ring1.ktx"
+ width:656
+ height:656
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Image{
+ id:ring3
+ source: "qrc:/Images/NormalView/METER/ring3.ktx"
+ width:456
+ height:456
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Image{
+ id:ring2
+ source: "qrc:/Images/NormalView/METER/ring2.ktx"
+ width:588
+ height:588
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 330
+ }
+
+ ParallelAnimation{
+ /* down size */
+ NumberAnimation{
+ target: ring
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1
+ to:0.75
+ }
+
+ /* translation */
+ PathAnimation{
+ target: ring
+ anchorPoint: Qt.point(ring.width/2, ring.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 960; startY: 391
+ PathLine { x: 540; y: 402 }
+ }
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 254 + 330
+ }
+
+ ParallelAnimation{
+ /* down size */
+ NumberAnimation{
+ target: ring
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.75
+ to:1.0
+ }
+
+ /* translation */
+ PathAnimation{
+ target: ring
+ anchorPoint: Qt.point(ring.width/2, ring.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 540; startY: 402
+ PathLine { x: 960; y: 391 }
+ }
+ }
+ }
+ }
+}
diff --git a/GUIModel/Meter/Sideline.qml b/GUIModel/Meter/Sideline.qml
new file mode 100644
index 0000000..e210dcb
--- /dev/null
+++ b/GUIModel/Meter/Sideline.qml
@@ -0,0 +1,166 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: sideline
+ width: 1780
+ height: 1780
+ x:70
+ y:-499
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ / *nop */
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ Image{
+ id:meterLineR
+ source: "qrc:/Images/NormalView/METER/meter_line_r.ktx"
+ x:980
+ y:0
+ width:800
+ height:636
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.right: parent.right
+ anchors.rightMargin: 0
+ }
+
+ Image{
+ id:meterLineL
+ source: "qrc:/Images/NormalView/METER/meter_line_l.ktx"
+ y:0
+ width:800
+ height:636
+ anchors.verticalCenter: parent.verticalCenter
+ anchors.left: parent.left
+ anchors.leftMargin: 0
+ }
+
+ transform: Rotation {
+ id:sidelineRotation
+ origin.x: sideline.width/2;
+ origin.y: sideline.height/2;
+ angle: 0
+ }
+
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 330
+ }
+
+ ParallelAnimation{
+ /* down size */
+ NumberAnimation{
+ target: sideline
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1
+ to:0.75
+ }
+
+ /* rotation */
+ PropertyAnimation{
+ target: sidelineRotation
+ property: "angle"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0
+ to:-90
+ }
+
+ /* translation */
+ PathAnimation{
+ target: sideline
+ anchorPoint: Qt.point(sideline.width/2, sideline.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 960; startY: 391
+ PathLine { x: 540; y: 402 }
+ }
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ PauseAnimation {
+ duration: 254 + 330
+ }
+
+ ParallelAnimation{
+ /* down size */
+ NumberAnimation{
+ target: sideline
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.75
+ to:1.0
+ }
+
+ /* rotation */
+ PropertyAnimation{
+ target: sidelineRotation
+ property: "angle"
+ duration: 891
+ easing.type: meterParts.easing
+ from:-90
+ to:0
+ }
+
+ /* translation */
+ PathAnimation{
+ target: sideline
+ anchorPoint: Qt.point(sideline.width/2, sideline.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 540; startY: 402
+ PathLine { x: 960; y: 391 }
+ }
+ }
+ }
+ }
+
+}
diff --git a/GUIModel/Meter/SpeedGuage.qml b/GUIModel/Meter/SpeedGuage.qml
new file mode 100644
index 0000000..72ae57f
--- /dev/null
+++ b/GUIModel/Meter/SpeedGuage.qml
@@ -0,0 +1,284 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+import QtQuick.Shapes 1.14
+
+Item {
+ id: speedGuage
+ x:666
+ y:97
+ width:588
+ height:588
+ property real speedValue
+
+ readonly property real speedGuageMax: 100
+ readonly property real speedGuageMin: 0
+
+ onSpeedValueChanged: {
+ limitSpeedValue();
+ effectPwr.angle = (2.25 * speedValue*Math.PI/180)+effectPwr.angleBase
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /* nop */
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ function limitSpeedValue(){
+ if(speedGuageMax < speedValue){
+ speedValue = speedGuageMax
+ }else if(speedValue < speedGuageMin){
+ speedValue = speedGuageMin
+ }
+ }
+
+ /* Guage - visible in Normal mode */
+ Item {
+ id:pwrGuageGroup
+ width:588
+ height:588
+
+ Image{
+ id:pwrGuage
+ source: "qrc:/Images/NormalView/METER/pwr_guage.png"
+ width:588
+ height:588
+
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ opacity: 1
+ visible: false
+ }
+ ShaderEffect{
+ id: effectPwr
+ anchors.fill: parent
+ visible: true
+ blending: true
+ supportsAtlasTextures: true
+ property real angleBase: -pi*1/2
+ property real angle:-pi*1/2
+ property var src: ShaderEffectSource{
+ sourceItem: pwrGuage
+ live: false
+ }
+
+ readonly property real pi: 3.1415926535
+
+ vertexShader: "qrc:/Shaders/vert/guageMask.vert"
+ fragmentShader:"qrc:/Shaders/frag/guageMask.frag"
+ }
+ }
+
+
+ Image{
+ id:ringLine
+ source: "qrc:/Images/NormalView/METER/ring_line.ktx"
+ width:588
+ height:588
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Image{
+ id:speedTxt
+ source: "qrc:/Images/NormalView/SPEED/speed_txt.png"
+ width:588
+ height:588
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ Image{
+ id:ring5
+ source: "qrc:/Images/NormalView/METER/ring5.png"
+ width: 34
+ height:24
+ anchors.left: parent.left
+ anchors.leftMargin: -11
+ anchors.verticalCenter: parent.verticalCenter
+ }
+
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation{
+ target: speedTxt
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:1.0
+ to:0.5
+ }
+
+ SequentialAnimation{
+ NumberAnimation{
+ target: pwrGuageGroup
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:1.0
+ to:0.0
+ }
+ PropertyAnimation{
+ target: pwrGuageGroup
+ property: "visible"
+ duration: 0
+ easing.type: Easing.InOutSine
+ from:true
+ to:false
+ }
+ }
+ }
+
+ ParallelAnimation{
+ /* down size */
+ NumberAnimation{
+ target: speedGuage
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:1
+ to:0.75
+ }
+
+ /* translation */
+ PathAnimation{
+ target: speedGuage
+ anchorPoint: Qt.point(speedGuage.width/2, speedGuage.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 960; startY: 391
+ PathLine { x: 540; y: 402 }
+ }
+ }
+
+ SequentialAnimation{
+ PauseAnimation {
+ duration: 891-330
+ }
+ NumberAnimation{
+ target: speedTxt
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:0.5
+ to:1.0
+ }
+ }
+ }
+ }
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+
+ PauseAnimation {
+ duration: 254 + 330
+ }
+
+
+ ParallelAnimation{
+ /* scaling */
+ NumberAnimation{
+ target: speedGuage
+ property: "scale"
+ duration: 891
+ easing.type: meterParts.easing
+ from:0.75
+ to:1.0
+ }
+
+ /* slide */
+ PathAnimation{
+ target: speedGuage
+ anchorPoint: Qt.point(speedGuage.width/2, speedGuage.height/2)
+ orientation: PathAnimation.Fixed
+ duration: 891
+ easing.type: meterParts.easing
+
+ path: Path {
+ startX: 540; startY: 402
+ PathLine { x: 960; y: 391 }
+ }
+ }
+
+ NumberAnimation{
+ target: speedTxt
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:1.0
+ to:0.5
+ }
+ }
+
+ ParallelAnimation{
+ NumberAnimation{
+ target: speedTxt
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:0.5
+ to:1.0
+ }
+
+ SequentialAnimation{
+ PropertyAnimation{
+ target: pwrGuageGroup
+ property: "visible"
+ duration: 0
+ easing.type: Easing.InOutSine
+ from:false
+ to:true
+ }
+
+ NumberAnimation{
+ target: pwrGuageGroup
+ property: "opacity"
+ duration: 330
+ easing.type: Easing.InOutSine
+ from:0.0
+ to:1.0
+ }
+ }
+ }
+ PauseAnimation {
+ duration: 330
+ }
+ }
+}
diff --git a/GUIModel/Meter/SpeedNeedle.qml b/GUIModel/Meter/SpeedNeedle.qml
new file mode 100644
index 0000000..31cb074
--- /dev/null
+++ b/GUIModel/Meter/SpeedNeedle.qml
@@ -0,0 +1,293 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: speedNeedle
+ width:444
+ height:444
+ x: 318
+ y: 180
+ visible: false
+ property real speedValue
+
+ readonly property real speedNeedleMax: 100
+ readonly property real speedNeedleMin: 0
+
+ onSpeedValueChanged: {
+ setNeedleAngle();
+ effectPwrNeedle.angle = (2.25 * speedValue*Math.PI/180)+effectPwrNeedle.angleBase
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ function setNeedleAngle(){
+ if(speedNeedleMax < speedValue){
+ speedValue = speedNeedleMax
+ }else if( speedValue < speedNeedleMin){
+ speedValue = speedNeedleMin
+ }
+ rotateNeedle.angle = 2.25 * speedValue
+ }
+
+ /* Needle - visible in ADAS/Map mode */
+ Item {
+ id:needleGroup
+ width:444
+ height:444
+
+ Image{
+ id: pwrNeedle
+ source: "qrc:/Images/ADASView/METER/needle.png"
+ x: 28
+ y: 220
+ width:182
+ height:4
+ visible: false
+ }
+
+ Item{
+ id: needleMask
+ visible: false
+ anchors.fill:pwrNeedle
+ property double maskPercent: 0
+
+ Rectangle{
+ id: needleMaskInvisible
+ color: "red"
+ opacity: 0
+ anchors.left: parent.left
+ width: pwrNeedle.width * (1.0 - needleMask.maskPercent/100.0)
+ height: pwrNeedle.height
+ visible: true
+ }
+ Rectangle{
+ id: needleMaskVisible
+ color: "blue"
+ anchors.right: parent.right
+ opacity: 1
+ width: pwrNeedle.width * (needleMask.maskPercent/100.0)
+ height: pwrNeedle.height
+ visible: true
+ }
+ }
+
+
+ OpacityMask {
+ id: maskedPwrNeedle
+ cached: false
+ width: pwrNeedle.x
+ height:pwrNeedle.y
+ anchors.fill:pwrNeedle
+ source: pwrNeedle
+ maskSource: needleMask
+ }
+
+ transform: Rotation{
+ id:rotateNeedle
+ origin.x: needleGroup.width / 2
+ origin.y: needleGroup.height / 2
+ angle : 0
+ }
+
+
+ }
+
+ Item{
+ id: centerCircleGroup
+ width:124
+ height:126
+ x:160
+ y:166
+ Image{
+ id: centerCircle
+ source: "qrc:/Images/ADASView/METER/center_circle.png"
+ width:124
+ height:126
+ anchors.horizontalCenter: parent.horizontalCenter
+ anchors.verticalCenter: parent.verticalCenter
+ visible: true
+ }
+ }
+
+ Item {
+ id: pwrNeedleEffect
+ width:444
+ height:444
+ x: 0
+ y: 0
+ visible: false
+
+ Image{
+ source: "qrc:/Images/ADASView/METER/pwr_wave.png"
+ width:444
+ height:442
+ visible: true
+ }
+
+ Image{
+ source: "qrc:/Images/ADASView/METER/pwr_glow.png"
+ width:444
+ height:442
+ visible: true
+ }
+ }
+
+
+ ShaderEffect{
+ id: effectPwrNeedle
+ anchors.fill: pwrNeedleEffect
+ visible: false
+ blending: true
+ supportsAtlasTextures: true
+ property real angleBase: -pi*1/2
+ property real angle:-pi*1/2
+ property var src: ShaderEffectSource{
+ sourceItem: pwrNeedleEffect
+ }
+
+ readonly property real pi: 3.1415926535
+
+ vertexShader: "qrc:/Shaders/vert/guageMask.vert"
+ fragmentShader:"qrc:/Shaders/frag/guageMask.frag"
+ }
+
+
+ SequentialAnimation{
+ id: normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+ PauseAnimation {
+ duration: 330 + 891
+ }
+
+ PropertyAnimation{
+ target: speedNeedle
+ property: "visible"
+ duration: 0
+ from:false
+ to:true
+ }
+
+ NumberAnimation{
+ target: centerCircle
+ property: "scale"
+ duration: 396
+ easing.type: Easing.InOutSine
+ from: 0
+ to: 1
+ }
+
+ PropertyAnimation{
+ target:effectPwrNeedle
+ property:"visible"
+ duration:0
+ from:false
+ to:true
+ }
+
+ ParallelAnimation{
+ NumberAnimation {
+ target:needleMask
+ property: "maskPercent"
+ duration: 198
+ from:0.0
+ to:100.0
+ }
+
+ NumberAnimation{
+ target:effectPwrNeedle
+ property:"opacity"
+ duration:198
+ from:0
+ to:1
+ }
+ }
+ PauseAnimation {
+ duration: 330
+ }
+
+ }
+
+ SequentialAnimation{
+ id: mapToNormalAnimation
+ onStarted: rootItem.focus=false
+ ParallelAnimation{
+ NumberAnimation {
+ target:needleMask
+ property: "maskPercent"
+ duration: 198
+ from:100.0
+ to:0.0
+ }
+
+ NumberAnimation{
+ target:effectPwrNeedle
+ property:"opacity"
+ duration:198
+ from:1
+ to:0
+ }
+ }
+
+ PropertyAnimation{
+ target:effectPwrNeedle
+ property:"visible"
+ duration:0
+ from:true
+ to:false
+ }
+
+ NumberAnimation{
+ target: centerCircle
+ property: "scale"
+ duration: 396
+ easing.type: Easing.InOutSine
+ from: 1
+ to: 0
+ }
+
+ PropertyAnimation{
+ target: speedNeedle
+ property: "visible"
+ duration: 0
+ from:true
+ to:false
+ }
+ }
+
+}
diff --git a/GUIModel/Meter/Tachometer.qml b/GUIModel/Meter/Tachometer.qml
new file mode 100644
index 0000000..fcc750b
--- /dev/null
+++ b/GUIModel/Meter/Tachometer.qml
@@ -0,0 +1,142 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtGraphicalEffects 1.14
+
+Item {
+ id: tachometer
+ property real tachoValue
+
+ readonly property real tachoValueMax: 8000
+ readonly property real tachoValueMin: 0
+
+ onTachoValueChanged: {
+ limitTachoValue();
+ effectRpm.angle = (0.03375 * tachoValue*Math.PI/180)+effectRpm.angleBase
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimation.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimation.start()
+ }
+ }
+
+ function limitTachoValue(){
+ if(tachoValue > tachoValueMax){
+ tachoValue = tachoValueMax
+ }else if(tachoValue < tachoValueMin){
+ tachoValue = tachoValueMin
+ }
+ }
+
+ Image{
+ id:rpmGuage
+ source: "qrc:/Images/NormalView/METER/prm_guage.ktx"
+ x:770
+ y:200
+ width:380
+ height:382
+ visible: false
+ }
+ ShaderEffect{
+ id: effectRpm
+ anchors.fill: rpmGuage
+ visible: true
+ blending: true
+ supportsAtlasTextures: true
+ property real angleBase: -pi*3/4
+ property real angle:-pi*3/4
+ property var src: ShaderEffectSource{
+ sourceItem: rpmGuage
+ live: false
+ }
+
+
+ readonly property real pi: 3.1415926535
+
+ vertexShader: "qrc:/Shaders/vert/guageMask.vert"
+ fragmentShader:"qrc:/Shaders/frag/guageMask.frag"
+ }
+
+
+ Image{
+ id:rpmTxt
+ source: "qrc:/Images/NormalView/METER/prm_txt.png"
+ x:770
+ y:190
+ width:379
+ height:401
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimation
+ onStarted: rootItem.focus=false
+ PropertyAnimation{
+ target:tachometer
+ property:"opacity"
+ duration: 330
+ easing.type: Easing.Linear
+ to:0
+ }
+ PropertyAnimation{
+ target: tachometer
+ property: "visible"
+ duration: 0
+ to:false
+ }
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimation
+ onStarted: rootItem.focus=false
+
+ PauseAnimation {
+ duration: 891 + 330 + 254
+ }
+
+ PropertyAnimation{
+ target: tachometer
+ property: "visible"
+ duration: 0
+ to:true
+ }
+
+ PropertyAnimation{
+ target:tachometer
+ property:"opacity"
+ duration: 330
+ easing.type: Easing.Linear
+ to:1
+ }
+ }
+
+}
diff --git a/GUIModel/ShiftPosition/ShiftPosition.qml b/GUIModel/ShiftPosition/ShiftPosition.qml
new file mode 100644
index 0000000..9d32a77
--- /dev/null
+++ b/GUIModel/ShiftPosition/ShiftPosition.qml
@@ -0,0 +1,249 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item {
+ id: shift
+ property int shiftId : 0
+ property Image mId
+
+ onShiftIdChanged: {
+ idchange()
+ }
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimationShift.start()
+ }
+
+ onTransAdasToMap:{
+ /**/
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimationShift.start()
+ }
+ }
+
+ function idchange(){
+
+ shiftL.width = 126
+ shiftN.width = 126
+ shiftR.width = 126
+ shiftP.width = 126
+ shiftD.width = 126
+ shiftL.height = 136
+ shiftN.height = 136
+ shiftR.height = 136
+ shiftP.height = 136
+ shiftD.height = 136
+
+ if(shftTimer.running){
+ shftTimer.stop()
+ }
+
+ switch(shiftId){
+ case(1):
+ mId = shiftD
+ shiftL.visible = false
+ shiftN.visible = false
+ shiftR.visible = false
+ shiftP.visible = false
+ shiftD.visible = true
+ break
+ case(2):
+ mId = shiftL
+ shiftD.visible = false
+ shiftN.visible = false
+ shiftR.visible = false
+ shiftP.visible = false
+ shiftL.visible = true
+ break
+ case(3):
+ mId = shiftN
+ shiftD.visible = false
+ shiftL.visible = false
+ shiftR.visible = false
+ shiftP.visible = false
+ shiftN.visible = true
+ break
+ case(4):
+ mId = shiftR
+ shiftD.visible = false
+ shiftL.visible = false
+ shiftN.visible = false
+ shiftP.visible = false
+ shiftR.visible = true
+ break
+ case(5):
+ mId = shiftP
+ shiftD.visible = false
+ shiftL.visible = false
+ shiftN.visible = false
+ shiftR.visible = false
+ shiftP.visible = true
+ break
+ default:
+ //mId = 0
+ shiftD.visible = false
+ shiftL.visible = false
+ shiftN.visible = false
+ shiftR.visible = false
+ shiftP.visible = false
+ break
+ }
+ shftTimer.start()
+ }
+
+ Timer {
+ id:shftTimer
+ interval: 300
+ repeat: false
+ running: false
+ onTriggered: {
+ shiftAnimScale.start()
+ }
+ }
+
+
+
+
+/***********shiftParts************/
+ Item{
+ id: shiftParts
+ x:356
+ y:156
+ width:126
+ height:136
+ Image{
+ id: shiftD
+ source: "qrc:/Images/NormalView/SHIFT/shift-d.png"
+ width:126
+ height:136
+ visible: false
+ anchors.centerIn: parent
+ }
+ Image{
+ id: shiftL
+ source: "qrc:/Images/NormalView/SHIFT/shift-l.png"
+ width:126
+ height:136
+ visible: false
+ anchors.centerIn: parent
+ }
+ Image{
+ id: shiftN
+ source: "qrc:/Images/NormalView/SHIFT/shift-n.png"
+ width:126
+ height:136
+ visible: false
+ anchors.centerIn: parent
+ }
+ Image{
+ id: shiftR
+ source: "qrc:/Images/NormalView/SHIFT/shift-r.png"
+ width:126
+ height:136
+ visible: false
+ anchors.centerIn: parent
+ }
+ Image{
+ id: shiftP
+ source: "qrc:/Images/NormalView/SHIFT/shift-p.png"
+ width:126
+ height:136
+ visible: false
+ anchors.centerIn: parent
+ }
+
+ SequentialAnimation{
+ id:normalToAdasAnimationShift
+ onStarted: rootItem.focus=false
+ PauseAnimation{
+ duration: 330
+ }
+
+ PathAnimation{
+ target: shiftParts
+ duration: 891
+ easing.type: Easing.InOutSine
+
+ path:Path {
+ startX: 356; startY: 156
+ PathArc {
+ x: 157; y: 336
+ radiusX: 180; radiusY: 180
+ direction: PathArc.Counterclockwise
+ }
+ }
+ }
+ }
+
+/*****************shit_animation******************/
+ SequentialAnimation{
+ id:mapToNormalAnimationShift
+ onStarted: rootItem.focus=false
+ PauseAnimation{
+ duration:254 + 330
+ }
+
+ PathAnimation{
+ target: shiftParts
+ duration: 891
+ easing.type: Easing.InOutSine
+
+ path:Path {
+ startX: 157; startY: 336
+ PathArc {
+ x: 356; y: 156
+ radiusX: 180; radiusY: 180
+ direction: PathArc.Clockwise
+ }
+ }
+ }
+
+ }
+
+ }
+
+ ParallelAnimation{
+ id: shiftAnimScale
+ PropertyAnimation {
+ target: mId
+ properties: "width"
+ duration: 40
+ easing.type: Easing.Linear
+ to: 90.0
+ }
+ PropertyAnimation {
+ target: mId
+ properties: "height"
+ duration: 40
+ easing.type: Easing.Linear
+ to: 97.0
+ }
+ }
+}
+
+
diff --git a/GUIModel/Telltale/Telltale.qml b/GUIModel/Telltale/Telltale.qml
new file mode 100644
index 0000000..d41849c
--- /dev/null
+++ b/GUIModel/Telltale/Telltale.qml
@@ -0,0 +1,380 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item {
+ id: telltale
+
+ property bool telltaleMasterWarn: false
+ property bool telltaleGeneralWarn: false
+ property bool telltaleBrakeEnergyRecovOff: false
+ property bool telltaleBrakeEnergyRecovLv: false
+ property bool telltaleMotorWarn: false
+ property bool telltalePopupHoodWarn: false
+ property bool telltaleDecharge: false
+ property bool telltaleEvSystemWarn: false
+ property bool telltaleChargingPlugWarn: false
+ property bool telltaleLowBatt: false
+ property bool telltaleBattWarn: false
+ property bool telltaleBattTempWarn: false
+ property bool telltaleHighVoltBattCut: false
+ property bool telltaleAeb: false
+ property bool telltaleLdw: false
+ property bool telltaleBsd: false
+ property bool telltaleSrsAirbag: false
+ property bool telltaleEpsOff: false
+ property bool telltaleBrake: false
+ property bool telltaleAbsWarn: false
+ property bool telltaleEspAct: false
+ property bool telltaleHillDescent: false
+ property bool telltaleAutoParking: false
+ property bool telltaleTpmsInd: false
+ property bool telltaleImmobi: false
+ property bool telltaleDoor: false
+ property bool telltaleSeatbelt: false
+ property bool telltaleSeatbelt2: false
+ property bool telltaleEpbWarn: false
+ property bool telltaleEps: false
+ property bool telltaleHighbeamAssist: false
+ property bool telltaleHighbeam: false
+ property bool telltaleRearFog: false
+ property bool telltaleLowbeam: false
+ property bool telltalePosition: false
+
+
+ Image{
+ id:masterWarn
+ source: "qrc:/Images/Telltale/telltale1.png"
+ x:191
+ y:115
+ width:52
+ height:52
+ visible: telltaleMasterWarn
+ }
+ Image{
+ id:generalWarn
+ source: "qrc:/Images/Telltale/telltale2.png"
+ x:130
+ y:149
+ width:52
+ height:52
+ visible: telltaleGeneralWarn
+ }
+ Image{
+ id:brakeEnergyRecovOff
+ source: "qrc:/Images/Telltale/telltale3.png"
+ x:75
+ y:204
+ width:52
+ height:52
+ visible: telltaleBrakeEnergyRecovOff
+ }
+ Image{
+ id:brakeEnergyRecovLv
+ source: "qrc:/Images/Telltale/telltale4.png"
+ x:130
+ y:204
+ width:52
+ height:52
+ visible: telltaleBrakeEnergyRecovLv
+ }
+ Image{
+ id:motorWarn
+ source: "qrc:/Images/Telltale/telltale5.png"
+ x:26
+ y:262
+ width:52
+ height:52
+ visible: telltaleMotorWarn
+ }
+ Image{
+ id:popupHoodWarn
+ source: "qrc:/Images/Telltale/telltale6.png"
+ x:83
+ y:262
+ width:52
+ height:52
+ visible: telltalePopupHoodWarn
+ }
+ Image{
+ id:decharge
+ source: "qrc:/Images/Telltale/telltale7.png"
+ x:83
+ y:317
+ width:52
+ height:52
+ visible: telltaleDecharge
+ }
+ Image{
+ id:evSystemWarn
+ source: "qrc:/Images/Telltale/telltale8.png"
+ x:26
+ y:317
+ width:52
+ height:52
+ visible: telltaleEvSystemWarn
+ }
+ Image{
+ id:chargingPlugWarn
+ source: "qrc:/Images/Telltale/telltale9.png"
+ x:83
+ y:372
+ width:52
+ height:52
+ visible: telltaleChargingPlugWarn
+ }
+ Image{
+ id:lowBatt
+ source: "qrc:/Images/Telltale/telltale10.png"
+ x:26
+ y:372
+ width:52
+ height:52
+ visible: telltaleLowBatt
+ }
+ Image{
+ id:battWarn
+ source: "qrc:/Images/Telltale/telltale11.png"
+ x:83
+ y:427
+ width:52
+ height:52
+ visible: telltaleBattWarn
+ }
+ Image{
+ id:battTempWarn
+ source: "qrc:/Images/Telltale/telltale12.png"
+ x:26
+ y:427
+ width:52
+ height:52
+ visible: telltaleBattTempWarn
+ }
+ Image{
+ id:highVoltBattCut
+ source: "qrc:/Images/Telltale/telltale13.png"
+ x:44
+ y:482
+ width:52
+ height:52
+ visible: telltaleHighVoltBattCut
+ }
+ Image{
+ id:aeb
+ source: "qrc:/Images/Telltale/telltale14.png"
+ x:62
+ y:543
+ width:52
+ height:52
+ visible: telltaleAeb
+ }
+ Image{
+ id:ldw
+ source: "qrc:/Images/Telltale/telltale15.png"
+ x:113
+ y:600
+ width:52
+ height:52
+ visible: telltaleLdw
+ }
+ Image{
+ id:bsd
+ source: "qrc:/Images/Telltale/telltale16.png"
+ x:173
+ y:629
+ width:52
+ height:52
+ visible: telltaleBsd
+ }
+ Image{
+ id:srsAirbag
+ source: "qrc:/Images/Telltale/telltale17.png"
+ x:1738
+ y:204
+ width:52
+ height:52
+ visible: telltaleSrsAirbag
+ }
+ Image{
+ id:epsOff
+ source: "qrc:/Images/Telltale/telltale18.png"
+ x:1794
+ y:204
+ width:52
+ height:52
+ visible: telltaleEpsOff
+ }
+ Image{
+ id:brake
+ source: "qrc:/Images/Telltale/telltale19.png"
+ x:1718
+ y:259
+ width:52
+ height:52
+ visible: telltaleBrake
+ }
+ Image{
+ id:absWarn
+ source: "qrc:/Images/Telltale/telltale20.png"
+ x:1774
+ y:259
+ width:52
+ height:52
+ visible: telltaleAbsWarn
+ }
+ Image{
+ id:espAct
+ source: "qrc:/Images/Telltale/telltale21.png"
+ x:1830
+ y:259
+ width:52
+ height:52
+ visible: telltaleEspAct
+ }
+ Image{
+ id:hillDescent
+ source: "qrc:/Images/Telltale/telltale22.png"
+ x:1718
+ y:314
+ width:52
+ height:52
+ visible: telltaleHillDescent
+ }
+ Image{
+ id:autoParking
+ source: "qrc:/Images/Telltale/telltale23.png"
+ x:1774
+ y:314
+ width:52
+ height:52
+ visible: telltaleAutoParking
+ }
+ Image{
+ id:tpmsInd
+ source: "qrc:/Images/Telltale/telltale24.png"
+ x:1830
+ y:314
+ width:52
+ height:52
+ visible: telltaleTpmsInd
+ }
+ Image{
+ id:immobi
+ source: "qrc:/Images/Telltale/telltale25.png"
+ x:629
+ y:648
+ width:52
+ height:52
+ visible: telltaleImmobi
+ }
+ Image{
+ id:door
+ source: "qrc:/Images/Telltale/telltale26.png"
+ x:685
+ y:648
+ width:52
+ height:52
+ visible: telltaleDoor
+ }
+ Image{
+ id:seatbelt
+ source: "qrc:/Images/Telltale/telltale27.png"
+ x:1196
+ y:648
+ width:52
+ height:52
+ visible: telltaleSeatbelt
+ }
+ Image{
+ id:seatbelt2
+ source: "qrc:/Images/Telltale/telltale28.png"
+ x:1252
+ y:648
+ width:52
+ height:52
+ visible: telltaleSeatbelt2
+ }
+ Image{
+ id:epbWarn
+ source: "qrc:/Images/Telltale/telltale29.png"
+ x:1308
+ y:648
+ width:52
+ height:52
+ visible: telltaleEpbWarn
+ }
+ Image{
+ id:eps
+ source: "qrc:/Images/Telltale/telltale30.png"
+ x:1364
+ y:648
+ width:52
+ height:52
+ visible: telltaleEps
+ }
+ Image{
+ id:highbeamAssist
+ source: "qrc:/Images/Telltale/telltale31.png"
+ x:1420
+ y:648
+ width:52
+ height:52
+ visible: telltaleHighbeamAssist
+ }
+ Image{
+ id:highbeam
+ source: "qrc:/Images/Telltale/telltale32.png"
+ x:1476
+ y:648
+ width:52
+ height:52
+ visible: telltaleHighbeam
+ }
+ Image{
+ id:rearFog
+ source: "qrc:/Images/Telltale/telltale33.png"
+ x:1532
+ y:648
+ width:52
+ height:52
+ visible: telltaleRearFog
+ }
+ Image{
+ id:lowbeam
+ source: "qrc:/Images/Telltale/telltale34.png"
+ x:1588
+ y:648
+ width:52
+ height:52
+ visible: telltaleLowbeam
+ }
+ Image{
+ id:position
+ source: "qrc:/Images/Telltale/telltale35.png"
+ x:1644
+ y:648
+ width:52
+ height:52
+ visible: telltalePosition
+ }
+}
diff --git a/GUIModel/TurnByTurn/TurnByTurn.qml b/GUIModel/TurnByTurn/TurnByTurn.qml
new file mode 100644
index 0000000..adcf892
--- /dev/null
+++ b/GUIModel/TurnByTurn/TurnByTurn.qml
@@ -0,0 +1,652 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+
+Item {
+ id: turnByTurn
+ property int receivedArrowId : 0 /* 1:l1 2:l2 3:r1 4:r2 */
+ property int receivedTbtValue : 0
+
+ onReceivedArrowIdChanged: {
+ tbtParts.idchange()
+ }
+ onReceivedTbtValueChanged: {
+ tbtParts.valuechange()
+ }
+ Component.onCompleted: {
+ receivedArrowId = 1
+ receivedTbtValue = 200
+ }
+
+ Item{
+ id:tbtParts
+ property int receivedTbtValue1 : receivedTbtValue%10
+ property int receivedTbtValue10 : (receivedTbtValue/10)%10
+ property int receivedTbtValue100 : (receivedTbtValue/100)%10
+ property int currentArrowId : 0
+ property int currentTbtValue : 0
+ property int currentTbtValue1 : currentTbtValue%10
+ property int currentTbtValue10 : (currentTbtValue/10)%10
+ property int currentTbtValue100 : (currentTbtValue/100)%10
+
+ Connections{
+ target: rootItem
+ onTransNormalToAdas:{
+ normalToAdasAnimationTbt.start()
+ }
+
+ onTransAdasToMap:{
+ adasToMapAnimationTbt.start()
+ }
+
+ onTransMapToNormal:{
+ mapToNormalAnimationTbt.start()
+ }
+ }
+
+
+ function idchange(){
+
+ if(currentArrowId != 0){
+ tbtArrowCur.source = "qrc:/Images/NormalView/TBT/tbt_arrow-" + currentArrowId + ".ktx"
+ tbtArrowNex.source = "qrc:/Images/NormalView/TBT/tbt_arrow-" + receivedArrowId + ".ktx"
+
+ switch(currentArrowId){
+ case 1:
+ tbtArrowCurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "l1" + ".ktx"
+ break
+ case 2:
+ tbtArrowCurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "l2" + ".ktx"
+ break
+ case 3:
+ tbtArrowCurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "r1" + ".ktx"
+ break
+ case 4:
+ tbtArrowCurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "r2" + ".ktx"
+ break
+ default:
+ break
+ }
+
+ switch(receivedArrowId){
+ case 1:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "l1" + ".ktx"
+ break
+ case 2:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "l2" + ".ktx"
+ break
+ case 3:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "r1" + ".ktx"
+ break
+ case 4:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "r2" + ".ktx"
+ break
+ default:
+ break
+ }
+ }
+ else{ //if no displayed item
+ tbtArrowNex.source = "qrc:/Images/NormalView/TBT/tbt_arrow-" + receivedArrowId + ".ktx"
+
+ switch(receivedArrowId){
+ case 1:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "l1" + ".ktx"
+ break
+ case 2:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "l2" + ".ktx"
+ break
+ case 3:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "r1" + ".ktx"
+ break
+ case 4:
+ tbtArrowNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_arrow-" + "r2" + ".ktx"
+ break
+ default:
+ break
+ }
+ }
+ arrowAnim.start()
+ currentArrowId = receivedArrowId
+ }
+
+ function valuechange(){
+
+ receivedTbtValue1 = receivedTbtValue%10
+ receivedTbtValue10 = (receivedTbtValue/10)%10
+ receivedTbtValue100 = (receivedTbtValue/100)%10
+
+ currentTbtValue1 = currentTbtValue%10
+ currentTbtValue10 = (currentTbtValue/10)%10
+ currentTbtValue100 = (currentTbtValue/100)%10
+
+ if(currentTbtValue >= 100) {
+ tbtNum1Cur.visible = true
+ tbtNum10Cur.visible = true
+ tbtNum100Cur.visible = true
+
+ tbtNum1CurMap.visible = true
+ tbtNum10CurMap.visible = true
+ tbtNum100CurMap.visible = true
+
+ }else if(currentTbtValue >= 10){
+ tbtNum1Cur.visible = true
+ tbtNum10Cur.visible = true
+ tbtNum100Cur.visible = false
+
+ tbtNum1CurMap.visible = true
+ tbtNum10CurMap.visible = true
+ tbtNum100CurMap.visible = false
+ }else{
+ tbtNum1Cur.visible = true
+ tbtNum10Cur.visible = false
+ tbtNum100Cur.visible = false
+
+ tbtNum1CurMap.visible = true
+ tbtNum10CurMap.visible = false
+ tbtNum100CurMap.visible = false
+ }
+
+ if(receivedTbtValue >= 100) {
+ tbtNum1Nex.visible = true
+ tbtNum10Nex.visible = true
+ tbtNum100Nex.visible = true
+
+ tbtNum1NexMap.visible = true
+ tbtNum10NexMap.visible = true
+ tbtNum100NexMap.visible = true
+ }else if(receivedTbtValue >= 10){
+ tbtNum1Nex.visible = true
+ tbtNum10Nex.visible = true
+ tbtNum100Nex.visible = false
+
+ tbtNum1NexMap.visible = true
+ tbtNum10NexMap.visible = true
+ tbtNum100NexMap.visible = false
+ }else{
+ tbtNum1Nex.visible = true
+ tbtNum10Nex.visible = false
+ tbtNum100Nex.visible = false
+
+ tbtNum1NexMap.visible = true
+ tbtNum10NexMap.visible = false
+ tbtNum100NexMap.visible = false
+ }
+
+ tbtUnitCur.source = "qrc:/Images/NormalView/TBT/tbt_unit.png"
+ tbtNum1Cur.source = "qrc:/Images/NormalView/TBT/tbt_num1-" + currentTbtValue1 + ".png"//9
+ tbtNum10Cur.source = "qrc:/Images/NormalView/TBT/tbt_num10-" + currentTbtValue10 + ".png"//0
+ tbtNum100Cur.source = "qrc:/Images/NormalView/TBT/tbt_num100-" + currentTbtValue100 + ".png"//0
+
+ tbtUnitNex.source = "qrc:/Images/NormalView/TBT/tbt_unit.png"
+ tbtNum1Nex.source = "qrc:/Images/NormalView/TBT/tbt_num1-" + receivedTbtValue1 + ".png"//9
+ tbtNum10Nex.source = "qrc:/Images/NormalView/TBT/tbt_num10-" + receivedTbtValue10 + ".png"//9
+ tbtNum100Nex.source = "qrc:/Images/NormalView/TBT/tbt_num100-" + receivedTbtValue100 + ".png"//1
+
+
+ tbtUnitCurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_unit.png"
+ tbtNum1CurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_num1-" + currentTbtValue1 + ".png"//9
+ tbtNum10CurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_num10-" + currentTbtValue10 + ".png"//0
+ tbtNum100CurMap.source = "qrc:/Images/ADASView/TBT/map_tbt_num100-" + currentTbtValue100 + ".png"//0
+
+ tbtUnitNexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_unit.png"
+ tbtNum1NexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_num1-" + receivedTbtValue1 + ".png"//9
+ tbtNum10NexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_num10-" + receivedTbtValue10 + ".png"//9
+ tbtNum100NexMap.source = "qrc:/Images/ADASView/TBT/map_tbt_num100-" + receivedTbtValue100 + ".png"//1
+
+ value_anim.start()
+ currentTbtValue = receivedTbtValue
+ }
+
+ Item{
+ id:tbtNormal
+ /*-----------------------------------current tbt value------------------------------------*/
+ Image{
+ id:tbtUnitCur
+ x:1525
+ y:327
+ width:23
+ height:17
+ opacity: 0
+ }
+ Image{
+ id:tbtNum1Cur
+ x:1501
+ y:316
+ width:19
+ height:28
+ opacity: 0
+ }
+ Image{
+ id:tbtNum10Cur
+ x:1482
+ y:316
+ width:19
+ height:28
+ opacity: 0
+ }
+ Image{
+ id:tbtNum100Cur
+ x:1463
+ y:316
+ width:19
+ height:28
+ opacity: 0
+ }
+ /*----------------------------------- next tbt value ------------------------------------*/
+ Image{
+ id:tbtUnitNex
+ x:1525
+ y:327
+ width:23
+ height:17
+ opacity: 0
+ }
+ Image{
+ id:tbtNum1Nex
+ x:1501
+ y:316
+ width:19
+ height:28
+ opacity: 0
+ }
+ Image{
+ id:tbtNum10Nex
+ x:1482
+ y:316
+ width:19
+ height:28
+ opacity: 0
+ }
+ Image{
+ id:tbtNum100Nex
+ x:1463
+ y:316
+ width:19
+ height:28
+ opacity: 0
+ }
+ /*-----------------------------------current tbt arrow------------------------------------*/
+ Image{
+ id:tbtArrowCur
+ x:1349
+ y:176
+ width:307
+ height:111
+ opacity: 0
+ }
+ /*----------------------------------- next tbt arrow ------------------------------------*/
+ Image{
+ id:tbtArrowNex
+ x:1349
+ y:176
+ width:307
+ height:111
+ opacity: 0
+ }
+ }
+
+ Item{
+ id:tbtMap
+ y: -20
+ visible: false
+ /*-----------------------------------current tbt value------------------------------------*/
+ Image{
+ id:tbtUnitCurMap
+ x:974
+ y:440
+ width:26
+ height:20
+ opacity: 0
+ }
+ Image{
+ id:tbtNum1CurMap
+ x:948
+ y:428
+ width:24
+ height:32
+ opacity: 0
+ }
+ Image{
+ id:tbtNum10CurMap
+ x:925
+ y:428
+ width:24
+ height:32
+ opacity: 0
+ }
+ Image{
+ id:tbtNum100CurMap
+ x:902
+ y:428
+ width:24
+ height:32
+ opacity: 0
+ }
+ /*----------------------------------- next tbt value ------------------------------------*/
+ Image{
+ id:tbtUnitNexMap
+ x:974
+ y:440
+ width:26
+ height:20
+ opacity: 0
+ }
+ Image{
+ id:tbtNum1NexMap
+ x:948
+ y:428
+ width:24
+ height:32
+ opacity: 0
+ }
+ Image{
+ id:tbtNum10NexMap
+ x:925
+ y:428
+ width:24
+ height:32
+ opacity: 0
+ }
+ Image{
+ id:tbtNum100NexMap
+ x:902
+ y:428
+ width:24
+ height:32
+ opacity: 0
+ }
+ /*-----------------------------------current tbt arrow------------------------------------*/
+ Image{
+ id:tbtArrowCurMap
+ x:798
+ y:296
+ width:307
+ height:111
+ opacity: 0
+ }
+ /*----------------------------------- next tbt arrow ------------------------------------*/
+ Image{
+ id:tbtArrowNexMap
+ x:798
+ y:296
+ width:307
+ height:111
+ opacity: 0
+ }
+ }
+
+ /*----------------------------------- value animation ------------------------------------*/
+ ParallelAnimation{
+ id: value_anim
+ NumberAnimation {
+ target: tbtUnitCur
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtNum1Cur
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtNum10Cur
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtNum100Cur
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtUnitNex
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ NumberAnimation {
+ target: tbtNum1Nex
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ NumberAnimation {
+ target: tbtNum10Nex
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ NumberAnimation {
+ target: tbtNum100Nex
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+
+ NumberAnimation {
+ target: tbtUnitCurMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtNum1CurMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtNum10CurMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtNum100CurMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtUnitNexMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ NumberAnimation {
+ target: tbtNum1NexMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ NumberAnimation {
+ target: tbtNum10NexMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ NumberAnimation {
+ target: tbtNum100NexMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ }
+
+ /*----------------------------------- arrow animation ------------------------------------*/
+ ParallelAnimation{
+ id: arrowAnim
+ NumberAnimation {
+ target: tbtArrowCur
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtArrowNex
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+
+ NumberAnimation {
+ target: tbtArrowCurMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from: 1
+ to: 0
+ }
+ NumberAnimation {
+ target: tbtArrowNexMap
+ property: "opacity"
+ duration: 500
+ easing.type: Easing.Linear
+ from : 0
+ to: 1
+ }
+ }
+
+ /*----------------------------------- mode toransition animation ------------------------------------*/
+ SequentialAnimation{
+ id:normalToAdasAnimationTbt
+ onStarted: rootItem.focus=false
+ NumberAnimation {
+ target: tbtNormal
+ property: "opacity"
+ duration: 330
+ from:1
+ to:0
+ }
+
+ PropertyAnimation{
+ target: tbtNormal
+ property: "visible"
+ duration: 0
+ from: true
+ to: false
+ }
+ }
+
+ SequentialAnimation{
+ id: adasToMapAnimationTbt
+ onStarted: rootItem.focus=false
+ PropertyAnimation{
+ target: tbtMap
+ property: "visible"
+ duration: 0
+ to: true
+ }
+
+ PropertyAnimation{
+ target: tbtMap
+ property: "opacity"
+ duration: 330
+ to: 1
+ }
+ }
+
+ SequentialAnimation{
+ id:mapToNormalAnimationTbt
+ onStarted: rootItem.focus=false
+ onStopped: rootItem.focus=true
+ PauseAnimation {
+ duration: 254
+ }
+
+ PropertyAnimation{
+ target: tbtMap
+ property: "opacity"
+ duration: 330
+ to: 0
+ }
+
+ PropertyAnimation{
+ target: tbtMap
+ property: "visible"
+ duration: 0
+ to: false
+ }
+
+ PauseAnimation {
+ duration: 891
+ }
+
+ PropertyAnimation{
+ target: tbtNormal
+ property: "visible"
+ duration:0
+ from:"flase"
+ to: true
+ }
+
+ NumberAnimation {
+ target: tbtNormal
+ property: "opacity"
+ duration: 330
+ from:0
+ to:1
+ }
+ }
+ }
+}
diff --git a/GUIModel/main.qml b/GUIModel/main.qml
new file mode 100644
index 0000000..81cafb5
--- /dev/null
+++ b/GUIModel/main.qml
@@ -0,0 +1,388 @@
+/*
+ * Copyright (c) 2020,2021 Panasonic Corporation
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+ * THE SOFTWARE.
+ */
+
+import QtQuick 2.14
+import QtQuick.Window 2.14
+import QtQuick.Scene3D 2.14
+
+import "./FPSItem"
+import "./ACC"
+import "./CruisingRange"
+import "./Header"
+import "./Map"
+import "./Menu"
+import "./Meter"
+import "./ShiftPosition"
+import "./Telltale"
+import "./TurnByTurn"
+
+
+Window {
+ id: winl
+ visible: true
+ width: 1920
+ height: 720
+ color: "black"
+ flags: Qt.FramelessWindowHint
+ maximumWidth: width
+ maximumHeight: height
+ Item{
+ id: rootItem
+ width: 1920
+ height: 720
+ focus: true
+ clip: true
+ property int mode: 0 /* 0:normal 1:adas 2:map */
+ property string car_state : "normal_default"
+ property string arrow_state : "arrow_normal_default"
+ property string set_state : "set_default"
+ signal transNormalToAdas()
+ signal transAdasToMap()
+ signal transMapToNormal()
+
+ signal keyPressed_Up()
+ signal keyPressed_Down()
+ signal keyPressed_Left()
+ signal keyPressed_Right()
+ signal keyPressed_Enter()
+ signal keyPressed_Menu()
+
+
+ Item{
+ id:viewdata
+ property int tbtArrow: 0
+ property int tbtValue: 200
+
+ onTbtArrowChanged: {
+ turnByTurn.receivedArrowId = tbtArrow
+ stage.received_id = tbtArrow
+ }
+
+ onTbtValueChanged: {
+ turnByTurn.receivedTbtValue = tbtValue
+ }
+ }
+
+ Item{
+ id:acc3d_parts
+ width:1920
+ height:1080
+ Item{
+ id:acc3d
+ Item{
+ id:ddditem
+ x:548
+ y:-23
+ width: 1920
+ height: 1080
+ scale:0.6
+ Scene3D {
+ anchors.fill: parent
+ aspects: ["input", "logic"]
+ multisample: false
+ cameraAspectRatioMode:Scene3D.UserAspectRatio
+ Stage {
+ id:stage
+ ACC_Animation{
+ property int direction_acc_line : 0
+ property int direction_acc_car : 0
+ id:accc_view
+ acc_line_pos: 1
+ acc_car_pos: 1
+ }
+ }
+ }
+
+ }
+ }
+
+ Image{
+ id: acc3d_mask
+ width:1920
+ height:720
+ source: "qrc:/Images/ADASView/ACC/3D_parts_mask.ktx"
+ visible:true
+
+ }
+ Image{ source:"qrc:/Images/ADASView/MAP/acc_cover.ktx"; width:1412; height:98; x:508; y:622 }
+
+ }
+
+ Map{
+ id: map
+ }
+
+ TurnByTurn{
+ id:turnByTurn
+ }
+ Menu{
+ id: menu
+ }
+ Meter{
+ id: meter
+ }
+ ShiftPosition{
+ id:shiftPosition
+ shiftId:0
+ }
+ CruisingRange {
+ id: cruisingRange
+ cruisingRangeValue : 750
+ }
+
+ Header{
+ id:header
+ }
+ Telltale{
+ id:telltale
+ }
+
+ Keys.onPressed: {
+
+ switch(event.key){
+ case(Qt.Key_C):
+
+ if(mode === 0){
+ transNormalToAdas();
+ }else if(mode === 1){
+ transAdasToMap();
+ }else if(mode === 2){
+ transMapToNormal()
+ }
+
+ mode++;
+ if(mode > 2) mode = 0;
+ break
+
+
+
+ case(Qt.Key_1):
+ if(shiftPosition.shiftId < 5) {
+ shiftPosition.shiftId++
+ }else{
+ shiftPosition.shiftId = 0
+ }
+ break
+
+ case(Qt.Key_2):
+ if(accc_view.direction_acc_line === 0){
+ if(accc_view.acc_line_pos == 1) {
+ accc_view.acc_line_pos++
+ if(mode == 0){
+ rootItem.arrow_state = "arrow_normal_middle"
+ }else{
+ rootItem.arrow_state = "arrow_adas_middle"}
+ rootItem.set_state = "set_middle"
+ }else if(accc_view.acc_line_pos == 2){
+ accc_view.acc_line_pos++
+ if(mode == 0){
+ rootItem.arrow_state = "arrow_normal_near"
+ }else{
+ rootItem.arrow_state = "arrow_adas_near"}
+ rootItem.set_state = "set_near"
+ }else if(accc_view.acc_line_pos == 3){
+ accc_view.acc_line_pos--
+ if(mode == 0){
+ rootItem.arrow_state = "arrow_normal_middle"
+ }else{
+ rootItem.arrow_state = "arrow_adas_middle"}
+ rootItem.set_state = "set_middle"
+ accc_view.direction_acc_line = 1
+ }
+ }else{
+ if(accc_view.acc_line_pos == 3) {
+ accc_view.acc_line_pos--
+ if(mode == 0){
+ rootItem.arrow_state = "arrow_normal_middle"
+ }else{
+ rootItem.arrow_state = "arrow_adas_middle"}
+ rootItem.set_state = "set_middle"
+ }else if(accc_view.acc_line_pos == 2){
+ accc_view.acc_line_pos--
+ if(mode == 0){
+ rootItem.arrow_state = "arrow_normal_default"
+ }else{
+ rootItem.arrow_state = "arrow_adas_default"}
+ rootItem.set_state = "set_default"
+ }else if(accc_view.acc_line_pos == 1){
+ accc_view.acc_line_pos++
+ if(mode == 0){
+ rootItem.arrow_state = "arrow_normal_middle"
+ }else{
+ rootItem.arrow_state = "arrow_adas_middle"}
+ rootItem.set_state = "set_middle"
+ accc_view.direction_acc_line = 0
+ }
+ }
+ break
+
+ case(Qt.Key_3):
+ if(accc_view.direction_acc_car == 0){
+ if(accc_view.acc_car_pos == 1) {
+ accc_view.acc_car_pos++
+ if(mode == 0){
+ rootItem.car_state = "nornal_middle"
+ }else{
+ rootItem.car_state = "adas_middle"}
+ }else if(accc_view.acc_car_pos == 2) {
+ accc_view.acc_car_pos++
+ if(mode == 0){
+ rootItem.car_state = "normal_near"
+ }else{
+ rootItem.car_state = "adas_near"}
+ }else if(accc_view.acc_car_pos == 3) {
+ accc_view.acc_car_pos--
+ accc_view.direction_acc_car = 1
+ if(mode == 0){
+ rootItem.car_state = "normal_middle"
+ }else{
+ rootItem.car_state = "adas_middle"}
+ }
+ }else{
+ if(accc_view.acc_car_pos == 3) {
+ accc_view.acc_car_pos--
+ if(mode == 0){
+ rootItem.car_state = "normal_middle"
+ }else{
+ rootItem.car_state = "adas_middle"}
+ }else if(accc_view.acc_car_pos == 2) {
+ accc_view.acc_car_pos--
+ if(mode == 0){
+ rootItem.car_state = "normal_default"
+ }else{
+ rootItem.car_state = "adas_default"}
+ }else if(accc_view.acc_car_pos == 1){
+ accc_view.acc_car_pos++
+ accc_view.direction_acc_car = 0
+ if(mode == 0){
+ rootItem.car_state = "normal_middle"
+ }else{
+ rootItem.car_state = "adas_middle"}
+ }
+ }
+ break
+ case(Qt.Key_4):
+ telltaleSwitching();
+ break
+
+ case(Qt.Key_Up):
+ keyPressed_Up()
+ break
+
+ case(Qt.Key_Down):
+ keyPressed_Down()
+ break
+
+ case(Qt.Key_Left):
+ keyPressed_Left()
+ break
+
+ case(Qt.Key_Right):
+ keyPressed_Right()
+ break
+
+ case(Qt.Key_Space):
+ keyPressed_Enter()
+ break
+
+ case(Qt.Key_M):
+ keyPressed_Menu()
+ break
+
+ default:
+ break
+
+
+ }
+ }
+
+
+ Timer { //test
+ property int num : 0
+ interval: 5000
+ repeat: true
+ running: true
+ onTriggered: {
+ num++;
+ if(num == 5){num = 1}
+ viewdata.tbtArrow = num;
+ }
+ }
+
+ Timer { //test
+ property int v : 200
+ interval: 5000
+ repeat: true
+ running: true
+ onTriggered: {
+ if(v - 20 >= 0){
+ v = v - 20
+ }else{
+ v = 200
+ }
+ viewdata.tbtValue = v;
+ }
+ }
+ }
+
+// FpsItem{}
+
+ function telltaleSwitching(){
+ telltale.telltaleMasterWarn = !telltale.telltaleMasterWarn
+ telltale.telltaleGeneralWarn = !telltale.telltaleGeneralWarn
+ telltale.telltaleBrakeEnergyRecovOff = !telltale.telltaleBrakeEnergyRecovOff
+ telltale.telltaleBrakeEnergyRecovLv = !telltale.telltaleBrakeEnergyRecovLv
+ telltale.telltaleMotorWarn = !telltale.telltaleMotorWarn
+ telltale.telltalePopupHoodWarn = !telltale.telltalePopupHoodWarn
+ telltale.telltaleDecharge = !telltale.telltaleDecharge
+ telltale.telltaleEvSystemWarn = !telltale.telltaleEvSystemWarn
+ telltale.telltaleChargingPlugWarn = !telltale.telltaleChargingPlugWarn
+ telltale.telltaleLowBatt = !telltale.telltaleLowBatt
+ telltale.telltaleBattWarn = !telltale.telltaleBattWarn
+ telltale.telltaleBattTempWarn = !telltale.telltaleBattTempWarn
+ telltale.telltaleHighVoltBattCut = !telltale.telltaleHighVoltBattCut
+ telltale.telltaleAeb = !telltale.telltaleAeb
+ telltale.telltaleLdw = !telltale.telltaleLdw
+ telltale.telltaleBsd = !telltale.telltaleBsd
+ telltale.telltaleSrsAirbag = !telltale.telltaleSrsAirbag
+ telltale.telltaleEpsOff = !telltale.telltaleEpsOff
+ telltale.telltaleBrake = !telltale.telltaleBrake
+ telltale.telltaleAbsWarn = !telltale.telltaleAbsWarn
+ telltale.telltaleEspAct = !telltale.telltaleEspAct
+ telltale.telltaleHillDescent = !telltale.telltaleHillDescent
+ telltale.telltaleAutoParking = !telltale.telltaleAutoParking
+ telltale.telltaleTpmsInd = !telltale.telltaleTpmsInd
+ telltale.telltaleImmobi = !telltale.telltaleImmobi
+ telltale.telltaleDoor = !telltale.telltaleDoor
+ telltale.telltaleSeatbelt = !telltale.telltaleSeatbelt
+ telltale.telltaleSeatbelt2 = !telltale.telltaleSeatbelt2
+ telltale.telltaleEpbWarn = !telltale.telltaleEpbWarn
+ telltale.telltaleEps= !telltale.telltaleEps
+ telltale.telltaleHighbeamAssist = !telltale.telltaleHighbeamAssist
+ telltale.telltaleHighbeam = !telltale.telltaleHighbeam
+ telltale.telltaleRearFog = !telltale.telltaleRearFog
+ telltale.telltaleLowbeam = !telltale.telltaleLowbeam
+ telltale.telltalePosition = !telltale.telltalePosition
+ }
+}
+
+