QGIS API Documentation 3.99.0-Master (26c88405ac0)
Loading...
Searching...
No Matches
qgsprovidersublayermodel.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsprovidersublayermodel.h
3 ----------------------
4 begin : June 2021
5 copyright : (C) 2021 by Nyall Dawson
6 email : nyall dot dawson at gmail dot com
7 ***************************************************************************/
8
9/***************************************************************************
10 * *
11 * This program is free software; you can redistribute it and/or modify *
12 * it under the terms of the GNU General Public License as published by *
13 * the Free Software Foundation; either version 2 of the License, or *
14 * (at your option) any later version. *
15 * *
16 ***************************************************************************/
17
18#ifndef QGSPROVIDERSUBLAYERMODEL_H
19#define QGSPROVIDERSUBLAYERMODEL_H
20
21#include <deque>
22#include <memory>
23
24#include "qgis_core.h"
25#include "qgis_sip.h"
27
28#include <QAbstractItemModel>
29#include <QIcon>
30#include <QSortFilterProxyModel>
31
33class QgsProviderSublayerModelNode;
34class QgsProviderSublayerModelGroup;
35class QgsProviderSublayerModelSublayerNode;
37
38
39
55class CORE_EXPORT QgsProviderSublayerModel: public QAbstractItemModel
56{
57 Q_OBJECT
58
59 public:
60
62 enum class Role : int
63 {
64 ProviderKey = Qt::UserRole + 1,
65 LayerType,
66 Uri,
67 Name,
68 Description,
69 Path,
70 FeatureCount,
71 WkbType,
72 GeometryColumnName,
73 LayerNumber,
74 IsNonLayerItem,
75 NonLayerItemType,
76 Flags,
77 };
78
80 enum class Column : int
81 {
82 Name = 0,
83 Description = 1,
84 };
85
93 class CORE_EXPORT NonLayerItem
94 {
95 public:
96
101 QString type() const;
102
107 void setType( const QString &type );
108
113 QString name() const;
114
119 void setName( const QString &name );
120
125 QString description() const;
126
131 void setDescription( const QString &description );
132
137 QString uri() const;
138
143 void setUri( const QString &uri );
144
149 QIcon icon() const;
150
155 void setIcon( const QIcon &icon );
156
157 bool operator==( const QgsProviderSublayerModel::NonLayerItem &other ) const;
158 bool operator!=( const QgsProviderSublayerModel::NonLayerItem &other ) const;
159
160#ifdef SIP_RUN
161 SIP_PYOBJECT __repr__();
162 % MethodCode
163 QString str = QStringLiteral( "<QgsProviderSublayerModel.NonLayerItem: %1 - %2>" ).arg( sipCpp->type(), sipCpp->name() );
164 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
165 % End
166#endif
167
168 private:
169
170 QString mType;
171 QString mName;
172 QString mDescription;
173 QString mUri;
174 QIcon mIcon;
175
176 };
177
182
188 void setSublayerDetails( const QList< QgsProviderSublayerDetails > &details );
189
195 QList< QgsProviderSublayerDetails > sublayerDetails() const;
196
200 QgsProviderSublayerDetails indexToSublayer( const QModelIndex &index ) const;
201
206
211
212 QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
213 QModelIndex parent( const QModelIndex &index ) const override;
214 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
215 int rowCount( const QModelIndex &parent ) const override;
216 Qt::ItemFlags flags( const QModelIndex &index ) const override;
217 QVariant data( const QModelIndex &index, int role ) const override;
218 QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
219
221
226 QgsProviderSublayerModelNode *index2node( const QModelIndex &index ) const SIP_SKIP;
228
229 protected:
230
232 QList<QgsProviderSublayerDetails> mSublayers;
233
234 std::unique_ptr< QgsProviderSublayerModelGroup > mRootNode;
235
236 private:
237 QModelIndex indexOfParentNode( QgsProviderSublayerModelNode *parentNode ) const;
238
239 QModelIndex node2index( QgsProviderSublayerModelNode *node ) const;
240};
241
242
243#ifndef SIP_RUN
245
246class CORE_EXPORT QgsProviderSublayerModelNode
247{
248 public:
249
250 virtual ~QgsProviderSublayerModelNode();
251
257 QgsProviderSublayerModelGroup *parent() { return mParent; }
258
262 virtual QVariant data( int role = Qt::DisplayRole, int column = 0 ) const = 0;
263
267 virtual int childCount() const = 0;
268
269 protected:
270
271 QgsProviderSublayerModelGroup *mParent = nullptr;
272
273 friend class QgsProviderSublayerModelGroup;
274};
275
276class CORE_EXPORT QgsProviderSublayerModelGroup : public QgsProviderSublayerModelNode
277{
278 public:
279
283 QgsProviderSublayerModelGroup( const QString &title );
284
285 QgsProviderSublayerModelGroup( QgsProviderSublayerModelGroup &&other ) = default;
286 QgsProviderSublayerModelGroup &operator=( QgsProviderSublayerModelGroup && ) = default;
287
291 QString name() const { return mGroupTitle; }
292
296 QgsProviderSublayerModelNode *addChild( std::unique_ptr< QgsProviderSublayerModelNode > child );
297
303 int indexOf( QgsProviderSublayerModelNode *child ) const;
304
308 QgsProviderSublayerModelNode *childAt( int index );
309
313 void removeChildAt( int index );
314
318 QgsProviderSublayerModelGroup *findGroup( const QString &name ) const;
319
323 QgsProviderSublayerModelGroup *findGroupForPath( const QStringList &path ) const;
324
325 QgsProviderSublayerModelSublayerNode *findSublayer( const QgsProviderSublayerDetails &sublayer );
326
327 int childCount() const final { return mChildren.size(); }
328 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
329
330 void populateFromSublayers( const QList<QgsProviderSublayerDetails> &sublayers );
331
332 protected:
333
334
335 std::deque< std::unique_ptr< QgsProviderSublayerModelNode > > mChildren;
336
337 QString mGroupTitle;
338
339};
340
341class CORE_EXPORT QgsProviderSublayerModelSublayerNode : public QgsProviderSublayerModelNode
342{
343 public:
344
345 QgsProviderSublayerModelSublayerNode( const QgsProviderSublayerDetails &sublayer );
346 int childCount() const final { return 0; }
347 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
348 QgsProviderSublayerDetails sublayer() const { return mSublayer; }
349
350 private:
351 QgsProviderSublayerDetails mSublayer;
352
353};
354
355class CORE_EXPORT QgsProviderSublayerModelNonLayerItemNode : public QgsProviderSublayerModelNode
356{
357 public:
358
359 QgsProviderSublayerModelNonLayerItemNode( const QgsProviderSublayerModel::NonLayerItem &item );
360 int childCount() const final { return 0; }
361 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
362
363 QgsProviderSublayerModel::NonLayerItem item() const { return mItem; }
364
365 private:
366 QgsProviderSublayerModel::NonLayerItem mItem;
367
368};
369
371#endif
372
380class CORE_EXPORT QgsProviderSublayerProxyModel: public QSortFilterProxyModel
381{
382 Q_OBJECT
383
384 public:
385
389 QgsProviderSublayerProxyModel( QObject *parent SIP_TRANSFERTHIS = nullptr );
390
396 QString filterString() const;
397
403 void setFilterString( const QString &filter );
404
410 bool includeSystemTables() const;
411
417 void setIncludeSystemTables( bool include );
418
425 bool includeEmptyLayers() const;
426
433 void setIncludeEmptyLayers( bool include );
434
435 protected:
436 bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
437 bool lessThan( const QModelIndex &source_left, const QModelIndex &source_right ) const override;
438
439 private:
440
441 QString mFilterString;
442 bool mIncludeSystemTables = false;
443 bool mIncludeEmptyLayers = true;
444
445};
446
447
448#endif // QGSPROVIDERSUBLAYERMODEL_H
Contains details about a sub layer available from a dataset.
Contains details for a non-sublayer item to include in a QgsProviderSublayerModel.
void setName(const QString &name)
Sets the item's name.
void setDescription(const QString &description)
Sets the item's description.
void setType(const QString &type)
Sets the item's type.
QString type() const
Returns the item's type.
QString uri() const
Returns the item's URI.
QString name() const
Returns the item's name.
QIcon icon() const
Returns the item's icon.
void setUri(const QString &uri)
Set the item's uri.
QString description() const
Returns the item's description.
void setIcon(const QIcon &icon)
Sets the item's icon.
QVariant headerData(int section, Qt::Orientation orientation, int role=Qt::DisplayRole) const override
QList< QgsProviderSublayerDetails > mSublayers
Sublayer list.
QList< QgsProviderSublayerDetails > sublayerDetails() const
Returns the sublayer details shown in the model.
QModelIndex index(int row, int column, const QModelIndex &parent=QModelIndex()) const override
QVariant data(const QModelIndex &index, int role) const override
QgsProviderSublayerModel(QObject *parent=nullptr)
Constructor for QgsProviderSublayerModel, with the specified parent object.
QgsProviderSublayerDetails indexToSublayer(const QModelIndex &index) const
Returns the sublayer corresponding to the given index.
std::unique_ptr< QgsProviderSublayerModelGroup > mRootNode
QgsProviderSublayerModel::NonLayerItem indexToNonLayerItem(const QModelIndex &index) const
Returns the non layer item corresponding to the given index.
void addNonLayerItem(const QgsProviderSublayerModel::NonLayerItem &item)
Adds a non-layer item (e.g.
void setSublayerDetails(const QList< QgsProviderSublayerDetails > &details)
Sets the sublayer details to show in the model.
QModelIndex parent(const QModelIndex &index) const override
int columnCount(const QModelIndex &parent=QModelIndex()) const override
int rowCount(const QModelIndex &parent) const override
Qt::ItemFlags flags(const QModelIndex &index) const override
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override
bool includeSystemTables() const
Returns true if system and internal tables will be shown in the model.
void setIncludeSystemTables(bool include)
Sets whether system and internal tables will be shown in the model.
QgsProviderSublayerProxyModel(QObject *parent=nullptr)
Constructor for QgsProviderSublayerProxyModel, with the specified parent object.
QString filterString() const
Returns the filter string used for filtering items in the model.
bool includeEmptyLayers() const
Returns true if empty tables will be shown in the model.
void setFilterString(const QString &filter)
Sets the filter string used for filtering items in the model.
bool filterAcceptsRow(int source_row, const QModelIndex &source_parent) const override
void setIncludeEmptyLayers(bool include)
Sets whether empty tables will be shown in the model.
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:134
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)