This repository has been archived on 2024-06-13. You can view files and clone it, but cannot push or open issues or pull requests.
2020-08-04 13:13:01 -04:00

172 lines
4.0 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#ifndef P4HELPERS_H
#define P4HELPERS_H
#ifdef _WIN32
#pragma once
#endif
#include "tier1/smartptr.h"
#include "tier1/utlstring.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