/*-----------------------------------------------------------------------------
[名称]	ClipHistoryDlg.cpp
[概要]	クリップボード履歴管理ダイアログクラスの実装
[備考]	なし
[履歴]	2003-02-06	NC		コメント付加(moralog)
-----------------------------------------------------------------------------*/

//-----------------------------------------------------------------------------
// インクルード
//-----------------------------------------------------------------------------
#include "stdafx.h"
#include "shitarabian.h"
#include "ClipHistoryDlg.h"
#include "ClipHistory.h"
#include "ExeCommon.h"

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


//-----------------------------------------------------------------------------
// 自動生成関数群
//-----------------------------------------------------------------------------

/*-----------------------------------------------------------------------------
[名称]	コンストラクタ
[機能]	インスタンスの生成。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
CClipHistoryDlg::CClipHistoryDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CClipHistoryDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CClipHistoryDlg)
		// メモ - ClassWizard はこの位置にマッピング用のマクロを追加または削除します。
	//}}AFX_DATA_INIT
}


/*-----------------------------------------------------------------------------
[名称]	データ変換
[機能]	CDialog::DoDataExchange() のヘルプを参照。
[戻値]	なし
[備考]	なし
-----------------------------------------------------------------------------*/
void CClipHistoryDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CClipHistoryDlg)
	DDX_Control(pDX, IDOK, m_btnOK);
	DDX_Control(pDX, IDC_CLIPHISTORY_LIST, m_listHistory);
	DDX_Control(pDX, IDC_CLIPHISTORY_IMAGE, m_Image);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CClipHistoryDlg, CDialog)
	//{{AFX_MSG_MAP(CClipHistoryDlg)
	ON_WM_PAINT()
	ON_NOTIFY(NM_CLICK, IDC_CLIPHISTORY_LIST, OnClickCliphistoryList)
	ON_NOTIFY(LVN_ITEMCHANGED, IDC_CLIPHISTORY_LIST, OnItemchangedCliphistoryList)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()




/*-----------------------------------------------------------------------------
[名称]	初期化処理ハンドラ
[機能]	ダイアログコントロール初期化処理。
[戻値]	オンラインヘルプCWnd::OnInitDialog()参照。
[備考]	なし
-----------------------------------------------------------------------------*/
BOOL CClipHistoryDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// リストコントロールの初期化
	{
		// カラムの追加
		m_listHistory.InsertColumn(	0,	"パターン"	);
		m_listHistory.SetColumnWidth(	0,	80		);

		// 値の設定
		int		idxItem;
		for( idxItem=0 ; idxItem<m_plststrClipz->GetCount() ; idxItem++ )
		{
// ▼ (ワーニング回避) BGN 2003.12.29 (moralog) warning C4239
			m_listHistory.InsertItem(
				idxItem,
				m_plststrClipz->GetHistory( idxItem )
			);
// ▽ oridinal BGN
//			CString&	str = m_plststrClipz->GetHistory( idxItem );
//			m_listHistory.InsertItem(
//				idxItem,
//				str
//			);
// △ original END
// ▲ (ワーニング回避) END
		}
	}

	// 履歴内容初期表示させるためにクリックイベントハンドラを呼ぶ
	LRESULT	tmp;
	OnClickCliphistoryList( NULL, &tmp ) ;

	// 最初にリストにフォーカスを当てたいのだが please!
	if ( m_plststrClipz->GetCount() > 0 )
	{
//		m_listHistory.SetSelectionMark( 0 );
		m_listHistory.SetFocus();
	}

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

/*-----------------------------------------------------------------------------
[名称]	描画処理ハンドラ
[機能]	描画処理。
[戻値]	なし
[備考]	履歴内容を描画するのに使用。
-----------------------------------------------------------------------------*/
void CClipHistoryDlg::OnPaint() 
{
	CPaintDC dc(this); // 描画用のデバイス コンテキスト

	DrawImage( &dc );
}

/*-----------------------------------------------------------------------------
[名称]	リストクリック処理ハンドラ
[機能]	クリックイベントをトリガとする再描画処理。
[戻値]	なし
[備考]	リストがクリックされたら、選択アイテムが変更されたとみなして
		履歴内容を再描画する。
-----------------------------------------------------------------------------*/
void CClipHistoryDlg::OnClickCliphistoryList(NMHDR* pNMHDR, LRESULT* pResult) 
{
// ▼ (ワーニング回避) BGN 2003.12.29 (moralog) warning C4100
	// warning C4100 回避
	pNMHDR;
// ▲ (ワーニング回避) END

	CClientDC	DC( this );
	DrawImage( &DC );

	m_btnOK.EnableWindow( !GetPasteString().IsEmpty() );

	*pResult = 0;
}

/*-----------------------------------------------------------------------------
[名称]	履歴描画
[機能]	履歴内容の描画処理。
[戻値]	なし
[備考]	m_Imageコントロール位置に描画を行う。
-----------------------------------------------------------------------------*/
void CClipHistoryDlg::DrawImage(
	CDC*	pDC			// I  :出力先DC [-] (-) :-
)
{
	// 描画座標を取得
	CRect		rcClient;
	{
		// ウィンドウ位置を取得
		CRect		rcwndImage;
		m_Image.GetWindowRect( &rcwndImage );
		ScreenToClient( &rcwndImage );

		// Image 位置を取得
		m_Image.GetClientRect( &rcClient );
		rcClient.left += rcwndImage.left;
		rcClient.top += rcwndImage.top;
		rcClient.right += rcwndImage.left;
		rcClient.bottom += rcwndImage.top;
	}

	// クリップボード履歴内容の描画
	pDC->FillSolidRect( rcClient, RGB( 255,255,255 ) );
	pDC->DrawText( GetPasteString(), rcClient, DT_LEFT );
}

/*-----------------------------------------------------------------------------
[名称]	履歴内容取得
[機能]	選択されている履歴内容の取得。
[戻値]	CString		履歴内容文字列 [-] (-)
[備考]	履歴が選択されていない場合はNULL文字列を戻す。
-----------------------------------------------------------------------------*/
CString CClipHistoryDlg::GetPasteString()
{
	int	idxItem = m_listHistory.GetSelectionMark();
	if ( idxItem != -1 )
	{
		return( m_plststrClipz->GetHistory( idxItem ) );
	}

	return( "" );
}

/*-----------------------------------------------------------------------------
[名称]	OKボタンハンドラ
[機能]	履歴内容のペースト。
[戻値]	なし
[備考]	履歴が選択されていない場合はなにもならない。
-----------------------------------------------------------------------------*/
void CClipHistoryDlg::OnOK() 
{
// ▼ (ワーニング回避) BGN 2003.12.29 (moralog) warning C4239
	CString	strPaste = GetPasteString();

// ▼ (3204) BGN 2004.05.12 (moralog) ExeCommon.cppから移動。汎用関数化。
	::EditCopyStringWithHistory( strPaste );
// ▽ original BGN
//	::EditCopyString( strPaste );
// △ original END
// ▲ (3204) END

// ▽ original BGN
//	::EditCopyString( GetPasteString() );
// △ original END
// ▲ (ワーニング回避) END
	
	CDialog::OnOK();
}

/*-----------------------------------------------------------------------------
[名称]	要素変更ハンドラ
[機能]	キーボードでリスト要素を選択変更したときの処理。
[戻値]	なし
[備考]	選択アイテムが変更されたとみなして履歴内容を再描画する。
-----------------------------------------------------------------------------*/
void CClipHistoryDlg::OnItemchangedCliphistoryList(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

	CClientDC	DC( this );
	DrawImage( &DC );

	m_btnOK.EnableWindow( !GetPasteString().IsEmpty() );
	
	*pResult = 0;
}
