Warning, /libraries/kpublictransport/tests/IndoorMapPage.qml is written in an unsupported language. File is not indexed.
0001 /*
0002 SPDX-FileCopyrightText: 2020 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.kirigami.delegates as Kirigami
0012 import org.kde.kosmindoormap
0013
0014 Kirigami.Page {
0015 title: map.floorLevels.hasName(map.view.floorLevel) ? map.floorLevels.name(map.view.floorLevel) : ("Floor " + map.floorLevels.name(map.view.floorLevel));
0016 property point coordinate
0017 property alias map: map
0018 property alias debug: infoModel.debug
0019
0020 topPadding: 0
0021 bottomPadding: 0
0022 leftPadding: 0
0023 rightPadding: 0
0024
0025 // prevent swipe to the right changing pages, we want to pan the map instead
0026 // TODO in theory we could make this conditional to having panned the map all the way to the right
0027 Kirigami.ColumnView.preventStealing: true
0028
0029 actions: [
0030 Kirigami.Action {
0031 icon.name: "go-down-symbolic"
0032 enabled: map.floorLevels.hasFloorLevelBelow(map.view.floorLevel)
0033 onTriggered: map.view.floorLevel = map.floorLevels.floorLevelBelow(map.view.floorLevel)
0034 },
0035 Kirigami.Action {
0036 icon.name: "go-up-symbolic"
0037 enabled: map.floorLevels.hasFloorLevelAbove(map.view.floorLevel)
0038 onTriggered: map.view.floorLevel = map.floorLevels.floorLevelAbove(map.view.floorLevel)
0039 }
0040 ]
0041
0042 OSMElementInformationModel {
0043 id: infoModel
0044 debug: true
0045 }
0046
0047 Component {
0048 id: infoStringDelegate
0049 Row {
0050 QQC2.Label {
0051 visible: row.keyLabel != ""
0052 text: row.keyLabel + ": "
0053 color: row.category == OSMElementInformationModel.DebugCategory ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0054 }
0055 QQC2.Label {
0056 text: row.value
0057 color: row.category == OSMElementInformationModel.DebugCategory ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0058 }
0059 }
0060 }
0061
0062 Component {
0063 id: infoLinkDelegate
0064 Row {
0065 QQC2.Label {
0066 visible: row.keyLabel != ""
0067 text: row.keyLabel + ": "
0068 color: row.category == OSMElementInformationModel.DebugCategory ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0069 }
0070 QQC2.Label {
0071 text: "<a href=\"" + row.url + "\">" + row.value + "</a>"
0072 color: row.category == OSMElementInformationModel.DebugCategory ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0073 onLinkActivated: Qt.openUrlExternally(link)
0074 }
0075 }
0076 }
0077
0078 Component {
0079 id: infoAddressDelegate
0080 QQC2.Label {
0081 text: (row.value.street + " " + row.value.houseNumber + "\n" + row.value.postalCode + " " + row.value.city + "\n" + row.value.country).trim()
0082 }
0083 }
0084
0085 Kirigami.OverlaySheet {
0086 id: elementDetailsSheet
0087
0088 header: Column {
0089 Kirigami.Heading {
0090 text: infoModel.name
0091 }
0092 Kirigami.Heading {
0093 text: infoModel.category
0094 level: 4
0095 visible: text != ""
0096 }
0097 }
0098
0099 ListView {
0100 model: infoModel
0101
0102 section.property: "categoryLabel"
0103 section.delegate: Kirigami.Heading {
0104 x: Kirigami.Units.largeSpacing
0105 level: 4
0106 text: section
0107 color: section == "Debug" ? Kirigami.Theme.disabledTextColor : Kirigami.Theme.textColor
0108 height: implicitHeight + Kirigami.Units.largeSpacing
0109 verticalAlignment: Qt.AlignBottom
0110 }
0111 section.criteria: ViewSection.FullString
0112 section.labelPositioning: ViewSection.CurrentLabelAtStart | ViewSection.InlineLabels
0113
0114 delegate: Loader {
0115 property var row: model
0116 x: Kirigami.Units.largeSpacing
0117 sourceComponent: {
0118 switch (row.type) {
0119 case OSMElementInformationModel.Link:
0120 return infoLinkDelegate;
0121 case OSMElementInformationModel.PostalAddress:
0122 return infoAddressDelegate;
0123 default:
0124 return infoStringDelegate;
0125 }
0126 }
0127 }
0128 }
0129
0130 onClosed: infoModel.clear()
0131 }
0132
0133 FloorLevelChangeModel {
0134 id: floorLevelChangeModel
0135 currentFloorLevel: map.view.floorLevel
0136 floorLevelModel: map.floorLevels
0137 }
0138
0139 Kirigami.OverlaySheet {
0140 id: elevatorSheet
0141 header: Kirigami.Heading {
0142 text: "Elevator"
0143 }
0144 ListView {
0145 model: floorLevelChangeModel
0146 delegate: QQC2.ItemDelegate {
0147 highlighted: false
0148 width: ListView.view.width
0149 contentItem: Kirigami.TitleSubtitle {
0150 title: model.display
0151 font.bold: model.isCurrentFloor
0152 }
0153 onClicked: {
0154 elevatorSheet.close();
0155 map.view.floorLevel = model.floorLevel;
0156 }
0157 }
0158 }
0159 }
0160
0161 IndoorMap {
0162 id: map
0163 anchors.fill: parent
0164
0165 IndoorMapScale {
0166 map: map
0167 anchors.left: map.left
0168 anchors.bottom: map.bottom
0169 width: 0.3 * map.width
0170 }
0171
0172 IndoorMapAttributionLabel {
0173 anchors.right: map.right
0174 anchors.bottom: map.bottom
0175 }
0176
0177 onElementPicked: {
0178 floorLevelChangeModel.element = element;
0179 if (floorLevelChangeModel.hasSingleLevelChange) {
0180 showPassiveNotification("Switched to floor " + floorLevelChangeModel.destinationLevelName, "short");
0181 map.view.floorLevel = floorLevelChangeModel.destinationLevel;
0182 return;
0183 } else if (floorLevelChangeModel.hasMultipleLevelChanges) {
0184 elevatorSheet.open();
0185 return;
0186 }
0187
0188 infoModel.element = element;
0189 if (infoModel.name != "" || infoModel.debug) {
0190 elementDetailsSheet.open();
0191 }
0192 }
0193 }
0194
0195 onCoordinateChanged: map.mapLoader.loadForCoordinate(coordinate.y, coordinate.x);
0196 }