00001
00004 #ifndef FBXFILESDK_KFBXMODULES_KFBXPLUGIN_H
00005 #define FBXFILESDK_KFBXMODULES_KFBXPLUGIN_H
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041 #include <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00042
00043 #include <fbxfilesdk/kfbxplugins/kfbxobject.h>
00044
00045 #include <fbxfilesdk/components/kbaselib/klib/kstring.h>
00046 #include <fbxfilesdk/components/kbaselib/klib/kintrusivelist.h>
00047 #include <fbxfilesdk/components/kbaselib/object/klibrary.h>
00048
00049 #include <fbxfilesdk/kfbxevents/kfbxemitter.h>
00050 #include <fbxfilesdk/kfbxevents/kfbxlistener.h>
00051
00052
00053 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00054
00055
00056 class KFbxSdkManager;
00057
00058
00059 class KFbxLoadingStrategy;
00060 class KFbxPluginContainer;
00061
00062 #define KFBXPLUGIN_DECLARE(Plugin)\
00063 public:\
00064 static Plugin* Create( const KFbxPluginDefinition& pDefinition, kLibHandle pLibHandle );\
00065 void Destroy();
00066
00067 #define KFBXPLUGIN_IMPLEMENT(Plugin)\
00068 Plugin* Plugin::Create( const KFbxPluginDefinition& pDefinition, kLibHandle pLibHandle )\
00069 {\
00070 return new Plugin( pDefinition, pLibHandle );\
00071 }\
00072 void Plugin::Destroy()\
00073 {\
00074 delete this;\
00075 }
00076
00077
00083 struct KFBX_DLL KFbxPluginDefinition
00084 {
00085 KFbxPluginDefinition():mName("Unknown Name"),mVersion("Unknown Version"){}
00086 KString mName;
00087 KString mVersion;
00088 };
00089
00095 struct KFBX_DLL KFbxPluginData
00096 {
00097 KFbxPluginData():mQueryEmitter(0),mSDKManager(0),mPluginContainer(0){}
00098 explicit KFbxPluginData(const KFbxPluginData& r):mQueryEmitter(r.mQueryEmitter),mSDKManager(r.mSDKManager),mPluginContainer(r.mPluginContainer){}
00099 KFbxSdkManager* mSDKManager;
00100 KFbxPluginContainer* mPluginContainer;
00101 kfbxevents::KFbxEmitter* mQueryEmitter;
00102 };
00103
00109 class KFBX_DLL KFbxPlugin : public kfbxevents::KFbxListener
00110 {
00111 KFBX_LISTNODE(KFbxPlugin,1);
00112
00113 public:
00118
00122 inline const KFbxPluginDefinition& GetDefinition()const;
00123
00124 virtual void Destroy() = 0;
00125
00126 inline KFbxObject& GetPluginSettings() { return *(mPluginSettings.Get()); }
00127
00128 inline const KFbxObject& GetPluginSettings() const { return *(mPluginSettings.Get()); }
00129
00131
00132 protected:
00140 explicit KFbxPlugin(const KFbxPluginDefinition& pDefinition, kLibHandle pLibHandle);
00141
00145 inline KFbxPluginData& GetData();
00146
00150 inline const KFbxPluginData& GetData()const;
00151
00152 private:
00153 bool mInitialized;
00154 KFbxPluginData mData;
00155 KFbxPluginDefinition mDefinition;
00156 kLibHandle mLibraryHandle;
00157
00158 public:
00163
00167 virtual bool SpecificInitialize() = 0;
00168
00172 virtual bool SpecificTerminate() = 0;
00174
00175 virtual void WriteBegin(KFbxScene& pScene){}
00176 virtual void WriteParameters(KFbxObject& pParams){}
00177 virtual void WriteEnd(KFbxScene& pScene){}
00178 virtual void ReadBegin(KFbxScene& pScene){}
00179 virtual void ReadParameters(KFbxObject& pParams){}
00180 virtual void ReadEnd(KFbxScene& pScene){}
00181
00186 template <typename EventType,typename ListernerType> inline KFbxEventHandler* Bind(void (ListernerType::*pFunc)(const EventType*))
00187 {
00188 return KFbxListener::Bind<EventType,ListernerType>(*(GetData().mQueryEmitter), pFunc );
00189 }
00190
00194 kLibHandle GetLibraryHandle();
00195
00196 private:
00198
00199
00200
00201
00202
00203
00205 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00206
00207 friend class KFbxLoadingStrategy;
00208 bool Initialize(const KFbxPluginData& pData);
00209 bool Terminate();
00210
00211 KFBXObjectScopedPtr<KFbxObject> mPluginSettings;
00212
00213 #endif
00214 };
00215
00217 inline const KFbxPluginDefinition& KFbxPlugin::GetDefinition()const{ return mDefinition; }
00219 inline KFbxPluginData& KFbxPlugin::GetData(){ return mData; }
00221 inline const KFbxPluginData& KFbxPlugin::GetData()const{ return mData; }
00222
00223
00224 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00225
00226 #endif // FBXFILESDK_KFBXMODULES_KFBXPLUGIN_H