// StepDlg.cpp : implementation file
//

#include "stdafx.h"
#include "leocad.h"
#include "StepDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CStepDlg dialog


CStepDlg::CStepDlg(CStepDlg** pointer, CWnd* pParent)
	: CDialog(CStepDlg::IDD, pParent)
{
	m_pView = pParent;
	m_pPointer = pointer;

	//{{AFX_DATA_INIT(CStepDlg)
	m_nStep = 0;
	//}}AFX_DATA_INIT
}


void CStepDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CStepDlg)
	DDX_Control(pDX, IDC_STEP_SLIDER, m_Slider);
	DDX_Text(pDX, IDC_STEP_EDIT, m_nStep);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CStepDlg, CDialog)
	//{{AFX_MSG_MAP(CStepDlg)
	ON_BN_CLICKED(IDAPPLY, OnApply)
	ON_WM_HSCROLL()
	ON_WM_DESTROY()
	ON_EN_CHANGE(IDC_STEP_EDIT, OnEditChange)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()
 
/////////////////////////////////////////////////////////////////////////////
// CStepDlg message handlers

void CStepDlg::UpdateRange(int nTime, int nTotal)
{
	m_Slider.SetRange (1, nTotal);
	m_Slider.SetPos (nTime);
	((CSpinButtonCtrl*)GetDlgItem(IDC_STEP_SPIN))->SetRange(1, nTotal);
	m_nStep = nTime;
	UpdateData(FALSE);
}

void CStepDlg::OnCancel() 
{
	DestroyWindow();
}

void CStepDlg::OnOK() 
{
	UpdateData();
	m_pView->PostMessage(WM_LC_SET_STEP, m_nStep);
	DestroyWindow();
}

void CStepDlg::OnApply() 
{
	UpdateData();
	m_pView->PostMessage(WM_LC_SET_STEP, m_nStep);
}

void CStepDlg::PostNcDestroy() 
{
	*m_pPointer = NULL;
	delete this;
}

void CStepDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) 
{
	m_nStep = m_Slider.GetPos();
	UpdateData(FALSE);
	
	CDialog::OnHScroll(nSBCode, nPos, pScrollBar);
}

void CStepDlg::OnEditChange()
{
	if (m_Slider.m_hWnd)
	{
		UpdateData();
		m_Slider.SetPos(m_nStep);
	}
}

void CStepDlg::OnDestroy() 
{
	RECT rc;
	GetWindowRect(&rc);
	char buf[30];
	sprintf(buf, "%d, %d", rc.top, rc.left);
	AfxGetApp()->WriteProfileString ("Settings", "Step Dialog", buf);

	CDialog::OnDestroy();
}
/*
void CStepDlg::OnNcCalcSize(BOOL bCalcValidRects, NCCALCSIZE_PARAMS FAR* lpncsp) 
{
	CRect rc = lpncsp->rgrc[0];
	rc.DeflateRect(2, 2, 2, 2);
	rc.top += 10;
//	rc.bottom -= 10;
	lpncsp->rgrc[0] = rc;
}

void CStepDlg::OnNcPaint() 
{
	CWindowDC dc(this);
	CRect rectClient;
	GetClientRect(rectClient);
	CRect rectWindow;
	GetWindowRect(rectWindow);
	ScreenToClient(rectWindow);

	rectWindow.OffsetRect(-rectWindow.left, -rectWindow.top+2);
	rectWindow.bottom = rectWindow.top + 10;
	::FillRect(dc.m_hDC, rectWindow, (HBRUSH)(COLOR_ACTIVECAPTION+1));

	CRect rectBorder;
	GetWindowRect(rectBorder);
	rectBorder.OffsetRect(-rectBorder.left, -rectBorder.top);

	dc.Draw3dRect(rectBorder, ::GetSysColor(COLOR_BTNFACE), ::GetSysColor(COLOR_3DDKSHADOW));
	rectBorder.DeflateRect(1, 1);
	dc.Draw3dRect(rectBorder, ::GetSysColor(COLOR_3DHIGHLIGHT), ::GetSysColor(COLOR_BTNSHADOW));

	rectClient.OffsetRect(-rectWindow.left, -rectWindow.top);
	dc.ExcludeClipRect(rectClient);

	// draw borders in non-client area
	rectWindow.OffsetRect(-rectWindow.left, -rectWindow.top);

	// erase parts not drawn
	dc.IntersectClipRect(rectWindow);

	// erase NC background the hard way
//	HBRUSH hbr = (HBRUSH)GetClassLong(m_hWnd, GCL_HBRBACKGROUND);
//	::FillRect(dc.m_hDC, rectWindow, hbr);


    ReleaseDC(&dc);
}
*/
