18#ifndef QGSPROVIDERSUBLAYERMODEL_H
19#define QGSPROVIDERSUBLAYERMODEL_H
28#include <QAbstractItemModel>
30#include <QSortFilterProxyModel>
33using namespace Qt::StringLiterals;
36class QgsProviderSublayerModelNode;
37class QgsProviderSublayerModelGroup;
38class QgsProviderSublayerModelSublayerNode;
67 ProviderKey = Qt::UserRole + 1,
104 QString
type()
const;
116 QString
name()
const;
164 SIP_PYOBJECT __repr__();
166 QString str = u
"<QgsProviderSublayerModel.NonLayerItem: %1 - %2>"_s.arg( sipCpp->type(), sipCpp->name() );
167 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
175 QString mDescription;
215 QModelIndex
index(
int row,
int column,
const QModelIndex &
parent = QModelIndex() )
const override;
216 QModelIndex
parent(
const QModelIndex &
index )
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;
229 QgsProviderSublayerModelNode *index2node(
const QModelIndex &
index )
const SIP_SKIP;
237 std::unique_ptr< QgsProviderSublayerModelGroup >
mRootNode;
240 QModelIndex indexOfParentNode( QgsProviderSublayerModelNode *parentNode )
const;
242 QModelIndex node2index( QgsProviderSublayerModelNode *node )
const;
249class CORE_EXPORT QgsProviderSublayerModelNode
253 virtual ~QgsProviderSublayerModelNode();
260 QgsProviderSublayerModelGroup *parent() {
return mParent; }
265 virtual QVariant data(
int role = Qt::DisplayRole,
int column = 0 )
const = 0;
270 virtual int childCount()
const = 0;
274 QgsProviderSublayerModelGroup *mParent =
nullptr;
276 friend class QgsProviderSublayerModelGroup;
279class CORE_EXPORT QgsProviderSublayerModelGroup :
public QgsProviderSublayerModelNode
286 QgsProviderSublayerModelGroup(
const QString &title );
288 QgsProviderSublayerModelGroup( QgsProviderSublayerModelGroup &&other ) =
default;
289 QgsProviderSublayerModelGroup &operator=( QgsProviderSublayerModelGroup && ) =
default;
294 QString name()
const {
return mGroupTitle; }
299 QgsProviderSublayerModelNode *addChild( std::unique_ptr< QgsProviderSublayerModelNode > child );
306 int indexOf( QgsProviderSublayerModelNode *child )
const;
311 QgsProviderSublayerModelNode *childAt(
int index );
316 void removeChildAt(
int index );
321 QgsProviderSublayerModelGroup *findGroup(
const QString &name )
const;
326 QgsProviderSublayerModelGroup *findGroupForPath(
const QStringList &path )
const;
328 QgsProviderSublayerModelSublayerNode *findSublayer(
const QgsProviderSublayerDetails &sublayer );
330 int childCount() const final {
return mChildren.size(); }
331 QVariant data(
int role = Qt::DisplayRole,
int column = 0 )
const override;
333 void populateFromSublayers(
const QList<QgsProviderSublayerDetails> &sublayers );
338 std::deque< std::unique_ptr< QgsProviderSublayerModelNode > > mChildren;
344class CORE_EXPORT QgsProviderSublayerModelSublayerNode :
public QgsProviderSublayerModelNode
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; }
354 QgsProviderSublayerDetails mSublayer;
358class CORE_EXPORT QgsProviderSublayerModelNonLayerItemNode :
public QgsProviderSublayerModelNode
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;
366 QgsProviderSublayerModel::NonLayerItem item()
const {
return mItem; }
369 QgsProviderSublayerModel::NonLayerItem mItem;
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;
444 QString mFilterString;
445 bool mIncludeSystemTables =
false;
446 bool mIncludeEmptyLayers =
true;
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.
bool operator==(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)
bool operator!=(const QgsFeatureIterator &fi1, const QgsFeatureIterator &fi2)