00001 #ifndef FBXFILESDK_KFBXMODULES_KFBXPLUGIN_H
00002 #define FBXFILESDK_KFBXMODULES_KFBXPLUGIN_H
00003
00004
00005
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 #include <fbxfilesdk/components/kbaselib/kaydaradef_h.h>
00039
00040 #include <fbxfilesdk/kfbxplugins/kfbxobject.h>
00041 #include <fbxfilesdk/components/kbaselib/klib/kstring.h>
00042 #include <fbxfilesdk/components/kbaselib/klib/kintrusivelist.h>
00043 #include <fbxfilesdk/kfbxevents/kfbxemitter.h>
00044 #include <fbxfilesdk/kfbxevents/kfbxlistener.h>
00045
00046
00047 #include <fbxfilesdk/fbxfilesdk_nsbegin.h>
00048
00049
00050 class KFbxSdkManager;
00051
00053
00054
00055
00056
00057
00058
00059 class KFbxLoadingStrategy;
00060 class KFbxPluginContainer;
00061
00062 #define KFBXPLUGIN_DECLARE(Plugin)\
00063 public:\
00064 static Plugin* Create( const KFbxPluginDefinition& pDefinition );\
00065 void Destroy();
00066
00067 #define KFBXPLUGIN_IMPLEMENT(Plugin)\
00068 Plugin* Plugin::Create( const KFbxPluginDefinition& pDefinition )\
00069 {\
00070 return new Plugin( pDefinition );\
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:
00133
00140 explicit KFbxPlugin(const KFbxPluginDefinition& pDefinition);
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
00157 public:
00162
00166 virtual bool SpecificInitialize() = 0;
00167
00171 virtual bool SpecificTerminate() = 0;
00173
00174 virtual bool NeedReadWrite(){ return false; }
00175 virtual void WriteBegin(KFbxScene& pScene){}
00176 virtual void WriteSettings(KFbxObject& pSettings){}
00177 virtual void WriteEnd(KFbxScene& pScene){}
00178 virtual void ReadBegin(KFbxScene& pScene){}
00179 virtual void ReadSettings(KFbxObject& pSettings){}
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
00191
00192 private:
00194
00195
00196
00197
00198
00199
00201 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00202
00203 friend class KFbxLoadingStrategy;
00204 bool Initialize(const KFbxPluginData& pData);
00205 bool Terminate();
00206
00207 KFBXObjectScopedPtr<KFbxObject> mPluginSettings;
00208
00209 #endif
00210 };
00211
00213 inline const KFbxPluginDefinition& KFbxPlugin::GetDefinition()const{ return mDefinition; }
00215 inline KFbxPluginData& KFbxPlugin::GetData(){ return mData; }
00217 inline const KFbxPluginData& KFbxPlugin::GetData()const{ return mData; }
00218
00219
00220
00221 #include <fbxfilesdk/fbxfilesdk_nsend.h>
00222
00223 #endif // FBXFILESDK_KFBXMODULES_KFBXPLUGIN_H