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