#ifndef PLUGINMANAGER_H #define PLUGINMANAGER_H #include #include #include #include "userlist.h" #include "optionstree.h" class PsiPlugin; class PsiAccount; class UserLisItem; namespace XMPP { class Jid; } namespace QCA { class DirWatch; } class QPluginLoader; class PluginManager : public QObject { Q_OBJECT public: static PluginManager* instance(); QStringList availablePlugins(); void addAccount( const PsiAccount* account, XMPP::Client* client); void message( PsiAccount* account, const XMPP::Jid& from, const UserListItem*, const QString& message ); bool loadPlugin( const QString& file ); void loadEnabledPlugins(); bool unloadPlugin( const QString& file ); bool unloadAllPlugins(); QString pathToPlugin( const QString& plugin ); QString shortName( const QString& plugin ); QWidget* getOptionsWidget( const QString& plugin ); bool processEvent( const PsiAccount* account, QDomElement &event ); const QVariant getGlobalOption(const QString& option); static const QString loadOptionPrefix; static const QString pluginOptionPrefix; protected: bool loadPlugin( QObject* pluginObject ); private: PluginManager(); void loadAllPlugins(); bool verifyStanza(const QString& stanza); static PluginManager* instance_; //name, plugin QMap plugins_; //name, shortName QMap shortNames_; //name, file QMap files_; //filename, loader QMap loaders_; //account, client QMap clients_; QList dirWatchers_; OptionsTree options_; private slots: void dirsChanged(); void setPluginOption( const QString&, const QVariant& ); void getPluginOption( const QString&, QVariant&); void setGlobalOption( const QString&, const QVariant& ); void getGlobalOption( const QString&, QVariant&); void optionChanged(const QString& option); void sendStanza( const PsiAccount* account, const QDomElement& stanza); void sendStanza( const PsiAccount* account, const QString& stanza); }; #endif