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
|