|
|
#include "Precomp.h"
#include "resource.h"
#include "global.h"
#include "propwnd2.h"
#include "FilePane.h"
#include "NmAkWiz.h"
#include "wndprocs.h"
CFilePanePropWnd2::CFilePanePropWnd2(HWND hwndParent, UINT uIDD, LPTSTR szClassName, UINT PopUpHelpMenuTextId, int iX, int iY, int iWidth, int iHeight, BOOL bScroll ) : CPropertyDataWindow2( hwndParent, uIDD, szClassName, CFilePanePropWnd2::WndProc, PopUpHelpMenuTextId, iX, iY, iWidth, iHeight, bScroll ), m_fOpenDialog(FALSE) { // All the new stuff done in setfilepane...
// this constructor is already too big
}
void CFilePanePropWnd2::SetFilePane(BOOL fOpenDialog, UINT editID, UINT checkID, UINT browseID, LPTSTR lptstrDesc, LPTSTR lptstrDefExtension, LPTSTR lptstrDefFileName ) { SetWindowLong( m_hwnd, GWL_USERDATA, (long)this );
m_fOpenDialog = fOpenDialog; m_editID = editID; m_checkID = checkID; m_browseID = browseID; m_lptstrFilter = NULL; m_lptstrDefExtension = NULL; m_lptstrDefFileName = NULL;
_CopyFilter( &m_lptstrFilter, lptstrDesc, lptstrDefExtension ); _CopyString( &m_lptstrDefExtension, lptstrDefExtension ); _CopyString( &m_lptstrDefFileName, lptstrDefFileName );
m_hwndEdit = GetDlgItem( m_hwnd, editID ); m_hwndCheck = GetDlgItem( m_hwnd, checkID ); Edit_LimitText( m_hwndEdit, MAX_PATH ); m_hwndBrowse = GetDlgItem( m_hwnd, browseID );
_SetDefaultPath();
_InitOFN(); }
CFilePanePropWnd2::~CFilePanePropWnd2( void ) { delete [] m_lptstrFilter; delete [] m_lptstrDefExtension; delete [] m_lptstrDefFileName; }
LRESULT CALLBACK CFilePanePropWnd2::WndProc( HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM lParam ) { switch( iMsg ) { case WM_VSCROLL: { OnMsg_VScroll( hwnd, wParam ); return 0; break; } case WM_COMMAND: if (BN_CLICKED == GET_WM_COMMAND_CMD(wParam, lParam)) { CFilePanePropWnd2 *p = (CFilePanePropWnd2 *)GetWindowLong( hwnd, GWL_USERDATA);
if (p && GET_WM_COMMAND_ID(wParam, lParam) == p->m_browseID) { p->QueryFilePath(); }
return(0); break; } } return( DefWindowProc( hwnd, iMsg, wParam, lParam ) ); }
HANDLE CFilePanePropWnd2::CreateFile( DWORD dwDesiredAccess, DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition, DWORD dwFlagsAndAttributes ) { CreateOutputDir();
TCHAR szFile[ MAX_PATH ]; TCHAR szPath[ MAX_PATH ]; GetPath( szPath ); GetFile( szFile ); if( '\\' != szPath[ lstrlen( szPath ) - 1 ] ) { lstrcat( szPath, TEXT("\\") ); } lstrcat( szPath, szFile );
return ::CreateFile( szPath, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, NULL ); }
void CFilePanePropWnd2::_CopyFilter( LPTSTR* szTarget, LPTSTR szDec, LPTSTR szExt ) { int index = 0; // Note - add 4 because this filter needs three null terminators and a '*'
int iLen = (lstrlen( szDec ) + 1) + (1 + lstrlen( szExt ) + 1) + 1; *szTarget = new TCHAR[ iLen ]; lstrcpy( *szTarget, szDec );
index = lstrlen( *szTarget ) + 1;
(*szTarget)[index] = '*'; lstrcpy( &((*szTarget)[index+1]), szExt );
(*szTarget)[ iLen - 1] = '\0';
}
void CFilePanePropWnd2::_CopyString( LPTSTR* szTarget, LPTSTR szSource ) { int iLen = lstrlen( szSource ) + 1; *szTarget = new TCHAR[ iLen ]; lstrcpy( *szTarget, szSource ); }
UINT CALLBACK CFilePanePropWnd2::OFNHookProc( HWND hdlg, // handle to child dialog window
UINT uiMsg, // message identifier
WPARAM wParam, // message parameter
LPARAM lParam // message parameter
) { switch (uiMsg) { case WM_INITDIALOG: { SetWindowLong(hdlg, GWL_USERDATA, ((OPENFILENAME *)lParam)->lCustData); break; }
case WM_NOTIFY: { CFilePanePropWnd2 *p = (CFilePanePropWnd2 *)GetWindowLong( hdlg, GWL_USERDATA ); if (NULL == p) break; return p->_OFNHookProc(hdlg, uiMsg, wParam, lParam); }
default: break; }
return 0; }
UINT CALLBACK CFilePanePropWnd2::_OFNHookProc( HWND hdlg, // handle to child dialog window
UINT uiMsg, // message identifier
WPARAM wParam, // message parameter
LPARAM lParam // message parameter
) { switch( uiMsg ) { case WM_NOTIFY: { OFNOTIFY * pOfnotify = (OFNOTIFY *) lParam; switch( pOfnotify -> hdr . code ) { case CDN_FOLDERCHANGE: {
TCHAR szFile[ MAX_PATH ]; if( !CommDlg_OpenSave_GetSpec( GetParent( hdlg ), szFile, MAX_PATH ) || 0 == lstrlen( szFile ) || _tcschr( szFile, '\\' ) ) { CommDlg_OpenSave_SetControlText( GetParent( hdlg ), edt1, m_szOFNData ); } else { lstrcpy( m_szOFNData, szFile ); OutputDebugString( szFile ); } break; } case CDN_INITDONE: { GetFile( m_szOFNData ); break; } } } }
return( 0 ); }
void CFilePanePropWnd2::_InitOFN( void ) { ZeroMemory( &m_ofn, sizeof( m_ofn ) ); m_ofn.lStructSize = sizeof( m_ofn ); m_ofn.hwndOwner = m_hwnd; m_ofn.hInstance = g_hInstance; m_ofn.lpstrFilter = m_lptstrFilter; m_ofn.nMaxFile = MAX_PATH; m_ofn.lpstrDefExt = m_lptstrDefExtension; m_ofn.Flags = OFN_HIDEREADONLY | OFN_EXPLORER | OFN_ENABLEHOOK ;// | OFN_OVERWRITEPROMPT;
if (m_fOpenDialog) m_ofn.Flags |= OFN_FILEMUSTEXIST; m_ofn.lCustData = (long)this; m_ofn.lpfnHook = OFNHookProc; m_ofn.lpstrTitle = TEXT("Browse"); }
void CFilePanePropWnd2::QueryFilePath( void ) { TCHAR szDir[MAX_PATH]; TCHAR szFile[MAX_PATH];
GetPath(szDir); GetFile(szFile);
m_ofn.lpstrInitialDir = szDir; m_ofn.lpstrFile = szFile;
BOOL bRet; if (m_fOpenDialog) bRet = GetOpenFileName(&m_ofn); else bRet = GetSaveFileName(&m_ofn);
if( bRet ) { Edit_SetText( m_hwndEdit, m_ofn.lpstrFile ); } }
void CFilePanePropWnd2::_SetDefaultPath( void ) {
TCHAR szDefaultDistributionFilePath[ MAX_PATH ]; const TCHAR* szInstallationPath; szInstallationPath = GetInstallationPath(); if( szInstallationPath ) { lstrcpy( szDefaultDistributionFilePath, szInstallationPath ); _tcscat( szDefaultDistributionFilePath, TEXT("\\output\\") ); _tcscat( szDefaultDistributionFilePath, m_lptstrDefFileName ); } else { _tcscat( szDefaultDistributionFilePath, m_lptstrDefFileName ); } Edit_SetText( m_hwndEdit, szDefaultDistributionFilePath );
}
void CFilePanePropWnd2::CreateOutputDir( void ) { TCHAR sz[ MAX_PATH ]; GetPath( sz ); CreateDirectory( sz, NULL ); }
LPTSTR CFilePanePropWnd2::GetPathAndFile( LPTSTR lpstrPath ) { Edit_GetText( m_hwndEdit, lpstrPath, MAX_PATH );
return lpstrPath; }
LPTSTR CFilePanePropWnd2::GetPath( LPTSTR sz ) { TCHAR path[ MAX_PATH], drive[_MAX_DRIVE], dir[_MAX_DIR]; Edit_GetText( m_hwndEdit, path, MAX_PATH );
_splitpath( path, drive, dir, NULL, NULL ); wsprintf( sz, TEXT("%s%s"), drive, dir );
return sz; }
LPTSTR CFilePanePropWnd2::GetFile( LPTSTR sz ) { TCHAR path[ MAX_PATH], file[_MAX_FNAME], ext[ _MAX_EXT]; Edit_GetText( m_hwndEdit, path, MAX_PATH );
_splitpath( path, NULL, NULL, file, ext );
if (file[0] && (NULL == _tcschr(file, '\\'))) { if (!lstrcmp( m_lptstrDefExtension, ext)) { wsprintf(sz, TEXT("%s%s"), file, m_lptstrDefExtension); } else { wsprintf(sz, TEXT("%s%s%s"), file, ext, m_lptstrDefExtension); } } else { lstrcpy(sz, m_lptstrDefFileName); }
return sz; }
BOOL CFilePanePropWnd2::OptionEnabled() { return Button_GetCheck( m_hwndCheck ) ? TRUE : FALSE; }
BOOL CFilePanePropWnd2::Validate( BOOL bMsg ) { if( !OptionEnabled() ) { return TRUE; }
TCHAR szPath[ MAX_PATH ]; TCHAR drive[ _MAX_DRIVE], dir[_MAX_DIR], ext[ _MAX_EXT]; Edit_GetText( m_hwndEdit, szPath, MAX_PATH );
if( 0 == lstrlen( szPath ) ) { _SetDefaultPath(); return FALSE; }
_splitpath( szPath, drive, dir, NULL, ext );
if( 0 != lstrcmp( m_lptstrDefExtension, ext ) ) { lstrcat( szPath, m_lptstrDefExtension ); }
wsprintf( szPath, TEXT("%s%s"), drive, dir );
// Verify that we can write to the location
if( szPath[ lstrlen( szPath ) - 1 ] != '\\' ) { _tcscat( szPath, TEXT("\\") ); }
strcat( szPath, TEXT("eraseme.now") );
HANDLE hFile = ::CreateFile( szPath, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_DELETE_ON_CLOSE, NULL ); if( INVALID_HANDLE_VALUE == hFile ) { switch( GetLastError() ) { case ERROR_PATH_NOT_FOUND: { // Try to create the directory...
GetPath( szPath ); if( CreateDirectory( szPath, NULL ) ) { // Everything is OK, we created the directory at the path
RemoveDirectory( szPath ); // Ask if we should create the directory
if( bMsg ) { if( IDNO == NmrkMessageBox(MAKEINTRESOURCE(IDS_CREATE_DIRECTORY), NULL, MB_YESNO | MB_ICONQUESTION ) ) { return FALSE; } else { return TRUE; } } else { _SetDefaultPath(); return FALSE; } } //ErrorMessage();
if( bMsg ) { NmrkMessageBox(MAKEINTRESOURCE(IDS_SELECTED_PATH_IS_INVALID_PLEASE_CHANGE_THE_PATH_NAME_OR_BROWSE_FOR_A_NEW_PATH), MAKEINTRESOURCE( IDS_NMAKWIZ_ERROR_CAPTION), MB_OK | MB_ICONEXCLAMATION ); } else { _SetDefaultPath(); } return FALSE; break; } case ERROR_ACCESS_DENIED: { if( bMsg ) { NmrkMessageBox( MAKEINTRESOURCE(IDS_YOU_DO_NOT_HAVE_WRITE_ACCESS_TO_THE_SELECTED_PATH_PLEASE_SELECT_A_PATH_IN_WHICH_YOU_HAVE_WRITE_PERMISSION), MAKEINTRESOURCE(IDS_NMAKWIZ_ERROR_CAPTION), MB_OK | MB_ICONEXCLAMATION ); } else { _SetDefaultPath(); } return FALSE; break; } default: return FALSE; break; }
} else { CloseHandle( hFile ); DeleteFile( szPath ); }
return TRUE; }
|