Files
firestorm/Gameleap/code/mw4/Code/MW4GameEd2/UndoManager.h
T
Cyd 2b8ca921cb Initial full mirror of c:\VWE (source + assets + toolchain + outputs) via Git LFS
Complete disaster-recovery snapshot: engine/game source, game data assets,
VC6 toolchain + DX SDKs, build outputs, deployed game, and _UNUSED archive.
Large binaries in Git LFS; text preserved byte-for-byte (core.autocrlf=false,
no eol attributes). See RECOVERY.md for the one-clone rebuild procedure.
2026-06-24 21:28:16 -05:00

139 lines
3.3 KiB
C++

// UndoManager.h: interface for the UndoManager class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_UNDOMANAGER_H__8D4EFECB_204F_4BE0_8952_13AB4341E301__INCLUDED_)
#define AFX_UNDOMANAGER_H__8D4EFECB_204F_4BE0_8952_13AB4341E301__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define OFFMAPTAG "***TOMSRULES***"
#include"GUIObjectList.h"
#define COMMAND_MAX 256
class UndoCommand
{
protected:
EdGUIObject *Object;
UndoCommand *Next;
public:
UndoCommand *GetLastLink() {if(Next==NULL) return this; else return Next->GetLastLink();}
virtual void ExecuteUndo(UndoCommand **revcom);
virtual void Discard() { }
void Attach(UndoCommand *cmd);
UndoCommand(EdGUIObject *obj) {Verify(obj); Object=obj; Next=NULL; Object->AddRefernce(); }
virtual ~UndoCommand() {if(Object)Object->RemoveRefernce();}
};
class RenameCommand:public UndoCommand
{
protected:
CString OldName;
public:
void ExecuteUndo(UndoCommand **revcom);
RenameCommand(EdGUIObject *obj):UndoCommand(obj)
{OldName=obj->GetName(); }
virtual ~RenameCommand() {}
};
class MoveCommand:public UndoCommand
{
protected:
Point3D OldPos;
public:
void ExecuteUndo(UndoCommand **revcom);
MoveCommand(EdGUIObject *obj):UndoCommand(obj)
{ OldPos=obj->GetPos();}
virtual ~MoveCommand() {}
};
class RotateCommand:public UndoCommand
{
protected:
UnitQuaternion OldRot;
public:
void ExecuteUndo(UndoCommand **revcom);
RotateCommand(EdGUIObject *obj):UndoCommand(obj)
{ OldRot=obj->GetRot();}
virtual ~RotateCommand() {}
};
class AddCommand:public UndoCommand
{
protected:
GUIObjectList *Parent;
public:
void ExecuteUndo(UndoCommand **revcom);
AddCommand(EdGUIObject *obj):UndoCommand(obj)
{ Parent=obj->GetParent(); Verify(Parent);}
virtual ~AddCommand() { }
};
class DeleteCommand:public UndoCommand
{
protected:
int Location;
GUIObjectList *Parent;
public:
void ExecuteUndo(UndoCommand **revcom);
void Discard() {Object->RemoveRefernce(); delete Object; Object=NULL;}
DeleteCommand(EdGUIObject *obj):UndoCommand(obj)
{Parent=obj->GetParent(); Verify(Parent); Location=Parent->FindObjectIdx(obj);
Verify(Location>=0); obj->SetName(obj->GetName()+OFFMAPTAG);}
virtual ~DeleteCommand() { }
};
class GroupCommand:public UndoCommand
{
protected:
GUIObjectList *Parent;
public:
void ExecuteUndo(UndoCommand **revcom);
GroupCommand(EdGUIObject *obj):UndoCommand(obj)
{Parent=obj->GetParent(); Verify(Parent);}
virtual ~GroupCommand() { }
};
class CommandStack
{
protected:
UndoCommand *Commands[COMMAND_MAX];
int CommandMax;
int CommandCount;
void RemoveBottomCommand();
public:
int Depth() {return CommandCount;}
void PushCommand(UndoCommand *cmd);
UndoCommand *Pop();
UndoCommand *PopAndExecute();
void Clear();
CommandStack();
virtual ~CommandStack() { Clear();}
};
class UndoManager
{
protected:
CommandStack UndoStack,RedoStack;
public:
void AddCommand(UndoCommand *cmd);
bool CanUndo() {return (UndoStack.Depth()>0);}
bool CanRedo() {return (RedoStack.Depth()>0);}
void Undo();
void Redo();
UndoManager() {}
virtual ~UndoManager();
};
#endif // !defined(AFX_UNDOMANAGER_H__8D4EFECB_204F_4BE0_8952_13AB4341E301__INCLUDED_)