|
@@ -51,13 +51,32 @@ class CORE_EXPORT QgsBrowserWatcher : public QFutureWatcher<QVector <QgsDataItem |
|
|
/** |
|
|
* \ingroup core |
|
|
* \class QgsBrowserModel |
|
|
* |
|
|
* A model for showing available data sources and other items in a structured |
|
|
* tree. |
|
|
* |
|
|
* QgsBrowserModel is the foundation for the QGIS browser panel, and includes |
|
|
* items for the different data providers and folders accessible to users. |
|
|
* |
|
|
* QgsBrowserModel models are not initially populated and use a deferred initialization |
|
|
* approach. After constructing a QgsBrowserModel, a call must be made |
|
|
* to initialize() in order to populate the model. |
|
|
*/ |
|
|
class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel |
|
|
{ |
|
|
Q_OBJECT |
|
|
|
|
|
public: |
|
|
|
|
|
/** |
|
|
* Constructor for QgsBrowserModel, with the specified \a parent object. |
|
|
* |
|
|
* \note QgsBrowserModel models are not initially populated and use a deferred initialization |
|
|
* approach. After constructing a QgsBrowserModel, a call must be made |
|
|
* to initialize() in order to populate the model. |
|
|
*/ |
|
|
explicit QgsBrowserModel( QObject *parent = nullptr ); |
|
|
|
|
|
~QgsBrowserModel() override; |
|
|
|
|
|
enum ItemDataRole |
|
@@ -68,54 +87,23 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel |
|
|
}; |
|
|
// implemented methods from QAbstractItemModel for read-only access |
|
|
|
|
|
/** |
|
|
* Used by other components to obtain information about each item provided by the model. |
|
|
In many models, the combination of flags should include Qt::ItemIsEnabled and Qt::ItemIsSelectable. */ |
|
|
Qt::ItemFlags flags( const QModelIndex &index ) const override; |
|
|
|
|
|
/** |
|
|
* Used to supply item data to views and delegates. Generally, models only need to supply data |
|
|
for Qt::DisplayRole and any application-specific user roles, but it is also good practice |
|
|
to provide data for Qt::ToolTipRole, Qt::AccessibleTextRole, and Qt::AccessibleDescriptionRole. |
|
|
See the Qt::ItemDataRole enum documentation for information about the types associated with each role. */ |
|
|
QVariant data( const QModelIndex &index, int role = Qt::DisplayRole ) const override; |
|
|
|
|
|
/** |
|
|
* Provides views with information to show in their headers. The information is only retrieved |
|
|
by views that can display header information. */ |
|
|
QVariant headerData( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const override; |
|
|
|
|
|
//! Provides the number of rows of data exposed by the model. |
|
|
int rowCount( const QModelIndex &parent = QModelIndex() ) const override; |
|
|
|
|
|
/** |
|
|
* Provides the number of columns of data exposed by the model. List models do not provide this function |
|
|
because it is already implemented in QAbstractListModel. */ |
|
|
int columnCount( const QModelIndex &parent = QModelIndex() ) const override; |
|
|
|
|
|
//! Returns the index of the item in the model specified by the given row, column and parent index. |
|
|
QModelIndex index( int row, int column, const QModelIndex &parent = QModelIndex() ) const override; |
|
|
|
|
|
QModelIndex findItem( QgsDataItem *item, QgsDataItem *parent = nullptr ) const; |
|
|
|
|
|
/** |
|
|
* Returns the parent of the model item with the given index. |
|
|
* If the item has no parent, an invalid QModelIndex is returned. |
|
|
*/ |
|
|
QModelIndex parent( const QModelIndex &index ) const override; |
|
|
|
|
|
//! Returns a list of mime that can describe model indexes |
|
|
QStringList mimeTypes() const override; |
|
|
|
|
|
//! Returns an object that contains serialized items of data corresponding to the list of indexes specified |
|
|
QMimeData *mimeData( const QModelIndexList &indexes ) const override; |
|
|
|
|
|
//! Handles the data supplied by a drag and drop operation that ended with the given action |
|
|
bool dropMimeData( const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent ) override; |
|
|
bool hasChildren( const QModelIndex &parent = QModelIndex() ) const override; |
|
|
bool canFetchMore( const QModelIndex &parent ) const override; |
|
|
void fetchMore( const QModelIndex &parent ) override; |
|
|
|
|
|
QgsDataItem *dataItem( const QModelIndex &idx ) const; |
|
|
QModelIndex findItem( QgsDataItem *item, QgsDataItem *parent = nullptr ) const; |
|
|
|
|
|
bool hasChildren( const QModelIndex &parent = QModelIndex() ) const override; |
|
|
QgsDataItem *dataItem( const QModelIndex &idx ) const; |
|
|
|
|
|
//! Refresh item specified by path |
|
|
void refresh( const QString &path ); |
|
@@ -137,11 +125,12 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel |
|
|
|
|
|
void connectItem( QgsDataItem *item ); |
|
|
|
|
|
bool canFetchMore( const QModelIndex &parent ) const override; |
|
|
void fetchMore( const QModelIndex &parent ) override; |
|
|
|
|
|
//! Returns true if the model has been initialized |
|
|
bool initialized( ) const { return mInitialized; } |
|
|
/** |
|
|
* Returns true if the model has been initialized. |
|
|
* |
|
|
* \see initialize() |
|
|
*/ |
|
|
bool initialized() const { return mInitialized; } |
|
|
|
|
|
signals: |
|
|
//! Emitted when item children fetch was finished |
|
@@ -186,7 +175,10 @@ class CORE_EXPORT QgsBrowserModel : public QAbstractItemModel |
|
|
//! Hide the given path in the browser model |
|
|
void hidePath( QgsDataItem *item ); |
|
|
|
|
|
//! Delayed initialization, needed because the provider registry must be already populated |
|
|
/** |
|
|
* Delayed initialization, needed because the provider registry must be already populated. |
|
|
* \see initialized() |
|
|
*/ |
|
|
void initialize(); |
|
|
|
|
|
protected: |
|
|