254 lines
8.5 KiB
QML
254 lines
8.5 KiB
QML
import QtQml 2.12
|
|
import QtQuick 2.12
|
|
import QtQuick.Layouts 1.12
|
|
import QtQuick.Controls 2.12 as QuickControls
|
|
|
|
import Controls 1.0
|
|
import Utils 1.0
|
|
import Vku 1.0
|
|
|
|
QuickControls.ApplicationWindow {
|
|
id: mainWindow
|
|
width: 1024
|
|
height: 768
|
|
visible: true
|
|
title: qsTr("Vku Monitor")
|
|
|
|
ColumnLayout {
|
|
anchors.fill: parent
|
|
anchors.topMargin: Ui.scale(32)
|
|
anchors.bottomMargin: Ui.scale(32)
|
|
anchors.leftMargin: Ui.scale(50)
|
|
anchors.rightMargin: Ui.scale(50)
|
|
|
|
spacing: Ui.scale(12)
|
|
|
|
RowLayout {
|
|
id: topLayout
|
|
spacing: Ui.scale(40)
|
|
Layout.fillWidth: true
|
|
|
|
ColumnLayout {
|
|
spacing: Ui.scale(12)
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.preferredWidth: 100
|
|
|
|
PrimaryLabel {
|
|
text: qsTr("Current state")
|
|
}
|
|
|
|
GridLayout {
|
|
columns: 2
|
|
columnSpacing: Ui.scale(28)
|
|
rowSpacing: Ui.scale(8)
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
Indicator {
|
|
label: qsTr("Input voltage")
|
|
indicator: qsTr("V")
|
|
value.text: CanController.inputVoltage
|
|
value.readOnly: true
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Radiator temperature")
|
|
indicator: qsTr("°С")
|
|
value.text: CanController.radiatorTemperature
|
|
value.readOnly: true
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Output voltage")
|
|
indicator: qsTr("V")
|
|
value.text: CanController.outputVoltage
|
|
value.readOnly: true
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Emergency counter")
|
|
indicator: ""
|
|
value.text: CanController.emergencyCounter
|
|
value.readOnly: true
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Input current")
|
|
indicator: qsTr("A")
|
|
value.text: CanController.inputCurrent
|
|
value.readOnly: true
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
}
|
|
|
|
PrimaryButton {
|
|
text: CanController.isVkuClosed ? qsTr("VKU opening") : qsTr("VKU closing")
|
|
Layout.fillWidth: true
|
|
Layout.topMargin: Ui.scale(12)
|
|
onClicked: CanController.switchVkuClosure()
|
|
}
|
|
}
|
|
|
|
Separator {
|
|
id: separator
|
|
orientation: Qt.Vertical
|
|
Layout.fillHeight: true
|
|
}
|
|
|
|
ColumnLayout {
|
|
spacing: Ui.scale(12)
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
Layout.preferredWidth: 100
|
|
|
|
PrimaryLabel {
|
|
text: qsTr("Parameters control")
|
|
Layout.fillWidth: true
|
|
}
|
|
|
|
GridLayout {
|
|
columns: 2
|
|
columnSpacing: Ui.scale(28)
|
|
rowSpacing: Ui.scale(8)
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
Indicator {
|
|
label: qsTr("Maximum current")
|
|
indicator: qsTr("A")
|
|
value.text: CanController.maximumCurrent
|
|
value.onEditingFinished: CanController.maximumCurrent = value.text
|
|
value.validator: IntValidator { bottom: 0; top: 95 }
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Duration of delay after emergency")
|
|
indicator: qsTr("s")
|
|
value.text: CanController.emergencyDelay
|
|
value.onEditingFinished: CanController.emergencyDelay = value.text
|
|
value.validator: DoubleValidator { bottom: 2; top: 15; decimals: 1; notation: DoubleValidator.StandardNotation }
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Breaking delay")
|
|
indicator: qsTr("ms")
|
|
value.text: CanController.breakingDelay
|
|
value.onEditingFinished: CanController.breakingDelay = value.text
|
|
value.validator: IntValidator { bottom: 0; top: 255 }
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Number of retries after emergency breaking")
|
|
indicator: ""
|
|
value.text: CanController.retriesAfterEmergencyBreak
|
|
value.onEditingFinished: CanController.retriesAfterEmergencyBreak = value.text
|
|
value.validator: IntValidator { bottom: 1; top: 7 }
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
|
|
Indicator {
|
|
label: qsTr("Breaking current")
|
|
indicator: qsTr("A")
|
|
value.text: CanController.breakingCurrent
|
|
value.onEditingFinished: CanController.breakingCurrent = value.text
|
|
value.validator: IntValidator { bottom: 0; top: 127 }
|
|
Layout.fillWidth: true
|
|
Layout.preferredWidth: 100
|
|
}
|
|
}
|
|
|
|
SecondaryButton {
|
|
text: qsTr("Emergency reset")
|
|
Layout.fillWidth: true
|
|
Layout.topMargin: Ui.scale(12)
|
|
onClicked: CanController.emergencyReset()
|
|
}
|
|
}
|
|
}
|
|
|
|
PrimaryLabel {
|
|
text: qsTr("Status")
|
|
visible: CanController.statuses.length > 0
|
|
Layout.topMargin: Ui.scale(20)
|
|
}
|
|
|
|
ListView {
|
|
clip: true
|
|
model: CanController.statuses
|
|
|
|
// ????
|
|
implicitHeight: mainWindow.height
|
|
|
|
Layout.fillWidth: true
|
|
Layout.fillHeight: true
|
|
|
|
delegate: GridLayout {
|
|
width: parent.width
|
|
columns: 4
|
|
|
|
columnSpacing: Ui.scale(20)
|
|
rowSpacing: Ui.scale(8)
|
|
|
|
Separator {
|
|
bottomPadding: Ui.scale(8)
|
|
orientation: Qt.Horizontal
|
|
Layout.fillWidth: true
|
|
Layout.columnSpan: 4
|
|
}
|
|
|
|
ColoredLabel {
|
|
text: modelData.time
|
|
backgroundColor: Palette.timeSectionBackgroundColor
|
|
}
|
|
|
|
PrimaryLabel {
|
|
text: modelData.status
|
|
}
|
|
|
|
ColoredLabel {
|
|
text: modelData.description
|
|
backgroundColor: Palette.statusSectionBackgroundColor
|
|
}
|
|
|
|
Item {
|
|
Layout.fillWidth: true
|
|
}
|
|
}
|
|
|
|
QuickControls.ScrollBar.vertical: QuickControls.ScrollBar {
|
|
policy: size > 0 && size < 1 ? QuickControls.ScrollBar.AlwaysOn : QuickControls.ScrollBar.AsNeeded
|
|
}
|
|
}
|
|
}
|
|
|
|
background: Rectangle {
|
|
color: Palette.backgroundColor
|
|
}
|
|
|
|
Component.onCompleted: {
|
|
Ui.currentWidth = Qt.binding(function(){ return width })
|
|
Ui.currentHeight = Qt.binding(function(){ return height })
|
|
}
|
|
}
|