// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/>
// 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/>.

// ContinentPropertiesDlg.cpp : implementation file
//















#include "stdafx.h"
#include "master.h"
#include "ContinentPropertiesDlg.h"

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

/////////////////////////////////////////////////////////////////////////////

CContinentPropertiesDlg::CContinentPropertiesDlg (CWnd* pParent /*=NULL*/)
	: CDialog(CContinentPropertiesDlg::IDD, pParent)
{
	ContinentName = _T("");
	LandFile = _T("");
	LandDir = _T("");
	LandBankFile = _T("");
	LandFarBankFile = _T("");
	LandTileNoiseDir = _T("");
	LandZoneWDir = _T("");
	OutIGDir = _T("");
	DfnDir = _T("");
	GameElemDir = _T("");
}


void CContinentPropertiesDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);

	DDX_Text(pDX, IDC_EDIT_CONTINENT_NAME, ContinentName);
	DDX_Text(pDX, IDC_EDIT_LANDFILE, LandFile);
	DDX_Text(pDX, IDC_EDIT_LANDDIR, LandDir);

	DDX_Text(pDX, IDC_LAND_BANK_FILE, LandBankFile);
	DDX_Text(pDX, IDC_LAND_FAR_BANK_FILE, LandFarBankFile);
	DDX_Text(pDX, IDC_LAND_TILE_NOISE_DIR, LandTileNoiseDir);
	DDX_Text(pDX, IDC_OUT_LANDSCAPE_DIR, LandZoneWDir);
	DDX_Text(pDX, IDC_OUT_VEGETABLE_DIR, OutIGDir);

	DDX_Text(pDX, IDC_EDIT_DFNDIR, DfnDir);
	DDX_Text(pDX, IDC_EDIT_GAMEELEMDIR, GameElemDir);
}


BEGIN_MESSAGE_MAP(CContinentPropertiesDlg, CDialog)
	ON_COMMAND(IDC_BUTTON_LANDFILE, OnButtonLandFile)
	ON_COMMAND(IDC_BUTTON_LANDDIR, OnButtonLandDir)

	ON_COMMAND(IDC_EXPLORE_LAND_BANK_FILE, OnButtonLandBankFile)
	ON_COMMAND(IDC_EXPLORE_LAND_FAR_BANK_FILE, OnButtonLandFarBankFile)
	ON_COMMAND(IDC_EXPLORE_LAND_TILE_NOISE_DIR, OnButtonLandTileNoiseDir)
	ON_COMMAND(IDC_EXPLORE_LANDSCAPE, OnButtonLandZoneW)
	ON_COMMAND(IDC_EXPLORE_VEGETABLE, OnButtonOutIGDir)

	ON_COMMAND(IDC_BUTTON_DFNDIR, OnButtonDfnDir)
	ON_COMMAND(IDC_BUTTON_GAMEELEMDIR, OnButtonGameElemDir)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

BOOL CContinentPropertiesDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	// TODO: Add extra initialization here
	GetDlgItem(IDC_EDIT_CONTINENT_NAME)->SetFocus();

	UpdateData (FALSE); // Upload

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

// ---------------------------------------------------------------------------
// This function serve to initiate the browsing dialog box to the good position in the tree
int CALLBACK cpdBrowseCallbackProc (HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData) 
{
	switch(uMsg) 
	{
		case BFFM_INITIALIZED: 
			SendMessage (hwnd, BFFM_SETSELECTION, TRUE, pData);
		break;
		default:
		break;
	}
	return 0;
}

// ---------------------------------------------------------------------------
void CContinentPropertiesDlg::OnButtonLandFile () 
{
	CFileDialog dialog (true, "land", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "Land (*.land)|*.land", this);
	CString iniDir;
	int k = LandFile.GetLength()-1;
	while (k > 0)
	{
		if (LandFile[k] == '\\')
			break;
		--k;
	}
	for (int i = 0; i < k; ++i)
		iniDir += LandFile[i];
	dialog.m_ofn.lpstrInitialDir = iniDir;
	if (dialog.DoModal() == IDOK)
	{
		LandFile = dialog.GetPathName ();
		UpdateData (FALSE); // Upload
	}
}

// ---------------------------------------------------------------------------
void CContinentPropertiesDlg::OnButtonLandDir ()
{
	BROWSEINFO	bi;
	char		str[MAX_PATH];
	ITEMIDLIST*	pidl;
	char sTemp[1024];

	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = sTemp;;
	bi.lpszTitle = "Choose the path for land stuff";
	bi.ulFlags = 0;
	bi.lpfn = cpdBrowseCallbackProc;

	char sDir[512];
	strcpy(sDir, (LPCSTR)LandDir);
	bi.lParam = (LPARAM)sDir;

	bi.iImage = 0;
	pidl = SHBrowseForFolder (&bi);
	if (!SHGetPathFromIDList(pidl, str)) 
	{
		return;
	}
	LandDir= str;
	UpdateData (FALSE); // Upload
}

// ---------------------------------------------------------------------------
void CContinentPropertiesDlg::OnButtonDfnDir () 
{
	BROWSEINFO	bi;
	char		str[MAX_PATH];
	ITEMIDLIST*	pidl;
	char sTemp[1024];

	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = sTemp;;
	bi.lpszTitle = "Choose the path for DFN";
	bi.ulFlags = 0;
	bi.lpfn = cpdBrowseCallbackProc;

	char sDir[512];
	strcpy(sDir, (LPCSTR)DfnDir);
	bi.lParam = (LPARAM)sDir;

	bi.iImage = 0;
	pidl = SHBrowseForFolder (&bi);
	if (!SHGetPathFromIDList(pidl, str)) 
	{
		return;
	}
	DfnDir= str;
	UpdateData (FALSE); // Upload
}

// ---------------------------------------------------------------------------
void CContinentPropertiesDlg::OnButtonGameElemDir()
{
	BROWSEINFO	bi;
	char		str[MAX_PATH];
	ITEMIDLIST*	pidl;
	char sTemp[1024];

	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = sTemp;;
	bi.lpszTitle = "Choose the path for GameElem";
	bi.ulFlags = 0;
	bi.lpfn = cpdBrowseCallbackProc;

	char sDir[512];
	strcpy(sDir, (LPCSTR)GameElemDir);
	bi.lParam = (LPARAM)sDir;

	bi.iImage = 0;
	pidl = SHBrowseForFolder (&bi);
	if (!SHGetPathFromIDList(pidl, str)) 
	{
		return;
	}
	GameElemDir = str;
	UpdateData (FALSE); // Upload
}


void CContinentPropertiesDlg::OnButtonLandBankFile ()
{
	CFileDialog dialog (true, "smallbank", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "smallbank (*.smallbank)|*.smallbank", this);
	CString iniDir;
	int k = LandBankFile.GetLength()-1;
	while (k > 0)
	{
		if (LandBankFile[k] == '\\')
			break;
		--k;
	}
	for (int i = 0; i < k; ++i)
		iniDir += LandBankFile[i];
	dialog.m_ofn.lpstrInitialDir = iniDir;
	if (dialog.DoModal() == IDOK)
	{
		LandBankFile = dialog.GetPathName ();
		UpdateData (FALSE); // Upload
	}
}

void CContinentPropertiesDlg::OnButtonLandFarBankFile ()
{
	CFileDialog dialog (true, "farbank", NULL, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, "farbank (*.farbank)|*.farbank", this);
	CString iniDir;
	int k = LandFarBankFile.GetLength()-1;
	while (k > 0)
	{
		if (LandFarBankFile[k] == '\\')
			break;
		--k;
	}
	for (int i = 0; i < k; ++i)
		iniDir += LandFarBankFile[i];
	dialog.m_ofn.lpstrInitialDir = iniDir;
	if (dialog.DoModal() == IDOK)
	{
		LandFarBankFile = dialog.GetPathName ();
		UpdateData (FALSE); // Upload
	}
}

void CContinentPropertiesDlg::OnButtonLandTileNoiseDir ()
{
	BROWSEINFO	bi;
	char		str[MAX_PATH];
	ITEMIDLIST*	pidl;
	char sTemp[1024];

	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = sTemp;;
	bi.lpszTitle = "Choose the path for Tile Noise";
	bi.ulFlags = 0;
	bi.lpfn = cpdBrowseCallbackProc;

	char sDir[512];
	strcpy(sDir, (LPCSTR)LandTileNoiseDir);
	bi.lParam = (LPARAM)sDir;

	bi.iImage = 0;
	pidl = SHBrowseForFolder (&bi);
	if (!SHGetPathFromIDList(pidl, str)) 
	{
		return;
	}
	LandTileNoiseDir = str;
	UpdateData (FALSE); // Upload
}

void CContinentPropertiesDlg::OnButtonLandZoneW ()
{
	BROWSEINFO	bi;
	char		str[MAX_PATH];
	ITEMIDLIST*	pidl;
	char sTemp[1024];

	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = sTemp;;
	bi.lpszTitle = "Choose the path for ZoneW";
	bi.ulFlags = 0;
	bi.lpfn = cpdBrowseCallbackProc;

	char sDir[512];
	strcpy(sDir, (LPCSTR)LandZoneWDir);
	bi.lParam = (LPARAM)sDir;

	bi.iImage = 0;
	pidl = SHBrowseForFolder (&bi);
	if (!SHGetPathFromIDList(pidl, str)) 
	{
		return;
	}
	LandZoneWDir = str;
	UpdateData (FALSE); // Upload
}

void CContinentPropertiesDlg::OnButtonOutIGDir ()
{
	BROWSEINFO	bi;
	char		str[MAX_PATH];
	ITEMIDLIST*	pidl;
	char sTemp[1024];

	bi.hwndOwner = this->m_hWnd;
	bi.pidlRoot = NULL;
	bi.pidlRoot = NULL;
	bi.pszDisplayName = sTemp;;
	bi.lpszTitle = "Choose the path for IG output";
	bi.ulFlags = 0;
	bi.lpfn = cpdBrowseCallbackProc;

	char sDir[512];
	strcpy(sDir, (LPCSTR)OutIGDir);
	bi.lParam = (LPARAM)sDir;

	bi.iImage = 0;
	pidl = SHBrowseForFolder (&bi);
	if (!SHGetPathFromIDList(pidl, str)) 
	{
		return;
	}
	OutIGDir = str;
	UpdateData (FALSE); // Upload
}