// ModifyPathDlg.cpp : implementation file
//

#include "stdafx.h"
#include "animscript.h"
#include "ModifyPathDlg.h"

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

/////////////////////////////////////////////////////////////////////////////
// CModifyPathDlg dialog
/*
int CALLBACK BrowseCallbackProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
	RECT rect;
	//
	//Center the browse dialog on the screen...
	//
	switch (uMsg)
	{
	case BFFM_INITIALIZED:
		{
			char szPath[MAX_PATH];
			strcpy(szPath,(char *)lpData);
			//CString strCurrent = (CString)lpData;
			char szCurDir[MAX_PATH];
			GetCurrentDirectory(MAX_PATH,szCurDir);
			strcat(szCurDir,"\\");
			strcat(szCurDir,szPath);
			SendMessage(hWnd,BFFM_SETSELECTION,TRUE,(LPARAM)szCurDir);
	
			if (GetWindowRect(hWnd, &rect))
			{
				SetWindowPos(hWnd, 
							 HWND_TOP,
							 (GetSystemMetrics(SM_CXSCREEN) - (rect.right - rect.left)) >> 1,
							 (GetSystemMetrics(SM_CYSCREEN) - (rect.bottom - rect.top)) >> 1,
							 0,
							 0,
							 SWP_NOSIZE);
			}
		}
	}
	return 0;
}

CString BrowseDirectory(const char *strCurrent,CWnd *pWnd)
{
	CString str;
	TCHAR        szBuffer[MAX_PATH];
	LPITEMIDLIST pidlBrowse,pidlRoot;
	BROWSEINFO   bi;

	LPMALLOC lpMalloc;
	SHGetMalloc(&lpMalloc);
	ASSERT(lpMalloc);
	bi.hwndOwner = pWnd->GetSafeHwnd();
	// Get the ID for the "My Computer" root folder
	SHGetSpecialFolderLocation(pWnd->GetSafeHwnd(),CSIDL_DRIVES,&pidlRoot);

	bi.pidlRoot  = pidlRoot;
	bi.pszDisplayName = szBuffer;

	// Localize the descriptive text
	bi.lpszTitle = "Select Destination Folder";

	// BIF_EDITBOX and BIF_VALIDATE are for versions 4.71 and later, they
	// might be ignored by older versions
	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT | BIF_EDITBOX;// | BIF_USENEWUI;// | BIF_VALIDATE;
	bi.lParam = 0;
	bi.iImage = NULL;
	bi.lpfn = BrowseCallbackProc;
	bi.lParam = (LPARAM)strCurrent;
	//
	//Call the Windows shell folder browsing routine...
	//
	pidlBrowse = SHBrowseForFolder(&bi);
	if (NULL != pidlBrowse)
	{
		if (SHGetPathFromIDList(pidlBrowse, szBuffer))
		{
			if ('\\' == szBuffer[lstrlen(szBuffer)-1])
				szBuffer[lstrlen(szBuffer)-1] = '\0';
			str = CString(szBuffer);
		}
		else
			str = "";
		//
		//Free up shell memory used...
		//
		lpMalloc->Free(pidlBrowse);
	}
	else
		str = "";
	lpMalloc->Free(pidlRoot);
	lpMalloc->Release();
	return str;
}
*/

CModifyPathDlg::CModifyPathDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CModifyPathDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CModifyPathDlg)
		// NOTE: the ClassWizard will add member initialization here
	//}}AFX_DATA_INIT
}


void CModifyPathDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CModifyPathDlg)
	DDX_Control(pDX, IDC_EDIT_PATH, m_editPath);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CModifyPathDlg, CDialog)
	//{{AFX_MSG_MAP(CModifyPathDlg)
	ON_BN_CLICKED(IDC_BROWSE, OnBrowse)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CModifyPathDlg message handlers

void CModifyPathDlg::OnBrowse() 
{

	CString strCurrent;
	m_editPath.GetWindowText(strCurrent);
	char szCurDir[MAX_PATH];
	GetCurrentDirectory(MAX_PATH,szCurDir);
	strcat(szCurDir,"\\");
	int curDirLen = strlen(szCurDir);
	strcat(szCurDir,m_strPath);

	char szDrive[MAX_PATH];
	CFileDialog dlg(true);
	{
		char szDir[MAX_PATH];
		char szOld[MAX_PATH];
		strcpy(szOld,szCurDir);
		_splitpath(szOld,szDrive,szDir,NULL,NULL);
		strcat(szDrive,szDir);
		if (szDrive[strlen(szDrive)-1] == '\\')
			szDrive[strlen(szDrive)-1] = '\0';
		dlg.m_ofn.lpstrInitialDir = szDrive;
	}
	dlg.m_ofn.lpstrFile = szCurDir;
	if (IDOK == dlg.DoModal())
	{
		CString path = dlg.GetPathName();
		char *localpath = ((char *)(LPCTSTR)path)+curDirLen;
		m_editPath.SetWindowText(localpath);
	}
}

BOOL CModifyPathDlg::OnInitDialog() 
{
	CDialog::OnInitDialog();
	
	m_strPath = m_pPathNode->GetValue();

	m_editPath.SetWindowText(m_strPath);
	m_editPath.SetFocus();
	m_editPath.SetSel(MAKELONG(0,-1));
	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

void CModifyPathDlg::OnOK() 
{
	m_pPathNode->SetValue(m_strPath);
	CDialog::OnOK();
}
