You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
469 lines
18 KiB
C++
469 lines
18 KiB
C++
// XTPTrackUndoManager.h: interface for the CXTPTrackUndoManager class.
|
|
//
|
|
// This file is a part of the XTREME REPORTCONTROL MFC class library.
|
|
// (c)1998-2012 Codejock Software, All Rights Reserved.
|
|
//
|
|
// THIS SOURCE FILE IS THE PROPERTY OF CODEJOCK SOFTWARE AND IS NOT TO BE
|
|
// RE-DISTRIBUTED BY ANY MEANS WHATSOEVER WITHOUT THE EXPRESSED WRITTEN
|
|
// CONSENT OF CODEJOCK SOFTWARE.
|
|
//
|
|
// THIS SOURCE CODE CAN ONLY BE USED UNDER THE TERMS AND CONDITIONS OUTLINED
|
|
// IN THE XTREME TOOLKIT PRO LICENSE AGREEMENT. CODEJOCK SOFTWARE GRANTS TO
|
|
// YOU (ONE SOFTWARE DEVELOPER) THE LIMITED RIGHT TO USE THIS SOFTWARE ON A
|
|
// SINGLE COMPUTER.
|
|
//
|
|
// CONTACT INFORMATION:
|
|
// support@codejock.com
|
|
// http://www.codejock.com
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
#if !defined(__XTPTRACKUNDOMANAGER_H__)
|
|
#define __XTPTRACKUNDOMANAGER_H__
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
|
|
#if _MSC_VER > 1000
|
|
#pragma once
|
|
#endif // _MSC_VER > 1000
|
|
|
|
|
|
const int XTP_ID_TRACKUNDO_GROUP = -1; //The undo group command.
|
|
const int XTP_ID_TRACKUNDO_SETMARKERPOSITION = 1000; //The undo set marker position command.
|
|
const int XTP_ID_TRACKUNDO_ADDMARKER = 1001; //The undo add marker command.
|
|
const int XTP_ID_TRACKUNDO_DELETEMARKER = 1002; //The undo delete marker command.
|
|
|
|
const int XTP_ID_TRACKUNDO_ADDBLOCK = 1003; //The undo add block command.
|
|
const int XTP_ID_TRACKUNDO_DELETEBLOCK = 1004; //The undo delete block command.
|
|
const int XTP_ID_TRACKUNDO_SETBLOCKPOSITION = 1005; //The undo set block position command.
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo command.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoCommand
|
|
{
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoCommand object.
|
|
// Parameters:
|
|
// nID - The command id.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoCommand(int nID);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoCommand();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to get the command id associated with this object.
|
|
// Returns:
|
|
// An integer value denoting the contained command id.
|
|
//-----------------------------------------------------------------------
|
|
int GetID() const;
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
const int m_nID; //The command id.
|
|
|
|
friend class CXTPTrackUndoManager;
|
|
friend class CXTPTrackUndoGroupCommand;
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo commands in a group.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoGroupCommand : public CXTPTrackUndoCommand
|
|
{
|
|
protected:
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoCommand object.
|
|
// Parameters:
|
|
// pManager - Pointer to the track undo manager.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoGroupCommand(CXTPTrackUndoManager* pManager);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoGroupCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoGroupCommand();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to get the number of command objects in this
|
|
// group.
|
|
// Returns:
|
|
// An integer value denoting the number of commands in the group.
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
int GetCount() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to add a command to the command group.
|
|
// Parameters:
|
|
// pCommand - A pointer to the undo command object.
|
|
//-----------------------------------------------------------------------
|
|
void Add(CXTPTrackUndoCommand* pCommand);
|
|
|
|
|
|
protected:
|
|
CArray<CXTPTrackUndoCommand*, CXTPTrackUndoCommand*> m_arrUndoCommands; //The command collection.
|
|
CXTPTrackUndoManager* m_pManager; //The undo manager.
|
|
friend class CXTPTrackUndoManager;
|
|
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstarcts the undo delete marker command.This is a kind of
|
|
// CXTPTrackUndoCommand.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoDeleteMarkerCommand : public CXTPTrackUndoCommand
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoDeleteMarkerCommand object.
|
|
// Parameters:
|
|
// pMarker - Pointer to the track marker object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoDeleteMarkerCommand(CXTPTrackMarker* pMarker);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoDeleteMarkerCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoDeleteMarkerCommand();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
CXTPTrackMarker* m_pMarker; //The track marker object.
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo add marker command.This is a kind of
|
|
// CXTPTrackUndoCommand.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoAddMarkerCommand : public CXTPTrackUndoCommand
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoDeleteMarkerCommand object.
|
|
// Parameters:
|
|
// pMarker - Pointer to the track marker object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoAddMarkerCommand(CXTPTrackMarker* pMarker);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoAddMarkerCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoAddMarkerCommand();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
CXTPTrackMarker* m_pMarker; //The track marker object.
|
|
};
|
|
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo set marker position command.This is a kind of
|
|
// CXTPTrackUndoCommand.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoSetMarkerPositionCommand : public CXTPTrackUndoCommand
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoSetMarkerPositionCommand object.
|
|
// Parameters:
|
|
// pMarker - Pointer to the track marker object.
|
|
// nOldPosition - The old position of the marker.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoSetMarkerPositionCommand(CXTPTrackMarker* pMarker, int nOldPosition);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoSetMarkerPositionCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoSetMarkerPositionCommand();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
CXTPTrackMarker* m_pMarker; //The track marker object.
|
|
int m_nOldPosition; //The old position of the marker.
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo delete block command.This is a kind of
|
|
// CXTPTrackUndoCommand.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoDeleteBlockCommand : public CXTPTrackUndoCommand
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoDeleteBlockCommand object.
|
|
// Parameters:
|
|
// pBlock - Pointer to the track block object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoDeleteBlockCommand(CXTPTrackBlock* pBlock);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoDeleteBlockCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoDeleteBlockCommand();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
CXTPTrackBlock* m_pBlock; //The track block object.
|
|
CXTPTrackControlItem* m_pOldItem; //The old track control item.
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo add block command.This is a kind of
|
|
// CXTPTrackUndoCommand.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoAddBlockCommand : public CXTPTrackUndoCommand
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoAddBlockCommand object.
|
|
// Parameters:
|
|
// pBlock - Pointer to the track block object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoAddBlockCommand(CXTPTrackBlock* pBlock);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoAddBlockCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoAddBlockCommand();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
CXTPTrackBlock* m_pBlock; //Pointer to the track block object.
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts the undo set block position command.This is a
|
|
// kind of CXTPTrackUndoCommand.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoSetBlockPositionCommand : public CXTPTrackUndoCommand
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoSetBlockPositionCommand object.
|
|
// Parameters:
|
|
// pBlock - Pointer to the track block object.
|
|
// nOldPosition - The old position of the block.
|
|
// nOldLength - The old length of the block.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoSetBlockPositionCommand(CXTPTrackBlock* pBlock, int nOldPosition, int nOldLength);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoSetBlockPositionCommand destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
virtual ~CXTPTrackUndoSetBlockPositionCommand();
|
|
|
|
protected:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
// Remarks:
|
|
// It a virtual function, so the derived classes can give their
|
|
// specific implementations
|
|
//-----------------------------------------------------------------------
|
|
virtual void Undo();
|
|
|
|
protected:
|
|
CXTPTrackBlock* m_pBlock; //Pointer to the track block object.
|
|
int m_nOldPosition; //Old position of the block.
|
|
int m_nOldLength; //Old length of the block.
|
|
};
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// This class abstracts an undo manager.It manages all the undo
|
|
// operations of the track contorl.This is a kind of CXTPCmdTarget.
|
|
//-----------------------------------------------------------------------
|
|
class _XTP_EXT_CLASS CXTPTrackUndoManager : public CXTPCmdTarget
|
|
{
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Constructor, creates a CXTPTrackUndoManager object.
|
|
//-----------------------------------------------------------------------
|
|
CXTPTrackUndoManager();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// CXTPTrackUndoManager destructor, does the cleanups.
|
|
//-----------------------------------------------------------------------
|
|
~CXTPTrackUndoManager();
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the undo operation.
|
|
//-----------------------------------------------------------------------
|
|
void Undo();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to do the redo operation.
|
|
//-----------------------------------------------------------------------
|
|
void Redo();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to check whether the undo operation is possible
|
|
// at the current context.
|
|
// Returns:
|
|
// TRUE if undo is possible, FALSE else.
|
|
//-----------------------------------------------------------------------
|
|
BOOL CanUndo() const;
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to check whether the redo operation is possible
|
|
// at the current context.
|
|
// Returns:
|
|
// TRUE if undo is possible, FALSE else.
|
|
//-----------------------------------------------------------------------
|
|
BOOL CanRedo() const;
|
|
|
|
public:
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to clear the list of undo and redo operations.
|
|
//-----------------------------------------------------------------------
|
|
void Clear();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Use this function to add an undo command to the collection of undo
|
|
// commands.
|
|
// Parameters:
|
|
// pCommand - A pointer to the track undo command object.
|
|
//-----------------------------------------------------------------------
|
|
void AddUndoCommand(CXTPTrackUndoCommand* pCommand);
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to start an undo group command.
|
|
//-----------------------------------------------------------------------
|
|
void StartGroup();
|
|
|
|
//-----------------------------------------------------------------------
|
|
// Summary:
|
|
// Call this function to end an undo group command.
|
|
//-----------------------------------------------------------------------
|
|
void EndGroup();
|
|
|
|
protected:
|
|
CArray<CXTPTrackUndoCommand*, CXTPTrackUndoCommand*> m_arrUndoCommands; //The undo commands array.
|
|
CArray<CXTPTrackUndoCommand*, CXTPTrackUndoCommand*> m_arrRedoCommands; //The redo command array.
|
|
|
|
int m_nUndoContext; //The undo context.
|
|
CXTPTrackUndoGroupCommand* m_pUndoGroup; //The undo group command.
|
|
|
|
|
|
#ifdef _XTP_ACTIVEX
|
|
//{{AFX_CODEJOCK_PRIVATE
|
|
DECLARE_DISPATCH_MAP()
|
|
DECLARE_INTERFACE_MAP()
|
|
DECLARE_OLETYPELIB_EX(CXTPTrackUndoManager);
|
|
//}}AFX_CODEJOCK_PRIVATE
|
|
#endif
|
|
};
|
|
|
|
AFX_INLINE int CXTPTrackUndoCommand::GetID() const {
|
|
return m_nID;
|
|
}
|
|
|
|
#endif //#if !defined(__XTPTRACKUNDOMANAGER_H__)
|