////////////////////////////////////////////////////////////////////////////
// CEditCommand クラスのインプリメンテーション
//
////////////////////////////////////////////////////////////////////////////

#include "EditCommand.h"

////////////////////////////////////////////////////////////////////////////
// 構築/破棄
////////////////////////////////////////////////////////////////////////////

CEditCommand::CEditCommand( enumTEC_TYPE argType ) :
	type( argType ), CCPInterface()
{
	BeforeSelRange = T_SelRange( 0, 0 );
	AfterSelRange = T_SelRange( 0, 0 );
	BeforeCurPos = T_CurPos( 0, 0 );
	AfterCurPos = T_CurPos( 0, 0 );
	InsertPos = T_CurPos( 0, 0 );
	DeleteRange = T_SelRange( 0, 0 );
	EditString = L"";
}

CEditCommand::~CEditCommand()
{

}

////////////////////////////////////////////////////////////////////////////
// メソッド
////////////////////////////////////////////////////////////////////////////

// このオブジェクトをタイプを取得
enumTEC_TYPE CEditCommand::GetType() const
{
	assert( NULL != this );
	return type;
}

// 編集前後のカーソル位置・選択範囲を設定
void CEditCommand::SetCurPos_SelRange( const T_SelRange& argBSR, const T_CurPos& argBCP, const T_SelRange& argASR, const T_CurPos& argACP )
{
	assert( NULL != this );
	BeforeSelRange = argBSR;
	BeforeCurPos = argBCP;
	AfterSelRange = argASR;
	AfterCurPos = argACP;
}

// 削除範囲とテキストを設定
void CEditCommand::SetDeleteInfo( const T_SelRange& argRange, const wstring &argStr )
{
	assert( NULL != this && type == TEC_DELETE );
	DeleteRange = argRange;
	EditString = argStr;
}

// 挿入位置とテキストを設定
void CEditCommand::SelInsertInfo( const T_CurPos &argPos, const wstring &argStr )
{
	assert( NULL != this && type == TEC_INSERT );
	InsertPos = argPos;
	EditString = argStr;

}

// 編集前後のカーソル位置・選択範囲を取得
const T_SelRange& CEditCommand::GetBeforeSelRange() const
{
	assert( NULL != this );
	return BeforeSelRange;
}

const T_CurPos& CEditCommand::GetBeforeCurPos() const
{
	assert( NULL != this );
	return BeforeCurPos;
}

const T_SelRange& CEditCommand::GetAfterSelRange() const
{
	assert( NULL != this );
	return AfterSelRange;
}

const T_CurPos& CEditCommand::GetAfterCurPos() const
{
	assert( NULL != this );
	return AfterCurPos;
}

// テキスト挿入位置を取得
const T_CurPos& CEditCommand::GetInsertPos() const
{
	assert( NULL != this && type == TEC_INSERT );
	return InsertPos;
}

// 挿入したテキストを取得
const wstring& CEditCommand::GetInsertText() const
{
	assert( NULL != this && type == TEC_INSERT );
	return EditString;
}

// 削除した範囲を取得
const T_SelRange& CEditCommand::GetDeleteRange() const
{
	assert( NULL != this && type == TEC_DELETE );
	return DeleteRange;
}

// 削除したテキストを取得
const wstring& CEditCommand::GetDeleteText() const
{
	assert( NULL != this && type == TEC_DELETE );
	return EditString;
}
