umbrello API Documentation

Umbrello::PluginLoader Class Reference
[class class Umbrello2 API]

#include <pluginloader.h>

List of all members.

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, PluginListCategoryMap
 Container of plugin categories.

Public Member Functions

 ~PluginLoader ()
 Destry the plugin loader.
PluginloadPlugin (const QString &name)
 Load a plugin.
PluginfindPlugin (const QString &name)
 Find a plugin.
void unloadPlugin (const QString &name)
 Unload a plugin.
const PluginMapplugins () const
 Get a reference to the plugin mapping.
const CategoryMapcategories () const
 Get a reference to the plugin category mapping.

Static Public Member Functions

static PluginLoaderinstance ()
 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

typedef QValueList<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.

typedef QMap<QString, PluginList> Umbrello::PluginLoader::CategoryMap
 

Container of plugin categories.

Definition at line 82 of file pluginloader.h.


Constructor & Destructor Documentation

PluginLoader::~PluginLoader  ) 
 

Destry the plugin loader.

Definition at line 44 of file pluginloader.cpp.


Member Function Documentation

PluginLoader * PluginLoader::instance  )  [static]
 

Singleton accessor.

Definition at line 49 of file pluginloader.cpp.

Referenced by Umbrello::Configurable::loadPlugins(), and Umbrello::Plugin::unload().

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.

References Umbrello::Plugin::category(), Umbrello::Plugin::init(), and Umbrello::Plugin::ref().

Referenced by Umbrello::Configurable::loadPlugins().

Plugin * PluginLoader::findPlugin const QString &  name  ) 
 

Find a plugin.

Definition at line 127 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 138 of file pluginloader.cpp.

Referenced by Umbrello::Plugin::unload().

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 144 of file pluginloader.cpp.

const PluginLoader::CategoryMap & PluginLoader::categories  )  const
 

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:
KDE Logo
This file is part of the documentation for umbrello Version 3.1.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Jun 26 08:08:09 2007 by doxygen 1.4.1 written by Dimitri van Heesch, © 1997-2003