00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __CS_PLUGMGR_H__
00020 #define __CS_PLUGMGR_H__
00021
00022 #include "csutil/scf.h"
00023 #include "csutil/scopedmutexlock.h"
00024 #include "csutil/parray.h"
00025 #include "iutil/config.h"
00026 #include "iutil/plugin.h"
00027
00028 struct iComponent;
00029 struct iObjectRegistry;
00030
00035 class csPluginManager : public iPluginManager
00036 {
00037 private:
00039 csRef<csMutex> mutex;
00040
00044 class csPlugin
00045 {
00046 public:
00048 iComponent *Plugin;
00050 char *ClassID;
00051
00053 csPlugin (iComponent *iObject, const char *iClassID);
00055 virtual ~csPlugin ();
00056 };
00057
00061 class csPluginsVector : public csPDelArray<csPlugin>
00062 {
00063 public:
00065 csPluginsVector (int iLimit, int iDelta)
00066 : csPDelArray<csPlugin> (iLimit, iDelta) {}
00068 static int CompareAddress (csPlugin* const& Item, void* Key)
00069 {
00070 return Item->Plugin == Key ? 0 : 1;
00071 }
00072 };
00073
00077 class csPluginOption
00078 {
00079 public:
00080 char *Name;
00081 csVariantType Type;
00082 int ID;
00083 bool Value;
00084 iConfig *Config;
00085
00086 csPluginOption (const char *iName, csVariantType iType, int iID,
00087 bool iValue, iConfig* iConfig)
00088 {
00089 Name = csStrNew (iName);
00090 Type = iType;
00091 ID = iID;
00092 Value = iValue;
00093 (Config = iConfig)->IncRef ();
00094 }
00095 virtual ~csPluginOption ()
00096 {
00097 Config->DecRef ();
00098 delete [] Name;
00099 }
00100 };
00101
00103 iObjectRegistry* object_reg;
00104
00106 csPluginsVector Plugins;
00107
00108
00109 csPDelArray<csPluginOption> OptionList;
00110
00111 public:
00113 csPluginManager (iObjectRegistry* object_reg);
00115 virtual ~csPluginManager ();
00116
00117 SCF_DECLARE_IBASE;
00118
00120 virtual iBase *LoadPlugin (const char *iClassID,
00121 const char *iInterface = 0, int iVersion = 0,
00122 bool init = true);
00123
00127 virtual iBase *QueryPlugin (const char *iInterface, int iVersion);
00129 virtual iBase *QueryPlugin (const char* iClassID,
00130 const char *iInterface, int iVersion);
00132 virtual bool UnloadPlugin (iComponent *iObject);
00134 virtual bool RegisterPlugin (const char *iClassID,
00135 iComponent *iObject);
00137 virtual csPtr<iPluginIterator> GetPlugins ();
00139 virtual void Clear ();
00140
00142 virtual void QueryOptions (iComponent *iObject);
00143 };
00144
00145 #endif // __CS_PLUGMGR_H__
00146