diff --git a/configparams.h b/configparams.h
index 417d0b6..47f0eb4 100644
--- a/configparams.h
+++ b/configparams.h
@@ -100,7 +100,7 @@ public:
bool setXML(QXmlStreamReader &stream, QString configName);
Q_INVOKABLE bool saveXml(QString fileName, QString configName);
Q_INVOKABLE bool loadXml(QString fileName, QString configName);
- QString xmlStatus();
+ Q_INVOKABLE QString xmlStatus();
void getParamsXML(QXmlStreamWriter &stream);
bool setParamsXML(QXmlStreamReader &stream);
diff --git a/qml/Controls/MenuItemDelegate.qml b/qml/Controls/MenuItemDelegate.qml
index 71e41a3..26803ee 100644
--- a/qml/Controls/MenuItemDelegate.qml
+++ b/qml/Controls/MenuItemDelegate.qml
@@ -53,7 +53,8 @@ ItemDelegate {
}
background: Rectangle {
- color: control.pressed ? Palette.pressedButtonColor :
- control.hovered ? Palette.hoveredButtonColor : Palette.buttonColor
+ color: control.pressed || control.highlighted ?
+ Palette.pressedButtonColor : control.hovered ?
+ Palette.hoveredButtonColor : Palette.buttonColor
}
}
diff --git a/qml/Controls/ScrollBar.qml b/qml/Controls/ScrollBar.qml
index a8fd1f4..932cdca 100644
--- a/qml/Controls/ScrollBar.qml
+++ b/qml/Controls/ScrollBar.qml
@@ -5,22 +5,36 @@ import Utils 1.0
ScrollBar {
id: control
- size: 0.3
- position: 0.2
- active: true
- orientation: Qt.Vertical
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+ visible: control.policy !== ScrollBar.AlwaysOff
+ minimumSize: orientation == Qt.Horizontal ? height / width : width / height
contentItem: Rectangle {
- implicitWidth: 12
- implicitHeight: 100
- radius: width / 2
- color: Palette.alternativeBackgroundColor
- // Hide the ScrollBar when it's not needed.
- opacity: control.policy === ScrollBar.AlwaysOn || (control.active && control.size < 1.0) ? 0.75 : 0
+ implicitWidth: control.interactive ? 6 : 2
+ implicitHeight: control.interactive ? 6 : 2
- // Animate the changes in opacity (default duration is 250 ms).
- Behavior on opacity {
- NumberAnimation {}
+ radius: width / 2
+ color: control.pressed ? Palette.alternativeBackgroundColor : Qt.lighter(Palette.alternativeBackgroundColor, 1.1)
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.policy === ScrollBar.AlwaysOn || (control.active && control.size < 1.0)
+ PropertyChanges { target: control.contentItem; opacity: 0.75 }
+ }
+
+ transitions: Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
}
}
}
diff --git a/qml/Controls/ScrollIndicator.qml b/qml/Controls/ScrollIndicator.qml
new file mode 100644
index 0000000..beb4b4f
--- /dev/null
+++ b/qml/Controls/ScrollIndicator.qml
@@ -0,0 +1,40 @@
+import QtQuick 2.12
+import QtQuick.Controls 2.12
+
+import Utils 1.0
+
+ScrollIndicator {
+ id: control
+
+ implicitWidth: Math.max(implicitBackgroundWidth + leftInset + rightInset,
+ implicitContentWidth + leftPadding + rightPadding)
+ implicitHeight: Math.max(implicitBackgroundHeight + topInset + bottomInset,
+ implicitContentHeight + topPadding + bottomPadding)
+
+ padding: 2
+
+ contentItem: Rectangle {
+ implicitWidth: 2
+ implicitHeight: 2
+
+ color: Palette.alternativeBackgroundColor
+ visible: control.size < 1.0
+ opacity: 0.0
+
+ states: State {
+ name: "active"
+ when: control.active
+ PropertyChanges { target: control.contentItem; opacity: 0.75 }
+ }
+
+ transitions: [
+ Transition {
+ from: "active"
+ SequentialAnimation {
+ PauseAnimation { duration: 450 }
+ NumberAnimation { target: control.contentItem; duration: 200; property: "opacity"; to: 0.0 }
+ }
+ }
+ ]
+ }
+}
diff --git a/qml/Controls/qmldir b/qml/Controls/qmldir
index 866e050..d97719b 100644
--- a/qml/Controls/qmldir
+++ b/qml/Controls/qmldir
@@ -22,3 +22,4 @@ DialogHeader 1.0 DialogHeader.qml
DialogBackground 1.0 DialogBackground.qml
BusyIndicator 1.0 BusyIndicator.qml
MenuItemDelegate 1.0 MenuItemDelegate.qml
+ScrollIndicator 1.0 ScrollIndicator.qml
diff --git a/qml/MainWindow.qml b/qml/MainWindow.qml
index a1e89ae..0bef1c2 100644
--- a/qml/MainWindow.qml
+++ b/qml/MainWindow.qml
@@ -71,6 +71,8 @@ ApplicationWindow {
ListView {
id: menuView
+ clip: true
+ boundsBehavior: Flickable.StopAtBounds
property var menuModel: [
{"text": qsTr("AKB monitor"), "icon": "qrc:/Icons/akb-monitor.svg"},
@@ -87,6 +89,7 @@ ApplicationWindow {
width: ListView.view.width
text: menuView.menuModel[modelData].text
icon.source: menuView.menuModel[modelData].icon
+ highlighted: ListView.isCurrentItem
minimized: pane.minimized
onClicked: menuView.currentIndex = index
}
@@ -291,7 +294,7 @@ ApplicationWindow {
}
Layout.preferredWidth: languagesLayout.implicitWidth
- Layout.fillHeight: true
+ Layout.preferredHeight: languagesLayout.implicitHeight
}
}
@@ -331,6 +334,7 @@ ApplicationWindow {
}
Screens.DebugInformationScreen {
+ id: debugScreen
}
Screens.BmsServiceScreen {
@@ -351,6 +355,8 @@ ApplicationWindow {
serialLabel.text = "-"
firmwareLabel.text = "-"
}
+
+ debugScreen.printMessage(BmsInterface.getConnectedPortName(), true)
}
onMessageDialog: {
@@ -494,5 +500,6 @@ ApplicationWindow {
Component.onCompleted: {
connectionDialog.open()
+ Qt.callLater(debugScreen.printMessage, qsTr("Tool started"), true)
}
}
diff --git a/qml/Screens/AkbMonitorScreen.qml b/qml/Screens/AkbMonitorScreen.qml
index 93c4c1f..099f275 100644
--- a/qml/Screens/AkbMonitorScreen.qml
+++ b/qml/Screens/AkbMonitorScreen.qml
@@ -332,9 +332,16 @@ Item {
onVisibleChanged: getValues()
+ Timer {
+ id: refreshValuesTimer
+ interval: 5000
+ onTriggered: getValues()
+ }
+
function getValues() {
if (BmsInterface.isPortConnected() && visible) {
BmsInterface.commands().getValues()
+ refreshValuesTimer.start()
}
}
}
diff --git a/qml/Screens/BmsServiceScreen.qml b/qml/Screens/BmsServiceScreen.qml
index 71351b2..11da120 100644
--- a/qml/Screens/BmsServiceScreen.qml
+++ b/qml/Screens/BmsServiceScreen.qml
@@ -12,12 +12,20 @@ ColumnLayout {
Keys.onEnterPressed: sendButton.clicked()
Controls.Frame {
- ScrollView {
+ Flickable {
+ id: outputFlickable
+ clip: true
anchors.fill: parent
- Controls.TextArea {
+ boundsBehavior: Flickable.StopAtBounds
+
+ TextArea.flickable: Controls.TextArea {
id: outputArea
}
+
+ ScrollBar.horizontal: Controls.ScrollBar {}
+ ScrollBar.vertical: Controls.ScrollBar {}
}
+
Layout.fillWidth: true
Layout.fillHeight: true
}
@@ -58,6 +66,9 @@ ColumnLayout {
Connections {
target: BmsInterface.commands()
- onPrintReceived: outputArea.append(str)
+ onPrintReceived: {
+ outputArea.append(str)
+ outputArea.cursorPosition = outputArea.length
+ }
}
}
diff --git a/qml/Screens/BmsSettingsScreen.qml b/qml/Screens/BmsSettingsScreen.qml
index eeee39f..729124f 100644
--- a/qml/Screens/BmsSettingsScreen.qml
+++ b/qml/Screens/BmsSettingsScreen.qml
@@ -2,6 +2,7 @@ import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtQuick.Dialogs 1.2
+import Qt.labs.settings 1.1
import Controls 1.0 as Controls
import Cubo 1.0
@@ -20,6 +21,7 @@ RowLayout {
id: settingsFlickable
clip: true
contentHeight: configLayout.height
+ boundsBehavior: Flickable.StopAtBounds
ColumnLayout {
id: configLayout
@@ -587,9 +589,17 @@ RowLayout {
folder: shortcuts.documents
nameFilters: [ qsTr("Configuration files (*.xml)"), qsTr("All files (*)") ]
onAccepted: {
- BmsInterface.bmsConfig().loadXml(loadFileDialog.fileUrl.toString().replace(/^(file:\/{3})/, ""), "bmsConfiguration")
+ let result = BmsInterface.bmsConfig().loadXml(loadFileDialog.fileUrl.toString().replace(/^(file:\/{3})/, ""), "bmsConfiguration")
+ if (!result) {
+ BmsInterface.emitStatusMessage(BmsInterface.bmsConfig().xmlStatus(), false)
+ }
}
}
+
+ Settings {
+ category: "loadConfiguration"
+ property alias folder: loadFileDialog.folder
+ }
}
Controls.OutlineButton {
@@ -604,15 +614,23 @@ RowLayout {
folder: shortcuts.documents
nameFilters: [ qsTr("Configuration files (*.xml)"), qsTr("All files (*)") ]
onAccepted: {
- BmsInterface.bmsConfig().saveXml(saveFileDialog.fileUrl.toString().replace(/^(file:\/{3})/, ""), "bmsConfiguration")
+ let result = BmsInterface.bmsConfig().saveXml(saveFileDialog.fileUrl.toString().replace(/^(file:\/{3})/, ""), "bmsConfiguration")
+ if (!result) {
+ BmsInterface.emitStatusMessage(BmsInterface.bmsConfig().xmlStatus(), false)
+ } else {
+ BmsInterface.emitStatusMessage(qsTr("BMS configuration saved to file"), true)
+ }
}
}
+
+ Settings {
+ category: "saveConfiguration"
+ property alias folder: saveFileDialog.folder
+ }
}
}
- ScrollBar.vertical: Controls.ScrollBar {
-// policy: ScrollBar.AlwaysOn
- }
+ ScrollBar.vertical: Controls.ScrollBar {}
Layout.fillWidth: true
Layout.fillHeight: true
@@ -658,7 +676,10 @@ RowLayout {
Controls.LinkLabel {
text: qsTr("Current sensor value \"0\"")
- onClicked: settingsFlickable.contentY = zeroSensorSettingsFrame.mapToItem(settingsFlickable.contentItem, 0, 0).y
+ onClicked: {
+ settingsFlickable.contentY = zeroSensorSettingsFrame.mapToItem(settingsFlickable.contentItem, 0, 0).y
+ settingsFlickable.returnToBounds()
+ }
}
Item {
diff --git a/qml/Screens/CellMonitorScreen.qml b/qml/Screens/CellMonitorScreen.qml
index 88195e8..48ce212 100644
--- a/qml/Screens/CellMonitorScreen.qml
+++ b/qml/Screens/CellMonitorScreen.qml
@@ -1,4 +1,5 @@
import QtQuick 2.12
+import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtGraphicalEffects 1.0
@@ -123,6 +124,7 @@ Item {
header: cellListHeader
delegate: cellListDelegate
+ ScrollBar.vertical: Controls.ScrollBar {}
}
Layout.fillWidth: true
@@ -145,6 +147,7 @@ Item {
header: cellListHeader
delegate: cellListDelegate
+ ScrollBar.vertical: Controls.ScrollBar {}
}
Layout.fillWidth: true
@@ -182,9 +185,16 @@ Item {
onVisibleChanged: getValues()
+ Timer {
+ id: refreshValuesTimer
+ interval: 5000
+ onTriggered: getValues()
+ }
+
function getValues() {
if (BmsInterface.isPortConnected() && visible) {
BmsInterface.commands().getCells()
+ refreshValuesTimer.start()
}
}
}
diff --git a/qml/Screens/DebugInformationScreen.qml b/qml/Screens/DebugInformationScreen.qml
index 6c73a46..c59e51f 100644
--- a/qml/Screens/DebugInformationScreen.qml
+++ b/qml/Screens/DebugInformationScreen.qml
@@ -4,17 +4,27 @@ import QtQuick.Layouts 1.12
import Controls 1.0 as Controls
import Cubo 1.0
+import Utils 1.0
ColumnLayout {
spacing: 20
Controls.Frame {
- ScrollView {
+ Flickable {
+ id: outputFlickable
+ clip: true
anchors.fill: parent
- Controls.TextArea {
+ boundsBehavior: Flickable.StopAtBounds
+
+ TextArea.flickable: Controls.TextArea {
id: outputArea
+ textFormat: Text.RichText
}
+
+ ScrollBar.horizontal: Controls.ScrollBar { }
+ ScrollBar.vertical: Controls.ScrollBar { }
}
+
Layout.fillWidth: true
Layout.fillHeight: true
}
@@ -27,9 +37,27 @@ ColumnLayout {
Connections {
target: BmsInterface
+ onStatusMessage: printMessage(msg, isGood)
+ }
- onStatusMessage: {
- outputArea.append(msg)
+ function printMessage(msg, isGood) {
+ var message = ""
+
+ if (!isGood) {
+ message += ""
}
+
+ message += new Date().toLocaleString(Qt.locale("en-US"), "dd.MM.yyyy hh:mm:ss") + ": " + msg
+
+ if (!isGood) {
+ message += ""
+ }
+
+ message += "
"
+
+ outputArea.insert(outputArea.length, message)
+ outputArea.cursorPosition = outputArea.length
+
+ outputFlickable.contentX = 0
}
}
diff --git a/qml/Screens/VisualizationScreen.qml b/qml/Screens/VisualizationScreen.qml
index 84b104f..ed10123 100644
--- a/qml/Screens/VisualizationScreen.qml
+++ b/qml/Screens/VisualizationScreen.qml
@@ -1,4 +1,5 @@
import QtQuick 2.12
+import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import QtCharts 2.3
@@ -169,6 +170,8 @@ ColumnLayout {
model: seriesCount
delegate: legendDelegate
visible: !horizontalLegend
+ boundsBehavior: Flickable.StopAtBounds
+ ScrollBar.vertical: Controls.ScrollBar {}
property Controls.ChartView chartItem: chart
diff --git a/qml/qml_items.qrc b/qml/qml_items.qrc
index ed200fa..f204e44 100644
--- a/qml/qml_items.qrc
+++ b/qml/qml_items.qrc
@@ -38,5 +38,6 @@
Utils/MathHelper.qml
Controls/BusyIndicator.qml
Controls/MenuItemDelegate.qml
+ Controls/ScrollIndicator.qml
diff --git a/translations/cubo_en.ts b/translations/cubo_en.ts
index fd3ca5b..1f2dd6a 100644
--- a/translations/cubo_en.ts
+++ b/translations/cubo_en.ts
@@ -209,17 +209,17 @@
BmsServiceScreen
-
+
Clear
-
+
Send
-
+
Help
@@ -227,226 +227,231 @@
BmsSettingsScreen
-
-
+
+
Serial number
-
-
+
+
Configuration
-
+
Number of boards
-
+
Number of cells
-
-
+
+
SOC
-
+
Number of cells connected in parallel
-
+
Battery capacity
-
-
+
+
Limits
-
+
Maximum charge current, A
-
+
Maximum load current, A
-
+
Maximum temperature, °C
-
-
+
+
Cell configuration
-
+
Lower disable threshold, V
-
+
Upper disable threshold, V
-
+
Lower enable threshold (should be higher than disable), V
-
+
Upper enable threshold (should be higher than disable), V
-
-
+
+
Balancing configuration
-
+
Balancing start voltage, V
-
+
Cell voltage delta to start balancing, V
-
+
Cell balancing interval, ms
-
-
+
+
Output settings
-
+
# 1
-
+
Use for storage management
-
+
# 2
-
+
# 3
-
+
# 4
-
+
+ BMS configuration saved to file
+
+
+
+
Read default settings
-
+
The settings are written to non-volatile memory.
Wait, please.
-
+
Normally closed
-
+
Change in value during SOC
-
-
+
+
Closes at t<, °C
-
-
+
+
Opens at t>, °C
-
-
+
+
Current sensor value "0"
-
+
Calibrate "0"
-
+
Load settings from file
-
-
+
+
Select configuration file
-
-
+
+
Configuration files (*.xml)
-
-
+
+
All files (*)
-
+
Save settings to file
-
+
Read current settings from BMS
-
+
Write to non-volatile memory of BMS
-
+
Write current values to BMS
@@ -454,22 +459,22 @@ Wait, please.
CellMonitorScreen
-
+
#
-
+
Voltage
-
+
Balancing
-
+
V
@@ -540,7 +545,7 @@ Wait, please.
DebugInformationScreen
-
+
Clear
@@ -558,74 +563,79 @@ Wait, please.
-
-
+
+
AKB monitor
-
-
+
+
Cell monitor
-
+
Configuration
-
-
+
+
Visualization
-
+
History
-
+
BMS service
-
+
Connection
-
+
BMS settings
-
+
Information output
-
+
Terminal
-
-
+
+
Disconnected
-
+
Serial number
-
+
Connected
+
+
+ Tool started
+
+
MessageDialog
@@ -677,140 +687,140 @@ Wait, please.
VisualizationScreen
-
+
Voltage
-
+
Current
-
+
Battery temperature
-
+
BMS temperature
-
+
Cell voltage
-
+
Cell list
-
-
-
-
-
-
+
+
+
+
+
+
Time, s
-
-
-
+
+
+
Voltage, V
-
+
Current, A
-
-
+
+
Temperature, °C
-
+
Pause data collection
-
+
Resume data collection
-
+
Clear data
-
+
Reset zoom
-
-
+
+
Cell #
-
-
+
+
Voltage indicator
-
-
+
+
Current indicator
-
-
-
-
+
+
+
+
Maximum temperature
-
-
-
-
+
+
+
+
Average temperature
-
-
-
-
+
+
+
+
Minimum temperature
-
-
+
+
Maximum voltage
-
-
+
+
Average voltage
-
-
+
+
Minimum voltage
diff --git a/translations/cubo_it.ts b/translations/cubo_it.ts
index e384e53..8a147be 100644
--- a/translations/cubo_it.ts
+++ b/translations/cubo_it.ts
@@ -209,17 +209,17 @@
BmsServiceScreen
-
+
Clear
-
+
Send
-
+
Help
@@ -227,226 +227,231 @@
BmsSettingsScreen
-
-
+
+
Serial number
-
-
+
+
Configuration
-
+
Number of boards
-
+
Number of cells
-
-
+
+
SOC
-
+
Number of cells connected in parallel
-
+
Battery capacity
-
-
+
+
Limits
-
+
Maximum charge current, A
-
+
Maximum load current, A
-
+
Maximum temperature, °C
-
-
+
+
Cell configuration
-
+
Lower disable threshold, V
-
+
Upper disable threshold, V
-
+
Lower enable threshold (should be higher than disable), V
-
+
Upper enable threshold (should be higher than disable), V
-
-
+
+
Balancing configuration
-
+
Balancing start voltage, V
-
+
Cell voltage delta to start balancing, V
-
+
Cell balancing interval, ms
-
-
+
+
Output settings
-
+
# 1
-
+
Use for storage management
-
+
# 2
-
+
# 3
-
+
# 4
-
+
+ BMS configuration saved to file
+
+
+
+
Read default settings
-
+
The settings are written to non-volatile memory.
Wait, please.
-
+
Normally closed
-
+
Change in value during SOC
-
-
+
+
Closes at t<, °C
-
-
+
+
Opens at t>, °C
-
-
+
+
Current sensor value "0"
-
+
Calibrate "0"
-
+
Load settings from file
-
-
+
+
Select configuration file
-
-
+
+
Configuration files (*.xml)
-
-
+
+
All files (*)
-
+
Save settings to file
-
+
Read current settings from BMS
-
+
Write to non-volatile memory of BMS
-
+
Write current values to BMS
@@ -454,22 +459,22 @@ Wait, please.
CellMonitorScreen
-
+
#
-
+
Voltage
-
+
Balancing
-
+
V
@@ -540,7 +545,7 @@ Wait, please.
DebugInformationScreen
-
+
Clear
@@ -558,74 +563,79 @@ Wait, please.
-
-
+
+
AKB monitor
-
-
+
+
Cell monitor
-
+
Configuration
-
-
+
+
Visualization
-
+
History
-
+
BMS service
-
+
Connection
-
+
BMS settings
-
+
Information output
-
+
Terminal
-
-
+
+
Disconnected
-
+
Serial number
-
+
Connected
+
+
+ Tool started
+
+
MessageDialog
@@ -677,140 +687,140 @@ Wait, please.
VisualizationScreen
-
+
Voltage
-
+
Current
-
+
Battery temperature
-
+
BMS temperature
-
+
Cell voltage
-
+
Cell list
-
-
-
-
-
-
+
+
+
+
+
+
Time, s
-
-
-
+
+
+
Voltage, V
-
+
Current, A
-
-
+
+
Temperature, °C
-
+
Pause data collection
-
+
Resume data collection
-
+
Clear data
-
+
Reset zoom
-
-
+
+
Cell #
-
-
+
+
Voltage indicator
-
-
+
+
Current indicator
-
-
-
-
+
+
+
+
Maximum temperature
-
-
-
-
+
+
+
+
Average temperature
-
-
-
-
+
+
+
+
Minimum temperature
-
-
+
+
Maximum voltage
-
-
+
+
Average voltage
-
-
+
+
Minimum voltage
diff --git a/translations/cubo_ru.qm b/translations/cubo_ru.qm
index 04eeb25..97fe8bb 100644
Binary files a/translations/cubo_ru.qm and b/translations/cubo_ru.qm differ
diff --git a/translations/cubo_ru.ts b/translations/cubo_ru.ts
index e830087..99d6f33 100644
--- a/translations/cubo_ru.ts
+++ b/translations/cubo_ru.ts
@@ -209,17 +209,17 @@
BmsServiceScreen
-
+
Clear
Очистить
-
+
Send
Отправить
-
+
Help
Помощь
@@ -227,212 +227,217 @@
BmsSettingsScreen
-
-
+
+
Serial number
Серийный номер
-
-
+
+
Configuration
Конфигурация
-
+
Number of boards
Количество плат
-
+
Number of cells
Количество ячеек
-
-
+
+
SOC
SOC
-
+
Number of cells connected in parallel
Количество параллельно включенных ячеек
-
+
Battery capacity
Ёмкость батареи
-
-
+
+
Limits
Ограничения
-
+
Maximum charge current, A
Максимальный ток заряда, A
-
+
Maximum load current, A
Максимальный ток нагрузки, A
-
+
Maximum temperature, °C
Максимальная температура, C
-
-
+
+
Cell configuration
Конфигурация ячеек
-
+
Lower disable threshold, V
Нижний порог отключения, В
-
+
Upper disable threshold, V
Верхний порог отключения, В
-
+
Lower enable threshold (should be higher than disable), V
Нижний порог включения (должен быть выше отключения), В
-
+
Upper enable threshold (should be higher than disable), V
Верхний порог включения (должен быть выше отключения), В
-
-
+
+
Balancing configuration
Конфигурация балансировки
-
+
Balancing start voltage, V
Напряжение старта балансировки, В
-
+
Cell voltage delta to start balancing, V
Дельта напряжения ячеек для старта балансировки, В
-
+
Cell balancing interval, ms
Интервал балансировки ячейки, мс
-
-
+
+
Output settings
Настройка выходов
-
+
# 1
№ 1
-
+
Use for storage management
Использовать для управления ЗУ
-
+
# 2
№ 2
-
+
# 3
№ 3
-
+
# 4
№ 4
-
+
+ BMS configuration saved to file
+ БМС конфигурация сохранена в файл
+
+
+
Read default settings
Загрузить настройки по-умолчанию
-
+
The settings are written to non-volatile memory.
Wait, please.
Выполняется запись настроек в энергонезависимую память.
Пожалуйста подождите.
-
+
Normally closed
Нормально замкнут
-
+
Change in value during SOC
Изменение значения при SOC
-
-
+
+
Closes at t<, °C
Замыкается при t<, °C
-
-
+
+
Opens at t>, °C
Размыкается при t>, °C
-
-
+
+
Current sensor value "0"
Значение датчика тока «0»
-
+
Calibrate "0"
Калибровать «0»
-
+
Load settings from file
Загрузить настройки из файла
-
-
+
+
Select configuration file
Выберите файл конфигурации
-
-
+
+
Configuration files (*.xml)
Файлы конфигурации (*.xml)
-
-
+
+
All files (*)
Все файлы (*)
-
+
Save settings to file
Сохранить настройки в файл
@@ -441,17 +446,17 @@ Wait, please.
Загрузить настройки из файла
-
+
Read current settings from BMS
Загрузить текущие настройки из BMS
-
+
Write to non-volatile memory of BMS
Записать в энергонезависимую память BMS
-
+
Write current values to BMS
Записать текущие значения в BMS
@@ -459,22 +464,22 @@ Wait, please.
CellMonitorScreen
-
+
#
№
-
+
Voltage
Напряжение
-
+
Balancing
Балансировка
-
+
V
V
@@ -545,7 +550,7 @@ Wait, please.
DebugInformationScreen
-
+
Clear
Очистить
@@ -563,75 +568,80 @@ Wait, please.
Скрыть меню
-
-
+
+
AKB monitor
Монитор АКБ
-
-
+
+
Cell monitor
Монитор ячеек
-
+
Configuration
Конфигурация
-
-
+
+
Visualization
Визуализация
-
+
History
История
-
+
BMS service
Сервис BMS
-
+
Connection
Подключение
-
+
BMS settings
Настройка BMS
-
+
Information output
Вывод информации
-
+
Terminal
Терминал
+
+
+ Tool started
+ Утилита запущена
+
Exit
Выход
-
-
+
+
Disconnected
Отключено
-
+
Serial number
Серийный номер
-
+
Connected
Подключено
@@ -686,140 +696,140 @@ Wait, please.
VisualizationScreen
-
+
Voltage
Напряжение
-
+
Current
Ток
-
+
Battery temperature
Температура батареи
-
+
BMS temperature
Температура BMS
-
+
Cell voltage
Вольтаж ячейки
-
+
Cell list
Список ячеек
-
-
-
-
-
-
+
+
+
+
+
+
Time, s
Время, c
-
-
-
+
+
+
Voltage, V
Напряжение, В
-
+
Current, A
Ток, А
-
-
+
+
Temperature, °C
Температура, °C
-
+
Pause data collection
Приостановить сбор данных
-
+
Resume data collection
Продолжить сбор данных
-
+
Clear data
Очистить данные
-
+
Reset zoom
Сбросить масштаб
-
-
+
+
Cell #
Ячейка №
-
-
+
+
Voltage indicator
Показатель вольтажа
-
-
+
+
Current indicator
Показатель тока
-
-
-
-
+
+
+
+
Maximum temperature
Максимальная температура
-
-
-
-
+
+
+
+
Average temperature
Средняя температура
-
-
-
-
+
+
+
+
Minimum temperature
Минимальная температура
-
-
+
+
Maximum voltage
Максимальное напряжение
-
-
+
+
Average voltage
Среднее напряжение
-
-
+
+
Minimum voltage
Минимальное напряжение
diff --git a/translator.cpp b/translator.cpp
index 54aec58..0e9620a 100644
--- a/translator.cpp
+++ b/translator.cpp
@@ -5,6 +5,13 @@
#include
#include
#include
+#include
+
+
+namespace
+{
+ const QString settingsKey = "translator/currentLanguage";
+}
Translator::Translator(QQmlEngine *engine, QObject *parent) :
QObject(parent),
@@ -34,17 +41,26 @@ Translator::Translator(QQmlEngine *engine, QObject *parent) :
QCoreApplication::installTranslator(mCurrentTranslator);
- if (QLocale::system().language() == QLocale::Russian)
+ QSettings settings;
+
+ if (!settings.contains(::settingsKey))
{
- setCurrentLanguage(Language::Russian);
- }
- else if (QLocale::system().language() == QLocale::Italian)
- {
- setCurrentLanguage(Language::Italian);
+ if (QLocale::system().language() == QLocale::Russian)
+ {
+ setCurrentLanguage(Language::Russian);
+ }
+ else if (QLocale::system().language() == QLocale::Italian)
+ {
+ setCurrentLanguage(Language::Italian);
+ }
+ else
+ {
+ setCurrentLanguage(Language::English);
+ }
}
else
{
- setCurrentLanguage(Language::English);
+ setCurrentLanguage(static_cast(settings.value(::settingsKey).toInt()));
}
}
@@ -74,6 +90,8 @@ void Translator::setCurrentLanguage(Language language)
emit currentLanguageChanged();
emit currentLanguageNameChanged();
emit currentLanguageIconChanged();
+
+ QSettings().setValue(::settingsKey, static_cast(mCurrentLanguage));
}
QString Translator::currentLanguageName() const