/*-----------------------------------------------------------------------------
[名称]	ICommand.h
[概要]	コマンド基底クラスのヘッダ
[備考]	なし
[履歴]	2003-01-25	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/
#if !defined(AFX_ICOMMAND_H_INCLUDED_)
#define AFX_ICOMMAND_H_INCLUDED_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000


//-----------------------------------------------------------------------------
// インクルード・不完全定義
//-----------------------------------------------------------------------------
class CShitarabianDoc;


/*-----------------------------------------------------------------------------
[名称]	コマンド基底クラス
[用途]	UnDo、ReDo機能を実現するためにクラス化された操作。
[備考]	Commandパターン。
		UnDo可能なコマンドは CCommandManager に保持される。
		抽象クラス。各純粋仮想関数は派生クラスで実装すること。
		使用方法：
		(1) ICommand派生クラスのインスタンスを生成する。
		(2) ICommand派生クラスのインスタンスの属性を設定する。
		(3) ICommand派生クラス::Execute() でコマンドを実行する。
		UnDo機能を利用したいコマンドについては以下を行う。
		(4) CCommandManager::Add() でコマンド管理にコマンドを追加する。
		(5) ICommand派生クラスのインスタンスを破棄する。
		(6) （CCommandManager::UnDo()、CCommandManager::ReDo() が可能。）
-----------------------------------------------------------------------------*/
class ICommand  
{
public:
	// 生成・破棄
	ICommand(){};
	virtual ~ICommand(){};

public:
	// メモリを確保して複製
	virtual ICommand*	Duplicate() =0;

	// 属性をコピー
	virtual void		Copy( ICommand& cmdSrc ) =0;

	// 実行
	virtual BOOL		Execute( CShitarabianDoc* pDoc ) =0;

	// 取り消し
	virtual BOOL		UnExecute( CShitarabianDoc* pDoc ) =0;
};

#endif // !defined(AFX_ICOMMAND_H_INCLUDED_)
