summaryrefslogtreecommitdiff
path: root/hammer/manifest.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/manifest.h')
-rw-r--r--hammer/manifest.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/hammer/manifest.h b/hammer/manifest.h
new file mode 100644
index 0000000..b5a44de
--- /dev/null
+++ b/hammer/manifest.h
@@ -0,0 +1,163 @@
+//========= 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 \ No newline at end of file