LCOV - code coverage report
Current view: top level - core - qgsdataitem.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 1 20 5.0 %
Date: 2021-04-10 08:29:14 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       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"
      33                 :            : #include "qgscoordinatereferencesystem.h"
      34                 :            : #include "qgsmimedatautils.h"
      35                 :            : #include "qgswkbtypes.h"
      36                 :            : #include "qgsabstractdatabaseproviderconnection.h"
      37                 :            : 
      38                 :            : class QgsDataProvider;
      39                 :            : class QgsDataItem;
      40                 :            : class QgsAnimatedIcon;
      41                 :            : class QgsBookmarkManager;
      42                 :            : 
      43                 :            : typedef QgsDataItem *dataItem_t( QString, QgsDataItem * ) SIP_SKIP;
      44                 :            : 
      45                 :            : /**
      46                 :            :  * \ingroup core
      47                 :            :  * \brief Base class for all items in the model.
      48                 :            :  *
      49                 :            :  * Parent/children hierarchy is not based on QObject.
      50                 :            : */
      51                 :            : class CORE_EXPORT QgsDataItem : public QObject
      52                 :            : {
      53                 :            : 
      54                 :            : #ifdef SIP_RUN
      55                 :            :     SIP_CONVERT_TO_SUBCLASS_CODE
      56                 :            :     if ( qobject_cast<QgsLayerItem *>( sipCpp ) )
      57                 :            :       sipType = sipType_QgsLayerItem;
      58                 :            :     else if ( qobject_cast<QgsErrorItem *>( sipCpp ) )
      59                 :            :       sipType = sipType_QgsErrorItem;
      60                 :            :     else if ( qobject_cast<QgsDirectoryItem *>( sipCpp ) )
      61                 :            :       sipType = sipType_QgsDirectoryItem;
      62                 :            :     else if ( qobject_cast<QgsFavoritesItem *>( sipCpp ) )
      63                 :            :       sipType = sipType_QgsFavoritesItem;
      64                 :            :     else if ( qobject_cast<QgsZipItem *>( sipCpp ) )
      65                 :            :       sipType = sipType_QgsZipItem;
      66                 :            :     else if ( qobject_cast<QgsDataCollectionItem *>( sipCpp ) )
      67                 :            :       sipType = sipType_QgsDataCollectionItem;
      68                 :            :     else if ( qobject_cast<QgsProjectItem *>( sipCpp ) )
      69                 :            :       sipType = sipType_QgsProjectItem;
      70                 :            :     else
      71                 :            :       sipType = 0;
      72                 :            :     SIP_END
      73                 :            : #endif
      74                 :            : 
      75                 :            :     Q_OBJECT
      76                 :            : 
      77                 :            :   public:
      78                 :            :     enum Type
      79                 :            :     {
      80                 :            :       Collection,
      81                 :            :       Directory,
      82                 :            :       Layer,
      83                 :            :       Error,
      84                 :            :       Favorites, //!< Represents a favorite item
      85                 :            :       Project, //!< Represents a QGIS project
      86                 :            :       Custom, //!< Custom item type
      87                 :            :       Fields, //!< Collection of fields
      88                 :            :       Field, //!< Vector layer field
      89                 :            :     };
      90                 :            : 
      91                 :            :     Q_ENUM( Type )
      92                 :            : 
      93                 :            :     /**
      94                 :            :      * Constructor for QgsDataItem, with the specified \a parent item.
      95                 :            :      *
      96                 :            :      * The \a name argument specifies the text to show in the model for the item. A translated string should
      97                 :            :      * be used wherever appropriate.
      98                 :            :      *
      99                 :            :      * The \a path argument gives the item path in the browser tree. The \a path string can take any form,
     100                 :            :      * but QgsDataItem items pointing to different logical locations should always use a different item \a path.
     101                 :            :      *
     102                 :            :      * The optional \a providerKey string (added in QGIS 3.12) can be used to specify the key for the QgsDataItemProvider that created this item.
     103                 :            :      */
     104                 :            :     QgsDataItem( QgsDataItem::Type type, QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path, const QString &providerKey = QString() );
     105                 :            : 
     106                 :            :     ~QgsDataItem() override;
     107                 :            : 
     108                 :            :     bool hasChildren();
     109                 :            : 
     110                 :            :     /**
     111                 :            :      * Returns TRUE if the data item is a collection of layers
     112                 :            :      * The default implementation returns FALSE, subclasses must implement this method if their children are layers.
     113                 :            :      * \since QGIS 3.14
     114                 :            :      */
     115                 :            :     virtual bool layerCollection() const;
     116                 :            : 
     117                 :            :     int rowCount();
     118                 :            : 
     119                 :            :     /**
     120                 :            :      * Create children. Children are not expected to have parent set.
     121                 :            :      * \warning This method MUST BE THREAD SAFE.
     122                 :            :     */
     123                 :            :     virtual QVector<QgsDataItem *> createChildren() SIP_TRANSFERBACK;
     124                 :            : #ifdef SIP_RUN
     125                 :            :     SIP_VIRTUAL_CATCHER_CODE
     126                 :            :     PyObject *sipResObj = sipCallMethod( 0, sipMethod, "" );
     127                 :            :     // H = Convert a Python object to a mapped type instance.
     128                 :            :     // 5 = 1 (disallows the conversion of Py_None to NULL) + 4 (returns a copy of the C/C++ instance)
     129                 :            :     sipIsErr = !sipResObj || sipParseResult( 0, sipMethod, sipResObj, "H5", sipType_QVector_0101QgsDataItem, &sipRes ) < 0;
     130                 :            :     if ( !sipIsErr )
     131                 :            :     {
     132                 :            :       for ( QgsDataItem *item : sipRes )
     133                 :            :       {
     134                 :            :         PyObject *pyItem = sipGetPyObject( item, sipType_QgsDataItem );
     135                 :            :         if ( pyItem != NULL )
     136                 :            :         {
     137                 :            :           // pyItem is given an extra reference which is removed when the C++ instance’s destructor is called.
     138                 :            :           sipTransferTo( pyItem, Py_None );
     139                 :            :         }
     140                 :            :       }
     141                 :            :     }
     142                 :            :     if ( sipResObj != NULL )
     143                 :            :     {
     144                 :            :       Py_DECREF( sipResObj );
     145                 :            :     }
     146                 :            :     SIP_END
     147                 :            : #endif
     148                 :            : 
     149                 :            :     enum State
     150                 :            :     {
     151                 :            :       NotPopulated, //!< Children not yet created
     152                 :            :       Populating,   //!< Creating children in separate thread (populating or refreshing)
     153                 :            :       Populated     //!< Children created
     154                 :            :     };
     155                 :          0 :     Q_ENUM( State )
     156                 :            : 
     157                 :            :     //! \since QGIS 2.8
     158                 :            :     State state() const;
     159                 :            : 
     160                 :            :     /**
     161                 :            :      * Set item state. It also take care about starting/stopping loading icon animation.
     162                 :            :      * \param state
     163                 :            :      * \since QGIS 2.8
     164                 :            :      */
     165                 :            :     virtual void setState( State state );
     166                 :            : 
     167                 :            :     /**
     168                 :            :      * Inserts a new child item. The child will be inserted at a position using an alphabetical order based on mName.
     169                 :            :      * \param child child item to insert. Ownership is transferred, and item parent will be set and relevant connections made.
     170                 :            :      * \param refresh - set to TRUE to refresh populated item, emitting relevant signals to the model
     171                 :            :      * \see deleteChildItem()
     172                 :            :      */
     173                 :            :     virtual void addChildItem( QgsDataItem *child SIP_TRANSFER, bool refresh = false );
     174                 :            : 
     175                 :            :     /**
     176                 :            :      * Removes and deletes a child item, emitting relevant signals to the model.
     177                 :            :      * \param child child to remove. Item must exist as a current child.
     178                 :            :      * \see addChildItem()
     179                 :            :      */
     180                 :            :     virtual void deleteChildItem( QgsDataItem *child );
     181                 :            : 
     182                 :            :     /**
     183                 :            :      * Removes a child item and returns it without deleting it. Emits relevant signals to model as required.
     184                 :            :      * \param child child to remove
     185                 :            :      * \returns pointer to the removed item or NULLPTR if no such item was found
     186                 :            :      */
     187                 :            :     virtual QgsDataItem *removeChildItem( QgsDataItem *child ) SIP_TRANSFERBACK;
     188                 :            : 
     189                 :            :     /**
     190                 :            :      * Returns TRUE if this item is equal to another item (by testing item type and path).
     191                 :            :      */
     192                 :            :     virtual bool equal( const QgsDataItem *other );
     193                 :            : 
     194                 :            :     /**
     195                 :            :      * Returns source widget from data item for QgsBrowserPropertiesWidget
     196                 :            :      *
     197                 :            :      * Use QgsDataItemGuiProvider::createParamWidget() instead
     198                 :            :      *
     199                 :            :      * \deprecated QGIS 3.10
     200                 :            :      */
     201                 :            :     Q_DECL_DEPRECATED virtual QWidget *paramWidget() SIP_FACTORY SIP_DEPRECATED { return nullptr; }
     202                 :            : 
     203                 :            :     /**
     204                 :            :      * Returns the list of actions available for this item. This is usually used for the popup menu on right-clicking
     205                 :            :      * the item. Subclasses should override this to provide actions.
     206                 :            :      *
     207                 :            :      * Subclasses should ensure that ownership of created actions is correctly handled by parenting them
     208                 :            :      * to the specified parent widget.
     209                 :            :      */
     210                 :            :     virtual QList<QAction *> actions( QWidget *parent );
     211                 :            : 
     212                 :            :     /**
     213                 :            :      * Returns the list of menus available for this item. This is usually used for the popup menu on right-clicking
     214                 :            :      * the item. Subclasses should override this to provide actions. Subclasses should ensure that ownership of
     215                 :            :      * created menus is correctly handled by parenting them to the specified parent widget.
     216                 :            :      * \param parent a parent widget of the menu
     217                 :            :      * \returns list of menus
     218                 :            :      * \since QGIS 3.0
     219                 :            :      */
     220                 :            :     virtual QList<QMenu *> menus( QWidget *parent );
     221                 :            : 
     222                 :            :     /**
     223                 :            :      * Returns whether the item accepts drag and dropped layers - e.g. for importing a dataset to a provider.
     224                 :            :      * Subclasses should override this and handleDrop() to accept dropped layers.
     225                 :            :      * \see handleDrop()
     226                 :            :      * \see QgsDataItemGuiProvider::handleDrop()
     227                 :            :      *
     228                 :            :      * \deprecated QGIS 3.10
     229                 :            :      */
     230                 :            :     Q_DECL_DEPRECATED virtual bool acceptDrop() SIP_DEPRECATED { return false; }
     231                 :            : 
     232                 :            :     /**
     233                 :            :      * Attempts to process the mime data dropped on this item. Subclasses must override this and acceptDrop() if they
     234                 :            :      * accept dropped layers.
     235                 :            :      * \see acceptDrop()
     236                 :            :      * \see QgsDataItemGuiProvider::handleDrop()
     237                 :            :      *
     238                 :            :      * \deprecated QGIS 3.10
     239                 :            :      */
     240                 :            :     Q_DECL_DEPRECATED virtual bool handleDrop( const QMimeData * /*data*/, Qt::DropAction /*action*/ ) SIP_DEPRECATED { return false; }
     241                 :            : 
     242                 :            :     /**
     243                 :            :      * Called when a user double clicks on the item. Subclasses should return TRUE
     244                 :            :      * if they have implemented a double-click handler and do not want the default
     245                 :            :      * double-click behavior for items.
     246                 :            :      * \since QGIS 3.0
     247                 :            :      */
     248                 :            :     virtual bool handleDoubleClick();
     249                 :            : 
     250                 :            :     /**
     251                 :            :      * Returns TRUE if the item may be dragged.
     252                 :            :      * Default implementation returns FALSE.
     253                 :            :      * A draggable item has to implement mimeUris() that will be used to pass data.
     254                 :            :      * \see mimeUris()
     255                 :            :      * \since QGIS 3.0
     256                 :            :      */
     257                 :            :     virtual bool hasDragEnabled() const { return false; }
     258                 :            : 
     259                 :            :     /**
     260                 :            :      * Returns mime URI for the data item.
     261                 :            :      * Items that return valid URI will be returned in mime data when dragging a selection from browser model.
     262                 :            :      * \see hasDragEnabled()
     263                 :            :      * \deprecated since QGIS 3.18, use mimeUris() instead
     264                 :            :      * \since QGIS 3.0
     265                 :            :      */
     266                 :            :     Q_DECL_DEPRECATED virtual QgsMimeDataUtils::Uri mimeUri() const SIP_DEPRECATED;
     267                 :            : 
     268                 :            :     /**
     269                 :            :      * Returns mime URIs for the data item, most data providers will only return a single URI
     270                 :            :      * but some data collection items (e.g. GPKG, OGR) may report multiple URIs (e.g. for vector and
     271                 :            :      * raster layer types).
     272                 :            :      *
     273                 :            :      * Items that return valid URI will be returned in mime data when dragging a selection from browser model.
     274                 :            :      * \since QGIS 3.18
     275                 :            :      */
     276                 :            :     virtual QgsMimeDataUtils::UriList mimeUris() const { return QgsMimeDataUtils::UriList(); }
     277                 :            : 
     278                 :            :     enum Capability
     279                 :            :     {
     280                 :            :       NoCapabilities    = 0,
     281                 :            :       SetCrs            = 1 << 0, //!< Can set CRS on layer or group of layers. \deprecated since QGIS 3.6 -- no longer used by QGIS and will be removed in QGIS 4.0
     282                 :            :       Fertile           = 1 << 1, //!< Can create children. Even items without this capability may have children, but cannot create them, it means that children are created by item ancestors.
     283                 :            :       Fast              = 1 << 2, //!< CreateChildren() is fast enough to be run in main thread when refreshing items, most root items (wms,wfs,wcs,postgres...) are considered fast because they are reading data only from QgsSettings
     284                 :            :       Collapse          = 1 << 3, //!< The collapse/expand status for this items children should be ignored in order to avoid undesired network connections (wms etc.)
     285                 :            :       Rename            = 1 << 4, //!< Item can be renamed
     286                 :            :       Delete            = 1 << 5, //!< Item can be deleted
     287                 :            :     };
     288                 :            :     Q_DECLARE_FLAGS( Capabilities, Capability )
     289                 :            : 
     290                 :            :     /**
     291                 :            :      * Writes the selected crs into data source. The original data source will be modified when calling this
     292                 :            :      * method.
     293                 :            :      *
     294                 :            :      * \deprecated since QGIS 3.6. This method is no longer used by QGIS and will be removed in QGIS 4.0.
     295                 :            :      */
     296                 :            :     Q_DECL_DEPRECATED virtual bool setCrs( const QgsCoordinateReferenceSystem &crs ) SIP_DEPRECATED
     297                 :            :     {
     298                 :            :       Q_UNUSED( crs )
     299                 :            :       return false;
     300                 :            :     }
     301                 :            : 
     302                 :            :     /**
     303                 :            :      * Sets a new \a name for the item, and returns TRUE if the item was successfully renamed.
     304                 :            :      *
     305                 :            :      * Items which implement this method should return the QgsDataItem::Rename capability.
     306                 :            :      *
     307                 :            :      * The default implementation does nothing.
     308                 :            :      *
     309                 :            :      * Use QgsDataItemGuiProvider:
     310                 :            :      *
     311                 :            :      * \since QGIS 3.4
     312                 :            :      * \deprecated QGIS 3.10
     313                 :            :      */
     314                 :            :     Q_DECL_DEPRECATED virtual bool rename( const QString &name ) SIP_DEPRECATED;
     315                 :            : 
     316                 :            :     // ### QGIS 4 - rename to capabilities()
     317                 :            : 
     318                 :            :     /**
     319                 :            :      * Returns the capabilities for the data item.
     320                 :            :      *
     321                 :            :      * \see setCapabilities()
     322                 :            :      */
     323                 :            :     virtual Capabilities capabilities2() const { return mCapabilities; }
     324                 :            : 
     325                 :            :     /**
     326                 :            :      * Sets the capabilities for the data item.
     327                 :            :      *
     328                 :            :      * \see capabilities2()
     329                 :            :      */
     330                 :            :     virtual void setCapabilities( Capabilities capabilities ) { mCapabilities = capabilities; }
     331                 :            : 
     332                 :            :     // static methods
     333                 :            : 
     334                 :            :     // Find child index in vector of items using '==' operator
     335                 :            :     static int findItem( QVector<QgsDataItem *> items, QgsDataItem *item );
     336                 :            : 
     337                 :            :     // members
     338                 :            : 
     339                 :          0 :     Type type() const { return mType; }
     340                 :            : 
     341                 :            :     /**
     342                 :            :      * Gets item parent. QgsDataItem maintains its own items hierarchy, it does not use
     343                 :            :      * QObject hierarchy.
     344                 :            :     */
     345                 :          0 :     QgsDataItem *parent() const { return mParent; }
     346                 :            : 
     347                 :            :     /**
     348                 :            :      * Set item parent and connect / disconnect parent to / from item signals.
     349                 :            :      * It does not add itself to parents children (mChildren)
     350                 :            :     */
     351                 :            :     void setParent( QgsDataItem *parent );
     352                 :          0 :     QVector<QgsDataItem *> children() const { return mChildren; }
     353                 :            :     virtual QIcon icon();
     354                 :            : 
     355                 :            :     /**
     356                 :            :      * Returns the name of the item (the displayed text for the item).
     357                 :            :      *
     358                 :            :      * \see setName()
     359                 :            :      */
     360                 :          0 :     QString name() const { return mName; }
     361                 :            : 
     362                 :            :     /**
     363                 :            :      * Sets the \a name of the item (the displayed text for the item).
     364                 :            :      *
     365                 :            :      * \see name()
     366                 :            :      */
     367                 :            :     void setName( const QString &name );
     368                 :            : 
     369                 :          0 :     QString path() const { return mPath; }
     370                 :            :     void setPath( const QString &path ) { mPath = path; }
     371                 :            : 
     372                 :            :     /**
     373                 :            :      * Returns the provider key that created this item (e.g. "PostGIS")
     374                 :            :      *
     375                 :            :      * If key has a prefix "special:", it marks that the item was not created with a provider,
     376                 :            :      * but manually. For example "special:Favorites", "special:Home"
     377                 :            :      *
     378                 :            :      * \since QGIS 3.12
     379                 :            :      */
     380                 :            :     QString providerKey() const;
     381                 :            : 
     382                 :            :     /**
     383                 :            :      * Sets the provider key that created this item (e.g. "PostGIS")
     384                 :            :      *
     385                 :            :      * If key has a prefix "special:", it marks that the item was not created with a provider,
     386                 :            :      * but manually. For example "special:Favorites"
     387                 :            :      *
     388                 :            :      * \since QGIS 3.12
     389                 :            :      */
     390                 :            :     void setProviderKey( const QString &value );
     391                 :            : 
     392                 :            :     //! Create path component replacing path separators
     393                 :            :     static QString pathComponent( const QString &component );
     394                 :            : 
     395                 :            :     /**
     396                 :            :      * Returns the sorting key for the item. By default name() is returned,
     397                 :            :      * but setSortKey() can be used to set a custom sort key for the item.
     398                 :            :      *
     399                 :            :      * Alternatively subclasses can override this method to return a custom
     400                 :            :      * sort key.
     401                 :            :      *
     402                 :            :      * \see setSortKey()
     403                 :            :      * \since QGIS 3.0
     404                 :            :      */
     405                 :            :     virtual QVariant sortKey() const;
     406                 :            : 
     407                 :            :     /**
     408                 :            :      * Sets a custom sorting \a key for the item.
     409                 :            :      * \see sortKey()
     410                 :            :      * \since QGIS 3.0
     411                 :            :      */
     412                 :            :     void setSortKey( const QVariant &key );
     413                 :            : 
     414                 :            : 
     415                 :            :     // Because QIcon (QPixmap) must not be used in outside the GUI thread, it is
     416                 :            :     // not possible to set mIcon in constructor. Either use mIconName/setIconName()
     417                 :            :     // or implement icon().
     418                 :            :     void setIcon( const QIcon &icon ) { mIcon = icon; }
     419                 :            :     void setIconName( const QString &iconName ) { mIconName = iconName; }
     420                 :            : 
     421                 :          0 :     void setToolTip( const QString &msg ) { mToolTip = msg; }
     422                 :          0 :     QString toolTip() const { return mToolTip; }
     423                 :            : 
     424                 :            :     // deleteLater() items and clear the vector
     425                 :            :     static void deleteLater( QVector<QgsDataItem *> &items );
     426                 :            : 
     427                 :            :     //! Move object and all its descendants to thread
     428                 :            :     void moveToThread( QThread *targetThread );
     429                 :            : 
     430                 :            :     /**
     431                 :            :      * For data items that represent a DB connection or one of its children,
     432                 :            :      * this method returns a connection.
     433                 :            :      * All other data items will return NULL.
     434                 :            :      *
     435                 :            :      * Ownership of the returned objects is transferred to the caller.
     436                 :            :      *
     437                 :            :      * \since QGIS 3.16
     438                 :            :      */
     439                 :            :     virtual QgsAbstractDatabaseProviderConnection *databaseConnection() const SIP_FACTORY;
     440                 :            : 
     441                 :            :   protected:
     442                 :            :     virtual void populate( const QVector<QgsDataItem *> &children );
     443                 :            : 
     444                 :            :     /**
     445                 :            :      * Refresh the items from a specified list of child items.
     446                 :            :      */
     447                 :            :     virtual void refresh( const QVector<QgsDataItem *> &children );
     448                 :            : 
     449                 :            :     /**
     450                 :            :      * The item is scheduled to be deleted. E.g. if deleteLater() is called when
     451                 :            :      * item is in Populating state (createChildren() running in another thread),
     452                 :            :      * the deferredDelete() returns TRUE and item will be deleted once Populating finished.
     453                 :            :      * Items with slow reateChildren() (for example network or database based) may
     454                 :            :      * check during createChildren() if deferredDelete() returns TRUE and return from
     455                 :            :      * createChildren() immediately because result will be useless.
     456                 :            :     */
     457                 :          0 :     bool deferredDelete() { return mDeferredDelete; }
     458                 :            : 
     459                 :            :     Type mType;
     460                 :            :     Capabilities mCapabilities;
     461                 :            :     QgsDataItem *mParent = nullptr;
     462                 :            :     QVector<QgsDataItem *> mChildren; // easier to have it always
     463                 :            :     State mState;
     464                 :            :     QString mName;
     465                 :            :     QString mProviderKey;
     466                 :            :     // Path is slash ('/') separated chain of item identifiers which are usually item names, but may be different if it is
     467                 :            :     // necessary to distinguish paths of two providers to the same source (e.g GRASS location and standard directory have the same
     468                 :            :     // name but different paths). Identifiers in path must not contain '/' characters.
     469                 :            :     // The path is used to identify item in tree.
     470                 :            :     QString mPath;
     471                 :            :     QString mToolTip;
     472                 :            :     QString mIconName;
     473                 :            :     QIcon mIcon;
     474                 :            :     QMap<QString, QIcon> mIconMap;
     475                 :            : 
     476                 :            :     //! Custom sort key. If invalid, name() will be used for sorting instead.
     477                 :            :     QVariant mSortKey;
     478                 :            : 
     479                 :            :   public slots:
     480                 :            : 
     481                 :            :     /**
     482                 :            :      * Safely delete the item:
     483                 :            :      *
     484                 :            :      * - disconnects parent
     485                 :            :      * - unsets parent (but does not remove itself)
     486                 :            :      * - deletes all its descendants recursively
     487                 :            :      * - waits until Populating state (createChildren() in thread) finished without blocking main thread
     488                 :            :      * - calls QObject::deleteLater()
     489                 :            :      */
     490                 :            :     virtual void deleteLater();
     491                 :            : 
     492                 :            :     // Populate children using children vector created by createChildren()
     493                 :            :     // \param foreground run createChildren in foreground
     494                 :            :     virtual void populate( bool foreground = false );
     495                 :            : 
     496                 :            :     //! Remove children recursively and set as not populated. This is used when refreshing collapsed items.
     497                 :            :     virtual void depopulate();
     498                 :            : 
     499                 :            :     virtual void refresh();
     500                 :            : 
     501                 :            :     /**
     502                 :            :      * Causes a data item provider to refresh all registered connections.
     503                 :            :      *
     504                 :            :      * If \a providerKey is specified then only the matching provider will be refreshed. Otherwise,
     505                 :            :      * all providers will be refreshed (which is potentially very expensive!).
     506                 :            :      */
     507                 :            :     virtual void refreshConnections( const QString &providerKey = QString() );
     508                 :            : 
     509                 :            :     virtual void childrenCreated();
     510                 :            : 
     511                 :            :   signals:
     512                 :            :     void beginInsertItems( QgsDataItem *parent, int first, int last );
     513                 :            :     void endInsertItems();
     514                 :            :     void beginRemoveItems( QgsDataItem *parent, int first, int last );
     515                 :            :     void endRemoveItems();
     516                 :            :     void dataChanged( QgsDataItem *item );
     517                 :            :     void stateChanged( QgsDataItem *item, QgsDataItem::State oldState );
     518                 :            : 
     519                 :            :     /**
     520                 :            :      * Emitted when the connections of the provider with the specified \a providerKey have changed.
     521                 :            :      *
     522                 :            :      * This signal is normally forwarded to the app in order to refresh the connection
     523                 :            :      * item in the provider dialogs and to refresh the connection items in the other
     524                 :            :      * open browsers.
     525                 :            :      */
     526                 :            :     void connectionsChanged( const QString &providerKey = QString() );
     527                 :            : 
     528                 :            :   protected slots:
     529                 :            : 
     530                 :            :     /**
     531                 :            :      * Will request a repaint of this icon.
     532                 :            :      *
     533                 :            :      * \since QGIS 3.0
     534                 :            :      */
     535                 :            :     void updateIcon();
     536                 :            : 
     537                 :            :   private:
     538                 :            :     static QVector<QgsDataItem *> runCreateChildren( QgsDataItem *item );
     539                 :            : 
     540                 :            :     // Set to true if object has to be deleted when possible (nothing running in threads)
     541                 :            :     bool mDeferredDelete;
     542                 :            :     QFutureWatcher< QVector <QgsDataItem *> > *mFutureWatcher;
     543                 :            :     // number of items currently in loading (populating) state
     544                 :            :     static QgsAnimatedIcon *sPopulatingIcon;
     545                 :            : };
     546                 :            : 
     547                 :          0 : Q_DECLARE_OPERATORS_FOR_FLAGS( QgsDataItem::Capabilities )
     548                 :            : 
     549                 :            : /**
     550                 :            :  * \ingroup core
     551                 :            :  * \brief Item that represents a layer that can be opened with one of the providers
     552                 :            : */
     553                 :          0 : class CORE_EXPORT QgsLayerItem : public QgsDataItem
     554                 :            : {
     555                 :            :     Q_OBJECT
     556                 :            : 
     557                 :            :   public:
     558                 :            :     enum LayerType
     559                 :            :     {
     560                 :            :       NoType,
     561                 :            :       Vector,
     562                 :            :       Raster,
     563                 :            :       Point,
     564                 :            :       Line,
     565                 :            :       Polygon,
     566                 :            :       TableLayer,
     567                 :            :       Database,
     568                 :            :       Table,
     569                 :            :       Plugin,    //!< Added in 2.10
     570                 :            :       Mesh,      //!< Added in 3.2
     571                 :            :       VectorTile, //!< Added in 3.14
     572                 :            :       PointCloud //!< Added in 3.18
     573                 :            :     };
     574                 :            : 
     575                 :            :     Q_ENUM( LayerType )
     576                 :            : 
     577                 :            :     QgsLayerItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &uri, LayerType layerType, const QString &providerKey );
     578                 :            : 
     579                 :            :     // --- reimplemented from QgsDataItem ---
     580                 :            : 
     581                 :            :     bool equal( const QgsDataItem *other ) override;
     582                 :            : 
     583                 :            :     bool hasDragEnabled() const override { return true; }
     584                 :            : 
     585                 :            :     QgsMimeDataUtils::UriList mimeUris() const override;
     586                 :            : 
     587                 :            :     // --- New virtual methods for layer item derived classes ---
     588                 :            : 
     589                 :            :     //! Returns QgsMapLayerType
     590                 :            :     QgsMapLayerType mapLayerType() const;
     591                 :            : 
     592                 :            :     /**
     593                 :            :      * Returns the layer item type corresponding to a QgsMapLayer \a layer.
     594                 :            :      * \since QGIS 3.6
     595                 :            :      */
     596                 :            :     static LayerType typeFromMapLayer( QgsMapLayer *layer );
     597                 :            : 
     598                 :            :     //! Returns layer uri or empty string if layer cannot be created
     599                 :          0 :     QString uri() const { return mUri; }
     600                 :            : 
     601                 :            :     //! Returns provider key
     602                 :          0 :     QString providerKey() const { return mProviderKey; }
     603                 :            : 
     604                 :            :     /**
     605                 :            :      * Returns the supported CRS
     606                 :            :      *  \since QGIS 2.8
     607                 :            :      */
     608                 :          0 :     QStringList supportedCrs() const { return mSupportedCRS; }
     609                 :            : 
     610                 :            :     /**
     611                 :            :      * Returns the supported formats
     612                 :            :      *  \since QGIS 2.8
     613                 :            :      */
     614                 :          0 :     QStringList supportedFormats() const { return mSupportFormats; }
     615                 :            : 
     616                 :            :     /**
     617                 :            :      * Returns comments of the layer
     618                 :            :      * \since QGIS 2.12
     619                 :            :      */
     620                 :            :     virtual QString comments() const { return QString(); }
     621                 :            : 
     622                 :            :     /**
     623                 :            :      * Returns the string representation of the given \a layerType
     624                 :            :      * \since QGIS 3
     625                 :            :      */
     626                 :            :     static QString layerTypeAsString( LayerType layerType );
     627                 :            : 
     628                 :            :     /**
     629                 :            :      * Returns the icon name of the given \a layerType
     630                 :            :      * \since QGIS 3
     631                 :            :      */
     632                 :            :     static QString iconName( LayerType layerType );
     633                 :            : 
     634                 :            :     /**
     635                 :            :      * Delete this layer item
     636                 :            :      * Use QgsDataItemGuiProvider::deleteLayer instead
     637                 :            :      *
     638                 :            :      * \deprecated QGIS 3.10
     639                 :            :      */
     640                 :            :     Q_DECL_DEPRECATED virtual bool deleteLayer() SIP_DEPRECATED;
     641                 :            : 
     642                 :            :   protected:
     643                 :            :     //! The URI
     644                 :            :     QString mUri;
     645                 :            :     //! The layer type
     646                 :            :     LayerType mLayerType;
     647                 :            :     //! The list of supported CRS
     648                 :            :     QStringList mSupportedCRS;
     649                 :            :     //! The list of supported formats
     650                 :            :     QStringList mSupportFormats;
     651                 :            : 
     652                 :            :   public:
     653                 :            : 
     654                 :            :     /**
     655                 :            :      * Returns the icon for a vector layer whose geometry type is provided.
     656                 :            :      * \since QGIS 3.18
     657                 :            :      */
     658                 :            :     static QIcon iconForWkbType( QgsWkbTypes::Type type );
     659                 :            : 
     660                 :            :     static QIcon iconPoint();
     661                 :            :     static QIcon iconLine();
     662                 :            :     static QIcon iconPolygon();
     663                 :            :     static QIcon iconTable();
     664                 :            :     static QIcon iconRaster();
     665                 :            :     static QIcon iconDefault();
     666                 :            :     //! Returns icon for mesh layer type
     667                 :            :     static QIcon iconMesh();
     668                 :            :     //! Returns icon for vector tile layer
     669                 :            :     static QIcon iconVectorTile();
     670                 :            :     //! Returns icon for point cloud layer
     671                 :            :     static QIcon iconPointCloud();
     672                 :            :     //! \returns the layer name
     673                 :            :     virtual QString layerName() const { return name(); }
     674                 :            : 
     675                 :            : };
     676                 :            : 
     677                 :            : 
     678                 :            : /**
     679                 :            :  * \ingroup core
     680                 :            :  * \brief A Collection: logical collection of layers or subcollections, e.g. GRASS location/mapset, database? wms source?
     681                 :            : */
     682                 :            : class CORE_EXPORT QgsDataCollectionItem : public QgsDataItem
     683                 :            : {
     684                 :            :     Q_OBJECT
     685                 :            :   public:
     686                 :            : 
     687                 :            :     /**
     688                 :            :      * Constructor for QgsDataCollectionItem, with the specified \a parent item.
     689                 :            :      *
     690                 :            :      * The \a name argument specifies the text to show in the model for the item. A translated string should
     691                 :            :      * be used wherever appropriate.
     692                 :            :      *
     693                 :            :      * The \a path argument gives the item path in the browser tree. The \a path string can take any form,
     694                 :            :      * but QgsDataCollectionItem items pointing to different logical locations should always use a different item \a path.
     695                 :            :      *
     696                 :            :      * The optional \a providerKey string can be used to specify the key for the QgsDataItemProvider that created this item.
     697                 :            :      */
     698                 :            :     QgsDataCollectionItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path = QString(), const QString &providerKey = QString() );
     699                 :            : 
     700                 :            :     ~QgsDataCollectionItem() override;
     701                 :            : 
     702                 :            :     void addChild( QgsDataItem *item SIP_TRANSFER ) { mChildren.append( item ); }
     703                 :            : 
     704                 :            :     /**
     705                 :            :      * Returns the standard browser directory icon.
     706                 :            :      * \see iconDataCollection()
     707                 :            :      */
     708                 :            :     static QIcon iconDir();
     709                 :            : 
     710                 :            :     /**
     711                 :            :      * Returns the standard browser data collection icon.
     712                 :            :      * \see iconDir()
     713                 :            :      */
     714                 :            :     static QIcon iconDataCollection();
     715                 :            : 
     716                 :            :     QgsAbstractDatabaseProviderConnection *databaseConnection() const override;
     717                 :            : 
     718                 :            :   protected:
     719                 :            : 
     720                 :            :     /**
     721                 :            :      * Shared open directory icon.
     722                 :            :      * \since QGIS 3.4
     723                 :            :      */
     724                 :            :     static QIcon openDirIcon();
     725                 :            : 
     726                 :            :     /**
     727                 :            :      * Shared home directory icon.
     728                 :            :      * \since QGIS 3.4
     729                 :            :      */
     730                 :            :     static QIcon homeDirIcon();
     731                 :            : 
     732                 :            : };
     733                 :            : 
     734                 :            : 
     735                 :            : /**
     736                 :            :  * \ingroup core
     737                 :            :  * \brief A Collection that represents a database schema item
     738                 :            :  * \since QGIS 3.16
     739                 :            : */
     740                 :            : class CORE_EXPORT QgsDatabaseSchemaItem : public QgsDataCollectionItem
     741                 :            : {
     742                 :            :     Q_OBJECT
     743                 :            :   public:
     744                 :            : 
     745                 :            :     /**
     746                 :            :      * Constructor for QgsDatabaseSchemaItem, with the specified \a parent item.
     747                 :            :      *
     748                 :            :      * The \a name argument specifies the text to show in the model for the item. A translated string should
     749                 :            :      * be used wherever appropriate.
     750                 :            :      *
     751                 :            :      * The \a path argument gives the item path in the browser tree. The \a path string can take any form,
     752                 :            :      * but QgsSchemaItem items pointing to different logical locations should always use a different item \a path.
     753                 :            :      *
     754                 :            :      * The optional \a providerKey string can be used to specify the key for the QgsDataItemProvider that created this item.
     755                 :            :      */
     756                 :            :     QgsDatabaseSchemaItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path = QString(), const QString &providerKey = QString() );
     757                 :            : 
     758                 :            :     ~QgsDatabaseSchemaItem() override;
     759                 :            : 
     760                 :            :     QgsAbstractDatabaseProviderConnection *databaseConnection() const override;
     761                 :            : 
     762                 :            :     /**
     763                 :            :      * Returns the standard browser data collection icon.
     764                 :            :      * \see iconDir()
     765                 :            :      */
     766                 :            :     static QIcon iconDataCollection();
     767                 :            : 
     768                 :            : };
     769                 :            : 
     770                 :            : 
     771                 :            : 
     772                 :            : /**
     773                 :            :  * \ingroup core
     774                 :            :  * \brief A Collection that represents a root group of connections from a single data provider
     775                 :            :  * \since QGIS 3.16
     776                 :            : */
     777                 :            : class CORE_EXPORT QgsConnectionsRootItem : public QgsDataCollectionItem
     778                 :            : {
     779                 :            :     Q_OBJECT
     780                 :            :   public:
     781                 :            : 
     782                 :            :     /**
     783                 :            :      * Constructor for QgsConnectionsRootItem, with the specified \a parent item.
     784                 :            :      *
     785                 :            :      * The \a name argument specifies the text to show in the model for the item. A translated string should
     786                 :            :      * be used wherever appropriate.
     787                 :            :      *
     788                 :            :      * The \a path argument gives the item path in the browser tree. The \a path string can take any form,
     789                 :            :      * but QgsSchemaItem items pointing to different logical locations should always use a different item \a path.
     790                 :            :      *
     791                 :            :      * The optional \a providerKey string can be used to specify the key for the QgsDataItemProvider that created this item.
     792                 :            :      */
     793                 :            :     QgsConnectionsRootItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path = QString(), const QString &providerKey = QString() );
     794                 :            : 
     795                 :          0 :     ~QgsConnectionsRootItem() override = default;
     796                 :            : };
     797                 :            : 
     798                 :            : 
     799                 :            : /**
     800                 :            :  * \ingroup core
     801                 :            :  * \brief A directory: contains subdirectories and layers
     802                 :            : */
     803                 :            : class CORE_EXPORT QgsDirectoryItem : public QgsDataCollectionItem
     804                 :            : {
     805                 :            :     Q_OBJECT
     806                 :            :   public:
     807                 :            : 
     808                 :            :     /**
     809                 :            :      * Constructor for QgsDirectoryItem, with the specified \a parent item.
     810                 :            :      *
     811                 :            :      * The \a name argument specifies the text to show in the model for the item. This is usually
     812                 :            :      * the directory name, but in certain cases may differ for special directories (e.g. "Home").
     813                 :            :      * If a non-directory-name text is used, it should be a translated string when appropriate.
     814                 :            :      *
     815                 :            :      * The \a path argument specifies the directory path in the file system (e.g. "/home/gsherman/stuff"). A valid
     816                 :            :      * directory path must be specified.
     817                 :            :      */
     818                 :            :     QgsDirectoryItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &path );
     819                 :            : 
     820                 :            : 
     821                 :            :     // TODO QGIS 4.0 -- rename "name" to "title" or "text" or something more descriptive, and "path" to something
     822                 :            :     // else to clarify the role of dirPath vs path
     823                 :            : 
     824                 :            :     /**
     825                 :            :      * Constructor for QgsDirectoryItem, with the specified \a parent item.
     826                 :            :      *
     827                 :            :      * The \a name argument specifies the text to show in the model for the item. This is usually
     828                 :            :      * the directory name, but in certain cases may differ for special directories (e.g. "Home").
     829                 :            :      * If a non-directory-name text is used, it should be a translated string when appropriate.
     830                 :            :      *
     831                 :            :      * The \a dirPath argument specifies the directory path in the file system (e.g. "/home/gsherman/stuff"). A valid
     832                 :            :      * directory path must be specified.
     833                 :            :      *
     834                 :            :      * The \a path argument gives the item path in the browser tree. The \a path string can take any form, but is usually
     835                 :            :      * the same as \a dirPath or \a dirPath with a prefix, e.g. "favorites:/home/gsherman/Downloads"). QgsDirectoryItem
     836                 :            :      * items pointing to different \a dirPaths should always use a different item \a path.
     837                 :            :      *
     838                 :            :      * The optional \a providerKey string can be used to specify the key for the QgsDataItemProvider that created this item.
     839                 :            :      */
     840                 :            :     QgsDirectoryItem( QgsDataItem *parent SIP_TRANSFERTHIS, const QString &name, const QString &dirPath, const QString &path, const QString &providerKey = QString() );
     841                 :            : 
     842                 :            :     void setState( State state ) override;
     843                 :            : 
     844                 :            :     QVector<QgsDataItem *> createChildren() override;
     845                 :            : 
     846                 :            :     /**
     847                 :            :      * Returns the full path to the directory the item represents.
     848                 :            :      */
     849                 :          0 :     QString dirPath() const { return mDirPath; }
     850                 :            : 
     851                 :            :     bool equal( const QgsDataItem *other ) override;
     852                 :            :     QIcon icon() override;
     853                 :            :     Q_DECL_DEPRECATED QWidget *paramWidget() override SIP_FACTORY SIP_DEPRECATED;
     854                 :            :     bool hasDragEnabled() const override { return true; }
     855                 :            :     QgsMimeDataUtils::UriList mimeUris() const override;
     856                 :            : 
     857                 :            :     //! Check if the given path is hidden from the browser model
     858                 :            :     static bool hiddenPath( const QString &path );
     859                 :            : 
     860                 :            :   public slots:
     861                 :            :     void childrenCreated() override;
     862                 :            :     void directoryChanged();
     863                 :            : 
     864                 :            :   protected:
     865                 :            :     void init();
     866                 :            :     QString mDirPath;
     867                 :            : 
     868                 :            :   private:
     869                 :            :     QFileSystemWatcher *mFileSystemWatcher = nullptr;
     870                 :            :     bool mRefreshLater;
     871                 :            :     QDateTime mLastScan;
     872                 :            : };
     873                 :            : 
     874                 :            : /**
     875                 :            :  * \ingroup core
     876                 :            :  * \brief Data item that can be used to represent QGIS projects.
     877                 :            :  */
     878                 :            : class CORE_EXPORT QgsProjectItem : public QgsDataItem
     879                 :            : {
     880                 :            :     Q_OBJECT
     881                 :            :   public:
     882                 :            : 
     883                 :            :     /**
     884                 :            :      * \brief A data item holding a reference to a QGIS project file.
     885                 :            :      * \param parent The parent data item.
     886                 :            :      * \param name The name of the of the project. Displayed to the user.
     887                 :            :      * \param path The full path to the project.
     888                 :            :      * \param providerKey key of the provider that created this item
     889                 :            :      */
     890                 :            :     QgsProjectItem( QgsDataItem *parent, const QString &name, const QString &path, const QString &providerKey = QString() );
     891                 :            : 
     892                 :            :     bool hasDragEnabled() const override { return true; }
     893                 :            : 
     894                 :            :     QgsMimeDataUtils::UriList mimeUris() const override;
     895                 :            : 
     896                 :            : };
     897                 :            : 
     898                 :            : /**
     899                 :            :  * \ingroup core
     900                 :            :  * \brief Data item that can be used to report problems (e.g. network error)
     901                 :            :  */
     902                 :            : class CORE_EXPORT QgsErrorItem : public QgsDataItem
     903                 :            : {
     904                 :            :     Q_OBJECT
     905                 :            :   public:
     906                 :            : 
     907                 :            :     QgsErrorItem( QgsDataItem *parent, const QString &error, const QString &path );
     908                 :            : 
     909                 :            : };
     910                 :            : 
     911                 :            : // ---------
     912                 :            : 
     913                 :            : // TODO: move to qgis_gui for QGIS 4
     914                 :            : 
     915                 :            : /**
     916                 :            :  * \ingroup core
     917                 :            :  * \class QgsDirectoryParamWidget
     918                 :            :  *
     919                 :            :  * \brief Browser parameter widget implementation for directory items.
     920                 :            :  */
     921                 :            : class CORE_EXPORT QgsDirectoryParamWidget : public QTreeWidget
     922                 :            : {
     923                 :          0 :     Q_OBJECT
     924                 :            : 
     925                 :            :   public:
     926                 :            :     QgsDirectoryParamWidget( const QString &path, QWidget *parent SIP_TRANSFERTHIS = nullptr );
     927                 :            : 
     928                 :            :   protected:
     929                 :            :     void mousePressEvent( QMouseEvent *event ) override;
     930                 :            : 
     931                 :            :   public slots:
     932                 :            :     void showHideColumn();
     933                 :            : };
     934                 :            : 
     935                 :            : /**
     936                 :            :  * \ingroup core
     937                 :            :  * \brief Contains various Favorites directories
     938                 :            :  * \since QGIS 3.0
     939                 :            : */
     940                 :            : class CORE_EXPORT QgsFavoritesItem : public QgsDataCollectionItem
     941                 :            : {
     942                 :            :     Q_OBJECT
     943                 :            :   public:
     944                 :            : 
     945                 :            :     /**
     946                 :            :      * Constructor for QgsFavoritesItem. Accepts a path argument specifying the file path associated with
     947                 :            :      * the item.
     948                 :            :      */
     949                 :            :     QgsFavoritesItem( QgsDataItem *parent, const QString &name, const QString &path = QString() );
     950                 :            : 
     951                 :            :     QVector<QgsDataItem *> createChildren() override;
     952                 :            : 
     953                 :            :     /**
     954                 :            :      * Adds a new \a directory to the favorites group.
     955                 :            :      *
     956                 :            :      * If \a name is specified, it will be used as the favorite's name. Otherwise
     957                 :            :      * the name will be set to match \a directory.
     958                 :            :      *
     959                 :            :      * \see removeDirectory()
     960                 :            :      */
     961                 :            :     void addDirectory( const QString &directory, const QString &name = QString() );
     962                 :            : 
     963                 :            :     /**
     964                 :            :      * Removes an existing directory from the favorites group.
     965                 :            :      * \see addDirectory()
     966                 :            :      */
     967                 :            :     void removeDirectory( QgsDirectoryItem *item );
     968                 :            : 
     969                 :            :     /**
     970                 :            :      * Renames the stored favorite with corresponding \a path a new \a name.
     971                 :            :      */
     972                 :            :     void renameFavorite( const QString &path, const QString &name );
     973                 :            : 
     974                 :            :     //! Icon for favorites group
     975                 :            :     static QIcon iconFavorites();
     976                 :            : 
     977                 :            :     QVariant sortKey() const override;
     978                 :            : 
     979                 :            :   private:
     980                 :            :     QVector<QgsDataItem *> createChildren( const QString &favDir, const QString &name );
     981                 :            : };
     982                 :            : 
     983                 :            : /**
     984                 :            :  * \ingroup core
     985                 :            :  * \brief A zip file: contains layers, using GDAL/OGR VSIFILE mechanism
     986                 :            : */
     987                 :            : class CORE_EXPORT QgsZipItem : public QgsDataCollectionItem
     988                 :            : {
     989                 :            :     Q_OBJECT
     990                 :            : 
     991                 :            :   protected:
     992                 :            :     QString mFilePath;
     993                 :            :     QString mVsiPrefix;
     994                 :            :     QStringList mZipFileList;
     995                 :            : 
     996                 :            :   public:
     997                 :            :     //! Constructor
     998                 :            :     QgsZipItem( QgsDataItem *parent, const QString &name, const QString &path );
     999                 :            : 
    1000                 :            :     //! Constructor
    1001                 :            :     QgsZipItem( QgsDataItem *parent, const QString &name, const QString &filePath, const QString &path, const QString &providerKey = QString() );
    1002                 :            : 
    1003                 :            :     QVector<QgsDataItem *> createChildren() override;
    1004                 :            :     QStringList getZipFileList();
    1005                 :            : 
    1006                 :            :     //! \note not available via Python bindings
    1007                 :            :     static QVector<dataItem_t *> sDataItemPtr SIP_SKIP;
    1008                 :            :     static QStringList sProviderNames;
    1009                 :            : 
    1010                 :        187 :     static QString vsiPrefix( const QString &uri ) { return qgsVsiPrefix( uri ); }
    1011                 :            : 
    1012                 :            :     /**
    1013                 :            :      * Creates a new data item from the specified path.
    1014                 :            :      */
    1015                 :            :     static QgsDataItem *itemFromPath( QgsDataItem *parent, const QString &path, const QString &name ) SIP_FACTORY;
    1016                 :            : 
    1017                 :            :     /**
    1018                 :            :     * Creates a new data item from the specified path.
    1019                 :            :     * \note available in Python as itemFromFilePath
    1020                 :            :     */
    1021                 :            :     static QgsDataItem *itemFromPath( QgsDataItem *parent, const QString &filePath, const QString &name, const QString &path ) SIP_FACTORY SIP_PYNAME( itemFromFilePath );
    1022                 :            : 
    1023                 :            :     static QIcon iconZip();
    1024                 :            : 
    1025                 :            :   private:
    1026                 :            :     void init();
    1027                 :            : };
    1028                 :            : 
    1029                 :            : 
    1030                 :            : /**
    1031                 :            :  * \ingroup core
    1032                 :            :  * \brief A collection of field items with some internal logic to retrieve
    1033                 :            :  * the fields and a the vector layer instance from a connection URI,
    1034                 :            :  * the schema and the table name.
    1035                 :            :  * \since QGIS 3.16
    1036                 :            : */
    1037                 :            : class CORE_EXPORT QgsFieldsItem : public QgsDataItem
    1038                 :            : {
    1039                 :          0 :     Q_OBJECT
    1040                 :            : 
    1041                 :            :   public:
    1042                 :            : 
    1043                 :            :     /**
    1044                 :            :      * Constructor for QgsFieldsItem, with the specified \a parent item.
    1045                 :            :      *
    1046                 :            :      * The \a path argument gives the item path in the browser tree. The \a path string can take any form,
    1047                 :            :      * but QgsDataItem items pointing to different logical locations should always use a different item \a path.
    1048                 :            :      * The \a connectionUri argument is the connection part of the layer URI that it is used internally to create
    1049                 :            :      * a connection and retrieve fields information.
    1050                 :            :      * The \a providerKey string can be used to specify the key for the QgsDataItemProvider that created this item.
    1051                 :            :      * The \a schema and \a tableName are used to retrieve the layer and field information from the \a connectionUri.
    1052                 :            :      */
    1053                 :            :     QgsFieldsItem( QgsDataItem *parent SIP_TRANSFERTHIS,
    1054                 :            :                    const QString &path,
    1055                 :            :                    const QString &connectionUri,
    1056                 :            :                    const QString &providerKey,
    1057                 :            :                    const QString &schema,
    1058                 :            :                    const QString &tableName );
    1059                 :            : 
    1060                 :            :     ~QgsFieldsItem() override;
    1061                 :            : 
    1062                 :            :     QVector<QgsDataItem *> createChildren() override;
    1063                 :            : 
    1064                 :            :     QIcon icon() override;
    1065                 :            : 
    1066                 :            :     /**
    1067                 :            :      * Returns the schema name
    1068                 :            :      */
    1069                 :            :     QString schema() const;
    1070                 :            : 
    1071                 :            :     /**
    1072                 :            :      * Returns the table name
    1073                 :            :      */
    1074                 :            :     QString tableName() const;
    1075                 :            : 
    1076                 :            :     /**
    1077                 :            :      * Returns the connection URI
    1078                 :            :      */
    1079                 :            :     QString connectionUri() const;
    1080                 :            : 
    1081                 :            :     /**
    1082                 :            :      * Creates and returns a (possibly NULL) layer from the connection URI and schema/table information
    1083                 :            :      */
    1084                 :            :     QgsVectorLayer *layer() SIP_FACTORY;
    1085                 :            : 
    1086                 :            :     /**
    1087                 :            :      * Returns the (possibly NULL) properties of the table this fields belong to.
    1088                 :            :      * \since QGIS 3.16
    1089                 :            :      */
    1090                 :            :     QgsAbstractDatabaseProviderConnection::TableProperty *tableProperty() const;
    1091                 :            : 
    1092                 :            :   private:
    1093                 :            : 
    1094                 :            :     QString mSchema;
    1095                 :            :     QString mTableName;
    1096                 :            :     QString mConnectionUri;
    1097                 :            :     std::unique_ptr<QgsAbstractDatabaseProviderConnection::TableProperty> mTableProperty;
    1098                 :            : 
    1099                 :            : };
    1100                 :            : 
    1101                 :            : 
    1102                 :            : /**
    1103                 :            :  * \ingroup core
    1104                 :            :  * \brief A layer field item, information about the connection URI, the schema and the
    1105                 :            :  * table as well as the layer instance the field belongs to can be retrieved
    1106                 :            :  * from the parent QgsFieldsItem object.
    1107                 :            :  * \since QGIS 3.16
    1108                 :            : */
    1109                 :            : class CORE_EXPORT QgsFieldItem : public QgsDataItem
    1110                 :            : {
    1111                 :            :     Q_OBJECT
    1112                 :            :   public:
    1113                 :            : 
    1114                 :            :     /**
    1115                 :            :      * Constructor for QgsFieldItem, with the specified \a parent item and \a field.
    1116                 :            :      * \note parent item must be a QgsFieldsItem
    1117                 :            :      */
    1118                 :            :     QgsFieldItem( QgsDataItem *parent SIP_TRANSFERTHIS,
    1119                 :            :                   const QgsField &field );
    1120                 :            : 
    1121                 :            :     ~QgsFieldItem() override;
    1122                 :            : 
    1123                 :            :     QIcon icon() override;
    1124                 :            : 
    1125                 :            :     //QgsField field() const;
    1126                 :            : 
    1127                 :            : 
    1128                 :            :   private:
    1129                 :            : 
    1130                 :            :     const QgsField mField;
    1131                 :            : 
    1132                 :            : };
    1133                 :            : 
    1134                 :            : 
    1135                 :            : 
    1136                 :            : ///@cond PRIVATE
    1137                 :            : #ifndef SIP_RUN
    1138                 :            : 
    1139                 :            : /**
    1140                 :            :  * \ingroup core
    1141                 :            :  * \brief A directory item showing the current project directory.
    1142                 :            :  * \since QGIS 3.0
    1143                 :            : */
    1144                 :            : class CORE_EXPORT QgsProjectHomeItem : public QgsDirectoryItem
    1145                 :            : {
    1146                 :            :     Q_OBJECT
    1147                 :            : 
    1148                 :            :   public:
    1149                 :            : 
    1150                 :            :     QgsProjectHomeItem( QgsDataItem *parent, const QString &name, const QString &dirPath, const QString &path );
    1151                 :            : 
    1152                 :            :     QIcon icon() override;
    1153                 :            :     QVariant sortKey() const override;
    1154                 :            : 
    1155                 :            : };
    1156                 :            : 
    1157                 :            : /**
    1158                 :            :  * \ingroup core
    1159                 :            :  * \brief A directory item showing the a single favorite directory.
    1160                 :            :  * \since QGIS 3.0
    1161                 :            : */
    1162                 :            : Q_NOWARN_DEPRECATED_PUSH  // rename is deprecated
    1163                 :            : class CORE_EXPORT QgsFavoriteItem : public QgsDirectoryItem
    1164                 :            : {
    1165                 :            :     Q_OBJECT
    1166                 :            : 
    1167                 :            :   public:
    1168                 :            : 
    1169                 :            :     QgsFavoriteItem( QgsFavoritesItem *parent, const QString &name, const QString &dirPath, const QString &path );
    1170                 :            : 
    1171                 :            :     bool rename( const QString &name ) override;
    1172                 :            : 
    1173                 :            :   private:
    1174                 :            : 
    1175                 :            :     QgsFavoritesItem *mFavorites = nullptr;
    1176                 :            : };
    1177                 :            : Q_NOWARN_DEPRECATED_POP
    1178                 :            : 
    1179                 :            : #endif
    1180                 :            : ///@endcond
    1181                 :            : 
    1182                 :            : #endif // QGSDATAITEM_H
    1183                 :            : 
    1184                 :            : 

Generated by: LCOV version 1.14