172 lines
4.0 KiB
C++
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
|