Slicer 5.13
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
165 void setIgnoreTestingModules(bool ignore);
167
170 QStringList ignoredModuleNames() const;
171
175
176 Q_INVOKABLE void registerModule(const QFileInfo& file);
177
179 Q_INVOKABLE QStringList registeredModuleNames() const;
180
182 Q_INVOKABLE bool isRegistered(const QString& name) const;
183
185 virtual void instantiateModules();
186
188 Q_INVOKABLE QStringList instantiatedModuleNames() const;
189
191 Q_INVOKABLE bool isInstantiated(const QString& name) const;
192
194 Q_INVOKABLE qSlicerAbstractCoreModule* moduleInstance(const QString& moduleName) const;
195
198
201
205 QStringList dependentModules(const QString& module) const;
206
210 QStringList moduleDependees(const QString& module) const;
211
212signals:
215 void modulesRegistered(const QStringList& moduleNames);
216 void moduleRegistered(const QString& moduleName);
217
218 void explicitModulesChanged(const QStringList& moduleNames);
219
220 void modulesToIgnoreChanged(const QStringList& moduleNames);
221 void moduleIgnored(const QString& moduleName);
222
223 void modulesInstantiated(const QStringList& moduleNames);
224 void moduleAboutToBeInstantiated(const QString& moduleName);
225 void moduleInstantiated(const QString& moduleName);
226
227 void modulesAboutToBeUninstantiated(const QStringList& moduleNames);
228 void moduleAboutToBeUninstantiated(const QString& moduleName);
229
230 void modulesUninstantiated(const QStringList& moduleNames);
231 void moduleUninstantiated(const QString& moduleName);
232
233public slots:
237 void setIsVerbose(bool flag);
238 bool isVerbose() const;
239
240protected:
241 QScopedPointer<qSlicerAbstractModuleFactoryManagerPrivate> d_ptr;
242
243 void registerModules(const QString& directoryPath);
244
247
249 virtual void uninstantiateModule(const QString& moduleName);
250
251private:
252 Q_DECLARE_PRIVATE(qSlicerAbstractModuleFactoryManager);
254};
255
256//-----------------------------------------------------------------------------
258{
259 this->setSearchPaths(this->searchPaths() << paths);
260}
261
262//-----------------------------------------------------------------------------
264{
265 this->setSearchPaths(this->searchPaths() << path);
266}
267
268//-----------------------------------------------------------------------------
270{
271 for (const QString& path : paths)
272 {
273 this->removeSearchPath(path);
274 }
275}
276
277//-----------------------------------------------------------------------------
279{
280 QStringList newSearchPaths = this->searchPaths();
281 newSearchPaths.removeAll(path);
282 this->setSearchPaths(newSearchPaths);
283}
284
285//-----------------------------------------------------------------------------
287{
288 QStringList modules = this->modulesToIgnore();
289 if (modules.contains(moduleName))
290 {
291 return;
292 }
293 modules << moduleName;
294 this->setModulesToIgnore(modules);
295}
296
297//-----------------------------------------------------------------------------
299{
300 QStringList modules = this->modulesToIgnore();
301 modules.removeAll(moduleName);
302 this->setModulesToIgnore(modules);
303}
304
305#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.
void setIgnoreTestingModules(bool ignore)
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.