Warning, /utilities/ktrip/src/qml/ConnectionDetailsPage.qml is written in an unsupported language. File is not indexed.
0001 /**
0002 * SPDX-FileCopyrightText: 2019 Nicolas Fella <nicolas.fella@gmx.de>
0003 *
0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005 */
0006
0007 import QtQuick 2.2
0008 import QtQuick.Layouts 1.1
0009 import QtQuick.Controls 2.4
0010 import org.kde.kirigami 2.4 as Kirigami
0011 import org.kde.kpublictransport 1.0
0012 import org.kde.ktrip 1.0
0013
0014 Kirigami.ScrollablePage {
0015 id: root
0016 title: i18nc("@title", "Details")
0017
0018 property var journey
0019
0020 Kirigami.CardsListView {
0021 model: root.journey.sections
0022
0023 delegate: Loader {
0024 width: parent.width
0025
0026 sourceComponent: {
0027 switch (model.modelData.mode) {
0028 case JourneySection.Walking:
0029 return walking;
0030 case JourneySection.Waiting:
0031 return waiting;
0032 case JourneySection.Transfer:
0033 return transfer;
0034 default:
0035 return cardComponent;
0036 }
0037 }
0038 property var theData: model.modelData
0039 }
0040 }
0041
0042 Component {
0043 id: walking
0044 Label {
0045 text: i18np("Walking (%1 minute)", "Walking (%1 minutes)", theData.duration / 60)
0046 horizontalAlignment: Text.AlignHCenter
0047 }
0048 }
0049
0050 Component {
0051 id: waiting
0052 Label {
0053 text: i18np("Waiting (%1 minute)", "Waiting (%1 minutes)", theData.duration / 60)
0054 horizontalAlignment: Text.AlignHCenter
0055 }
0056 }
0057
0058 Component {
0059 id: transfer
0060 Label {
0061 text: i18np("Transfer (%1 minute)", "Transfer (%1 minutes)", theData.duration / 60)
0062 horizontalAlignment: Text.AlignHCenter
0063 }
0064 }
0065
0066 Component {
0067 id: cardComponent
0068
0069 Kirigami.AbstractCard {
0070 id: cardDelegate
0071
0072 header: Column {
0073
0074 RowLayout {
0075 width: parent.width
0076 Kirigami.Icon {
0077 visible: theData.route.line.hasLogo
0078 source: theData.route.line.logo
0079 Layout.fillHeight: true
0080 Layout.preferredWidth: height
0081 }
0082
0083 Kirigami.Heading {
0084 id: headerLabel
0085 level: 4
0086 font.strikeout: theData.disruptionEffect == Disruption.NoService
0087 color: theData.disruptionEffect == Disruption.NoService ? Kirigami.Theme.negativeTextColor : Kirigami.Theme.textColor
0088 text: theData.route.line.name
0089 }
0090
0091 Item {
0092 Layout.fillWidth: true
0093 }
0094
0095 Button {
0096 icon.name: intermediateStops.expanded ? "collapse" : "expand"
0097 text: intermediateStops.expanded ? i18n("Hide intermediate Stops") : i18n("Show intermediate Stops")
0098 display: Button.IconOnly
0099 flat: true
0100 Layout.preferredWidth: height // Work around Material button being too wide
0101 onClicked: intermediateStops.expanded = !intermediateStops.expanded
0102 }
0103 }
0104
0105 Item {
0106 width: 1
0107 height: cardDelegate.topPadding
0108 }
0109
0110 Kirigami.Separator {
0111 anchors.left: parent.left
0112 anchors.right: parent.right
0113 }
0114 }
0115
0116 contentItem: Column {
0117 id: topLayout
0118
0119 RowLayout {
0120 width: parent.width
0121 Label {
0122 text: theData.scheduledDepartureTime.toLocaleTimeString(Locale.ShortFormat)
0123 }
0124
0125 Label {
0126 text: theData.expectedDepartureTime.toLocaleTimeString(Locale.ShortFormat)
0127 visible: theData.departureDelay > 0
0128 color: Kirigami.Theme.negativeTextColor
0129 }
0130
0131 Label {
0132 text: theData.from.name
0133 wrapMode: Text.Wrap
0134 Layout.fillWidth: true
0135 }
0136
0137 Button {
0138 visible: theData.from.hasCoordinate
0139 icon.name: "mark-location-symbolic"
0140 flat: true
0141 Layout.preferredWidth: height // Work around Material button being too wide
0142 onClicked: Controller.showOnMap(theData.from)
0143 }
0144
0145 Label {
0146 text: theData.scheduledDeparturePlatform
0147 }
0148 }
0149
0150 Repeater {
0151 id: intermediateStops
0152
0153 property var expanded: false
0154 model: theData.intermediateStops
0155
0156 delegate: RowLayout {
0157 visible: intermediateStops.expanded
0158 width: parent.width
0159
0160 Item {
0161 width: 3 * Kirigami.Units.largeSpacing
0162 }
0163
0164 Label {
0165 text: modelData.scheduledDepartureTime.toLocaleTimeString(Locale.ShortFormat)
0166 }
0167
0168 Label {
0169 text: modelData.expectedDepartureTime.toLocaleTimeString(Locale.ShortFormat)
0170 visible: modelData.departureDelay > 0
0171 color: Kirigami.Theme.negativeTextColor
0172 }
0173
0174 Label {
0175 text: modelData.stopPoint.name
0176 wrapMode: Text.Wrap
0177 Layout.fillWidth: true
0178 }
0179
0180 Label {
0181 text: modelData.scheduledPlatform
0182 }
0183 }
0184 }
0185
0186 RowLayout {
0187 width: parent.width
0188 Label {
0189 text: theData.scheduledArrivalTime.toLocaleTimeString(Locale.ShortFormat)
0190 }
0191
0192 Label {
0193 text: theData.expectedArrivalTime.toLocaleTimeString(Locale.ShortFormat)
0194 visible: theData.arrivalDelay > 0
0195 color: Kirigami.Theme.negativeTextColor
0196 }
0197
0198 Label {
0199 text: theData.to.name
0200 wrapMode: Text.Wrap
0201 Layout.fillWidth: true
0202 }
0203
0204 Button {
0205 visible: theData.to.hasCoordinate
0206 icon.name: "mark-location-symbolic"
0207 flat: true
0208 Layout.preferredWidth: height // Work around Material button being too wide
0209 onClicked: Controller.showOnMap(theData.to)
0210 }
0211
0212 Label {
0213 text: theData.scheduledArrivalPlatform
0214 }
0215 }
0216
0217 Label {
0218 text: theData.notes.join("<br>")
0219 onLinkActivated: link => Qt.openUrlExternally(link)
0220 topPadding: Kirigami.Units.largeSpacing
0221 width: parent.width
0222 wrapMode: Text.Wrap
0223 }
0224 }
0225 }
0226 }
0227 }