//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // // $NoKeywords: $ // //===========================================================================// #ifndef PETDOC_H #define PETDOC_H #ifdef _WIN32 #pragma once #endif #include "dme_controls/inotifyui.h" #include "datamodel/dmehandle.h" #include "datamodel/dmelement.h" //----------------------------------------------------------------------------- // Forward declarations //----------------------------------------------------------------------------- class IPetDocCallback; class CPetDoc; class CDmeParticleSystemDefinition; //----------------------------------------------------------------------------- // The file format for particle system definitions //----------------------------------------------------------------------------- #define PET_FILE_FORMAT "pcf" typedef CDmrElementArray CDmrParticleSystemList; //----------------------------------------------------------------------------- // Contains all editable state //----------------------------------------------------------------------------- class CPetDoc : public IDmNotify, CBaseElementPropertiesChoices { public: CPetDoc( IPetDocCallback *pCallback ); ~CPetDoc(); // Inherited from INotifyUI virtual void NotifyDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags ); virtual bool GetIntChoiceList( const char *pChoiceListType, CDmElement *pElement, const char *pAttributeName, bool bArrayElement, IntChoiceList_t &list ); // Sets/Gets the file name const char *GetFileName(); void SetFileName( const char *pFileName ); // Dirty bits (has it changed since the last time it was saved?) void SetDirty( bool bDirty ); bool IsDirty() const; // Creates a new document void CreateNew(); // Saves/loads from file bool LoadFromFile( const char *pFileName ); void SaveToFile( ); // Returns the root object CDmElement *GetRootObject(); // Returns the root object fileid DmFileId_t GetFileId(); // Called when data changes (see INotifyUI for flags) void OnDataChanged( const char *pReason, int nNotifySource, int nNotifyFlags ); // Returns the particle system definition list CDmAttribute *GetParticleSystemDefinitionList(); // add a new definition we've created void AddNewParticleSystemDefinition( CDmeParticleSystemDefinition *pNew, CUndoScopeGuard &Guard ); // Adds a new particle system definition CDmeParticleSystemDefinition *AddNewParticleSystemDefinition( const char *pName ); // Deletes a particle system definition void DeleteParticleSystemDefinition( CDmeParticleSystemDefinition *pParticleSystem ); // find particle system def by name CDmeParticleSystemDefinition *FindParticleSystemDefinition( const char *pName ); // Replace any particle system with the same name as the passed-in definition // with the passed-in definition void ReplaceParticleSystemDefinition( CDmeParticleSystemDefinition *pParticleSystem ); // Does a particle system exist already? bool IsParticleSystemDefined( const char *pName ); // For element choice lists. Return false if it's an unknown choice list type virtual bool GetStringChoiceList( const char *pChoiceListType, CDmElement *pElement, const char *pAttributeName, bool bArrayElement, StringChoiceList_t &list ); virtual bool GetElementChoiceList( const char *pChoiceListType, CDmElement *pElement, const char *pAttributeName, bool bArrayElement, ElementChoiceList_t &list ); // Updates a specific particle defintion void UpdateParticleDefinition( CDmeParticleSystemDefinition *pDef ); // Update all particle definitions void UpdateAllParticleSystems( ); private: // Creates the root element bool CreateRootElement(); IPetDocCallback *m_pCallback; CDmeHandle< CDmElement > m_hRoot; char m_pFileName[MAX_PATH]; bool m_bDirty; }; #endif // PETDOC_H