QGIS API Documentation 4.0.0-Norrköping (1ddcee3d0e4)
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
57class CORE_EXPORT QgsProviderSublayerModel : public QAbstractItemModel
58{
59 Q_OBJECT
60
61 public:
63 enum class Role : int
64 {
65 ProviderKey = Qt::UserRole + 1,
66 LayerType,
67 Uri,
68 Name,
69 Description,
70 Path,
71 FeatureCount,
72 WkbType,
73 GeometryColumnName,
74 LayerNumber,
75 IsNonLayerItem,
76 NonLayerItemType,
77 Flags,
78 };
79
81 enum class Column : int
82 {
83 Name = 0,
84 Description = 1,
85 };
86
94 class CORE_EXPORT NonLayerItem
95 {
96 public:
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 // clang-format off
162 SIP_PYOBJECT __repr__();
163 % MethodCode
164 QString str = u"<QgsProviderSublayerModel.NonLayerItem: %1 - %2>"_s.arg( sipCpp->type(), sipCpp->name() );
165 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
166 % End
167// clang-format on
168#endif
169
170 // clang-format off
171 private:
172 // clang-format on
173
174 QString mType;
175 QString mName;
176 QString mDescription;
177 QString mUri;
178 QIcon mIcon;
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:
234 QList<QgsProviderSublayerDetails> mSublayers;
235
236 std::unique_ptr< QgsProviderSublayerModelGroup > mRootNode;
237
238 private:
239 QModelIndex indexOfParentNode( QgsProviderSublayerModelNode *parentNode ) const;
240
241 QModelIndex node2index( QgsProviderSublayerModelNode *node ) const;
242};
243
244
245#ifndef SIP_RUN
247
248class CORE_EXPORT QgsProviderSublayerModelNode
249{
250 public:
251 virtual ~QgsProviderSublayerModelNode();
252
258 QgsProviderSublayerModelGroup *parent() { return mParent; }
259
263 virtual QVariant data( int role = Qt::DisplayRole, int column = 0 ) const = 0;
264
268 virtual int childCount() const = 0;
269
270 protected:
271 QgsProviderSublayerModelGroup *mParent = nullptr;
272
273 friend class QgsProviderSublayerModelGroup;
274};
275
276class CORE_EXPORT QgsProviderSublayerModelGroup : public QgsProviderSublayerModelNode
277{
278 public:
282 QgsProviderSublayerModelGroup( const QString &title );
283
284 QgsProviderSublayerModelGroup( QgsProviderSublayerModelGroup &&other ) = default;
285 QgsProviderSublayerModelGroup &operator=( QgsProviderSublayerModelGroup && ) = default;
286
290 QString name() const { return mGroupTitle; }
291
295 QgsProviderSublayerModelNode *addChild( std::unique_ptr< QgsProviderSublayerModelNode > child );
296
302 int indexOf( QgsProviderSublayerModelNode *child ) const;
303
307 QgsProviderSublayerModelNode *childAt( int index );
308
312 void removeChildAt( int index );
313
317 QgsProviderSublayerModelGroup *findGroup( const QString &name ) const;
318
322 QgsProviderSublayerModelGroup *findGroupForPath( const QStringList &path ) const;
323
324 QgsProviderSublayerModelSublayerNode *findSublayer( const QgsProviderSublayerDetails &sublayer );
325
326 int childCount() const final { return mChildren.size(); }
327 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
328
329 void populateFromSublayers( const QList<QgsProviderSublayerDetails> &sublayers );
330
331 protected:
332 std::deque< std::unique_ptr< QgsProviderSublayerModelNode > > mChildren;
333
334 QString mGroupTitle;
335};
336
337class CORE_EXPORT QgsProviderSublayerModelSublayerNode : public QgsProviderSublayerModelNode
338{
339 public:
340 QgsProviderSublayerModelSublayerNode( const QgsProviderSublayerDetails &sublayer );
341 int childCount() const final { return 0; }
342 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
343 QgsProviderSublayerDetails sublayer() const { return mSublayer; }
344
345 private:
346 QgsProviderSublayerDetails mSublayer;
347};
348
349class CORE_EXPORT QgsProviderSublayerModelNonLayerItemNode : public QgsProviderSublayerModelNode
350{
351 public:
352 QgsProviderSublayerModelNonLayerItemNode( const QgsProviderSublayerModel::NonLayerItem &item );
353 int childCount() const final { return 0; }
354 QVariant data( int role = Qt::DisplayRole, int column = 0 ) const override;
355
356 QgsProviderSublayerModel::NonLayerItem item() const { return mItem; }
357
358 private:
359 QgsProviderSublayerModel::NonLayerItem mItem;
360};
361
363#endif
364
372class CORE_EXPORT QgsProviderSublayerProxyModel : public QSortFilterProxyModel
373{
374 Q_OBJECT
375
376 public:
380 QgsProviderSublayerProxyModel( QObject *parent SIP_TRANSFERTHIS = nullptr );
381
387 QString filterString() const;
388
394 void setFilterString( const QString &filter );
395
401 bool includeSystemTables() const;
402
408 void setIncludeSystemTables( bool include );
409
416 bool includeEmptyLayers() const;
417
424 void setIncludeEmptyLayers( bool include );
425
426 protected:
427 bool filterAcceptsRow( int source_row, const QModelIndex &source_parent ) const override;
428 bool lessThan( const QModelIndex &source_left, const QModelIndex &source_right ) const override;
429
430 private:
431 QString mFilterString;
432 bool mIncludeSystemTables = false;
433 bool mIncludeEmptyLayers = true;
434};
435
436
437#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:52
#define SIP_SKIP
Definition qgis_sip.h:133
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)