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/csvector.h"
00024 #include "csutil/typedvec.h"
00025 #include "iutil/config.h"
00026 #include "iutil/plugin.h"
00027
00028 struct iComponent;
00029 struct iObjectRegistry;
00030
00034 class csPluginManager : public iPluginManager
00035 {
00036 private:
00037
00038
00039
00040 class csPlugin
00041 {
00042 public:
00043
00044 iComponent *Plugin;
00045
00046 char *ClassID;
00047
00048
00049 csPlugin (iComponent *iObject, const char *iClassID);
00050
00051 virtual ~csPlugin ();
00052 };
00053
00054
00055
00056
00057 class csPluginsVector : public csVector
00058 {
00059 public:
00060
00061 csPluginsVector (int iLimit, int iDelta) : csVector (iLimit, iDelta) {}
00062
00063 virtual ~csPluginsVector () { DeleteAll (); }
00064
00065 virtual int CompareKey (csSome Item, csConstSome Key, int ) const
00066 {
00067 return ((csPlugin *)Item)->Plugin == Key ? 0 : 1;
00068 }
00069
00070 csPlugin *Get (int idx)
00071 { return (csPlugin *)csVector::Get (idx); }
00072
00073 virtual bool FreeItem (csSome Item)
00074 { delete (csPlugin*)Item; return true; }
00075 };
00076
00077
00078
00079
00080 class csPluginOption
00081 {
00082 public:
00083 char *Name;
00084 csVariantType Type;
00085 int ID;
00086 bool Value;
00087 iConfig *Config;
00088
00089 csPluginOption (const char *iName, csVariantType iType, int iID,
00090 bool iValue, iConfig* iConfig)
00091 {
00092 Name = csStrNew (iName);
00093 Type = iType;
00094 ID = iID;
00095 Value = iValue;
00096 (Config = iConfig)->IncRef ();
00097 }
00098 virtual ~csPluginOption ()
00099 {
00100 Config->DecRef ();
00101 delete [] Name;
00102 }
00103 };
00104
00105
00106 void QueryOptions (iComponent *iObject);
00107
00108
00109 iObjectRegistry* object_reg;
00110
00112 csPluginsVector Plugins;
00113
00115 CS_DECLARE_TYPED_VECTOR (csOptionVector, csPluginOption) OptionList;
00116
00117 public:
00119 csPluginManager (iObjectRegistry* object_reg);
00121 virtual ~csPluginManager ();
00122
00123 SCF_DECLARE_IBASE;
00124
00125 virtual iBase *LoadPlugin (const char *iClassID,
00126 const char *iInterface = NULL, int iVersion = 0);
00127 virtual iBase *QueryPlugin (const char *iInterface, int iVersion);
00128 virtual iBase *QueryPlugin (const char* iClassID,
00129 const char *iInterface, int iVersion);
00130 virtual bool UnloadPlugin (iComponent *iObject);
00131 virtual bool RegisterPlugin (const char *iClassID,
00132 iComponent *iObject);
00133 virtual int GetPluginCount ();
00134 virtual iBase* GetPlugin (int idx);
00135 virtual void Clear ();
00136 };
00137
00138 #endif // __CS_PLUGMGR_H__
00139