Slicer 5.6
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
qSlicerCoreApplication.h
Go to the documentation of this file.
1/*==============================================================================
2
3 Program: 3D Slicer
4
5 Copyright (c) Kitware Inc.
6
7 See COPYRIGHT.txt
8 or http://www.slicer.org/copyright/copyright.txt for details.
9
10 Unless required by applicable law or agreed to in writing, software
11 distributed under the License is distributed on an "AS IS" BASIS,
12 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 See the License for the specific language governing permissions and
14 limitations under the License.
15
16 This file was originally developed by Jean-Christophe Fillion-Robin, Kitware Inc.
17 and was partially funded by NIH grant 3P41RR013218-12S1
18
19==============================================================================*/
20
21#ifndef __qSlicerCoreApplication_h
22#define __qSlicerCoreApplication_h
23
24// Qt includes
25#include <QApplication>
26#include <QMetaType>
27#include <QProcessEnvironment>
28#include <QStringList>
29#include <QVariant>
30
31// CTK includes
32#include <ctkVTKObject.h>
33
34// SlicerCore includes
35#include "vtkSlicerConfigure.h" // For Slicer_USE_PYTHONQT
36#include "qSlicerBaseQTCoreExport.h"
37
38#ifdef Slicer_BUILD_DICOM_SUPPORT
39class ctkDICOMDatabase;
40#endif
41class ctkErrorLogAbstractModel;
42class QSettings;
45class qSlicerCoreApplicationPrivate;
47#ifdef Slicer_USE_PYTHONQT
49class ctkPythonConsole;
50#endif
51#ifdef Slicer_BUILD_EXTENSIONMANAGER_SUPPORT
53#endif
54#ifdef Slicer_BUILD_APPLICATIONUPDATE_SUPPORT
56#endif
63class vtkMRMLScene;
64
65class Q_SLICER_BASE_QTCORE_EXPORT qSlicerCoreApplication : public QApplication
66{
67 Q_OBJECT
68 QVTK_OBJECT
69 Q_ENUMS(ReturnCode)
70
71
75 Q_PROPERTY(QString slicerHome READ slicerHome CONSTANT)
76 Q_PROPERTY(QString defaultScenePath READ defaultScenePath WRITE setDefaultScenePath)
77 Q_PROPERTY(QString slicerSharePath READ slicerSharePath CONSTANT)
78 Q_PROPERTY(QString temporaryPath READ temporaryPath WRITE setTemporaryPath)
79 Q_PROPERTY(QString cachePath READ cachePath WRITE setCachePath)
80 Q_PROPERTY(QString startupWorkingPath READ startupWorkingPath CONSTANT)
81 Q_PROPERTY(QString launcherExecutableFilePath READ launcherExecutableFilePath CONSTANT)
82 Q_PROPERTY(QString launcherSettingsFilePath READ launcherSettingsFilePath CONSTANT)
83 Q_PROPERTY(QString slicerDefaultSettingsFilePath READ slicerDefaultSettingsFilePath CONSTANT)
84 Q_PROPERTY(QString slicerUserSettingsFilePath READ slicerUserSettingsFilePath CONSTANT)
85 Q_PROPERTY(QString slicerRevisionUserSettingsFilePath READ slicerRevisionUserSettingsFilePath CONSTANT)
86 Q_PROPERTY(QString extensionsInstallPath READ extensionsInstallPath WRITE setExtensionsInstallPath)
87 Q_PROPERTY(QString intDir READ intDir CONSTANT)
88 Q_PROPERTY(bool isInstalled READ isInstalled CONSTANT)
89 Q_PROPERTY(QString releaseType READ releaseType CONSTANT)
90 Q_PROPERTY(QString repositoryUrl READ repositoryUrl CONSTANT)
91 Q_PROPERTY(QString repositoryBranch READ repositoryBranch CONSTANT)
92 Q_PROPERTY(QString repositoryRevision READ repositoryRevision CONSTANT)
93 Q_PROPERTY(QString revision READ revision CONSTANT)
94 Q_PROPERTY(int majorVersion READ majorVersion CONSTANT)
95 Q_PROPERTY(int minorVersion READ minorVersion CONSTANT)
96 Q_PROPERTY(QLocale applicationLocale READ applicationLocale CONSTANT)
97 Q_PROPERTY(QString applicationLocaleName READ applicationLocaleName CONSTANT)
98 Q_PROPERTY(QString documentationBaseUrl READ documentationBaseUrl)
99 Q_PROPERTY(QString documentationVersion READ documentationVersion CONSTANT)
100 Q_PROPERTY(QString documentationLanguage READ documentationLanguage CONSTANT)
101 Q_PROPERTY(QString platform READ platform CONSTANT)
102 Q_PROPERTY(QString arch READ arch CONSTANT)
103 Q_PROPERTY(QString os READ os CONSTANT)
104 Q_PROPERTY(bool isCustomMainApplication READ isCustomMainApplication CONSTANT)
105 Q_PROPERTY(QString mainApplicationName READ mainApplicationName CONSTANT)
106 Q_PROPERTY(QString mainApplicationRepositoryUrl READ mainApplicationRepositoryUrl CONSTANT)
107 Q_PROPERTY(QString mainApplicationRepositoryRevision READ mainApplicationRepositoryRevision CONSTANT)
108 Q_PROPERTY(QString mainApplicationRevision READ mainApplicationRevision CONSTANT)
109 Q_PROPERTY(int mainApplicationMajorVersion READ mainApplicationMajorVersion CONSTANT)
110 Q_PROPERTY(int mainApplicationMinorVersion READ mainApplicationMinorVersion CONSTANT)
111 Q_PROPERTY(int mainApplicationPatchVersion READ mainApplicationPatchVersion CONSTANT)
112
113public:
114
115 typedef QApplication Superclass;
116 qSlicerCoreApplication(int &argc, char **argv);
118
122 static qSlicerCoreApplication* application();
123
127 {
128 AA_DisablePython = 1000,
129 AA_EnableTesting
130 };
131
133 static void setAttribute(qSlicerCoreApplication::ApplicationAttribute attribute, bool on = true);
134
137
154 Q_INVOKABLE QProcessEnvironment startupEnvironment() const;
155
157 QString startupWorkingPath() const;
158
169 Q_INVOKABLE QProcessEnvironment environment() const;
170
175 Q_INVOKABLE void setEnvironmentVariable(const QString& key, const QString& value);
176
178 Q_INVOKABLE bool isEnvironmentVariableValueSet(const QString& key, const QString& value);
179
182 Q_INVOKABLE void prependEnvironmentVariable(const QString& key, const QString& value, QChar separator = ';');
183
186 Q_INVOKABLE void appendEnvironmentVariable(const QString& key, const QString& value, QChar separator = ';');
187
190 void parseArguments(bool& exitWhenDone);
191
193 ExitNotRequested = -1,
194 ExitSuccess = EXIT_SUCCESS,
195 ExitFailure = EXIT_FAILURE
196 };
211 int returnCode()const;
212
223 static int exec();
224
226 Q_INVOKABLE vtkMRMLScene* mrmlScene() const;
227
230
231 // Convenience method for getting a module logic from the application logic.
232 Q_INVOKABLE vtkMRMLAbstractLogic* moduleLogic(const QString& moduleName)const;
233
236 QString slicerHome() const;
237
242 QString defaultScenePath() const;
243
245 void setDefaultScenePath(const QString& path);
246
253 QString slicerSharePath() const;
254
257 bool isEmbeddedModule(const QString& moduleFileName)const;
258
260 QString defaultTemporaryPath() const;
261
263 QString temporaryPath() const;
264
266 void setTemporaryPath(const QString& path);
267
270 QString defaultCachePath() const;
271
275 QString cachePath() const;
276
279 void setCachePath(const QString& path);
280
283
286
289
293
297
301
304
306 QString extensionsInstallPath() const;
307
309 void setExtensionsInstallPath(const QString& path);
310
313 QString intDir()const;
314
316 bool isInstalled()const;
317
321 QString releaseType()const;
322
327 Q_INVOKABLE void addModuleAssociatedNodeType(const QString& nodeClassName, const QString& moduleName);
328
330 Q_INVOKABLE void removeModuleAssociatedNodeType(const QString& nodeClassName, const QString& moduleName);
331
333 Q_INVOKABLE QStringList modulesAssociatedWithNodeType(const QString& nodeClassName) const;
334
336 Q_INVOKABLE QStringList allModuleAssociatedNodeTypes() const;
337
338#ifdef Slicer_USE_PYTHONQT
340 qSlicerCorePythonManager* corePythonManager()const;
341
344 void setCorePythonManager(qSlicerCorePythonManager* pythonManager);
345
347 ctkPythonConsole* pythonConsole()const;
348
353 void setPythonConsole(ctkPythonConsole* pythonConsole);
354
355#endif
356
357#ifdef Slicer_BUILD_EXTENSIONMANAGER_SUPPORT
359 Q_INVOKABLE qSlicerExtensionsManagerModel* extensionsManagerModel()const;
360
363 void setExtensionsManagerModel(qSlicerExtensionsManagerModel* model);
364#endif
365
366#ifdef Slicer_BUILD_APPLICATIONUPDATE_SUPPORT
368 Q_INVOKABLE qSlicerApplicationUpdateManager* applicationUpdateManager()const;
369
372 void setapplicationUpdateManager(qSlicerApplicationUpdateManager* model);
373#endif
374
376 Q_INVOKABLE ctkErrorLogAbstractModel* errorLogModel()const;
377
380
383
387
390
394
397 Q_INVOKABLE QSettings* defaultSettings()const;
398
402 Q_INVOKABLE QSettings* userSettings()const;
403
407 Q_INVOKABLE QSettings* settings()const;
408
412 Q_INVOKABLE QSettings* revisionUserSettings()const;
413
416
418 QString mainApplicationName()const;
419
424
429
433
437
441
445
451 QString documentationBaseUrl()const;
452
456 QString documentationVersion()const;
457
462 QString documentationLanguage()const;
463
467 QLocale applicationLocale()const;
468
474 QString applicationLocaleName()const;
475
479 Q_INVOKABLE QString moduleDocumentationUrl(const QString &moduleName)const;
480
482 virtual QString copyrights()const;
483
485 virtual QString acknowledgment()const;
486
488 virtual QString libraries()const;
489
492 QString repositoryUrl()const;
493
496 QString repositoryBranch()const;
497
500 QString repositoryRevision()const;
501
503 QString revision()const;
504
506 int majorVersion() const;
507
509 int minorVersion() const;
510
513 QString platform()const;
514
517 QString arch()const;
518
521 QString os()const;
522
523#ifdef Slicer_BUILD_DICOM_SUPPORT
525 Q_INVOKABLE ctkDICOMDatabase* dicomDatabase() const;
526
529 QSharedPointer<ctkDICOMDatabase> dicomDatabaseShared() const;
530#endif
531
533 Q_INVOKABLE static QStringList translationFolders();
534
537 Q_INVOKABLE static void loadTranslations(const QString& dir);
538
541 Q_INVOKABLE static void loadLanguage();
542
548 Q_INVOKABLE static bool loadCaCertificates(const QString& slicerHome);
549
552 Q_INVOKABLE static QString caCertificatesPath(const QString& slicerHome);
553
554 Q_INVOKABLE int registerResource(const QByteArray& data);
555
558 Q_INVOKABLE void showConsoleMessage(QString message, bool error=true) const;
559
562 Q_INVOKABLE QString toSlicerHomeAbsolutePath(const QString& path) const;
563
566 Q_INVOKABLE QString toSlicerHomeRelativePath(const QString& path) const;
567
570 Q_INVOKABLE QStringList toSlicerHomeAbsolutePaths(const QStringList& path) const;
571
574 Q_INVOKABLE QStringList toSlicerHomeRelativePaths(const QStringList& path) const;
575
576public slots:
577
580 static void restart();
581
582 bool unregisterResource(int handle);
583
590 virtual void setRenderPaused(bool pause) { Q_UNUSED(pause); };
593 virtual void pauseRender() {};
596 virtual void resumeRender() {};
597
601 virtual bool loadFiles(const QStringList& filePaths, vtkMRMLMessageCollection* userMessages=nullptr);
602
606 virtual void openUrl(const QString& url);
607
608protected:
609
614
617 virtual void setMRMLScene(vtkMRMLScene * scene);
618
619protected slots:
620
625
628 void onSlicerApplicationLogicRequest(vtkObject*, void* , unsigned long);
632
635 virtual void editNode(vtkObject*, void*, unsigned long) {};
636
639
641 virtual void onAboutToQuit();
642
647 void requestInvokeEvent(vtkObject* caller, void* callData);
648
652 void scheduleInvokeEvent(unsigned int delay, void* caller, unsigned long event, void* callData);
653
659
660signals:
662
666 void urlReceived(QString url);
667
670 void invokeEventRequested(unsigned int delay, void* caller,
671 unsigned long event, void* callData);
672
673protected:
674 qSlicerCoreApplication(qSlicerCoreApplicationPrivate* pimpl, int &argc, char **argv);
675 QScopedPointer<qSlicerCoreApplicationPrivate> d_ptr;
676
677private:
678 Q_DECLARE_PRIVATE(qSlicerCoreApplication);
679 Q_DISABLE_COPY(qSlicerCoreApplication);
680};
681
683
684
691class Q_SLICER_BASE_QTCORE_EXPORT SlicerRenderBlocker
692{
693public:
696 {
697 this->Application = qSlicerCoreApplication::application();
698 if (this->Application)
699 {
700 this->Application->pauseRender();
701 }
702 };
704 {
705 if (this->Application)
706 {
707 this->Application->resumeRender();
708 }
709 }
710};
711
712#endif
Safe replacement of qSlicerCoreApplication::pauseRender/resumeRender.
qSlicerCoreApplication * Application
Class querying application updates on the download server.
QString launcherSettingsFilePath() const
If any, return slicer launcher settings file path.
int mainApplicationMajorVersion() const
QString applicationLocaleName() const
QString defaultExtensionsInstallPath() const
Get slicer default extensions path.
virtual void onUserInformationModified()
void setDefaultScenePath(const QString &path)
Set default slicer scene directory.
void setCachePath(const QString &path)
virtual void onSlicerApplicationLogicModified()
Q_INVOKABLE void appendEnvironmentVariable(const QString &key, const QString &value, QChar separator=';')
qSlicerCoreCommandOptions * coreCommandOptions() const
Get coreCommandOptions.
Q_INVOKABLE ctkErrorLogAbstractModel * errorLogModel() const
Get errorLogModel.
Q_INVOKABLE int registerResource(const QByteArray &data)
virtual void openUrl(const QString &url)
Q_INVOKABLE QStringList toSlicerHomeRelativePaths(const QStringList &path) const
QString repositoryUrl() const
virtual void onAboutToQuit()
Perform application cleanup following a call to QCoreApplication::exit().
Q_INVOKABLE void setEnvironmentVariable(const QString &key, const QString &value)
Convenient function to set an environment variable.
QLocale applicationLocale() const
Q_INVOKABLE vtkSlicerApplicationLogic * applicationLogic() const
Get application logic.
QString mainApplicationName() const
Return the name of the main application.
void setTemporaryPath(const QString &path)
Set slicer temporary directory.
void setCoreCommandOptions(qSlicerCoreCommandOptions *options)
QString slicerHome() const
void requestInvokeEvent(vtkObject *caller, void *callData)
static Q_INVOKABLE QStringList translationFolders()
Return list of folders where the application looks for translations (*.qm files)
int minorVersion() const
Return the Slicer minor version number.
void setExtensionsInstallPath(const QString &path)
Set slicer extension directory.
virtual QString libraries() const
Return the libraries of Slicer.
static Q_INVOKABLE void loadLanguage()
QString launcherExecutableFilePath() const
If any, return slicer launcher executable file path.
Q_INVOKABLE void prependEnvironmentVariable(const QString &key, const QString &value, QChar separator=';')
void invokeEventRequested(unsigned int delay, void *caller, unsigned long event, void *callData)
static void restart()
Q_INVOKABLE QProcessEnvironment environment() const
Returns the current environment.
QScopedPointer< qSlicerCoreApplicationPrivate > d_ptr
QString defaultTemporaryPath() const
Get slicer default temporary directory.
static Q_INVOKABLE bool loadCaCertificates(const QString &slicerHome)
virtual bool loadFiles(const QStringList &filePaths, vtkMRMLMessageCollection *userMessages=nullptr)
Q_INVOKABLE QString toSlicerHomeAbsolutePath(const QString &path) const
void terminate(int exitCode=qSlicerCoreApplication::ExitSuccess)
Set the ReturnCode flag and call QCoreApplication::exit()
Q_INVOKABLE qSlicerModuleManager * moduleManager() const
Get the module manager.
QString temporaryPath() const
Get slicer temporary directory.
Q_INVOKABLE bool isEnvironmentVariableValueSet(const QString &key, const QString &value)
Returns True if environment variable identified by key is set to value.
QString slicerRevisionUserSettingsFilePath() const
Q_INVOKABLE QString moduleDocumentationUrl(const QString &moduleName) const
Q_INVOKABLE QStringList toSlicerHomeAbsolutePaths(const QStringList &path) const
Q_INVOKABLE QSettings * settings() const
QString mainApplicationRevision() const
Q_INVOKABLE void addModuleAssociatedNodeType(const QString &nodeClassName, const QString &moduleName)
void onSlicerApplicationLogicRequest(vtkObject *, void *, unsigned long)
virtual void handleCommandLineArguments()
Q_INVOKABLE vtkMRMLAbstractLogic * moduleLogic(const QString &moduleName) const
static bool testAttribute(qSlicerCoreApplication::ApplicationAttribute attribute)
QString documentationLanguage() const
QString launcherRevisionSpecificUserSettingsFilePath() const
If any, return slicer user settings file path specific to a given revision of Slicer.
Q_INVOKABLE void showConsoleMessage(QString message, bool error=true) const
virtual QString copyrights() const
Return the copyrights of Slicer.
QString intDir() const
Q_INVOKABLE QSettings * userSettings() const
QString releaseType() const
Return the release type of this instance of Slicer.
QString extensionsInstallPath() const
Get slicer extension directory.
bool unregisterResource(int handle)
void setCoreIOManager(qSlicerCoreIOManager *ioManager)
qSlicerCoreApplication(qSlicerCoreApplicationPrivate *pimpl, int &argc, char **argv)
QString arch() const
void scheduleInvokeEvent(unsigned int delay, void *caller, unsigned long event, void *callData)
QString startupWorkingPath() const
Current working directory at the time the application was started.
QString mainApplicationRepositoryUrl() const
static qSlicerCoreApplication * application()
Q_INVOKABLE QStringList modulesAssociatedWithNodeType(const QString &nodeClassName) const
List of all modules that are associated with the specified node type.
QString slicerDefaultSettingsFilePath() const
void parseArguments(bool &exitWhenDone)
int majorVersion() const
Return the Slicer major version number.
void urlReceived(QString url)
QString cachePath() const
void mrmlSceneChanged(vtkMRMLScene *mrmlScene)
QString slicerSharePath() const
QString mainApplicationRepositoryRevision() const
QString os() const
QString defaultScenePath() const
virtual void editNode(vtkObject *, void *, unsigned long)
Q_INVOKABLE QString toSlicerHomeRelativePath(const QString &path) const
bool isInstalled() const
Return true is this instance of Slicer is running from an installed directory.
QString documentationBaseUrl() const
bool isEmbeddedModule(const QString &moduleFileName) const
virtual void setRenderPaused(bool pause)
QString platform() const
virtual void handlePreApplicationCommandLineArguments()
Q_INVOKABLE vtkMRMLScene * mrmlScene() const
Get MRML Scene.
int mainApplicationMinorVersion() const
static Q_INVOKABLE QString caCertificatesPath(const QString &slicerHome)
virtual QString acknowledgment() const
Return the acknowledgment text of Slicer.
QString documentationVersion() const
Q_INVOKABLE QStringList allModuleAssociatedNodeTypes() const
List of all node types that are associated with any module.
QString repositoryRevision() const
Q_INVOKABLE qSlicerCoreIOManager * coreIOManager() const
Get the IO manager.
QString repositoryBranch() const
static Q_INVOKABLE void loadTranslations(const QString &dir)
QString revision() const
Return Slicer's user-friendly revision identifier.
Q_INVOKABLE void removeModuleAssociatedNodeType(const QString &nodeClassName, const QString &moduleName)
Remove association between a module and a node type.
Q_INVOKABLE QProcessEnvironment startupEnvironment() const
Returns the environment without the Slicer specific values.
Q_INVOKABLE QSettings * defaultSettings() const
bool isCustomMainApplication() const
Return if main application is custom application (not Slicer).
QString slicerUserSettingsFilePath() const
QString defaultCachePath() const
static void setAttribute(qSlicerCoreApplication::ApplicationAttribute attribute, bool on=true)
int mainApplicationPatchVersion() const
Q_INVOKABLE QSettings * revisionUserSettings() const
virtual void setMRMLScene(vtkMRMLScene *scene)
Class querying and storing extensions data.
Superclass for MRML logic classes.
A set of MRML Nodes that supports serialization and undo/redo.
Q_DECLARE_METATYPE(qSlicerExtensionsManagerModel::ServerAPI)