kfbxusernotification.h

Go to the documentation of this file.
00001 
00004 #ifndef _FBXSDK_USER_NOTIFICATION_H_
00005 #define _FBXSDK_USER_NOTIFICATION_H_
00006 
00007 /**************************************************************************************
00008 
00009  Copyright © 2005 - 2007 Autodesk, Inc. and/or its licensors.
00010  All Rights Reserved.
00011 
00012  The coded instructions, statements, computer programs, and/or related material
00013  (collectively the "Data") in these files contain unpublished information
00014  proprietary to Autodesk, Inc. and/or its licensors, which is protected by
00015  Canada and United States of America federal copyright law and by international
00016  treaties.
00017 
00018  The Data may not be disclosed or distributed to third parties, in whole or in
00019  part, without the prior written consent of Autodesk, Inc. ("Autodesk").
00020 
00021  THE DATA IS PROVIDED "AS IS" AND WITHOUT WARRANTY.
00022  ALL WARRANTIES ARE EXPRESSLY EXCLUDED AND DISCLAIMED. AUTODESK MAKES NO
00023  WARRANTY OF ANY KIND WITH RESPECT TO THE DATA, EXPRESS, IMPLIED OR ARISING
00024  BY CUSTOM OR TRADE USAGE, AND DISCLAIMS ANY IMPLIED WARRANTIES OF TITLE,
00025  NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE OR USE.
00026  WITHOUT LIMITING THE FOREGOING, AUTODESK DOES NOT WARRANT THAT THE OPERATION
00027  OF THE DATA WILL BE UNINTERRUPTED OR ERROR FREE.
00028 
00029  IN NO EVENT SHALL AUTODESK, ITS AFFILIATES, PARENT COMPANIES, LICENSORS
00030  OR SUPPLIERS ("AUTODESK GROUP") BE LIABLE FOR ANY LOSSES, DAMAGES OR EXPENSES
00031  OF ANY KIND (INCLUDING WITHOUT LIMITATION PUNITIVE OR MULTIPLE DAMAGES OR OTHER
00032  SPECIAL, DIRECT, INDIRECT, EXEMPLARY, INCIDENTAL, LOSS OF PROFITS, REVENUE
00033  OR DATA, COST OF COVER OR CONSEQUENTIAL LOSSES OR DAMAGES OF ANY KIND),
00034  HOWEVER CAUSED, AND REGARDLESS OF THE THEORY OF LIABILITY, WHETHER DERIVED
00035  FROM CONTRACT, TORT (INCLUDING, BUT NOT LIMITED TO, NEGLIGENCE), OR OTHERWISE,
00036  ARISING OUT OF OR RELATING TO THE DATA OR ITS USE OR ANY OTHER PERFORMANCE,
00037  WHETHER OR NOT AUTODESK HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH LOSS
00038  OR DAMAGE.
00039 
00040 **************************************************************************************/
00041 
00042 #include <kaydaradef.h>
00043 #ifndef KFBX_DLL 
00044     #define KFBX_DLL K_DLLIMPORT
00045 #endif
00046 
00047 #include <stdio.h>
00048 #include <klib/karrayul.h>
00049 #include <klib/kstring.h>
00050 #include <klib/kset.h>
00051 
00052 #ifndef MB_FBXSDK
00053 #include <kbaselib_nsuse.h>
00054 #endif
00055 
00056 #include <fbxfilesdk_nsbegin.h>
00057 
00058 class FbxLogFile;
00059 class KFbxNode;
00060 class KFbxUserNotificationFilteredIterator;
00061 
00067 class AccumulatorEntry
00068 {
00069 public:
00070     enum AEClass {
00071         eAE_ERROR=1,
00072         eAE_WARNING=2,
00073         eAE_INFO=4,
00074         eAE_ANY=7 
00075     };
00076 
00088     AccumulatorEntry(AEClass pAEClass, const KString& pName, const KString& pDescr, 
00089                      KString pDetail="", bool pMuteState=true);
00090 
00092     AccumulatorEntry(const AccumulatorEntry& pAE, bool pSkipDetails);
00093 
00095     ~AccumulatorEntry();
00096 
00098     AEClass GetClass() const;
00099 
00101     KString GetName() const;
00102 
00104     KString GetDescription() const;
00105 
00107     int GetDetailsCount() const;
00108 
00110     const KString* GetDetail(int id) const;
00111 
00113     bool IsMuted() const;
00114 
00115 private:
00116     friend class KFbxUserNotification;
00117     KArrayTemplate<KString*>& GetDetails();
00118     void Mute(bool pState);
00119 
00120     bool    mMute;
00121     AEClass mAEClass;
00122     KString mName;
00123     KString mDescr;
00124     KArrayTemplate<KString*> mDetails;
00125 };
00126 
00127 
00133 class KFBX_DLL KFbxUserNotification
00134 {
00135 protected:
00136     friend class KFbxSdkManager;
00137 
00153     KFbxUserNotification(KString pLogFileName, KString pSessionDescription);
00154 
00155     virtual ~KFbxUserNotification();
00156 
00161     void InitAccumulator();
00162 
00166     void ClearAccumulator();
00167 
00168 public:
00169     enum AEid {
00170         eBINDPOSE_INVALIDOBJECT = 0x0000,
00171         eBINDPOSE_INVALIDROOT,
00172         eBINDPOSE_NOTALLANCESTORS_NODES,
00173         eBINDPOSE_NOTALLDEFORMING_NODES,
00174         eBINDPOSE_NOTALLANCESTORS_DEFNODES,
00175         eBINDPOSE_RELATIVEMATRIX,
00176         eFILE_IO_NOTIFICATION, // this is generic for reader and writer to log notifications.
00177         eAE_START_ID // Starting ID for any Accumulator entry added by derived classes.
00178     };
00179 
00191     int AddEntry(const int pID, const KString& pName, const KString& pDescr, AccumulatorEntry::AEClass pClass=AccumulatorEntry::eAE_WARNING);
00192 
00202     int AddDetail(int pEntryId);
00203     int AddDetail(int pEntryId, KString pString);
00204     int AddDetail(int pEntryId, KFbxNode* pNode);
00205 
00207     int  GetNbEntries() const;
00208 
00214     const AccumulatorEntry* GetEntry(int pEntryId) const;
00215 
00221     const AccumulatorEntry* GetEntryAt(int pEntryIndex) const;
00222 
00224     int GetNbDetails() const;
00225 
00235     int GetDetail(int pDetailId, const AccumulatorEntry*& pAE) const;
00236 
00238 
00243     enum OutputSource {
00244         eACCUMULATOR_ENTRY,
00245         eSEQUENCED_DETAILS
00246     };
00247 
00259     bool Output(OutputSource pOutSrc=eACCUMULATOR_ENTRY, int pIndex = -1, bool pExtraDevicesOnly = false);
00260 
00269     bool OutputById(AEid pId, OutputSource pOutSrc=eACCUMULATOR_ENTRY, bool pExtraDevicesOnly = false);
00270 
00280     bool Output(const KString& pName, const KString& pDescr, AccumulatorEntry::AEClass pClass, bool pExtraDevicesOnly = false);
00281 
00289     bool Output(KFbxUserNotificationFilteredIterator& pAEFIter, bool pExtraDevicesOnly = false);
00290 
00299     virtual void GetLogFilePath(KString& pPath);
00300     
00303     inline KString GetLogFileName() { return mLogFileName; }
00305 
00306 protected:
00307     class AESequence
00308     {
00309     public:
00310         AESequence(AccumulatorEntry* pAE, int pDetailId) :
00311             mAE(pAE),
00312             mDetailId(pDetailId)
00313             {
00314             };
00315 
00316         AccumulatorEntry* AE() { return mAE; }
00317         int DetailId() { return mDetailId; }
00318 
00319     private:
00320         AccumulatorEntry* mAE;
00321         int mDetailId;
00322     };
00323 
00324     friend class KFbxUserNotificationFilteredIterator;
00325 
00330     virtual bool PostTerminate();
00331 
00335     virtual void AccumulatorInit();
00336 
00340     virtual void AccumulatorClear();
00341 
00345     virtual void OpenExtraDevices();
00346 
00352     virtual bool SendToExtraDevices(bool pOutputNow, KArrayTemplate<AccumulatorEntry*>& pEntries);
00353     virtual bool SendToExtraDevices(bool pOutputNow, KArrayTemplate<AESequence*>& pAESequence);
00354 
00361     virtual bool SendToExtraDevices(bool pOutputNow, const AccumulatorEntry* pAccEntry, int pDetailId = -1);
00362 
00363     
00367     virtual void CloseExtraDevices();
00368 
00370     void ResetAccumulator();
00371 
00373     void ResetSequence();
00374 
00376     void SendToLog(OutputSource pOutSrc, int pId);
00377     void SendToLog(const AccumulatorEntry* pAccEntry, int pDetailId = -1);
00378 
00379 private:
00380     KString mLogFileName;
00381     KString mSessionDescription;
00382 #ifndef K_FBXSDK
00383     FbxLogFile* mLog;
00384 #else
00385     KString* mLog;
00386 #endif
00387 
00388     bool mProperlyInitialized;
00389     bool mProperlyCleaned;
00390 
00391     KSet mAccuHT;                             // The set establish a relationship between an AccumulatorEntry and it's ID
00392     KArrayTemplate<AccumulatorEntry*> mAccu;  // The array defines the order the AccumulatorEntry objects have been 
00393                                               // added to the accumulator (calls to AddEntry)
00394                                               // Both structures share the same pointers.
00395     KArrayTemplate<AESequence*> mAESequence;
00396 };
00397 
00403 class KFBX_DLL KFbxUserNotificationFILE : public KFbxUserNotification
00404 {
00405 public:
00406 
00407     KFbxUserNotificationFILE(KString pFileDevice, KString pLogFileName="", KString pSessionDescription="");
00408     virtual ~KFbxUserNotificationFILE();
00409 
00410     virtual void OpenExtraDevices();
00411     virtual bool SendToExtraDevices(bool pOutputNow, KArrayTemplate<AccumulatorEntry*>& pEntries);
00412     virtual bool SendToExtraDevices(bool pOutputNow, KArrayTemplate<AESequence*>& pAESequence);
00413     virtual bool SendToExtraDevices(bool pOutputNow, const AccumulatorEntry* pAccEntry, int pDetailId = -1);
00414     virtual void CloseExtraDevices();
00415 
00416 private:
00417     KString mFileDevice;
00418     FILE* mFP;
00419     int   mUseStream;
00420 };
00421 
00422 
00427 class KFBX_DLL KFbxUserNotificationFilteredIterator
00428 {
00429 public:
00442     KFbxUserNotificationFilteredIterator(KFbxUserNotification& pAccumulator, 
00443             int pFilterClass,
00444             KFbxUserNotification::OutputSource pSrc = KFbxUserNotification::eSEQUENCED_DETAILS,
00445             bool pNoDetail = true);
00446 
00447     virtual ~KFbxUserNotificationFilteredIterator();
00448 
00450     int  GetNbItems() const;
00451 
00453     void Reset();
00454 
00458     AccumulatorEntry* const First();
00459 
00467     AccumulatorEntry* const Previous();
00468 
00476     AccumulatorEntry* const Next();
00477 
00478 protected:
00479     // Called in the constructor.
00480     virtual void BuildFilteredList(KFbxUserNotification& pAccumulator);
00481 
00482     int                                 mIterator;
00483     int                                 mFilterClass;
00484     bool                                mNoDetail;
00485     KFbxUserNotification::OutputSource  mAccuSrcData;
00486     KArrayTemplate<AccumulatorEntry*>   mFilteredAE;
00487 };
00488 
00489 
00490 #include <fbxfilesdk_nsend.h>
00491 
00492 #endif // #define _FBXSDK_USER_NOTIFICATION_H_
00493 
00494