18#ifndef QGSPROVIDERSUBLAYERMODEL_H
19#define QGSPROVIDERSUBLAYERMODEL_H
28#include <QAbstractItemModel>
30#include <QSortFilterProxyModel>
33class QgsProviderSublayerModelNode;
34class QgsProviderSublayerModelGroup;
35class QgsProviderSublayerModelSublayerNode;
64 ProviderKey = Qt::UserRole + 1,
101 QString
type()
const;
113 QString
name()
const;
161 SIP_PYOBJECT __repr__();
163 QString str = QStringLiteral(
"<QgsProviderSublayerModel.NonLayerItem: %1 - %2>" ).arg( sipCpp->type(), sipCpp->name() );
164 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
172 QString mDescription;
212 QModelIndex
index(
int row,
int column,
const QModelIndex &
parent = QModelIndex() )
const override;
213 QModelIndex
parent(
const QModelIndex &
index )
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;
226 QgsProviderSublayerModelNode *index2node(
const QModelIndex &
index )
const SIP_SKIP;
234 std::unique_ptr< QgsProviderSublayerModelGroup >
mRootNode;
237 QModelIndex indexOfParentNode( QgsProviderSublayerModelNode *parentNode )
const;
239 QModelIndex node2index( QgsProviderSublayerModelNode *node )
const;
246class CORE_EXPORT QgsProviderSublayerModelNode
250 virtual ~QgsProviderSublayerModelNode();
257 QgsProviderSublayerModelGroup *parent() {
return mParent; }
262 virtual QVariant data(
int role = Qt::DisplayRole,
int column = 0 )
const = 0;
267 virtual int childCount()
const = 0;
271 QgsProviderSublayerModelGroup *mParent =
nullptr;
273 friend class QgsProviderSublayerModelGroup;
276class CORE_EXPORT QgsProviderSublayerModelGroup :
public QgsProviderSublayerModelNode
283 QgsProviderSublayerModelGroup(
const QString &title );
285 QgsProviderSublayerModelGroup( QgsProviderSublayerModelGroup &&other ) =
default;
286 QgsProviderSublayerModelGroup &operator=( QgsProviderSublayerModelGroup && ) =
default;
291 QString name()
const {
return mGroupTitle; }
296 QgsProviderSublayerModelNode *addChild( std::unique_ptr< QgsProviderSublayerModelNode > child );
303 int indexOf( QgsProviderSublayerModelNode *child )
const;
308 QgsProviderSublayerModelNode *childAt(
int index );
313 void removeChildAt(
int index );
318 QgsProviderSublayerModelGroup *findGroup(
const QString &name )
const;
323 QgsProviderSublayerModelGroup *findGroupForPath(
const QStringList &path )
const;
325 QgsProviderSublayerModelSublayerNode *findSublayer(
const QgsProviderSublayerDetails &sublayer );
327 int childCount() const final {
return mChildren.size(); }
328 QVariant data(
int role = Qt::DisplayRole,
int column = 0 )
const override;
330 void populateFromSublayers(
const QList<QgsProviderSublayerDetails> &sublayers );
335 std::deque< std::unique_ptr< QgsProviderSublayerModelNode > > mChildren;
341class CORE_EXPORT QgsProviderSublayerModelSublayerNode :
public QgsProviderSublayerModelNode
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; }
351 QgsProviderSublayerDetails mSublayer;
355class CORE_EXPORT QgsProviderSublayerModelNonLayerItemNode :
public QgsProviderSublayerModelNode
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;
363 QgsProviderSublayerModel::NonLayerItem item()
const {
return mItem; }
366 QgsProviderSublayerModel::NonLayerItem mItem;
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;
441 QString mFilterString;
442 bool mIncludeSystemTables =
false;
443 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)