00001 
00004 #ifndef FBXFILESDK_FBXPROCESSORS_KFBXPROCESSORXREF_H
00005 #define FBXFILESDK_FBXPROCESSORS_KFBXPROCESSORXREF_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 
00042 #include <fbxfilesdk/fbxprocessors/fbxprocessors_def.h>
00043 
00044 #include <fbxfilesdk/fbxprocessors/kfbxprocessor.h>
00045 #include <fbxfilesdk/components/kbaselib/klib/kmap.h>
00046 
00047 namespace FBXPROCESSORS_NAMESPACE {
00048 
00052     class KFBX_DLL KFbxProcessorXRefCopy : public KFbxProcessor
00053     {
00054         KFBXOBJECT_DECLARE(KFbxProcessorXRefCopy, KFbxProcessor);
00055 
00056     public:
00057         class KFBX_DLL KFbxMissingUrlHandler
00058         {
00059         public:
00060             virtual ~KFbxMissingUrlHandler();
00061             virtual void MissingUrl(const KString& pUrl, const KFbxProperty&) = 0;
00062         };
00063 
00068             KFbxTypedProperty<fbxString>    OutputDirectory;
00069 
00073             KFbxTypedProperty<fbxBool1>     UpdateProperties;
00074 
00078             KFbxTypedProperty<fbxBool1>     TrackUpdatedProperties;
00079 
00087             KFbxTypedProperty<fbxBool1>     ForceCopy;
00088 
00092             KFbxTypedProperty<fbxBool1>     CopyFileTimes;
00094 
00099             KFbxMissingUrlHandler*          MissingUrlHandler;
00100 
00105         struct KFbxPropertyUpdate
00106         {
00107             KFbxProperty mProperty;
00108             fbxString    mOriginalValue;
00109 
00110             inline KFbxPropertyUpdate() {}
00111             inline KFbxPropertyUpdate(const KFbxProperty& pProp, const fbxString& pVal) :
00112                 mProperty(pProp), mOriginalValue(pVal) {}
00113 
00114             inline bool operator <(const KFbxPropertyUpdate& pOther) const
00115             {
00116                 return strcmp(mProperty.GetName(), pOther.mProperty.GetName()) < 0;
00117             }
00118         };
00119         typedef KSet2<KFbxPropertyUpdate>           KFbxUpdateSet;
00120         typedef KMap<KFbxObject*, KFbxUpdateSet>    KFbxPropertyUpdateMap;
00121 
00127         KFbxPropertyUpdateMap& GetUpdatedProperties();
00128 
00132         void RevertPropertyChanges();
00133 
00137         struct KFBX_DLL KFbxAutoRevertPropertyChanges
00138         {
00139             KFbxAutoRevertPropertyChanges(KFbxProcessorXRefCopy* pCopy) : mXRefCopy(pCopy) {}
00140             ~KFbxAutoRevertPropertyChanges()
00141             {
00142                 if( mXRefCopy )
00143                     mXRefCopy->RevertPropertyChanges();
00144             }
00145 
00146             KFbxProcessorXRefCopy* mXRefCopy;
00147         };
00148 
00150         
00151         
00152         
00154         #ifndef DOXYGEN_SHOULD_SKIP_THIS
00155 
00156             protected:
00157                 KFbxPropertyUpdateMap       mUpdatedProperties;
00158 
00159             
00160             protected:
00161                 virtual KFbxObject* Clone(KFbxObject* pContainer, KFbxObject::ECloneType pCloneType) const;
00162                 KFbxProcessorXRefCopy(KFbxSdkManager& pManager, char const* pName);
00163 
00164                 bool ConstructProperties(bool pForceSet);
00165 
00166                 
00167                 
00168                 bool ShouldCopyFile(const KString& pTarget, const KString& pSource) const;
00169 
00173             protected:
00174                 virtual bool                internal_ProcessCollectionBegin (KFbxCollection*     pObject);
00175                 virtual bool                internal_ProcessCollectionEnd   (KFbxCollection*     pObject);
00176                 virtual bool                internal_ProcessObject          (KFbxObject*     pObject);
00177                 bool                        ProcessPathProperty(KFbxProperty &pProperty);
00178                 virtual bool                ValidPropertyForXRefCopy(KFbxObject* pObject, KFbxProperty& lProperty) const;
00180 
00181         #endif // #ifndef DOXYGEN_SHOULD_SKIP_THIS
00182 
00183     };
00184 }
00185 
00186 #endif // FBXFILESDK_FBXPROCESSORS_KFBXPROCESSORXREF_H
00187