Branch data Line data Source code
1 : : /*************************************************************************** 2 : : qgsbookmarkmodel.h 3 : : ------------------ 4 : : Date : Septemeber 2019 5 : : Copyright : (C) 2019 Nyall Dawson 6 : : Email : nyall dot dawson at gmail dot com 7 : : *************************************************************************** 8 : : * * 9 : : * This program is free software; you can redistribute it and/or modify * 10 : : * it under the terms of the GNU General Public License as published by * 11 : : * the Free Software Foundation; either version 2 of the License, or * 12 : : * (at your option) any later version. * 13 : : * * 14 : : ***************************************************************************/ 15 : : 16 : : #ifndef QGSBOOKMARKMODEL_H 17 : : #define QGSBOOKMARKMODEL_H 18 : : 19 : : #include "qgis_core.h" 20 : : #include "qgis_sip.h" 21 : : #include <QAbstractTableModel> 22 : : #include <QSortFilterProxyModel> 23 : : 24 : : class QgsBookmarkManager; 25 : : class QgsBookmark; 26 : : 27 : : /** 28 : : * \ingroup core 29 : : * \class QgsBookmarkManagerModel 30 : : * 31 : : * \brief Implements a model for the contents of QgsBookmarkManager objects. 32 : : * 33 : : * QgsBookmarkModel provides a Qt table model for displaying and manipulating 34 : : * the bookmarks managed by a QgsBookmarkManager object. The model requires 35 : : * both a main manager (usually the application bookmark manager, accessed 36 : : * via QgsApplication::bookmarkManager()) and a project-based manager. The resultant 37 : : * model data is a merge of the bookmarks stored in both managers. 38 : : * 39 : : * \since QGIS 3.10 40 : : */ 41 : : class CORE_EXPORT QgsBookmarkManagerModel: public QAbstractTableModel 42 : : { 43 : 0 : Q_OBJECT 44 : : 45 : : public: 46 : : 47 : : //! Custom model roles 48 : : enum CustomRoles 49 : : { 50 : : RoleExtent = Qt::UserRole, //!< Bookmark extent as a QgsReferencedRectangle 51 : : RoleName, //!< Bookmark name 52 : : RoleId, //!< Bookmark ID 53 : : RoleGroup, //!< Bookmark group 54 : : }; 55 : : 56 : : //! Model columns 57 : : enum Columns 58 : : { 59 : : ColumnName, //!< Name column 60 : : ColumnGroup, //!< Group column 61 : : ColumnXMin, //!< Extent x-minimum 62 : : ColumnYMin, //!< Extent y-minimum 63 : : ColumnXMax, //!< Extent x-maximum 64 : : ColumnYMax, //!< Extent y-maxnimum 65 : : ColumnCrs, //!< CRS of extent 66 : : ColumnStore, //!< Manager storing the bookmark (TRUE if stored in project bookmark manager) 67 : : }; 68 : : 69 : : /** 70 : : * Constructor for QgsBookmarkManagerModel, associated with a main \a manager 71 : : * (usually the application bookmark manager, accessed via QgsApplication::bookmarkManager()) 72 : : * and a secondary \a projectManager (a project based bookmark manager). 73 : : */ 74 : : QgsBookmarkManagerModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = nullptr, QObject *parent SIP_TRANSFERTHIS = nullptr ); 75 : : 76 : : int rowCount( const QModelIndex &parent = QModelIndex() ) const override; 77 : : int columnCount( const QModelIndex &parent = QModelIndex() ) const override; 78 : : QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override; 79 : : Qt::ItemFlags flags( const QModelIndex &index ) const override; 80 : : bool setData( const QModelIndex &index, const QVariant &value, int role = Qt::EditRole ) override; 81 : : bool insertRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override; 82 : : bool removeRows( int row, int count, const QModelIndex &parent = QModelIndex() ) override; 83 : : QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; 84 : : 85 : : private slots: 86 : : void bookmarkAboutToBeAdded( const QString &id ); 87 : : void bookmarkAdded( const QString &id ); 88 : : void bookmarkAboutToBeRemoved( const QString &id ); 89 : : void bookmarkRemoved( const QString &id ); 90 : : void bookmarkChanged( const QString &id ); 91 : : 92 : : private: 93 : : bool mBlocked = false; 94 : : QgsBookmarkManager *mManager = nullptr; 95 : : QgsBookmarkManager *mProjectManager = nullptr; 96 : : QgsBookmark bookmarkForIndex( const QModelIndex &index ) const; 97 : : 98 : : }; 99 : : 100 : : /** 101 : : * \ingroup core 102 : : * \class QgsBookmarkManagerProxyModel 103 : : * 104 : : * \brief A QSortFilterProxyModel subclass for sorting the entries in a QgsBookmarkManagerModel. 105 : : * 106 : : * \since QGIS 3.10 107 : : */ 108 : : class CORE_EXPORT QgsBookmarkManagerProxyModel : public QSortFilterProxyModel 109 : : { 110 : : Q_OBJECT 111 : : 112 : : public: 113 : : 114 : : /** 115 : : * Constructor for QgsBookmarkManagerProxyModel, associated with a main \a manager 116 : : * (usually the application bookmark manager, accessed via QgsApplication::bookmarkManager()) 117 : : * and a secondary \a projectManager (a project based bookmark manager). 118 : : */ 119 : : QgsBookmarkManagerProxyModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = nullptr, QObject *parent SIP_TRANSFERTHIS = nullptr ); 120 : : 121 : : private: 122 : : 123 : : QgsBookmarkManagerModel *mModel = nullptr; 124 : : }; 125 : : 126 : : #endif // QGSBOOKMARKMODEL_H