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 TQObject
00041   {
00042     Q_OBJECT
00043   TQ_OBJECT
00044 
00045   public:
00046     PluginManager( TQObject * );
00047 
00048     ~PluginManager();
00049 
00060     TQValueList<KPluginInfo*> availablePlugins( const TQString &category
00061                                                = TQString() ) const;
00062 
00068     TQMap<KPluginInfo*, Plugin*> loadedPlugins( const TQString &category
00069                                                = TQString() ) const;
00070 
00082     Plugin* plugin( const TQString &pluginName ) const;
00083 
00091     TQString pluginName( const Plugin *plugin ) const;
00092 
00101     TQString pluginId( const Plugin *plugin ) const;
00102 
00106     bool unloadPlugin( const TQString &pluginName );
00107 
00114     TQString pluginIcon( const Plugin *plugin ) const;
00115 
00126     void shutdown();
00127 
00142     bool setPluginEnabled( const TQString &name, bool enabled = true );
00143 
00149     enum PluginLoadMode { LoadSync, LoadAsync };
00150 
00151   public slots:
00162     Plugin* loadPlugin( const TQString &pluginId, PluginLoadMode mode = LoadSync );
00163 
00168     void loadAllPlugins();
00169 
00170   signals:
00174     void pluginLoaded( Plugin *plugin );
00175 
00195     void allPluginsLoaded();
00196 
00197   private slots:
00201     void slotPluginDestroyed( TQObject *plugin );
00202 
00208     void slotShutdownTimeout();
00209 
00214     void slotShutdownDone();
00215 
00219     void slotPluginReadyForUnload();
00220 
00225     void slotLoadNextPlugin();
00226 
00227   private:
00235     Plugin *loadPluginInternal( const TQString &pluginId );
00236 
00244     KPluginInfo *infoForPluginId( const TQString &pluginId ) const;
00245   private:
00246     class Private;
00247     Private *d;
00248   };
00249 
00250 }
00251 
00252 #endif // KOMPOSER_PLUGINMANAGER_H