LCOV - code coverage report
Current view: top level - core - qgsapplication.h (source / functions) Hit Total Coverage
Test: coverage.info.cleaned Lines: 1 2 50.0 %
Date: 2021-03-26 12:19:53 Functions: 0 0 -
Branches: 0 0 -

           Branch data     Line data    Source code
       1                 :            : /***************************************************************************
       2                 :            :     qgsapplication.h - Accessors for application-wide data
       3                 :            :      --------------------------------------
       4                 :            :     Date                 : 02-Jan-2006
       5                 :            :     Copyright            : (C) 2006 by Tom Elwertowski
       6                 :            :     Email                : telwertowski at users dot sourceforge dot net
       7                 :            :  ***************************************************************************
       8                 :            :  *                                                                         *
       9                 :            :  *   This program is free software; you can redistribute it and/or modify  *
      10                 :            :  *   it under the terms of the GNU General Public License as published by  *
      11                 :            :  *   the Free Software Foundation; either version 2 of the License, or     *
      12                 :            :  *   (at your option) any later version.                                   *
      13                 :            :  *                                                                         *
      14                 :            :  ***************************************************************************/
      15                 :            : #ifndef QGSAPPLICATION_H
      16                 :            : #define QGSAPPLICATION_H
      17                 :            : 
      18                 :            : #include "qgis_core.h"
      19                 :            : #include <QApplication>
      20                 :            : #include <QEvent>
      21                 :            : #include <QStringList>
      22                 :            : #include <QColor>
      23                 :            : 
      24                 :            : #include "qgis_sip.h"
      25                 :            : #include "qgsconfig.h"
      26                 :            : #include "qgstranslationcontext.h"
      27                 :            : 
      28                 :            : class Qgs3DRendererRegistry;
      29                 :            : class QgsActionScopeRegistry;
      30                 :            : class QgsAnnotationItemRegistry;
      31                 :            : class QgsRuntimeProfiler;
      32                 :            : class QgsTaskManager;
      33                 :            : class QgsFieldFormatterRegistry;
      34                 :            : class QgsColorSchemeRegistry;
      35                 :            : class QgsPaintEffectRegistry;
      36                 :            : class QgsProjectStorageRegistry;
      37                 :            : class QgsLocalizedDataPathRegistry;
      38                 :            : class QgsRendererRegistry;
      39                 :            : class QgsSvgCache;
      40                 :            : class QgsImageCache;
      41                 :            : class QgsSourceCache;
      42                 :            : class QgsSymbolLayerRegistry;
      43                 :            : class QgsRasterRendererRegistry;
      44                 :            : class QgsGpsConnectionRegistry;
      45                 :            : class QgsDataItemProviderRegistry;
      46                 :            : class QgsPluginLayerRegistry;
      47                 :            : class QgsClassificationMethodRegistry;
      48                 :            : class QgsMessageLog;
      49                 :            : class QgsProcessingRegistry;
      50                 :            : class QgsAnnotationRegistry;
      51                 :            : class QgsUserProfile;
      52                 :            : class QgsUserProfileManager;
      53                 :            : class QgsPageSizeRegistry;
      54                 :            : class QgsLayoutItemRegistry;
      55                 :            : class QgsAuthManager;
      56                 :            : class QgsNetworkContentFetcherRegistry;
      57                 :            : class QgsValidityCheckRegistry;
      58                 :            : class QTranslator;
      59                 :            : class QgsCalloutRegistry;
      60                 :            : class QgsBookmarkManager;
      61                 :            : class QgsStyleModel;
      62                 :            : class QgsNumericFormatRegistry;
      63                 :            : class QgsConnectionRegistry;
      64                 :            : class QgsScaleBarRendererRegistry;
      65                 :            : class Qgs3DSymbolRegistry;
      66                 :            : class QgsPointCloudRendererRegistry;
      67                 :            : class QgsTileDownloadManager;
      68                 :            : class QgsCoordinateReferenceSystemRegistry;
      69                 :            : 
      70                 :            : /**
      71                 :            :  * \ingroup core
      72                 :            :  * \brief Extends QApplication to provide access to QGIS specific resources such
      73                 :            :  * as theme paths, database paths etc.
      74                 :            :  *
      75                 :            :  * This is a subclass of QApplication and should be instantiated in place of
      76                 :            :   QApplication. Most methods are static in keeping with the design of QApplication.
      77                 :            : 
      78                 :            :   This class hides platform-specific path information and provides
      79                 :            :   a portable way of referencing specific files and directories.
      80                 :            :   Ideally, hard-coded paths should appear only here and not in other modules
      81                 :            :   so that platform-conditional code is minimized and paths are easier
      82                 :            :   to change due to centralization.
      83                 :            :  */
      84                 :            : 
      85                 :            : class CORE_EXPORT QgsApplication : public QApplication
      86                 :            : {
      87                 :            : 
      88                 :            : #ifdef SIP_RUN
      89                 :            :     % TypeCode
      90                 :            :     // Convert a Python argv list to a conventional C argc count and argv array.
      91                 :            :     static char **qtgui_ArgvToC( PyObject *argvlist, int &argc )
      92                 :            :     {
      93                 :            :       char **argv;
      94                 :            : 
      95                 :            :       argc = PyList_GET_SIZE( argvlist );
      96                 :            : 
      97                 :            :       // Allocate space for two copies of the argument pointers, plus the
      98                 :            :       // terminating NULL.
      99                 :            :       if ( ( argv = ( char ** )sipMalloc( 2 * ( argc + 1 ) * sizeof( char * ) ) ) == NULL )
     100                 :            :         return NULL;
     101                 :            : 
     102                 :            :       // Convert the list.
     103                 :            :       for ( int a = 0; a < argc; ++a )
     104                 :            :       {
     105                 :            :         char *arg;
     106                 :            :         // Get the argument and allocate memory for it.
     107                 :            :         if ( ( arg = PyBytes_AsString( PyList_GET_ITEM( argvlist, a ) ) ) == NULL ||
     108                 :            :              ( argv[a] = ( char * )sipMalloc( strlen( arg ) + 1 ) ) == NULL )
     109                 :            :           return NULL;
     110                 :            :         // Copy the argument and save a pointer to it.
     111                 :            :         strcpy( argv[a], arg );
     112                 :            :         argv[a + argc + 1] = argv[a];
     113                 :            :       }
     114                 :            : 
     115                 :            :       argv[argc + argc + 1] = argv[argc] = NULL;
     116                 :            : 
     117                 :            :       return argv;
     118                 :            :     }
     119                 :            : 
     120                 :            :     // Remove arguments from the Python argv list that have been removed from the
     121                 :            :     // C argv array.
     122                 :            :     static void qtgui_UpdatePyArgv( PyObject *argvlist, int argc, char **argv )
     123                 :            :     {
     124                 :            :       for ( int a = 0, na = 0; a < argc; ++a )
     125                 :            :       {
     126                 :            :         // See if it was removed.
     127                 :            :         if ( argv[na] == argv[a + argc + 1] )
     128                 :            :           ++na;
     129                 :            :         else
     130                 :            :           PyList_SetSlice( argvlist, na, na + 1, NULL );
     131                 :            :       }
     132                 :            :     }
     133                 :            :     % End
     134                 :            : #endif
     135                 :            : 
     136                 :        171 :     Q_OBJECT
     137                 :            : 
     138                 :            :   public:
     139                 :            : 
     140                 :            :     /**
     141                 :            :      * The StyleSheetType enum represents the stylesheet type that
     142                 :            :      * a widget supports.
     143                 :            :      *
     144                 :            :      * Is is used by widgets that display HTML content to retrieve
     145                 :            :      * the standard QGIS stylesheet, maintained according to QGIS
     146                 :            :      * visual guidelines.
     147                 :            :      */
     148                 :            :     enum StyleSheetType
     149                 :            :     {
     150                 :            :       Qt, //! StyleSheet for Qt GUI widgets (based on QLabel or QTextBrowser), supports basic CSS and Qt extensions
     151                 :            :       WebBrowser, //! StyleSheet for embedded browsers (QtWebKit), supports full standard CSS
     152                 :            :     };
     153                 :            : 
     154                 :            :     static const char *QGIS_ORGANIZATION_NAME;
     155                 :            :     static const char *QGIS_ORGANIZATION_DOMAIN;
     156                 :            :     static const char *QGIS_APPLICATION_NAME;
     157                 :            : #ifndef SIP_RUN
     158                 :            :     QgsApplication( int &argc, char **argv, bool GUIenabled, const QString &profileFolder = QString(), const QString &platformName = "desktop" );
     159                 :            : #else
     160                 :            :     QgsApplication( SIP_PYLIST argv, bool GUIenabled, QString profileFolder = QString(), QString platformName = "desktop" ) / PostHook = __pyQtQAppHook__ / [( int &argc, char **argv, bool GUIenabled, const QString &profileFolder = QString(), const QString &platformName = "desktop" )];
     161                 :            :     % MethodCode
     162                 :            :     // The Python interface is a list of argument strings that is modified.
     163                 :            : 
     164                 :            :     int argc;
     165                 :            :     char **argv;
     166                 :            : 
     167                 :            :     // Convert the list.
     168                 :            :     if ( ( argv = qtgui_ArgvToC( a0, argc ) ) == NULL )
     169                 :            :       sipIsErr = 1;
     170                 :            :     else
     171                 :            :     {
     172                 :            :       // Create it now the arguments are right.
     173                 :            :       static int nargc = argc;
     174                 :            : 
     175                 :            :       sipCpp = new sipQgsApplication( nargc, argv, a1, *a2, *a3 );
     176                 :            : 
     177                 :            :       // Now modify the original list.
     178                 :            :       qtgui_UpdatePyArgv( a0, argc, argv );
     179                 :            :     }
     180                 :            :     % End
     181                 :            : #endif
     182                 :            : 
     183                 :            :     ~QgsApplication() override;
     184                 :            : 
     185                 :            :     /**
     186                 :            :      * Returns the singleton instance of the QgsApplication.
     187                 :            :      *
     188                 :            :      * \since QGIS 3.0
     189                 :            :      */
     190                 :            :     static QgsApplication *instance();
     191                 :            : 
     192                 :            :     /**
     193                 :            :      * This method initializes paths etc for QGIS. Called by the ctor or call it manually
     194                 :            :      * when your app does not extend the QApplication class.
     195                 :            :      * \note you will probably want to call initQgis too to load the providers in
     196                 :            :      * the above case.
     197                 :            :      * \note not available in Python bindings
     198                 :            :     */
     199                 :            :     static void init( QString profileFolder = QString() ) SIP_SKIP;
     200                 :            : 
     201                 :            :     //! Watch for QFileOpenEvent.
     202                 :            :     bool event( QEvent *event ) override;
     203                 :            : 
     204                 :            :     //! Catch exceptions when sending event to receiver.
     205                 :            :     bool notify( QObject *receiver, QEvent *event ) override;
     206                 :            : 
     207                 :            :     //! Sets the FileOpen event receiver
     208                 :            :     static void setFileOpenEventReceiver( QObject *receiver );
     209                 :            : 
     210                 :            :     /**
     211                 :            :      * Set the active theme to the specified theme.
     212                 :            :      * The theme name should be a single word e.g. 'default','classic'.
     213                 :            :      * The theme search path usually will be pkgDataPath + "/themes/" + themName + "/"
     214                 :            :      * but plugin writers etc can use themeName() as a basis for searching
     215                 :            :      * for resources in their own datastores e.g. a Qt4 resource bundle.
     216                 :            :      * \note A basic test will be carried out to ensure the theme search path
     217                 :            :      * based on the supplied theme name exists. If it does not the theme name will
     218                 :            :      * be reverted to 'default'.
     219                 :            :      */
     220                 :            :     static void setThemeName( const QString &themeName );
     221                 :            : 
     222                 :            :     /**
     223                 :            :      * Calculate the application pkg path
     224                 :            :      * \return the resolved pkg path
     225                 :            :      */
     226                 :            :     static QString resolvePkgPath();
     227                 :            : 
     228                 :            :     /**
     229                 :            :      * Set the active theme to the specified theme.
     230                 :            :      * The theme name should be a single word e.g. 'default','classic'.
     231                 :            :      * The theme search path usually will be pkgDataPath + "/themes/" + themName + "/"
     232                 :            :      * but plugin writers etc can use this method as a basis for searching
     233                 :            :      * for resources in their own datastores e.g. a Qt4 resource bundle.
     234                 :            :      */
     235                 :            :     static QString themeName();
     236                 :            : 
     237                 :            :     /**
     238                 :            :      * \brief Set the current UI theme used to style the interface.  Use uiThemes() to
     239                 :            :      * find valid themes to use. Variables found in variables.qss will be added to the stylesheet
     240                 :            :      * on load.
     241                 :            :      * \param themeName The name of the theme.
     242                 :            :      * \note using an invalid theme name will reset to default
     243                 :            :      */
     244                 :            :     static void setUITheme( const QString &themeName );
     245                 :            : 
     246                 :            :     /**
     247                 :            :      * \brief All themes found in ~/.qgis3/themes folder.
     248                 :            :      * The path is to the root folder for the theme
     249                 :            :      * \returns A hash of theme name and theme path. Valid theme folders contain style.qss
     250                 :            :      * \note Valid theme folders must contain a style.qss file.
     251                 :            :      */
     252                 :            :     static QHash<QString, QString> uiThemes();
     253                 :            : 
     254                 :            :     //! Returns the path to the authors file.
     255                 :            :     static QString authorsFilePath();
     256                 :            : 
     257                 :            :     /**
     258                 :            :      * Returns the path to the contributors file.
     259                 :            :      * Contributors are people who have submitted patches
     260                 :            :      * but don't have commit access.
     261                 :            :     */
     262                 :            :     static QString contributorsFilePath();
     263                 :            : 
     264                 :            :     /**
     265                 :            :      * Returns the path to the developers map file.
     266                 :            :      * The developers map was created by using leaflet framework,
     267                 :            :      * it shows the contributors.json file.
     268                 :            :      * \since QGIS 2.7
     269                 :            :     */
     270                 :            :     static QString developersMapFilePath();
     271                 :            : 
     272                 :            :     //! Returns the path to the sponsors file.
     273                 :            :     static QString sponsorsFilePath();
     274                 :            : 
     275                 :            :     //! Returns the path to the donors file.
     276                 :            :     static QString donorsFilePath();
     277                 :            : 
     278                 :            :     //! Returns the path to the server resources directory.
     279                 :            :     static QString serverResourcesPath();
     280                 :            : 
     281                 :            :     /**
     282                 :            :      * Returns the path to the sponsors file.
     283                 :            :      */
     284                 :            :     static QString translatorsFilePath();
     285                 :            : 
     286                 :            :     /**
     287                 :            :       Returns the path to the licence file.
     288                 :            :      */
     289                 :            :     static QString licenceFilePath();
     290                 :            : 
     291                 :            :     //! Returns the path to the translation directory.
     292                 :            :     static QString i18nPath();
     293                 :            : 
     294                 :            :     /**
     295                 :            :      * Returns the path to the metadata directory.
     296                 :            :     * \since QGIS 3.0
     297                 :            :     */
     298                 :            :     static QString metadataPath();
     299                 :            : 
     300                 :            :     //! Returns the path to the master qgis.db file.
     301                 :            :     static QString qgisMasterDatabaseFilePath();
     302                 :            : 
     303                 :            :     //! Returns the path to the settings directory in user's home dir
     304                 :            :     static QString qgisSettingsDirPath();
     305                 :            : 
     306                 :            :     //! Returns the path to the user qgis.db file.
     307                 :            :     static QString qgisUserDatabaseFilePath();
     308                 :            : 
     309                 :            :     //! Returns the path to the user authentication database file: qgis-auth.db.
     310                 :            :     static QString qgisAuthDatabaseFilePath();
     311                 :            : 
     312                 :            :     //! Returns the path to the splash screen image directory.
     313                 :            :     static QString splashPath();
     314                 :            : 
     315                 :            :     //! Returns the path to the icons image directory.
     316                 :            :     static QString iconsPath();
     317                 :            : 
     318                 :            :     //! Returns the path to the srs.db file.
     319                 :            :     static QString srsDatabaseFilePath();
     320                 :            : 
     321                 :            :     /**
     322                 :            :      * Sets the paths to svg directories and invalidates the svg path list cache.
     323                 :            :      *
     324                 :            :      * \since QGIS 3.18
     325                 :            :      */
     326                 :            :     static void setSvgPaths( const QStringList &svgPaths );
     327                 :            : 
     328                 :            :     //! Returns the paths to svg directories.
     329                 :            :     static QStringList svgPaths();
     330                 :            : 
     331                 :            :     /**
     332                 :            :      * Returns the paths to layout template directories.
     333                 :            :      * \since QGIS 3.0
     334                 :            :      */
     335                 :            :     static QStringList layoutTemplatePaths();
     336                 :            : 
     337                 :            :     //! Returns the system environment variables passed to application.
     338                 :            :     static QMap<QString, QString> systemEnvVars();
     339                 :            : 
     340                 :            :     //! Returns the path to the application prefix directory.
     341                 :            :     static QString prefixPath();
     342                 :            : 
     343                 :            :     //! Returns the path to the application plugin directory.
     344                 :            :     static QString pluginPath();
     345                 :            : 
     346                 :            :     //! Returns the common root path of all application data directories.
     347                 :            :     static QString pkgDataPath();
     348                 :            : 
     349                 :            :     //! Returns the path to the currently active theme directory.
     350                 :            :     static QString activeThemePath();
     351                 :            : 
     352                 :            :     //! Returns the path to the default theme directory.
     353                 :            :     static QString defaultThemePath();
     354                 :            : 
     355                 :            :     /**
     356                 :            :      * Returns path to the desired icon file.
     357                 :            :      * First it tries to use the active theme path, then default theme path
     358                 :            :      */
     359                 :            :     static QString iconPath( const QString &iconFile );
     360                 :            : 
     361                 :            :     /**
     362                 :            :      * Helper to get a theme icon. It will fall back to the
     363                 :            :      * default theme if the active theme does not have the required icon.
     364                 :            :      */
     365                 :            :     static QIcon getThemeIcon( const QString &name );
     366                 :            : 
     367                 :            :     /**
     368                 :            :      * \brief The Cursor enum defines constants for QGIS custom
     369                 :            :      * cursors.
     370                 :            :      */
     371                 :            :     enum Cursor
     372                 :            :     {
     373                 :            :       ZoomIn, //!< Zoom in
     374                 :            :       ZoomOut, //!< Zoom out
     375                 :            :       Identify, //!< Identify: obtain information about the object
     376                 :            :       CrossHair, //!< Precisely identify a point on the canvas
     377                 :            :       CapturePoint, //!< Select and capture a point or a feature
     378                 :            :       Select, //!< Select a rectangle
     379                 :            :       Sampler, //!< Color/Value picker
     380                 :            :     };
     381                 :            : 
     382                 :            :     /**
     383                 :            :      * Helper to get a theme cursor. It will fall back to the
     384                 :            :      * default theme if the active theme does not have the required icon.
     385                 :            :      * Cursors are automatically scaled to look like a 16px cursor on 96dpi
     386                 :            :      * screens.
     387                 :            :      */
     388                 :            :     static QCursor getThemeCursor( Cursor cursor );
     389                 :            : 
     390                 :            :     /**
     391                 :            :      * Helper to get a theme icon as a pixmap. It will fall back to the
     392                 :            :      * default theme if the active theme does not have the required icon.
     393                 :            :      *
     394                 :            :      * If \a foreColor or \a backColor are specified, then these colors will
     395                 :            :      * be used for parametrized colors in SVG files wherever available. If
     396                 :            :      * colors are specified then the \a size argument also must be set.
     397                 :            :      */
     398                 :            :     static QPixmap getThemePixmap( const QString &name, const QColor &foreColor = QColor(), const QColor &backColor = QColor(), int size = 16 );
     399                 :            : 
     400                 :            :     //! Returns the path to user's style.
     401                 :            :     static QString userStylePath();
     402                 :            : 
     403                 :            :     //! Returns the short name regular expression for line edit validator
     404                 :            :     static QRegExp shortNameRegExp();
     405                 :            : 
     406                 :            :     /**
     407                 :            :      * Returns the user's operating system login account name.
     408                 :            :      * \see userFullName()
     409                 :            :      * \since QGIS 2.14
     410                 :            :      */
     411                 :            :     static QString userLoginName();
     412                 :            : 
     413                 :            :     /**
     414                 :            :      * Returns the user's operating system login account full display name.
     415                 :            :      * \see userLoginName()
     416                 :            :      * \since QGIS 2.14
     417                 :            :      */
     418                 :            :     static QString userFullName();
     419                 :            : 
     420                 :            :     /**
     421                 :            :      * Returns a string name of the operating system QGIS is running on.
     422                 :            :      * \see platform()
     423                 :            :      * \since QGIS 2.14
     424                 :            :      */
     425                 :            :     static QString osName();
     426                 :            : 
     427                 :            :     /**
     428                 :            :      * Returns the QGIS platform name, e.g., "desktop" or "server".
     429                 :            :      * \see osName()
     430                 :            :      * \since QGIS 2.14
     431                 :            :      */
     432                 :            :     static QString platform();
     433                 :            : 
     434                 :            :     /**
     435                 :            :      * Returns the QGIS locale.
     436                 :            :      * \since QGIS 3.0
     437                 :            :      */
     438                 :            :     static QString locale();
     439                 :            : 
     440                 :            :     //! Returns the path to user's themes folder
     441                 :            :     static QString userThemesFolder();
     442                 :            : 
     443                 :            :     //! Returns the path to default style (works as a starting point).
     444                 :            :     static QString defaultStylePath();
     445                 :            : 
     446                 :            :     //! Returns the path to default themes folder from install (works as a starting point).
     447                 :            :     static QString defaultThemesFolder();
     448                 :            : 
     449                 :            :     //! Returns the path containing qgis_core, qgis_gui, qgispython (and other) libraries
     450                 :            :     static QString libraryPath();
     451                 :            : 
     452                 :            :     //! Returns the path with utility executables (help viewer, crssync, ...)
     453                 :            :     static QString libexecPath();
     454                 :            : 
     455                 :            :     /**
     456                 :            :      * Returns the path where QML components are installed for QGIS Quick library. Returns
     457                 :            :      * empty string when QGIS is built without Quick support
     458                 :            :      *
     459                 :            :      * \since QGIS 3.2
     460                 :            :      */
     461                 :            :     static QString qmlImportPath();
     462                 :            : 
     463                 :            :     //! Alters prefix path - used by 3rd party apps
     464                 :            :     static void setPrefixPath( const QString &prefixPath, bool useDefaultPaths = false );
     465                 :            : 
     466                 :            :     //! Alters plugin path - used by 3rd party apps
     467                 :            :     static void setPluginPath( const QString &pluginPath );
     468                 :            : 
     469                 :            :     //! Alters pkg data path - used by 3rd party apps
     470                 :            :     static void setPkgDataPath( const QString &pkgDataPath );
     471                 :            : 
     472                 :            :     //! Alters default svg paths - used by 3rd party apps.
     473                 :            :     static void setDefaultSvgPaths( const QStringList &pathList );
     474                 :            : 
     475                 :            :     //! Alters authentication data base directory path - used by 3rd party apps
     476                 :            :     static void setAuthDatabaseDirPath( const QString &authDbDirPath );
     477                 :            : 
     478                 :            :     //! loads providers
     479                 :            :     static void initQgis();
     480                 :            : 
     481                 :            :     //! initialize qgis.db
     482                 :            :     static bool createDatabase( QString *errorMessage = nullptr );
     483                 :            : 
     484                 :            :     //! Create the users theme folder
     485                 :            :     static bool createThemeFolder();
     486                 :            : 
     487                 :            :     //! deletes provider registry and map layer registry
     488                 :            :     static void exitQgis();
     489                 :            : 
     490                 :            :     //! Gets application icon
     491                 :            :     static QString appIconPath();
     492                 :            : 
     493                 :            :     //! Constants for endian-ness
     494                 :            :     enum endian_t
     495                 :            :     {
     496                 :            :       XDR = 0,  // network, or big-endian, byte order
     497                 :            :       NDR = 1   // little-endian byte order
     498                 :            :     };
     499                 :            : 
     500                 :            :     //! Returns whether this machine uses big or little endian
     501                 :            :     static endian_t endian();
     502                 :            : 
     503                 :            :     /**
     504                 :            :      * Returns a css style sheet for reports, the \a styleSheetType argument
     505                 :            :      * determines what type of stylesheet is supported by the widget.
     506                 :            :      *
     507                 :            :      * Typically you will use this method by doing:
     508                 :            :      * QString myStyle = QgsApplication::reportStyleSheet();
     509                 :            :      * textBrowserReport->document()->setDefaultStyleSheet(myStyle);
     510                 :            :      * if you are using a QgsWebView you will need to manually inject
     511                 :            :      * the CSS into a head -> script tag instead.
     512                 :            :      *
     513                 :            :      * \returns the stylesheet CSS rules.
     514                 :            :      * \note if styleSheetType equals StyleSheetType::Qt you can use the special Qt extensions too,
     515                 :            :      * for example the gradient fills for backgrounds.
     516                 :            :      */
     517                 :            :     static QString reportStyleSheet( QgsApplication::StyleSheetType styleSheetType = QgsApplication::StyleSheetType::Qt );
     518                 :            : 
     519                 :            :     /**
     520                 :            :      * Convenience function to get a summary of the paths used in this
     521                 :            :      * application instance useful for debugging mainly.
     522                 :            :     */
     523                 :            :     static QString showSettings();
     524                 :            : 
     525                 :            :     /**
     526                 :            :      * Register OGR drivers ensuring this only happens once.
     527                 :            :      * This is a workaround for an issue with older gdal versions that
     528                 :            :      * caused duplicate driver name entries to appear in the list
     529                 :            :      * of registered drivers when QgsApplication::registerOgrDrivers was called multiple
     530                 :            :      * times.
     531                 :            :      */
     532                 :            :     static void registerOgrDrivers();
     533                 :            : 
     534                 :            :     //! Converts absolute path to path relative to target
     535                 :            :     static QString absolutePathToRelativePath( const QString &apath, const QString &targetPath );
     536                 :            :     //! Converts path relative to target to an absolute path
     537                 :            :     static QString relativePathToAbsolutePath( const QString &rpath, const QString &targetPath );
     538                 :            : 
     539                 :            :     //! Indicates whether running from build directory (not installed)
     540                 :          0 :     static bool isRunningFromBuildDir() { return ABISYM( mRunningFromBuildDir ); }
     541                 :            : #if defined(_MSC_VER) && !defined(USING_NMAKE) && !defined(USING_NINJA)
     542                 :            :     static QString cfgIntDir() SIP_SKIP;
     543                 :            : #endif
     544                 :            :     //! Returns path to the source directory. Valid only when running from build directory
     545                 :            :     static QString buildSourcePath();
     546                 :            :     //! Returns path to the build output directory. Valid only when running from build directory
     547                 :            :     static QString buildOutputPath();
     548                 :            : 
     549                 :            :     /**
     550                 :            :      * Sets the GDAL_SKIP environment variable to include the specified driver
     551                 :            :      * and then calls GDALDriverManager::AutoSkipDrivers() to unregister it. The
     552                 :            :      * driver name should be the short format of the Gdal driver name e.g. GTIFF.
     553                 :            :      */
     554                 :            :     static void skipGdalDriver( const QString &driver );
     555                 :            : 
     556                 :            :     /**
     557                 :            :      * Sets the GDAL_SKIP environment variable to exclude the specified driver
     558                 :            :      * and then calls GDALDriverManager::AutoSkipDrivers() to unregister it. The
     559                 :            :      * driver name should be the short format of the Gdal driver name e.g. GTIFF.
     560                 :            :     */
     561                 :            :     static void restoreGdalDriver( const QString &driver );
     562                 :            : 
     563                 :            :     /**
     564                 :            :      * Returns the list of gdal drivers that should be skipped (based on
     565                 :            :      * GDAL_SKIP environment variable)
     566                 :            :      */
     567                 :            :     static QStringList skippedGdalDrivers();
     568                 :            : 
     569                 :            :     /**
     570                 :            :      * Apply the skipped drivers list to gdal
     571                 :            :      * \see skipGdalDriver
     572                 :            :      * \see restoreGdalDriver
     573                 :            :      * \see skippedGdalDrivers
     574                 :            :      */
     575                 :            :     static void applyGdalSkippedDrivers();
     576                 :            : 
     577                 :            :     /**
     578                 :            :      * Register gdal drivers, excluding the ones mentioned in "gdal/skipList" setting.
     579                 :            :      * \since QGIS 3.10
     580                 :            :      */
     581                 :            :     static void registerGdalDriversFromSettings();
     582                 :            : 
     583                 :            :     /**
     584                 :            :      * Returns the list of gdal drivers that have been disabled in the current session,
     585                 :            :      * and thus, for safety, should not be disabled right now, but at the
     586                 :            :      * next application restart.
     587                 :            :      * \since QGIS 3.10
     588                 :            :      */
     589                 :            :     static QStringList deferredSkippedGdalDrivers();
     590                 :            : 
     591                 :            :     /**
     592                 :            :      * Sets the list of gdal drivers that should be disabled (\a skippedGdalDrivers),
     593                 :            :      * but excludes for now the ones defines in \a deferredSkippedGdalDrivers.
     594                 :            :      * This writes the "gdal/skipList" setting.
     595                 :            :      * \since QGIS 3.10
     596                 :            :      */
     597                 :            :     static void setSkippedGdalDrivers( const QStringList &skippedGdalDrivers,
     598                 :            :                                        const QStringList &deferredSkippedGdalDrivers );
     599                 :            : 
     600                 :            :     /**
     601                 :            :      * Gets maximum concurrent thread count
     602                 :            :      * \since QGIS 2.4
     603                 :            :     */
     604                 :            :     static int maxThreads();
     605                 :            : 
     606                 :            :     /**
     607                 :            :      * Set maximum concurrent thread count
     608                 :            :      * \note must be between 1 and \#cores, -1 means use all available cores
     609                 :            :      * \since QGIS 2.4
     610                 :            :     */
     611                 :            :     static void setMaxThreads( int maxThreads );
     612                 :            : 
     613                 :            :     /**
     614                 :            :      * Returns the application's task manager, used for managing application
     615                 :            :      * wide background task handling.
     616                 :            :      * \since QGIS 3.0
     617                 :            :      */
     618                 :            :     static QgsTaskManager *taskManager();
     619                 :            : 
     620                 :            :     /**
     621                 :            :      * Returns the application's color scheme registry, used for managing color schemes.
     622                 :            :      * \since QGIS 3.0
     623                 :            :      */
     624                 :            :     static QgsColorSchemeRegistry *colorSchemeRegistry() SIP_KEEPREFERENCE;
     625                 :            : 
     626                 :            :     /**
     627                 :            :      * Returns the application's paint effect registry, used for managing paint effects.
     628                 :            :      * \since QGIS 3.0
     629                 :            :      */
     630                 :            :     static QgsPaintEffectRegistry *paintEffectRegistry() SIP_KEEPREFERENCE;
     631                 :            : 
     632                 :            :     /**
     633                 :            :      * Returns the application's renderer registry, used for managing vector layer renderers.
     634                 :            :      * \since QGIS 3.0
     635                 :            :      */
     636                 :            :     static QgsRendererRegistry *rendererRegistry() SIP_KEEPREFERENCE;
     637                 :            : 
     638                 :            :     /**
     639                 :            :      * Returns the application's raster renderer registry, used for managing raster layer renderers.
     640                 :            :      * \note not available in Python bindings
     641                 :            :      * \since QGIS 3.0
     642                 :            :      */
     643                 :            :     static QgsRasterRendererRegistry *rasterRendererRegistry() SIP_SKIP;
     644                 :            : 
     645                 :            :     /**
     646                 :            :      * Returns the application's point cloud renderer registry, used for managing point cloud layer 2D renderers.
     647                 :            :      * \since QGIS 3.18
     648                 :            :      */
     649                 :            :     static QgsPointCloudRendererRegistry *pointCloudRendererRegistry() SIP_KEEPREFERENCE;
     650                 :            : 
     651                 :            :     /**
     652                 :            :      * Returns the application's data item provider registry, which keeps a list of data item
     653                 :            :      * providers that may add items to the browser tree.
     654                 :            :      * \since QGIS 3.0
     655                 :            :      */
     656                 :            :     static QgsDataItemProviderRegistry *dataItemProviderRegistry() SIP_KEEPREFERENCE;
     657                 :            : 
     658                 :            :     /**
     659                 :            :      * Returns the application's coordinate reference system (CRS) registry, which handles
     660                 :            :      * known CRS definitions (including user-defined CRSes).
     661                 :            :      *
     662                 :            :      * \since QGIS 3.18
     663                 :            :      */
     664                 :            :     static QgsCoordinateReferenceSystemRegistry *coordinateReferenceSystemRegistry() SIP_KEEPREFERENCE;
     665                 :            : 
     666                 :            :     /**
     667                 :            :      * Returns the application's SVG cache, used for caching SVG images and handling parameter replacement
     668                 :            :      * within SVG files.
     669                 :            :      *
     670                 :            :      * \see imageCache()
     671                 :            :      * \since QGIS 3.0
     672                 :            :      */
     673                 :            :     static QgsSvgCache *svgCache();
     674                 :            : 
     675                 :            :     /**
     676                 :            :      * Returns the application's image cache, used for caching resampled versions of raster images.
     677                 :            :      *
     678                 :            :      * \see svgCache()
     679                 :            :      * \since QGIS 3.6
     680                 :            :      */
     681                 :            :     static QgsImageCache *imageCache();
     682                 :            : 
     683                 :            :     /**
     684                 :            :      * Returns the application's source cache, used for caching embedded and remote source strings as local files
     685                 :            :      *
     686                 :            :      * \since QGIS 3.16
     687                 :            :      */
     688                 :            :     static QgsSourceCache *sourceCache();
     689                 :            : 
     690                 :            :     /**
     691                 :            :      * Returns the application's network content registry used for fetching temporary files during QGIS session
     692                 :            :      * \since QGIS 3.2
     693                 :            :      */
     694                 :            :     static QgsNetworkContentFetcherRegistry *networkContentFetcherRegistry() SIP_KEEPREFERENCE;
     695                 :            : 
     696                 :            :     /**
     697                 :            :      * Returns the application's validity check registry, used for managing validity checks.
     698                 :            :      * \since QGIS 3.6
     699                 :            :      */
     700                 :            :     static QgsValidityCheckRegistry *validityCheckRegistry() SIP_KEEPREFERENCE;
     701                 :            : 
     702                 :            :     /**
     703                 :            :      * Returns the application's symbol layer registry, used for managing symbol layers.
     704                 :            :      * \since QGIS 3.0
     705                 :            :      */
     706                 :            :     static QgsSymbolLayerRegistry *symbolLayerRegistry() SIP_KEEPREFERENCE;
     707                 :            : 
     708                 :            :     /**
     709                 :            :      * Returns the application's callout registry, used for managing callout types.
     710                 :            :      * \since QGIS 3.10
     711                 :            :      */
     712                 :            :     static QgsCalloutRegistry *calloutRegistry() SIP_KEEPREFERENCE;
     713                 :            : 
     714                 :            :     /**
     715                 :            :      * Returns the application's layout item registry, used for layout item types.
     716                 :            :      * \since QGIS 3.0
     717                 :            :      */
     718                 :            :     static QgsLayoutItemRegistry *layoutItemRegistry() SIP_KEEPREFERENCE;
     719                 :            : 
     720                 :            :     /**
     721                 :            :      * Returns the application's annotation item registry, used for annotation item types.
     722                 :            :      * \since QGIS 3.16
     723                 :            :      */
     724                 :            :     static QgsAnnotationItemRegistry *annotationItemRegistry() SIP_KEEPREFERENCE;
     725                 :            : 
     726                 :            :     /**
     727                 :            :      * Returns the application's GPS connection registry, used for managing GPS connections.
     728                 :            :      * \since QGIS 3.0
     729                 :            :      */
     730                 :            :     static QgsGpsConnectionRegistry *gpsConnectionRegistry() SIP_KEEPREFERENCE;
     731                 :            : 
     732                 :            :     /**
     733                 :            :      * Returns the application's plugin layer registry, used for managing plugin layer types.
     734                 :            :      * \since QGIS 3.0
     735                 :            :      */
     736                 :            :     static QgsPluginLayerRegistry *pluginLayerRegistry() SIP_KEEPREFERENCE;
     737                 :            : 
     738                 :            :     /**
     739                 :            :      * Returns the application's classification methods registry, used in graduated renderer
     740                 :            :      * \since QGIS 3.10
     741                 :            :      */
     742                 :            :     static QgsClassificationMethodRegistry *classificationMethodRegistry() SIP_KEEPREFERENCE;
     743                 :            : 
     744                 :            :     /**
     745                 :            :      * Returns the application's bookmark manager, used for storing installation-wide bookmarks.
     746                 :            :      * \since QGIS 3.10
     747                 :            :      */
     748                 :            :     static QgsBookmarkManager *bookmarkManager();
     749                 :            : 
     750                 :            :     /**
     751                 :            :      * Returns the application's tile download manager, used for download of map tiles when rendering.
     752                 :            :      * \note not available in Python bindings
     753                 :            :      * \since QGIS 3.18
     754                 :            :      */
     755                 :            :     static QgsTileDownloadManager *tileDownloadManager() SIP_SKIP;
     756                 :            : 
     757                 :            :     /**
     758                 :            :      * Returns a shared QgsStyleModel containing the default style library (see QgsStyle::defaultStyle()).
     759                 :            :      *
     760                 :            :      * Using this shared model instead of creating a new QgsStyleModel improves performance.
     761                 :            :      *
     762                 :            :      * \since QGIS 3.10
     763                 :            :      */
     764                 :            :     static QgsStyleModel *defaultStyleModel();
     765                 :            : 
     766                 :            :     /**
     767                 :            :      * Returns the application's message log.
     768                 :            :      * \since QGIS 3.0
     769                 :            :      */
     770                 :            :     static QgsMessageLog *messageLog();
     771                 :            : 
     772                 :            :     /**
     773                 :            :      * Returns the application's authentication manager instance
     774                 :            :      * \note this can be NULLPTR if called before initQgis
     775                 :            :      * \see initQgis
     776                 :            :      * \since QGIS 3.0
     777                 :            :      */
     778                 :            :     static QgsAuthManager *authManager();
     779                 :            : 
     780                 :            :     /**
     781                 :            :      * Returns the application's processing registry, used for managing processing providers,
     782                 :            :      * algorithms, and various parameters and outputs.
     783                 :            :      * \since QGIS 3.0
     784                 :            :      */
     785                 :            :     static QgsProcessingRegistry *processingRegistry();
     786                 :            : 
     787                 :            :     /**
     788                 :            :      * Returns the application's page size registry, used for managing layout page sizes.
     789                 :            :      * \since QGIS 3.0
     790                 :            :      */
     791                 :            :     static QgsPageSizeRegistry *pageSizeRegistry() SIP_KEEPREFERENCE;
     792                 :            : 
     793                 :            :     /**
     794                 :            :      * Returns the application's annotation registry, used for managing annotation types.
     795                 :            :      * \note not available in Python bindings
     796                 :            :      * \since QGIS 3.0
     797                 :            :      */
     798                 :            :     static QgsAnnotationRegistry *annotationRegistry() SIP_SKIP;
     799                 :            : 
     800                 :            :     /**
     801                 :            :      * Returns the action scope registry.
     802                 :            :      *
     803                 :            :      * \since QGIS 3.0
     804                 :            :      */
     805                 :            :     static QgsActionScopeRegistry *actionScopeRegistry() SIP_KEEPREFERENCE;
     806                 :            : 
     807                 :            :     /**
     808                 :            :      * Returns the application's connection registry, used for managing saved data provider connections.
     809                 :            :      * \since QGIS 3.14
     810                 :            :      */
     811                 :            :     static QgsConnectionRegistry *connectionRegistry();
     812                 :            : 
     813                 :            :     /**
     814                 :            :      * Returns the application runtime profiler.
     815                 :            :      * \since QGIS 3.0
     816                 :            :      */
     817                 :            :     static QgsRuntimeProfiler *profiler();
     818                 :            : 
     819                 :            :     /**
     820                 :            :      * Gets the registry of available numeric formats.
     821                 :            :      *
     822                 :            :      * \since QGIS 3.12
     823                 :            :      */
     824                 :            :     static QgsNumericFormatRegistry *numericFormatRegistry() SIP_KEEPREFERENCE;
     825                 :            : 
     826                 :            :     /**
     827                 :            :      * Gets the registry of available field formatters.
     828                 :            :      */
     829                 :            :     static QgsFieldFormatterRegistry *fieldFormatterRegistry() SIP_KEEPREFERENCE;
     830                 :            : 
     831                 :            :     /**
     832                 :            :      * Returns registry of available 3D renderers.
     833                 :            :      * \since QGIS 3.0
     834                 :            :      */
     835                 :            :     static Qgs3DRendererRegistry *renderer3DRegistry() SIP_KEEPREFERENCE;
     836                 :            : 
     837                 :            :     /**
     838                 :            :      * Returns registry of available 3D symbols.
     839                 :            :      * \since QGIS 3.16
     840                 :            :      */
     841                 :            :     static Qgs3DSymbolRegistry *symbol3DRegistry() SIP_KEEPREFERENCE;
     842                 :            : 
     843                 :            :     /**
     844                 :            :      * Gets the registry of available scalebar renderers.
     845                 :            :      *
     846                 :            :      * \since QGIS 3.14
     847                 :            :      */
     848                 :            :     static QgsScaleBarRendererRegistry *scaleBarRendererRegistry() SIP_KEEPREFERENCE;
     849                 :            : 
     850                 :            :     /**
     851                 :            :      * Returns registry of available project storage implementations.
     852                 :            :      * \since QGIS 3.2
     853                 :            :      */
     854                 :            :     static QgsProjectStorageRegistry *projectStorageRegistry() SIP_KEEPREFERENCE;
     855                 :            : 
     856                 :            :     /**
     857                 :            :      * Returns the registry of data repositories
     858                 :            :      * These are used as paths for basemaps, logos, etc. which can be referenced
     859                 :            :      * differently across work stations.
     860                 :            :      * \see QgsLocalizedDataPathRegistry
     861                 :            :      * \since QGIS 3.14
     862                 :            :      */
     863                 :            :     static QgsLocalizedDataPathRegistry *localizedDataPathRegistry() SIP_KEEPREFERENCE;
     864                 :            : 
     865                 :            :     /**
     866                 :            :      * This string is used to represent the value `NULL` throughout QGIS.
     867                 :            :      *
     868                 :            :      * In general, when passing values around, prefer to use a null QVariant
     869                 :            :      * `QVariant( field.type() )` or `QVariant( QVariant::Int )`. This value
     870                 :            :      * should only be used in the final presentation step when showing values
     871                 :            :      * in a widget or sending it to a web browser.
     872                 :            :      */
     873                 :            :     static QString nullRepresentation();
     874                 :            : 
     875                 :            :     /**
     876                 :            :      * \copydoc nullRepresentation()
     877                 :            :      */
     878                 :            :     static void setNullRepresentation( const QString &nullRepresentation );
     879                 :            : 
     880                 :            :     /**
     881                 :            :      * Custom expression variables for this application.
     882                 :            :      * This does not include generated variables (like system name, user name etc.)
     883                 :            :      *
     884                 :            :      * \see QgsExpressionContextUtils::globalScope().
     885                 :            :      * \since QGIS 3.0
     886                 :            :      */
     887                 :            :     static QVariantMap customVariables();
     888                 :            : 
     889                 :            :     /**
     890                 :            :      * Custom expression variables for this application.
     891                 :            :      * Do not include generated variables (like system name, user name etc.)
     892                 :            :      *
     893                 :            :      * \see QgsExpressionContextUtils::globalScope().
     894                 :            :      * \since QGIS 3.0
     895                 :            :      */
     896                 :            :     static void setCustomVariables( const QVariantMap &customVariables );
     897                 :            : 
     898                 :            :     /**
     899                 :            :      * Set a single custom expression variable.
     900                 :            :      *
     901                 :            :      * \since QGIS 3.0
     902                 :            :      */
     903                 :            :     static void setCustomVariable( const QString &name, const QVariant &value );
     904                 :            : 
     905                 :            :     /**
     906                 :            :      * Scales an icon size to compensate for display pixel density, making the icon
     907                 :            :      * size hi-dpi friendly, whilst still resulting in pixel-perfect sizes for low-dpi
     908                 :            :      * displays.
     909                 :            :      *
     910                 :            :      * \a standardSize should be set to a standard icon size, e.g. 16, 24, 48, etc.
     911                 :            :      *
     912                 :            :      * \since QGIS 3.16
     913                 :            :      */
     914                 :            :     static int scaleIconSize( int standardSize, bool applyDevicePixelRatio = false );
     915                 :            : 
     916                 :            :     /**
     917                 :            :      * The maximum number of concurrent connections per connections pool.
     918                 :            :      *
     919                 :            :      * \note QGIS may in some situations allocate more than this amount
     920                 :            :      *       of connections to avoid deadlocks.
     921                 :            :      *
     922                 :            :      * \since QGIS 3.4
     923                 :            :      */
     924                 :            :     int maxConcurrentConnectionsPerPool() const;
     925                 :            : 
     926                 :            :     /**
     927                 :            :      * Set translation
     928                 :            :      *
     929                 :            :      * \since QGIS 3.4
     930                 :            :      */
     931                 :            :     static void setTranslation( const QString &translation );
     932                 :            : 
     933                 :            :     /**
     934                 :            :      * Emits the signal to collect all the strings of .qgs to be included in ts file
     935                 :            :      *
     936                 :            :      * \since QGIS 3.4
     937                 :            :      */
     938                 :            :     void collectTranslatableObjects( QgsTranslationContext *translationContext );
     939                 :            : 
     940                 :            : #ifdef SIP_RUN
     941                 :            :     SIP_IF_FEATURE( ANDROID )
     942                 :            :     //dummy method to workaround sip generation issue
     943                 :            :     bool x11EventFilter( XEvent *event );
     944                 :            :     SIP_END
     945                 :            : #endif
     946                 :            : 
     947                 :            :   signals:
     948                 :            :     //! \note not available in Python bindings
     949                 :            :     void preNotify( QObject *receiver, QEvent *event, bool *done ) SIP_SKIP;
     950                 :            : 
     951                 :            :     /**
     952                 :            :      * Emitted whenever a custom global variable changes.
     953                 :            :      * \since QGIS 3.0
     954                 :            :      */
     955                 :            :     void customVariablesChanged();
     956                 :            : 
     957                 :            : 
     958                 :            :     /**
     959                 :            :      * \copydoc nullRepresentation()
     960                 :            :      */
     961                 :            :     void nullRepresentationChanged();
     962                 :            : 
     963                 :            :     /**
     964                 :            :      * Emitted when project strings which require translation are being collected for inclusion in a .ts file.
     965                 :            :      * In order to register translatable strings, connect to this signal and register the strings within the specified \a translationContext.
     966                 :            :      *
     967                 :            :      * \since QGIS 3.4
     968                 :            :      */
     969                 :            :     void requestForTranslatableObjects( QgsTranslationContext *translationContext );
     970                 :            : 
     971                 :            :   private:
     972                 :            : 
     973                 :            :     static void copyPath( const QString &src, const QString &dst );
     974                 :            :     static QObject *ABISYM( mFileOpenEventReceiver );
     975                 :            : 
     976                 :            :     static bool ABISYM( mInitialized );
     977                 :            : 
     978                 :            :     //! True when running from build directory, i.e. without 'make install'
     979                 :            :     static bool ABISYM( mRunningFromBuildDir );
     980                 :            : 
     981                 :            :     /**
     982                 :            :      * \since QGIS 2.4
     983                 :            :     */
     984                 :            :     static int ABISYM( sMaxThreads );
     985                 :            : 
     986                 :            :     QMap<QString, QIcon> mIconCache;
     987                 :            :     QMap<Cursor, QCursor> mCursorCache;
     988                 :            : 
     989                 :            :     QTranslator *mQgisTranslator = nullptr;
     990                 :            :     QTranslator *mQtTranslator = nullptr;
     991                 :            : 
     992                 :            :     QgsDataItemProviderRegistry *mDataItemProviderRegistry = nullptr;
     993                 :            :     QgsAuthManager *mAuthManager = nullptr;
     994                 :            : 
     995                 :            :     struct ApplicationMembers
     996                 :            :     {
     997                 :            :       QgsCoordinateReferenceSystemRegistry *mCrsRegistry = nullptr;
     998                 :            :       Qgs3DRendererRegistry *m3DRendererRegistry = nullptr;
     999                 :            :       Qgs3DSymbolRegistry *m3DSymbolRegistry = nullptr;
    1000                 :            :       QgsActionScopeRegistry *mActionScopeRegistry = nullptr;
    1001                 :            :       QgsAnnotationRegistry *mAnnotationRegistry = nullptr;
    1002                 :            :       QgsColorSchemeRegistry *mColorSchemeRegistry = nullptr;
    1003                 :            :       QgsLocalizedDataPathRegistry *mLocalizedDataPathRegistry = nullptr;
    1004                 :            :       QgsNumericFormatRegistry *mNumericFormatRegistry = nullptr;
    1005                 :            :       QgsFieldFormatterRegistry *mFieldFormatterRegistry = nullptr;
    1006                 :            :       QgsGpsConnectionRegistry *mGpsConnectionRegistry = nullptr;
    1007                 :            :       QgsNetworkContentFetcherRegistry *mNetworkContentFetcherRegistry = nullptr;
    1008                 :            :       QgsScaleBarRendererRegistry *mScaleBarRendererRegistry = nullptr;
    1009                 :            :       QgsValidityCheckRegistry *mValidityCheckRegistry = nullptr;
    1010                 :            :       QgsMessageLog *mMessageLog = nullptr;
    1011                 :            :       QgsPaintEffectRegistry *mPaintEffectRegistry = nullptr;
    1012                 :            :       QgsPluginLayerRegistry *mPluginLayerRegistry = nullptr;
    1013                 :            :       QgsClassificationMethodRegistry *mClassificationMethodRegistry = nullptr;
    1014                 :            :       QgsProcessingRegistry *mProcessingRegistry = nullptr;
    1015                 :            :       QgsConnectionRegistry *mConnectionRegistry = nullptr;
    1016                 :            :       QgsProjectStorageRegistry *mProjectStorageRegistry = nullptr;
    1017                 :            :       QgsPageSizeRegistry *mPageSizeRegistry = nullptr;
    1018                 :            :       QgsRasterRendererRegistry *mRasterRendererRegistry = nullptr;
    1019                 :            :       QgsRendererRegistry *mRendererRegistry = nullptr;
    1020                 :            :       QgsPointCloudRendererRegistry *mPointCloudRendererRegistry = nullptr;
    1021                 :            :       QgsSvgCache *mSvgCache = nullptr;
    1022                 :            :       QgsImageCache *mImageCache = nullptr;
    1023                 :            :       QgsSourceCache *mSourceCache = nullptr;
    1024                 :            :       QgsSymbolLayerRegistry *mSymbolLayerRegistry = nullptr;
    1025                 :            :       QgsCalloutRegistry *mCalloutRegistry = nullptr;
    1026                 :            :       QgsTaskManager *mTaskManager = nullptr;
    1027                 :            :       QgsLayoutItemRegistry *mLayoutItemRegistry = nullptr;
    1028                 :            :       QgsAnnotationItemRegistry *mAnnotationItemRegistry = nullptr;
    1029                 :            :       QgsUserProfileManager *mUserConfigManager = nullptr;
    1030                 :            :       QgsBookmarkManager *mBookmarkManager = nullptr;
    1031                 :            :       QgsTileDownloadManager *mTileDownloadManager = nullptr;
    1032                 :            :       QgsStyleModel *mStyleModel = nullptr;
    1033                 :            :       QString mNullRepresentation;
    1034                 :            :       QStringList mSvgPathCache;
    1035                 :            :       bool mSvgPathCacheValid = false;
    1036                 :            : 
    1037                 :            :       ApplicationMembers();
    1038                 :            :       ~ApplicationMembers();
    1039                 :            :     };
    1040                 :            : 
    1041                 :            :     // Applications members which belong to an instance of QgsApplication
    1042                 :            :     ApplicationMembers *mApplicationMembers = nullptr;
    1043                 :            :     // ... but in case QgsApplication is never instantiated (eg with custom designer widgets), we fall back to static members
    1044                 :            :     static ApplicationMembers *sApplicationMembers;
    1045                 :            : 
    1046                 :            :     static QgsAuthManager *sAuthManager;
    1047                 :            : 
    1048                 :            :     static ApplicationMembers *members();
    1049                 :            : 
    1050                 :            :     static void invalidateCaches();
    1051                 :            : };
    1052                 :            : 
    1053                 :            : // clazy:excludeall=qstring-allocations
    1054                 :            : 
    1055                 :            : #endif

Generated by: LCOV version 1.14