diff options
Diffstat (limited to 'launcher/qml')
38 files changed, 786 insertions, 0 deletions
diff --git a/launcher/qml/ChangeItemPosition.js b/launcher/qml/ChangeItemPosition.js new file mode 100644 index 0000000..9fae07c --- /dev/null +++ b/launcher/qml/ChangeItemPosition.js @@ -0,0 +1,89 @@ +function next() { + repeater.currentItem += 1; + if (repeater.currentItem > repeater.count - 1) + { + repeater.currentItem = 0; + } + var count = 0; + + for (var i = 0; i < repeater.count; i++) + { + var item = repeater.itemAt(i); + item.currentState -= 1; + if ( item.currentState < 1 ) + { + item.currentState = repeater.count; + } + if ( item.currentState >= 1 && item.currentState <= 10 ) + { + item.state = "pos" + item.currentState + } else if ( item.currentState === 15 ){ + item.state = "pos11"; + } else if ( item.currentState === 16 ){ + item.state = "pos12"; + } else if ( item.currentState === 17 ){ + item.state = "pos13"; + } else if ( item.currentState >= 18 ){ + item.state = "pos0"; + } else { + item.state = "pos10"; + } + } +} + +function prev() { + repeater.currentItem -= 1; + if (repeater.currentItem < 0) + { + repeater.currentItem = repeater.count - 1; + } + var count = repeater.count; + for (var i = 0; i < repeater.count; i++) + { + var item = repeater.itemAt(i); + item.currentState += 1; + if ( item.currentState > repeater.count ) + { + item.currentState = 1; + } + if ( item.currentState >= 1 && item.currentState <= 10 ) + { + item.state = "pos" + item.currentState + } else if ( item.currentState === 15 ){ + item.state = "pos11"; + } else if ( item.currentState === 16 ){ + item.state = "pos12"; + } else if ( item.currentState === 17 ){ + item.state = "pos13"; + } else if ( item.currentState >= 18 ){ + item.state = "pos0"; + } else { + item.state = "pos10"; + } + } +} + +function move(pos, item) { + var distance = firstPox - pos; + if(distance > 200) { + next() + firstPox = pos + iconMoved = true + item.iconReleased() + } else if (distance < -200) { + prev() + firstPox = pos + iconMoved = true + item.iconReleased() + } +} + +function getCenterItem() { + var item; + for (var i = 0; i < repeater.count; i++) + { + item = repeater.itemAt(i) + if (item.state === "pos5" || item.state === "pos14") + return item + } +} diff --git a/launcher/qml/IconItem.qml b/launcher/qml/IconItem.qml new file mode 100644 index 0000000..342b539 --- /dev/null +++ b/launcher/qml/IconItem.qml @@ -0,0 +1,137 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (c) 2018-2019 TOYOTA MOTOR CORPORATION + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import QtQuick 2.0 +import QtQuick.Controls 2.0 +import QtGraphicalEffects 1.0 +import "ChangeItemPosition.js" as Cip + +Item { + id: main + width: 300 + height: 300 + property string icon: model.icon + property int pid: -1 + property bool isBlank: false + property bool isPressing: false + + Timer { + id: launchTimer + interval: 650 + repeat: false + onTriggered: { + launchApp() + } + } + + Item { + id: container + width: main.width + height: main.height + MouseArea { + anchors.fill: parent + onClicked: { + if(main.state === "pos14") { + launchApp() + } else if(main.state === "pos4") { + Cip.prev() + launchTimer.start() + } else if(main.state === "pos3") { + Cip.prev() + Cip.prev() + launchTimer.start() + } else if(main.state === "pos2") { + Cip.prev() + Cip.prev() + Cip.prev() + launchTimer.start() + } else if(main.state === "pos1") { + Cip.prev() + Cip.prev() + Cip.prev() + Cip.prev() + launchTimer.start() + } else if(main.state === "pos6") { + Cip.next() + launchTimer.start() + } else if(main.state === "pos7") { + Cip.next() + Cip.next() + launchTimer.start() + } else if(main.state === "pos8") { + Cip.next() + Cip.next() + Cip.next() + launchTimer.start() + } else if(main.state === "pos9") { + Cip.next() + Cip.next() + Cip.next() + Cip.next() + launchTimer.start() + } + } + } + + Image { + id: item + anchors.fill: parent + source: './images/%1_active.png'.arg(model.icon) + property string initial: model.name.substring(0,1).toUpperCase() + property bool hasIcon: model.icon !== 'blank' + + Label { + style: Text.Outline + styleColor: 'white' + color: 'transparent' + font.pixelSize: 225 + anchors.centerIn: parent + anchors.verticalCenterOffset: -50 + text: item.initial + visible: item.hasIcon ? false : true + } + + Label { + id: name + anchors.bottom: item.bottom + anchors.left: parent.left + anchors.right: parent.right + anchors.margins: 20 + font.pixelSize: 25 + font.letterSpacing: 5 + wrapMode: Text.WordWrap + horizontalAlignment: Text.AlignHCenter + color: "white" + text: qsTr(model.name.toUpperCase()) + } + + } + } + function iconPressed() { + item.source = './images/%1_inactive.png'.arg(model.icon) + } + function iconReleased() { + item.source = './images/%1_active.png'.arg(model.icon) + } + function launchApp() { + pid = launcher.launch(model.id) + if (1 < pid) { + } else { + console.warn("app cannot be launched!") + } + homescreenHandler.tapShortcut(model.name) + } +} diff --git a/launcher/qml/Launcher.qml b/launcher/qml/Launcher.qml new file mode 100644 index 0000000..605eba4 --- /dev/null +++ b/launcher/qml/Launcher.qml @@ -0,0 +1,516 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * Copyright (C) 2016, 2017 Mentor Graphics Development (Deutschland) GmbH + * Copyright (c) 2018-2019 TOYOTA MOTOR CORPORATION + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import QtQuick 2.6 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.0 +import AppModel 1.0 +import "ChangeItemPosition.js" as Cip + +ApplicationWindow { + id: root + width: 1920 + height: 720 + + property int pid: -1 + property int firstPox: -1 + property bool iconMoved: false + + Timer { + id: timer + interval: 650 + repeat: false + onTriggered: { + var centerItem = Cip.getCenterItem() + centerItem.state = "pos14" + centerImage.opacity = 1.0 + } + } + + Repeater { + id: repeater + model: ApplicationModel { id: applicationModel } + + property int currentItem + + IconItem { + id: rect1 + property int currentState: 1 + + width: 300 + height: 300 + anchors.topMargin: 230 + + smooth: true + + anchors.centerIn: parent + + Behavior on opacity { + NumberAnimation { duration: 200 } + } + + Behavior on z { + NumberAnimation { duration: 300 } + } + transform: [ + Rotation { + id: rotate + angle: 0 + origin.y: 150 + origin.x: 150 + axis { x: 0; y: 1; z: 0 } + Behavior on angle { + NumberAnimation { easing.overshoot: 1; easing.type: Easing.OutBack; duration: 600 } + } + }, + Translate { + id: trans + x: 0 + y: 0 + Behavior on x { + NumberAnimation { easing.overshoot: 1; easing.type: Easing.OutBack; duration: 600 } + } + Behavior on y { + NumberAnimation { easing.overshoot: 1; easing.type: Easing.OutBack; duration: 600 } + } + }, + Scale { + id: scale + origin.x: 150 + origin.y: 150 + xScale: 1 + yScale: 1 + Behavior on xScale { + NumberAnimation { easing.overshoot: 1; easing.type: Easing.OutBack; duration: 600 } + } + Behavior on yScale { + NumberAnimation { easing.overshoot: 1; easing.type: Easing.OutBack; duration: 600 } + } + } + ] + + states: [ + State { + name: "pos0" + PropertyChanges { + target: rotate + angle: 80 + } + PropertyChanges { + target: trans + x: -1050 + y: 270 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 0 + } + PropertyChanges { + target: scale + xScale: 1.2 + yScale: 1.2 + } + }, + State { + name: "pos1" + PropertyChanges { + target: rotate + angle: 75 + } + PropertyChanges { + target: trans + x: -700 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 1.2 + yScale: 1.2 + } + }, + State { + name: "pos2" + PropertyChanges { + target: rotate + angle: 60 + } + PropertyChanges { + target: trans + x: -820 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.79 + yScale: 0.79 + } + }, + State { + name: "pos3" + PropertyChanges { + target: rotate + angle: 40 + } + PropertyChanges { + target: trans + x: -780 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.55 + yScale: 0.55 + } + }, + State { + name: "pos4" + PropertyChanges { + target: rotate + angle: 15 + } + PropertyChanges { + target: trans + x: -470 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.45 + yScale: 0.45 + } + }, + State { + name: "pos5" + PropertyChanges { + target: rotate + angle: 0 + } + PropertyChanges { + target: trans + x: 0 + y: 0 + } + PropertyChanges { + target: rect1 + z: 1 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.42 + yScale: 0.42 + } + }, + State { + name: "pos6" + PropertyChanges { + target: rotate + angle: -15 + } + PropertyChanges { + target: trans + x: 470 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.45 + yScale: 0.45 + } + }, + State { + name: "pos7" + PropertyChanges { + target: rotate + angle: -40 + } + PropertyChanges { + target: trans + x: 780 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.55 + yScale: 0.55 + } + }, + State { + name: "pos8" + PropertyChanges { + target: rotate + angle: -60 + } + PropertyChanges { + target: trans + x: 820 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 0.79 + yScale: 0.79 + } + }, + State { + name: "pos9" + PropertyChanges { + target: rotate + angle: -75 + } + PropertyChanges { + target: trans + x: 700 + y: 0 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 1.2 + yScale: 1.2 + } + }, + State { + name: "pos10" + PropertyChanges { + target: rotate + angle: -80 + } + PropertyChanges { + target: trans + x: 1050 + y: 270 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 0 + } + PropertyChanges { + target: scale + xScale: 1.2 + yScale: 1.2 + } + }, + State { + name: "pos11" + PropertyChanges { + target: rotate + angle: 0 + } + PropertyChanges { + target: trans + x: 1050 + y: 540 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 0 + } + PropertyChanges { + target: scale + xScale: 1 + yScale: 1 + } + }, + State { + name: "pos12" + PropertyChanges { + target: rotate + angle: 0 + } + PropertyChanges { + target: trans + x: 0 + y: 540 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 0 + } + PropertyChanges { + target: scale + xScale: 1 + yScale: 1 + } + }, + State { + name: "pos13" + PropertyChanges { + target: rotate + angle: 0 + } + PropertyChanges { + target: trans + x: -1050 + y: 540 + } + PropertyChanges { + target: rect1 + z: 0 + opacity: 0 + } + PropertyChanges { + target: scale + xScale: 1 + yScale: 1 + } + }, + State { + name: "pos14" + PropertyChanges { + target: rotate + angle: 0 + } + PropertyChanges { + target: trans + x: 0 + y: 0 + } + PropertyChanges { + target: rect1 + z: 1 + opacity: 1 + } + PropertyChanges { + target: scale + xScale: 1 + yScale: 1 + } + } + ] + } + + } + Component.onCompleted: { + repeater.currentItem = 5; + var count = repeater.count; + for ( var i = 0; i < repeater.count; i++) + { + var item = repeater.itemAt(i); + item.currentState = i + 1; + if ( item.currentState >= 1 && item.currentState <= 10 ) + { + item.state = "pos" + item.currentState; + if ( item.currentState === 5 ) + item.state = "pos14"; + } else if ( item.currentState === 15 ){ + item.state = "pos11"; + } else if ( item.currentState === 16 ){ + item.state = "pos12"; + } else if ( item.currentState === 17 ){ + item.state = "pos13"; + } else if ( item.currentState >= 18 ){ + item.state = "pos0"; + } else { + item.state = "pos10"; + } + } + } + + Image { + id: centerImage + source: './images/center_background.png' + height: 590 + width: 350 + anchors.centerIn: parent + opacity: 1.0 + } + + MouseArea { + anchors.fill: parent + propagateComposedEvents: true + z: 2 + + onPressed: { + firstPox = mouseX; + iconMoved = false; + centerImage.opacity = 0.0; + if(mouseX >= 800 && mouseX <= 1120) + { + var item = Cip.getCenterItem() + item.iconPressed() + } + } + + onReleased: { + timer.start() + if(mouseX >= 800 && mouseX <= 1120) + { + var item = Cip.getCenterItem() + item.iconReleased() + } + } + + onClicked: { + if (iconMoved) + { + mouse.accepted = true + } else { + mouse.accepted = false + } + } + + onPositionChanged: { + var item = Cip.getCenterItem() + Cip.move(mouseX, item) + } + } + +} diff --git a/launcher/qml/images/blank_active.png b/launcher/qml/images/blank_active.png Binary files differnew file mode 100644 index 0000000..e5a0dd4 --- /dev/null +++ b/launcher/qml/images/blank_active.png diff --git a/launcher/qml/images/blank_inactive.png b/launcher/qml/images/blank_inactive.png Binary files differnew file mode 100644 index 0000000..80b5198 --- /dev/null +++ b/launcher/qml/images/blank_inactive.png diff --git a/launcher/qml/images/browser_active.png b/launcher/qml/images/browser_active.png Binary files differnew file mode 100644 index 0000000..8ef350b --- /dev/null +++ b/launcher/qml/images/browser_active.png diff --git a/launcher/qml/images/browser_inactive.png b/launcher/qml/images/browser_inactive.png Binary files differnew file mode 100644 index 0000000..faeee45 --- /dev/null +++ b/launcher/qml/images/browser_inactive.png diff --git a/launcher/qml/images/center_background.png b/launcher/qml/images/center_background.png Binary files differnew file mode 100644 index 0000000..8e160f4 --- /dev/null +++ b/launcher/qml/images/center_background.png diff --git a/launcher/qml/images/connectivity_active.png b/launcher/qml/images/connectivity_active.png Binary files differnew file mode 100644 index 0000000..168b7fd --- /dev/null +++ b/launcher/qml/images/connectivity_active.png diff --git a/launcher/qml/images/connectivity_inactive.png b/launcher/qml/images/connectivity_inactive.png Binary files differnew file mode 100644 index 0000000..68f1ca0 --- /dev/null +++ b/launcher/qml/images/connectivity_inactive.png diff --git a/launcher/qml/images/dashboard_meter_active.png b/launcher/qml/images/dashboard_meter_active.png Binary files differnew file mode 100644 index 0000000..84b973b --- /dev/null +++ b/launcher/qml/images/dashboard_meter_active.png diff --git a/launcher/qml/images/dashboard_meter_inactive.png b/launcher/qml/images/dashboard_meter_inactive.png Binary files differnew file mode 100644 index 0000000..045658c --- /dev/null +++ b/launcher/qml/images/dashboard_meter_inactive.png diff --git a/launcher/qml/images/gtf_launcher_active.png b/launcher/qml/images/gtf_launcher_active.png Binary files differnew file mode 100644 index 0000000..fa39830 --- /dev/null +++ b/launcher/qml/images/gtf_launcher_active.png diff --git a/launcher/qml/images/gtf_launcher_inactive.png b/launcher/qml/images/gtf_launcher_inactive.png Binary files differnew file mode 100644 index 0000000..80b5198 --- /dev/null +++ b/launcher/qml/images/gtf_launcher_inactive.png diff --git a/launcher/qml/images/hvac_active.png b/launcher/qml/images/hvac_active.png Binary files differnew file mode 100644 index 0000000..9d4f6ac --- /dev/null +++ b/launcher/qml/images/hvac_active.png diff --git a/launcher/qml/images/hvac_inactive.png b/launcher/qml/images/hvac_inactive.png Binary files differnew file mode 100644 index 0000000..806d661 --- /dev/null +++ b/launcher/qml/images/hvac_inactive.png diff --git a/launcher/qml/images/images.qrc b/launcher/qml/images/images.qrc new file mode 100644 index 0000000..4f22483 --- /dev/null +++ b/launcher/qml/images/images.qrc @@ -0,0 +1,37 @@ +<RCC> + <qresource prefix="/images"> + <file>connectivity_active.png</file> + <file>connectivity_inactive.png</file> + <file>dashboard_meter_active.png</file> + <file>dashboard_meter_inactive.png</file> + <file>hvac_active.png</file> + <file>hvac_inactive.png</file> + <file>mixer_active.png</file> + <file>mixer_inactive.png</file> + <file>mediaplayer_active.png</file> + <file>mediaplayer_inactive.png</file> + <file>music_active.png</file> + <file>music_inactive.png</file> + <file>navigation_active.png</file> + <file>navigation_inactive.png</file> + <file>phone_active.png</file> + <file>phone_inactive.png</file> + <file>poi_active.png</file> + <file>poi_inactive.png</file> + <file>radio_active.png</file> + <file>radio_inactive.png</file> + <file>settings_active.png</file> + <file>settings_inactive.png</file> + <file>videoplayer_active.png</file> + <file>videoplayer_inactive.png</file> + <file>browser_active.png</file> + <file>browser_inactive.png</file> + <file>weather_active.png</file> + <file>weather_inactive.png</file> + <file>blank_active.png</file> + <file>blank_inactive.png</file> + <file>gtf_launcher_active.png</file> + <file>gtf_launcher_inactive.png</file> + <file>center_background.png</file> + </qresource> +</RCC> diff --git a/launcher/qml/images/mediaplayer_active.png b/launcher/qml/images/mediaplayer_active.png Binary files differnew file mode 100644 index 0000000..140733a --- /dev/null +++ b/launcher/qml/images/mediaplayer_active.png diff --git a/launcher/qml/images/mediaplayer_inactive.png b/launcher/qml/images/mediaplayer_inactive.png Binary files differnew file mode 100644 index 0000000..38e6111 --- /dev/null +++ b/launcher/qml/images/mediaplayer_inactive.png diff --git a/launcher/qml/images/mixer_active.png b/launcher/qml/images/mixer_active.png Binary files differnew file mode 100644 index 0000000..ab0b9f3 --- /dev/null +++ b/launcher/qml/images/mixer_active.png diff --git a/launcher/qml/images/mixer_inactive.png b/launcher/qml/images/mixer_inactive.png Binary files differnew file mode 100644 index 0000000..e3872bb --- /dev/null +++ b/launcher/qml/images/mixer_inactive.png diff --git a/launcher/qml/images/music_active.png b/launcher/qml/images/music_active.png Binary files differnew file mode 100644 index 0000000..140733a --- /dev/null +++ b/launcher/qml/images/music_active.png diff --git a/launcher/qml/images/music_inactive.png b/launcher/qml/images/music_inactive.png Binary files differnew file mode 100644 index 0000000..38e6111 --- /dev/null +++ b/launcher/qml/images/music_inactive.png diff --git a/launcher/qml/images/navigation_active.png b/launcher/qml/images/navigation_active.png Binary files differnew file mode 100644 index 0000000..ae3f720 --- /dev/null +++ b/launcher/qml/images/navigation_active.png diff --git a/launcher/qml/images/navigation_inactive.png b/launcher/qml/images/navigation_inactive.png Binary files differnew file mode 100644 index 0000000..52530d6 --- /dev/null +++ b/launcher/qml/images/navigation_inactive.png diff --git a/launcher/qml/images/phone_active.png b/launcher/qml/images/phone_active.png Binary files differnew file mode 100644 index 0000000..8a10a92 --- /dev/null +++ b/launcher/qml/images/phone_active.png diff --git a/launcher/qml/images/phone_inactive.png b/launcher/qml/images/phone_inactive.png Binary files differnew file mode 100644 index 0000000..2b61477 --- /dev/null +++ b/launcher/qml/images/phone_inactive.png diff --git a/launcher/qml/images/poi_active.png b/launcher/qml/images/poi_active.png Binary files differnew file mode 100644 index 0000000..dcf799f --- /dev/null +++ b/launcher/qml/images/poi_active.png diff --git a/launcher/qml/images/poi_inactive.png b/launcher/qml/images/poi_inactive.png Binary files differnew file mode 100644 index 0000000..c0a4fd3 --- /dev/null +++ b/launcher/qml/images/poi_inactive.png diff --git a/launcher/qml/images/radio_active.png b/launcher/qml/images/radio_active.png Binary files differnew file mode 100644 index 0000000..411f94a --- /dev/null +++ b/launcher/qml/images/radio_active.png diff --git a/launcher/qml/images/radio_inactive.png b/launcher/qml/images/radio_inactive.png Binary files differnew file mode 100644 index 0000000..f8c2cc1 --- /dev/null +++ b/launcher/qml/images/radio_inactive.png diff --git a/launcher/qml/images/settings_active.png b/launcher/qml/images/settings_active.png Binary files differnew file mode 100644 index 0000000..e9bec82 --- /dev/null +++ b/launcher/qml/images/settings_active.png diff --git a/launcher/qml/images/settings_inactive.png b/launcher/qml/images/settings_inactive.png Binary files differnew file mode 100644 index 0000000..fc72f9d --- /dev/null +++ b/launcher/qml/images/settings_inactive.png diff --git a/launcher/qml/images/videoplayer_active.png b/launcher/qml/images/videoplayer_active.png Binary files differnew file mode 100644 index 0000000..69bd5bc --- /dev/null +++ b/launcher/qml/images/videoplayer_active.png diff --git a/launcher/qml/images/videoplayer_inactive.png b/launcher/qml/images/videoplayer_inactive.png Binary files differnew file mode 100644 index 0000000..99c44ff --- /dev/null +++ b/launcher/qml/images/videoplayer_inactive.png diff --git a/launcher/qml/images/weather_active.png b/launcher/qml/images/weather_active.png Binary files differnew file mode 100644 index 0000000..4ff7223 --- /dev/null +++ b/launcher/qml/images/weather_active.png diff --git a/launcher/qml/images/weather_inactive.png b/launcher/qml/images/weather_inactive.png Binary files differnew file mode 100644 index 0000000..d5a18b3 --- /dev/null +++ b/launcher/qml/images/weather_inactive.png diff --git a/launcher/qml/qml.qrc b/launcher/qml/qml.qrc new file mode 100644 index 0000000..0dfd6b1 --- /dev/null +++ b/launcher/qml/qml.qrc @@ -0,0 +1,7 @@ +<RCC> + <qresource prefix="/"> + <file>Launcher.qml</file> + <file>IconItem.qml</file> + <file>ChangeItemPosition.js</file> + </qresource> +</RCC> |