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