// NeL - MMORPG Framework <http://dev.ryzom.com/projects/nel/>
// Copyright (C) 2010  Winch Gate Property Limited
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program.  If not, see <http://www.gnu.org/licenses/>.

// vegetable_copy_dlg.cpp : implementation file
//

#include "std_afx.h"
#include "object_viewer.h"
#include "vegetable_copy_dlg.h"
#include "vegetable_dlg.h"


/////////////////////////////////////////////////////////////////////////////
CVegetableCopyDlg::CLastSetup		CVegetableCopyDlg::_LastSetup;

CVegetableCopyDlg::CLastSetup::CLastSetup()
{
	SubsetCopy = FALSE;
	ScaleZ = FALSE;
	ScaleXY = FALSE;
	RotateZ = FALSE;
	RotateY = FALSE;
	RotateX = FALSE;
	Mesh = FALSE;
	MaxDensity = FALSE;
	Distance = FALSE;
	Density = FALSE;
	ColorSetup = FALSE;
	ColorNoise = FALSE;
	BendPhase = FALSE;
	BendFactor = FALSE;
	AngleSetup = FALSE;
}


/////////////////////////////////////////////////////////////////////////////
// CVegetableCopyDlg dialog


CVegetableCopyDlg::CVegetableCopyDlg(CVegetableDlg *vegetableDlg, CWnd* pParent /*=NULL*/)
	: CDialog(CVegetableCopyDlg::IDD, pParent), _VegetableDlg(vegetableDlg)
{
	//{{AFX_DATA_INIT(CVegetableCopyDlg)
	SubsetCopy = FALSE;
	ScaleZ = FALSE;
	ScaleXY = FALSE;
	RotateZ = FALSE;
	RotateY = FALSE;
	RotateX = FALSE;
	Mesh = FALSE;
	MaxDensity = FALSE;
	Distance = FALSE;
	Density = FALSE;
	ColorSetup = FALSE;
	ColorNoise = FALSE;
	BendPhase = FALSE;
	BendFactor = FALSE;
	AngleSetup = FALSE;
	VegetableSelected = -1;
	//}}AFX_DATA_INIT
}


void CVegetableCopyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CVegetableCopyDlg)
	DDX_Control(pDX, IDC_LIST1, VegetableList);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_SUBSET_COPY, CheckSubsetCopy);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_SCALEZ, CheckScaleZ);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_SCALEXY, CheckScaleXY);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_ROTATEZ, CheckRotateZ);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_ROTATEY, CheckRotateY);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_ROTATEX, CheckRotateX);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_MESH, CheckMesh);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_MAXDENSITY, CheckMaxDensity);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_DISTANCE, CheckDistance);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_DENSITY, CheckDensity);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_COLORSETUP, CheckColorSetup);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_COLORNOISE, CheckColorNoise);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_BENDPHASE, CheckBendPhase);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_BENDFACTOR, CheckBendFactor);
	DDX_Control(pDX, IDC_CHECK_VEGETABLE_ANGLESETUP, CheckAngleSetup);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_SUBSET_COPY, SubsetCopy);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_SCALEZ, ScaleZ);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_SCALEXY, ScaleXY);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_ROTATEZ, RotateZ);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_ROTATEY, RotateY);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_ROTATEX, RotateX);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_MESH, Mesh);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_MAXDENSITY, MaxDensity);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_DISTANCE, Distance);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_DENSITY, Density);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_COLORSETUP, ColorSetup);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_COLORNOISE, ColorNoise);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_BENDPHASE, BendPhase);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_BENDFACTOR, BendFactor);
	DDX_Check(pDX, IDC_CHECK_VEGETABLE_ANGLESETUP, AngleSetup);
	DDX_LBIndex(pDX, IDC_LIST1, VegetableSelected);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CVegetableCopyDlg, CDialog)
	//{{AFX_MSG_MAP(CVegetableCopyDlg)
	ON_BN_CLICKED(IDC_BUTTON_VEGETABLE_APPEARANCE_NONE, OnButtonVegetableAppearanceNone)
	ON_BN_CLICKED(IDC_BUTTON_VEGETABLE_APPERANCE_ALL, OnButtonVegetableApperanceAll)
	ON_BN_CLICKED(IDC_BUTTON_VEGETABLE_GENERAL_ALL, OnButtonVegetableGeneralAll)
	ON_BN_CLICKED(IDC_BUTTON_VEGETABLE_GENERAL_NONE, OnButtonVegetableGeneralNone)
	ON_BN_CLICKED(IDC_BUTTON_VEGETABLE_POSITION_ALL, OnButtonVegetablePositionAll)
	ON_BN_CLICKED(IDC_BUTTON_VEGETABLE_POSITION_NONE, OnButtonVegetablePositionNone)
	ON_BN_CLICKED(IDC_CHECK_VEGETABLE_SUBSET_COPY, OnCheckVegetableSubsetCopy)
	ON_WM_DESTROY()
	ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


// ***************************************************************************
// ***************************************************************************
// ***************************************************************************
// ***************************************************************************


// ***************************************************************************
void	CVegetableCopyDlg::enableChecks(bool enable)
{
	CheckScaleZ.EnableWindow(enable);
	CheckScaleXY.EnableWindow(enable);
	CheckRotateZ.EnableWindow(enable);
	CheckRotateY.EnableWindow(enable);
	CheckRotateX.EnableWindow(enable);
	CheckMesh.EnableWindow(enable);
	CheckMaxDensity.EnableWindow(enable);
	CheckDistance.EnableWindow(enable);
	CheckDensity.EnableWindow(enable);
	CheckColorSetup.EnableWindow(enable);
	CheckColorNoise.EnableWindow(enable);
	CheckBendPhase.EnableWindow(enable);
	CheckBendFactor.EnableWindow(enable);
	CheckAngleSetup.EnableWindow(enable);
}


// ***************************************************************************
// ***************************************************************************
// CVegetableCopyDlg message handlers
// ***************************************************************************
// ***************************************************************************

void CVegetableCopyDlg::OnButtonVegetableGeneralAll() 
{
	CheckMesh.SetCheck(1);
	CheckDistance.SetCheck(1);
	CheckDensity.SetCheck(1);
	CheckMaxDensity.SetCheck(1);
	CheckAngleSetup.SetCheck(1);
}

void CVegetableCopyDlg::OnButtonVegetableGeneralNone() 
{
	CheckMesh.SetCheck(0);
	CheckDistance.SetCheck(0);
	CheckDensity.SetCheck(0);
	CheckMaxDensity.SetCheck(0);
	CheckAngleSetup.SetCheck(0);
}


void CVegetableCopyDlg::OnButtonVegetableApperanceAll() 
{
	CheckBendPhase.SetCheck(1);
	CheckBendFactor.SetCheck(1);
	CheckColorNoise.SetCheck(1);
	CheckColorSetup.SetCheck(1);
}
void CVegetableCopyDlg::OnButtonVegetableAppearanceNone() 
{
	CheckBendPhase.SetCheck(0);
	CheckBendFactor.SetCheck(0);
	CheckColorNoise.SetCheck(0);
	CheckColorSetup.SetCheck(0);
}

void CVegetableCopyDlg::OnButtonVegetablePositionAll() 
{
	CheckScaleXY.SetCheck(1);
	CheckScaleZ.SetCheck(1);
	CheckRotateX.SetCheck(1);
	CheckRotateY.SetCheck(1);
	CheckRotateZ.SetCheck(1);
}

void CVegetableCopyDlg::OnButtonVegetablePositionNone() 
{
	CheckScaleXY.SetCheck(0);
	CheckScaleZ.SetCheck(0);
	CheckRotateX.SetCheck(0);
	CheckRotateY.SetCheck(0);
	CheckRotateZ.SetCheck(0);
}

void CVegetableCopyDlg::OnCheckVegetableSubsetCopy() 
{
	// enable checks if needed.
	enableChecks(CheckSubsetCopy.GetCheck()==1);
}

BOOL CVegetableCopyDlg::OnInitDialog() 
{
	// setup flags before the UpdateData
	SubsetCopy= _LastSetup.SubsetCopy;
	ScaleZ= _LastSetup.ScaleZ;
	ScaleXY= _LastSetup.ScaleXY;
	RotateZ= _LastSetup.RotateZ;
	RotateY= _LastSetup.RotateY;
	RotateX= _LastSetup.RotateX;
	Mesh= _LastSetup.Mesh;
	MaxDensity= _LastSetup.MaxDensity;
	Distance= _LastSetup.Distance;
	Density= _LastSetup.Density;
	ColorSetup= _LastSetup.ColorSetup;
	ColorNoise= _LastSetup.ColorNoise;
	BendPhase= _LastSetup.BendPhase;
	BendFactor= _LastSetup.BendFactor;
	AngleSetup= _LastSetup.AngleSetup;


	CDialog::OnInitDialog();
	
	// enable checks if needed.
	enableChecks(CheckSubsetCopy.GetCheck()==1);
	

	// Init the control list.
	uint	num= _VegetableDlg->getNumVegetables();
	for(uint i=0; i<num; i++)
	{
		VegetableList.AddString(_VegetableDlg->getVegetableName(i).c_str());
	}
	

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CVegetableCopyDlg::OnDestroy() 
{
	CDialog::OnDestroy();
	
	// save setup in _LastSetup.
	_LastSetup.SubsetCopy= SubsetCopy;
	_LastSetup.ScaleZ= ScaleZ;
	_LastSetup.ScaleXY= ScaleXY;
	_LastSetup.RotateZ= RotateZ;
	_LastSetup.RotateY= RotateY;
	_LastSetup.RotateX= RotateX;
	_LastSetup.Mesh= Mesh;
	_LastSetup.MaxDensity= MaxDensity;
	_LastSetup.Distance= Distance;
	_LastSetup.Density= Density;
	_LastSetup.ColorSetup= ColorSetup;
	_LastSetup.ColorNoise= ColorNoise;
	_LastSetup.BendPhase= BendPhase;
	_LastSetup.BendFactor= BendFactor;
	_LastSetup.AngleSetup= AngleSetup;
	
}

void CVegetableCopyDlg::OnOK() 
{
	UpdateData();
	if(VegetableSelected!=LB_ERR)
	{
		CDialog::OnOK();
	}
	else
	{
		MessageBox("Select a  vegetable to copy first", "Error", MB_OK | MB_ICONWARNING);
	}
}

void CVegetableCopyDlg::OnDblclkList1() 
{
	UpdateData();
	// DblClck select the name.
	EndDialog(IDOK);
}