You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
124 lines
3.3 KiB
124 lines
3.3 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//============================================================================= |
|
|
|
#ifndef UNDOMANAGER_H |
|
#define UNDOMANAGER_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "tier1/utlsymbol.h" |
|
#include "tier1/utllinkedlist.h" |
|
#include "tier1/utlstack.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
class IUndoElement; |
|
struct UndoInfo_t; |
|
class IDmNotify; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Undo/Redo stuff: |
|
//----------------------------------------------------------------------------- |
|
class CUndoManager |
|
{ |
|
public: |
|
CUndoManager(); |
|
~CUndoManager(); |
|
|
|
void Shutdown(); |
|
void SetUndoDepth( int nMaxUndoDepth ); |
|
void AddUndoElement( IUndoElement *pElement ); |
|
void Undo(); |
|
void Redo(); |
|
void TraceUndo( bool state ); |
|
|
|
void EnableUndo(); |
|
void DisableUndo(); |
|
bool IsEnabled() const; |
|
bool HasUndoData() const; |
|
bool UndoDataDiscarded() const; |
|
bool HasRedoData() const; |
|
|
|
void WipeUndo(); |
|
void WipeRedo(); |
|
|
|
const char *UndoDesc() const; |
|
const char *RedoDesc() const; |
|
|
|
void PushUndo( char const *udesc, char const *rdesc, int nChainingID ); |
|
void PushRedo(); |
|
void AbortUndoableOperation(); |
|
|
|
UtlSymId_t GetUndoDescInternal( const char *context ); |
|
UtlSymId_t GetRedoDescInternal( const char *context ); |
|
|
|
void GetUndoInfo( CUtlVector< UndoInfo_t >& list ); |
|
|
|
bool InstallNotificationCallback( IDmNotify *pNotify ); |
|
void RemoveNotificationCallback( IDmNotify *pNotify ); |
|
bool IsSuppressingNotify( ) const; |
|
void SetSuppressingNotify( bool bSuppress ); |
|
void PushNotificationScope( const char *pReason, int nNotifySource, int nNotifyFlags ); |
|
void PopNotificationScope( bool bAbort ); |
|
|
|
void NotifyState( int nNotifyFlags ); |
|
|
|
static const char *GetUndoString( CUtlSymbol sym ); |
|
|
|
private: |
|
void Trace( PRINTF_FORMAT_STRING const char *fmt, ... ); |
|
|
|
CUtlLinkedList< IUndoElement *, int > m_UndoList; |
|
CUtlStack< IUndoElement * > m_RedoStack; |
|
CUtlVector< IDmNotify* > m_Notifiers; |
|
int m_nMaxUndoDepth; |
|
int m_nNesting; |
|
int m_nNotifyNesting; |
|
CUtlSymbol m_UndoDesc; |
|
CUtlSymbol m_RedoDesc; |
|
int m_nNotifySource; |
|
int m_nNotifyFlags; |
|
const char* m_pNotifyReason; |
|
int m_nItemsAddedSinceStartOfStream; |
|
// Signals that next undo operation is the "Start" of a stream |
|
bool m_bStreamStart : 1; |
|
bool m_bTrace : 1; |
|
bool m_bDiscarded : 1; |
|
bool m_bEnabled : 1; |
|
bool m_bSuppressingNotify : 1; |
|
|
|
static CUtlSymbolTableMT s_UndoSymbolTable; |
|
int m_nChainingID; |
|
int m_PreviousChainingID; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Is undo enabled |
|
//----------------------------------------------------------------------------- |
|
inline bool CUndoManager::IsEnabled() const |
|
{ |
|
return m_bEnabled; |
|
} |
|
|
|
inline void CUndoManager::NotifyState( int nNotifyFlags ) |
|
{ |
|
// FIXME: Should suppress prevent notification being sent, |
|
// or prevent notification flags from being set in the first place? |
|
m_nNotifyFlags |= nNotifyFlags; |
|
} |
|
|
|
inline const char *CUndoManager::GetUndoString( CUtlSymbol sym ) |
|
{ |
|
return s_UndoSymbolTable.String( sym ); |
|
} |
|
|
|
|
|
#endif // UNDOMANAGER_H
|
|
|