QGIS API Documentation 3.99.0-Master (2fe06baccd8)
Loading...
Searching...
No Matches
qgsdataitem.h
Go to the documentation of this file.
1/***************************************************************************
2 qgsdataitem.h - Items representing data
3 -------------------
4 begin : 2011-04-01
5 copyright : (C) 2011 Radim Blazek
6 email : radim dot blazek 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#ifndef QGSDATAITEM_H
18#define QGSDATAITEM_H
19
20#include "qgis.h"
21#include "qgis_core.h"
22#include "qgis_sip.h"
23#include "qgsmimedatautils.h"
24
25#include <QFutureWatcher>
26#include <QIcon>
27#include <QObject>
28
29class QgsDataItem;
30class QMenu;
32class QgsAnimatedIcon;
34
35class QAction;
36class QWidget;
37
39
46class CORE_EXPORT QgsDataItem : public QObject
47{
48 //SIP_TYPEHEADER_INCLUDE( "qgslayeritem.h" );
49 //SIP_TYPEHEADER_INCLUDE( "qgsdirectoryitem.h" );
50 //SIP_TYPEHEADER_INCLUDE( "qgsfavoritesitem.h" );
51 //SIP_TYPEHEADER_INCLUDE( "qgszipitem.h" );
52 //SIP_TYPEHEADER_INCLUDE( "qgsdatacollectionitem.h" );
53 //SIP_TYPEHEADER_INCLUDE( "qgsprojectitem.h" );
54
55#ifdef SIP_RUN
57 if ( qobject_cast<QgsLayerItem *>( sipCpp ) )
58 sipType = sipType_QgsLayerItem;
59 else if ( qobject_cast<QgsErrorItem *>( sipCpp ) )
60 sipType = sipType_QgsErrorItem;
61 else if ( qobject_cast<QgsDirectoryItem *>( sipCpp ) )
62 sipType = sipType_QgsDirectoryItem;
63 else if ( qobject_cast<QgsFavoritesItem *>( sipCpp ) )
64 sipType = sipType_QgsFavoritesItem;
65 else if ( qobject_cast<QgsZipItem *>( sipCpp ) )
66 sipType = sipType_QgsZipItem;
67 else if ( qobject_cast<QgsDataCollectionItem *>( sipCpp ) )
68 sipType = sipType_QgsDataCollectionItem;
69 else if ( qobject_cast<QgsProjectItem *>( sipCpp ) )
70 sipType = sipType_QgsProjectItem;
71 else
72 sipType = 0;
74#endif
75
76 Q_OBJECT
77
78 public:
79
91 QgsDataItem( Qgis::BrowserItemType type, QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path, const QString &providerKey = QString() );
92
93 ~QgsDataItem() override;
94
95#ifdef SIP_RUN
96 SIP_PYOBJECT __repr__();
97 % MethodCode
98 QString str = QStringLiteral( "<QgsDataItem: \"%1\" %2>" ).arg( sipCpp->name(), sipCpp->path() );
99 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
100 % End
101#endif
102
106 bool hasChildren() const;
107
113 virtual bool layerCollection() const;
114
118 int rowCount() const;
119
124 virtual QVector<QgsDataItem *> createChildren() SIP_TRANSFERBACK;
125#ifdef SIP_RUN
127 PyObject *sipResObj = sipCallMethod( 0, sipMethod, "" );
128 // H = Convert a Python object to a mapped type instance.
129 // 5 = 1 (disallows the conversion of Py_None to NULL) + 4 (returns a copy of the C/C++ instance)
130 sipIsErr = !sipResObj || sipParseResult( 0, sipMethod, sipResObj, "H5", sipType_QVector_0101QgsDataItem, &sipRes ) < 0;
131 if ( !sipIsErr )
132 {
133 for ( QgsDataItem *item : sipRes )
134 {
135 PyObject *pyItem = sipGetPyObject( item, sipType_QgsDataItem );
136 if ( pyItem != NULL )
137 {
138 // pyItem is given an extra reference which is removed when the C++ instance’s destructor is called.
139 sipTransferTo( pyItem, Py_None );
140 }
141 }
142 }
143 if ( sipResObj != NULL )
144 {
145 Py_DECREF( sipResObj );
146 }
147 SIP_END
148#endif
149
151
156 virtual void setState( Qgis::BrowserItemState state );
157
164 virtual void addChildItem( QgsDataItem *child SIP_TRANSFER, bool refresh = false );
165
171 virtual void deleteChildItem( QgsDataItem *child );
172
179
183 virtual bool equal( const QgsDataItem *other );
184
192 Q_DECL_DEPRECATED virtual QWidget *paramWidget() SIP_FACTORY SIP_DEPRECATED { return nullptr; }
193
201 virtual QList<QAction *> actions( QWidget *parent );
202
210 virtual QList<QMenu *> menus( QWidget *parent );
211
220 Q_DECL_DEPRECATED virtual bool acceptDrop() SIP_DEPRECATED { return false; }
221
222#ifdef __clang__
223#pragma clang diagnostic push
224#pragma clang diagnostic ignored "-Woverloaded-virtual"
225#endif
226
235 Q_DECL_DEPRECATED virtual bool handleDrop( const QMimeData * /*data*/, Qt::DropAction /*action*/ ) SIP_DEPRECATED { return false; }
236#ifdef __clang__
237#pragma clang diagnostic pop
238#endif
239
245 virtual bool handleDoubleClick();
246
253 virtual bool hasDragEnabled() const { return false; }
254
261 Q_DECL_DEPRECATED virtual QgsMimeDataUtils::Uri mimeUri() const SIP_DEPRECATED;
262
271 virtual QgsMimeDataUtils::UriList mimeUris() const;
272
279 Q_DECL_DEPRECATED virtual bool setCrs( const QgsCoordinateReferenceSystem &crs ) SIP_DEPRECATED;
280
293 Q_DECL_DEPRECATED virtual bool rename( const QString &name ) SIP_DEPRECATED;
294
295 // ### QGIS 4 - rename to capabilities()
296
302 virtual Qgis::BrowserItemCapabilities capabilities2() const { return mCapabilities; }
303
309 virtual void setCapabilities( Qgis::BrowserItemCapabilities capabilities ) SIP_PYNAME( setCapabilitiesV2 ) { mCapabilities = capabilities; }
310
314 Q_DECL_DEPRECATED void setCapabilities( int capabilities ) SIP_DEPRECATED;
315
316 // static methods
317
318 // Find child index in vector of items using '==' operator
319 static int findItem( QVector<QgsDataItem *> items, QgsDataItem *item );
320
321#ifndef SIP_RUN
322
328 template<class T>
329 static QList< T * > filteredItems( const QList< QgsDataItem * > &items )
330 {
331 QList< T * > result;
332 result.reserve( items.size() );
333 for ( QgsDataItem *item : items )
334 {
335 if ( T *matchedItem = qobject_cast< T * >( item ) )
336 result << matchedItem;
337 }
338 return result;
339 }
340#endif
341
342 // members
343
344 Qgis::BrowserItemType type() const { return mType; }
345
350 QgsDataItem *parent() const { return mParent; }
351
356 void setParent( QgsDataItem *parent );
357 QVector<QgsDataItem *> children() const { return mChildren; }
358 virtual QIcon icon();
359
365 QString name() const { return mName; }
366
372 void setName( const QString &name );
373
374 QString path() const { return mPath; }
375 void setPath( const QString &path ) { mPath = path; }
376
385 QString providerKey() const;
386
395 void setProviderKey( const QString &value );
396
398 static QString pathComponent( const QString &component );
399
409 virtual QVariant sortKey() const;
410
415 void setSortKey( const QVariant &key );
416
417
418 // Because QIcon (QPixmap) must not be used in outside the GUI thread, it is
419 // not possible to set mIcon in constructor. Either use mIconName/setIconName()
420 // or implement icon().
421 void setIcon( const QIcon &icon ) { mIcon = icon; }
422 void setIconName( const QString &iconName ) { mIconName = iconName; }
423
424 void setToolTip( const QString &msg ) { mToolTip = msg; }
425 QString toolTip() const { return mToolTip; }
426
427 // deleteLater() items and clear the vector
428 static void deleteLater( QVector<QgsDataItem *> &items );
429
431 void moveToThread( QThread *targetThread );
432
442 virtual QgsAbstractDatabaseProviderConnection *databaseConnection() const SIP_FACTORY;
443
444 protected:
445 virtual void populate( const QVector<QgsDataItem *> &children );
446
450 virtual void refresh( const QVector<QgsDataItem *> &children );
451
462 bool deferredDelete() const { return mDeferredDelete; }
463
467 QVector<QgsDataItem *> mChildren; // easier to have it always
469 QString mName;
471 // Path is slash ('/') separated chain of item identifiers which are usually item names, but may be different if it is
472 // necessary to distinguish paths of two providers to the same source (e.g GRASS location and standard directory have the same
473 // name but different paths). Identifiers in path must not contain '/' characters.
474 // The path is used to identify item in tree.
475 QString mPath;
476 QString mToolTip;
477 QString mIconName;
478 QIcon mIcon;
479 QMap<QString, QIcon> mIconMap;
480
482 QVariant mSortKey;
483
484 public slots:
485
495 virtual void deleteLater();
496
497 // Populate children using children vector created by createChildren()
498 // \param foreground run createChildren in foreground
499 virtual void populate( bool foreground = false );
500
502 virtual void depopulate();
503
504 virtual void refresh();
505
512 virtual void refreshConnections( const QString &providerKey = QString() );
513
514 virtual void childrenCreated();
515
516 signals:
517
529 void beginInsertItems( QgsDataItem *parent, int first, int last );
530
539
551 void beginRemoveItems( QgsDataItem *parent, int first, int last );
552
561
566
571
579 void connectionsChanged( const QString &providerKey = QString() );
580
581 protected slots:
582
587 void updateIcon();
588
589 private:
590 static QVector<QgsDataItem *> runCreateChildren( QgsDataItem *item );
591
592 // Set to true if object has to be deleted when possible (nothing running in threads)
593 bool mDeferredDelete = false;
594 std::unique_ptr<QFutureWatcher<QVector<QgsDataItem *> >> mFutureWatcher;
595 // number of items currently in loading (populating) state
596 static QgsAnimatedIcon *sPopulatingIcon;
597};
598
603class CORE_EXPORT QgsErrorItem : public QgsDataItem
604{
605 Q_OBJECT
606 public:
607
608 QgsErrorItem( QgsDataItem *parent, const QString &error, const QString &path );
609
610#ifdef SIP_RUN
611 SIP_PYOBJECT __repr__();
612 % MethodCode
613 QString str = QStringLiteral( "<QgsErrorItem: \"%1\" %2>" ).arg( sipCpp->name(), sipCpp->path() );
614 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
615 % End
616#endif
617
618};
619
620#endif // QGSDATAITEM_H
621
622
Provides global constants and enumerations for use throughout the application.
Definition qgis.h:56
BrowserItemState
Browser item states.
Definition qgis.h:938
@ NotPopulated
Children not yet created.
Definition qgis.h:939
@ NoCapabilities
Item has no capabilities.
Definition qgis.h:952
BrowserItemType
Browser item types.
Definition qgis.h:919
QFlags< BrowserItemCapability > BrowserItemCapabilities
Browser item capabilities.
Definition qgis.h:965
Provides common functionality for database based connections.
Animated icon is keeping an animation running if there are listeners connected to frameChanged.
Represents a coordinate reference system (CRS).
Base class for all items in the model.
Definition qgsdataitem.h:47
void stateChanged(QgsDataItem *item, Qgis::BrowserItemState oldState)
Emitted when an item's state is changed.
QString mToolTip
bool hasChildren() const
Returns whether this item has children.
QString mName
Qgis::BrowserItemType mType
int rowCount() const
Returns the number of rows of this item.
virtual void deleteChildItem(QgsDataItem *child)
Removes and deletes a child item, emitting relevant signals to the model.
QVector< QgsDataItem * > mChildren
Qgis::BrowserItemState mState
void setToolTip(const QString &msg)
virtual Q_DECL_DEPRECATED bool handleDrop(const QMimeData *, Qt::DropAction)
Attempts to process the mime data dropped on this item.
virtual void refresh(const QVector< QgsDataItem * > &children)
Refresh the items from a specified list of child items.
void dataChanged(QgsDataItem *item)
Emitted when data changes for an item.
static void deleteLater(QVector< QgsDataItem * > &items)
void endRemoveItems()
Emitted after child items have been removed from this data item.
virtual bool layerCollection() const
Returns true if the data item is a collection of layers The default implementation returns false,...
QString mPath
QVector< QgsDataItem * > children() const
void beginRemoveItems(QgsDataItem *parent, int first, int last)
Emitted before child items are removed from this data item.
virtual Q_DECL_DEPRECATED bool acceptDrop()
Returns whether the item accepts drag and dropped layers - e.g.
Qgis::BrowserItemCapabilities mCapabilities
Qgis::BrowserItemType type() const
QgsDataItem(Qgis::BrowserItemType type, QgsDataItem *parent, const QString &name, const QString &path, const QString &providerKey=QString())
Constructor for QgsDataItem, with the specified parent item.
QString mIconName
virtual QVector< QgsDataItem * > createChildren()
Create children.
QMap< QString, QIcon > mIconMap
Qgis::BrowserItemState state() const
virtual void childrenCreated()
virtual QgsDataItem * removeChildItem(QgsDataItem *child)
Removes a child item and returns it without deleting it.
virtual bool hasDragEnabled() const
Returns true if the item may be dragged.
QVariant mSortKey
Custom sort key. If invalid, name() will be used for sorting instead.
void updateIcon()
Will request a repaint of this icon.
void connectionsChanged(const QString &providerKey=QString())
Emitted when the connections of the provider with the specified providerKey have changed.
QgsDataItem * mParent
QString name() const
Returns the name of the item (the displayed text for the item).
QString path() const
virtual QIcon icon()
virtual void setState(Qgis::BrowserItemState state)
Set item state.
void beginInsertItems(QgsDataItem *parent, int first, int last)
Emitted before child items are added to this data item.
virtual void refreshConnections(const QString &providerKey=QString())
Causes a data item provider to refresh all registered connections.
virtual void setCapabilities(Qgis::BrowserItemCapabilities capabilities)
Sets the capabilities for the data item.
virtual void addChildItem(QgsDataItem *child, bool refresh=false)
Inserts a new child item.
QString toolTip() const
QgsDataItem * parent() const
Gets item parent.
virtual Q_DECL_DEPRECATED QWidget * paramWidget()
Returns source widget from data item for QgsBrowserPropertiesWidget.
void setIcon(const QIcon &icon)
void setIconName(const QString &iconName)
void setPath(const QString &path)
QString providerKey() const
Returns the provider key that created this item (e.g.
void endInsertItems()
Emitted after child items have been added to this data item.
virtual Qgis::BrowserItemCapabilities capabilities2() const
Returns the capabilities for the data item.
QString mProviderKey
virtual void populate(const QVector< QgsDataItem * > &children)
virtual bool equal(const QgsDataItem *other)
Returns true if this item is equal to another item (by testing item type and path).
virtual void depopulate()
Remove children recursively and set as not populated. This is used when refreshing collapsed items.
bool deferredDelete() const
Returns true if the item is scheduled to be deleted.
static QList< T * > filteredItems(const QList< QgsDataItem * > &items)
Returns a filtered list of data items which match the template type.
QgsErrorItem(QgsDataItem *parent, const QString &error, const QString &path)
Contains utility functions for working with MIME data.
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:199
#define SIP_DEPRECATED
Definition qgis_sip.h:114
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:134
#define SIP_PYNAME(name)
Definition qgis_sip.h:89
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_TRANSFERBACK
Definition qgis_sip.h:48
#define SIP_FACTORY
Definition qgis_sip.h:84
#define SIP_VIRTUAL_CATCHER_CODE(code)
Definition qgis_sip.h:226
#define SIP_END
Definition qgis_sip.h:216
QgsDataItem * dataItem_t(QString, QgsDataItem *)
Definition qgsdataitem.h:38