// ConfigDlg.cpp : 구현 파일입니다.
//

#include "stdafx.h"
#include "ConfigDlg.h"

#include "../SHEUtil.h"


// CConfigDlg 대화 상자입니다.

IMPLEMENT_DYNAMIC(CConfigDlg, CDialog)
CConfigDlg::CConfigDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CConfigDlg::IDD, pParent)
{
	m_iPage = -1;
}

CConfigDlg::~CConfigDlg()
{
	for (std::vector<CConfigPage*>::iterator iter = m_dlgVec.begin(); iter != m_dlgVec.end(); iter++)
		delete (*iter);
}

void CConfigDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	DDX_Control(pDX, IDC_TAB, m_tab);
}


BEGIN_MESSAGE_MAP(CConfigDlg, CDialog)
	ON_NOTIFY(TCN_SELCHANGE, IDC_TAB, OnTabSelchange)
	ON_BN_CLICKED(IDOK, OnOk)
END_MESSAGE_MAP()


// CConfigDlg 메시지 처리기입니다.

BOOL CConfigDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// TODO:  여기에 추가 초기화 작업을 추가합니다.
	m_tab.InsertItem(0, "전송후 작업");
	m_tab.InsertItem(1, "같은 파일 처리");
	m_tab.InsertItem(2, "기타");
	m_tab.SetItemSize(CSize(130, 17));

	m_tab.GetClientRect(&m_rcFrame);
	m_rcFrame.left   += 1;
	m_rcFrame.top    += 20;
	m_rcFrame.right  -= 1;
	m_rcFrame.bottom -= 1;

	if (m_regutil.OpenKey(HKEY_CURRENT_USER, CString(REG_KEY))) {
		m_dlg1.m_nAfterWork      = m_regutil.GetNumValue("AfterWork");
		m_dlg1.m_bForceKill      = m_regutil.GetNumValue("ForceKill");
		m_dlg2.m_nWritePolicy    = m_regutil.GetNumValue("WritePolicy");
		m_dlg3.m_bChkShowAllFile = m_regutil.GetNumValue("ShowAllFile");

		m_regutil.CloseKey();
	}

	AddPage(m_dlg1, "전송후 작업");
	AddPage(m_dlg2, "같은 파일 처리");
	AddPage(m_dlg3, "기타");

	ShowPage(0);

	return TRUE;  // return TRUE unless you set the focus to a control
	// 예외: OCX 속성 페이지는 FALSE를 반환해야 합니다.
}

void CConfigDlg::AddPage(CConfigSubDlg &dlg, LPCTSTR pszCaption)
{
	CConfigPage *pcp = new CConfigPage();
	pcp->m_pdlg       = &dlg;
	pcp->m_nID        = dlg.GetID();
	pcp->m_sCaption   = pszCaption;
	
	m_dlgVec.push_back(pcp);

	if (!::IsWindow(dlg.m_hWnd))
		dlg.Create(dlg.GetID(), &m_tab);
}

BOOL CConfigDlg::ShowPage(int iPage)
{
	if (m_tab.GetCurSel() >= 0) {
		CConfigPage* pcp = (CConfigPage*)m_dlgVec[m_tab.GetCurSel()];
		if (!pcp)
			return FALSE;

		if (pcp->m_pdlg) {
			if (::IsWindow(pcp->m_pdlg->m_hWnd))
				pcp->m_pdlg->ShowWindow(SW_HIDE);
		}
	}
	
	CConfigPage* pcp = (CConfigPage*)m_dlgVec[iPage];
	if (!pcp)
		return FALSE;

	if (pcp->m_pdlg) {
		if (::IsWindow(pcp->m_pdlg->m_hWnd)) {
			pcp->m_pdlg->SetParent(&m_tab);
			pcp->m_pdlg->MoveWindow(m_rcFrame.left, m_rcFrame.top, m_rcFrame.Width(), m_rcFrame.Height());
			pcp->m_pdlg->ShowWindow(SW_SHOW);
			pcp->m_pdlg->RedrawWindow();
			pcp->m_pdlg->SetFocus();
		}

		m_tab.SetCurSel(iPage);

		m_iPage = iPage;
	}

	return TRUE;
}

void CConfigDlg::OnTabSelchange(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	ShowPage(m_tab.GetCurSel());

	*pResult = 0;
}

void CConfigDlg::OnOk()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	m_dlg1.UpdateData();
	m_dlg2.UpdateData();
	m_dlg3.UpdateData();

	if (m_regutil.OpenKey(HKEY_CURRENT_USER, CString(REG_KEY))) {
		m_regutil.SetNumValue("AfterWork",   m_dlg1.m_nAfterWork);
		m_regutil.SetNumValue("ForceKill",   m_dlg1.m_bForceKill);
		m_regutil.SetNumValue("WritePolicy", m_dlg2.m_nWritePolicy);
		m_regutil.SetNumValue("ShowAllFile", m_dlg3.m_bChkShowAllFile);

		m_regutil.CloseKey();
	}

	CDialog::OnOK();
}
