111 lines
3 KiB
QML
111 lines
3 KiB
QML
|
import QtQuick 2.9
|
||
|
import QtMultimedia 5.8
|
||
|
import QtQuick.Window 2.2
|
||
|
import QtQuick.Controls 2.2
|
||
|
import QtQuick.Layouts 1.3
|
||
|
import QtGraphicalEffects 1.0
|
||
|
import QtQuick.Controls.Styles 1.4
|
||
|
import "../components"
|
||
|
|
||
|
ListView {
|
||
|
id: control
|
||
|
|
||
|
property int delegateHeight: 40
|
||
|
property color backgroundColor: "transparent"
|
||
|
|
||
|
spacing: control.delegateHeight * 0.3
|
||
|
boundsBehavior: Flickable.StopAtBounds
|
||
|
|
||
|
clip: true
|
||
|
|
||
|
model: Object.keys(speedBackend.scStwClient.extensions)
|
||
|
|
||
|
header: Rectangle {
|
||
|
// for top spacing
|
||
|
width: parent.width
|
||
|
height: control.spacing
|
||
|
color: control.backgroundColor
|
||
|
}
|
||
|
|
||
|
delegate: Rectangle {
|
||
|
id: laneContainerRect
|
||
|
|
||
|
property string thisLane: modelData
|
||
|
|
||
|
anchors.horizontalCenter: parent.horizontalCenter
|
||
|
|
||
|
width: parent.width * 0.98
|
||
|
height: control.delegateHeight * extensionsList.model
|
||
|
|
||
|
radius: width * 0.05
|
||
|
|
||
|
border.width: 1
|
||
|
border.color: appTheme.theme.colors.line
|
||
|
|
||
|
color: control.backgroundColor
|
||
|
|
||
|
Rectangle {
|
||
|
id: laneLabelRect
|
||
|
|
||
|
anchors {
|
||
|
left: parent.left
|
||
|
leftMargin: parent.radius * 1
|
||
|
verticalCenter: parent.top
|
||
|
}
|
||
|
|
||
|
height: control.delegateHeight * 0.5
|
||
|
width: laneLabel.font.pixelSize * 4
|
||
|
|
||
|
color: control.backgroundColor
|
||
|
|
||
|
Label {
|
||
|
id: laneLabel
|
||
|
|
||
|
height: parent.height
|
||
|
width: parent.width
|
||
|
|
||
|
leftPadding: laneContainerRect.width * 0.02
|
||
|
rightPadding: laneContainerRect.width * 0.02
|
||
|
|
||
|
horizontalAlignment: Text.AlignHCenter
|
||
|
verticalAlignment: Text.AlignVCenter
|
||
|
|
||
|
fontSizeMode: Text.Fit
|
||
|
font.pixelSize: height * 0.5
|
||
|
|
||
|
color: appTheme.theme.colors.text
|
||
|
|
||
|
text: "Lane " + laneContainerRect.thisLane
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
ListView {
|
||
|
id: extensionsList
|
||
|
|
||
|
anchors.fill: parent
|
||
|
anchors.margins: width * 0.04
|
||
|
|
||
|
interactive: false
|
||
|
|
||
|
model: speedBackend.scStwClient.extensions[parent.thisLane].length
|
||
|
|
||
|
delegate: ConnectionDelegate {
|
||
|
property var thisExtension: speedBackend.scStwClient.extensions[laneContainerRect.thisLane][index]
|
||
|
property var stateTranslations: ["disconnected", "connecting", "connecting", "connected"]
|
||
|
property var batteryStateStrings: ["critical", "warning", "fine", "charging"]
|
||
|
color: control.backgroundColor
|
||
|
|
||
|
batteryState: thisExtension["batteryState"] === -1 ? "unknown":batteryStateStrings[thisExtension["batteryState"]]
|
||
|
|
||
|
height: extensionsList.height / extensionsList.model
|
||
|
|
||
|
enabled: true
|
||
|
|
||
|
text: thisExtension["type"] === 0 ? "StartPad":"TopPad" // TODO: make dynamic with ScStw::extensionTypeToString()
|
||
|
status: {'status': stateTranslations[thisExtension["state"]]}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|