libkdepim

pluginmanager.h

00001 // -*- Mode: C++; c-basic-offset: 2; indent-tabs-mode: nil; -*-
00024 #ifndef KOMPOSER_PLUGINMANAGER_H
00025 #define KOMPOSER_PLUGINMANAGER_H
00026 
00027 #include <tqmap.h>
00028 #include <tqobject.h>
00029 #include <tqstring.h>
00030 #include <tqstringlist.h>
00031 #include <tqvaluelist.h>
00032 
00033 class KPluginInfo;
00034 
00035 namespace Komposer
00036 {
00037 
00038   class Plugin;
00039 
00040   class PluginManager : public QObject
00041   {
00042     Q_OBJECT
00043 
00044   public:
00045     PluginManager( TQObject * );
00046 
00047     ~PluginManager();
00048 
00059     TQValueList<KPluginInfo*> availablePlugins( const TQString &category
00060                                                = TQString::null ) const;
00061 
00067     TQMap<KPluginInfo*, Plugin*> loadedPlugins( const TQString &category
00068                                                = TQString::null ) const;
00069 
00081     Plugin* plugin( const TQString &pluginName ) const;
00082 
00090     TQString pluginName( const Plugin *plugin ) const;
00091 
00100     TQString pluginId( const Plugin *plugin ) const;
00101 
00105     bool unloadPlugin( const TQString &pluginName );
00106 
00113     TQString pluginIcon( const Plugin *plugin ) const;
00114 
00125     void shutdown();
00126 
00141     bool setPluginEnabled( const TQString &name, bool enabled = true );
00142 
00148     enum PluginLoadMode { LoadSync, LoadAsync };
00149 
00150   public slots:
00161     Plugin* loadPlugin( const TQString &pluginId, PluginLoadMode mode = LoadSync );
00162 
00167     void loadAllPlugins();
00168 
00169   signals:
00173     void pluginLoaded( Plugin *plugin );
00174 
00194     void allPluginsLoaded();
00195 
00196   private slots:
00200     void slotPluginDestroyed( TQObject *plugin );
00201 
00207     void slotShutdownTimeout();
00208 
00213     void slotShutdownDone();
00214 
00218     void slotPluginReadyForUnload();
00219 
00224     void slotLoadNextPlugin();
00225 
00226   private:
00234     Plugin *loadPluginInternal( const TQString &pluginId );
00235 
00243     KPluginInfo *infoForPluginId( const TQString &pluginId ) const;
00244   private:
00245     class Private;
00246     Private *d;
00247   };
00248 
00249 }
00250 
00251 #endif // KOMPOSER_PLUGINMANAGER_H