QGIS API Documentation  3.12.1-BucureČ™ti (121cc00ff0)
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 <QFileSystemWatcher>
23 #include <QFutureWatcher>
24 #include <QIcon>
25 #include <QObject>
26 #include <QPixmap>
27 #include <QString>
28 #include <QTreeWidget>
29 #include <QVector>
30 #include <QDateTime>
31 
32 #include "qgsmaplayer.h"
34 #include "qgsmimedatautils.h"
35 #include "qgswkbtypes.h"
36 
37 class QgsDataProvider;
38 class QgsDataItem;
39 class QgsAnimatedIcon;
40 class QgsBookmarkManager;
41 
42 typedef QgsDataItem *dataItem_t( QString, QgsDataItem * ) SIP_SKIP;
43 
49 class CORE_EXPORT QgsDataItem : public QObject
50 {
51 
52 #ifdef SIP_RUN
54  if ( qobject_cast<QgsLayerItem *>( sipCpp ) )
55  sipType = sipType_QgsLayerItem;
56  else if ( qobject_cast<QgsErrorItem *>( sipCpp ) )
57  sipType = sipType_QgsErrorItem;
58  else if ( qobject_cast<QgsDirectoryItem *>( sipCpp ) )
59  sipType = sipType_QgsDirectoryItem;
60  else if ( qobject_cast<QgsFavoritesItem *>( sipCpp ) )
61  sipType = sipType_QgsFavoritesItem;
62  else if ( qobject_cast<QgsZipItem *>( sipCpp ) )
63  sipType = sipType_QgsZipItem;
64  else if ( qobject_cast<QgsDataCollectionItem *>( sipCpp ) )
65  sipType = sipType_QgsDataCollectionItem;
66  else if ( qobject_cast<QgsProjectItem *>( sipCpp ) )
67  sipType = sipType_QgsProjectItem;
68  else
69  sipType = 0;
70  SIP_END
71 #endif
72 
73  Q_OBJECT
74 
75  public:
76  enum Type
77  {
85  };
86 
87  Q_ENUM( Type )
88 
89 
100  QgsDataItem( QgsDataItem::Type type, QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path, const QString &providerKey = QString() );
101 
102  ~QgsDataItem() override;
103 
104  bool hasChildren();
105 
106  int rowCount();
107 
111  virtual QVector<QgsDataItem *> createChildren() SIP_FACTORY;
112 
113  enum State
114  {
117  Populated
118  };
119  Q_ENUM( State )
120 
121 
122  State state() const;
123 
129  virtual void setState( State state );
130 
137  virtual void addChildItem( QgsDataItem *child SIP_TRANSFER, bool refresh = false );
138 
144  virtual void deleteChildItem( QgsDataItem *child );
145 
151  virtual QgsDataItem *removeChildItem( QgsDataItem *child ) SIP_TRANSFERBACK;
152 
156  virtual bool equal( const QgsDataItem *other );
157 
165  Q_DECL_DEPRECATED virtual QWidget *paramWidget() SIP_FACTORY SIP_DEPRECATED { return nullptr; }
166 
174  virtual QList<QAction *> actions( QWidget *parent );
175 
184  virtual QList<QMenu *> menus( QWidget *parent );
185 
194  Q_DECL_DEPRECATED virtual bool acceptDrop() SIP_DEPRECATED { return false; }
195 
204  Q_DECL_DEPRECATED virtual bool handleDrop( const QMimeData * /*data*/, Qt::DropAction /*action*/ ) SIP_DEPRECATED { return false; }
205 
212  virtual bool handleDoubleClick();
213 
221  virtual bool hasDragEnabled() const { return false; }
222 
230 
232  {
233  NoCapabilities = 0,
234  SetCrs = 1 << 0,
235  Fertile = 1 << 1,
236  Fast = 1 << 2,
237  Collapse = 1 << 3,
238  Rename = 1 << 4,
239  Delete = 1 << 5,
240  };
241  Q_DECLARE_FLAGS( Capabilities, Capability )
242 
243 
249  Q_DECL_DEPRECATED virtual bool setCrs( const QgsCoordinateReferenceSystem &crs ) SIP_DEPRECATED
250  {
251  Q_UNUSED( crs )
252  return false;
253  }
254 
267  Q_DECL_DEPRECATED virtual bool rename( const QString &name ) SIP_DEPRECATED;
268 
269  // ### QGIS 4 - rename to capabilities()
270 
276  virtual Capabilities capabilities2() const { return mCapabilities; }
277 
283  virtual void setCapabilities( Capabilities capabilities ) { mCapabilities = capabilities; }
284 
285  // static methods
286 
287  // Find child index in vector of items using '==' operator
288  static int findItem( QVector<QgsDataItem *> items, QgsDataItem *item );
289 
290  // members
291 
292  Type type() const { return mType; }
293 
297  QgsDataItem *parent() const { return mParent; }
298 
302  void setParent( QgsDataItem *parent );
303  QVector<QgsDataItem *> children() const { return mChildren; }
304  virtual QIcon icon();
305 
311  QString name() const { return mName; }
312 
318  void setName( const QString &name );
319 
320  QString path() const { return mPath; }
321  void setPath( const QString &path ) { mPath = path; }
322 
331  QString providerKey() const;
332 
341  void setProviderKey( const QString &value );
342 
344  static QString pathComponent( const QString &component );
345 
356  virtual QVariant sortKey() const;
357 
363  void setSortKey( const QVariant &key );
364 
365 
366  // Because QIcon (QPixmap) must not be used in outside the GUI thread, it is
367  // not possible to set mIcon in constructor. Either use mIconName/setIconName()
368  // or implement icon().
369  void setIcon( const QIcon &icon ) { mIcon = icon; }
370  void setIconName( const QString &iconName ) { mIconName = iconName; }
371 
372  void setToolTip( const QString &msg ) { mToolTip = msg; }
373  QString toolTip() const { return mToolTip; }
374 
375  // deleteLater() items and clear the vector
376  static void deleteLater( QVector<QgsDataItem *> &items );
377 
379  void moveToThread( QThread *targetThread );
380 
381  protected:
382  virtual void populate( const QVector<QgsDataItem *> &children );
383 
387  virtual void refresh( const QVector<QgsDataItem *> &children );
388 
396  bool deferredDelete() { return mDeferredDelete; }
397 
399  Capabilities mCapabilities;
400  QgsDataItem *mParent = nullptr;
401  QVector<QgsDataItem *> mChildren; // easier to have it always
403  QString mName;
404  QString mProviderKey;
405  // Path is slash ('/') separated chain of item identifiers which are usually item names, but may be different if it is
406  // necessary to distinguish paths of two providers to the same source (e.g GRASS location and standard directory have the same
407  // name but different paths). Identifiers in path must not contain '/' characters.
408  // The path is used to identify item in tree.
409  QString mPath;
410  QString mToolTip;
411  QString mIconName;
412  QIcon mIcon;
413  QMap<QString, QIcon> mIconMap;
414 
416  QVariant mSortKey;
417 
418  public slots:
419 
428  virtual void deleteLater();
429 
430  // Populate children using children vector created by createChildren()
431  // \param foreground run createChildren in foreground
432  virtual void populate( bool foreground = false );
433 
435  virtual void depopulate();
436 
437  virtual void refresh();
438 
440  virtual void refreshConnections();
441 
442  virtual void childrenCreated();
443 
444  signals:
445  void beginInsertItems( QgsDataItem *parent, int first, int last );
446  void endInsertItems();
447  void beginRemoveItems( QgsDataItem *parent, int first, int last );
448  void endRemoveItems();
449  void dataChanged( QgsDataItem *item );
450  void stateChanged( QgsDataItem *item, QgsDataItem::State oldState );
451 
458  void connectionsChanged();
459 
460  protected slots:
461 
467  void updateIcon();
468 
469  private:
470  static QVector<QgsDataItem *> runCreateChildren( QgsDataItem *item );
471 
472  // Set to true if object has to be deleted when possible (nothing running in threads)
473  bool mDeferredDelete;
474  QFutureWatcher< QVector <QgsDataItem *> > *mFutureWatcher;
475  // number of items currently in loading (populating) state
476  static QgsAnimatedIcon *sPopulatingIcon;
477 };
478 
479 Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDataItem::Capabilities )
480 
481 
485 class CORE_EXPORT QgsLayerItem : public QgsDataItem
486 {
487  Q_OBJECT
488 
489  public:
491  {
502  Mesh
503  };
504 
505  Q_ENUM( LayerType )
506 
507  QgsLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri, LayerType layerType, const QString &providerKey );
508 
509  // --- reimplemented from QgsDataItem ---
510 
511  bool equal( const QgsDataItem *other ) override;
512 
513  bool hasDragEnabled() const override { return true; }
514 
515  QgsMimeDataUtils::Uri mimeUri() const override;
516 
517  // --- New virtual methods for layer item derived classes ---
518 
520  QgsMapLayerType mapLayerType() const;
521 
526  static LayerType typeFromMapLayer( QgsMapLayer *layer );
527 
529  QString uri() const { return mUri; }
530 
532  QString providerKey() const { return mProviderKey; }
533 
538  QStringList supportedCrs() const { return mSupportedCRS; }
539 
544  QStringList supportedFormats() const { return mSupportFormats; }
545 
550  virtual QString comments() const { return QString(); }
551 
556  static QString layerTypeAsString( LayerType layerType );
557 
562  static QString iconName( LayerType layerType );
563 
570  Q_DECL_DEPRECATED virtual bool deleteLayer() SIP_DEPRECATED;
571 
572  protected:
574  QString mUri;
578  QStringList mSupportedCRS;
580  QStringList mSupportFormats;
581 
582  public:
583  static QIcon iconPoint();
584  static QIcon iconLine();
585  static QIcon iconPolygon();
586  static QIcon iconTable();
587  static QIcon iconRaster();
588  static QIcon iconDefault();
590  static QIcon iconMesh();
591 
593  virtual QString layerName() const { return name(); }
594 };
595 
596 
601 class CORE_EXPORT QgsDataCollectionItem : public QgsDataItem
602 {
603  Q_OBJECT
604  public:
605 
617  QgsDataCollectionItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path = QString(), const QString &providerKey = QString() );
618 
619  ~QgsDataCollectionItem() override;
620 
621  void addChild( QgsDataItem *item SIP_TRANSFER ) { mChildren.append( item ); }
622 
627  static QIcon iconDir();
628 
633  static QIcon iconDataCollection();
634 
635  protected:
636 
641  static QIcon openDirIcon();
642 
647  static QIcon homeDirIcon();
648 };
649 
654 class CORE_EXPORT QgsDirectoryItem : public QgsDataCollectionItem
655 {
656  Q_OBJECT
657  public:
658 
669  QgsDirectoryItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path );
670 
671 
672  // TODO QGIS 4.0 -- rename "name" to "title" or "text" or something more descriptive, and "path" to something
673  // else to clarify the role of dirPath vs path
674 
691  QgsDirectoryItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &dirPath, const QString &path, const QString &providerKey = QString() );
692 
693  void setState( State state ) override;
694 
695  QVector<QgsDataItem *> createChildren() override;
696 
700  QString dirPath() const { return mDirPath; }
701 
702  bool equal( const QgsDataItem *other ) override;
703  QIcon icon() override;
704  Q_DECL_DEPRECATED QWidget *paramWidget() override SIP_FACTORY SIP_DEPRECATED;
705  bool hasDragEnabled() const override { return true; }
706  QgsMimeDataUtils::Uri mimeUri() const override;
707 
709  static bool hiddenPath( const QString &path );
710 
711  public slots:
712  void childrenCreated() override;
713  void directoryChanged();
714 
715  protected:
716  void init();
717  QString mDirPath;
718 
719  private:
720  QFileSystemWatcher *mFileSystemWatcher = nullptr;
721  bool mRefreshLater;
722  QDateTime mLastScan;
723 };
724 
729 class CORE_EXPORT QgsProjectItem : public QgsDataItem
730 {
731  Q_OBJECT
732  public:
733 
741  QgsProjectItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &providerKey = QString() );
742 
743  bool hasDragEnabled() const override { return true; }
744 
745  QgsMimeDataUtils::Uri mimeUri() const override;
746 
747 };
748 
753 class CORE_EXPORT QgsErrorItem : public QgsDataItem
754 {
755  Q_OBJECT
756  public:
757 
758  QgsErrorItem( QgsDataItem *parent, const QString &error, const QString &path );
759 
760 };
761 
762 // ---------
763 
770 class CORE_EXPORT QgsDirectoryParamWidget : public QTreeWidget
771 {
772  Q_OBJECT
773 
774  public:
775  QgsDirectoryParamWidget( const QString &path, QWidget *parent SIP_TRANSFERTHIS = nullptr );
776 
777  protected:
778  void mousePressEvent( QMouseEvent *event ) override;
779 
780  public slots:
781  void showHideColumn();
782 };
783 
789 class CORE_EXPORT QgsFavoritesItem : public QgsDataCollectionItem
790 {
791  Q_OBJECT
792  public:
793 
798  QgsFavoritesItem( QgsDataItem *parent, const QString &name, const QString &path = QString() );
799 
800  QVector<QgsDataItem *> createChildren() override;
801 
810  void addDirectory( const QString &directory, const QString &name = QString() );
811 
816  void removeDirectory( QgsDirectoryItem *item );
817 
821  void renameFavorite( const QString &path, const QString &name );
822 
824  static QIcon iconFavorites();
825 
826  QVariant sortKey() const override;
827 
828  private:
829  QVector<QgsDataItem *> createChildren( const QString &favDir, const QString &name );
830 };
831 
836 class CORE_EXPORT QgsZipItem : public QgsDataCollectionItem
837 {
838  Q_OBJECT
839 
840  protected:
841  QString mFilePath;
842  QString mVsiPrefix;
843  QStringList mZipFileList;
844 
845  public:
847  QgsZipItem( QgsDataItem *parent, const QString &name, const QString &path );
848 
850  QgsZipItem( QgsDataItem *parent, const QString &name, const QString &filePath, const QString &path, const QString &providerKey = QString() );
851 
852  QVector<QgsDataItem *> createChildren() override;
853  QStringList getZipFileList();
854 
856  static QVector<dataItem_t *> sDataItemPtr SIP_SKIP;
857  static QStringList sProviderNames;
858 
859  static QString vsiPrefix( const QString &uri ) { return qgsVsiPrefix( uri ); }
860 
864  static QgsDataItem *itemFromPath( QgsDataItem *parent, const QString &path, const QString &name ) SIP_FACTORY;
865 
870  static QgsDataItem *itemFromPath( QgsDataItem *parent, const QString &filePath, const QString &name, const QString &path ) SIP_FACTORY SIP_PYNAME( itemFromFilePath );
871 
872  static QIcon iconZip();
873 
874  private:
875  void init();
876 };
877 
878 
880 #ifndef SIP_RUN
881 
887 class CORE_EXPORT QgsProjectHomeItem : public QgsDirectoryItem
888 {
889  Q_OBJECT
890 
891  public:
892 
893  QgsProjectHomeItem( QgsDataItem *parent, const QString &name, const QString &dirPath, const QString &path );
894 
895  QIcon icon() override;
896  QVariant sortKey() const override;
897 
898 };
899 
905 Q_NOWARN_DEPRECATED_PUSH // rename is deprecated
906 class CORE_EXPORT QgsFavoriteItem : public QgsDirectoryItem
907 {
908  Q_OBJECT
909 
910  public:
911 
912  QgsFavoriteItem( QgsFavoritesItem *parent, const QString &name, const QString &dirPath, const QString &path );
913 
914  bool rename( const QString &name ) override;
915 
916  private:
917 
918  QgsFavoritesItem *mFavorites = nullptr;
919 };
921 
922 #endif
923 
925 #endif // QGSDATAITEM_H
926 
927 
A Collection: logical collection of layers or subcollections, e.g.
Definition: qgsdataitem.h:601
virtual QVariant sortKey() const
Returns the sorting key for the item.
QStringList mSupportFormats
The list of supported formats.
Definition: qgsdataitem.h:580
QString path() const
Definition: qgsdataitem.h:320
Base class for all map layer types.
Definition: qgsmaplayer.h:79
virtual void childrenCreated()
virtual QString layerName() const
Definition: qgsdataitem.h:593
QString providerKey() const
Returns provider key.
Definition: qgsdataitem.h:532
QString name() const
Returns the name of the item (the displayed text for the item).
Definition: qgsdataitem.h:311
#define SIP_TRANSFERTHIS
Definition: qgis_sip.h:53
QString toolTip() const
Definition: qgsdataitem.h:373
QVariant mSortKey
Custom sort key. If invalid, name() will be used for sorting instead.
Definition: qgsdataitem.h:416
virtual QIcon icon()
void addChild(QgsDataItem *item)
Definition: qgsdataitem.h:621
#define Q_NOWARN_DEPRECATED_PUSH
Definition: qgis.h:731
QString mIconName
Definition: qgsdataitem.h:411
State mState
Definition: qgsdataitem.h:402
Type type() const
Definition: qgsdataitem.h:292
void setIcon(const QIcon &icon)
Definition: qgsdataitem.h:369
virtual Q_DECL_DEPRECATED bool rename(const QString &name)
Sets a new name for the item, and returns true if the item was successfully renamed.
Manages storage of a set of bookmarks.
Abstract base class for spatial data provider implementations.
void setToolTip(const QString &msg)
Definition: qgsdataitem.h:372
const QgsCoordinateReferenceSystem & crs
#define SIP_TRANSFERBACK
Definition: qgis_sip.h:48
QString mToolTip
Definition: qgsdataitem.h:410
A zip file: contains layers, using GDAL/OGR VSIFILE mechanism.
Definition: qgsdataitem.h:836
virtual bool equal(const QgsDataItem *other)
Returns true if this item is equal to another item (by testing item type and path).
QStringList mSupportedCRS
The list of supported CRS.
Definition: qgsdataitem.h:578
QString mFilePath
Definition: qgsdataitem.h:841
QgsDataItem * parent() const
Gets item parent.
Definition: qgsdataitem.h:297
QString mName
Definition: qgsdataitem.h:403
#define SIP_SKIP
Definition: qgis_sip.h:126
QStringList mZipFileList
Definition: qgsdataitem.h:843
virtual void setCapabilities(Capabilities capabilities)
Sets the capabilities for the data item.
Definition: qgsdataitem.h:283
Children not yet created.
Definition: qgsdataitem.h:115
#define SIP_TRANSFER
Definition: qgis_sip.h:36
virtual Q_DECL_DEPRECATED bool acceptDrop()
Returns whether the item accepts drag and dropped layers - e.g.
Definition: qgsdataitem.h:194
Creating children in separate thread (populating or refreshing)
Definition: qgsdataitem.h:116
#define SIP_END
Definition: qgis_sip.h:189
Data item that can be used to report problems (e.g.
Definition: qgsdataitem.h:753
virtual bool hasDragEnabled() const
Returns true if the item may be dragged.
Definition: qgsdataitem.h:221
virtual QgsMimeDataUtils::Uri mimeUri() const
Returns mime URI for the data item.
Definition: qgsdataitem.h:229
#define SIP_FACTORY
Definition: qgis_sip.h:76
#define SIP_DEPRECATED
Definition: qgis_sip.h:106
Custom item type.
Definition: qgsdataitem.h:84
QIcon icon() override
A directory: contains subdirectories and layers.
Definition: qgsdataitem.h:654
static QStringList sProviderNames
Definition: qgsdataitem.h:857
Base class for all items in the model.
Definition: qgsdataitem.h:49
virtual Q_DECL_DEPRECATED QWidget * paramWidget()
Returns source widget from data item for QgsBrowserPropertiesWidget.
Definition: qgsdataitem.h:165
Capabilities mCapabilities
Definition: qgsdataitem.h:399
virtual void setState(State state)
Set item state.
QVector< QgsDataItem * > children() const
Definition: qgsdataitem.h:303
bool hasDragEnabled() const override
Returns true if the item may be dragged.
Definition: qgsdataitem.h:705
QString mPath
Definition: qgsdataitem.h:409
#define Q_NOWARN_DEPRECATED_POP
Definition: qgis.h:732
QString mUri
The URI.
Definition: qgsdataitem.h:574
TODO: move to qgis_gui for QGIS 4.
Definition: qgsdataitem.h:770
bool hasDragEnabled() const override
Returns true if the item may be dragged.
Definition: qgsdataitem.h:513
Contains various Favorites directories.
Definition: qgsdataitem.h:789
QString mVsiPrefix
Definition: qgsdataitem.h:842
QStringList supportedFormats() const
Returns the supported formats.
Definition: qgsdataitem.h:544
QString qgsVsiPrefix(const QString &path)
Definition: qgis.cpp:194
This class represents a coordinate reference system (CRS).
Animated icon is keeping an animation running if there are listeners connected to frameChanged...
QString uri() const
Returns layer uri or empty string if layer cannot be created.
Definition: qgsdataitem.h:529
#define SIP_CONVERT_TO_SUBCLASS_CODE(code)
Definition: qgis_sip.h:172
bool deferredDelete()
The item is scheduled to be deleted.
Definition: qgsdataitem.h:396
QString dirPath() const
Returns the full path to the directory the item represents.
Definition: qgsdataitem.h:700
virtual QVector< QgsDataItem * > createChildren()
Create children.
Represents a QGIS project.
Definition: qgsdataitem.h:83
Item that represents a layer that can be opened with one of the providers.
Definition: qgsdataitem.h:485
virtual Q_DECL_DEPRECATED bool handleDrop(const QMimeData *, Qt::DropAction)
Attempts to process the mime data dropped on this item.
Definition: qgsdataitem.h:204
QgsDataItem * dataItem_t(QString, QgsDataItem *)
Definition: qgsdataitem.h:42
QgsMapLayerType
Types of layers that can be added to a map.
Definition: qgsmaplayer.h:66
QString mProviderKey
Definition: qgsdataitem.h:404
Data item that can be used to represent QGIS projects.
Definition: qgsdataitem.h:729
void setPath(const QString &path)
Definition: qgsdataitem.h:321
LayerType mLayerType
The layer type.
Definition: qgsdataitem.h:576
QVector< QgsDataItem * > mChildren
Definition: qgsdataitem.h:401
virtual QString comments() const
Returns comments of the layer.
Definition: qgsdataitem.h:550
bool hasDragEnabled() const override
Returns true if the item may be dragged.
Definition: qgsdataitem.h:743
Represents a favorite item.
Definition: qgsdataitem.h:82
QStringList supportedCrs() const
Returns the supported CRS.
Definition: qgsdataitem.h:538
void setIconName(const QString &iconName)
Definition: qgsdataitem.h:370
static QString vsiPrefix(const QString &uri)
Definition: qgsdataitem.h:859
QMap< QString, QIcon > mIconMap
Definition: qgsdataitem.h:413
Added in 2.10.
Definition: qgsdataitem.h:501
virtual Capabilities capabilities2() const
Returns the capabilities for the data item.
Definition: qgsdataitem.h:276
#define SIP_PYNAME(name)
Definition: qgis_sip.h:81