Files
CuboBmsTool/qml/MainWindow.qml
2022-08-15 08:49:12 +03:00

221 lines
6.9 KiB
QML

import QtQuick 2.12
import QtQuick.Controls 2.12
import QtQuick.Layouts 1.12
import Controls 1.0 as Controls
import Screens 1.0 as Screens
import Utils 1.0
ApplicationWindow {
id: window
title: qsTr("Cubo Verde BMS Tool")
width: 1366
height: 768
visible: true
RowLayout {
anchors.fill: parent
spacing: 0
Rectangle {
id: pane
color: Palette.alternativeBackgroundColor
implicitWidth: 300
property bool minimized: false
ColumnLayout {
anchors.fill: parent
spacing: 0
Item {
Layout.preferredHeight: 40
}
Image {
source: "qrc:/Icons/cubo-logo.svg"
sourceSize.width: pane.minimized ? 80 : 115
sourceSize.height: pane.minimized ? 80 : 115
fillMode: Image.PreserveAspectFit
Layout.alignment: Qt.AlignCenter
}
Item {
Layout.preferredHeight: pane.minimized ? 75 : 40
}
ItemDelegate {
leftPadding: pane.minimized ? 0 : 40
contentItem: RowLayout {
height: 50
spacing: 25
Item {
visible: pane.minimized
Layout.fillWidth: true
}
Image {
source: "qrc:/Icons/hide-menu.svg"
fillMode: Image.PreserveAspectFit
mirror: pane.minimized
Layout.alignment: Qt.AlignCenter
}
Label {
text: qsTr("Hide menu")
color: Palette.alternativeTextColor
visible: !pane.minimized
}
Item {
Layout.fillWidth: true
}
}
background: Rectangle {
color: "transparent"
}
onClicked: if (pane.implicitWidth === 300) {
animation.from = 300
animation.to = 100
animation.running = true
pane.minimized = true
} else {
animation.from = 100
animation.to = 300
animation.running = true
pane.minimized = false
}
Layout.preferredHeight: 52
Layout.fillWidth: true
}
Item {
Layout.preferredHeight: 70
}
ListView {
id: menuView
model: [
{"text": qsTr("AKB monitor"), "icon": "qrc:/Icons/akb-monitor.svg"},
{"text": qsTr("Cell monitor"), "icon": "qrc:/Icons/cell-monitor.svg"},
{"text": qsTr("Configuration"), "icon": "qrc:/Icons/bms-configuration.svg"},
{"text": qsTr("Visualization"), "icon": "qrc:/Icons/visualization.svg"},
{"text": qsTr("History"), "icon": "qrc:/Icons/history.svg"},
{"text": qsTr("BMS service"), "icon": "qrc:/Icons/bms-service.svg"},
{"text": qsTr("Exit"), "icon": "qrc:/Icons/exit.svg"},
]
delegate: ItemDelegate {
id: menuDelegate
width: ListView.view.width
height: 52
leftPadding: pane.minimized ? 0 : 40
highlighted: ListView.isCurrentItem
onClicked: menuView.currentIndex = index
contentItem: RowLayout {
spacing: pane.minimized ? 0 : 25
height: 50
Item {
visible: pane.minimized
Layout.fillWidth: true
}
Image {
source: modelData.icon
fillMode: Image.PreserveAspectFit
Layout.alignment: Qt.AlignCenter
}
Label {
text: modelData.text
font.weight: Font.ExtraBold
color: Palette.alternativeTextColor
visible: !pane.minimized
}
Item {
Layout.fillWidth: true
}
}
background: Rectangle {
color: menuDelegate.highlighted ? Palette.pressedButtonColor : Palette.alternativeButtonColor
}
}
Layout.fillHeight: true
Layout.fillWidth: true
}
}
PropertyAnimation {
id: animation
target: pane
property: "implicitWidth"
duration: 200
easing.type: Easing.InQuad
}
Layout.preferredWidth: implicitWidth
Layout.fillHeight: true
}
ColumnLayout {
RowLayout {
id: topBar
property var labels: [
qsTr("AKB Monitor"),
qsTr("Cell Monitor"),
]
Label {
text: topBar.labels[stack.currentIndex]
font.pixelSize: 38
font.weight: Font.ExtraBold
}
Item {
Layout.fillWidth: true
}
Layout.leftMargin: 45
Layout.rightMargin: 45
}
StackLayout {
id: stack
currentIndex: menuView.currentIndex
Layout.fillWidth: true
Layout.fillHeight: true
Layout.leftMargin: 45
Layout.rightMargin: 45
Screens.AkbMonitorScreen {
}
Screens.CellMonitorScreen {
}
}
}
}
Screens.ConnectionScreen {
id: connectionScreen
}
background: Rectangle {
color: Palette.screenBackgroundColor
}
Component.onCompleted: connectionScreen.open()
}