QGIS API Documentation 3.34.0-Prizren (ffbdd678812)
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_sip.h"
21#include "qgis_core.h"
22#include "qgsmimedatautils.h"
23#include "qgis.h"
24#include <QObject>
25#include <QFutureWatcher>
26#include <QIcon>
27
28class QgsDataItem;
29class QMenu;
31class QgsAnimatedIcon;
33
34class QAction;
35class QWidget;
36
38
45class CORE_EXPORT QgsDataItem : public QObject
46{
47#ifdef SIP_RUN
48#include "qgslayeritem.h"
49#include "qgsdirectoryitem.h"
50#include "qgsfavoritesitem.h"
51#include "qgszipitem.h"
53#include "qgsprojectitem.h"
54#endif
55
56#ifdef SIP_RUN
58 if ( qobject_cast<QgsLayerItem *>( sipCpp ) )
59 sipType = sipType_QgsLayerItem;
60 else if ( qobject_cast<QgsErrorItem *>( sipCpp ) )
61 sipType = sipType_QgsErrorItem;
62 else if ( qobject_cast<QgsDirectoryItem *>( sipCpp ) )
63 sipType = sipType_QgsDirectoryItem;
64 else if ( qobject_cast<QgsFavoritesItem *>( sipCpp ) )
65 sipType = sipType_QgsFavoritesItem;
66 else if ( qobject_cast<QgsZipItem *>( sipCpp ) )
67 sipType = sipType_QgsZipItem;
68 else if ( qobject_cast<QgsDataCollectionItem *>( sipCpp ) )
69 sipType = sipType_QgsDataCollectionItem;
70 else if ( qobject_cast<QgsProjectItem *>( sipCpp ) )
71 sipType = sipType_QgsProjectItem;
72 else
73 sipType = 0;
75#endif
76
77 Q_OBJECT
78
79 public:
80
92 QgsDataItem( Qgis::BrowserItemType type, QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path, const QString &providerKey = QString() );
93
94 ~QgsDataItem() override;
95
96#ifdef SIP_RUN
97 SIP_PYOBJECT __repr__();
98 % MethodCode
99 QString str = QStringLiteral( "<QgsDataItem: \"%1\" %2>" ).arg( sipCpp->name(), sipCpp->path() );
100 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
101 % End
102#endif
103
104 bool hasChildren();
105
111 virtual bool layerCollection() const;
112
113 int rowCount();
114
119 virtual QVector<QgsDataItem *> createChildren() SIP_TRANSFERBACK;
120#ifdef SIP_RUN
122 PyObject *sipResObj = sipCallMethod( 0, sipMethod, "" );
123 // H = Convert a Python object to a mapped type instance.
124 // 5 = 1 (disallows the conversion of Py_None to NULL) + 4 (returns a copy of the C/C++ instance)
125 sipIsErr = !sipResObj || sipParseResult( 0, sipMethod, sipResObj, "H5", sipType_QVector_0101QgsDataItem, &sipRes ) < 0;
126 if ( !sipIsErr )
127 {
128 for ( QgsDataItem *item : sipRes )
129 {
130 PyObject *pyItem = sipGetPyObject( item, sipType_QgsDataItem );
131 if ( pyItem != NULL )
132 {
133 // pyItem is given an extra reference which is removed when the C++ instance’s destructor is called.
134 sipTransferTo( pyItem, Py_None );
135 }
136 }
137 }
138 if ( sipResObj != NULL )
139 {
140 Py_DECREF( sipResObj );
141 }
142 SIP_END
143#endif
144
146 Qgis::BrowserItemState state() const;
147
153 virtual void setState( Qgis::BrowserItemState state );
154
161 virtual void addChildItem( QgsDataItem *child SIP_TRANSFER, bool refresh = false );
162
168 virtual void deleteChildItem( QgsDataItem *child );
169
175 virtual QgsDataItem *removeChildItem( QgsDataItem *child ) SIP_TRANSFERBACK;
176
180 virtual bool equal( const QgsDataItem *other );
181
189 Q_DECL_DEPRECATED virtual QWidget *paramWidget() SIP_FACTORY SIP_DEPRECATED { return nullptr; }
190
198 virtual QList<QAction *> actions( QWidget *parent );
199
208 virtual QList<QMenu *> menus( QWidget *parent );
209
218 Q_DECL_DEPRECATED virtual bool acceptDrop() SIP_DEPRECATED { return false; }
219
220#ifdef __clang__
221#pragma clang diagnostic push
222#pragma clang diagnostic ignored "-Woverloaded-virtual"
223#endif
224
233 Q_DECL_DEPRECATED virtual bool handleDrop( const QMimeData * /*data*/, Qt::DropAction /*action*/ ) SIP_DEPRECATED { return false; }
234#ifdef __clang__
235#pragma clang diagnostic pop
236#endif
237
244 virtual bool handleDoubleClick();
245
253 virtual bool hasDragEnabled() const { return false; }
254
262 Q_DECL_DEPRECATED virtual QgsMimeDataUtils::Uri mimeUri() const SIP_DEPRECATED;
263
272 virtual QgsMimeDataUtils::UriList mimeUris() const;
273
280 Q_DECL_DEPRECATED virtual bool setCrs( const QgsCoordinateReferenceSystem &crs ) SIP_DEPRECATED;
281
294 Q_DECL_DEPRECATED virtual bool rename( const QString &name ) SIP_DEPRECATED;
295
296 // ### QGIS 4 - rename to capabilities()
297
303 virtual Qgis::BrowserItemCapabilities capabilities2() const { return mCapabilities; }
304
310 virtual void setCapabilities( Qgis::BrowserItemCapabilities capabilities ) SIP_PYNAME( setCapabilitiesV2 ) { mCapabilities = capabilities; }
311
315 Q_DECL_DEPRECATED void setCapabilities( int capabilities ) SIP_DEPRECATED;
316
317 // static methods
318
319 // Find child index in vector of items using '==' operator
320 static int findItem( QVector<QgsDataItem *> items, QgsDataItem *item );
321
322 // members
323
324 Qgis::BrowserItemType type() const { return mType; }
325
330 QgsDataItem *parent() const { return mParent; }
331
336 void setParent( QgsDataItem *parent );
337 QVector<QgsDataItem *> children() const { return mChildren; }
338 virtual QIcon icon();
339
345 QString name() const { return mName; }
346
352 void setName( const QString &name );
353
354 QString path() const { return mPath; }
355 void setPath( const QString &path ) { mPath = path; }
356
365 QString providerKey() const;
366
375 void setProviderKey( const QString &value );
376
378 static QString pathComponent( const QString &component );
379
390 virtual QVariant sortKey() const;
391
397 void setSortKey( const QVariant &key );
398
399
400 // Because QIcon (QPixmap) must not be used in outside the GUI thread, it is
401 // not possible to set mIcon in constructor. Either use mIconName/setIconName()
402 // or implement icon().
403 void setIcon( const QIcon &icon ) { mIcon = icon; }
404 void setIconName( const QString &iconName ) { mIconName = iconName; }
405
406 void setToolTip( const QString &msg ) { mToolTip = msg; }
407 QString toolTip() const { return mToolTip; }
408
409 // deleteLater() items and clear the vector
410 static void deleteLater( QVector<QgsDataItem *> &items );
411
413 void moveToThread( QThread *targetThread );
414
424 virtual QgsAbstractDatabaseProviderConnection *databaseConnection() const SIP_FACTORY;
425
426 protected:
427 virtual void populate( const QVector<QgsDataItem *> &children );
428
432 virtual void refresh( const QVector<QgsDataItem *> &children );
433
442 bool deferredDelete() { return mDeferredDelete; }
443
445 Qgis::BrowserItemCapabilities mCapabilities = Qgis::BrowserItemCapability::NoCapabilities;
446 QgsDataItem *mParent = nullptr;
447 QVector<QgsDataItem *> mChildren; // easier to have it always
449 QString mName;
451 // Path is slash ('/') separated chain of item identifiers which are usually item names, but may be different if it is
452 // necessary to distinguish paths of two providers to the same source (e.g GRASS location and standard directory have the same
453 // name but different paths). Identifiers in path must not contain '/' characters.
454 // The path is used to identify item in tree.
455 QString mPath;
456 QString mToolTip;
457 QString mIconName;
458 QIcon mIcon;
459 QMap<QString, QIcon> mIconMap;
460
462 QVariant mSortKey;
463
464 public slots:
465
475 virtual void deleteLater();
476
477 // Populate children using children vector created by createChildren()
478 // \param foreground run createChildren in foreground
479 virtual void populate( bool foreground = false );
480
482 virtual void depopulate();
483
484 virtual void refresh();
485
492 virtual void refreshConnections( const QString &providerKey = QString() );
493
494 virtual void childrenCreated();
495
496 signals:
497 void beginInsertItems( QgsDataItem *parent, int first, int last );
499 void beginRemoveItems( QgsDataItem *parent, int first, int last );
502
507
515 void connectionsChanged( const QString &providerKey = QString() );
516
517 protected slots:
518
524 void updateIcon();
525
526 private:
527 static QVector<QgsDataItem *> runCreateChildren( QgsDataItem *item );
528
529 // Set to true if object has to be deleted when possible (nothing running in threads)
530 bool mDeferredDelete = false;
531 QFutureWatcher< QVector <QgsDataItem *> > *mFutureWatcher = nullptr;
532 // number of items currently in loading (populating) state
533 static QgsAnimatedIcon *sPopulatingIcon;
534};
535
540class CORE_EXPORT QgsErrorItem : public QgsDataItem
541{
542 Q_OBJECT
543 public:
544
545 QgsErrorItem( QgsDataItem *parent, const QString &error, const QString &path );
546
547#ifdef SIP_RUN
548 SIP_PYOBJECT __repr__();
549 % MethodCode
550 QString str = QStringLiteral( "<QgsErrorItem: \"%1\" %2>" ).arg( sipCpp->name(), sipCpp->path() );
551 sipRes = PyUnicode_FromString( str.toUtf8().constData() );
552 % End
553#endif
554
555};
556
557#endif // QGSDATAITEM_H
558
559
The Qgis class provides global constants for use throughout the application.
Definition qgis.h:54
BrowserItemState
Browser item states.
Definition qgis.h:625
@ NotPopulated
Children not yet created.
@ NoCapabilities
Item has no capabilities.
BrowserItemType
Symbol layer user flags.
Definition qgis.h:606
The QgsAbstractDatabaseProviderConnection class provides common functionality for DB based connection...
Animated icon is keeping an animation running if there are listeners connected to frameChanged.
This class represents a coordinate reference system (CRS).
Base class for all items in the model.
Definition qgsdataitem.h:46
void stateChanged(QgsDataItem *item, Qgis::BrowserItemState oldState)
Emitted when an item's state is changed.
QString mToolTip
QString mName
Qgis::BrowserItemType mType
QVector< QgsDataItem * > mChildren
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.
void dataChanged(QgsDataItem *item)
void endRemoveItems()
QString mPath
QVector< QgsDataItem * > children() const
void beginRemoveItems(QgsDataItem *parent, int first, int last)
virtual Q_DECL_DEPRECATED bool acceptDrop()
Returns whether the item accepts drag and dropped layers - e.g.
Qgis::BrowserItemType type() const
QString mIconName
QMap< QString, QIcon > mIconMap
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 connectionsChanged(const QString &providerKey=QString())
Emitted when the connections of the provider with the specified providerKey have changed.
QString name() const
Returns the name of the item (the displayed text for the item).
QString path() const
void beginInsertItems(QgsDataItem *parent, int first, int last)
virtual void setCapabilities(Qgis::BrowserItemCapabilities capabilities)
Sets the capabilities for the data 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)
void endInsertItems()
QString mProviderKey
Data item that can be used to report problems (e.g.
#define str(x)
Definition qgis.cpp:38
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition qgis_sip.h:186
#define SIP_DEPRECATED
Definition qgis_sip.h:106
#define SIP_TRANSFERTHIS
Definition qgis_sip.h:53
#define SIP_SKIP
Definition qgis_sip.h:126
#define SIP_PYNAME(name)
Definition qgis_sip.h:81
#define SIP_TRANSFER
Definition qgis_sip.h:36
#define SIP_TRANSFERBACK
Definition qgis_sip.h:48
#define SIP_FACTORY
Definition qgis_sip.h:76
#define SIP_VIRTUAL_CATCHER_CODE(code)
Definition qgis_sip.h:213
#define SIP_END
Definition qgis_sip.h:203
QgsDataItem * dataItem_t(QString, QgsDataItem *)
Definition qgsdataitem.h:37
const QgsCoordinateReferenceSystem & crs