Implemented QML skeleton for the application
This commit is contained in:
220
qml/MainWindow.qml
Normal file
220
qml/MainWindow.qml
Normal file
@@ -0,0 +1,220 @@
|
||||
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()
|
||||
}
|
||||
Reference in New Issue
Block a user