////////////////////////////////////////////////////////////////////////////
// CUndoListMgr クラスのインタフェース宣言
//
////////////////////////////////////////////////////////////////////////////

#if !defined( UNDOLISTMGR_H_INCLUDED_ )
#define UNDOLISTMGR_H_INCLUDED_

#include "TaEdit_std.h"
#include "EditCommand.h"

class CTaEditShell;

class CUndoListMgr
{
public:
	CUndoListMgr();
	~CUndoListMgr();

	// Undo可能な最大数を設定
	void SetMaxUndoCount( int argCnt );

	// アンドゥ可能か否か
	bool EnableUndo() const;

	// リドゥ可能か否か
	bool EnableRedo() const;

	// Undo用に編集コマンドオブジェクトを取得
	list< VClsPtr< CEditCommand > > GetUndoObj();

	// Redo用に編集コマンドオブジェクトを取得
	list< VClsPtr< CEditCommand > > GetRedoObj();

	// 編集コマンドオブジェクトを追加する
	void PushBack( VClsPtr< CEditCommand > pObj );

	// 編集が終了したことを示す
	void EndEdit();

	// 初期化
	void Clear();

	// リストを交換する
	void Swap( CUndoListMgr *p );

protected:
	// Undo/Redoメニューの状態を更新する
	void UpdateMenuStatus() const;

	// アンドゥリスト
	list< pair< bool, list< VClsPtr< CEditCommand > > > > listUndo;

	// アンドゥリストのカレントの位置を保持するイテレータ
	list< pair< bool, list< VClsPtr< CEditCommand > > > >::iterator itrUndo;

	// 最大限Undo可能な回数
	int MaxUndoCount;
};

#endif // UNDOLISTMGR_H_INCLUDED_

