Implement example charts for information tab

This commit is contained in:
2024-09-16 20:19:14 +02:00
parent 48e588824a
commit d8543d5e79
8 changed files with 365 additions and 335 deletions

View File

@@ -15,7 +15,7 @@ endif(CCACHE_FOUND)
add_definitions(-DQT_GUI_LIB) add_definitions(-DQT_GUI_LIB)
add_subdirectory(3rdparty) add_subdirectory(3rdparty)
find_package(Qt6 REQUIRED COMPONENTS Core Gui Quick WebSockets LinguistTools) find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Quick WebSockets LinguistTools)
qt_standard_project_setup(REQUIRES 6.6 I18N_TRANSLATED_LANGUAGES de) qt_standard_project_setup(REQUIRES 6.6 I18N_TRANSLATED_LANGUAGES de)
@@ -114,6 +114,7 @@ qt_add_qml_module(evcharger-app
RequestStatusText.qml RequestStatusText.qml
SchedulerDayPage.qml SchedulerDayPage.qml
SchedulerPage.qml SchedulerPage.qml
ScrollableTabPage.qml
SecurityPage.qml SecurityPage.qml
SelectLogicModeItem.qml SelectLogicModeItem.qml
SelectPhaseSwitchModeItem.qml SelectPhaseSwitchModeItem.qml
@@ -162,6 +163,7 @@ set_source_files_properties(Constants.qml PROPERTIES QT_QML_SINGLETON_TYPE TRUE)
target_link_libraries(evcharger-app PUBLIC target_link_libraries(evcharger-app PUBLIC
Qt6::Core Qt6::Core
Qt6::Gui Qt6::Gui
Qt6::Widgets
Qt6::Quick Qt6::Quick
Qt6::WebSockets Qt6::WebSockets
qmsgpack qmsgpack

View File

@@ -25,228 +25,218 @@ AnimatedStackView {
onCloseRequested: stackView.closeRequested() onCloseRequested: stackView.closeRequested()
} }
Flickable { ScrollableTabPage {
id: flickable
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
contentHeight: columnLayout.implicitHeight
clip: true
ColumnLayout { RowLayout {
id: columnLayout Layout.fillWidth: true
width: flickable.width - 30
x: 15
spacing: 5
RowLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
ColumnLayout { Text {
Layout.fillWidth: true Layout.fillWidth: true
Text {
Layout.fillWidth: true
ApiKeyValueHelper {
id: errApiKeyHelper
deviceConnection: theDeviceConnection
apiKey: "err"
}
text: {
switch (carApiKeyHelper.value)
{
case 0: return qsTr("Internal error")
case 1: return qsTr("No car connected")
case 2: return qsTr("Car is charging")
case 3: return qsTr("Connecting to your car...")
case 4: return qsTr("Charging completed")
case 5: return qsTr("Unknown error %0").arg(errApiKeyHelper.value)
}
}
font.pixelSize: 20
font.bold: true
wrapMode: Text.Wrap
}
Text {
ApiKeyValueHelper {
id: chargingDurationInfo
deviceConnection: theDeviceConnection
apiKey: "cdi"
}
ApiKeyValueHelper {
id: powerInfo
deviceConnection: theDeviceConnection
apiKey: "nrg"
}
ApiKeyValueHelper {
id: energyInfo
deviceConnection: theDeviceConnection
apiKey: "wh"
}
Layout.fillWidth: true
text: {
switch (carApiKeyHelper.value)
{
case 0: return null
case 1: return qsTr("Plug in the cable to start charging your car")
case 2: return qsTr("Duration: %0").arg(getDurationInfo()) + "\n" +
qsTr("Speed: %0").arg(getChargingSpeed()) + "\n" +
qsTr("Amount: %0").arg(getChargingAmount())
case 3: return qsTr("Charger is connecting to your car, it usually takes a few seconds")
case 4: return qsTr("Let's go-e :)")
case 5: return null
}
}
wrapMode: Text.Wrap
function getDurationInfo() {
if (!chargingDurationInfo.exists)
return qsTr("(api key doesnt exist)")
if (typeof chargingDurationInfo.value == null)
return qsTr("(api key is null)")
if (typeof chargingDurationInfo.value !== 'object')
return qsTr("(api key is not an object)")
if (!('type' in chargingDurationInfo.value))
return qsTr("(api key does not contain a type)")
switch (chargingDurationInfo.value.type)
{
case 0: // counter going up, use rbt
return formatDuration(rebootTime.value - chargingDurationInfo.value.value)
case 1: // counter frozen, absolute duration
return formatDuration(chargingDurationInfo.value.value)
}
return qsTr("(api key has unknown type %0)").arg(chargingDurationInfo.value.type)
}
function getChargingSpeed() {
return qsTr("%0 %1 %2")
.arg(qsTr("%0 A").arg(Qt.locale().toString(powerInfo.value[4], 'f', 1)))
.arg(qsTr("%0 A").arg(Qt.locale().toString(powerInfo.value[5], 'f', 1)))
.arg(qsTr("%0 A").arg(Qt.locale().toString(powerInfo.value[6], 'f', 1)))
}
function getChargingAmount() {
return qsTr("%0 kWh").arg(Qt.locale().toString(energyInfo.value / 1000., 'f', 1))
}
}
}
Image {
Layout.preferredWidth: parent.width / 4
Layout.preferredHeight: paintedHeight
fillMode: Image.PreserveAspectFit
ApiKeyValueHelper { ApiKeyValueHelper {
id: devicetype id: errApiKeyHelper
deviceConnection: theDeviceConnection deviceConnection: theDeviceConnection
apiKey: "typ" apiKey: "err"
} }
ApiKeyValueHelper { text: {
id: isgo switch (carApiKeyHelper.value)
deviceConnection: theDeviceConnection
apiKey: "isgo"
}
source: {
if (devicetype.value == "go-eCharger_V5" ||
devicetype.value == "go-eCharger_V4")
{ {
if (isgo.value) case 0: return qsTr("Internal error")
return "images/geminiFlex.png" case 1: return qsTr("No car connected")
else case 2: return qsTr("Car is charging")
return "images/geminiFix.png" case 3: return qsTr("Connecting to your car...")
} else if (devicetype.value == "wattpilot_V2") { case 4: return qsTr("Charging completed")
return "images/wattpilot.png" case 5: return qsTr("Unknown error %0").arg(errApiKeyHelper.value)
} else if (devicetype.value == "go-eCharger" ||
devicetype.value == "wattpilot") {
return "images/homeFix.png"
} else if (devicetype.value == "go-eCharger_Phoenix") {
return "images/phoenix.png"
} }
}
font.pixelSize: 20
font.bold: true
wrapMode: Text.Wrap
}
return "material-icons/grid_guides.svg" Text {
ApiKeyValueHelper {
id: chargingDurationInfo
deviceConnection: theDeviceConnection
apiKey: "cdi"
}
ApiKeyValueHelper {
id: powerInfo
deviceConnection: theDeviceConnection
apiKey: "nrg"
}
ApiKeyValueHelper {
id: energyInfo
deviceConnection: theDeviceConnection
apiKey: "wh"
}
Layout.fillWidth: true
text: {
switch (carApiKeyHelper.value)
{
case 0: return null
case 1: return qsTr("Plug in the cable to start charging your car")
case 2: return qsTr("Duration: %0").arg(getDurationInfo()) + "\n" +
qsTr("Speed: %0").arg(getChargingSpeed()) + "\n" +
qsTr("Amount: %0").arg(getChargingAmount())
case 3: return qsTr("Charger is connecting to your car, it usually takes a few seconds")
case 4: return qsTr("Let's go-e :)")
case 5: return null
}
}
wrapMode: Text.Wrap
function getDurationInfo() {
if (!chargingDurationInfo.exists)
return qsTr("(api key doesnt exist)")
if (typeof chargingDurationInfo.value == null)
return qsTr("(api key is null)")
if (typeof chargingDurationInfo.value !== 'object')
return qsTr("(api key is not an object)")
if (!('type' in chargingDurationInfo.value))
return qsTr("(api key does not contain a type)")
switch (chargingDurationInfo.value.type)
{
case 0: // counter going up, use rbt
return formatDuration(rebootTime.value - chargingDurationInfo.value.value)
case 1: // counter frozen, absolute duration
return formatDuration(chargingDurationInfo.value.value)
}
return qsTr("(api key has unknown type %0)").arg(chargingDurationInfo.value.type)
}
function getChargingSpeed() {
return qsTr("%0 %1 %2")
.arg(qsTr("%0 A").arg(Qt.locale().toString(powerInfo.value[4], 'f', 1)))
.arg(qsTr("%0 A").arg(Qt.locale().toString(powerInfo.value[5], 'f', 1)))
.arg(qsTr("%0 A").arg(Qt.locale().toString(powerInfo.value[6], 'f', 1)))
}
function getChargingAmount() {
return qsTr("%0 kWh").arg(Qt.locale().toString(energyInfo.value / 1000., 'f', 1))
} }
} }
} }
StartStopButton { Image {
Layout.fillWidth: true Layout.preferredWidth: parent.width / 4
deviceConnection: theDeviceConnection Layout.preferredHeight: paintedHeight
}
ApiKeyValueHelper { fillMode: Image.PreserveAspectFit
id: logicMode
deviceConnection: theDeviceConnection
apiKey: "lmo"
}
SelectLogicModeItem {
Layout.fillWidth: true
}
NavigationItem {
ApiKeyValueHelper { ApiKeyValueHelper {
id: priceLimitHelper id: devicetype
deviceConnection: theDeviceConnection deviceConnection: theDeviceConnection
apiKey: "awp" apiKey: "typ"
} }
visible: logicMode.value == 4 ApiKeyValueHelper {
iconSource: "material-icons/grid_guides.svg" id: isgo
title: qsTr("Price limit") deviceConnection: theDeviceConnection
description: qsTr("%0 ct/kWh").arg(Qt.locale().toString(priceLimitHelper.value, 'f', 1)) apiKey: "isgo"
component: Component { }
SetPriceLimitPage {
source: {
if (devicetype.value == "go-eCharger_V5" ||
devicetype.value == "go-eCharger_V4")
{
if (isgo.value)
return "images/geminiFlex.png"
else
return "images/geminiFix.png"
} else if (devicetype.value == "wattpilot_V2") {
return "images/wattpilot.png"
} else if (devicetype.value == "go-eCharger" ||
devicetype.value == "wattpilot") {
return "images/homeFix.png"
} else if (devicetype.value == "go-eCharger_Phoenix") {
return "images/phoenix.png"
} }
return "material-icons/grid_guides.svg"
} }
} }
}
NavigationItem { StartStopButton {
visible: logicMode.value == 5 Layout.fillWidth: true
iconSource: "material-icons/grid_guides.svg" deviceConnection: theDeviceConnection
title: qsTr("Daily trip") }
description: qsTr("By %0 with %1").arg("08:00").arg(qsTr("%0 km").arg(100))
component: Component {
DailyTripPage {
}
}
}
ApiKeyValueHelper {
id: logicMode
deviceConnection: theDeviceConnection
apiKey: "lmo"
}
SelectLogicModeItem {
Layout.fillWidth: true
}
NavigationItem {
ApiKeyValueHelper { ApiKeyValueHelper {
id: requestedCurrent id: priceLimitHelper
deviceConnection: theDeviceConnection deviceConnection: theDeviceConnection
apiKey: "amp" apiKey: "awp"
} }
ApiKeyValueHelper { visible: logicMode.value == 4
id: phaseSwitchMode iconSource: "material-icons/grid_guides.svg"
deviceConnection: theDeviceConnection title: qsTr("Price limit")
apiKey: "psm" description: qsTr("%0 ct/kWh").arg(Qt.locale().toString(priceLimitHelper.value, 'f', 1))
component: Component {
SetPriceLimitPage {
}
} }
}
NavigationItem { NavigationItem {
iconSource: "material-icons/grid_guides.svg" visible: logicMode.value == 5
title: qsTr("Charging speed") iconSource: "material-icons/grid_guides.svg"
description: qsTr("%0 & %1") title: qsTr("Daily trip")
.arg(qsTr("%0 Ampere").arg(requestedCurrent.value)) description: qsTr("By %0 with %1").arg("08:00").arg(qsTr("%0 km").arg(100))
.arg((function(){ component: Component {
switch (phaseSwitchMode.value) DailyTripPage {
{ }
case 0: return qsTr("Automatic phase selection"); }
case 1: return qsTr("1-phase"); }
case 2: return qsTr("3-phase");
case 3: return qsTr("Unknown phase selection (%0)").arg(phaseSwitchMode.value); ApiKeyValueHelper {
} id: requestedCurrent
})()) deviceConnection: theDeviceConnection
component: Component { apiKey: "amp"
ChargingSpeedPage { }
ApiKeyValueHelper {
id: phaseSwitchMode
deviceConnection: theDeviceConnection
apiKey: "psm"
}
NavigationItem {
iconSource: "material-icons/grid_guides.svg"
title: qsTr("Charging speed")
description: qsTr("%0 & %1")
.arg(qsTr("%0 Ampere").arg(requestedCurrent.value))
.arg((function(){
switch (phaseSwitchMode.value)
{
case 0: return qsTr("Automatic phase selection");
case 1: return qsTr("1-phase");
case 2: return qsTr("3-phase");
case 3: return qsTr("Unknown phase selection (%0)").arg(phaseSwitchMode.value);
} }
})())
component: Component {
ChargingSpeedPage {
} }
} }
} }

View File

@@ -24,112 +24,102 @@ AnimatedStackView {
onCloseRequested: stackView.closeRequested() onCloseRequested: stackView.closeRequested()
} }
Flickable { ScrollableTabPage {
id: flickable
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true Layout.fillHeight: true
contentHeight: columnLayout.implicitHeight
clip: true
ColumnLayout { RowLayout {
id: columnLayout Layout.fillWidth: true
width: flickable.width - 30
x: 15
spacing: 5
RowLayout { ColumnLayout {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true
ColumnLayout { Text {
Layout.fillWidth: true Layout.fillWidth: true
Layout.fillHeight: true width: 100
Text { text: qsTr("Connected")
Layout.fillWidth: true font.pixelSize: 20
width: 100 font.bold: true
wrapMode: Text.Wrap
text: qsTr("Connected")
font.pixelSize: 20
font.bold: true
wrapMode: Text.Wrap
}
}
Image {
Layout.preferredWidth: parent.width / 3
Layout.preferredHeight: paintedHeight
fillMode: Image.PreserveAspectFit
source: "images/controller.png"
} }
} }
WhiteBox { Image {
Layout.fillWidth: true Layout.preferredWidth: parent.width / 3
Layout.preferredHeight: gridLayout.implicitHeight + 20 Layout.preferredHeight: paintedHeight
GridLayout { fillMode: Image.PreserveAspectFit
id: gridLayout
anchors.fill: parent
columns: 3
Repeater { source: "images/controller.png"
model: 9 }
}
Pane { WhiteBox {
Layout.fillWidth: true Layout.fillWidth: true
Layout.preferredHeight: 50 Layout.preferredHeight: gridLayout.implicitHeight + 20
Component.onCompleted: { GridLayout {
background.color = "grey" id: gridLayout
background.radius = 5 anchors.fill: parent
} columns: 3
Text { Repeater {
anchors.fill: parent model: 9
text: qsTr("Category")
} Pane {
Layout.fillWidth: true
Layout.preferredHeight: 50
Component.onCompleted: {
background.color = "grey"
background.radius = 5
}
Text {
anchors.fill: parent
text: qsTr("Category")
} }
} }
} }
} }
}
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
text: "Controller TODO" text: "Controller TODO"
} }
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
text: "Controller TODO" text: "Controller TODO"
} }
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
text: "Controller TODO" text: "Controller TODO"
} }
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
text: "Controller TODO" text: "Controller TODO"
} }
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
text: "Controller TODO" text: "Controller TODO"
} }
Text { Text {
Layout.fillWidth: true Layout.fillWidth: true
text: "Controller TODO" text: "Controller TODO"
}
} }
} }
} }

View File

@@ -1,7 +1,34 @@
import QtQuick import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import QtCharts
ScrollableTabPage {
id: page
Item {
function backPressed() { function backPressed() {
return false return false
} }
Repeater {
model: 5
ChartView {
title: "Line"
Layout.fillWidth: true
Layout.preferredHeight: page.height * 0.75
antialiasing: true
LineSeries {
name: "LineSeries"
XYPoint { x: 0; y: 0 }
XYPoint { x: 1.1; y: 2.1 }
XYPoint { x: 1.9; y: 3.3 }
XYPoint { x: 2.1; y: 2.1 }
XYPoint { x: 2.9; y: 4.9 }
XYPoint { x: 3.4; y: 3.0 }
XYPoint { x: 4.1; y: 3.3 }
}
}
}
} }

20
ScrollableTabPage.qml Normal file
View File

@@ -0,0 +1,20 @@
import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
Flickable {
default property alias data: columnLayout.data
id: flickable
Layout.fillWidth: true
Layout.fillHeight: true
contentHeight: columnLayout.implicitHeight
clip: true
ColumnLayout {
id: columnLayout
width: flickable.width - 30
x: 15
spacing: 5
}
}

View File

@@ -367,192 +367,192 @@
<translation type="vanished">Geräte</translation> <translation type="vanished">Geräte</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="59"/> <location filename="../ChargerTabPage.qml" line="50"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="59"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="50"/>
<source>Internal error</source> <source>Internal error</source>
<translation>Interner Fehler</translation> <translation>Interner Fehler</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="60"/> <location filename="../ChargerTabPage.qml" line="51"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="60"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="51"/>
<source>No car connected</source> <source>No car connected</source>
<translation>Kein Auto angeschlossen</translation> <translation>Kein Auto angeschlossen</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="61"/> <location filename="../ChargerTabPage.qml" line="52"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="61"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="52"/>
<source>Car is charging</source> <source>Car is charging</source>
<translation>Auto wird geladen</translation> <translation>Auto wird geladen</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="62"/> <location filename="../ChargerTabPage.qml" line="53"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="62"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="53"/>
<source>Connecting to your car...</source> <source>Connecting to your car...</source>
<translation>Verbinde mit Auto...</translation> <translation>Verbinde mit Auto...</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="63"/> <location filename="../ChargerTabPage.qml" line="54"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="63"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="54"/>
<source>Charging completed</source> <source>Charging completed</source>
<translation>Ladevorgang abgeschlossen</translation> <translation>Ladevorgang abgeschlossen</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="64"/> <location filename="../ChargerTabPage.qml" line="55"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="64"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="55"/>
<source>Unknown error %0</source> <source>Unknown error %0</source>
<translation>Unbekannter Fehler %0</translation> <translation>Unbekannter Fehler %0</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="95"/> <location filename="../ChargerTabPage.qml" line="86"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="95"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="86"/>
<source>Plug in the cable to start charging your car</source> <source>Plug in the cable to start charging your car</source>
<translation>Stecke das Kabel ein, um dein Auto aufzuladen</translation> <translation>Stecke das Kabel ein, um dein Auto aufzuladen</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="96"/> <location filename="../ChargerTabPage.qml" line="87"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="96"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="87"/>
<source>Duration: %0</source> <source>Duration: %0</source>
<translation>Dauer: %0</translation> <translation>Dauer: %0</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="97"/> <location filename="../ChargerTabPage.qml" line="88"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="97"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="88"/>
<source>Speed: %0</source> <source>Speed: %0</source>
<translation>Geschwindigkeit: %0</translation> <translation>Geschwindigkeit: %0</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="98"/> <location filename="../ChargerTabPage.qml" line="89"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="98"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="89"/>
<source>Amount: %0</source> <source>Amount: %0</source>
<translation>Menge: %0</translation> <translation>Menge: %0</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="99"/> <location filename="../ChargerTabPage.qml" line="90"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="99"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="90"/>
<source>Charger is connecting to your car, it usually takes a few seconds</source> <source>Charger is connecting to your car, it usually takes a few seconds</source>
<translation>Der Charger stellt die Verbindung zu deinem Auto her, das dauert in der Regel ein paar Sekunden</translation> <translation>Der Charger stellt die Verbindung zu deinem Auto her, das dauert in der Regel ein paar Sekunden</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="100"/> <location filename="../ChargerTabPage.qml" line="91"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="100"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="91"/>
<source>Let&apos;s go-e :)</source> <source>Let&apos;s go-e :)</source>
<translation>Let&apos;s go-e :)</translation> <translation>Let&apos;s go-e :)</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="108"/> <location filename="../ChargerTabPage.qml" line="99"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="108"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="99"/>
<source>(api key doesnt exist)</source> <source>(api key doesnt exist)</source>
<translation>(api key existiert nicht)</translation> <translation>(api key existiert nicht)</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="110"/> <location filename="../ChargerTabPage.qml" line="101"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="110"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="101"/>
<source>(api key is null)</source> <source>(api key is null)</source>
<translation>(api key is null)</translation> <translation>(api key is null)</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="112"/> <location filename="../ChargerTabPage.qml" line="103"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="112"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="103"/>
<source>(api key is not an object)</source> <source>(api key is not an object)</source>
<translation>(api key ist kein Objekt)</translation> <translation>(api key ist kein Objekt)</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="114"/> <location filename="../ChargerTabPage.qml" line="105"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="114"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="105"/>
<source>(api key does not contain a type)</source> <source>(api key does not contain a type)</source>
<translation>(api key beinhaltet keinen Typ)</translation> <translation>(api key beinhaltet keinen Typ)</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="122"/> <location filename="../ChargerTabPage.qml" line="113"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="122"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="113"/>
<source>(api key has unknown type %0)</source> <source>(api key has unknown type %0)</source>
<translation>(api key hat unbekannten Typ %0)</translation> <translation>(api key hat unbekannten Typ %0)</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="126"/> <location filename="../ChargerTabPage.qml" line="117"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="126"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="117"/>
<source>%0 %1 %2</source> <source>%0 %1 %2</source>
<translation>%0 %1 %2</translation> <translation>%0 %1 %2</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="127"/> <location filename="../ChargerTabPage.qml" line="118"/>
<location filename="../ChargerTabPage.qml" line="128"/> <location filename="../ChargerTabPage.qml" line="119"/>
<location filename="../ChargerTabPage.qml" line="129"/> <location filename="../ChargerTabPage.qml" line="120"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="127"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="118"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="128"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="119"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="129"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="120"/>
<source>%0 A</source> <source>%0 A</source>
<translation>%0 A</translation> <translation>%0 A</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="133"/> <location filename="../ChargerTabPage.qml" line="124"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="133"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="124"/>
<source>%0 kWh</source> <source>%0 kWh</source>
<translation>%0 kWh</translation> <translation>%0 kWh</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="202"/> <location filename="../ChargerTabPage.qml" line="193"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="202"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="193"/>
<source>Price limit</source> <source>Price limit</source>
<translation>Preisgrenze</translation> <translation>Preisgrenze</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="203"/> <location filename="../ChargerTabPage.qml" line="194"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="203"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="194"/>
<source>%0 ct/kWh</source> <source>%0 ct/kWh</source>
<translation>%0 ct/kWh</translation> <translation>%0 ct/kWh</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="214"/> <location filename="../ChargerTabPage.qml" line="205"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="214"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="205"/>
<source>By %0 with %1</source> <source>By %0 with %1</source>
<translation>Bis %0 mit %1</translation> <translation>Bis %0 mit %1</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="214"/> <location filename="../ChargerTabPage.qml" line="205"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="214"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="205"/>
<source>%0 km</source> <source>%0 km</source>
<translation>%0 km</translation> <translation>%0 km</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="235"/> <location filename="../ChargerTabPage.qml" line="226"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="235"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="226"/>
<source>Charging speed</source> <source>Charging speed</source>
<translation>Ladegeschwindigkeit</translation> <translation>Ladegeschwindigkeit</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="236"/> <location filename="../ChargerTabPage.qml" line="227"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="236"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="227"/>
<source>%0 &amp; %1</source> <source>%0 &amp; %1</source>
<translation>%0 &amp; %1</translation> <translation>%0 &amp; %1</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="237"/> <location filename="../ChargerTabPage.qml" line="228"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="237"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="228"/>
<source>%0 Ampere</source> <source>%0 Ampere</source>
<translation>%0 Ampere</translation> <translation>%0 Ampere</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="241"/> <location filename="../ChargerTabPage.qml" line="232"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="241"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="232"/>
<source>Automatic phase selection</source> <source>Automatic phase selection</source>
<translation>Automatische Phasenwahl</translation> <translation>Automatische Phasenwahl</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="242"/> <location filename="../ChargerTabPage.qml" line="233"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="242"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="233"/>
<source>1-phase</source> <source>1-phase</source>
<translation>1-phasig</translation> <translation>1-phasig</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="243"/> <location filename="../ChargerTabPage.qml" line="234"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="243"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="234"/>
<source>3-phase</source> <source>3-phase</source>
<translation>3-phasig</translation> <translation>3-phasig</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="244"/> <location filename="../ChargerTabPage.qml" line="235"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="244"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="235"/>
<source>Unknown phase selection (%0)</source> <source>Unknown phase selection (%0)</source>
<translation>Unbekannte Phasen Selektion (%0)</translation> <translation>Unbekannte Phasen Selektion (%0)</translation>
</message> </message>
@@ -569,8 +569,8 @@
<translation type="vanished">Start</translation> <translation type="vanished">Start</translation>
</message> </message>
<message> <message>
<location filename="../ChargerTabPage.qml" line="213"/> <location filename="../ChargerTabPage.qml" line="204"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="213"/> <location filename="../build/Desktop-Debug/EVChargerApp/ChargerTabPage.qml" line="204"/>
<source>Daily trip</source> <source>Daily trip</source>
<translation>Daily trip</translation> <translation>Daily trip</translation>
</message> </message>
@@ -852,14 +852,14 @@
<translation type="vanished">Geräte</translation> <translation type="vanished">Geräte</translation>
</message> </message>
<message> <message>
<location filename="../ControllerTabPage.qml" line="51"/> <location filename="../ControllerTabPage.qml" line="42"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ControllerTabPage.qml" line="51"/> <location filename="../build/Desktop-Debug/EVChargerApp/ControllerTabPage.qml" line="42"/>
<source>Connected</source> <source>Connected</source>
<translation>Verbunden</translation> <translation>Verbunden</translation>
</message> </message>
<message> <message>
<location filename="../ControllerTabPage.qml" line="91"/> <location filename="../ControllerTabPage.qml" line="82"/>
<location filename="../build/Desktop-Debug/EVChargerApp/ControllerTabPage.qml" line="91"/> <location filename="../build/Desktop-Debug/EVChargerApp/ControllerTabPage.qml" line="82"/>
<source>Category</source> <source>Category</source>
<translation>Kategorie</translation> <translation>Kategorie</translation>
</message> </message>

View File

@@ -1,4 +1,4 @@
#include <QGuiApplication> #include <QApplication>
#include <QTranslator> #include <QTranslator>
#include <QQmlApplicationEngine> #include <QQmlApplicationEngine>
#include <QQmlContext> #include <QQmlContext>
@@ -20,7 +20,7 @@ int main(int argc, char *argv[])
QCoreApplication::setOrganizationDomain("brunner.ninja"); QCoreApplication::setOrganizationDomain("brunner.ninja");
QCoreApplication::setApplicationName("evcharger-app"); QCoreApplication::setApplicationName("evcharger-app");
QGuiApplication app(argc, argv); QApplication app(argc, argv);
QTranslator translator; QTranslator translator;
if (!translator.load(QLocale(), "qml", "_", ":/EVChargerApp/i18n/")) if (!translator.load(QLocale(), "qml", "_", ":/EVChargerApp/i18n/"))

1
qmldir
View File

@@ -64,6 +64,7 @@ EVChargerApp 1.0 RebootPage.qml
EVChargerApp 1.0 RequestStatusText.qml EVChargerApp 1.0 RequestStatusText.qml
EVChargerApp 1.0 SchedulerDayPage.qml EVChargerApp 1.0 SchedulerDayPage.qml
EVChargerApp 1.0 SchedulerPage.qml EVChargerApp 1.0 SchedulerPage.qml
EVChargerApp 1.0 ScrollableTabPage.qml
EVChargerApp 1.0 SecurityPage.qml EVChargerApp 1.0 SecurityPage.qml
EVChargerApp 1.0 SelectLogicModeItem.qml EVChargerApp 1.0 SelectLogicModeItem.qml
EVChargerApp 1.0 SelectPhaseSwitchModeItem.qml EVChargerApp 1.0 SelectPhaseSwitchModeItem.qml