File indexing completed on 2024-05-05 03:49:20
0001 // SPDX-License-Identifier: LGPL-2.1-or-later 0002 // 0003 // SPDX-FileCopyrightText: 2015 Gábor Péterffy <peterffy95@gmail.com> 0004 // 0005 0006 #ifndef MARBLE_SEARCHBACKEND_H 0007 #define MARBLE_SEARCHBACKEND_H 0008 0009 #include <QObject> 0010 #include <QSortFilterProxyModel> 0011 0012 #include "MarbleQuickItem.h" 0013 #include "MarblePlacemarkModel.h" 0014 #include "Placemark.h" 0015 0016 class QCompleter; 0017 0018 namespace Marble 0019 { 0020 class SearchRunnerManager; 0021 0022 class SearchBackend : public QObject 0023 { 0024 Q_OBJECT 0025 0026 Q_PROPERTY(QObject *marbleQuickItem READ marbleQuickItem WRITE setMarbleQuickItem NOTIFY marbleQuickItemChanged) 0027 Q_PROPERTY(MarblePlacemarkModel *completionModel READ completionModel NOTIFY completionModelChanged) 0028 Q_PROPERTY(Placemark* selectedPlacemark READ selectedPlacemark NOTIFY selectedPlacemarkChanged) 0029 0030 public: 0031 explicit SearchBackend(QObject *parent = nullptr); 0032 Q_INVOKABLE void search(const QString &place); 0033 Q_INVOKABLE void setCompletionPrefix(const QString &prefix); 0034 QObject *marbleQuickItem(); 0035 MarblePlacemarkModel *completionModel(); 0036 const QObject* marbleQuickItem() const; 0037 Placemark* selectedPlacemark(); 0038 0039 Q_SIGNALS: 0040 void marbleQuickItemChanged(QObject *marbleQuickItem); 0041 void completionModelChanged(MarblePlacemarkModel *model); 0042 void searchResultChanged(MarblePlacemarkModel *model); 0043 void searchFinished(const QString &searchTerm); 0044 void selectedPlacemarkChanged(Placemark * selectedPlacemark); 0045 0046 public Q_SLOTS: 0047 Q_INVOKABLE void setSelectedPlacemark(int placemarkIndex); 0048 void setMarbleQuickItem(QObject *marbleQuickItem); 0049 void updateSearchResult(QAbstractItemModel *result); 0050 0051 private: 0052 static GeoDataPlacemark *placemarkFromQVariant(const QVariant &data); 0053 QSortFilterProxyModel m_model; 0054 SearchRunnerManager *m_searchManager; 0055 MarbleQuickItem *m_marbleQuickItem; 0056 MarblePlacemarkModel *m_placemarkModel; 0057 QCompleter *m_completer; 0058 MarblePlacemarkModel *m_completionModel; 0059 QVector<GeoDataPlacemark*> *m_completionContainer; 0060 Placemark m_selectedPlacemark; 0061 QString m_lastSuccessfulCompletion; 0062 }; 0063 0064 } 0065 #endif