Warning, /libraries/kosmindoormap/src/app/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.kosmindoormap
0012 
0013 Kirigami.Page {
0014     title: map.floorLevels.hasName(map.view.floorLevel) ? map.floorLevels.name(map.view.floorLevel) : ("Floor " + map.floorLevels.name(map.view.floorLevel));
0015     property point coordinate
0016     property alias map: map
0017     property alias debug: infoModel.debug
0018     property alias mapHoverEnabled: hoverHandler.enabled
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     IndoorMapInfoSheet {
0048         id: elementDetailsSheet
0049         model: infoModel
0050         mapData: page.map.mapData
0051     }
0052 
0053     FloorLevelChangeModel {
0054         id: floorLevelChangeModel
0055         currentFloorLevel: map.view.floorLevel
0056         floorLevelModel: map.floorLevels
0057     }
0058 
0059     Kirigami.OverlaySheet {
0060         id: elevatorSheet
0061         header: Kirigami.Heading {
0062             text: floorLevelChangeModel.title
0063         }
0064         ListView {
0065             model: floorLevelChangeModel
0066             Layout.preferredWidth: Kirigami.Units.gridUnit * 10
0067             delegate: QQC2.ItemDelegate {
0068                 highlighted: false
0069                 width: ListView.view.width
0070                 contentItem: Kirigami.TitleSubtitle {
0071                     title: model.display
0072                     font.bold: model.isCurrentFloor
0073                 }
0074                 onClicked: {
0075                     elevatorSheet.close();
0076                     map.view.floorLevel = model.floorLevel;
0077                 }
0078             }
0079         }
0080     }
0081 
0082     IndoorMap {
0083         id: map
0084         anchors.fill: parent
0085         hoveredElement: map.elementAt(map.mapEventPointToScreen(hoverHandler.point))
0086 
0087         IndoorMapScale {
0088             map: map
0089             anchors.left: map.left
0090             anchors.bottom: map.bottom
0091             width: 0.3 * map.width
0092         }
0093 
0094         IndoorMapAttributionLabel {
0095             anchors.right: map.right
0096             anchors.bottom: map.bottom
0097         }
0098 
0099         onElementPicked: {
0100             floorLevelChangeModel.element = element;
0101             if (floorLevelChangeModel.hasSingleLevelChange) {
0102                 showPassiveNotification("Switched to floor " + floorLevelChangeModel.destinationLevelName, "short");
0103                 map.view.floorLevel = floorLevelChangeModel.destinationLevel;
0104                 return;
0105             } else if (floorLevelChangeModel.hasMultipleLevelChanges) {
0106                 elevatorSheet.open();
0107                 return;
0108             }
0109 
0110             infoModel.element = element;
0111             if (infoModel.name != "" || infoModel.debug) {
0112                 elementDetailsSheet.open();
0113             }
0114         }
0115         onElementLongPressed: {
0116             // this provides info model access for elements with other interactions
0117             infoModel.element = element;
0118             if (infoModel.name != "" || infoModel.debug) {
0119                 elementDetailsSheet.open();
0120             }
0121         }
0122 
0123         HoverHandler {
0124             id: hoverHandler
0125             enabled: false
0126             acceptedDevices: PointerDevice.Mouse | PointerDevice.TouchPad
0127         }
0128     }
0129 
0130     onCoordinateChanged: map.mapLoader.loadForCoordinate(coordinate.y, coordinate.x);
0131 }