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 }