QGIS API Documentation 3.99.0-Master (d270888f95f)
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#include <QString>
32
33using namespace Qt::StringLiterals;
34
36class QgsProviderSublayerModelNode;
37class QgsProviderSublayerModelGroup;
38class QgsProviderSublayerModelSublayerNode;
40
41
42
58class CORE_EXPORT QgsProviderSublayerModel: public QAbstractItemModel
59{
60 Q_OBJECT
61
62 public:
63
65 enum class Role : int
66 {
67 ProviderKey = Qt::UserRole + 1,
68 LayerType,
69 Uri,
70 Name,
71 Description,
72 Path,
73 FeatureCount,
74 WkbType,
75 GeometryColumnName,
76 LayerNumber,
77 IsNonLayerItem,
78 NonLayerItemType,
79 Flags,
80 };
81
83 enum class Column : int
84 {
85 Name = 0,
86 Description = 1,
87 };
88
96 class CORE_EXPORT NonLayerItem
97 {
98 public:
99
104 QString type() const;
105
110 void setType( const QString &type );
111
116 QString name() const;
117
122 void setName( const QString &name );
123
128 QString description() const;
129
134 void setDescription( const QString &description );
135
140 QString uri() const;
141
146 void setUri( const QString &uri );
147
152 QIcon icon() const;
153
158 void setIcon( const QIcon &icon );
159
160 bool operator==( const QgsProviderSublayerModel::NonLayerItem &other ) const;
161 bool operator!=( const QgsProviderSublayerModel::NonLayerItem &other ) const;
162
163#ifdef SIP_RUN
164 SIP_PYOBJECT __repr__();
165 % MethodCode
166 QString str = u"<QgsProviderSublayerModel.NonLayerItem: %1 - %2>"_s.arg( sipCpp->type(), sipCpp->name() );
167 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
168 % End
169#endif
170
171 private:
172
173 QString mType;
174 QString mName;
175 QString mDescription;
176 QString mUri;
177 QIcon mIcon;
178
179 };
180
185
191 void setSublayerDetails( const QList< QgsProviderSublayerDetails > &details );
192
198 QList< QgsProviderSublayerDetails > sublayerDetails() const;
199
203 QgsProviderSublayerDetails indexToSublayer( const QModelIndex &index ) const;
204
209
214
215 QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override;
216 QModelIndex parent( const QModelIndex &index ) const override;
217 int columnCount( const QModelIndex &parent = QModelIndex() ) const override;
218 int rowCount( const QModelIndex &parent ) const override;
219 Qt::ItemFlags flags( const QModelIndex &index ) const override;
220 QVariant data( const QModelIndex &index, int role ) const override;
221 QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override;
222
224
229 QgsProviderSublayerModelNode *index2node( const QModelIndex &index ) const SIP_SKIP;
231
232 protected:
233
235 QList<QgsProviderSublayerDetails> mSublayers;
236
237 std::unique_ptr< QgsProviderSublayerModelGroup > mRootNode;
238
239 private:
240 QModelIndex indexOfParentNode( QgsProviderSublayerModelNode *parentNode ) const;
241
242 QModelIndex node2index( QgsProviderSublayerModelNode *node ) const;
243};
244
245
246#ifndef SIP_RUN
248
249class CORE_EXPORT QgsProviderSublayerModelNode
250{
251 public:
252
253 virtual ~QgsProviderSublayerModelNode();
254
260 QgsProviderSublayerModelGroup *parent() { return mParent; }
261
265 virtual QVariant data( int role = Qt::DisplayRole, int column = 0 ) const = 0;
266
270 virtual int childCount() const = 0;
271
272 protected:
273
274 QgsProviderSublayerModelGroup *mParent = nullptr;
275
276 friend class QgsProviderSublayerModelGroup;
277};
278
279class CORE_EXPORT QgsProviderSublayerModelGroup : public QgsProviderSublayerModelNode
280{
281 public:
282
286 QgsProviderSublayerModelGroup( const QString &title );
287
288 QgsProviderSublayerModelGroup( QgsProviderSublayerModelGroup &&other ) = default;
289 QgsProviderSublayerModelGroup &operator=( QgsProviderSublayerModelGroup && ) = default;
290
294 QString name() const { return mGroupTitle; }
295
299 QgsProviderSublayerModelNode *addChild( std::unique_ptr< QgsProviderSublayerModelNode > child );
300
306 int indexOf( QgsProviderSublayerModelNode *child ) const;
307
311 QgsProviderSublayerModelNode *childAt( int index );
312
316 void removeChildAt( int index );
317
321 QgsProviderSublayerModelGroup *findGroup( const QString &name ) const;
322
326 QgsProviderSublayerModelGroup *findGroupForPath( const QStringList &path ) const;
327
328 QgsProviderSublayerModelSublayerNode *findSublayer( const QgsProviderSublayerDetails &sublayer );
329
330 int childCount() const final { return mChildren.size(); }
331 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
332
333 void populateFromSublayers( const QList<QgsProviderSublayerDetails> &sublayers );
334
335 protected:
336
337
338 std::deque< std::unique_ptr< QgsProviderSublayerModelNode > > mChildren;
339
340 QString mGroupTitle;
341
342};
343
344class CORE_EXPORT QgsProviderSublayerModelSublayerNode : public QgsProviderSublayerModelNode
345{
346 public:
347
348 QgsProviderSublayerModelSublayerNode( const QgsProviderSublayerDetails &sublayer );
349 int childCount() const final { return 0; }
350 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
351 QgsProviderSublayerDetails sublayer() const { return mSublayer; }
352
353 private:
354 QgsProviderSublayerDetails mSublayer;
355
356};
357
358class CORE_EXPORT QgsProviderSublayerModelNonLayerItemNode : public QgsProviderSublayerModelNode
359{
360 public:
361
362 QgsProviderSublayerModelNonLayerItemNode( const QgsProviderSublayerModel::NonLayerItem &item );
363 int childCount() const final { return 0; }
364 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
365
366 QgsProviderSublayerModel::NonLayerItem item() const { return mItem; }
367
368 private:
369 QgsProviderSublayerModel::NonLayerItem mItem;
370
371};
372
374#endif
375
383class CORE_EXPORT QgsProviderSublayerProxyModel: public QSortFilterProxyModel
384{
385 Q_OBJECT
386
387 public:
388
392 QgsProviderSublayerProxyModel( QObject *parent SIP_TRANSFERTHIS = nullptr );
393
399 QString filterString() const;
400
406 void setFilterString( const QString &filter );
407
413 bool includeSystemTables() const;
414
420 void setIncludeSystemTables( bool include );
421
428 bool includeEmptyLayers() const;
429
436 void setIncludeEmptyLayers( bool include );
437
438 protected:
439 bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
440 bool lessThan( const QModelIndex &source_left, const QModelIndex &source_right ) const override;
441
442 private:
443
444 QString mFilterString;
445 bool mIncludeSystemTables = false;
446 bool mIncludeEmptyLayers = true;
447
448};
449
450
451#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)