#ifndef PLUGINMANAGER_H
#define PLUGINMANAGER_H

#include <wx/dynarray.h>
#include "settings.h"
#include "sdk_events.h"
#include "sanitycheck.h"

//forward decls
struct PluginInfo;
class cbPlugin;
class wxDynamicLibrary;
class wxMenuBar;
class wxMenu;

struct PluginElement
{
    wxString name;
    wxString fileName;
    wxDynamicLibrary* library;
	cbPlugin* plugin;
};

WX_DEFINE_ARRAY(PluginElement*, PluginElementsArray);
WX_DEFINE_ARRAY(cbPlugin*, PluginsArray);

/*
 * No description
 */
class DLLIMPORT PluginManager
{
	public:
        friend class Manager; // give Manager access to our private members
		void CreateMenu(wxMenuBar* menuBar);
		void ReleaseMenu(wxMenuBar* menuBar);
		int ScanForPlugins(const wxString& path);
        cbPlugin* LoadPlugin(const wxString& pluginName);
        void LoadAllPlugins();
        void UnloadAllPlugins();
        int ExecutePlugin(const wxString& pluginName);
        int ConfigurePlugin(const wxString& pluginName);
        const PluginInfo* GetPluginInfo(const wxString& pluginName);
        PluginElementsArray& GetPlugins(){ return m_Plugins; }
        cbPlugin* FindPluginByName(const wxString& pluginName);
        cbPlugin* FindPluginByFileName(const wxString& pluginFileName);
        PluginsArray GetToolOffers();
        PluginsArray GetMimeOffers();
        PluginsArray GetCompilerOffers();
        PluginsArray GetCodeCompletionOffers();
        PluginsArray GetOffersFor(PluginType type);
        void AskPluginsForModuleMenu(const ModuleType type, wxMenu* menu, const wxString& arg);
        void NotifyPlugins(CodeBlocksEvent& event);
        cbMimePlugin* GetMIMEHandlerForFile(const wxString& filename);
        int Configure();
    private:
        static PluginManager* Get();
		static void Free();
		PluginManager();
		~PluginManager();
        PluginElementsArray m_Plugins;
    DECLARE_SANITY_CHECK
};

#endif // PLUGINMANAGER_H



syntax highlighted by Code2HTML, v. 0.9.1