Warning, /libraries/kosmindoormap/src/app/SelectLocationSheet.qml is written in an unsupported language. File is not indexed.
0001 /* 0002 SPDX-FileCopyrightText: 2021 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.kpublictransport as PublicTransport 0012 import org.kde.kosmindoormap 0013 import org.kde.kosmindoormap.kpublictransport 0014 0015 Kirigami.OverlaySheet { 0016 id: root 0017 property point coordinate; 0018 property var publicTransportManager 0019 0020 signal coordinateSelected() 0021 0022 header: Kirigami.Heading { 0023 text: "Select Location" 0024 } 0025 0026 ColumnLayout { 0027 Kirigami.Heading { 0028 text: "Examples" 0029 level: 4 0030 } 0031 0032 ExampleLocationModel { id: exampleModel } 0033 0034 QQC2.ComboBox { 0035 id: exampleBox 0036 Layout.fillWidth: true 0037 model: exampleModel 0038 popup.z: 999 // workaround for ending up below the overlay sheet 0039 textRole: "label" 0040 onCurrentIndexChanged: { 0041 var obj = exampleModel.get(currentIndex); 0042 root.coordinate.y = obj.lat; 0043 root.coordinate.x = obj.lon; 0044 } 0045 } 0046 0047 Kirigami.Heading { 0048 text: "Coordinate" 0049 level: 4 0050 } 0051 0052 RowLayout { 0053 QQC2.TextField { 0054 id: coordField 0055 placeholderText: "<latitude>, <longitude>" 0056 Layout.fillWidth: true 0057 onEditingFinished: function() { 0058 parseCoordinate(); 0059 } 0060 function parseCoordinate() { 0061 var c = coordField.text.match(/([\d\.-]+)[,;/ ]+([\d\.-]*)/); 0062 if (c) { 0063 root.coordinate.y = c[1]; 0064 root.coordinate.x = c[2]; 0065 } 0066 } 0067 } 0068 QQC2.ToolButton { 0069 icon.name: "edit-clear-symbolic" 0070 onClicked: function() { 0071 coordField.clear(); 0072 coordField.parseCoordinate(); 0073 } 0074 } 0075 QQC2.ToolButton { 0076 icon.name: "edit-paste-symbolic" 0077 onClicked: function() { 0078 coordField.clear(); 0079 coordField.paste(); 0080 coordField.parseCoordinate(); 0081 } 0082 } 0083 } 0084 0085 Kirigami.Heading { 0086 text: "Name" 0087 level: 4 0088 } 0089 0090 QQC2.TextField { 0091 id: nameField 0092 placeholderText: "train station name" 0093 Layout.fillWidth: true 0094 onEditingFinished: function() { 0095 locationModel.request.name = nameField.text; 0096 locationModel.request.backends = [ "un_navitia", "de_db" ]; 0097 locationModel.request.maximumResults = 10; 0098 locationModel.request.types = PublicTransport.Location.Stop; 0099 } 0100 } 0101 PublicTransport.LocationQueryModel { 0102 id: locationModel 0103 manager: root.publicTransportManager 0104 } 0105 ListView { 0106 id: nameSearchResultView 0107 Layout.fillWidth: true 0108 clip: true 0109 implicitHeight: contentHeight 0110 model: locationModel 0111 delegate: QQC2.ItemDelegate { 0112 width: ListView.view.width 0113 contentItem: Kirigami.TitleSubtitle { 0114 title: location.name 0115 } 0116 } 0117 onCurrentIndexChanged: function() { 0118 var loc = locationModel.data(locationModel.index(nameSearchResultView.currentIndex, 0), PublicTransport.LocationQueryModel.LocationRole); 0119 if (loc != undefined) { 0120 root.coordinate.x = loc.longitude; 0121 root.coordinate.y = loc.latitude; 0122 } 0123 } 0124 } 0125 } 0126 0127 footer: QQC2.Button { 0128 text: "Show" 0129 enabled: root.coordinate.x != 0.0 && root.coordinate.x != NaN && root.coordinate.y != 0.0 && root.coordinate != NaN 0130 onClicked: { 0131 console.log(root.coordinate); 0132 root.close(); 0133 coordinateSelected(); 0134 } 0135 } 0136 }