/usr/include/codeblocks/pluginmanager.h is in codeblocks-dev 13.12+dfsg-4.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 | /*
* This file is part of the Code::Blocks IDE and licensed under the GNU Lesser General Public License, version 3
* http://www.gnu.org/licenses/lgpl-3.0.html
*/
#ifndef PLUGINMANAGER_H
#define PLUGINMANAGER_H
#include <vector>
#include <map>
#include <set>
#include <wx/dynarray.h>
#include "globals.h" // PluginType
#include "settings.h"
#include "manager.h"
//forward decls
struct PluginInfo;
class cbPlugin;
class cbMimePlugin;
class cbConfigurationPanel;
class cbProject;
class wxDynamicLibrary;
class wxMenuBar;
class wxMenu;
class CodeBlocksEvent;
class TiXmlDocument;
class FileTreeData;
// typedefs for plugins' function pointers
typedef void(*PluginSDKVersionProc)(int*,int*,int*);
typedef cbPlugin*(*CreatePluginProc)();
typedef void(*FreePluginProc)(cbPlugin*);
/** Information about the plugin */
struct PluginInfo
{
wxString name;
wxString title;
wxString version;
wxString description;
wxString author;
wxString authorEmail;
wxString authorWebsite;
wxString thanksTo;
wxString license;
};
// struct with info about each pluing
struct PluginElement
{
PluginInfo info; // plugin's info struct
wxString fileName; // plugin's filename
wxDynamicLibrary* library; // plugin's library
FreePluginProc freeProc; // plugin's release function pointer
cbPlugin* plugin; // the plugin itself
};
WX_DEFINE_ARRAY(PluginElement*, PluginElementsArray);
WX_DEFINE_ARRAY(cbPlugin*, PluginsArray);
WX_DEFINE_ARRAY(cbConfigurationPanel*, ConfigurationPanelsArray);
/**
* PluginManager manages plugins.
*
* There are two plugin types: binary and scripted.
*
* Binary plugins are dynamically loaded shared libraries (dll/so) which
* can do pretty much anything with the SDK.
*
* Script plugins are more lightweight and are very convenient for
* smaller scale/functionality plugins.
*/
class DLLIMPORT PluginManager : public Mgr<PluginManager>, public wxEvtHandler
{
public:
friend class Mgr<PluginManager>;
friend class Manager; // give Manager access to our private members
void CreateMenu(wxMenuBar* menuBar);
void ReleaseMenu(wxMenuBar* menuBar);
void RegisterPlugin(const wxString& name,
CreatePluginProc createProc,
FreePluginProc freeProc,
PluginSDKVersionProc versionProc);
int ScanForPlugins(const wxString& path);
bool LoadPlugin(const wxString& pluginName);
void LoadAllPlugins();
void UnloadAllPlugins();
void UnloadPlugin(cbPlugin* plugin);
int ExecutePlugin(const wxString& pluginName);
bool AttachPlugin(cbPlugin* plugin, bool ignoreSafeMode = false);
bool DetachPlugin(cbPlugin* plugin);
bool InstallPlugin(const wxString& pluginName, bool forAllUsers = true, bool askForConfirmation = true);
bool UninstallPlugin(cbPlugin* plugin, bool removeFiles = true);
bool ExportPlugin(cbPlugin* plugin, const wxString& filename);
const PluginInfo* GetPluginInfo(const wxString& pluginName);
const PluginInfo* GetPluginInfo(cbPlugin* plugin);
PluginElementsArray& GetPlugins(){ return m_Plugins; }
PluginElement* FindElementByName(const wxString& pluginName);
cbPlugin* FindPluginByName(const wxString& pluginName);
cbPlugin* FindPluginByFileName(const wxString& pluginFileName);
PluginsArray GetToolOffers();
PluginsArray GetMimeOffers();
PluginsArray GetCompilerOffers();
PluginsArray GetDebuggerOffers();
PluginsArray GetCodeCompletionOffers();
PluginsArray GetOffersFor(PluginType type);
void AskPluginsForModuleMenu(const ModuleType type, wxMenu* menu, const FileTreeData* data = nullptr);
cbMimePlugin* GetMIMEHandlerForFile(const wxString& filename);
void GetConfigurationPanels(int group, wxWindow* parent, ConfigurationPanelsArray& arrayToFill);
void GetProjectConfigurationPanels(wxWindow* parent, cbProject* project, ConfigurationPanelsArray& arrayToFill);
int Configure();
void SetupLocaleDomain(const wxString& DomainName);
void NotifyPlugins(CodeBlocksEvent& event);
void NotifyPlugins(CodeBlocksDockEvent& event);
void NotifyPlugins(CodeBlocksLayoutEvent& event);
static void SetSafeMode(bool on){ s_SafeMode = on; }
static bool GetSafeMode(){ return s_SafeMode; }
private:
PluginManager();
~PluginManager();
void OnScriptMenu(wxCommandEvent& event);
void OnScriptModuleMenu(wxCommandEvent& event);
/// @return True if the plugin should be loaded, false if not.
bool ReadManifestFile(const wxString& pluginFilename,
const wxString& pluginName = wxEmptyString,
PluginInfo* infoOut = nullptr);
void ReadExtraFilesFromManifestFile(const wxString& pluginFilename,
wxArrayString& extraFiles);
bool ExtractFile(const wxString& bundlename,
const wxString& src_filename,
const wxString& dst_filename,
bool isMandatory = true);
PluginElementsArray m_Plugins;
wxString m_CurrentlyLoadingFilename;
wxDynamicLibrary* m_pCurrentlyLoadingLib;
TiXmlDocument* m_pCurrentlyLoadingManifestDoc;
// this struct fills the following vector each time
// RegisterPlugin() is called.
// this vector is then used in LoadPlugin() (which triggered
// the call to RegisterPlugin()) to actually
// load the plugins and then it is cleared.
//
// This is done to avoid global variables initialization order issues
// inside the plugins (yes, it happened to me ;)).
struct PluginRegistration
{
PluginRegistration() : createProc(nullptr), freeProc(nullptr), versionProc(nullptr) {}
PluginRegistration(const PluginRegistration& rhs)
: name(rhs.name),
createProc(rhs.createProc),
freeProc(rhs.freeProc),
versionProc(rhs.versionProc),
info(rhs.info)
{}
wxString name;
CreatePluginProc createProc;
FreePluginProc freeProc;
PluginSDKVersionProc versionProc;
PluginInfo info;
};
std::vector<PluginRegistration> m_RegisteredPlugins;
static bool s_SafeMode;
DECLARE_EVENT_TABLE()
};
#endif // PLUGINMANAGER_H
|