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

#include "TxtColorMgr_cbl.h"

using namespace NLangExt;
using namespace NLangExt_cbl;

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

CTxtColorMgr_cbl::CTxtColorMgr_cbl()
{
	int i;
	for ( i = 0; i < 8; i++ ) IndexTable[i] = 0;
	IndexTable[ CCT_ALPHANUMERIC ] = 0;
	IndexTable[ CCT_KEYWORD ] = 1;
	IndexTable[ CCT_COMENT ] = 2;
	IndexTable[ CCT_SEQUENCE_NUMBER ] = 4;
	IndexTable[ CCT_STRING ] = 3;
	IndexTable[ CCT_OTHER ] = 0;
	IndexTable[ CCT_NULL ] = 0;
}

CTxtColorMgr_cbl::~CTxtColorMgr_cbl()
{

}

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

// 初期化
bool CTxtColorMgr_cbl::Initialize( VClsPtr< CConfigInfo > pConf )
{
	vColor[0] = pConf->RefCOBOL_NormalTextF_Color();
	vColor[1] = pConf->RefCOBOL_KeywordF_Color();
	vColor[2] = pConf->RefCOBOL_CommentF_Color();
	vColor[3] = pConf->RefCOBOL_SringF_Color();
	vColor[4] = pConf->RefCOBOL_SequenceNumberF_Color();
	return true;
}

// 使用する色の数を取得
int CTxtColorMgr_cbl::GetColorCount() const
{
	return 5;
}

// 色を取得
Pixel CTxtColorMgr_cbl::GetColor( int idx ) const
{
	assert( idx >= 0 && idx < 5 );
	return vColor[idx];
}

// 色情報から色のインデックスへ変換
int CTxtColorMgr_cbl::TranseToIdx( unsigned char c ) const
{
	assert( c >= 0 && c < 8 );
	return IndexTable[c];
}

// 初期状態で更新
void CTxtColorMgr_cbl::InitiUpdate( T_LineData &rData ) const
{
	CLinePseudoPtr_txt pSTxt( &rData );
	CLinePseudoPtr_txt pETxt( &rData );
	CLinePseudoPtr_clr pSCB( &rData );
	pETxt.SetEnd();
	m_HM.FullUpdate( pSTxt, pETxt, pSCB );
}

// 文字列の更新に伴う色の更新
void CTxtColorMgr_cbl::Update( T_LineData &rData, const T_SelRange &range ) const
{
	CLinePseudoPtr_txt pSTxt( &rData );
	CLinePseudoPtr_txt pETxt( &rData );
	CLinePseudoPtr_txt pUpdateSTxt( &rData );
	CLinePseudoPtr_txt pUpdateETxt( &rData );
	CLinePseudoPtr_clr pUpdateSPosCB( &rData );
	pETxt.SetEnd();
	pUpdateSTxt.SetPos( range.GetSPos() );
	pUpdateETxt.SetPos( range.GetEPos() );
	pUpdateSPosCB.SetPos( range.GetSPos() );
	m_HM.UpdateWidthChange( pSTxt, pETxt, pUpdateSTxt, pUpdateSPosCB, pUpdateETxt );
}
