fbxpropertyhandle.h

Go to the documentation of this file.
00001 /****************************************************************************************
00002  
00003    Copyright (C) 2012 Autodesk, Inc.
00004    All rights reserved.
00005  
00006    Use of this software is subject to the terms of the Autodesk license agreement
00007    provided at the time of installation or download, or which otherwise accompanies
00008    this software in either electronic or hard copy form.
00009  
00010 ****************************************************************************************/
00011 
00013 #ifndef _FBXSDK_CORE_PROPERTY_HANDLE_H_
00014 #define _FBXSDK_CORE_PROPERTY_HANDLE_H_
00015 
00016 #include <fbxsdk/fbxsdk_def.h>
00017 
00018 #include <fbxsdk/core/fbxpropertytypes.h>
00019 #include <fbxsdk/core/fbxpropertydef.h>
00020 
00021 #include <fbxsdk/fbxsdk_nsbegin.h>
00022 
00023 // Forwards
00024 class FbxPropertyPage;
00025 class FbxPropertyHandle;
00026 class FbxConnectionPointFilter;
00027 
00028 /***********************************************
00029   FbxPropertyHandle
00030 ************************************************/
00031 typedef FbxPropertyHandle FbxTypeInfoHandle;
00032 
00036 class FBXSDK_DLL FbxPropertyHandle
00037 {
00038 public:
00043 
00044     static FbxPropertyHandle        Create();
00045 
00049     static FbxPropertyHandle        Create(const FbxPropertyHandle& pInstanceOf);
00050 
00055     static FbxTypeInfoHandle    Create(const char* pName, EFbxType pType=eFbxUndefined);
00056 
00061     static FbxTypeInfoHandle    Create(const char* pName, FbxTypeInfoHandle pTypeInfo);
00062 
00066     bool                        Destroy();
00067 
00069     FbxPropertyHandle();
00073     FbxPropertyHandle(const FbxPropertyHandle& pAddress);
00074 
00076     ~FbxPropertyHandle();
00077 
00078 
00083     FbxPropertyHandle(FbxPropertyPage* pPage, FbxInt pId=FBXSDK_PROPERTY_ID_ROOT);
00084 
00085 
00087 
00092 
00093     // Assignment
00097     FbxPropertyHandle& operator=(const FbxPropertyHandle& pHandle);
00098 
00103     bool    operator==(const FbxPropertyHandle& pHandle) const;
00104 
00109     bool    operator!=(const FbxPropertyHandle& pHandle) const;
00110 
00115     bool    Is(const FbxPropertyHandle& pHandle) const;
00116 
00118     bool    Valid() const;
00119 
00121     const char* GetName() const;
00123     const char* GetLabel() const;
00128     bool    SetLabel(const char* pLabel);
00129 
00131     EFbxType            GetType() const;
00133     FbxTypeInfoHandle   GetTypeInfo() const;
00134 
00135     // Flag management
00137     FbxPropertyAttr::EFlags GetFlags() const;
00138     
00144     FbxPropertyAttr::EInheritType   GetFlagsInheritType( FbxPropertyAttr::EFlags pFlags, bool pCheckReferences ) const;
00145 
00151     bool    ModifyFlags(FbxPropertyAttr::EFlags pFlags, bool pValue);
00152 
00158     bool    SetFlagsInheritType( FbxPropertyAttr::EFlags pFlags, FbxPropertyAttr::EInheritType pType );
00159 
00161     void*   GetUserData() const;
00162 
00167     bool    SetUserData(const void* pUserData);
00168 
00170     int     GetUserTag() const;
00171 
00176     bool    SetUserTag(int pUserData);
00178 
00183 
00188     int     AddEnumValue(const char* pStringValue);
00189 
00194     void    InsertEnumValue(int pIndex, const char* pStringValue);
00195 
00199     int     GetEnumCount();
00200 
00205     void    SetEnumValue(int pIndex, const char* pStringValue);
00206 
00210     void    RemoveEnumValue(int pIndex);
00211 
00216     char*   GetEnumValue(int pIndex);
00218 
00219 
00224 
00225     
00226 
00228     void    BeginCreateOrFindProperty();
00230     void    EndCreateOrFindProperty();
00231 
00235     inline bool IsRoot() const { return (mPage && (mId==0)) ? true : false; }
00236 
00241     bool    IsChildOf(const FbxPropertyHandle& pParent) const;
00242 
00247     bool    IsDescendentOf(const FbxPropertyHandle& pParent) const;
00248 
00253     bool    SetParent(const FbxPropertyHandle& pOther );
00254 
00260     FbxPropertyHandle   Add(const char* pName, const FbxTypeInfoHandle& pTypeInfo);
00261 
00265     FbxPropertyHandle   GetParent() const;
00266 
00267     
00268 
00272     FbxPropertyHandle   GetChild()  const;
00273 
00277     FbxPropertyHandle   GetSibling() const;
00278 
00282     FbxPropertyHandle   GetFirstDescendent()  const;
00283 
00289     FbxPropertyHandle   GetNextDescendent(const FbxPropertyHandle& pHandle) const;
00290 
00296     FbxPropertyHandle   Find(const char* pName, bool pCaseSensitive) const;
00297 
00304     FbxPropertyHandle   Find(const char* pName, const FbxTypeInfoHandle& pTypeInfo, bool pCaseSensitive) const;
00305 
00314     FbxPropertyHandle   Find(const char* pName, const char* pChildrenSeparator, bool pCaseSensitive) const;
00315 
00325     FbxPropertyHandle   Find(const char* pName, const char* pChildrenSeparator, const FbxTypeInfoHandle& pTypeInfo, bool pCaseSensitive) const;
00327 
00332 
00338     bool    ConnectSrc(const FbxPropertyHandle& pSrc, const FbxConnection::EType pType=FbxConnection::eDefault); 
00339 
00345     int     GetSrcCount(FbxConnectionPointFilter* pFilter=0) const; 
00346 
00353     FbxPropertyHandle   GetSrc(FbxConnectionPointFilter* pFilter=0, int pIndex=0) const; 
00354 
00359     bool    DisconnectSrc(const FbxPropertyHandle& pSrc);
00360 
00365     bool    IsConnectedSrc(const FbxPropertyHandle& pSrc);
00366 
00372     bool    ConnectDst(const FbxPropertyHandle& pDst, const FbxConnection::EType pType=FbxConnection::eDefault); 
00373 
00379     int     GetDstCount(FbxConnectionPointFilter* pFilter=0) const; 
00380 
00387     FbxPropertyHandle   GetDst(FbxConnectionPointFilter* pFilter=0, int pIndex=0) const; 
00388 
00393     bool    DisconnectDst(const FbxPropertyHandle& pDst);
00394 
00399     bool    IsConnectedDst(const FbxPropertyHandle& pDst);
00400 
00402     void    ClearConnectCache();
00403 
00405     void    WipeAllConnections();
00407 
00421 
00425     bool    HasMin() const;
00426 
00432     bool    GetMin(void* pValue, EFbxType pValueType) const;
00433 
00439     bool    SetMin(const void* pValue, EFbxType pValueType);
00440 
00445     template <class T> inline bool  SetMin( const T& pValue )           { return SetMin( &pValue,FbxTypeOf(pValue) ); }
00446 
00452     template <class T> inline T     GetMin( const T* pFBX_TYPE) const   { T lValue; GetMin( &lValue,FbxTypeOf(lValue) ); return lValue; }
00453 
00457     bool    HasSoftMin() const;
00458 
00464     bool    GetSoftMin(void* pValue, EFbxType pValueType) const;
00465 
00471     bool    SetSoftMin(const void* pValue, EFbxType pValueType);
00472 
00477     template <class T> inline bool  SetSoftMin( const T& pValue )           { return SetSoftMin( &pValue,FbxTypeOf(pValue) ); }
00478 
00484     template <class T> inline T     GetSoftMin( const T* pFBX_TYPE) const   { T lValue; GetSoftMin( &lValue,FbxTypeOf(lValue) ); return lValue; }
00485 
00489     bool    HasMax() const;
00490 
00496     bool    GetMax(void* pValue, EFbxType pValueType) const;
00497 
00503     bool    SetMax(const void* pValue, EFbxType pValueType);
00504 
00509     template <class T> inline bool  SetMax( const T& pValue )           { return SetMax( &pValue,FbxTypeOf(pValue) ); }
00510 
00516     template <class T> inline T     GetMax( const T* pFBX_TYPE) const   { T lValue; GetMax( &lValue,FbxTypeOf(lValue) ); return lValue; }
00517 
00521     bool    HasSoftMax() const;
00522 
00528     bool    GetSoftMax(void* pValue, EFbxType pValueType) const;
00529 
00535     bool    SetSoftMax  (const void* pValue, EFbxType pValueType);
00536 
00541     template <class T> inline bool  SetSoftMax( const T& pValue )           { return SetSoftMax( &pValue,FbxTypeOf(pValue) ); }
00542 
00548     template <class T> inline T     GetSoftMax( const T* pFBX_TYPE) const   { T lValue; GetSoftMax( &lValue,FbxTypeOf(lValue) ); return lValue; }
00549 
00550 
00555 
00560     FbxPropertyAttr::EInheritType   GetValueInheritType(bool pCheckReferences) const;
00561 
00566     bool    SetValueInheritType(FbxPropertyAttr::EInheritType pType);
00567 
00573     bool    GetDefaultValue(void* pValue, EFbxType pValueType) const;
00574 
00580     bool    Get(void* pValue, EFbxType pValueType) const;
00581 
00589     bool    Set(const void* pValue, EFbxType pValueType, bool pCheckValueEquality);
00590 
00595     template <class T> inline bool  Set( const T& pValue )          { return Set( &pValue,FbxTypeOf(pValue) ); }
00596 
00601     template <class T> inline T     Get( const T* pFBX_TYPE) const  { T lValue; Get( &lValue,FbxTypeOf(lValue) ); return lValue; }
00603 
00608 public:
00609 
00613     void    SetPageDataPtr(void* pData);
00614 
00618     void*   GetPageDataPtr() const;
00619 
00621 
00626 
00630     bool    PushPropertiesToParentInstance();
00631 
00632 
00634 
00639 
00643     bool    IsAReferenceTo(void) const;
00644 
00648     void*   GetReferenceTo(void) const;
00649 
00653     bool    IsReferencedBy(void) const;
00654 
00658     int     GetReferencedByCount(void) const;
00659 
00664     void*   GetReferencedBy(int pIndex) const; 
00666 
00667 
00668 private:
00669     FbxPropertyPage*    mPage;
00670     FbxInt              mId;
00671 
00672 };
00673 
00674 #include <fbxsdk/fbxsdk_nsend.h>
00675 
00676 #endif /* _FBXSDK_CORE_PROPERTY_HANDLE_H_ */