1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2006-2007 Torsten Rahn <tackat@kde.org>
4 // SPDX-FileCopyrightText: 2007 Inge Wallin <ingwa@kde.org>
5 //
6 
7 //
8 // MarblePlacemarkModel exposes the model for Placemarks
9 //
10 
11 #ifndef MARBLE_MARBLEPLACEMARKMODEL_H
12 #define MARBLE_MARBLEPLACEMARKMODEL_H
13 
14 
15 #include <QAbstractListModel>
16 #include <QModelIndex>
17 
18 #include "marble_export.h"
19 
20 namespace Marble
21 {
22 
23 class GeoDataCoordinates;
24 class GeoDataPlacemark;
25 
26 /**
27  * This class represents a model of all place marks which
28  * are currently available through a given PlacemarkManager.
29  */
30 class MARBLE_EXPORT MarblePlacemarkModel : public QAbstractListModel
31 {
32     friend class PlacemarkManager;
33 
34     Q_OBJECT
35 
36     Q_PROPERTY( int count READ rowCount NOTIFY countChanged )
37 
38  public:
39     /**
40      * The roles of the place marks.
41      */
42     enum Roles
43     {
44       GeoTypeRole = Qt::UserRole + 1,  ///< The geo type (e.g. city or mountain)
45       DescriptionRole,                 ///< The description
46       CoordinateRole,                  ///< The GeoDataCoordinates coordinate
47       PopulationRole,                  ///< The population
48       AreaRole,                        ///< The area size
49       CountryCodeRole,                 ///< The country code
50       StateRole,                       ///< The state
51       VisualCategoryRole,              ///< The category
52       StyleRole,                       ///< The style
53       PopularityIndexRole,             ///< The popularity index
54       PopularityRole,                  ///< The popularity
55       ObjectPointerRole,               ///< The pointer to a specific object
56       GmtRole,                         ///< The Greenwich Mean Time
57       DstRole,                         ///< The Daylight Saving Time
58       GeometryRole,                    ///< The GeoDataGeometry geometry
59       LongitudeRole,                   ///< The longitude in degree (for use in QML)
60       LatitudeRole,                    ///< The latitude in degree (for use in QML)
61       IconPathRole                     ///< Path to the image, if known
62     };
63 
64     /**
65      * Creates a new place mark model.
66      *
67      * @param parent The parent object.
68      */
69     explicit MarblePlacemarkModel( QObject *parent = nullptr );
70 
71     /**
72      * Destroys the place mark model.
73      */
74     ~MarblePlacemarkModel() override;
75 
76     void setPlacemarkContainer( QVector<GeoDataPlacemark*> *container );
77 
78     /**
79      * Return the number of Placemarks in the Model.
80      */
81     int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
82     int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
83 
84     /**
85      * Return the supported role names
86      */
87     QHash<int, QByteArray> roleNames() const override;
88 
89     /**
90      * Return the data according to the index.
91      *
92      * @param index  the index of the data
93      * @param role   which part of the data to return.  @see Roles
94      */
95     QVariant data( const QModelIndex &index, int role ) const override;
96 
97     QModelIndexList approxMatch( const QModelIndex &start, int role,
98                                    const QVariant &value, int hits = 1,
99                                    Qt::MatchFlags flags = Qt::MatchFlags( Qt::MatchStartsWith | Qt::MatchWrap ) ) const;
100 
101     /**
102      * This method is used by the PlacemarkManager to add new
103      * place marks to the model.
104      */
105     void addPlacemarks( int start,
106                         int length );
107 
108     /**
109      * This method is used by the PlacemarkManager to remove
110      * place marks from the model.
111      */
112     void removePlacemarks( const QString &containerName,
113                            int start,
114                            int length );
115 
116 Q_SIGNALS:
117     void countChanged();
118 
119  private:
120 
121     Q_DISABLE_COPY( MarblePlacemarkModel )
122     class Private;
123     Private* const d;
124     QHash<int, QByteArray> m_roleNames;
125 };
126 
127 }
128 
129 #endif
130