00001
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
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