CrystalSpace

Public API Reference

csutil/plugmgr.h

Go to the documentation of this file.
00001 /*
00002     Copyright (C) 1998-2001 by Jorrit Tyberghein
00003 
00004     This library is free software; you can redistribute it and/or
00005     modify it under the terms of the GNU Library General Public
00006     License as published by the Free Software Foundation; either
00007     version 2 of the License, or (at your option) any later version.
00008 
00009     This library is distributed in the hope that it will be useful,
00010     but WITHOUT ANY WARRANTY; without even the implied warranty of
00011     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012     Library General Public License for more details.
00013 
00014     You should have received a copy of the GNU Library General Public
00015     License along with this library; if not, write to the Free
00016     Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
00017 */
00018 
00019 #ifndef __CS_PLUGMGR_H__
00020 #define __CS_PLUGMGR_H__
00021 
00026 #include "csextern.h"
00027 #include "csutil/parray.h"
00028 #include "csutil/scf.h"
00029 #include "csutil/scf_implementation.h"
00030 #include "csutil/thread.h"
00031 #include "iutil/plugin.h"
00032 #include "iutil/pluginconfig.h"
00033 
00034 struct iComponent;
00035 struct iObjectRegistry;
00036 
00041 class CS_CRYSTALSPACE_EXPORT csPluginManager :
00042   public scfImplementation1<csPluginManager, iPluginManager>
00043 {
00044 private:
00046   csRef<csMutex> mutex;
00047 
00051   class CS_CRYSTALSPACE_EXPORT csPlugin
00052   {
00053   public:
00055     iComponent *Plugin;
00057     char *ClassID;
00058 
00060     csPlugin (iComponent *iObject, const char *iClassID);
00062     virtual ~csPlugin ();
00063   };
00064 
00068   class CS_CRYSTALSPACE_EXPORT csPluginsVector : public csPDelArray<csPlugin>
00069   {
00070   public:
00072     csPluginsVector (int l, int d) : csPDelArray<csPlugin> (l, d) {}
00074     static int CompareAddress (csPlugin* const& Item, iComponent* const& Key)
00075     { return Item->Plugin == Key ? 0 : 1; }
00076   };
00077 
00081   class CS_CRYSTALSPACE_EXPORT csPluginOption
00082   {
00083   public:
00084     char *Name;
00085     csVariantType Type;
00086     int ID;
00087     bool Value;                         // If Type is CSVAR_BOOL
00088     csRef<iPluginConfig> Config;
00089 
00090     csPluginOption (const char *iName, csVariantType iType, int iID,
00091       bool iValue, iPluginConfig* cfg)
00092     {
00093       Name = csStrNew (iName);
00094       Type = iType;
00095       ID = iID;
00096       Value = iValue;
00097       Config = cfg;
00098     }
00099     virtual ~csPluginOption ()
00100     {
00101       delete [] Name;
00102     }
00103   };
00104 
00106   iObjectRegistry* object_reg;
00107 
00109   csPluginsVector Plugins;
00110 
00111   // List of all options for all plug-in modules.
00112   csPDelArray<csPluginOption> OptionList;
00113 
00114 public:
00116   csPluginManager (iObjectRegistry* object_reg);
00118   virtual ~csPluginManager ();
00119 
00121   virtual iBase *LoadPlugin (const char *iClassID, bool init = true);
00122 
00126   virtual iBase *QueryPlugin (const char *iInterface, int iVersion);
00128   virtual iBase *QueryPlugin (const char* iClassID,
00129           const char *iInterface, int iVersion);
00131   virtual bool UnloadPlugin (iComponent *iObject);
00133   virtual bool RegisterPlugin (const char *iClassID,
00134           iComponent *iObject);
00136   virtual csPtr<iPluginIterator> GetPlugins ();
00138   virtual void Clear ();
00139 
00141   virtual void QueryOptions (iComponent *iObject);
00142 };
00143 
00144 #endif // __CS_PLUGMGR_H__
00145 

Generated for Crystal Space by doxygen 1.4.7