|
//------------------------------------------------------------------------------
// $Workfile: UndoRedoMgr.h $
// $Header: /SbjDev/SbjCore/UndoRedoMgr.h 4 11/12/08 2:22p Steve $
//
// Copyright � 2008 SbjCat
// All rights reserved.
//
//
// *** Authors ***
// Steve Johnson
//
// $Revision: 4 $
//
//-----------------------------------------------------------------------------
#pragma once
namespace SbjCore
{
namespace UndoRedo
{
class Handler;
struct ManagerImpl;
/**
The UndoRedo::Manager class maintains two internal stacks, one for Undo and
one for Redo. To provide Undo/Redo handling for an action or command, an
UndoRedo::Handler derivative is allocated on the heap and pushed onto the
Manager's Undo stack with a call to Push. When a call to Undo is made,
the Handler is popped off the Undo stack, its Undo method is executed and
the Handler is pushed onto the Redo stack. If a subsequent call to Redo is
made, the Handler is popped off the Redo stack and its Redo method is
executed and the Handler is returned to the Undo stack. If a new call to
Push is made the Redo stack is cleared.
*/
class AFX_EXT_CLASS Manager
{
public:
Manager();
virtual ~Manager();
public:
void Push(Handler* p);
bool Undo(int nCount);
bool Redo(int nCount);
void ClearUndo();
void ClearRedo();
CStringList& GetUndoList() const;
CStringList& GetRedoList() const;
bool EnableUndo() const;
bool EnableRedo() const;
void SetUndoButton(CMFCRibbonUndoButton* p);
CMFCRibbonUndoButton* GetUndoButton() const;
void SetRedoButton(CMFCRibbonUndoButton* p);
CMFCRibbonUndoButton* GetRedoButton() const;
private:
struct ManagerImpl* const m_pImpl;
};
}
}
//*** Modification History ***
// $Log: /SbjDev/SbjCore/UndoRedoMgr.h $
//
// 4 11/12/08 2:22p Steve
// Finished Generalization of Model v2.0.1
//
// 3 10/24/08 9:03a Steve
|
By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.
If a file you wish to view isn't highlighted, and is a text file (not binary), please
let us know and we'll add colourisation support for it.
Real name is Steve Johnson. Programming since 1979. Started on a Heathkit Micro with a DEC LSI-11 and UCSD Pascal. Moved to PCs & DOS as soon as Turbo Pascal became available. Did some Assembly, ISR, TSR etc. All this while working for a Manufacturing Co. for 8 years. Had my own solo Co. doing barcode labeling software for 4 years (terrible business man, all I wanted to do was code). Since then working for various software companies. Moved to Windows around the time of 3.1 with Borland C then C++. Then on to VC++ and MFC, and just about anything I could get my hands on or had to learn for my job, and been at it ever since. Of course recently I've been playing with .NET, ASP, C#, WPF etc.