First implementation
This commit is contained in:
249
qml/main.qml
Normal file
249
qml/main.qml
Normal file
@@ -0,0 +1,249 @@
|
||||
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("Output current")
|
||||
indicator: qsTr("A")
|
||||
value.text: CanController.outputCurrent
|
||||
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.vkuClosure()
|
||||
}
|
||||
}
|
||||
|
||||
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: 255 }
|
||||
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: 255 }
|
||||
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
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
background: Rectangle {
|
||||
color: Palette.backgroundColor
|
||||
}
|
||||
|
||||
Component.onCompleted: {
|
||||
Ui.currentWidth = Qt.binding(function(){ return width })
|
||||
Ui.currentHeight = Qt.binding(function(){ return height })
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user