/*-----------------------------------------------------------------------------
[名称]	UnicoderFontDlg.cpp
[概要]	ユニコード文字フォント編集ダイアログクラスの実装
[備考]	なし
[履歴]	2003-02-25	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/

//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "UnicoderDlg.h"
#include "UnicodeFontDlg.h"

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


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


/*-----------------------------------------------------------------------------
[名称]	データ変換
[機能]	CDialog::DoDataExchange()のヘルプを参照。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CUnicoderDlg)
	DDX_Control(pDX, IDC_UNICODER_EDIT, m_btnEdit);
	DDX_Control(pDX, IDC_UNICODER_FONTLIST, m_FontList);
	DDX_Control(pDX, IDC_UNICODER_UP, m_btnUp);
	DDX_Control(pDX, IDC_UNICODER_DOWN, m_btnDown);
	DDX_Control(pDX, IDC_UNICODER_DELETE, m_btnDelete);
	DDX_Control(pDX, IDC_UNICODER_ADD, m_btnAdd);
	DDX_Check(pDX, IDC_UNICODER_ENABLE, m_bEnable);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CUnicoderDlg, CDialog)
	//{{AFX_MSG_MAP(CUnicoderDlg)
	ON_BN_CLICKED(IDC_UNICODER_ADD, OnUnicoderAdd)
	ON_BN_CLICKED(IDC_UNICODER_EDIT, OnUnicoderEdit)
	ON_BN_CLICKED(IDC_UNICODER_DELETE, OnUnicoderDelete)
	ON_BN_CLICKED(IDC_UNICODER_UP, OnUnicoderUp)
	ON_BN_CLICKED(IDC_UNICODER_DOWN, OnUnicoderDown)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_UNICODER_FONTLIST, OnItemchangedUnicoderFontlist)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


/*-----------------------------------------------------------------------------
[名称]	初期化ハンドラ
[機能]	初期値の設定。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
BOOL CUnicoderDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();

	// リストのカラムを設定
	m_FontList.InsertColumn(	0,	"フォント"	);
	m_FontList.InsertColumn(	1,	"開始ｺｰﾄﾞ"	);
	m_FontList.InsertColumn(	2,	"終了ｺｰﾄﾞ"	);
	
	m_FontList.SetColumnWidth(	0,	250		);
	m_FontList.SetColumnWidth(	1,	70		);
	m_FontList.SetColumnWidth(	2,	70		);

	// リスト要素を追加
	for( int idxItem=0 ; idxItem<m_FontList.GetList()->GetSize() ; idxItem++ )
	{
		CUnicodeFont&	Font = (*(m_FontList.GetList()))[idxItem];
		m_FontList.InsertItem(
			idxItem,
			Font.m_Font.m_strFontName
		);
	}


// ▼ (3344) BGN 2003.12.20 (moralog) 共通設定のユニコード文字で追加のボタンを押すと強制終了
// 機能を無効にしておく
	VisibleControl();
// ▲ (3146) END

	return TRUE;  // コントロールにフォーカスを設定しないとき、戻り値は TRUE となります
	              // 例外: OCX プロパティ ページの戻り値は FALSE となります
}


/*-----------------------------------------------------------------------------
[名称]	追加ボタンハンドラ
[機能]	設定の追加処理。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::OnUnicoderAdd() 
{
	CUnicodeFont	Font;
	m_FontList.GetList()->Add( Font );

	int idxItem = m_FontList.InsertItem(
		m_FontList.GetItemCount()-1,
		Font.m_Font.m_strFontName
	);

	m_FontList.SetSelectionMark( idxItem-1 );
	m_FontList.SetItemState( idxItem-1, LVIS_SELECTED, LVIS_SELECTED );

	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	編集ボタンハンドラ
[機能]	選択されている設定の編集処理。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::OnUnicoderEdit() 
{
	int	idxItem = m_FontList.GetSelectionMark();
	if ( idxItem >= 0 )
	{
		CUnicodeFontDlg	dlg;
		dlg.GetUnicodeFont()->Copy( (*(m_FontList.GetList()))[idxItem] );
		if ( dlg.DoModal() == IDOK )
		{
			(*(m_FontList.GetList())).SetAt(idxItem, *(dlg.GetUnicodeFont()) );
		}
		RedrawWindow();
	}
	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	削除ボタンハンドラ
[機能]	選択されている設定の削除処理。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::OnUnicoderDelete() 
{
	int	idxItem = m_FontList.GetSelectionMark();
	if ( idxItem >= 0 )
	{
		m_FontList.GetList()->RemoveAt( idxItem );
		m_FontList.DeleteItem( idxItem );

		m_FontList.SetSelectionMark( idxItem-1 );
		m_FontList.SetItemState( idxItem-1, LVIS_SELECTED, LVIS_SELECTED );
	}
	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	上へボタンハンドラ
[機能]	選択されている設定の優先度を上げる。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::OnUnicoderUp() 
{
	int		idxItem = m_FontList.GetSelectionMark();
	if ( idxItem >= 0 )
	{
		// 配列内の順番を入れ替える
		CUnicodeFontArray& Itemz = *m_FontList.GetList();
		CUnicodeFont	UnicodeFont = Itemz[idxItem];

		Itemz.RemoveAt( idxItem );
		Itemz.InsertAt( idxItem-1, UnicodeFont );

		m_FontList.DeleteItem( idxItem );
		m_FontList.InsertItem(
			idxItem-1,
			UnicodeFont.m_Font.m_strFontName
		);

		m_FontList.SetSelectionMark( idxItem-1 );
		m_FontList.SetItemState( idxItem-1, LVIS_SELECTED, LVIS_SELECTED );
	}
	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	下へボタンハンドラ
[機能]	選択されている設定の優先度を下げる。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::OnUnicoderDown() 
{
	int		idxItem = m_FontList.GetSelectionMark();
	if ( idxItem < m_FontList.GetItemCount()-1 )
	{
		// 配列内の順番を入れ替える
		CUnicodeFontArray& Itemz = *m_FontList.GetList();
		CUnicodeFont	UnicodeFont = Itemz[idxItem];

		Itemz.RemoveAt( idxItem );
		Itemz.InsertAt( idxItem+1, UnicodeFont );

		m_FontList.DeleteItem( idxItem );
		m_FontList.InsertItem(
			idxItem+1,
			UnicodeFont.m_Font.m_strFontName
		);

		m_FontList.SetSelectionMark( idxItem+1 );
		m_FontList.SetItemState( idxItem+1, LVIS_SELECTED, LVIS_SELECTED );
	}
	VisibleControl();
}


/*-----------------------------------------------------------------------------
[名称]	ボタンのEnable制御
[機能]	ボタンのEnable状態を制御する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::VisibleControl()
{
// ▼ (ワーニング回避) BGN 2003.12.29 (moralog) warning C4189
// ▽ original BGN
//	int		idxItem = m_FontList.GetSelectionMark();
// △ original END
// ▲ (ワーニング回避) END

// ▼ (3344) BGN 2003.12.20 (moralog) 共通設定のユニコード文字で追加のボタンを押すと強制終了
// 機能を無効にしておく
	m_btnUp.EnableWindow( FALSE );
	m_btnDown.EnableWindow( FALSE );
	m_btnAdd.EnableWindow( FALSE );
	m_btnEdit.EnableWindow( FALSE );
	m_btnDelete.EnableWindow( FALSE );
/*
// ▽ oridinal BGN
	// 上へボタンは、上へいけるときに有効
	m_btnUp.EnableWindow( idxItem > 0 );

	// 下へボタンは、下へいけるときに有効
	m_btnDown.EnableWindow( idxItem < m_FontList.GetItemCount()-1 );

	// 追加ボタンはいつでも有効
	m_btnAdd.EnableWindow( TRUE );

	// 編集・削除ボタンは選択要素があるときに有効
	m_btnEdit.EnableWindow( idxItem > -1 );
	m_btnDelete.EnableWindow( idxItem > -1 );
// △ oridinal END
*/
// ▲ (3146) END
}


/*-----------------------------------------------------------------------------
[名称]	リスト選択要素変更ハンドラ
[機能]	リストの選択状態が変更されたとき、ボタンのEnable状態を制御する。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CUnicoderDlg::OnItemchangedUnicoderFontlist(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// warning C4239:警告の無視
	pNMHDR;

	VisibleControl();
	*pResult = 0;
}
