umbrello/umbrello
#include <pluginloader.h>
Public Types | |
typedef QMap< QString, PluginList > | CategoryMap |
typedef Q3ValueList< Plugin * > | PluginList |
typedef QMap< QString, Plugin * > | PluginMap |
Public Member Functions | |
~PluginLoader () | |
const CategoryMap & | categories () const |
Plugin * | findPlugin (const QString &name) |
Plugin * | loadPlugin (const QString &name) |
const PluginMap & | plugins () const |
void | unloadPlugin (const QString &name) |
Static Public Member Functions | |
static PluginLoader * | instance () |
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 66 of file pluginloader.h.
Member Typedef Documentation
typedef QMap<QString, PluginList> Umbrello::PluginLoader::CategoryMap |
Container of plugin categories.
Definition at line 82 of file pluginloader.h.
typedef Q3ValueList<Plugin *> Umbrello::PluginLoader::PluginList |
Just a container of plugins.
Definition at line 76 of file pluginloader.h.
typedef QMap<QString, Plugin *> Umbrello::PluginLoader::PluginMap |
The containment type for mapping plugins.
Definition at line 79 of file pluginloader.h.
Constructor & Destructor Documentation
PluginLoader::~PluginLoader | ( | ) |
Destry the plugin loader.
Definition at line 44 of file pluginloader.cpp.
Member Function Documentation
const PluginLoader::CategoryMap & PluginLoader::categories | ( | ) | const |
Get a reference to the plugin category mapping.
Definition at line 149 of file pluginloader.cpp.
Plugin * PluginLoader::findPlugin | ( | const QString & | name | ) |
Find a plugin.
Definition at line 128 of file pluginloader.cpp.
|
static |
Singleton accessor.
Definition at line 49 of file pluginloader.cpp.
Plugin * PluginLoader::loadPlugin | ( | const QString & | name | ) |
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.
const PluginLoader::PluginMap & PluginLoader::plugins | ( | ) | const |
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 143 of file pluginloader.cpp.
void PluginLoader::unloadPlugin | ( | const QString & | name | ) |
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 137 of file pluginloader.cpp.
The documentation for this class was generated from the following files:
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 23:06:03 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006
KDE's Doxygen guidelines are available online.