18#ifndef QGSPROVIDERSUBLAYERMODEL_H
19#define QGSPROVIDERSUBLAYERMODEL_H
28#include <QAbstractItemModel>
30#include <QSortFilterProxyModel>
33using namespace Qt::StringLiterals;
36class QgsProviderSublayerModelNode;
37class QgsProviderSublayerModelGroup;
38class QgsProviderSublayerModelSublayerNode;
65 ProviderKey = Qt::UserRole + 1,
101 QString
type()
const;
113 QString
name()
const;
162 SIP_PYOBJECT __repr__();
164 QString str = u
"<QgsProviderSublayerModel.NonLayerItem: %1 - %2>"_s.arg( sipCpp->type(), sipCpp->name() );
165 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
176 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;
236 std::unique_ptr< QgsProviderSublayerModelGroup >
mRootNode;
239 QModelIndex indexOfParentNode( QgsProviderSublayerModelNode *parentNode )
const;
241 QModelIndex node2index( QgsProviderSublayerModelNode *node )
const;
248class CORE_EXPORT QgsProviderSublayerModelNode
251 virtual ~QgsProviderSublayerModelNode();
258 QgsProviderSublayerModelGroup *parent() {
return mParent; }
263 virtual QVariant data(
int role = Qt::DisplayRole,
int column = 0 )
const = 0;
268 virtual int childCount()
const = 0;
271 QgsProviderSublayerModelGroup *mParent =
nullptr;
273 friend class QgsProviderSublayerModelGroup;
276class CORE_EXPORT QgsProviderSublayerModelGroup :
public QgsProviderSublayerModelNode
282 QgsProviderSublayerModelGroup(
const QString &title );
284 QgsProviderSublayerModelGroup( QgsProviderSublayerModelGroup &&other ) =
default;
285 QgsProviderSublayerModelGroup &operator=( QgsProviderSublayerModelGroup && ) =
default;
290 QString name()
const {
return mGroupTitle; }
295 QgsProviderSublayerModelNode *addChild( std::unique_ptr< QgsProviderSublayerModelNode > child );
302 int indexOf( QgsProviderSublayerModelNode *child )
const;
307 QgsProviderSublayerModelNode *childAt(
int index );
312 void removeChildAt(
int index );
317 QgsProviderSublayerModelGroup *findGroup(
const QString &name )
const;
322 QgsProviderSublayerModelGroup *findGroupForPath(
const QStringList &path )
const;
324 QgsProviderSublayerModelSublayerNode *findSublayer(
const QgsProviderSublayerDetails &sublayer );
326 int childCount() const final {
return mChildren.size(); }
327 QVariant data(
int role = Qt::DisplayRole,
int column = 0 )
const override;
329 void populateFromSublayers(
const QList<QgsProviderSublayerDetails> &sublayers );
332 std::deque< std::unique_ptr< QgsProviderSublayerModelNode > > mChildren;
337class CORE_EXPORT QgsProviderSublayerModelSublayerNode :
public QgsProviderSublayerModelNode
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; }
346 QgsProviderSublayerDetails mSublayer;
349class CORE_EXPORT QgsProviderSublayerModelNonLayerItemNode :
public QgsProviderSublayerModelNode
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;
356 QgsProviderSublayerModel::NonLayerItem item()
const {
return mItem; }
359 QgsProviderSublayerModel::NonLayerItem mItem;
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;
431 QString mFilterString;
432 bool mIncludeSystemTables =
false;
433 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)