// ArrayDlg.cpp : implementation file
//

#include "stdafx.h"
#include "leocad.h"
#include "ArrayDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CArrayDlg dialog


CArrayDlg::CArrayDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CArrayDlg::IDD, pParent)
{
	m_bInitDone = FALSE;

	//{{AFX_DATA_INIT(CArrayDlg)
	m_n1DCount = 10;
	m_n2DCount = 1;
	m_n3DCount = 1;
	m_nArrayDimension = 0;
	m_nTotal = 10;
	m_f2DX = 0.0f;
	m_f2DY = 0.0f;
	m_f2DZ = 0.0f;
	m_f3DX = 0.0f;
	m_f3DY = 0.0f;
	m_f3DZ = 0.0f;
	m_fMoveX = 0.0f;
	m_fMoveY = 0.0f;
	m_fMoveZ = 0.0f;
	m_fRotateX = 0.0f;
	m_fRotateY = 0.0f;
	m_fRotateZ = 0.0f;
	//}}AFX_DATA_INIT
}


void CArrayDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CArrayDlg)
	DDX_Text(pDX, IDC_ARRAY_1D_COUNT, m_n1DCount);
	DDX_Text(pDX, IDC_ARRAY_2D_COUNT, m_n2DCount);
	DDX_Text(pDX, IDC_ARRAY_3D_COUNT, m_n3DCount);
	DDX_Radio(pDX, IDC_ARRAY_1D, m_nArrayDimension);
	DDX_Text(pDX, IDC_ARRAY_TOTAL, m_nTotal);
	DDX_Text(pDX, IDC_ARRAY_2D_X, m_f2DX);
	DDX_Text(pDX, IDC_ARRAY_2D_Y, m_f2DY);
	DDX_Text(pDX, IDC_ARRAY_2D_Z, m_f2DZ);
	DDX_Text(pDX, IDC_ARRAY_3D_X, m_f3DX);
	DDX_Text(pDX, IDC_ARRAY_3D_Y, m_f3DY);
	DDX_Text(pDX, IDC_ARRAY_3D_Z, m_f3DZ);
	DDX_Text(pDX, IDC_ARRAY_MOVE_X, m_fMoveX);
	DDX_Text(pDX, IDC_ARRAY_MOVE_Y, m_fMoveY);
	DDX_Text(pDX, IDC_ARRAY_MOVE_Z, m_fMoveZ);
	DDX_Text(pDX, IDC_ARRAY_ROTATE_X, m_fRotateX);
	DDX_Text(pDX, IDC_ARRAY_ROTATE_Y, m_fRotateY);
	DDX_Text(pDX, IDC_ARRAY_ROTATE_Z, m_fRotateZ);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CArrayDlg, CDialog)
	//{{AFX_MSG_MAP(CArrayDlg)
	ON_BN_CLICKED(IDC_ARRAY_1D, OnArrayDimension)
	ON_BN_CLICKED(IDC_ARRAY_2D, OnArrayDimension)
	ON_BN_CLICKED(IDC_ARRAY_3D, OnArrayDimension)
	ON_EN_CHANGE(IDC_ARRAY_1D_COUNT, OnChangeArrayCount)
	ON_EN_CHANGE(IDC_ARRAY_2D_COUNT, OnChangeArrayCount)
	ON_EN_CHANGE(IDC_ARRAY_3D_COUNT, OnChangeArrayCount)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CArrayDlg message handlers

BOOL CArrayDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	UINT IDs[15] = { IDC_ARRAY_1D_COUNT_SPIN, IDC_ARRAY_2D_COUNT_SPIN, IDC_ARRAY_3D_COUNT_SPIN,
		IDC_ARRAY_2D_X_SPIN, IDC_ARRAY_2D_Y_SPIN, IDC_ARRAY_2D_Z_SPIN,
		IDC_ARRAY_3D_X_SPIN, IDC_ARRAY_3D_Y_SPIN, IDC_ARRAY_3D_Z_SPIN,
		IDC_ARRAY_MOVE_X_SPIN, IDC_ARRAY_ROTATE_X_SPIN, IDC_ARRAY_MOVE_Y_SPIN,
		IDC_ARRAY_ROTATE_Y_SPIN, IDC_ARRAY_MOVE_Z_SPIN, IDC_ARRAY_ROTATE_Z_SPIN };

	for (int i = 0; i < 3; i++)
		((CSpinButtonCtrl*)GetDlgItem(IDs[i]))->SetRange(1, 1000);
	for (i = 3; i < 15; i++)
		((CSpinButtonCtrl*)GetDlgItem(IDs[i]))->SetRange(-1000, 1000);

	m_bInitDone = TRUE;
	
	return TRUE;
}

void CArrayDlg::OnArrayDimension() 
{
	if (!IsWindow(m_hWnd))
		return;

	UpdateData();
	for (UINT u = IDC_ARRAY_2D_COUNT; u <= IDC_ARRAY_2D_Z; u++)
		GetDlgItem(u)->EnableWindow(m_nArrayDimension > 0);
	for (u = IDC_ARRAY_2D_X_SPIN; u <= IDC_ARRAY_2D_Z_SPIN; u++)
		GetDlgItem(u)->EnableWindow(m_nArrayDimension > 0);
	for (u = IDC_ARRAY_3D_COUNT; u <= IDC_ARRAY_3D_Z; u++)
		GetDlgItem(u)->EnableWindow(m_nArrayDimension > 1);
	for (u = IDC_ARRAY_3D_X_SPIN; u <= IDC_ARRAY_3D_Z_SPIN; u++)
		GetDlgItem(u)->EnableWindow(m_nArrayDimension > 1);
	OnChangeArrayCount();
}

void CArrayDlg::OnChangeArrayCount()
{
	if (!m_bInitDone)
		return;

	UpdateData();
	m_nTotal = m_n1DCount;
	if (m_nArrayDimension > 0)
		m_nTotal *= m_n2DCount;
	if (m_nArrayDimension > 1)
		m_nTotal *= m_n3DCount;
	UpdateData(FALSE);
}
