fbsdk/fbcomponent.h Source File
 
 
 
fbsdk/fbcomponent.h
Go to the documentation of this file.
00001 #ifndef __FBBASE_H__
00002 #define __FBBASE_H__
00003 /**************************************************************************
00004  Copyright (c) 1994 - 2009 Autodesk, Inc. and/or its licensors.
00005  All Rights Reserved.
00006  
00007  The coded instructions, statements, computer programs, and/or related 
00008  material (collectively the "Data") in these files contain unpublished 
00009  information proprietary to Autodesk, Inc. and/or its licensors, which is 
00010  protected by Canada and United States of America federal copyright law 
00011  and by international treaties.
00012  
00013  The Data may not be disclosed or distributed to third parties, in whole 
00014  or in part, without the prior written consent of Autodesk, Inc. 
00015  ("Autodesk").
00016  
00017  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00018  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO 
00019  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR 
00020  ARISING BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES 
00021  OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR 
00022  PURPOSE OR USE. WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT 
00023  WARRANT THAT THE OPERATION OF THE DATA WILL BE UNINTERRUPTED OR ERROR 
00024  FREE.
00025  
00026  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS 
00027  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR 
00028  EXPENSES OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE 
00029  DAMAGES OR OTHER SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS 
00030  OF PROFITS, REVENUE OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR 
00031  DAMAGES OF ANY KIND), HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF 
00032  LIABILITY, WHETHER DERIVED FROM CONTRACT, TORT (INCLUDING, BUT NOT 
00033  LIMITED TO, NEGLIGENCE), OR OTHERWISE, ARISING OUT OF OR RELATING TO THE 
00034  DATA OR ITS USE OR ANY OTHER PERFORMANCE, WHETHER OR NOT AUTODESK HAS 
00035  BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGE.
00036  
00037 **************************************************************************/
00038 
00047 #include <kaydaradef.h>
00048 
00049 // This include directive is necessary because of the definition of the
00050 // FBLibrary class.
00051 #include <fbsdk/fblibrary.h>
00052 
00053 #ifndef FBSDK_DLL
00054 
00057         #define FBSDK_DLL K_DLLIMPORT
00058 #endif
00059 
00060 // Global includes
00061 #include <fbsdk/fbplug.h>
00062 #include <fbsdk/fbarray.h>
00063 #include <fbsdk/fbstring.h>
00064 #include <fbsdk/fbproperties.h>
00065 
00066 #ifdef _MSC_VER
00067         #pragma warning (disable: 4275) // 'int' : forcing value to bool 'true' or 'false' (performance warning) 
00068         #pragma warning (disable: 4661) // no suitable definition provided for explicit template instantiation request
00069 #endif
00070 
00071 K_FORWARD( IRegister );
00072 K_FORWARD( IError );
00073 K_FORWARD( IStore );
00074 K_FORWARD( IKtView );
00075 K_FORWARD( KEventBase );
00076 K_FORWARD( KGlobalNamedEvent );
00077 
00078 #ifdef FBSDKUseNamespace
00079         namespace FBSDKNamespace {
00080 #endif
00081 
00082 #ifndef FBINCLUDE
00083 // Section that must be exported
00084 #else
00085 #endif
00086 
00089 #define FB_DEFAULT_SDK_ICON     "openreality_noicon.png"
00090 
00091 // For internal use only.
00095 #define __FBClassInit mLocalPtr = NULL;        
00096 
00097 // For internal use only.
00101 #define __FBClassDeInit if (mLocalPtr) {delete mLocalPtr; mLocalPtr = NULL;}
00102 
00103 // For internal use only.
00107 #define __FBClassInitSDKComponent( pObjectToWrappedIsAllocated ) \
00108     __FBClassInit; \
00109     mSDKComponent = pObjectToWrappedIsAllocated;
00110 
00111 
00115 #define __FBClassImplementation( ThisComponent,pInternalClassId )       \
00116                 int ThisComponent::TypeInfo=__FBRegisterTypeInfo(pInternalClassId);\
00117                 int ThisComponent::GetInternalClassId() { return pInternalClassId; }
00118 
00119 #define __FBClassImplementationGroup( ThisComponent, pInternalClass )   \
00120         __FBClassImplementation( ThisComponent,pInternalClass::ClassId )\
00121         const char* ThisComponent::ClassGroupName = pInternalClass::ClassGroupName;
00122 
00123 
00128 FBSDK_DLL int  __FBRegisterTypeInfo(int pInternalClassId);
00129 
00134 FBSDK_DLL int  __FBGetInternalClassId(int pTypeInfo);
00135 
00140 FBSDK_DLL FBPlug* __FBObjectCreatorSub(HIObject pObject);
00141 
00145 #define __FBClassDeclare( Name,Parent ) \
00146     friend FBSDK_DLL FBPlug* __FBObjectCreatorSub(HIObject pObject);\
00147   public: \
00148 \
00151         typedef Parent  __FBParentClass;\
00152 \
00155         typedef Name    __FBClassType;\
00156 \
00159         virtual const char* ClassName() override { return #Name; } \
00160 \
00164         virtual bool Is( int pTypeId ) override { return (pTypeId==TypeInfo) ? true : Parent::Is( pTypeId ); } \
00165     virtual int GetTypeId() override { return TypeInfo; } \
00166 \
00169         static  int GetInternalClassId(); \
00170 \
00173         Data##Name* mLocalPtr; \
00174         virtual ~Name(); \
00175         static int TypeInfo; \
00176 \
00177   private:
00178 
00182 #define __FBClassDeclareGroup( Name,Parent ) \
00183     __FBClassDeclare( Name,Parent )\
00184   public:\
00185     static  const char* ClassGroupName; \
00186 \
00187   private: 
00188 
00189 FBSDK_DLL void __FBAddModelToScene( HIObject pObject );         
00190 FBSDK_DLL void __FBRemoveModelFromScene( HIObject pObject );    
00191 
00195 #define FBStorableClassImplementation(ClassName, Type)\
00196         const char* ClassName::FbxGetObjectSubType(){ return #ClassName; }\
00197         HIObject RegisterStorable##ClassName##Create(HIObject /*pOwner*/, const char* pName, void* /*pData*/){\
00198                 ClassName* Class = new ClassName(pName);\
00199                 Class->mAllocated = true;\
00200                 if( Class->FBCreate() ){\
00201             __FBRemoveModelFromScene( Class->GetHIObject() ); /* Hack in MoBu2013, we shouldn't add object to the scene/entity automatically*/\
00202             return Class->GetHIObject();\
00203                 } else {\
00204                         delete Class;\
00205                         return NULL;}}\
00206         FBLibraryModule(ClassName##Storable){\
00207                 FBString lGroup = "FbxStorable/";\
00208                 lGroup += #Type;\
00209                 FBRegisterObject(ClassName##R2, lGroup, #ClassName, "", RegisterStorable##ClassName##Create, true, NULL);}
00210 
00214 #define FBElementClassImplementation(ClassName,IconFileName)\
00215         HIObject RegisterElement##ClassName##Create(HIObject /*pOwner*/, const char* pName, void* /*pData*/){\
00216                 ClassName* Class = new ClassName(pName);\
00217                 Class->mAllocated = true;\
00218                 if( Class->FBCreate() ){\
00219             __FBRemoveModelFromScene( Class->GetHIObject() ); /* Hack in MoBu2013, we shouldn't add object to the scene/entity automatically*/\
00220                         return Class->GetHIObject();\
00221                 } else {\
00222                         delete Class;\
00223                         return NULL;}}\
00224         FBLibraryModule(ClassName##Element){\
00225                 FBRegisterObject(ClassName##R2, "Browsing/Templates/Elements", #ClassName, "", RegisterElement##ClassName##Create, true, IconFileName);}
00226 
00230 #define FBShadingElementClassImplementation(ClassName,IconFileName)\
00231         HIObject RegisterShadingElement##ClassName##Create(HIObject /*pOwner*/, const char* pName, void* /*pData*/){\
00232                 ClassName* Class = new ClassName(pName);\
00233                 Class->mAllocated = true;\
00234                 if( Class->FBCreate() ){\
00235                         return Class->GetHIObject();\
00236                 } else {\
00237                         delete Class;\
00238                         return NULL;}}\
00239         FBLibraryModule(ClassName##ShadingElement){\
00240                 FBRegisterObject(ClassName##R2, "Browsing/Templates/Shading Elements", #ClassName, "", RegisterShadingElement##ClassName##Create, true, IconFileName);}
00241 
00248 #define FBStorableClassDeclare(Name, Parent)\
00249         FBClassDeclare(Name, Parent);\
00250 public:\
00251         virtual const char* FbxGetObjectSubType() override; \
00252 \
00253 private: \
00254 
00255 
00263 #define FBPropertyInitComponent( Param,Type,PropName,Get,Set ) \
00264         { \
00265                 PropertyAdd(PropName.Init( (void *)Param,#PropName,(Type* (*)(void *))Get,(void (*)(void *,Type*))Set )); \
00266                 PropName.TypeInfo = &Type::TypeInfo; \
00267         }
00268 
00276 #define FBIS( Component,ComponentType ) \
00277         ((Component) && (Component)->Is( ComponentType::TypeInfo ))
00278 
00280 // Utility function
00282 // For internal use only.
00283 __FB_FORWARD( FBComponent );
00284 __FB_FORWARD( FBVisualComponent );
00285 
00292 FBSDK_DLL FBComponent* GetFBComponent( const HIObject Object );
00293 
00294 #if !defined(K_NO_UI)
00295 
00300 FBSDK_DLL FBVisualComponent*  FBGetFBVisualComponent( HIKtView pObject,bool pAutoCreate=true );
00301 #endif
00302 
00308 FBSDK_DLL FBComponent*  FBGetFBComponent( HIObject pObject, bool pAutoCreate=true );
00309 
00315 FBSDK_DLL FBPlug*       FBGetFBPlug( HIObject pObject, bool pAutoCreate=true );
00316 
00318 typedef FBArrayTemplate<FBComponent*> FBComponentList;
00321 FBSDK_DLL FBArrayTemplate<FBComponent*>& FBGetComponentArray();
00322 
00324 // Registration macros
00326 
00331 #define FBRegisterEvent         ( Object, EventId, EventProc )  IQ(     Object,IRegister)->Register             ( EventId,(HICallback)this,(kICallbackHandler)EventProc );
00332 
00336 #define FBUnregisterEvent       ( Object, EventId, EventProc )  IQ(     Object,IRegister)->Unregister   ( EventId,(HICallback)this,(kICallbackHandler)EventProc );
00337 
00342 FBSDK_DLL void FBSetStoreableCustomModelRegistered();
00343 FBSDK_DLL bool FBGetStoreableCustomModelRegistered();
00344 
00349 FBSDK_DLL void FBSetStoreableCustomMaterialRegistered();
00350 FBSDK_DLL bool FBGetStoreableCustomMaterialRegistered();
00351 
00356 FBSDK_DLL void FBSetStoreableCustomTextureRegistered();
00357 FBSDK_DLL bool FBGetStoreableCustomTextureRegistered();
00358 
00359 FBSDK_DLL bool FBObject_Register  ( const char * pGroupName,const char * pEntryName,const char * pDescription, kObjectCreatorFnc pCreatorFnc, bool pIsMultipleAllowed,const char * pIconFilename);
00360 FBSDK_DLL bool FBObject_Unregister( const char * pGroupName,const char * pEntryName, int nth=0 );
00361 
00369 FBSDK_DLL FBComponent* FBCreateObject( const char* pGroupName, const char* pEntryName, const char* pName, void* pData = NULL, int nth = 0 );
00370 
00376 inline  bool FBUnregisterObject( const char * pGroupName, const char * pEntryName, int nth=0 ) { return FBObject_Unregister( pGroupName,pEntryName,nth ); }
00381 #define FBRegisterObject( LocalId,Path,Name,Description,Constructor,IsMultipleAllowed,IconFilename ) \
00382         static int __R##LocalId = FBObject_Register( Path,Name,Description,Constructor,IsMultipleAllowed,IconFilename )
00383 
00384 typedef HIRegister      HISender;
00386 typedef HKEventBase HKEvent;
00391 typedef void (ICallback::*FBCallback)(HISender pSender,HKEvent pEvent);
00392 
00393 FBSDK_DLL int FBRegister_ClassId(const char* pClassName);
00398 #define FBDeclareUserObject(ClassName)\
00399 public:\
00400         static int              ClassId;\
00401         virtual int             GetUserClassId();\
00402         virtual const char*     FbxGetObjectSubType() override;\
00403 \
00404 private:
00405 
00407 // FBComponent
00409 #ifdef new
00410 
00413         #define RENEW new
00414         #undef new
00415 #endif
00416 
00418 // FBSceneList
00420 FB_FORWARD( FBPropertyListComponent );
00421 __FB_FORWARD( FBComponent );
00422 FB_DEFINE_LIST( FBSDK_DLL, Component );
00423 
00424 FB_FORWARD( FBFolder );
00425 FB_DEFINE_COMPONENT( FBSDK_DLL, Folder );
00426 
00428 enum FBObjectFlag
00429 {
00430         kFBFlagSelectable           = (1 << 0),         
00431         kFBFlagDeletable            = (1 << 1),         
00432         kFBFlagSavable              = (1 << 2),         
00433         kFBFlagVisible              = (1 << 3),         
00434         kFBFlagClonable             = (1 << 4),         
00435         kFBFlagSystem               = (1 << 5),         
00436         kFBFlagNewable              = (1 << 6),         
00437         kFBFlagRenamable            = (1 << 7),         
00438         kFBFlagMergeable            = (1 << 8),         
00439         kFBFlagBrowsable            = (1 << 9),         
00440         kFBFlagParentable           = (1 << 10),    
00441     kFBFlagDetachable           = (1 << 11),    
00442         kFBFlagUndoable             = (1 << 12),        
00443         kFBFlagUndoableSeparately   = (1 << 13),        
00444     kFBFlagKeyable              = (1 << 14),    
00445         kFBFlagAllocated            = (1 << 15),        
00446         kFBFlagStory                = (1 << 16),        
00447         kFBFlagStorable6            = (1 << 17),        
00448     kFBFlagStorableData6        = (1 << 18),    
00449     kFBFlagStorableBlindData    = (1 << 19),    
00450     kFBFlagStorableBlindDataForceBinary = (1 << 20), 
00451     kFBFlagUniqueName           = (1 << 21),    
00452     kFBFlagNotSelectableNameSpace = (1 << 22),  
00453     kFBFlagNamespaceEditable      = (1 << 23),  
00454 };
00455 
00456 K_DEPRECATED_2014 const int  kFBFlagCustomObject  = (1 << 24); 
00457 
00459 enum FBObjectStatus {
00460         kFBStatusCreating       = (1 << 0),     
00461         kFBStatusStoring        = (1 << 1),     
00462         kFBStatusRetrieving     = (1 << 2),     
00463         kFBStatusMerging        = (1 << 3),     
00464         kFBStatusDestroying     = (1 << 4),     
00465 };
00466 
00468 K_DEPRECATED_2014 const int kFBStatusOwnedByUndo = (1 << 5);
00469 
00471 enum FBNamespaceAction
00472 {
00473     kFBConcatNamespace,                     
00474     kFBReplaceNamespace,                    
00475     kFBRemoveAllNamespace                   
00476 };
00477 
00478 FB_DEFINE_ENUM(FBSDK_DLL, ConnectionType);
00479 FB_DEFINE_ENUM(FBSDK_DLL, ConnectionAction);
00480 FB_DEFINE_ENUM(FBSDK_DLL, ObjectFlag);
00481 
00484 class FBSDK_DLL FBPropertyListComponentBase : public FBPropertyBasicList
00485 {
00486   protected:
00488         int             mClassId;
00490         bool mParents;
00491   public:
00493         FBPropertyListComponentBase();
00498         virtual int Add( FBComponent* pItem );
00502     virtual void RemoveAt( int pIndex );
00507         virtual FBComponent* GetAt(int pIndex)=0;
00512         FBComponent* operator[](int pIndex);
00516         virtual int GetCount();
00517 
00522         virtual int Find( FBComponent* pItem );
00523 
00528         virtual int Remove( FBComponent* pItem );
00529 
00530         // Internal functions
00531         void SetClassId( int pClassId );
00532         int  GetClassId( );
00533         void SetListOfParents( bool pListOfParents );
00534         bool GetIsListOfParents();
00535 
00539         virtual FBPropertyType GetPropertyType( ) override { return kFBPT_object; }
00540 };
00543 class FBSDK_DLL FBPropertyListComponent : public FBPropertyListComponentBase
00544 {
00545   public:
00550         virtual FBComponent* GetAt(int pIndex);
00551 };
00552 
00554 // FBPropertyListObject
00556 
00557 FB_FORWARD( FBPropertyListObject );
00558 
00563 class FBSDK_DLL FBPropertyListObject : public FBPropertyListComponent
00564 {
00565   public:
00567     FBPropertyListObject();
00568 
00572     virtual int GetCount();
00573 
00575 
00579     virtual FBComponent* operator[]( int pIndex );
00580     virtual FBComponent* GetAt( int pIndex );
00582 
00587     virtual int Add( FBComponent* pObject );
00588 
00594     virtual int SetAt(int pIndex, FBComponent* pObject);
00595 
00599     virtual void RemoveAt( int pIndex );
00600 
00606     virtual int InsertAt(int pIndex, FBComponent* pObject);
00607 
00610     virtual void Clear();
00611 
00615         virtual void SetSingleConnect(bool pSingleConnect);
00616 
00620         virtual int GetSingleConnect();
00621 
00625         void SetFilter(int pInternalClassId);
00626 
00630         int GetFilter();
00631 
00632 private:
00634 
00638     FBPropertyListObject( const FBPropertyListObject& );
00639     const FBPropertyListObject& operator =( const FBPropertyListObject& );
00641 };
00642 
00643 __FB_FORWARD( FBNamespace );
00644 __FB_FORWARD( FBFileReference );
00645 
00658 class FBSDK_DLL FBComponent : public FBPlug
00659 {
00660 public:
00661 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00662 
00663         DataFBComponent* mLocalPtr;                                     
00664 protected:
00666         FBString                mName;
00667 #endif
00668     
00669 public:
00671         static int              TypeInfo;
00672 
00676         static int GetInternalClassId();
00677 
00681         FBComponent( HIObject pObject );                
00682 
00684         virtual ~FBComponent();                                                         
00685 
00689         virtual bool FBCreate();
00690 
00692         virtual void FBDestroy();
00693 
00695         virtual void FBDelete() override;
00696 
00698         virtual bool SetHIObject(HIObject pObject, bool pSDKComponent) override;
00699 
00704         virtual int     PropertyAdd( FBProperty* pProperty );
00705 
00710         bool PropertyAddReferenceProperty( FBProperty* pReferenceProperty );
00711 
00716         void PropertyRemove( FBProperty* pProperty );
00717 
00722     void PropertyGetModifiedList(FBArrayTemplate<FBProperty*>& pPropList, FBPlugModificationFlag pModificationFlags);
00723 
00732         FBProperty* PropertyCreate( const char* pName, FBPropertyType pType, const char * pDataType, bool pAnimatable, bool pIsUser = false, FBProperty* pReferenceSource = NULL  );
00733 
00737         FBObjectFlag GetObjectFlags();
00738 
00742         void SetObjectFlags(FBObjectFlag pFlags);
00743 
00748         bool HasObjectFlags(FBObjectFlag pFlags);
00749 
00753         void EnableObjectFlags(FBObjectFlag pFlags);
00754 
00758         void DisableObjectFlags(FBObjectFlag pFlags);
00759 
00764         void SetObjectStatus(FBObjectStatus pStatus, bool pValue);
00765 
00769         bool GetObjectStatus(FBObjectStatus pStatus);
00770 
00781     bool ProcessNamespaceHierarchy( FBNamespaceAction pNamespaceAction, const char* pNamespaceName, const char* pReplaceTo=NULL, bool pAddRight=true );
00782 
00793     bool ProcessObjectNamespace ( FBNamespaceAction pNamespaceAction, const char* pNamespaceName, const char* pReplaceTo=NULL, bool pAddRight=true );
00794 
00798         virtual const char* ClassName() override;
00799 
00804     virtual bool UseCustomPropertyViewSet() const { return true; }
00805 
00809     const char* GetFullName( void );
00810 
00813     void SetOwnerNamespace(FBNamespace* pOwnerNSObj);
00814 
00818     FBNamespace* GetOwnerNamespace( void );
00819     
00820 
00824     FBFileReference* GetOwnerFileReference( void );
00825 
00829         void HardSelect();
00830 
00831 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00832 
00833         // Overloaded allocation/destruction operator.
00834         void *operator new( size_t stAllocateBlock );
00835         void operator delete( void *pvMem );
00836 
00837         void *operator new( size_t stAllocateBlock,     int blockType, const char *filename, int linenumber  );
00838 #if     _MSC_VER >= 1200
00839         void operator delete( void *pvMem, int blockType, const char *filename, int linenumber  );
00840 #endif
00841 
00842 
00844         // Used to manage sub property events.
00845     void RegisterPropertyEvent(FBPropertyEvent* pPropertyEvent);
00846     void UnregisterPropertyEvent(FBPropertyEvent* pPropertyEvent);
00847     void InvalidatePropertyEventsParents();
00849 #endif
00850 
00851     FBPropertyManager           PropertyList;   
00852         FBPropertyListComponent Components;             
00853         FBPropertyListComponent Parents;                
00854         FBPropertyBool                  Selected;               
00855         FBPropertyString                Name;                   
00856     FBPropertyString            LongName;               
00857 
00858 #if !defined(K_NO_FOLDER)
00859         FBPropertyFolder                Folder;                 
00860 #endif
00861 
00862 public:
00863 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00864     IObject_Declare(K_IMPLEMENTATION);
00865     ICallback_Declare(K_IMPLEMENTATION);
00866 #endif
00867 
00872         virtual bool Is( int pTypeId );
00873     virtual int GetTypeId();
00874 
00875         static void FBComponentSetName( FBComponent* pObject, const char *pName );
00876         static const char* FBComponentGetName( FBComponent* pObject );
00877 
00878     static void FBComponentSetLongName( FBComponent* pObject, const char *pName );
00879     static const char* FBComponentGetLongName( FBComponent* pObject );
00880 
00881 public:
00882 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00883 
00884         KObject*        mDummyObject;
00885     void KObjectEvent(HIRegister pView, HKEventBase pEvent);
00886 #endif
00887 };
00888 
00890 typedef FBComponent FBObject;
00891 
00892 #ifdef RENEW
00893         #define new new( _NORMAL_BLOCK, __FILE__, __LINE__)
00894         #undef RENEW
00895 #endif
00896 
00898 // FBEvent
00900 __FB_FORWARD( FBEvent );
00901 
00903 class FBSDK_DLL FBEvent
00904 {
00905 public:
00911         FBEvent( HKEvent pEvent );
00912 
00913         FBPropertyInt   Type;                           
00914 #ifndef DOXYGEN_SHOULD_SKIP_THIS
00915 protected:
00917         HKEventBase mEvent;
00918 public:
00920         void PropertyAdd( FBProperty* ) {};
00921 #endif
00922 };
00923 
00925 // FBEventConnectionNotify
00927 __FB_FORWARD( FBEventConnectionNotify );
00928 
00930 class FBSDK_DLL FBEventConnectionNotify : public FBEvent
00931 {
00932 public:
00936         FBEventConnectionNotify(HKEventBase pEvent);
00937 
00938         FBPropertyConnectionAction      Action;                 
00939         FBPropertyInt                           SrcIndex;               
00940         FBPropertyConnectionType        ConnectionType; 
00941         FBPropertyPlug                          SrcPlug;                
00942         FBPropertyPlug                          DstPlug;                
00943         FBPropertyPlug                          NewPlug;                
00944 };
00945 
00947 // FBEventConnectionDataNotify
00949 __FB_FORWARD( FBEventConnectionDataNotify );
00950 
00952 class FBSDK_DLL FBEventConnectionDataNotify : public FBEvent
00953 {
00954 public:
00958         FBEventConnectionDataNotify(HKEventBase pEvent);
00959 
00960         FBPropertyConnectionAction      Action;                 
00961         FBPropertyPlug                          Plug;                   
00962         void*                                           GetData();              
00963         void*                                           GetOldData();   
00964 };
00965 
00967 // FBEventConnectionStateNotify
00969 __FB_FORWARD( FBEventConnectionStateNotify );
00970 
00972 class FBSDK_DLL FBEventConnectionStateNotify : public FBEvent
00973 {
00974 public:
00978         FBEventConnectionStateNotify(HKEventBase pEvent);
00979 
00980         FBPropertyConnectionAction      Action;                 
00981         FBPropertyPlug                          Plug;                   
00982         void*                                           GetData();              
00983         void*                                           GetOldData();   
00984 };
00985 
00987 // __FB_FORWARD( FBEventConnectionKeyingNotify );                                                                 //
00989  __FB_FORWARD( FBEventConnectionKeyingNotify );
00990  
00991 class FBSDK_DLL FBEventConnectionKeyingNotify : public FBEvent
00992 {
00993 public:
00997         FBEventConnectionKeyingNotify(HKEventBase pEvent);
00998 
01004         FBConnectionAction  GetAction( void );
01005 
01011         FBPlug*                         GetPlug( void );
01017         FBPlug*                         GetProperty( void );
01023         void*                           GetData( void );
01024 };
01025 
01026 
01028 // FBLibrary
01030 
01034 class FBSDK_DLL FBLibraryBase : public ICallback
01035 {
01036 public:
01037         FBLibraryBase();
01038         virtual ~FBLibraryBase();
01039     IObject_Declare(K_IMPLEMENTATION);
01040     ICallback_Declare(K_IMPLEMENTATION);
01041 
01046         virtual bool LibInit();
01047 
01052         virtual bool LibOpen();
01053 
01059         virtual bool LibReady();
01060 
01064         virtual bool LibClose();
01065 
01069         virtual bool LibRelease();
01071         KGlobalNamedEvent  *mLibrary_Open,              
01072                                            *mLibrary_Ready,     
01073                                            *mLibrary_Close,     
01074                                            *mLibrary_Release;   
01075 
01076         void Library_OpenHandler(HIRegister pCaller,HKEventBase pEvent);
01077         void Library_ReadyHandler(HIRegister pCaller,HKEventBase pEvent);
01078         void Library_CloseHandler(HIRegister pCaller,HKEventBase pEvent);
01079         void Library_ReleaseHandler(HIRegister pCaller,HKEventBase pEvent);
01080 };
01081 
01083 // FBLibrary
01085 
01089 class FBLibrary : public FBLibraryBase
01090 {
01091 public:
01096         virtual bool LibInit();
01097 
01102         virtual bool LibOpen();
01103 
01109         virtual bool LibReady();
01110 
01114         virtual bool LibClose();
01115 
01119         virtual bool LibRelease();
01120 };
01121 
01125 #if defined(K_NODLL)
01126         #define FBLibraryDeclare( LibName ) \
01127         FB_DLL_INIT( LibName, Operation )                               \
01128         {                                                                                               \
01129                 switch( Operation )                                                     \
01130                 {                                                                                       \
01131                         case kFBDllLoad:                                                \
01132                         {                                                                               \
01133 
01134 #else
01135         #define FBLibraryDeclare( LibName ) \
01136         static FBLibrary LibName##GlobalFBLibrary; \
01137         extern "C" {    \
01138                 K_DLLEXPORT bool LIBRARY_INIT(HIError /*Error*/) \
01139                 { \
01140                         FB_EXT_INIT( LibName ); if (LibName##GlobalFBLibrary.LibInit()) return true; return false; \
01141                 } \
01142         } \
01143         FB_DLL_INIT( LibName, Operation )                               \
01144         {                                                                                               \
01145                 switch( Operation )                                                     \
01146                 {                                                                                       \
01147                         case kFBDllLoad:                                                \
01148                         {                               
01149 #endif
01150 
01155 #define FBLibraryModule(Name)                                   \
01156         void FBModule##Name()
01157 
01162 #define FBLibraryRegister( ClassName )                  \
01163         extern void FBModule##ClassName( );                     \
01164         FBModule##ClassName( );
01165 
01170 #define FBLibraryRegisterStorable( ClassName )                  \
01171         extern void FBModule##ClassName##Storable( );                   \
01172         FBModule##ClassName##Storable( );
01173 
01178 #define FBLibraryRegisterElement( ClassName )                   \
01179         extern void FBModule##ClassName##Element( );                    \
01180         FBModule##ClassName##Element( );
01181 
01186 #define FBLibraryRegisterShadingElement( ClassName )                    \
01187         extern void FBModule##ClassName##ShadingElement( );                     \
01188         FBModule##ClassName##ShadingElement( );
01189 
01191 #define FBLibraryDeclareEnd                                             \
01192                 }                                                                               \
01193                 break;                                                                  \
01194         default:                                \
01195         break;                                  \
01196         }                                                                                       \
01197 }
01198 
01199 // **********************************************************************************
01200 
01204 #define FBCustomManagerImplementation( ThisComponent )  \
01205     FBClassImplementation( ThisComponent )              \
01206 
01207 
01210 #define FBRegisterCustomManager( ClassName )            \
01211     FBLibraryModule( ClassName )                        \
01212     {                                                   \
01213         static ClassName g##ClassName;                  \
01214         g##ClassName.FBCreate();                        \
01215         g##ClassName.RegisterManager();                 \
01216     }                                                   \
01217 
01218 
01221 #define FBCustomManagerDeclare( ClassName )             \
01222 FBClassDeclare( ClassName, FBCustomManager );           \
01223     public:                                             \
01224     ClassName() : FBCustomManager() { FBClassInit; }    \
01225              \
01226     private:                                            
01227 
01228 
01230 // FBCustomManager
01232 
01233 __FB_FORWARD( FBCustomManager );
01234 
01247 class FBSDK_DLL FBCustomManager : public FBComponent {
01248     __FBClassDeclare( FBCustomManager, FBComponent );
01249 public:
01252     FBCustomManager();
01253 
01258     void RegisterManager();
01259 
01263     virtual bool FBCreate();
01264 
01271     virtual bool     Init()   ;
01272 
01278     virtual bool     Open()   ;
01279 
01284     virtual bool     Clear()  ;
01285 
01289     virtual bool     Close()  ;
01290 
01291 };
01292 
01293 
01294 #ifdef FBSDKUseNamespace
01295         }
01296 #endif
01297 
01298 #endif