
// FileFilterSelectSerchDlg.cpp : 実装ファイル
//

#include "stdafx.h"
#include "FileFilterSelectSerch.h"
#include "FileFilterSelectSerchDlg.h"
#include "afxdialogex.h"



#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#define ASR_CLASSNAME _T("{0F04AF43-7B85-46A5-A0A7-6D323A84AD7C}")

//メインフレームに対してCOPYDATASTRUCT（文字列）のコマンドを発行する
void SendCopyData(HWND hTargetWnd, CString strBuffer, int nCommandNo)
{
	COPYDATASTRUCT cpdata;
	cpdata.dwData = nCommandNo;
	cpdata.lpData = (void*)(LPCTSTR)strBuffer;
	cpdata.cbData = (strBuffer.GetLength() + 1) * sizeof(LPCTSTR);
	::SendMessage(hTargetWnd, WM_COPYDATA,  (WPARAM)AfxGetMainWnd()->m_hWnd, (LPARAM)&cpdata);
}

CFileFilterSelectSerchDlg::CFileFilterSelectSerchDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(CFileFilterSelectSerchDlg::IDD, pParent)
	, m_strFilterText(_T(""))
	, m_strSelectText(_T(""))
	, m_strSerchText(_T(""))
{
}

void CFileFilterSelectSerchDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDIT1, m_strFilterText);
	DDV_MaxChars(pDX, m_strFilterText, 200);
	DDX_Text(pDX, IDC_EDIT2, m_strSelectText);
	DDV_MaxChars(pDX, m_strSelectText, 200);
	DDX_Text(pDX, IDC_EDIT3, m_strSerchText);
	DDV_MaxChars(pDX, m_strSerchText, 200);
}

BEGIN_MESSAGE_MAP(CFileFilterSelectSerchDlg, CDialogEx)
	ON_BN_CLICKED(IDC_BUTTON1, &CFileFilterSelectSerchDlg::OnBnClickedButton1)
	ON_BN_CLICKED(IDC_BUTTON2, &CFileFilterSelectSerchDlg::OnBnClickedButton2)
END_MESSAGE_MAP()


// CFileFilterSelectSerchDlg メッセージ ハンドラー

BOOL CFileFilterSelectSerchDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	return TRUE;  // フォーカスをコントロールに設定した場合を除き、TRUE を返します。
}
void CFileFilterSelectSerchDlg::OnOK()
{
	if (!UpdateData())
		return;//入力内容にエラーがある場合の定型処理

	CWnd* pWndAsr = FindWindow(ASR_CLASSNAME, NULL);
	if (pWndAsr == NULL)
		return;//As/R本体が見つからない場合

	CWnd* pWnd = GetFocus();
	if (pWnd)//エディットにフォーカスがある場合は処理分岐
	{
		if (pWnd->m_hWnd == GetDlgItem(IDC_EDIT1)->m_hWnd)
		{
			if (m_strFilterText.IsEmpty())
				OnBnClickedButton1();
			else
				//先頭のWがワイルドカード指定の意味、810はWのような語彙解析コマンド用の内部コマンドID
				SendCopyData(pWndAsr->m_hWnd, L"W" + m_strFilterText, 810);
		}
		else if (pWnd->m_hWnd == GetDlgItem(IDC_EDIT2)->m_hWnd)
		{
			if (m_strSelectText.IsEmpty())
				OnBnClickedButton2();
			else
				//部分一致で選択テキストの発行、800は実体指定の選択の内部コマンドID
				//例えば*.jpgを入力すると、実体で比較して*.jpgのファイルを全部選択する
				SendCopyData(pWndAsr->m_hWnd, L"*" + m_strSelectText + L"*", 800);
		}
		else if (pWnd->m_hWnd == GetDlgItem(IDC_EDIT3)->m_hWnd)
		{
			//部分一致で選択シーケンシャルサーチの実行、801は内部コマンドID
			SendCopyData(pWndAsr->m_hWnd, L"*" + m_strSerchText + L"*", 801);
		}

	}
	//CDialogEx::OnOK();//OKイベントでダイアログを閉じない
}

void CFileFilterSelectSerchDlg::OnBnClickedButton1()
{
	CWnd* pWnd = FindWindow(ASR_CLASSNAME, NULL);
	if (pWnd)
		pWnd->PostMessage(WM_COMMAND, 33308);//フィルタ解除コマンド送信
	GetDlgItem(IDC_EDIT1)->SetFocus();
}

void CFileFilterSelectSerchDlg::OnBnClickedButton2()
{
	CWnd* pWnd = FindWindow(ASR_CLASSNAME, NULL);
	if (pWnd)
		pWnd->PostMessage(WM_COMMAND, 35605);//選択解除コマンド送信
	GetDlgItem(IDC_EDIT2)->SetFocus();
}
