Create a sorting proxy model for bookmarks

This commit is contained in:
Nyall Dawson 2019-09-04 08:25:07 +10:00
parent bddc1494db
commit 5f68abfa48
5 changed files with 66 additions and 5 deletions

View File

@ -49,7 +49,7 @@ model data is a merge of the bookmarks stored in both managers.
ColumnStore,
};
QgsBookmarkManagerModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = 0, QObject *parent = 0 );
QgsBookmarkManagerModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = 0, QObject *parent /TransferThis/ = 0 );
%Docstring
Constructor for QgsBookmarkManagerModel, associated with a main ``manager``
(usually the application bookmark manager, accessed via QgsApplication.bookmarkManager())
@ -75,6 +75,28 @@ and a secondary ``projectManager`` (a project based bookmark manager).
};
class QgsBookmarkManagerProxyModel : QSortFilterProxyModel
{
%Docstring
A QSortFilterProxyModel subclass for sorting the entries in a QgsBookmarkManagerModel.
.. versionadded:: 3.10
%End
%TypeHeaderCode
#include "qgsbookmarkmodel.h"
%End
public:
QgsBookmarkManagerProxyModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = 0, QObject *parent /TransferThis/ = 0 );
%Docstring
Constructor for QgsBookmarkManagerProxyModel, associated with a main ``manager``
(usually the application bookmark manager, accessed via QgsApplication.bookmarkManager())
and a secondary ``projectManager`` (a project based bookmark manager).
%End
};
/************************************************************************
* This file has been generated automatically from *

View File

@ -72,7 +72,7 @@ QgsBookmarks::QgsBookmarks( QWidget *parent )
mBookmarkToolbar->addWidget( btnImpExp );
mBookmarkModel = new QgsBookmarkManagerModel( QgsApplication::bookmarkManager(), QgsProject::instance()->bookmarkManager(), this );
mBookmarkModel = new QgsBookmarkManagerProxyModel( QgsApplication::bookmarkManager(), QgsProject::instance()->bookmarkManager(), this );
lstBookmarks->setModel( mBookmarkModel );
lstBookmarks->setItemDelegate( new QgsDoubleSpinBoxBookmarksDelegate( this ) );

View File

@ -27,7 +27,7 @@
class QgsBookmark;
class QgsBookmarkManager;
class QgsBookmarkManagerModel;
class QgsBookmarkManagerProxyModel;
/**
* \brief QgsDoubleSpinBoxBookmarksDelegate class shows 6 digits when value is a double
@ -74,7 +74,7 @@ class APP_EXPORT QgsBookmarks : public QgsDockWidget, private Ui::QgsBookmarksBa
void lstBookmarks_doubleClicked( const QModelIndex & );
private:
QgsBookmarkManagerModel *mBookmarkModel = nullptr;
QgsBookmarkManagerProxyModel *mBookmarkModel = nullptr;
void saveWindowLocation();

View File

@ -361,3 +361,18 @@ QgsBookmark QgsBookmarkManagerModel::bookmarkForIndex( const QModelIndex &index
return mProjectManager->bookmarks().at( index.row() - managerCount );
return QgsBookmark();
}
//
// QgsBookmarkManagerProxyModel
//
QgsBookmarkManagerProxyModel::QgsBookmarkManagerProxyModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager, QObject *parent )
: QSortFilterProxyModel( parent )
, mModel( new QgsBookmarkManagerModel( manager, projectManager, this ) )
{
setSourceModel( mModel );
setDynamicSortFilter( true );
setSortLocaleAware( true );
setFilterCaseSensitivity( Qt::CaseInsensitive );
sort( 0 );
}

View File

@ -19,6 +19,7 @@
#include "qgis_core.h"
#include "qgis_sip.h"
#include <QAbstractTableModel>
#include <QSortFilterProxyModel>
class QgsBookmarkManager;
class QgsBookmark;
@ -70,7 +71,7 @@ class CORE_EXPORT QgsBookmarkManagerModel: public QAbstractTableModel
* (usually the application bookmark manager, accessed via QgsApplication::bookmarkManager())
* and a secondary \a projectManager (a project based bookmark manager).
*/
QgsBookmarkManagerModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = nullptr, QObject *parent = nullptr );
QgsBookmarkManagerModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = nullptr, QObject *parent SIP_TRANSFERTHIS = nullptr );
int rowCount( const QModelIndex &parent = QModelIndex() ) const override;
int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
@ -96,5 +97,28 @@ class CORE_EXPORT QgsBookmarkManagerModel: public QAbstractTableModel
};
/**
* \ingroup core
* \class QgsBookmarkManagerProxyModel
*
* \brief A QSortFilterProxyModel subclass for sorting the entries in a QgsBookmarkManagerModel.
*
* \since QGIS 3.10
*/
class CORE_EXPORT QgsBookmarkManagerProxyModel : public QSortFilterProxyModel
{
public:
/**
* Constructor for QgsBookmarkManagerProxyModel, associated with a main \a manager
* (usually the application bookmark manager, accessed via QgsApplication::bookmarkManager())
* and a secondary \a projectManager (a project based bookmark manager).
*/
QgsBookmarkManagerProxyModel( QgsBookmarkManager *manager, QgsBookmarkManager *projectManager = nullptr, QObject *parent SIP_TRANSFERTHIS = nullptr );
private:
QgsBookmarkManagerModel *mModel = nullptr;
};
#endif // QGSBOOKMARKMODEL_H