Improvements to logic mode selector and all white boxes
This commit is contained in:
@@ -6,12 +6,8 @@ import EVChargerApp
|
|||||||
NavigationPage {
|
NavigationPage {
|
||||||
title: qsTr("Setup or add device")
|
title: qsTr("Setup or add device")
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: localLayout.implicitHeight
|
|
||||||
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: localLayout
|
id: localLayout
|
||||||
@@ -49,12 +45,8 @@ NavigationPage {
|
|||||||
Layout.preferredHeight: 50
|
Layout.preferredHeight: 50
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: cloudLayout.implicitHeight
|
|
||||||
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: cloudLayout
|
id: cloudLayout
|
||||||
|
@@ -6,13 +6,11 @@ import EVChargerApp
|
|||||||
NavigationPage {
|
NavigationPage {
|
||||||
title: qsTr("API Settings")
|
title: qsTr("API Settings")
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: localApiLayout.implicitHeight
|
|
||||||
visible: localApi.exists
|
visible: localApi.exists
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: localApiLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
GeneralOnOffSwitch {
|
GeneralOnOffSwitch {
|
||||||
@@ -92,13 +90,11 @@ NavigationPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: cloudApiLayout.implicitHeight
|
|
||||||
visible: cloudApi.exists
|
visible: cloudApi.exists
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: cloudApiLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
GeneralOnOffSwitch {
|
GeneralOnOffSwitch {
|
||||||
@@ -124,13 +120,11 @@ NavigationPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: gridApiLayout.implicitHeight
|
|
||||||
visible: gridApi.exists
|
visible: gridApi.exists
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: gridApiLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
GeneralOnOffSwitch {
|
GeneralOnOffSwitch {
|
||||||
@@ -158,13 +152,11 @@ NavigationPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: legacyApiLayout.implicitHeight
|
|
||||||
visible: legacyApi.exists
|
visible: legacyApi.exists
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: legacyApiLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
GeneralOnOffSwitch {
|
GeneralOnOffSwitch {
|
||||||
|
@@ -7,19 +7,17 @@ import EVChargerApp
|
|||||||
NavigationPage {
|
NavigationPage {
|
||||||
title: qsTr("App Settings")
|
title: qsTr("App Settings")
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: gridLayout.implicitHeight
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: gridLayout
|
anchors.fill: parent
|
||||||
columns: 2
|
columns: 2
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("Number of app instances:")
|
text: qsTr("Number of app instances:")
|
||||||
font.bold: true
|
font.bold: true
|
||||||
|
wrapMode: Text.Wrap
|
||||||
}
|
}
|
||||||
|
|
||||||
SpinBox {
|
SpinBox {
|
||||||
@@ -30,26 +28,21 @@ NavigationPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: gridLayout2.implicitHeight
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: gridLayout2
|
anchors.fill: parent
|
||||||
columns: 2
|
columns: 2
|
||||||
|
|
||||||
Label {
|
Label {
|
||||||
text: qsTr("solalaweb key:")
|
text: qsTr("solalaweb key:")
|
||||||
font.bold: true
|
font.bold: true
|
||||||
|
wrapMode: Text.Wrap
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
text: {
|
text: theSettings.solalawebKey == "" ? qsTr("Select...") : qsTr("Replace...")
|
||||||
console.log('solalawebKey', theSettings.solalawebKey);
|
|
||||||
return theSettings.solalawebKey == "" ? qsTr("Select...") : qsTr("Replace...")
|
|
||||||
}
|
|
||||||
onClicked: keyFileDialog.open()
|
onClicked: keyFileDialog.open()
|
||||||
|
|
||||||
FileDialog {
|
FileDialog {
|
||||||
@@ -62,13 +55,11 @@ NavigationPage {
|
|||||||
Label {
|
Label {
|
||||||
text: qsTr("solalaweb cert:")
|
text: qsTr("solalaweb cert:")
|
||||||
font.bold: true
|
font.bold: true
|
||||||
|
wrapMode: Text.Wrap
|
||||||
}
|
}
|
||||||
|
|
||||||
Button {
|
Button {
|
||||||
text: {
|
text: theSettings.solalawebCert == "" ? qsTr("Select...") : qsTr("Replace...")
|
||||||
console.log('solalawebCert', theSettings.solalawebCert);
|
|
||||||
return theSettings.solalawebCert == "" ? qsTr("Select...") : qsTr("Replace...")
|
|
||||||
}
|
|
||||||
onClicked: certFileDialog.open()
|
onClicked: certFileDialog.open()
|
||||||
|
|
||||||
FileDialog {
|
FileDialog {
|
||||||
|
@@ -20,8 +20,6 @@ find_package(Qt6 REQUIRED COMPONENTS Core Gui 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)
|
||||||
|
|
||||||
qt_add_executable(evcharger-app WIN32 MACOSX_BUNDLE
|
qt_add_executable(evcharger-app WIN32 MACOSX_BUNDLE
|
||||||
apikeyexistancehelper.cpp
|
|
||||||
apikeyexistancehelper.h
|
|
||||||
apikeyvaluehelper.cpp
|
apikeyvaluehelper.cpp
|
||||||
apikeyvaluehelper.h
|
apikeyvaluehelper.h
|
||||||
appsettings.cpp
|
appsettings.cpp
|
||||||
@@ -65,8 +63,8 @@ qt_add_qml_module(evcharger-app
|
|||||||
ChargerTabPage.qml
|
ChargerTabPage.qml
|
||||||
ChargingConfigurationPage.qml
|
ChargingConfigurationPage.qml
|
||||||
ChargingSpeedPage.qml
|
ChargingSpeedPage.qml
|
||||||
CloudUrlsModel.qml
|
|
||||||
CloudPage.qml
|
CloudPage.qml
|
||||||
|
CloudUrlsModel.qml
|
||||||
ConnectingScreen.qml
|
ConnectingScreen.qml
|
||||||
ConnectionPage.qml
|
ConnectionPage.qml
|
||||||
ControllerPage.qml
|
ControllerPage.qml
|
||||||
@@ -93,6 +91,7 @@ qt_add_qml_module(evcharger-app
|
|||||||
LedPage.qml
|
LedPage.qml
|
||||||
LicensesPage.qml
|
LicensesPage.qml
|
||||||
LoadBalancingPage.qml
|
LoadBalancingPage.qml
|
||||||
|
LogicModeButton.qml
|
||||||
MainScreen.qml
|
MainScreen.qml
|
||||||
NamePage.qml
|
NamePage.qml
|
||||||
NavigationItem.qml
|
NavigationItem.qml
|
||||||
@@ -105,10 +104,12 @@ qt_add_qml_module(evcharger-app
|
|||||||
RequestStatusText.qml
|
RequestStatusText.qml
|
||||||
SchedulerPage.qml
|
SchedulerPage.qml
|
||||||
SecurityPage.qml
|
SecurityPage.qml
|
||||||
|
SelectLogicModeItem.qml
|
||||||
SensorsConfigurationPage.qml
|
SensorsConfigurationPage.qml
|
||||||
SettingsTabPage.qml
|
SettingsTabPage.qml
|
||||||
SwitchLanguagePage.qml
|
SwitchLanguagePage.qml
|
||||||
VerticalTabButton.qml
|
VerticalTabButton.qml
|
||||||
|
WhiteBox.qml
|
||||||
WiFiErrorsPage.qml
|
WiFiErrorsPage.qml
|
||||||
WiFiOnOffSwitch.qml
|
WiFiOnOffSwitch.qml
|
||||||
WiFiPage.qml
|
WiFiPage.qml
|
||||||
|
@@ -3,14 +3,16 @@ import QtQuick.Controls
|
|||||||
import QtQuick.Layouts
|
import QtQuick.Layouts
|
||||||
import EVChargerApp
|
import EVChargerApp
|
||||||
|
|
||||||
Page {
|
ColumnLayout {
|
||||||
function backPressed() {
|
function backPressed() {
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
|
||||||
header: ToolBar {
|
ToolBar {
|
||||||
id: toolBar
|
id: toolBar
|
||||||
|
|
||||||
|
Layout.fillWidth: true
|
||||||
|
|
||||||
background: Rectangle {
|
background: Rectangle {
|
||||||
color: "lightblue"
|
color: "lightblue"
|
||||||
}
|
}
|
||||||
@@ -29,7 +31,6 @@ Page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
text: friendlyName.value
|
text: friendlyName.value
|
||||||
color: "white"
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -44,13 +45,15 @@ Page {
|
|||||||
|
|
||||||
Flickable {
|
Flickable {
|
||||||
id: flickable
|
id: flickable
|
||||||
anchors.fill: parent
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
contentHeight: columnLayout.implicitHeight
|
contentHeight: columnLayout.implicitHeight
|
||||||
clip: true
|
clip: true
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: columnLayout
|
id: columnLayout
|
||||||
width: flickable.width
|
width: flickable.width - 30
|
||||||
|
x: 15
|
||||||
spacing: 5
|
spacing: 5
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
@@ -62,7 +65,17 @@ Page {
|
|||||||
Text {
|
Text {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
||||||
text: qsTr("No car connected")
|
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(0)
|
||||||
|
}
|
||||||
|
}
|
||||||
font.pixelSize: 20
|
font.pixelSize: 20
|
||||||
font.bold: true
|
font.bold: true
|
||||||
wrapMode: Text.Wrap
|
wrapMode: Text.Wrap
|
||||||
@@ -71,7 +84,17 @@ Page {
|
|||||||
Text {
|
Text {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
||||||
text: qsTr("Connect the cable to charge your car")
|
text: {
|
||||||
|
switch (carApiKeyHelper.value)
|
||||||
|
{
|
||||||
|
case 0: return null
|
||||||
|
case 1: return qsTr("Plug in the cable to start charging your car")
|
||||||
|
case 2: return "TODO duration"
|
||||||
|
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
|
wrapMode: Text.Wrap
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -119,38 +142,13 @@ Page {
|
|||||||
Button {
|
Button {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
||||||
|
Material.accent: Material.White
|
||||||
|
|
||||||
text: qsTr("Start")
|
text: qsTr("Start")
|
||||||
}
|
}
|
||||||
|
|
||||||
ButtonGroup {
|
SelectLogicModeItem {
|
||||||
buttons: column.children
|
|
||||||
}
|
|
||||||
|
|
||||||
RowLayout {
|
|
||||||
id: column
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
|
|
||||||
Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
checked: true
|
|
||||||
checkable: true
|
|
||||||
text: qsTr("Eco")
|
|
||||||
display: AbstractButton.TextUnderIcon
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
checkable: true
|
|
||||||
text: qsTr("Basic")
|
|
||||||
display: AbstractButton.TextUnderIcon
|
|
||||||
}
|
|
||||||
|
|
||||||
Button {
|
|
||||||
Layout.fillWidth: true
|
|
||||||
checkable: true
|
|
||||||
text: qsTr("Daily trip")
|
|
||||||
display: AbstractButton.TextUnderIcon
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -18,14 +18,10 @@ NavigationPage {
|
|||||||
text: qsTr("Features like flexible energy tariffs, time sync and app connection are unavilable when \"Enable cloud connection\" is disabled")
|
text: qsTr("Features like flexible energy tariffs, time sync and app connection are unavilable when \"Enable cloud connection\" is disabled")
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: gridLayout.implicitHeight
|
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: gridLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
columns: 2
|
columns: 2
|
||||||
|
|
||||||
|
@@ -14,7 +14,9 @@ ColumnLayout {
|
|||||||
|
|
||||||
Connections {
|
Connections {
|
||||||
target: deviceConnection
|
target: deviceConnection
|
||||||
onFullStatusReceived: connected()
|
function onFullStatusReceived() {
|
||||||
|
connected()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Text {
|
Text {
|
||||||
|
@@ -29,7 +29,6 @@ Page {
|
|||||||
}
|
}
|
||||||
|
|
||||||
text: friendlyName.value
|
text: friendlyName.value
|
||||||
color: "white"
|
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -6,16 +6,10 @@ import EVChargerApp
|
|||||||
NavigationPage {
|
NavigationPage {
|
||||||
title: qsTr("Firmware")
|
title: qsTr("Firmware")
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: gridLayout.implicitHeight
|
|
||||||
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: gridLayout
|
|
||||||
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
columns: 2
|
columns: 2
|
||||||
|
|
||||||
@@ -58,15 +52,10 @@ NavigationPage {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: columnLayout.implicitHeight
|
|
||||||
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: columnLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
RowLayout {
|
RowLayout {
|
||||||
|
@@ -14,6 +14,7 @@ CheckDelegate {
|
|||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
background.color = "white"
|
background.color = "white"
|
||||||
background.radius = 5
|
background.radius = 5
|
||||||
|
contentItem.children[0].wrapMode = Text.Wrap
|
||||||
}
|
}
|
||||||
|
|
||||||
ApiKeyValueHelper {
|
ApiKeyValueHelper {
|
||||||
@@ -30,7 +31,6 @@ CheckDelegate {
|
|||||||
|
|
||||||
checked: valueHelper.value
|
checked: valueHelper.value
|
||||||
text: valueHelper.value ? qsTr("On") : qsTr("Off")
|
text: valueHelper.value ? qsTr("On") : qsTr("Off")
|
||||||
wrapMode: Text.Wrap
|
|
||||||
|
|
||||||
onClicked: {
|
onClicked: {
|
||||||
valueChanger.sendMessage({
|
valueChanger.sendMessage({
|
||||||
|
@@ -6,14 +6,10 @@ import EVChargerApp
|
|||||||
NavigationPage {
|
NavigationPage {
|
||||||
title: qsTr("Hardware information")
|
title: qsTr("Hardware information")
|
||||||
|
|
||||||
Rectangle {
|
WhiteBox {
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
Layout.preferredHeight: layout.implicitHeight
|
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: layout
|
|
||||||
columns: 2
|
columns: 2
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
|
41
LogicModeButton.qml
Normal file
41
LogicModeButton.qml
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import EVChargerApp
|
||||||
|
|
||||||
|
RadioButton {
|
||||||
|
id: control
|
||||||
|
|
||||||
|
checkable: true
|
||||||
|
display: AbstractButton.TextUnderIcon
|
||||||
|
|
||||||
|
required property string description
|
||||||
|
|
||||||
|
indicator: Rectangle {
|
||||||
|
color: "blue"
|
||||||
|
width: 10
|
||||||
|
height: 10
|
||||||
|
anchors.top: parent.top
|
||||||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||||||
|
visible: control.checked
|
||||||
|
}
|
||||||
|
|
||||||
|
contentItem: ColumnLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
text: control.text
|
||||||
|
color: control.checked ? "blue" : "black"
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
font.bold: true
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
}
|
||||||
|
Text {
|
||||||
|
Layout.fillWidth: true
|
||||||
|
Layout.fillHeight: true
|
||||||
|
verticalAlignment: Text.AlignVCenter
|
||||||
|
text: control.description
|
||||||
|
wrapMode: Text.Wrap
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -11,25 +11,10 @@ ItemDelegate {
|
|||||||
property string component
|
property string component
|
||||||
|
|
||||||
Layout.fillWidth: true
|
Layout.fillWidth: true
|
||||||
//width: parent.width
|
|
||||||
|
|
||||||
implicitWidth: row.implicitWidth
|
implicitWidth: row.implicitWidth
|
||||||
implicitHeight: Math.max(row.implicitHeight, 50)
|
implicitHeight: Math.max(row.implicitHeight, 50)
|
||||||
|
|
||||||
// color: "white"
|
|
||||||
// radius: 5
|
|
||||||
|
|
||||||
// MouseArea {
|
|
||||||
// anchors.fill: parent
|
|
||||||
|
|
||||||
// onClicked: stackView.push(navigationItem.component)
|
|
||||||
// }
|
|
||||||
|
|
||||||
// background: Rectangle {
|
|
||||||
// color: "white"
|
|
||||||
// radius: 5
|
|
||||||
// }
|
|
||||||
|
|
||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
background.radius = 5
|
background.radius = 5
|
||||||
background.color = 'white'
|
background.color = 'white'
|
||||||
|
@@ -13,8 +13,8 @@ BaseNavigationPage {
|
|||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
id: columnLayout
|
id: columnLayout
|
||||||
width: parent.width - 10
|
width: parent.width - 30
|
||||||
x: 5
|
x: 15
|
||||||
spacing: 5
|
spacing: 5
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
36
SelectLogicModeItem.qml
Normal file
36
SelectLogicModeItem.qml
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import EVChargerApp
|
||||||
|
|
||||||
|
WhiteBox {
|
||||||
|
RowLayout {
|
||||||
|
anchors.fill: parent
|
||||||
|
|
||||||
|
ButtonGroup {
|
||||||
|
buttons: parent.children
|
||||||
|
}
|
||||||
|
|
||||||
|
LogicModeButton {
|
||||||
|
Layout.preferredWidth: parent.width / parent.children.length
|
||||||
|
checked: true
|
||||||
|
text: qsTr("Eco")
|
||||||
|
icon.source: "icons/EcoModeFilled.svg"
|
||||||
|
description: qsTr("Eco-friendly & cost effective")
|
||||||
|
}
|
||||||
|
|
||||||
|
LogicModeButton {
|
||||||
|
Layout.preferredWidth: parent.width / parent.children.length
|
||||||
|
text: qsTr("Basic")
|
||||||
|
icon.source: "icons/EcoModeFilled.svg"
|
||||||
|
description: qsTr("Basic charging")
|
||||||
|
}
|
||||||
|
|
||||||
|
LogicModeButton {
|
||||||
|
Layout.preferredWidth: parent.width / parent.children.length
|
||||||
|
text: qsTr("Daily trip")
|
||||||
|
icon.source: "icons/EcoModeFilled.svg"
|
||||||
|
description: qsTr("Specific energy and time")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
11
WhiteBox.qml
Normal file
11
WhiteBox.qml
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
import QtQuick
|
||||||
|
import QtQuick.Controls
|
||||||
|
import QtQuick.Layouts
|
||||||
|
import EVChargerApp
|
||||||
|
|
||||||
|
Pane {
|
||||||
|
Component.onCompleted: {
|
||||||
|
background.color = "white"
|
||||||
|
background.radius = 5
|
||||||
|
}
|
||||||
|
}
|
@@ -39,20 +39,15 @@ BaseNavigationPage {
|
|||||||
// positionViewAtEnd()
|
// positionViewAtEnd()
|
||||||
// }
|
// }
|
||||||
|
|
||||||
delegate: Rectangle {
|
delegate: WhiteBox {
|
||||||
required property var modelData
|
required property var modelData
|
||||||
property var theModelData: modelData
|
property var theModelData: modelData
|
||||||
|
|
||||||
color: "white"
|
|
||||||
radius: 5
|
|
||||||
|
|
||||||
width: listView.width
|
width: listView.width
|
||||||
height: gridLayout.implicitHeight
|
|
||||||
|
|
||||||
property var properties: [ qsTr("Timestamp:"), qsTr("SSID:"), qsTr("BSSID:"), qsTr("Reason:") ]
|
property var properties: [ qsTr("Timestamp:"), qsTr("SSID:"), qsTr("BSSID:"), qsTr("Reason:") ]
|
||||||
|
|
||||||
GridLayout {
|
GridLayout {
|
||||||
id: gridLayout
|
|
||||||
anchors.fill: parent
|
anchors.fill: parent
|
||||||
|
|
||||||
Repeater {
|
Repeater {
|
||||||
|
@@ -11,6 +11,7 @@ CheckDelegate {
|
|||||||
Component.onCompleted: {
|
Component.onCompleted: {
|
||||||
background.color = "white"
|
background.color = "white"
|
||||||
background.radius = 5
|
background.radius = 5
|
||||||
|
contentItem.children[0].wrapMode = Text.Wrap
|
||||||
}
|
}
|
||||||
|
|
||||||
ApiKeyValueHelper {
|
ApiKeyValueHelper {
|
||||||
|
@@ -1,53 +0,0 @@
|
|||||||
#include "apikeyexistancehelper.h"
|
|
||||||
|
|
||||||
void ApiKeyExistanceHelper::setDeviceConnection(DeviceConnection *deviceConnection)
|
|
||||||
{
|
|
||||||
if (m_deviceConnection == deviceConnection)
|
|
||||||
return;
|
|
||||||
|
|
||||||
if (m_deviceConnection)
|
|
||||||
{
|
|
||||||
disconnect(m_deviceConnection, &DeviceConnection::fullStatusReceived,
|
|
||||||
this, &ApiKeyExistanceHelper::fullStatusReceived);
|
|
||||||
}
|
|
||||||
|
|
||||||
emit deviceConnectionChanged(m_deviceConnection = deviceConnection);
|
|
||||||
|
|
||||||
if (m_deviceConnection)
|
|
||||||
{
|
|
||||||
connect(m_deviceConnection, &DeviceConnection::fullStatusReceived,
|
|
||||||
this, &ApiKeyExistanceHelper::fullStatusReceived);
|
|
||||||
|
|
||||||
fullStatusReceived();
|
|
||||||
}
|
|
||||||
else if (m_exists)
|
|
||||||
emit existsChanged(m_exists = false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ApiKeyExistanceHelper::setApiKey(const QString &apiKey)
|
|
||||||
{
|
|
||||||
if (m_apiKey == apiKey)
|
|
||||||
return;
|
|
||||||
|
|
||||||
emit apiKeyChanged(m_apiKey = apiKey);
|
|
||||||
|
|
||||||
if (m_deviceConnection)
|
|
||||||
fullStatusReceived();
|
|
||||||
else if (m_exists)
|
|
||||||
emit existsChanged(m_exists = false);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ApiKeyExistanceHelper::fullStatusReceived()
|
|
||||||
{
|
|
||||||
if (!m_deviceConnection)
|
|
||||||
{
|
|
||||||
if (m_exists)
|
|
||||||
emit existsChanged(m_exists = false);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const auto exists = m_deviceConnection->getFullStatus().contains(m_apiKey);
|
|
||||||
|
|
||||||
if (exists != m_exists)
|
|
||||||
emit existsChanged(m_exists = exists);
|
|
||||||
}
|
|
@@ -1,38 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <QObject>
|
|
||||||
#include <QQmlEngine>
|
|
||||||
|
|
||||||
#include "deviceconnection.h"
|
|
||||||
|
|
||||||
class ApiKeyExistanceHelper : public QObject
|
|
||||||
{
|
|
||||||
Q_OBJECT
|
|
||||||
QML_ELEMENT
|
|
||||||
Q_PROPERTY(DeviceConnection* deviceConnection READ deviceConnection WRITE setDeviceConnection NOTIFY deviceConnectionChanged FINAL)
|
|
||||||
Q_PROPERTY(QString apiKey READ apiKey WRITE setApiKey NOTIFY apiKeyChanged FINAL)
|
|
||||||
Q_PROPERTY(bool exists READ exists NOTIFY existsChanged STORED false FINAL)
|
|
||||||
|
|
||||||
public:
|
|
||||||
DeviceConnection *deviceConnection() { return m_deviceConnection; }
|
|
||||||
const DeviceConnection *deviceConnection() const { return m_deviceConnection; }
|
|
||||||
void setDeviceConnection(DeviceConnection *deviceConnection);
|
|
||||||
|
|
||||||
const QString &apiKey() const { return m_apiKey; }
|
|
||||||
void setApiKey(const QString &apiKey);
|
|
||||||
|
|
||||||
bool exists() { return m_exists; }
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void fullStatusReceived();
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void deviceConnectionChanged(DeviceConnection *deviceConnection);
|
|
||||||
void apiKeyChanged(const QString &apiKey);
|
|
||||||
void existsChanged(bool exists);
|
|
||||||
|
|
||||||
private:
|
|
||||||
DeviceConnection *m_deviceConnection{};
|
|
||||||
QString m_apiKey;
|
|
||||||
bool m_exists{};
|
|
||||||
};
|
|
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="M256-200h447l-84-84q-29 21-64.5 32.5T480-240q-39 0-74.5-12T341-285l-85 85Zm-56-57 84-84q-21-29-32.5-64.5T240-480q0-39 12-74.5t33-64.5l-85-85v447Zm142-142 82-81-82-81q-11 18-16.5 38t-5.5 43q0 23 5.5 43t16.5 38Zm138 79q23 0 43-5.5t38-16.5l-81-82-82 82q18 11 38.5 16.5T480-320Zm0-217 81-81q-18-11-38-16.5t-43-5.5q-23 0-43 5.5T399-618l81 81Zm138 138q11-18 16.5-38t5.5-43q0-23-5.5-43.5T618-562l-81 81 81 82Zm142 142v-447l-85 85q21 29 33 64.5t12 74.5q0 39-11.5 74.5T676-341l84 84ZM619-675l85-85H257l84 84q29-21 64.5-32.5T480-720q39 0 74.5 12t64.5 33ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="M256-200h447l-84-84q-29 21-64.5 32.5T480-240q-39 0-74.5-12T341-285l-85 85Zm-56-57 84-84q-21-29-32.5-64.5T240-480q0-39 12-74.5t33-64.5l-85-85v447Zm142-142 82-81-82-81q-11 18-16.5 38t-5.5 43q0 23 5.5 43t16.5 38Zm138 79q23 0 43-5.5t38-16.5l-81-82-82 82q18 11 38.5 16.5T480-320Zm0-217 81-81q-18-11-38-16.5t-43-5.5q-23 0-43 5.5T399-618l81 81Zm138 138q11-18 16.5-38t5.5-43q0-23-5.5-43.5T618-562l-81 81 81 82Zm142 142v-447l-85 85q21 29 33 64.5t12 74.5q0 39-11.5 74.5T676-341l84 84ZM619-675l85-85H257l84 84q29-21 64.5-32.5T480-720q39 0 74.5 12t64.5 33ZM200-120q-33 0-56.5-23.5T120-200v-560q0-33 23.5-56.5T200-840h560q33 0 56.5 23.5T840-760v560q0 33-23.5 56.5T760-120H200Z"/></svg>
|
Before Width: | Height: | Size: 788 B After Width: | Height: | Size: 788 B |
@@ -1 +1 @@
|
|||||||
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#e8eaed"><path d="m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z"/></svg>
|
<svg xmlns="http://www.w3.org/2000/svg" height="24px" viewBox="0 -960 960 960" width="24px" fill="#000000"><path d="m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z"/></svg>
|
Before Width: | Height: | Size: 771 B After Width: | Height: | Size: 771 B |
3
qmldir
3
qmldir
@@ -41,6 +41,7 @@ EVChargerApp 1.0 KwhLimitPage.qml
|
|||||||
EVChargerApp 1.0 LedPage.qml
|
EVChargerApp 1.0 LedPage.qml
|
||||||
EVChargerApp 1.0 LicensesPage.qml
|
EVChargerApp 1.0 LicensesPage.qml
|
||||||
EVChargerApp 1.0 LoadBalancingPage.qml
|
EVChargerApp 1.0 LoadBalancingPage.qml
|
||||||
|
EVChargerApp 1.0 LogicModeButton.qml
|
||||||
EVChargerApp 1.0 MainScreen.qml
|
EVChargerApp 1.0 MainScreen.qml
|
||||||
EVChargerApp 1.0 NamePage.qml
|
EVChargerApp 1.0 NamePage.qml
|
||||||
EVChargerApp 1.0 NavigationItem.qml
|
EVChargerApp 1.0 NavigationItem.qml
|
||||||
@@ -53,10 +54,12 @@ EVChargerApp 1.0 RebootPage.qml
|
|||||||
EVChargerApp 1.0 RequestStatusText.qml
|
EVChargerApp 1.0 RequestStatusText.qml
|
||||||
EVChargerApp 1.0 SchedulerPage.qml
|
EVChargerApp 1.0 SchedulerPage.qml
|
||||||
EVChargerApp 1.0 SecurityPage.qml
|
EVChargerApp 1.0 SecurityPage.qml
|
||||||
|
EVChargerApp 1.0 SelectLogicModeItem.qml
|
||||||
EVChargerApp 1.0 SensorsConfigurationPage.qml
|
EVChargerApp 1.0 SensorsConfigurationPage.qml
|
||||||
EVChargerApp 1.0 SettingsTabPage.qml
|
EVChargerApp 1.0 SettingsTabPage.qml
|
||||||
EVChargerApp 1.0 SwitchLanguagePage.qml
|
EVChargerApp 1.0 SwitchLanguagePage.qml
|
||||||
EVChargerApp 1.0 VerticalTabButton.qml
|
EVChargerApp 1.0 VerticalTabButton.qml
|
||||||
|
EVChargerApp 1.0 WhiteBox.qml
|
||||||
EVChargerApp 1.0 WiFiErrorsPage.qml
|
EVChargerApp 1.0 WiFiErrorsPage.qml
|
||||||
EVChargerApp 1.0 WiFiOnOffSwitch.qml
|
EVChargerApp 1.0 WiFiOnOffSwitch.qml
|
||||||
EVChargerApp 1.0 WiFiPage.qml
|
EVChargerApp 1.0 WiFiPage.qml
|
||||||
|
Reference in New Issue
Block a user