X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fpluginmanager.h;h=6603f6e1e4cc1db1e73449f2ae6c3c20ad3799e2;hb=73afa2885eded3443055c49cdba7e225af109078;hp=96e2ac989be12588be86689cb2464146ffa2ca57;hpb=99980506540d9546dad31223a6eadf126ba68121;p=xonotic%2Fnetradiant.git diff --git a/radiant/pluginmanager.h b/radiant/pluginmanager.h index 96e2ac98..6603f6e1 100644 --- a/radiant/pluginmanager.h +++ b/radiant/pluginmanager.h @@ -1,212 +1,65 @@ /* -Copyright (C) 1999-2007 id Software, Inc. and contributors. -For a list of contributors, see the accompanying CONTRIBUTORS file. + Copyright (C) 1999-2006 Id Software, Inc. and contributors. + For a list of contributors, see the accompanying CONTRIBUTORS file. -This file is part of GtkRadiant. + This file is part of GtkRadiant. -GtkRadiant is free software; you can redistribute it and/or modify -it under the terms of the GNU General Public License as published by -the Free Software Foundation; either version 2 of the License, or -(at your option) any later version. + GtkRadiant is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. -GtkRadiant is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. + GtkRadiant is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. -You should have received a copy of the GNU General Public License -along with GtkRadiant; if not, write to the Free Software -Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA -*/ + You should have received a copy of the GNU General Public License + along with GtkRadiant; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + */ -#ifndef _PLUGINMANAGER_H_ -#define _PLUGINMANAGER_H_ +#if !defined( INCLUDED_PLUGINMANAGER_H ) +#define INCLUDED_PLUGINMANAGER_H -#include "plugin.h" +#include +#include -// global interfaces we are using -extern _QERShadersTable g_ShadersTable; -// NOTE: it's actually a module manager, the name should change to ModuleManager.. -class CPlugInManager +/*! + \class IPlugin + pure virtual interface for a plugin + temporary solution for migration from old plugin tech to synapse plugins + */ +class IPlugIn { -private: - GSList* m_PlugIns; - CPtrArray m_BrushHandles; - CPtrArray m_SelectedBrushHandles; - CPtrArray m_ActiveBrushHandles; - - // v1.70 - //! brushes of the current entity ( see m_SelectedBrushHandles and m_ActiveBrushHandles ) - CPtrArray m_EntityBrushHandles; - //! allocated entities, not commited yet ( see m_BrushHandles ) - CPtrArray m_EntityHandles; - - //! tells in which array to look when given a patch index - enum EPatchesMode { EActivePatches, ESelectedPatches, EAllocatedPatches } PatchesMode; - //! patches handles (brush_t*) - CPtrArray m_PatchesHandles; - //! plugin-allocated patches, not commited yet (patchMesh_t*) - CPtrArray m_PluginPatches; - - void InitForDir(const Str &dir); ///< init for plguins/modules below this directory - public: - CPtrArray& GetActiveHandles() {return m_ActiveBrushHandles; }; - CPtrArray& GetSelectedHandles() {return m_SelectedBrushHandles; }; - CPtrArray& GetPluginPatches() {return m_PluginPatches; }; - brush_t* FindBrushHandle(void *vp); - patchMesh_t* FindPatchHandle(int index); - int CreatePatchHandle(); - int AllocateActivePatchHandles(); - int AllocateSelectedPatchHandles(); - void CommitPatchHandleToMap(int index, patchMesh_t *pMesh, char *texName); - void CommitPatchHandleToEntity(int index, patchMesh_t *pMesh, char *texName, void *vpEntity); - void ReleasePatchesHandles() { m_PatchesHandles.RemoveAll(); m_PluginPatches.RemoveAll(); } - void AddFaceToBrushHandle(void *vp, vec3_t v1, vec3_t v2, vec3_t v3); - void CommitBrushHandleToMap(void *vp); - void DeleteBrushHandle(void* vp); - void* CreateBrushHandle(); - void Dispatch(int n, const char *p); - void Cleanup(); ///< cleanup of data structures allocated for plugins, not a plugin reload - void Init(); ///< go through the path where we will find modules and plugins - void LoadImage (const char *name, unsigned char **pic, int *width, int *height); - void ImportMap (IDataStream *in, CPtrArray *ents, const char *type); - void ExportMap (CPtrArray *ents, IDataStream *out, const char *type); - void Shutdown(); ///< shutdown all the plugins/module subsystem - CPlugInManager(); - virtual ~CPlugInManager(); - - /*! - the texture manager front ends the single load - addins (texture, model, map formats.. etc.) - */ - _QERTextureInfo* GetTextureInfo(); - void LoadTexture(const char *pFilename); - -void* GetSurfaceFlags(); - - // v1.70 - CPtrArray& GetEntityBrushHandles() {return m_EntityBrushHandles; }; - CPtrArray& GetEntityHandles() {return m_EntityHandles; }; - //! the vpBrush needs to be in m_BrushHandles - void CommitBrushHandleToEntity(void* vpBrush, void* vpEntity ); - //! the vpEntity needs to be in m_EntityHandles - void CommitEntityHandleToMap( void* vpEntity ); - -protected: - //! read the interfaces this plugin implements - void LoadFromPath(const char *path); ///< load all modules/plugins in specified path - void RegisterInterfaces(); +IPlugIn() { } +virtual ~IPlugIn() { } + +virtual const char* getMenuName() = 0; +virtual std::size_t getCommandCount() = 0; +virtual const char* getCommand( std::size_t ) = 0; +virtual const char* getCommandTitle( std::size_t ) = 0; +virtual void addMenuID( std::size_t ) = 0; +virtual bool ownsCommandID( std::size_t n ) = 0; }; -class CPluginSlot : public IPlugIn +class PluginsVisitor { - APIDescriptor_t *mpAPI; - _QERPluginTable *mpTable; - /*! - is false until Init() happened - */ - bool m_bReady; - /*! - below is valid only if m_bReady = true - */ - GSList *m_CommandStrings; - GSList *m_CommandIDs; - public: - /*! - build directly from a SYN_PROVIDE interface - */ - CPluginSlot(APIDescriptor_t *pAPI); - virtual ~CPluginSlot(); - - APIDescriptor_t* GetDescriptor() { return mpAPI; } - /*! - initialize some management data after the synapse interfaces have been hooked up - */ - void Init(); - /*! - dispatching a command by name to the plugin - */ - void Dispatch(const char *p); - - // IPlugIn ------------------------------------------------------------ - const char* getMenuName(); - int getCommandCount(); - const char* getCommand(int n); - void addMenuID(int n); - bool ownsCommandID(int n); - +virtual void visit( IPlugIn& plugin ) = 0; }; -class CRadiantPluginManager : public CSynapseAPIManager +class CPlugInManager { - list mSlots; public: - CRadiantPluginManager() {} - virtual ~CRadiantPluginManager(); - - // CSynapseAPIManager interface ------------------- - APIDescriptor_t *BuildRequireAPI(APIDescriptor_t *pAPI); - - // CRadiantPluginManager -------------------------- - void PopulateMenu(); - bool Dispatch(int n, const char* p); -}; - -class CImageTableSlot -{ - /*! - \todo this is a duplicate from the APIDescriptor_t* list that privately stored inside CSynapseAPIManager - this is probably useless to us in here? - */ - APIDescriptor_t *mpAPI; - /*! - shortcut to mpAPI->mpTable, with correct typing - this is what we allocate and should free locally - */ - _QERPlugImageTable *mpTable; -public: - CImageTableSlot() { } - virtual ~CImageTableSlot() { } ///\ \todo need to correctly free and release still.. - - APIDescriptor_t* GetDescriptor() { return mpAPI; } - _QERPlugImageTable* GetTable() { return mpTable; } - - /*! - don't go through PrepareRequireAPI for init, just get this API and add the table info - */ - void InitForFillAPITable(APIDescriptor_t *pAPI); -}; - -class CRadiantImageManager : public CSynapseAPIManager -{ - list mSlots; - - list::iterator mExtScanSlot; -public: - CRadiantImageManager() {} - virtual ~CRadiantImageManager(); - - // CSynapseAPIManager interface -------------------- - void FillAPITable(APIDescriptor_t *pAPI); - - // CRadiantImageManager ---------------------------- - /*! - extract the extension, go through the list of image interfaces, and load - */ - void LoadImage(const char *name, byte **pic, int *width, int *height); - - /*! - we often need to walk through the extensions - this used to be hardcoded in texwindow.cpp - the two functions are related, they use a static to go through the list - */ - void BeginExtensionsScan(); - const char* GetNextExtension(); ///< \return NULL when the list has been completely scanned +void Dispatch( std::size_t n, const char *p ); +void Init( ui::Widget main_window ); +void constructMenu( PluginsVisitor& menu ); +void Shutdown(); }; -extern CRadiantImageManager g_ImageManager; +CPlugInManager& GetPlugInMgr(); -#endif // _PLUGINMANAGER_H_ +#endif