diff options
author | 0 <0> | 2021-05-21 22:50:39 +0900 |
---|---|---|
committer | 0 <0> | 2021-05-21 22:50:39 +0900 |
commit | 32264925b9cc54b8b8b92fa40e0717095a1bb9d7 (patch) | |
tree | 640baf7342f30e5cfb6f39a5952a06a172bc75cd /GUIModel | |
parent | 5c0cca5b770cb30d547f3d7c56be9f46aa1a31b8 (diff) |
initial commit
Diffstat (limited to 'GUIModel')
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 Binary files differnew file mode 100644 index 0000000..5c6eefd --- /dev/null +++ b/GUIModel/FPSItem/spinner.png 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 + } +} + + |