|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
HomeDir.cpp : implementation file
CPropertyPage support for User mgmt wizard
File History:
JonY Apr-96 created
--*/
#include "stdafx.h"
#include "speckle.h"
#include "wizbased.h"
#include "HomeDir.h"
#ifdef _DEBUG
//#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
/////////////////////////////////////////////////////////////////////////////
// CHomeDir property page
IMPLEMENT_DYNCREATE(CHomeDir, CWizBaseDlg)
CHomeDir::CHomeDir() : CWizBaseDlg(CHomeDir::IDD) { //{{AFX_DATA_INIT(CHomeDir)
m_csHome_dir_drive = _T(""); m_csRemotePath = _T(""); m_rbPathLocale = 0; m_csCaption = _T(""); //}}AFX_DATA_INIT
}
CHomeDir::~CHomeDir() { }
void CHomeDir::DoDataExchange(CDataExchange* pDX) { CPropertyPage::DoDataExchange(pDX); //{{AFX_DATA_MAP(CHomeDir)
DDX_Control(pDX, IDC_DRIVE_LETTER, m_cbDriveLetter); DDX_CBString(pDX, IDC_DRIVE_LETTER, m_csHome_dir_drive); DDX_Text(pDX, IDC_REMOTE_PATH, m_csRemotePath); DDX_Radio(pDX, IDC_LOCAL_PATH_BUTTON, m_rbPathLocale); DDX_Text(pDX, IDC_STATIC1, m_csCaption); //}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CHomeDir, CWizBaseDlg) //{{AFX_MSG_MAP(CHomeDir)
ON_WM_SHOWWINDOW() ON_BN_CLICKED(IDC_LOCAL_PATH_BUTTON, OnLocalPathButton) ON_BN_CLICKED(IDC_REMOTE_PATH_BUTTON, OnRemotePathButton) //}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CHomeDir message handlers
LRESULT CHomeDir::OnWizardNext() { CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
UpdateData(TRUE); if (m_rbPathLocale == 0) // local
{ pApp->m_csHomeDir = L""; // leave this empty per JonN and spec
pApp->m_csHome_dir_drive = ""; } else // remote
{ if (m_csRemotePath.Left(2) != L"\\\\") { AfxMessageBox(IDS_INVALID_PATH); GetDlgItem(IDC_REMOTE_PATH)->SetFocus(); return -1; }
if (m_csHome_dir_drive == L"") { AfxMessageBox(IDS_NO_HOMEDIR_DRIVE_LETTER); GetDlgItem(IDC_DRIVE_LETTER)->SetFocus(); return -1; }
CWaitCursor wait; // make sure directory exists
if (CreateFile((const TCHAR*)m_csRemotePath, GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL) == INVALID_HANDLE_VALUE) { DWORD dwErr = GetLastError(); if (dwErr == 5) // access denied
{ AfxMessageBox(IDS_NO_DIR_PERMISSION, MB_ICONSTOP); return -1; } // store the current dir so it can be restored
CString csCurDir; GetCurrentDirectory(256, csCurDir.GetBufferSetLength(256)); csCurDir.ReleaseBuffer();
CString csMessage; AfxFormatString1(csMessage, IDS_INVALID_DIRECTORY_NAME, m_csRemotePath); if (AfxMessageBox(csMessage, MB_YESNO) != IDYES) return -1; if (!CreateNewDirectory((const TCHAR*)m_csRemotePath)) { if (AfxMessageBox(IDS_CANT_CREATE_DIRECTORY, MB_YESNO) != IDYES) return -1; } SetCurrentDirectory((LPCTSTR)csCurDir); }
pApp->m_csHomeDir = m_csRemotePath; GetDlgItem(IDC_DRIVE_LETTER)->GetWindowText(pApp->m_csHome_dir_drive); pApp->m_csHome_dir_drive = pApp->m_csHome_dir_drive.Left(2); // trim off trailing blank
pApp->m_csHome_dir_drive.MakeUpper(); }
if (pApp->m_bRAS) return IDD_RAS_PERM_DIALOG; else if (pApp->m_bNW) return IDD_FPNW_DLG; else if (pApp->m_bExchange) return IDD_EXCHANGE_DIALOG; else return IDD_RESTRICTIONS_DIALOG;
}
BOOL CHomeDir::CreateNewDirectory(const TCHAR* m_csDirectoryName) { // first remove the \\server\share info and CD to it
CString csDir = m_csDirectoryName; csDir = csDir.Right(csDir.GetLength() - 2); CString csServer = csDir.Left(csDir.Find(L"\\")); csDir = csDir.Right((csDir.GetLength() - csServer.GetLength()) - 1); CString csShare = csDir.Left(csDir.Find(L"\\")); csDir = csDir.Right((csDir.GetLength() - csShare.GetLength()) - 1);
CString csPath; csPath.Format(L"\\\\%s\\%s", csServer, csShare); if (!SetCurrentDirectory(csPath)) return FALSE;
// parse out the individual path names and cd / md them
TCHAR* pDirectory = new TCHAR[_tcslen(csDir) * sizeof(TCHAR)]; _tcscpy(pDirectory, csDir); TCHAR* ppDir = pDirectory;
TCHAR* pDir; pDir = _tcstok(pDirectory, L"\\");
while (pDir != NULL) { if (!SetCurrentDirectory(pDir)) { CreateDirectory(pDir, NULL); if (!SetCurrentDirectory(pDir)) { delete ppDir; return FALSE; } } pDir = _tcstok(NULL, L"\\"); } delete ppDir;
TCHAR pCurDir[256]; GetCurrentDirectory(256, pCurDir); CString csNewDir, csTemp; csTemp.LoadString(IDS_NEW_DIR_CREATED); csNewDir.Format(csTemp, pCurDir); AfxMessageBox(csNewDir); return TRUE; }
LRESULT CHomeDir::OnWizardBack() { CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp(); if (pApp->m_bLoginScript) return IDD_LOGON_SCRIPT_DIALOG; else if (pApp->m_bProfile) return IDD_PROFILE; else return IDD_OPTIONS_DIALOG;
}
BOOL CHomeDir::OnInitDialog() { CWizBaseDlg::OnInitDialog(); // m_csLocalPath = "c:\\users\\default";
// create list of available drives
int drive; TCHAR tDrive[3];
for( drive = 3; drive <= 26; drive++ ) { swprintf(tDrive, L"%c: ", drive + 'A' - 1 ); m_cbDriveLetter.AddString(tDrive); } return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void CHomeDir::OnShowWindow(BOOL bShow, UINT nStatus) { CWizBaseDlg::OnShowWindow(bShow, nStatus); if (bShow) { CSpeckleApp* pApp = (CSpeckleApp*)AfxGetApp();
CString csTemp; csTemp.LoadString(IDS_HOMEDIR_CAPTION);
CString csTemp2; csTemp2.Format(csTemp, pApp->m_csUserName); m_csCaption = csTemp2; UpdateData(FALSE); }
}
void CHomeDir::OnLocalPathButton() { GetDlgItem(IDC_DRIVE_LETTER)->EnableWindow(FALSE); GetDlgItem(IDC_REMOTE_PATH)->EnableWindow(FALSE); }
void CHomeDir::OnRemotePathButton() { GetDlgItem(IDC_DRIVE_LETTER)->EnableWindow(TRUE); GetDlgItem(IDC_REMOTE_PATH)->EnableWindow(TRUE); }
|