KOSMIndoorMap

IndoorMapPage.qml
1/*
2 SPDX-FileCopyrightText: 2020 Volker Krause <vkrause@kde.org>
3
4 SPDX-License-Identifier: LGPL-2.0-or-later
5*/
6
7import QtQuick
8import QtQuick.Layouts
9import QtQuick.Controls as QQC2
10import org.kde.kirigami as Kirigami
11import org.kde.kosmindoormap
12
13Kirigami.Page {
14 title: map.floorLevels.hasName(map.view.floorLevel) ? map.floorLevels.name(map.view.floorLevel) : ("Floor " + map.floorLevels.name(map.view.floorLevel));
15 property point coordinate
16 property alias map: map
17 property alias debug: infoModel.debug
18 property alias mapHoverEnabled: hoverHandler.enabled
19
20 topPadding: 0
21 bottomPadding: 0
22 leftPadding: 0
23 rightPadding: 0
24
25 // prevent swipe to the right changing pages, we want to pan the map instead
26 // TODO in theory we could make this conditional to having panned the map all the way to the right
27 Kirigami.ColumnView.preventStealing: true
28
29 actions: [
30 Kirigami.Action {
31 icon.name: "go-down-symbolic"
32 enabled: map.floorLevels.hasFloorLevelBelow(map.view.floorLevel)
33 onTriggered: map.view.floorLevel = map.floorLevels.floorLevelBelow(map.view.floorLevel)
34 },
35 Kirigami.Action {
36 icon.name: "go-up-symbolic"
37 enabled: map.floorLevels.hasFloorLevelAbove(map.view.floorLevel)
38 onTriggered: map.view.floorLevel = map.floorLevels.floorLevelAbove(map.view.floorLevel)
39 }
40 ]
41
42 OSMElementInformationModel {
43 id: infoModel
44 debug: true
45 }
46
47 IndoorMapInfoSheet {
48 id: elementDetailsSheet
49 model: infoModel
50 mapData: page.map.mapData
51 }
52
53 FloorLevelChangeModel {
54 id: floorLevelChangeModel
55 currentFloorLevel: map.view.floorLevel
56 floorLevelModel: map.floorLevels
57 }
58
59 Kirigami.OverlaySheet {
60 id: elevatorSheet
61 header: Kirigami.Heading {
62 text: floorLevelChangeModel.title
63 }
64 ListView {
65 model: floorLevelChangeModel
66 Layout.preferredWidth: Kirigami.Units.gridUnit * 10
67 delegate: QQC2.ItemDelegate {
68 highlighted: false
69 width: ListView.view.width
70 contentItem: Kirigami.TitleSubtitle {
71 title: model.display
72 font.bold: model.isCurrentFloor
73 }
74 onClicked: {
75 elevatorSheet.close();
76 map.view.floorLevel = model.floorLevel;
77 }
78 }
79 }
80 }
81
82 IndoorMap {
83 id: map
84 anchors.fill: parent
85 hoveredElement: map.elementAt(map.mapEventPointToScreen(hoverHandler.point))
86
87 IndoorMapScale {
88 map: map
89 anchors.left: map.left
90 anchors.bottom: map.bottom
91 width: 0.3 * map.width
92 }
93
94 IndoorMapAttributionLabel {
95 anchors.right: map.right
96 anchors.bottom: map.bottom
97 }
98
99 onElementPicked: {
100 floorLevelChangeModel.element = element;
101 if (floorLevelChangeModel.hasSingleLevelChange) {
102 showPassiveNotification("Switched to floor " + floorLevelChangeModel.destinationLevelName, "short");
103 map.view.floorLevel = floorLevelChangeModel.destinationLevel;
104 return;
105 } else if (floorLevelChangeModel.hasMultipleLevelChanges) {
106 elevatorSheet.open();
107 return;
108 }
109
110 infoModel.element = element;
111 if (infoModel.name != "" || infoModel.debug) {
112 elementDetailsSheet.open();
113 }
114 }
115 onElementLongPressed: {
116 // this provides info model access for elements with other interactions
117 infoModel.element = element;
118 if (infoModel.name != "" || infoModel.debug) {
119 elementDetailsSheet.open();
120 }
121 }
122
123 HoverHandler {
124 id: hoverHandler
125 enabled: false
126 acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
127 }
128 }
129
130 onCoordinateChanged: map.mapLoader.loadForCoordinate(coordinate.y, coordinate.x);
131}
QML item for displaying a train station or airport map.
Definition IndoorMap.qml:11
QFuture< void > map(Iterator begin, Iterator end, MapFunctor &&function)
This file is part of the KDE documentation.
Documentation copyright © 1996-2024 The KDE developers.
Generated on Tue Mar 26 2024 11:20:03 by doxygen 1.10.0 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.