File indexing completed on 2024-05-05 03:49:16

0001 // SPDX-License-Identifier: LGPL-2.1-or-later
0002 //
0003 // SPDX-FileCopyrightText: 2012 Dennis Nienhüser <nienhueser@kde.org>
0004 //
0005 
0006 #ifndef MARBLE_DECLARATIVE_STREETMAPTHEMEMODEL_H
0007 #define MARBLE_DECLARATIVE_STREETMAPTHEMEMODEL_H
0008 
0009 #include <QSortFilterProxyModel>
0010 
0011 namespace Marble { class MapThemeManager; }
0012 
0013 class MapThemeModel : public QSortFilterProxyModel
0014 {
0015     Q_OBJECT
0016 
0017     Q_PROPERTY( int count READ count NOTIFY countChanged )
0018 
0019 public:
0020     enum MapThemeFilter {
0021         AnyTheme = 0x0,
0022         Terrestrial = 0x1,
0023         Extraterrestrial = 0x2,
0024         LowZoom = 0x4,
0025         HighZoom = 0x8
0026     };
0027 
0028     Q_DECLARE_FLAGS(MapThemeFilters, MapThemeFilter)
0029 
0030     Q_FLAGS(MapThemeFilter MapThemeFilters)
0031 
0032     Q_PROPERTY( MapThemeFilters mapThemeFilter READ mapThemeFilter WRITE setMapThemeFilter NOTIFY mapThemeFilterChanged )
0033 
0034 public:
0035     explicit MapThemeModel( QObject* parent = nullptr );
0036 
0037     /** @todo FIXME https://bugreports.qt-project.org/browse/QTCOMPONENTS-1206 */
0038     int count() const;
0039 
0040     QHash<int, QByteArray> roleNames() const override;
0041 
0042     Q_INVOKABLE QString name( const QString &id ) const;
0043 
0044     Q_INVOKABLE int indexOf( const QString &id ) const;
0045 
0046     Q_INVOKABLE MapThemeFilters mapThemeFilter() const;
0047 
0048 public Q_SLOTS:
0049     void setMapThemeFilter( MapThemeFilters filters );
0050 
0051 Q_SIGNALS:
0052     void countChanged();
0053 
0054     void mapThemeFilterChanged();
0055 
0056 protected:
0057     bool filterAcceptsRow(int sourceRow,
0058                                   const QModelIndex &sourceParent) const override;
0059 
0060 private Q_SLOTS:
0061     void handleChangedThemes();
0062 
0063 private:
0064     Marble::MapThemeManager* m_themeManager;
0065 
0066     QList<QString> m_streetMapThemeIds;
0067 
0068     MapThemeFilters m_mapThemeFilters;
0069 
0070     QHash<int, QByteArray> m_roleNames;
0071 };
0072 
0073 #endif