diff options
Diffstat (limited to 'public/tier2/p4helpers.h')
| -rw-r--r-- | public/tier2/p4helpers.h | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/public/tier2/p4helpers.h b/public/tier2/p4helpers.h new file mode 100644 index 0000000..61c70c8 --- /dev/null +++ b/public/tier2/p4helpers.h @@ -0,0 +1,179 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// + +#ifndef P4HELPERS_H +#define P4HELPERS_H +#ifdef _WIN32 +#pragma once +#endif + + +#include "tier1/utlstring.h" +#include "tier1/smartptr.h" + + +// +// Class representing file operations +// +class CP4File +{ +public: + explicit CP4File( char const *szFilename ); + virtual ~CP4File(); + +public: + // Opens the file for edit + virtual bool Edit( void ); + + // Opens the file for add + virtual bool Add( void ); + + // Reverts the file + virtual bool Revert( void ); + + // Is the file in perforce? + virtual bool IsFileInPerforce(); + + // Changes the file to the specified filetype. + virtual bool SetFileType( const CUtlString& desiredFileType ); + +protected: + // The filename that this class instance represents + CUtlString m_sFilename; +}; + +// +// An override of CP4File performing no Perforce interaction +// +class CP4File_Dummy : public CP4File +{ +public: + explicit CP4File_Dummy( char const *szFilename ) : CP4File( szFilename ) {} + +public: + virtual bool Edit( void ) { return true; } + virtual bool Add( void ) { return true; } + virtual bool IsFileInPerforce() { return false; } + virtual bool SetFileType(const CUtlString& desiredFileType) { return true; } +}; + + +// +// Class representing a factory for creating other helper objects +// +class CP4Factory +{ +public: + CP4Factory(); + ~CP4Factory(); + +public: + // Sets whether dummy objects are created by the factory. + // Returns the old state of the dummy mode. + bool SetDummyMode( bool bDummyMode ); + +public: + // Sets the name of the changelist to open files under, + // NULL for "Default" changelist. + void SetOpenFileChangeList( const char *szChangeListName ); + +public: + // Creates a file access object for the given filename. + CP4File *AccessFile( char const *szFilename ) const; + +protected: + // Whether the factory is in the "dummy mode" and is creating dummy objects + bool m_bDummyMode; +}; + +// Default p4 factory +extern CP4Factory *g_p4factory; + + +// +// CP4AutoEditFile - edits the file upon construction +// +class CP4AutoEditFile +{ +public: + explicit CP4AutoEditFile( char const *szFilename ) : m_spImpl( g_p4factory->AccessFile( szFilename ) ) { m_spImpl->Edit(); } + + CP4File * File() const { return m_spImpl.Get(); } + +protected: + CPlainAutoPtr< CP4File > m_spImpl; +}; + +// +// CP4AutoAddFile - adds the file upon construction +// +class CP4AutoAddFile +{ +public: + explicit CP4AutoAddFile( char const *szFilename ) : m_spImpl( g_p4factory->AccessFile( szFilename ) ) { m_spImpl->Add(); } + + CP4File * File() const { return m_spImpl.Get(); } + +protected: + CPlainAutoPtr< CP4File > m_spImpl; +}; + +// +// CP4AutoEditAddFile - edits the file upon construction / adds upon destruction +// +class CP4AutoEditAddFile +{ +public: + explicit CP4AutoEditAddFile( char const *szFilename ) + : m_spImpl( g_p4factory->AccessFile( szFilename ) ) + , m_bHasDesiredFileType( false ) + { + m_spImpl->Edit(); + } + + explicit CP4AutoEditAddFile( char const *szFilename, const char *szFiletype ) + : m_spImpl( g_p4factory->AccessFile( szFilename ) ) + , m_sFileType(szFiletype) + , m_bHasDesiredFileType( true ) + { + m_spImpl->Edit(); + m_spImpl->SetFileType( m_sFileType ); + } + + ~CP4AutoEditAddFile( void ) + { + m_spImpl->Add(); + if ( m_bHasDesiredFileType ) + m_spImpl->SetFileType( m_sFileType ); + } + + CP4File * File() const { return m_spImpl.Get(); } + +protected: + CPlainAutoPtr< CP4File > m_spImpl; + CUtlString m_sFileType; + bool m_bHasDesiredFileType; +}; + + +// +// CP4AutoRevert - reverts the file upon construction +// +class CP4AutoRevertFile +{ +public: + explicit CP4AutoRevertFile( char const *szFilename ) : m_spImpl( g_p4factory->AccessFile( szFilename ) ) { m_spImpl->Revert(); } + + CP4File * File() const { return m_spImpl.Get(); } + +protected: + CPlainAutoPtr< CP4File > m_spImpl; +}; + + +#endif // #ifndef P4HELPERS_H |