Warning, /pim/itinerary/src/app/JourneyRequestPage.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2021 Volker Krause <vkrause@kde.org> 0003 SPDX-License-Identifier: LGPL-2.0-or-later 0004 */ 0005 0006 import QtQuick 0007 import QtQuick.Layouts 0008 import QtQuick.Controls as QQC2 0009 import org.kde.kirigami as Kirigami 0010 import org.kde.kirigamiaddons.formcard as FormCard 0011 import org.kde.kirigamiaddons.dateandtime as Addon 0012 import org.kde.kpublictransport 0013 import org.kde.itinerary 0014 import "./components" as Components 0015 0016 FormCard.FormCardPage { 0017 id: root 0018 0019 objectName: "JourneyRequestPage" 0020 0021 property var publicTransportManager 0022 0023 /** 0024 * Pre-selected country in the location pickers. 0025 * If not specified the country from the current locale is used. 0026 */ 0027 property string initialCountry 0028 /** Pre-selected departure time. */ 0029 property date initialDateTime: new Date() 0030 0031 Kirigami.Theme.inherit: false 0032 Kirigami.Theme.colorSet: Kirigami.Theme.Window 0033 0034 property var departureStop 0035 property var arrivalStop 0036 0037 title: i18n("Select Journey") 0038 0039 data: [ 0040 Component { 0041 id: departurePicker 0042 StopPickerPage { 0043 title: i18nc("departure train station", "Select Departure Stop") 0044 publicTransportManager: root.publicTransportManager 0045 initialCountry: root.initialCountry 0046 // force a deep copy, otherwise this breaks as soon as the other stop picker page is shown... 0047 onLocationChanged: root.departureStop = PublicTransport.copyLocation(location); 0048 } 0049 }, 0050 Component { 0051 id: arrivalPicker 0052 StopPickerPage { 0053 title: i18nc("arrival train station", "Select Arrival Stop") 0054 publicTransportManager: root.publicTransportManager 0055 initialCountry: root.initialCountry 0056 onLocationChanged: root.arrivalStop = PublicTransport.copyLocation(location) 0057 } 0058 }, 0059 Component { 0060 id: journeyQueryPage 0061 JourneyQueryPage { 0062 publicTransportManager: root.publicTransportManager 0063 title: i18n("Select Journey") 0064 onJourneyChanged: { 0065 for (const section of journey.sections) { 0066 if (section.mode != JourneySection.PublicTransport) { 0067 continue; 0068 } 0069 const res = PublicTransport.reservationFromJourneySection(section); 0070 const resId = ReservationManager.addReservation(res); 0071 LiveDataManager.setJourney(resId, section); 0072 } 0073 pageStack.clear() 0074 pageStack.push(pagepool.loadPage(Qt.resolvedUrl("TimelinePage.qml"))) 0075 } 0076 } 0077 } 0078 ] 0079 0080 // either true/false if all mode switches are in that position, undefined otherwise 0081 function fullModeSwitchState() 0082 { 0083 let state = longDistanceSwitch.checked; 0084 for (const s of [localTrainSwitch, rapidTransitSwitch, busSwitch, ferrySwitch]) { 0085 if (s.checked != state) { 0086 return undefined; 0087 } 0088 } 0089 return state; 0090 } 0091 0092 FormCard.FormCard { 0093 id: requestCard 0094 Layout.topMargin: Kirigami.Units.largeSpacing 0095 0096 FormCard.FormButtonDelegate { 0097 id: fromButton 0098 0099 text: i18nc("departure train station", "From:") 0100 description: departureStop ? departureStop.name : i18nc("departure train station", "Select Departure Stop") 0101 onClicked: applicationWindow().pageStack.push(departurePicker) 0102 } 0103 0104 0105 FormCard.FormDelegateSeparator { 0106 below: fromButton 0107 above: toButton 0108 } 0109 0110 FormCard.FormButtonDelegate { 0111 id: toButton 0112 0113 text: i18nc("arrival train station", "To:") 0114 description: arrivalStop ? arrivalStop.name : i18nc("arrival train station", "Select Arrival Stop") 0115 onClicked: applicationWindow().pageStack.push(arrivalPicker) 0116 } 0117 Item{ 0118 width:parent.width 0119 height: 0 0120 QQC2.RoundButton{ 0121 icon.name: "reverse" 0122 y: -fromButton.height - height/2 0123 z: toButton.z + 10000 0124 x: fromButton.width - width/2 - Kirigami.Units.gridUnit *3 0125 onClicked:{ 0126 var oldDepartureStop = departureStop 0127 departureStop = arrivalStop 0128 arrivalStop = oldDepartureStop 0129 } 0130 0131 Accessible.name: i18n("Swap departure and arrival") 0132 } 0133 } 0134 FormCard.FormDelegateSeparator { 0135 below: toButton 0136 above: timeSelector 0137 } 0138 0139 FormCard.AbstractFormDelegate { 0140 id: timeSelector 0141 contentItem: ColumnLayout { 0142 Components.RadioSelector{ 0143 id: departureArrivalSelector 0144 0145 Layout.fillWidth: true 0146 Layout.alignment: Qt.AlignHCenter 0147 Layout.maximumWidth: Kirigami.Units.gridUnit * 20 0148 consistentWidth: true 0149 0150 actions: [ 0151 Kirigami.Action { 0152 text: i18nc("train or bus departure", "Departure") 0153 }, 0154 Kirigami.Action { 0155 text: i18nc("train or bus arrival", "Arrival") 0156 } 0157 ] 0158 } 0159 } 0160 } 0161 FormCard.FormDateTimeDelegate { 0162 id: dateTimeInput 0163 value: root.initialDateTime 0164 Accessible.name: departureArrivalSelector.selectedIndex === 0 ? i18nc("train or bus departure", "Departure time") : i18nc("train or bus arrival", "Arrival time") 0165 } 0166 0167 FormCard.FormDelegateSeparator { 0168 below: timeSelector 0169 above: searchButton 0170 } 0171 0172 FormCard.FormButtonDelegate { 0173 id: searchButton 0174 icon.name: "search" 0175 text: i18n("Search Journey") 0176 enabled: root.departureStop != undefined && root.arrivalStop != undefined && root.fullModeSwitchState() !== false 0177 onClicked: { 0178 applicationWindow().pageStack.push(journeyQueryPage); 0179 const req = applicationWindow().pageStack.currentItem.journeyRequest; 0180 req.from = root.departureStop; 0181 req.to = root.arrivalStop; 0182 0183 console.log(dateTimeInput.value); 0184 req.dateTime = dateTimeInput.value; 0185 req.maximumResults = 6; 0186 req.downloadAssets = true; 0187 req.includePaths = true; 0188 0189 let lineModes = []; 0190 if (root.fullModeSwitchState() == undefined) { 0191 if (longDistanceSwitch.checked) 0192 lineModes.push(Line.LongDistanceTrain, Line.Train); 0193 if (localTrainSwitch.checked) 0194 lineModes.push(Line.LocalTrain); 0195 if (rapidTransitSwitch.checked) 0196 lineModes.push(Line.RapidTransit, Line.Metro, Line.Tramway, Line.RailShuttle); 0197 if (busSwitch.checked) 0198 lineModes.push(Line.Bus, Line.Coach); 0199 if (ferrySwitch.checked) 0200 lineModes.push(Line.Ferry, Line.Boat); 0201 } 0202 req.lineModes = lineModes; 0203 0204 if (departureArrivalSelector.selectedIndex === 0) { 0205 req.dateTimeMode = JourneyRequest.Departure 0206 } else if (departureArrivalSelector.selectedIndex === 1) { 0207 req.dateTimeMode = JourneyRequest.Arrival 0208 } 0209 0210 console.log(req); 0211 applicationWindow().pageStack.currentItem.journeyRequest = req; 0212 } 0213 } 0214 } 0215 0216 FormCard.FormCard { 0217 Layout.topMargin: Kirigami.Units.largeSpacing 0218 0219 FormCard.FormSwitchDelegate { 0220 id: longDistanceSwitch 0221 text: i18nc("journey query search constraint, title", "Long distance trains") 0222 description: i18nc("journey query search constraint, description", "High speed or intercity trains") 0223 checked: true 0224 leading: Kirigami.Icon { 0225 source: PublicTransport.lineModeIcon(Line.LongDistanceTrain) 0226 isMask: true 0227 } 0228 } 0229 FormCard.FormSwitchDelegate { 0230 id: localTrainSwitch 0231 text: i18nc("journey query search constraint, title", "Local trains") 0232 description: i18nc("journey query search constraint, description", "Regional or local trains") 0233 checked: true 0234 leading: Kirigami.Icon { 0235 source: PublicTransport.lineModeIcon(Line.LocalTrain) 0236 isMask: true 0237 } 0238 } 0239 FormCard.FormSwitchDelegate { 0240 id: rapidTransitSwitch 0241 text: i18nc("journey query search constraint, title", "Rapid transit") 0242 description: i18nc("journey query search constraint, description", "Rapid transit, metro, trams") 0243 checked: true 0244 leading: Kirigami.Icon { 0245 source: PublicTransport.lineModeIcon(Line.Tramway) 0246 isMask: true 0247 } 0248 } 0249 FormCard.FormSwitchDelegate { 0250 id: busSwitch 0251 text: i18nc("journey query search constraint, title", "Bus") 0252 description: i18nc("journey query search constraint, description", "Local or regional bus services") 0253 checked: true 0254 leading: Kirigami.Icon { 0255 source: PublicTransport.lineModeIcon(Line.Bus) 0256 isMask: true 0257 } 0258 } 0259 FormCard.FormSwitchDelegate { 0260 id: ferrySwitch 0261 text: i18nc("journey query search constraint, title", "Ferry") 0262 description: i18nc("journey query search constraint, description", "Boats or ferries") 0263 checked: true 0264 leading: Kirigami.Icon { 0265 source: PublicTransport.lineModeIcon(Line.Ferry) 0266 isMask: true 0267 } 0268 } 0269 } 0270 0271 Item { 0272 Layout.fillHeight: true 0273 } 0274 }