00001 #ifndef __FBXEVENTS_FBXEVENTHANDLER_H__
00002 #define __FBXEVENTS_FBXEVENTHANDLER_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 <kaydaradef.h>
00039 #ifndef KFBX_DLL
00040 #define KFBX_DLL K_DLLIMPORT
00041 #endif
00042
00043
00044 #include <kfbxevents/kfbxevents.h>
00045
00046
00047 #include <klib/kintrusivelist.h>
00048
00049
00050 #include <fbxfilesdk_nsbegin.h>
00051 namespace kfbxevents
00052 {
00053 class KFbxListener;
00054
00055
00056 class KFbxEventHandler
00057 {
00058 public:
00059 enum
00060 {
00061 eNODE_LISTENER = 0,
00062 eNODE_EMITTER,
00063 eNODE_COUNT
00064 };
00065
00066 KFbxEventHandler(){}
00067 virtual ~KFbxEventHandler(){}
00068
00069
00070 virtual int GetHandlerEventType() = 0;
00071 virtual void FunctionCall(const KFbxEventBase& pEvent) = 0;
00072 virtual KFbxListener* GetListener() = 0;
00073
00074 LISTNODE(KFbxEventHandler, eNODE_COUNT);
00075 };
00076
00077
00078 template <typename EventType, typename ListenerType>
00079 class KFbxMemberFuncEventHandler : public KFbxEventHandler
00080 {
00081
00082
00083 typedef void (ListenerType::*CBFunction)(const EventType*);
00084
00085 public:
00086 KFbxMemberFuncEventHandler(ListenerType* pListenerInstance, CBFunction pFunc) :
00087 mFunc(pFunc),
00088 mListener(pListenerInstance){}
00089
00090
00091 virtual int GetHandlerEventType(){ return EventType::GetStaticTypeId(); }
00092 virtual void FunctionCall(const KFbxEventBase& pEvent){ (*mListener.*mFunc)(reinterpret_cast<const EventType*>(&pEvent)); }
00093 virtual KFbxListener* GetListener(){ return mListener;}
00094
00095 private:
00096 ListenerType* mListener;
00097
00098
00099 CBFunction mFunc;
00100 };
00101
00102
00103 template <typename EventType, typename ListenerType>
00104 class KFbxConstMemberFuncEventHandler : public KFbxEventHandler
00105 {
00106
00107
00108 typedef void (ListenerType::*CBFunction)(const EventType*)const;
00109
00110 public:
00111 KFbxConstMemberFuncEventHandler(ListenerType* pListenerInstance, CBFunction pFunc) :
00112 mFunc(pFunc),
00113 mListener(pListenerInstance){}
00114
00115
00116 virtual int GetHandlerEventType(){ return EventType::GetStaticTypeId(); }
00117 virtual void FunctionCall(const KFbxEventBase& pEvent){ (*mListener.*mFunc)(reinterpret_cast<const EventType*>(&pEvent)); }
00118 virtual KFbxListener* GetListener(){ return mListener;}
00119
00120 private:
00121 ListenerType* mListener;
00122
00123
00124 CBFunction mFunc;
00125 };
00126
00127
00128 template <typename EventType>
00129 class KFbxFuncEventHandler : public KFbxEventHandler
00130 {
00131
00132
00133 typedef void (*CBFunction)(const EventType*,KFbxListener*);
00134
00135 public:
00136 KFbxFuncEventHandler(KFbxListener* pListener, CBFunction pFunc) :
00137 mFunc(pFunc),
00138 mListener(pListener){}
00139
00140
00141 virtual int GetHandlerEventType(){ return EventType::GetStaticTypeId(); }
00142 virtual void FunctionCall(const KFbxEventBase& pEvent){ (*mFunc)(reinterpret_cast<const EventType*>(&pEvent),mListener); }
00143 virtual KFbxListener* GetListener(){ return mListener; }
00144
00145 private:
00146 KFbxListener* mListener;
00147
00148
00149 CBFunction mFunc;
00150 };
00151 }
00152
00153 #include <fbxfilesdk_nsend.h>
00154
00155 #endif