10 import Qt.labs.platform 1.0 as QPlatform
12 import org.
kde.kpublictransport 1.0 as PublicTransport
16 Kirigami.ApplicationWindow {
17 globalDrawer:
Kirigami.GlobalDrawer {
19 titleIcon:
"map-symbolic" 24 icon.name:
"document-open-symbolic" 25 onTriggered: fileDialog.open()
28 text:
"Open MapCSS Stylesheet" 29 icon.name:
"document-open-symbolic" 30 onTriggered: mapcssDialog.open()
33 text:
"Reload Stylesheet" 34 icon.name:
"view-refresh-symbolic" 36 var s = page.map.styleSheet;
37 page.map.styleSheet =
"";
38 page.map.styleSheet = s;
44 icon.name:
"help-about-symbolic" 45 onTriggered:
function() { applicationWindow().pageStack.push(attributionPage); }
50 icon.name:
"help-about-symbolic" 51 onTriggered:
function() { applicationWindow().pageStack.push(aboutPage); }
55 contextDrawer:
Kirigami.ContextDrawer {
59 QPlatform.FileDialog {
61 title:
"Open O5M File" 62 fileMode: QPlatform.FileDialog.OpenFile
63 nameFilters: [
"o5m file (*.o5m)"]
64 onAccepted: page.map.mapLoader.loadFromFile(fileDialog.file);
66 QPlatform.FileDialog {
68 title:
"Open MapCSS Stylesheet" 69 fileMode: QPlatform.FileDialog.OpenFile
70 nameFilters: [
"MapCSS stylesheet (*.mapcss)"]
71 onAccepted: page.map.styleSheet = mapcssDialog.file
73 PublicTransport.Manager {
id: ptMgr }
75 pageStack.initialPage: IndoorMapPage {
77 debug: debugAction.checked
81 text:
"Select Location" 83 onTriggered: locationSheet.sheetOpen =
true 88 onTriggered: page.map.styleSheet =
"breeze-light" 92 onTriggered: page.map.styleSheet =
"breeze-dark" 95 text:
"Diagnostic View" 96 onTriggered: page.map.styleSheet =
"diagnostic" 100 text:
"Debug Info Model" 106 text:
"Find Platform" 107 onTriggered: platformSheet.sheetOpen =
true 108 visible: !platformModel.isEmpty
113 onTriggered: gateSheet.sheetOpen =
true 114 visible: !gateModel.isEmpty
121 mapData: page.map.mapData
127 property var platform: model
129 QQC2.Label { text: platform.lines.length == 0 ? platform.display : (platform.display +
" - "); }
131 model: platform.lines
135 height:
Kirigami.Units.iconSizes.small
137 visible: source !=
"" 139 switch (platform.mode) {
141 return PublicTransport.LineMetaData.lookup(modelData, platform.coordinate.y, platform.coordinate.x, PublicTransport.Line.Train,
true).logo;
143 return PublicTransport.LineMetaData.lookup(modelData, platform.coordinate.y, platform.coordinate.x, PublicTransport.Line.Tramway,
true).logo;
144 case Platform.Subway:
145 return PublicTransport.LineMetaData.lookup(modelData, platform.coordinate.y, platform.coordinate.x, PublicTransport.Line.Metro,
true).logo;
151 text: modelData +
" " 152 visible: icon.source ==
"" 159 page.map.view.floorLevel = model.level
160 page.map.view.centerOnGeoCoordinate(model.coordinate);
161 page.map.view.setZoomLevel(19,
Qt.point(page.map.width / 2.0, page.map.height/ 2.0));
162 platformSheet.sheetOpen =
false 171 text:
"Find Platform" 177 section.property:
"mode" 178 section.delegate:
Kirigami.Heading {
181 text:
switch(parseInt(section)) {
182 case Platform.Rail:
return "Railway";
183 case Platform.Subway:
return "Subway";
184 case Platform.Tram:
return "Tramway";
185 case Platform.Bus:
return "Bus";
186 default: console.log(section, Platform.Rail);
return section;
188 height: implicitHeight +
Kirigami.Units.largeSpacing
189 verticalAlignment:
Qt.AlignBottom
191 section.criteria: ViewSection.FullString
192 section.labelPositioning: ViewSection.CurrentLabelAtStart | ViewSection.InlineLabels
194 delegate: platformDelegate
200 mapData: page.map.mapData
217 page.map.view.floorLevel = model.level
218 page.map.view.centerOnGeoCoordinate(model.coordinate);
219 page.map.view.setZoomLevel(18,
Qt.point(page.map.width / 2.0, page.map.height/ 2.0));
220 gateSheet.sheetOpen =
false 226 LocationQueryOverlayProxyModel {
228 sourceModel: PublicTransport.LocationQueryModel {
232 mapData: page.map.mapData
235 RealtimeEquipmentModel {
237 mapData: page.map.mapData
238 realtimeModel: locationModel.sourceModel
241 SelectLocationSheet {
243 publicTransportManager: ptMgr
244 onCoordinateSelected:
function() {
245 page.map.mapLoader.loadForCoordinate(locationSheet.coordinate.y, locationSheet.coordinate.x);
246 page.map.view.beginTime =
new Date();
247 page.map.view.endTime =
new Date(page.map.view.beginTime.getTime() + 3600000);
252 map.overlaySources: [ gateModel, platformModel, locationModel, equipmentModel ]
253 map.timeZone:
"Europe/Berlin" 256 QQC2.Label { text:
"Floor Level:" }
259 model: page.map.floorLevels
261 currentIndex: page.map.floorLevels.rowForLevel(page.map.view.floorLevel);
262 onCurrentIndexChanged:
if (currentIndex >= 0) { page.map.view.floorLevel = page.map.floorLevels.levelForRow(currentIndex); }
263 Layout.fillWidth:
true 266 target: page.map.view
267 function onFloorLevelChanged() { floorLevelCombo.currentIndex = page.map.floorLevels.rowForLevel(page.map.view.floorLevel); }
275 Layout.fillWidth:
true 278 page.map.view.setZoomLevel(value,
Qt.point(page.map.width / 2.0, page.map.height/ 2.0));
282 target: page.map.view
283 function onZoomLevelChanged() { zoomSlider.value = page.map.view.zoomLevel; }
287 coordinate:
Qt.point(11.08196, 49.44572);
292 function onMapDataChanged() {
293 locationQuery.request.latitude = page.map.mapData.center.y;
294 locationQuery.request.longitude = page.map.mapData.center.x;
295 locationQuery.request.maximumDistance = page.map.mapData.radius;
296 locationQuery.request.types = PublicTransport.Location.RentedVehicleStation | PublicTransport.Location.RentedVehicle | PublicTransport.Location.Equipment;
303 publicTransportManager: ptMgr
311 "displayName":
"KDE OSM Indoor Map",
312 "productName":
"org.kde.kosmindoormap",
313 "componentName":
"org.kde.kosmindoormap",
314 "shortDescription":
"OSM Indoor Map Demo",
315 "homepage":
"https://kde.org/",
316 "bugAddress":
"[email protected]",
320 "name":
"LGPL 2.0 or later",
321 "spdx":
"LGPL-2.0-or-later" 324 "copyrightStatement":
"© 2020-2021 The KDE Team",
325 "desktopFileName":
"kosmindoormap"
QFuture< void > map(Sequence &sequence, MapFunctor function)