Added a button to update the list of ports. Changed the colors of the lines on the charts. Added translations for qt libraries

This commit is contained in:
Yury Shuvakin
2022-08-28 20:01:40 +03:00
parent 545977a4b7
commit e31c509341
23 changed files with 155 additions and 13 deletions

View File

@@ -9,6 +9,7 @@ ComboBox {
leftPadding: 16
rightPadding: 16
font.pixelSize: 16
delegate: ItemDelegate {
width: control.width

View File

@@ -10,12 +10,14 @@ ItemDelegate {
implicitHeight: 52
padding: 0
leftPadding: control.minimized ? 0 : 40
font.pixelSize: 18
font.weight: Font.Bold
icon.color: "transparent"
icon.width: 24
icon.height: 24
property bool minimized: false
property bool mirroredIcon: false
contentItem: RowLayout {
spacing: control.minimized ? 0 : 25
@@ -29,6 +31,7 @@ ItemDelegate {
source: control.icon.source
sourceSize.width: control.icon.width
sourceSize.height: control.icon.height
mirror: control.mirroredIcon
Layout.alignment: Qt.AlignCenter
ColorOverlay {

View File

@@ -10,7 +10,7 @@ Button {
text: control.text
font.pixelSize: 16
font.weight: Font.Bold
opacity: enabled ? 1.0 : 0.3
opacity: enabled ? 1.0 : 0.7
color: control.hovered ? Palette.alternativeTextColor : Palette.textColor
horizontalAlignment: Text.AlignHCenter
verticalAlignment: Text.AlignVCenter
@@ -22,7 +22,7 @@ Button {
background: Rectangle {
implicitWidth: 200
implicitHeight: 52
opacity: enabled ? 1 : 0.3
opacity: enabled ? 1 : 0.7
color: control.pressed ? Palette.pressedButtonColor :
control.hovered ? Palette.hoveredButtonColor : Palette.outlineButtonColor
border.color: control.pressed ? Palette.pressedButtonColor :

View File

@@ -0,0 +1,38 @@
import QtQuick 2.12
import QtQuick.Controls 2.12
import QtGraphicalEffects 1.0
import Utils 1.0
Button {
id: control
icon.width: 24
icon.height: 24
contentItem: Image {
source: control.icon.source
sourceSize.width: control.icon.width
sourceSize.height: control.icon.height
fillMode: Image.PreserveAspectFit
ColorOverlay {
anchors.fill: parent
source: parent
color: "#FFFFFF"
visible: control.hovered
}
}
background: Rectangle {
implicitWidth: 44
implicitHeight: 44
color: control.enabled ? (control.pressed ? Palette.pressedButtonColor :
control.hovered ? Palette.hoveredButtonColor : Palette.backgroundColor) :
Palette.hoveredBackgroundColor
border.color: control.pressed ? Palette.pressedButtonColor :
control.hovered ? Palette.hoveredButtonColor : Palette.borderColor
border.width: 1
radius: 5
}
}

View File

@@ -5,6 +5,7 @@ import Utils 1.0
TextField {
implicitHeight: 58
font.pixelSize: 16
color: Palette.textColor
selectByMouse: true
selectionColor: Palette.selectedTextBackgroundColor

View File

@@ -23,3 +23,4 @@ DialogBackground 1.0 DialogBackground.qml
BusyIndicator 1.0 BusyIndicator.qml
MenuItemDelegate 1.0 MenuItemDelegate.qml
ScrollIndicator 1.0 ScrollIndicator.qml
OutlineImageButton 1.0 OutlineImageButton.qml

3
qml/Icons/refresh.svg Normal file
View File

@@ -0,0 +1,3 @@
<svg width="23" height="23" viewBox="0 0 23 23" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M15.8316 19.7618L15.3483 18.8863L15.8316 19.7618ZM6.16651 2.25214L5.68325 1.37666L6.16651 2.25214ZM1.39134 8.23348L0.430573 7.95614H0.430573L1.39134 8.23348ZM2.24424 15.8395L1.36876 16.3227H1.36876L2.24424 15.8395ZM20.2444 6.95135L20.0588 7.93397C20.3246 7.98418 20.5994 7.92457 20.8205 7.76874C21.0416 7.61291 21.1901 7.37416 21.2322 7.10695L20.2444 6.95135ZM7.94823 21.5754C10.7512 22.3845 13.7607 22.0471 16.3148 20.6372L15.3483 18.8863C13.2586 20.0398 10.7962 20.3159 8.50293 19.6539L7.94823 21.5754ZM16.3148 20.6372C18.8689 19.2274 20.7584 16.8607 21.5675 14.0578L19.646 13.5031C18.984 15.7964 17.4381 17.7328 15.3483 18.8863L16.3148 20.6372ZM20.6293 5.69116C19.2195 3.13705 16.8528 1.2476 14.0499 0.438477L13.4952 2.36002C15.7885 3.02203 17.7249 4.56794 18.8784 6.65767L20.6293 5.69116ZM14.0499 0.438477C11.2469 -0.370648 8.23736 -0.0331718 5.68325 1.37666L6.64976 3.12762C8.73949 1.97412 11.2018 1.69801 13.4952 2.36002L14.0499 0.438477ZM5.68325 1.37666C3.12914 2.7865 1.2397 5.1532 0.430573 7.95614L2.35211 8.51083C3.01412 6.21752 4.56003 4.28113 6.64976 3.12762L5.68325 1.37666ZM0.430573 7.95614C-0.378552 10.7591 -0.0410769 13.7686 1.36876 16.3227L3.11972 15.3562C1.96622 13.2665 1.6901 10.8041 2.35211 8.51083L0.430573 7.95614ZM1.36876 16.3227C2.77859 18.8769 5.1453 20.7663 7.94823 21.5754L8.50293 19.6539C6.20962 18.9919 4.27322 17.446 3.11972 15.3562L1.36876 16.3227ZM14.6458 6.9115L20.0588 7.93397L20.43 5.96872L15.017 4.94625L14.6458 6.9115ZM21.2322 7.10695L22.0398 1.98023L20.0642 1.66902L19.2566 6.79574L21.2322 7.10695Z" fill="black"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -49,6 +49,7 @@ ApplicationWindow {
font.weight: Font.Normal
icon.source: "qrc:/Icons/hide-menu.svg"
minimized: pane.minimized
mirroredIcon: pane.minimized
onClicked: if (pane.implicitWidth === 300) {
animation.from = 300

View File

@@ -32,15 +32,31 @@ Dialog {
Layout.fillHeight: true
}
Label {
Controls.SubtitleLabel {
text: qsTr("Select serial port")
maximumLineCount: 2
wrapMode: Text.Wrap
Layout.fillWidth: true
Layout.alignment: Qt.AlignHCenter | Qt.AlignBottom
}
Controls.ComboBox {
id: serialBox
model: BmsInterface.serialPortNames()
RowLayout {
spacing: 15
Controls.ComboBox {
id: serialBox
model: BmsInterface.serialPortNames()
Layout.fillWidth: true
}
Controls.OutlineImageButton {
id: refreshButton
icon.source: "qrc:/Icons/refresh.svg"
icon.width: 30
icon.height: 30
onClicked: serialBox.model = BmsInterface.serialPortNames()
}
Layout.fillWidth: true
Layout.alignment: Qt.AlignCenter
}
@@ -81,6 +97,7 @@ Dialog {
onPortConnectedChanged: {
connectButton.text = Qt.binding(function() { return BmsInterface.isPortConnected() ? qsTr("Disconnect") : qsTr("Connect") })
serialBox.enabled = !BmsInterface.isPortConnected()
refreshButton.enabled = !BmsInterface.isPortConnected()
}
}
}

View File

@@ -19,6 +19,14 @@ ColumnLayout {
property var cellVoltageData: []
property var cellListData: []
// https://htmlcolorcodes.com/color-chart/
property var chartColors: [
"#c62828", "#6a1b9a", "#283593", "#0277bd", "#00695c", "#558b2f", "#f9a825", "#ef6c00",
"#4e342e", "#37474f", "#ad1457", "#4527a0", "#1565c0", "#00838f", "#2e7d32", "#9e9d24",
"#ff8f00", "#d84315", "#424242", "#ef5350", "#ab47bc", "#5c6bc0", "#29b6f6", "#26a69a",
"#9ccc65", "#ffee58", "#ffa726", "#8d6e63", "#78909c", "#ec407a", "#7e57c2", "#42a5f5",
]
Controls.Frame {
padding: 20
leftPadding: 1
@@ -86,9 +94,9 @@ ColumnLayout {
onCheckedChanged: {
if (checked) {
chartItem.series(modelData).color = seriesColor
chartItem.series(modelData).opacity = 1
} else {
chartItem.series(modelData).color = "transparent"
chartItem.series(modelData).opacity = 0
}
}
Layout.fillWidth: !horizontal
@@ -400,6 +408,9 @@ ColumnLayout {
for (var i = cellListLoader.item.chart.count; i < cellCount; ++i) {
cellListLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Cell #") + (i + 1).toString(),
cellListLoader.item.chart.xAxis, cellListLoader.item.chart.yAxis)
if (i < chartColors.length) {
cellListLoader.item.chart.series(i).color = chartColors[i]
}
cellListLoader.item.chart.axes[0].max = 10
cellListLoader.item.seriesCount = cellListLoader.item.chart.count
}
@@ -476,6 +487,7 @@ ColumnLayout {
voltageLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Voltage indicator"),
voltageLoader.item.chart.xAxis, voltageLoader.item.chart.yAxis)
voltageLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Voltage indicator") })
voltageLoader.item.chart.series(0).color = "#fbc02d"
voltageLoader.item.chart.axes[0].max = 10
voltageLoader.item.seriesCount = voltageLoader.item.chart.count
@@ -483,6 +495,7 @@ ColumnLayout {
currentLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Current indicator"),
currentLoader.item.chart.xAxis, currentLoader.item.chart.yAxis)
currentLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Current indicator") })
currentLoader.item.chart.series(0).color = "#e64a19"
currentLoader.item.chart.axes[0].max = 10
currentLoader.item.seriesCount = currentLoader.item.chart.count
@@ -493,9 +506,14 @@ ColumnLayout {
batteryTemperatureLoader.item.chart.xAxis, batteryTemperatureLoader.item.chart.yAxis)
batteryTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Minimum temperature"),
batteryTemperatureLoader.item.chart.xAxis, batteryTemperatureLoader.item.chart.yAxis)
batteryTemperatureLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Maximum temperature") })
batteryTemperatureLoader.item.chart.series(1).name = Qt.binding(function(){ return qsTr("Average temperature") })
batteryTemperatureLoader.item.chart.series(2).name = Qt.binding(function(){ return qsTr("Minimum temperature") })
batteryTemperatureLoader.item.chart.series(0).color = "#e64a19"
batteryTemperatureLoader.item.chart.series(1).color = "#fbc02d"
batteryTemperatureLoader.item.chart.series(2).color = "#388e3c"
batteryTemperatureLoader.item.chart.axes[0].max = 10
batteryTemperatureLoader.item.seriesCount = batteryTemperatureLoader.item.chart.count
@@ -506,9 +524,14 @@ ColumnLayout {
bmsTemperatureLoader.item.chart.xAxis, bmsTemperatureLoader.item.chart.yAxis)
bmsTemperatureLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Minimum temperature"),
bmsTemperatureLoader.item.chart.xAxis, bmsTemperatureLoader.item.chart.yAxis)
bmsTemperatureLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Maximum temperature") })
bmsTemperatureLoader.item.chart.series(1).name = Qt.binding(function(){ return qsTr("Average temperature") })
bmsTemperatureLoader.item.chart.series(2).name = Qt.binding(function(){ return qsTr("Minimum temperature") })
bmsTemperatureLoader.item.chart.series(0).color = "#e64a19"
bmsTemperatureLoader.item.chart.series(1).color = "#fbc02d"
bmsTemperatureLoader.item.chart.series(2).color = "#388e3c"
bmsTemperatureLoader.item.chart.axes[0].max = 10
bmsTemperatureLoader.item.seriesCount = bmsTemperatureLoader.item.chart.count
@@ -519,9 +542,14 @@ ColumnLayout {
cellVoltageLoader.item.chart.xAxis, cellVoltageLoader.item.chart.yAxis)
cellVoltageLoader.item.chart.createSeries(ChartView.SeriesTypeLine, qsTr("Minimum voltage"),
cellVoltageLoader.item.chart.xAxis, cellVoltageLoader.item.chart.yAxis)
cellVoltageLoader.item.chart.series(0).color = "#e64a19"
cellVoltageLoader.item.chart.series(1).color = "#fbc02d"
cellVoltageLoader.item.chart.series(2).color = "#388e3c"
cellVoltageLoader.item.chart.series(0).name = Qt.binding(function(){ return qsTr("Maximum voltage") })
cellVoltageLoader.item.chart.series(1).name = Qt.binding(function(){ return qsTr("Average voltage") })
cellVoltageLoader.item.chart.series(2).name = Qt.binding(function(){ return qsTr("Minimum voltage") })
cellVoltageLoader.item.chart.axes[0].max = 10
cellVoltageLoader.item.seriesCount = cellVoltageLoader.item.chart.count
}

View File

@@ -17,5 +17,6 @@
<file>Icons/english-flag.svg</file>
<file>Icons/italian-flag.svg</file>
<file>Icons/russian-flag.svg</file>
<file>Icons/refresh.svg</file>
</qresource>
</RCC>

View File

@@ -39,5 +39,6 @@
<file>Controls/BusyIndicator.qml</file>
<file>Controls/MenuItemDelegate.qml</file>
<file>Controls/ScrollIndicator.qml</file>
<file>Controls/OutlineImageButton.qml</file>
</qresource>
</RCC>

BIN
translations/qt_en.qm Normal file

Binary file not shown.

BIN
translations/qt_it.qm Normal file

Binary file not shown.

BIN
translations/qt_ru.qm Normal file

Binary file not shown.

View File

@@ -0,0 +1 @@
<クd<>箆!ソ`。スン

BIN
translations/qtbase_it.qm Normal file

Binary file not shown.

BIN
translations/qtbase_ru.qm Normal file

Binary file not shown.

View File

@@ -0,0 +1 @@
<クd<>箆!ソ`。スン

Binary file not shown.

View File

@@ -3,5 +3,13 @@
<file>cubo_en.qm</file>
<file>cubo_it.qm</file>
<file>cubo_ru.qm</file>
<file>qt_en.qm</file>
<file>qt_it.qm</file>
<file>qt_ru.qm</file>
<file>qtbase_en.qm</file>
<file>qtbase_it.qm</file>
<file>qtbase_ru.qm</file>
<file>qtserialport_en.qm</file>
<file>qtserialport_ru.qm</file>
</qresource>
</RCC>

View File

@@ -16,7 +16,10 @@ namespace
Translator::Translator(QQmlEngine *engine, QObject *parent) :
QObject(parent),
mQmlEngine(engine),
mCurrentTranslator(new QTranslator(this))
mCurrentTranslator(new QTranslator(this)),
mCurrentQtTranslator(new QTranslator(this)),
mCurrentQtBaseTranslator(new QTranslator(this)),
mCurrentQtSerialTranslator(new QTranslator(this))
{
mNamesMap =
{
@@ -39,7 +42,31 @@ Translator::Translator(QQmlEngine *engine, QObject *parent) :
{Language::Italian, ":/cubo_it.qm"}
};
mQtTranslationsMap =
{
{Language::English, ":/qt_en.qm"},
{Language::Russian, ":/qt_ru.qm"},
{Language::Italian, ":/qt_it.qm"}
};
mQtBaseTranslationsMap =
{
{Language::English, ":/qtbase_en.qm"},
{Language::Russian, ":/qtbase_ru.qm"},
{Language::Italian, ":/qtbase_it.qm"}
};
mQtSerialTranslationsMap =
{
{Language::English, ":/qtserialport_en.qm"},
{Language::Russian, ":/qtserialport_ru.qm"},
{Language::Italian, ":/qtserialport_en.qm"}
};
QCoreApplication::installTranslator(mCurrentTranslator);
QCoreApplication::installTranslator(mCurrentQtTranslator);
QCoreApplication::installTranslator(mCurrentQtBaseTranslator);
QCoreApplication::installTranslator(mCurrentQtSerialTranslator);
QSettings settings;
@@ -81,10 +108,12 @@ Translator::Language Translator::currentLanguage() const
void Translator::setCurrentLanguage(Language language)
{
if (mCurrentTranslator->load(mTranslationsMap.value(language)))
{
QTimer::singleShot(0, this, [this]{ mQmlEngine->retranslate();} );
}
mCurrentTranslator->load(mTranslationsMap.value(language));
mCurrentQtTranslator->load(mQtTranslationsMap.value(language));
mCurrentQtBaseTranslator->load(mQtBaseTranslationsMap.value(language));
mCurrentQtSerialTranslator->load(mQtSerialTranslationsMap.value(language));
QTimer::singleShot(0, this, [this]{ mQmlEngine->retranslate();} );
mCurrentLanguage = language;
emit currentLanguageChanged();

View File

@@ -43,11 +43,19 @@ signals:
private:
Language mCurrentLanguage = Language::English;
QQmlEngine* mQmlEngine = nullptr;
QTranslator* mCurrentTranslator = nullptr;
QTranslator* mCurrentQtTranslator = nullptr;
QTranslator* mCurrentQtBaseTranslator = nullptr;
QTranslator* mCurrentQtSerialTranslator = nullptr;
QMap<Language, QString> mNamesMap;
QMap<Language, QString> mIconsMap;
QMap<Language, QString> mTranslationsMap;
QMap<Language, QString> mQtTranslationsMap;
QMap<Language, QString> mQtBaseTranslationsMap;
QMap<Language, QString> mQtSerialTranslationsMap;
};
#endif // TRANSLATOR_H