/*-----------------------------------------------------------------------------
[名称]	BoxCharDlg.cpp
[概要]	空白文字定義ダイアログクラスの実装
[備考]	なし
[履歴]	2003-02-08	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/

//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "BoxCharDlg.h"
#include "BoxCharDefine.h"
#include "BoxCharCharDlg.h"


#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CBoxCharDlg::CBoxCharDlg(CWnd* pParent /*=NULL*/)
	: COwnerTabPage(CBoxCharDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CBoxCharDlg)
	m_bEnable = FALSE;
	//}}AFX_DATA_INIT
}


/*-----------------------------------------------------------------------------
[名称]	データ変換
[機能]	CDialog::DoDataExchange() のヘルプを参照。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CBoxCharDlg)
	DDX_Control(pDX, IDC_BOXCHAR_EDIT, m_btnEdit);
	DDX_Control(pDX, IDC_BOXCHAR_DELETE, m_btnDelete);
	DDX_Control(pDX, IDC_BOXCHAR_ADD, m_btnAdd);
	DDX_Control(pDX, IDC_BOXCHAR_LIST, m_BoxCharList);
	DDX_Check(pDX, IDC_BOXCHAR_ENABLE, m_bEnable);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CBoxCharDlg, CDialog)
	//{{AFX_MSG_MAP(CBoxCharDlg)
	ON_BN_CLICKED(IDC_BOXCHAR_ADD, OnBoxcharAdd)
	ON_BN_CLICKED(IDC_BOXCHAR_EDIT, OnBoxcharEdit)
	ON_BN_CLICKED(IDC_BOXCHAR_DELETE, OnBoxcharDelete)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_BOXCHAR_LIST, OnItemchangedBoxcharList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*-----------------------------------------------------------------------------
[名称]	初期化ハンドラ
[機能]	コントロールの初期化。
[戻値]	CDialog::OnInitDialog() のヘルプを参照。
[備考]	なし
-----------------------------------------------------------------------------*/
BOOL CBoxCharDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_BoxCharList.InsertColumn(	0,	"有効"	);
	m_BoxCharList.InsertColumn(	1,	"パターン"	);

	m_BoxCharList.SetColumnWidth(	0,	40		);
	m_BoxCharList.SetColumnWidth(	1,	360		);

	CBoxCharArray& Itemz = m_BoxCharList.GetDefine()->GetItemz();
	for( int idxItem=0 ; idxItem<Itemz.GetSize() ; idxItem++ )
	{
		TBoxChar&	tBoxChar = Itemz[idxItem];
		m_BoxCharList.InsertItem(
			idxItem,
			tBoxChar.strChar
		);
	}

	m_bEnable = m_BoxCharList.GetDefine()->GetEnable();
	UpdateData( FALSE );
	VisibleControl();
	
	return TRUE;  // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
	              // 例外: OCX プロパティ ページの戻り値は FALSE となります
}


/*-----------------------------------------------------------------------------
[名称]	表示制御
[機能]	コントロールの表示設定処理。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::VisibleControl()
{
	int		idxItem = m_BoxCharList.GetSelectionMark();
	m_btnAdd.EnableWindow( TRUE );
	m_btnEdit.EnableWindow( idxItem > -1 );
	m_btnDelete.EnableWindow( idxItem > -1 );
}


/*-----------------------------------------------------------------------------
[名称]	「追加」ボタン押下ハンドラ
[機能]	BOX表示情報の追加。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::OnBoxcharAdd() 
{
	CBoxCharArray& Itemz = m_BoxCharList.GetDefine()->GetItemz();

	TBoxChar	tBoxChar;
	tBoxChar.bEnable = TRUE;
	tBoxChar.strChar = "";

	Itemz.Add( tBoxChar );
	m_BoxCharList.InsertItem(
		Itemz.GetSize(),
		tBoxChar.strChar
	);

	int		nItem = m_BoxCharList.GetDefine()->GetItemz().GetSize();
	m_BoxCharList.SetSelectionMark( nItem-1 );
	m_BoxCharList.SetItemState( nItem-1, LVIS_SELECTED, LVIS_SELECTED );

	RedrawWindow();
	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	「編集」ボタン押下ハンドラ
[機能]	BOX表示情報の編集。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::OnBoxcharEdit() 
{
	int		idxItem = m_BoxCharList.GetSelectionMark();
	if ( idxItem >= 0 )
	{
		CBoxCharArray& Itemz = m_BoxCharList.GetDefine()->GetItemz();

		CBoxCharCharDlg	dlg;
		dlg.m_strBoxCharChar = Itemz[idxItem].strChar;
		if ( dlg.DoModal() == IDOK )
		{
			Itemz[idxItem].strChar = dlg.m_strBoxCharChar;
		}
	}
	VisibleControl();
	RedrawWindow();
}


/*-----------------------------------------------------------------------------
[名称]	「削除」ボタン押下ハンドラ
[機能]	BOX表示情報の削除。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::OnBoxcharDelete() 
{
	int		idxItem = m_BoxCharList.GetSelectionMark();
	if ( idxItem >= 0 )
	{
		CBoxCharArray& Itemz = m_BoxCharList.GetDefine()->GetItemz();
		Itemz.RemoveAt( idxItem );
		m_BoxCharList.DeleteItem( idxItem );
	}
	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	確定処理
[機能]	BOX表示情報の確定、反映。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::Confirm() 
{
	UpdateData( TRUE );
	m_BoxCharList.GetDefine()->SetEnable( m_bEnable );
}


/*-----------------------------------------------------------------------------
[名称]	リストボックス項目変更ハンドラ
[機能]	リストボックスの選択状態変更に伴うボタンの表示制御。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CBoxCharDlg::OnItemchangedBoxcharList(NMHDR* pNMHDR, LRESULT* pResult) 
{
// ▼ (ワーニング回避) BGN 2003.12.29 (moralog) warning C4189
	// warning C4100 回避
	pNMHDR;
// ▽ original BGN
//	NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
// △ original END
// ▲ (ワーニング回避) END
	VisibleControl();
	
	*pResult = 0;
}

