////////////////////////////////////////////////////////////////////////////
// CEditCommand クラスのインタフェース宣言
//
// ドキュメントに対する編集内容を保持する
////////////////////////////////////////////////////////////////////////////

#if !defined( EDITCOMMAND_H_INCLUDED_ )
#define EDITCOMMAND_H_INCLUDED_

#include "TaEdit_std.h"
#include "LineData.h"

// 編集コマンドのタイプ
enum enumTEC_TYPE
{
	TEC_INSERT,	// 文字列の挿入を行った
	TEC_DELETE,	// 文字列の削除を行った
	TEC_ENDEDEIT	// 編集の終了を示す
};

class CEditCommand :
	public CCPInterface
{
public:
	CEditCommand( enumTEC_TYPE argType );
	~CEditCommand();

	// このオブジェクトをタイプを取得
	enumTEC_TYPE GetType() const;

	// 編集前後のカーソル位置・選択範囲を設定
	void SetCurPos_SelRange( const T_SelRange& argBSR, const T_CurPos& argBCP, const T_SelRange& argASR, const T_CurPos& argACP );

	// 削除範囲とテキストを設定
	void SetDeleteInfo( const T_SelRange& argRange, const wstring &argStr );

	// 挿入位置とテキストを設定
	void SelInsertInfo( const T_CurPos& argPos, const wstring &argStr );

	// 編集前後のカーソル位置・選択範囲を取得
	const T_SelRange &GetBeforeSelRange() const;
	const T_CurPos &GetBeforeCurPos() const;
	const T_SelRange &GetAfterSelRange() const;
	const T_CurPos &GetAfterCurPos() const;


	// テキスト挿入位置を取得
	const T_CurPos& GetInsertPos() const;

	// 挿入したテキストを取得
	const wstring& GetInsertText() const;

	// 削除した範囲を取得
	const T_SelRange& GetDeleteRange() const;

	// 削除したテキストを取得
	const wstring& GetDeleteText() const;

protected:
	// 編集のタイプ
	enumTEC_TYPE type;

	// 編集前後の選択範囲・カーソル位置
	T_SelRange BeforeSelRange;
	T_SelRange AfterSelRange;
	T_CurPos BeforeCurPos;
	T_CurPos AfterCurPos;

	// テキストを挿入した位置
	T_CurPos InsertPos;

	// テキストを削除した範囲
	T_SelRange DeleteRange;

	// 挿入したテキスト、もしくは削除したテキスト
	wstring EditString;
};

#endif // EDITCOMMAND_H_INCLUDED_

