//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: // //=====================================================================================// #ifndef MANIFEST_H #define MANIFEST_H #pragma once #include "KeyValues.h" #include "utlvector.h" #include "MapDoc.h" class BoundBox; class CSelection; class CMapWorld; class CManifestInstance; typedef struct SManifestLoadPrefs TManifestLoadPrefs; class CManifestMap { public: CManifestMap( void ); bool IsEditable( void ); CMapDoc *m_Map; CString m_RelativeMapFileName, m_AbsoluteMapFileName; CString m_FriendlyName; bool m_bTopLevelMap; bool m_bReadOnly; bool m_bIsVersionControlled; bool m_bCheckedOut; bool m_bDefaultCheckin; int m_InternalID; CManifestInstance *m_Entity; // user prefs ( which don't impact the bsp process ) bool m_bVisible; bool m_bPrimaryMap; bool m_bProtected; }; class CManifestInstance : public CMapEntity { public: DECLARE_MAPCLASS( CManifestInstance, CMapEntity ) CManifestInstance( void ); CManifestInstance( CManifestMap *pManifestMap ); virtual bool IsEditable( void ); CManifestMap *GetManifestMap( void ) { return m_pManifestMap; } private: CManifestMap *m_pManifestMap; }; class CManifest : public CMapDoc { friend class CManifestCheckin; protected: DECLARE_DYNCREATE(CManifest) public: CManifest( void ); ~CManifest( void ); static ChunkFileResult_t LoadKeyInfoCallback( const char *szKey, const char *szValue, CManifest *pDoc ); static ChunkFileResult_t LoadManifestInfoCallback( CChunkFile *pFile, CManifest *pDoc ); static ChunkFileResult_t LoadKeyCallback( const char *szKey, const char *szValue, CManifestMap *pManifestMap ); static ChunkFileResult_t LoadManifestVMFCallback( CChunkFile *pFile, CManifest *pDoc ); static ChunkFileResult_t LoadManifestMapsCallback( CChunkFile *pFile, CManifest *pDoc ); static ChunkFileResult_t LoadKeyPrefsCallback( const char *szKey, const char *szValue, TManifestLoadPrefs *pManifestLoadPrefs ); static ChunkFileResult_t LoadManifestVMFPrefsCallback( CChunkFile *pFile, CManifest *pDoc ); static ChunkFileResult_t LoadManifestMapsPrefsCallback( CChunkFile *pFile, CManifest *pDoc ); static ChunkFileResult_t LoadManifestCordoningPrefsCallback( CChunkFile *pFile, CManifest *pDoc ); bool Load( const char *pszFileName ); bool Save( const char *pszFileName, bool bForce ); bool IsValid( void ) { return m_bIsValid; } virtual void Initialize( void ); virtual void Update( void ); virtual void SetModifiedFlag( BOOL bModified = TRUE ); virtual bool IsManifest( void ) { return true; } void GetFullMapPath( const char *pManifestMapFileName, char *pOutputPath ); void SetManifestPrefsModifiedFlag( bool bModified = true ); int GetNumMaps( void ) { return m_Maps.Count(); } CManifestMap *GetMap( int index ) { return m_Maps[ index ]; } CManifestMap *FindMap( CMapDoc *pMap ); CManifestMap *FindMapByID( int InternalID ); void SetPrimaryMap( CManifestMap *pManifestMap ); CManifestMap *GetPrimaryMap( void ) { return m_pPrimaryMap; } void SetVisibility( CManifestMap *pManifestMap, bool bIsVisible ); void MoveSelectionToSubmap( CManifestMap *pManifestMap, bool CenterContents ); CManifestMap *MoveSelectionToNewSubmap( CString &FriendlyName, CString &FileName, bool CenterContents ); CManifestMap *CreateNewMap( const char *AbsoluteFileName, const char *RelativeFileName, bool bSetID ); CManifestMap *AddNewSubmap( CString &FriendlyName, CString &FileName ); bool AddExistingMap( const char *pszFileName, bool bFromInstance ); bool AddExistingMap( void ); bool RemoveSubMap( CManifestMap *pManifestMap ); bool CheckOut( ); bool AddToVersionControl( ); void CheckFileStatus( ); CSelection *GetSelection( void ) { return m_pSelection; } void ClearSelection( void ); virtual void UpdateInstanceMap( CMapDoc *pInstanceMapDoc ); virtual void AddObjectToWorld(CMapClass *pObject, CMapClass *pParent = NULL); CMapWorld *GetManifestWorld( void ) { return m_ManifestWorld; } bool m_bReadOnly; bool m_bIsVersionControlled; bool m_bCheckedOut; bool m_bDefaultCheckin; protected: virtual BOOL OnOpenDocument(LPCTSTR lpszPathName); virtual BOOL OnSaveDocument(LPCTSTR lpszPathName); virtual void DeleteContents( void ); private: void AddManifestObjectToWorld( CMapClass *pObject, CMapClass *pParent = NULL ); void RemoveManifestObjectFromWorld( CMapClass *pObject, bool bRemoveChildren ); bool LoadVMFManifest( const char *pszFileName ); bool LoadVMFManifestUserPrefs( const char *pszFileName ); bool SaveVMFManifest( const char *pszFileName ); bool SaveVMFManifestMaps( const char *pszFileName ); bool SaveVMFManifestUserPrefs( const char *pszFileName ); int m_NextInternalID; bool m_bIsValid; bool m_bRelocateSave; CUtlVector< CManifestMap * > m_Maps; CManifestMap *m_pPrimaryMap; char m_ManifestDir[ MAX_PATH ]; CMenu m_ManifestMenu; CMapWorld *m_ManifestWorld; bool m_bManifestChanged, m_bManifestUserPrefsChanged; CHistory *m_pSaveUndo; CHistory *m_pSaveRedo; protected: //{{AFX_MSG(CMapDoc) afx_msg void OnFileSaveAs(); //}}AFX_MSG public: DECLARE_MESSAGE_MAP() }; #endif // #define MANIFEST_H