Umbrello::PluginLoader Class Reference
[class class Umbrello2 API]
#include <pluginloader.h>
Public Types | |
| typedef QValueList< Plugin * > | PluginList |
| Just a container of plugins. | |
| typedef QMap< QString, Plugin * > | PluginMap |
| The containment type for mapping plugins. | |
| typedef QMap< QString, PluginList > | CategoryMap |
| Container of plugin categories. | |
Public Member Functions | |
| ~PluginLoader () | |
| Destry the plugin loader. | |
| Plugin * | loadPlugin (const QString &name) |
| Load a plugin. | |
| Plugin * | findPlugin (const QString &name) |
| Find a plugin. | |
| void | unloadPlugin (const QString &name) |
| Unload a plugin. | |
| const PluginMap & | plugins () const |
| Get a reference to the plugin mapping. | |
| const CategoryMap & | categories () const |
| Get a reference to the plugin category mapping. | |
Static Public Member Functions | |
| static PluginLoader * | instance () |
| Singleton accessor. | |
Detailed Description
The plugin loader is an abstraction that sits on top of KLibLoader. Whereas plugins are specialized shared objects, the plugin must specialize the loading of those objects. Essentially, the plugin loader provides a single unit of functionality - loading plugins. In order to load a plugin, we must first load a shared library and then use the libraries factory to create the plugin. However, because a plugin is required to be a singleton, we must ensure that no plugin is ever created more than once. To that end, the loader must also retain a map of loaded plugins. When a loaded plugin is requested, we can increase its reference count.On the subject of unloading, we actually have very little to do. The unload method on a plugin is simply a reference decrementer. When it reaches 0, the object destroys itself. Being a QObject, it will emit the destroyed signal just before deletion, allowing the plugin loader to respond to the event and remove the plugin from its mapping.
The PluginLoader also manages categories of plugins. The runtime categories actually reflect the directory structure of the build environment with each category represented by the name of a directory. The categories are "pre-seeded" at startup.
- Bug:
- Plugins are not removed from their respective categories when they are destroyed. It may be acceptable to call Plugin::category() from slotDestroyed because the category() method doesn't reference any local variables - it just returns a string.
Definition at line 67 of file pluginloader.h.
Member Typedef Documentation
|
|
Just a container of plugins.
Definition at line 76 of file pluginloader.h. |
|
|
The containment type for mapping plugins.
Definition at line 79 of file pluginloader.h. |
|
|
Container of plugin categories.
Definition at line 82 of file pluginloader.h. |
Constructor & Destructor Documentation
|
|
Destry the plugin loader.
Definition at line 44 of file pluginloader.cpp. |
Member Function Documentation
|
|
Singleton accessor.
Definition at line 49 of file pluginloader.cpp. Referenced by Umbrello::Configurable::loadPlugins(), and Umbrello::Plugin::unload(). |
|
|
Load a plugin. Test to see if the plugin already exists. If it does, just add a reference to it and continue on. Definition at line 56 of file pluginloader.cpp. References Umbrello::Plugin::category(), Umbrello::Plugin::init(), and Umbrello::Plugin::ref(). Referenced by Umbrello::Configurable::loadPlugins(). |
|
|
Find a plugin.
Definition at line 127 of file pluginloader.cpp. |
|
|
Unload a plugin. Never use this method. It is only used by the deref method of a plugin to cause this class to unload the corresponding library. In fact, there is actually no corresponding plugin to unload, we just unload the library. Definition at line 138 of file pluginloader.cpp. Referenced by Umbrello::Plugin::unload(). |
|
|
Get a reference to the plugin mapping. This method wraps everything in consts with the express purpose that no changes are made to the plugin map after using this method. Definition at line 144 of file pluginloader.cpp. |
|
|
Get a reference to the plugin category mapping.
Definition at line 150 of file pluginloader.cpp. |
The documentation for this class was generated from the following files:
