Warning, /libraries/kpublictransport/tests/locationpicker.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.kirigami.delegates as Kirigami 0012 import org.kde.kitemmodels 0013 import org.kde.i18n.localeData 0014 import org.kde.kpublictransport 0015 0016 Kirigami.ApplicationWindow { 0017 title: "Location Picker Example" 0018 0019 width: 540 0020 height: 720 0021 0022 pageStack.initialPage: locationPickerPage 0023 0024 Manager { 0025 id: ptMgr 0026 } 0027 0028 Component { 0029 id: locationPickerPage 0030 Kirigami.ScrollablePage { 0031 actions: [ 0032 Kirigami.Action { 0033 text: "Remove All" 0034 onTriggered: locationHistoryModel.clear() 0035 } 0036 ] 0037 header: ColumnLayout { 0038 QQC2.ComboBox { 0039 id: countryCombo 0040 model: { 0041 var countries = new Array(); 0042 for (const b of ptMgr.backends) { 0043 for (const t of [CoverageArea.Realtime, CoverageArea.Regular, CoverageArea.Any]) { 0044 for (const c of b.coverageArea(t).regions) { 0045 if (c != 'UN' && c != 'EU') { 0046 countries.push(c.substr(0, 2)); 0047 } 0048 } 0049 } 0050 } 0051 return [...new Set(countries)].sort(); 0052 } 0053 Layout.fillWidth: true 0054 readonly property var currentCountry: Country.fromAlpha2(currentValue) 0055 displayText: currentCountry.emojiFlag + ' ' + currentCountry.name 0056 delegate: QQC2.ItemDelegate { 0057 text: { 0058 const c = Country.fromAlpha2(modelData); 0059 return c.emojiFlag + ' ' + c.name; 0060 } 0061 width: parent ? parent.width : undefined 0062 } 0063 Component.onCompleted: { 0064 countryCombo.currentIndex = countryCombo.indexOfValue(Qt.locale().name.match(/_([A-Z]{2})/)[1]) 0065 } 0066 } 0067 Kirigami.SearchField { 0068 id: queryTextField 0069 Layout.fillWidth: true 0070 onAccepted: { 0071 if (text !== "") { 0072 var loc = locationQueryModel.request.location; 0073 loc.name = text; 0074 loc.country = countryCombo.currentValue; 0075 locationQueryModel.request.location = loc; 0076 locationQueryModel.request.type = Location.Stop 0077 } 0078 } 0079 } 0080 QQC2.ButtonGroup { buttons: sortGroup.children } 0081 RowLayout { 0082 id: sortGroup 0083 QQC2.RadioButton { 0084 text: "Name" 0085 onCheckedChanged: { 0086 historySortModel.sortRoleName = "locationName"; 0087 historySortModel.sortOrder = Qt.AscendingOrder; 0088 } 0089 } 0090 QQC2.RadioButton { 0091 checked: true 0092 text: "Most Recent" 0093 onCheckedChanged: { 0094 historySortModel.sortRoleName = "lastUsed"; 0095 historySortModel.sortOrder = Qt.DescendingOrder; 0096 } 0097 } 0098 QQC2.RadioButton { 0099 text: "Most Often" 0100 onCheckedChanged: { 0101 historySortModel.sortRoleName = "useCount"; 0102 historySortModel.sortOrder = Qt.DescendingOrder; 0103 } 0104 } 0105 } 0106 } 0107 0108 LocationQueryModel { 0109 id: locationQueryModel 0110 manager: ptMgr 0111 queryDelay: 500 0112 } 0113 LocationHistoryModel { 0114 id: locationHistoryModel 0115 } 0116 KSortFilterProxyModel { 0117 id: historySortModel 0118 sourceModel: locationHistoryModel 0119 sortRoleName: "lastUsed" 0120 sortOrder: Qt.DescendingOrder 0121 } 0122 0123 Component { 0124 id: historyDelegate 0125 Kirigami.SwipeListItem { 0126 readonly property var sourceModel: ListView.view.model 0127 contentItem: QQC2.Label { 0128 text: model.location.name 0129 } 0130 actions: [ 0131 Kirigami.Action { 0132 icon.name: "edit-delete" 0133 text: "Remove history entry" 0134 onTriggered: { 0135 sourceModel.removeRows(model.index, 1) 0136 } 0137 } 0138 ] 0139 onClicked: { 0140 locationHistoryModel.addLocation(model.location); 0141 } 0142 } 0143 } 0144 0145 Component { 0146 id: queryResultDelegate 0147 QQC2.ItemDelegate { 0148 width: ListView.view.width 0149 contentItem: Kirigami.TitleSubtitle { 0150 title: model.location.name 0151 } 0152 onClicked: { 0153 locationHistoryModel.addLocation(model.location); 0154 queryTextField.text = ""; 0155 } 0156 } 0157 } 0158 0159 ListView { 0160 id: historyView 0161 model: queryTextField.text === "" ? historySortModel : locationQueryModel 0162 delegate: queryTextField.text === "" ? historyDelegate : queryResultDelegate 0163 0164 QQC2.BusyIndicator { 0165 anchors.centerIn: parent 0166 running: locationQueryModel.loading 0167 } 0168 0169 QQC2.Label { 0170 anchors.centerIn: parent 0171 width: parent.width 0172 text: locationQueryModel.errorMessage 0173 color: Kirigami.Theme.negativeTextColor 0174 wrapMode: Text.Wrap 0175 } 0176 } 0177 } 0178 } 0179 }