Warning, /libraries/kpublictransport/tests/VehicleLayoutPage.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2019 Volker Krause <vkrause@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.0-or-later 0005 */ 0006 0007 import QtQuick 0008 import QtQuick.Layouts 0009 import QtQuick.Controls as QQC2 0010 import org.kde.kirigami as Kirigami 0011 import org.kde.kpublictransport as KPublicTransport 0012 import org.kde.kpublictransport.ui 0013 0014 Kirigami.ScrollablePage { 0015 id: root 0016 title: "Vehicle Layout" 0017 0018 property alias publicTransportManager: vehicleModel.manager 0019 property var departure 0020 0021 onDepartureChanged: vehicleModel.request.stopover = root.departure; 0022 0023 KPublicTransport.VehicleLayoutQueryModel { 0024 id: vehicleModel 0025 0026 onContentChanged: { 0027 var offset = vehicleView.fullLength * vehicleModel.vehicle.platformPositionBegin; 0028 offset -= Kirigami.Units.iconSizes.small + Kirigami.Units.largeSpacing; // direction indicator 0029 root.flickable.contentY = offset; 0030 } 0031 } 0032 0033 header: Column { 0034 QQC2.Label { 0035 text: vehicleModel.stopover.stopPoint.name + " - " + vehicleModel.stopover.route.line.name + " - " 0036 + (vehicleModel.stopover.scheduledDepartureTime > 0 ? vehicleModel.stopover.scheduledDepartureTime : vehicleModel.stopover.scheduledArrivalTime) 0037 leftPadding: Kirigami.Units.largeSpacing 0038 topPadding: Kirigami.Units.largeSpacing 0039 } 0040 QQC2.Label { 0041 text: "Platform: " + vehicleModel.platform.name 0042 leftPadding: Kirigami.Units.largeSpacing 0043 } 0044 } 0045 0046 Item { 0047 width: parent.width 0048 height: childrenRect.height 0049 0050 Column { 0051 id: contentLayout 0052 width: parent.width 0053 0054 Repeater { 0055 id: vehicleView 0056 property real fullLength: 1600 // full length of the platform display 0057 property real sectionWidth: 48 0058 0059 model: vehicleModel.platform.sections 0060 delegate: Item { 0061 property var section: modelData 0062 width: parent.width 0063 height: (section.end - section.begin) * vehicleView.fullLength 0064 0065 Kirigami.Separator { 0066 visible: index == 0 0067 anchors { top: parent.top; left: parent.left; right: parent.right } 0068 } 0069 QQC2.Label { 0070 anchors.centerIn: parent 0071 text: section.name 0072 } 0073 Kirigami.Separator { 0074 anchors { bottom: parent.bottom; left: parent.left; right: parent.right } 0075 } 0076 } 0077 } 0078 } 0079 0080 Kirigami.Icon { 0081 visible: vehicleModel.vehicle.direction != KPublicTransport.Vehicle.UnknownDirection 0082 source: { 0083 if (vehicleModel.vehicle.direction == KPublicTransport.Vehicle.Forward) 0084 return "go-up"; 0085 if (vehicleModel.vehicle.direction == KPublicTransport.Vehicle.Backward) 0086 return "go-down" 0087 return ""; 0088 } 0089 width: Kirigami.Units.iconSizes.small 0090 height: width 0091 x: vehicleView.sectionWidth / 2 - width / 2 0092 y: vehicleModel.vehicle.platformPositionBegin * vehicleView.fullLength - height - Kirigami.Units.largeSpacing 0093 } 0094 0095 Repeater { 0096 id: vehicleRepeater 0097 Layout.fillWidth: true 0098 model: vehicleModel 0099 delegate: VehicleSectionItem { 0100 section: model.vehicleSection 0101 y: section.platformPositionBegin * vehicleView.fullLength 0102 height: section.platformPositionEnd * vehicleView.fullLength - y 0103 width: vehicleView.sectionWidth 0104 textColor: Kirigami.Theme.textColor 0105 firstClassBackground: Kirigami.Theme.positiveTextColor 0106 secondClassBackground: Kirigami.Theme.focusColor 0107 inaccessibleBackground: Kirigami.Theme.disabledTextColor 0108 restaurantBackground: Kirigami.Theme.neutralTextColor 0109 0110 QQC2.Label { 0111 anchors.centerIn: parent 0112 text: section.name 0113 } 0114 0115 ColumnLayout { 0116 anchors.verticalCenter: parent.verticalCenter 0117 anchors.left: parent.right 0118 anchors.leftMargin: Kirigami.Units.largeSpacing 0119 spacing: Kirigami.Units.smallSpacing 0120 0121 RowLayout { 0122 spacing: Kirigami.Units.smallSpacing 0123 Repeater { 0124 model: section.featureList 0125 QQC2.Label { 0126 text: { 0127 switch (modelData) { 0128 case KPublicTransport.VehicleSection.AirConditioning: return "❄️"; 0129 case KPublicTransport.VehicleSection.Restaurant: return "🍴"; 0130 case KPublicTransport.VehicleSection.ToddlerArea: return "👶"; 0131 case KPublicTransport.VehicleSection.WheelchairAccessible: return "♿"; 0132 case KPublicTransport.VehicleSection.SilentArea: return "🔇"; 0133 case KPublicTransport.VehicleSection.BikeStorage: return "🚲"; 0134 } 0135 } 0136 } 0137 } 0138 } 0139 QQC2.Label { 0140 visible: section.classes != KPublicTransport.VehicleSection.UnknownClass 0141 text: { 0142 if (section.classes == KPublicTransport.VehicleSection.FirstClass) 0143 return "First class"; 0144 if (section.classes == KPublicTransport.VehicleSection.SecondClass) 0145 return "Second class"; 0146 if (section.classes == (KPublicTransport.VehicleSection.FirstClass | KPublicTransport.VehicleSection.SecondClass)) 0147 return "First/second class"; 0148 return "Unknown class"; 0149 } 0150 } 0151 QQC2.Label { 0152 visible: section.type == KPublicTransport.VehicleSection.SleepingCar || section.type == KPublicTransport.VehicleSection.CouchetteCar 0153 text: section.type == KPublicTransport.VehicleSection.SleepingCar ? "Sleeping car" : "Couchette car" 0154 } 0155 } 0156 } 0157 } 0158 0159 Kirigami.Icon { 0160 visible: vehicleModel.vehicle.direction != KPublicTransport.Vehicle.UnknownDirection 0161 source: { 0162 if (vehicleModel.vehicle.direction == KPublicTransport.Vehicle.Forward) 0163 return "go-up"; 0164 if (vehicleModel.vehicle.direction == KPublicTransport.Vehicle.Backward) 0165 return "go-down" 0166 return ""; 0167 } 0168 width: Kirigami.Units.iconSizes.small 0169 height: width 0170 x: vehicleView.sectionWidth / 2 - width / 2 0171 y: vehicleModel.vehicle.platformPositionEnd * vehicleView.fullLength + Kirigami.Units.largeSpacing 0172 } 0173 0174 QQC2.BusyIndicator { 0175 anchors.centerIn: contentLayout 0176 running: vehicleModel.loading 0177 } 0178 0179 QQC2.Label { 0180 anchors.centerIn: contentLayout 0181 width: parent.width 0182 text: vehicleModel.errorMessage 0183 color: Kirigami.Theme.negativeTextColor 0184 wrapMode: Text.Wrap 0185 horizontalAlignment: Text.AlignHCenter 0186 } 0187 0188 QQC2.Label { 0189 anchors.centerIn: contentLayout 0190 width: parent.width 0191 visible: vehicleModel.errorMessage === "" && !vehicleModel.loading && vehicleRepeater.count === 0 0192 wrapMode: Text.Wrap 0193 horizontalAlignment: Text.AlignHCenter 0194 text: "No vehicle layout information available." 0195 } 0196 } 0197 0198 Component.onCompleted: contentItem.clip = true 0199 }