Slicer 5.9
Slicer is a multi-platform, free and open source software package for visualization and medical image computing
Loading...
Searching...
No Matches
qSlicerAbstractModuleFactoryManager.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 __qSlicerAbstractModuleFactoryManager_h
22#define __qSlicerAbstractModuleFactoryManager_h
23
24// Qt includes
25#include <QObject>
26#include <QString>
27
28// CTK includes
29#include <ctkAbstractFileBasedFactory.h>
30
31#include "qSlicerBaseQTCoreExport.h"
32
34
35class qSlicerAbstractModuleFactoryManagerPrivate;
36
65class Q_SLICER_BASE_QTCORE_EXPORT qSlicerAbstractModuleFactoryManager : public QObject
66{
67 Q_OBJECT
78 Q_PROPERTY(QStringList searchPaths READ searchPaths WRITE setSearchPaths)
79
80
85public:
86 typedef ctkAbstractFileBasedFactory<qSlicerAbstractCoreModule> qSlicerFileBasedModuleFactory;
88
89 typedef QObject Superclass;
90 qSlicerAbstractModuleFactoryManager(QObject* newParent = nullptr);
91
95
97 virtual void printAdditionalInfo();
98
116 void registerFactory(qSlicerModuleFactory* factory, int priority = 0);
119
120 void setSearchPaths(const QStringList& searchPaths);
121 QStringList searchPaths() const;
122
125 inline void addSearchPaths(const QStringList& paths);
127 inline void addSearchPath(const QString& path);
128
131 inline void removeSearchPaths(const QStringList& paths);
132
134 inline void removeSearchPath(const QString& path);
135
136 void setExplicitModules(const QStringList& moduleNames);
137 QStringList explicitModules() const;
138
143 void setModulesToIgnore(const QStringList& modulesNames);
144 QStringList modulesToIgnore() const;
145
148 inline void addModuleToIgnore(const QString& moduleName);
149
152 inline void removeModuleToIgnore(const QString& moduleName);
153
156 QStringList ignoredModuleNames() const;
157
161
162 Q_INVOKABLE void registerModule(const QFileInfo& file);
163
165 Q_INVOKABLE QStringList registeredModuleNames() const;
166
168 Q_INVOKABLE bool isRegistered(const QString& name) const;
169
171 virtual void instantiateModules();
172
174 Q_INVOKABLE QStringList instantiatedModuleNames() const;
175
177 Q_INVOKABLE bool isInstantiated(const QString& name) const;
178
180 Q_INVOKABLE qSlicerAbstractCoreModule* moduleInstance(const QString& moduleName) const;
181
184
187
191 QStringList dependentModules(const QString& module) const;
192
196 QStringList moduleDependees(const QString& module) const;
197
198signals:
201 void modulesRegistered(const QStringList& moduleNames);
202 void moduleRegistered(const QString& moduleName);
203
204 void explicitModulesChanged(const QStringList& moduleNames);
205
206 void modulesToIgnoreChanged(const QStringList& moduleNames);
207 void moduleIgnored(const QString& moduleName);
208
209 void modulesInstantiated(const QStringList& moduleNames);
210 void moduleAboutToBeInstantiated(const QString& moduleName);
211 void moduleInstantiated(const QString& moduleName);
212
213 void modulesAboutToBeUninstantiated(const QStringList& moduleNames);
214 void moduleAboutToBeUninstantiated(const QString& moduleName);
215
216 void modulesUninstantiated(const QStringList& moduleNames);
217 void moduleUninstantiated(const QString& moduleName);
218
219public slots:
223 void setIsVerbose(bool flag);
224 bool isVerbose() const;
225
226protected:
227 QScopedPointer<qSlicerAbstractModuleFactoryManagerPrivate> d_ptr;
228
229 void registerModules(const QString& directoryPath);
230
233
235 virtual void uninstantiateModule(const QString& moduleName);
236
237private:
238 Q_DECLARE_PRIVATE(qSlicerAbstractModuleFactoryManager);
240};
241
242//-----------------------------------------------------------------------------
244{
245 this->setSearchPaths(this->searchPaths() << paths);
246}
247
248//-----------------------------------------------------------------------------
250{
251 this->setSearchPaths(this->searchPaths() << path);
252}
253
254//-----------------------------------------------------------------------------
256{
257 for (const QString& path : paths)
258 {
259 this->removeSearchPath(path);
260 }
261}
262
263//-----------------------------------------------------------------------------
265{
266 QStringList newSearchPaths = this->searchPaths();
267 newSearchPaths.removeAll(path);
268 this->setSearchPaths(newSearchPaths);
269}
270
271//-----------------------------------------------------------------------------
273{
274 QStringList modules = this->modulesToIgnore();
275 if (modules.contains(moduleName))
276 {
277 return;
278 }
279 modules << moduleName;
280 this->setModulesToIgnore(modules);
281}
282
283//-----------------------------------------------------------------------------
285{
286 QStringList modules = this->modulesToIgnore();
287 modules.removeAll(moduleName);
288 this->setModulesToIgnore(modules);
289}
290
291#endif
qSlicerAbstractCoreModule is the base class of any module in Slicer.
void moduleAboutToBeInstantiated(const QString &moduleName)
virtual void printAdditionalInfo()
Print internal state using qDebug()
void registerFactory(qSlicerModuleFactory *factory, int priority=0)
Register a factory The factory will be deleted when unregistered (e.g. in ~qSlicerAbstractModuleFacto...
void moduleIgnored(const QString &moduleName)
Q_INVOKABLE QStringList instantiatedModuleNames() const
List of registered and instantiated modules.
virtual void instantiateModules()
Instantiate all previously registered modules.
virtual void uninstantiateModule(const QString &moduleName)
Uninstantiate a module given its moduleName.
Q_INVOKABLE qSlicerAbstractCoreModule * moduleInstance(const QString &moduleName) const
Return the instance of a module if already instantiated, 0 otherwise.
void removeSearchPath(const QString &path)
Utility function that removes a path from the current searchPaths list.
void modulesUninstantiated(const QStringList &moduleNames)
QStringList moduleDependees(const QString &module) const
ctkAbstractFileBasedFactory< qSlicerAbstractCoreModule > qSlicerFileBasedModuleFactory
QStringList explicitModules() const
void setModulesToIgnore(const QStringList &modulesNames)
Q_INVOKABLE QStringList registeredModuleNames() const
Convenient method returning the list of all registered module names.
void modulesRegistered(const QStringList &moduleNames)
This signal is emitted when all the modules associated with the registered factories have been loaded...
void moduleUninstantiated(const QString &moduleName)
QScopedPointer< qSlicerAbstractModuleFactoryManagerPrivate > d_ptr
QStringList ignoredModuleNames() const
void setSearchPaths(const QStringList &searchPaths)
void explicitModulesChanged(const QStringList &moduleNames)
void setVerboseModuleDiscovery(bool value)
Enable/Disable verbose output during module discovery process.
Q_INVOKABLE bool isInstantiated(const QString &name) const
Return true if a module has been instantiated, false otherwise.
void moduleAboutToBeUninstantiated(const QString &moduleName)
QStringList dependentModules(const QString &module) const
void uninstantiateModules()
Uninstantiate all instantiated modules.
void unregisterFactory(qSlicerModuleFactory *factory)
qSlicerAbstractCoreModule * instantiateModule(const QString &name)
Instantiate a module given its name.
void modulesToIgnoreChanged(const QStringList &moduleNames)
qSlicerAbstractModuleFactoryManager(QObject *newParent=nullptr)
Q_INVOKABLE bool isRegistered(const QString &name) const
Return true if a module has been registered, false otherwise.
ctkAbstractFactory< qSlicerAbstractCoreModule > qSlicerModuleFactory
Q_INVOKABLE void registerModule(const QFileInfo &file)
void modulesInstantiated(const QStringList &moduleNames)
void setExplicitModules(const QStringList &moduleNames)
void moduleRegistered(const QString &moduleName)
void modulesAboutToBeUninstantiated(const QStringList &moduleNames)
void moduleInstantiated(const QString &moduleName)
void addSearchPath(const QString &path)
Utility function that adds a path to the current searchPaths list.