Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

400 lines
12 KiB

//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: filetransferpage.cpp
//
//--------------------------------------------------------------------------
// FileTransferPage.cpp : implementation file
//
#include "precomp.hxx"
#include "filetransferpage.h"
#include "debug.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
const DWORD g_FileTransferHelp[] = {
IDC_DISPLAYTRAY, IDH_DISPLAYTRAY,
IDC_SENDFILESGROUP, IDH_DISABLEHELP,
IDC_ALLOWSEND, IDH_ALLOWSEND,
IDC_DISPLAYRECV, IDH_DISPLAYRECV,
IDC_LOCATIONTITLE, IDH_LOCATIONTITLE,
IDC_RECEIVEDFILESLOCATION, IDH_RECEIVEDFILESLOCATION,
IDC_CHOOSEFILELOCATION, IDH_CHOOSEFILELOCATION,
IDC_SOUND, IDH_PLAYSOUND,
0, 0
};
/////////////////////////////////////////////////////////////////////////////
// FileTransferPage property page
void FileTransferPage::OnCommand(UINT ctrlId, HWND hwndCtrl, UINT cNotify)
{
IRINFO((_T("FileTransferPage::OnCommand")));
switch (ctrlId) {
case IDC_ALLOWSEND:
OnAllowsend();
break;
case IDC_DISPLAYRECV:
OnDisplayrecv();
break;
case IDC_DISPLAYTRAY:
OnDisplaytray();
break;
case IDC_CHOOSEFILELOCATION:
OnChoosefilelocation();
break;
case IDC_SOUND:
OnPlaySound();
break;
}
}
INT_PTR FileTransferPage::OnNotify(NMHDR * nmhdr)
{
switch (nmhdr->code)
{
case NM_CLICK:
switch (nmhdr->idFrom)
{
case IDC_NETWORKCONNECTIONS_LINK:
return OnNetworkConnectionsLink();
}
break;
}
return PropertyPage::OnNotify(nmhdr);
}
/////////////////////////////////////////////////////////////////////////////
// Opens the Network Connections Folder
BOOL FileTransferPage::OnNetworkConnectionsLink()
{
// This is: ::{CLSID_MyComputer}\::{CLSID_ControlPanel}\::{CLSID_NetworkConnections}
if (ShellExecute(NULL, NULL, L"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}\\::{21EC2020-3AEA-1069-A2DD-08002B30309D}\\::{7007ACC7-3202-11D1-AAD2-00805FC1270E}", L"", NULL, SW_SHOWNORMAL) > reinterpret_cast<HINSTANCE>(32))
{
return TRUE;
}
else
{
return FALSE;
}
}
/////////////////////////////////////////////////////////////////////////////
// FileTransferPage message handlers
void FileTransferPage::OnAllowsend()
{
int AllowSend = m_cbAllowSend.GetCheck();
if (AllowSend != m_fAllowSend)
m_ChangeMask |= CHANGE_ALLOW_FILE_XFER;
else
m_ChangeMask &= ~(CHANGE_ALLOW_FILE_XFER);
SetModified(m_ChangeMask);
}
void FileTransferPage::OnDisplayrecv()
{
int DisplayRecv = m_cbDisplayRecv.GetCheck();
if (DisplayRecv != m_fDisplayRecv)
m_ChangeMask |= CHANGE_NOTIFY_ON_FILE_XFER;
else
m_ChangeMask &= ~(CHANGE_NOTIFY_ON_FILE_XFER);
SetModified(m_ChangeMask);
}
void FileTransferPage::OnDisplaytray()
{
int DisplayIcon = m_cbDisplayTray.GetCheck();
if (DisplayIcon != m_fDisplayTray)
m_ChangeMask |= CHANGE_DISPLAY_ICON;
else
m_ChangeMask &= ~(CHANGE_DISPLAY_ICON);
SetModified(m_ChangeMask);
}
void FileTransferPage::OnPlaySound()
{
int NewState = m_cbPlaySound.GetCheck();
if (NewState != m_fPlaySound)
m_ChangeMask |= CHANGE_PLAY_SOUND;
else
m_ChangeMask &= ~(CHANGE_PLAY_SOUND);
SetModified(m_ChangeMask);
}
INT_PTR FileTransferPage::OnInitDialog(HWND hwndDlg)
{
PropertyPage::OnInitDialog(hwndDlg);
m_recvdFilesLocation.SetParent(hwndDlg);
m_cbDisplayTray.SetParent(hwndDlg);
m_cbDisplayRecv.SetParent(hwndDlg);
m_cbAllowSend.SetParent(hwndDlg);
m_cbPlaySound.SetParent(hwndDlg);
IRINFO((_T("FileTransferPage::OnInitDialog")));
LoadRegistrySettings();
m_cbAllowSend.SetCheck(m_fAllowSend);
m_cbDisplayRecv.SetCheck(m_fDisplayRecv);
m_cbDisplayTray.SetCheck(m_fDisplayTray);
m_recvdFilesLocation.SetWindowText(m_FinalDestLocation);
m_cbPlaySound.SetCheck(m_fPlaySound);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void FileTransferPage::LoadRegistrySettings(void)
{
HKEY hIrKey = NULL;
HKEY hftKey = NULL;
DWORD iSize = sizeof(DWORD);
DWORD data = 0;
TCHAR lpszReceivedFilesLocation[MAX_PATH];
IRINFO((_T("FileTransferPage::LoadRegistrySettings")));
RegOpenKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\File Transfer"),
0, KEY_READ, &hftKey);
RegOpenKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\Global"),
0, KEY_READ, &hIrKey);
if (!hIrKey && !hftKey)
return;
if (hIrKey) {
if (ERROR_SUCCESS ==
RegQueryValueEx (hIrKey, TEXT("ShowTrayIcon"), NULL, NULL,
(LPBYTE)&data, &iSize))
m_fDisplayTray = data?TRUE:FALSE;
iSize=sizeof(data);
if (ERROR_SUCCESS ==
RegQueryValueEx (hIrKey, TEXT("PlaySound"), NULL, NULL,
(LPBYTE)&data, &iSize))
m_fPlaySound = data?TRUE:FALSE;
}
iSize=sizeof(data);
if (hftKey && ERROR_SUCCESS ==
RegQueryValueEx (hftKey, TEXT("AllowSend"), NULL, NULL,
(LPBYTE)&data, &iSize))
m_fAllowSend = data?TRUE:FALSE;
iSize=sizeof(data);
if (hftKey && ERROR_SUCCESS ==
RegQueryValueEx (hftKey, TEXT("ShowRecvStatus"), NULL, NULL,
(LPBYTE)&data, &iSize))
m_fDisplayRecv = data?TRUE:FALSE;
// If the destionation location is not specified,
// use the default(Desktop subfolder).
// Create it if necessary.
SHGetSpecialFolderPath (hDlg, m_FinalDestLocation,
CSIDL_DESKTOPDIRECTORY, 0);
iSize = MAX_PATH * sizeof (TCHAR);
if (hftKey && ERROR_SUCCESS ==
RegQueryValueEx (hftKey, TEXT("RecvdFilesLocation"), NULL,
NULL, (LPBYTE)lpszReceivedFilesLocation, &iSize))
lstrcpy(m_FinalDestLocation, lpszReceivedFilesLocation);
//
// m_TempDestLocation will be used as the intial
// folder of choice for SHBrowseForFolder call.
//
lstrcpy(m_TempDestLocation, m_FinalDestLocation);
if (hIrKey)
RegCloseKey(hIrKey);
if (hftKey)
RegCloseKey(hftKey);
}
void FileTransferPage::SaveSettingsToRegistry(void)
{
HKEY hIrKey = NULL;
HKEY hftKey = NULL;
DWORD dwDisposition;
IRINFO((_T("FileTransferPage::SaveSettingsToRegistry")));
RegCreateKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\File Transfer"),
0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hftKey, &dwDisposition);
RegCreateKeyEx (HKEY_CURRENT_USER, TEXT("Control Panel\\Infrared\\Global"),
0, TEXT(""), REG_OPTION_NON_VOLATILE, KEY_ALL_ACCESS,
NULL, &hIrKey, &dwDisposition);
if (hIrKey)
{
RegSetValueEx(hIrKey, TEXT("ShowTrayIcon"), 0, REG_BINARY,
(CONST BYTE*)&m_fDisplayTray, 1);
RegSetValueEx(hIrKey, TEXT("PlaySound"), 0, REG_BINARY,
(CONST BYTE*)&m_fPlaySound, 1);
RegCloseKey(hIrKey);
}
if (hftKey)
{
RegSetValueEx(hftKey, TEXT("AllowSend"), 0, REG_BINARY,
(CONST BYTE*)&m_fAllowSend, 1);
RegSetValueEx(hftKey, TEXT("ShowRecvStatus"), 0, REG_BINARY,
(CONST BYTE*)&m_fDisplayRecv, 1);
RegSetValueEx(hftKey, TEXT("RecvdFilesLocation"), 0, REG_SZ,
(CONST BYTE*)&m_FinalDestLocation, sizeof(TCHAR)*lstrlen(m_FinalDestLocation));
RegCloseKey(hftKey);
}
}
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
WPARAM sendWParam;
LPARAM sendLParam;
LPCTSTR lpszFilesLocation;
TCHAR szErrorMsg[MAX_PATH];
TCHAR szErrorTitle[MAX_PATH];
HINSTANCE hInstanceRes;
IRINFO((_T("FileTransferPage::BrowseCallbackProc")));
switch (uMsg)
{
case BFFM_INITIALIZED:
lpszFilesLocation = (LPCTSTR)lpData;
sendWParam = TRUE;
sendLParam = (LPARAM)lpszFilesLocation;
SendMessage(hwnd, BFFM_SETSELECTION, sendWParam, sendLParam);
break;
case BFFM_VALIDATEFAILED:
hInstanceRes = gHInst;
::LoadString (hInstanceRes, IDS_INVALID_MSG, szErrorMsg, MAX_PATH);
::LoadString (hInstanceRes, IDS_INVALID_TITLE, szErrorTitle, MAX_PATH);
::MessageBox (hwnd, szErrorMsg, szErrorTitle, MB_OK | MB_ICONSTOP);
return 1;
default:
break;
}
return 0;
}
void FileTransferPage::OnChoosefilelocation()
{
BROWSEINFO browseInfo;
TCHAR pszSelectedFolder[MAX_PATH];
LPITEMIDLIST lpItemIDList;
LPMALLOC pMalloc;
TCHAR szBrowseTitle [MAX_PATH];
IRINFO((_T("FileTransferPage::OnChoosefileLocation")));
//load the title
::LoadString (hInstance, IDS_FILEFOLDER_PROMPT,
szBrowseTitle, MAX_PATH);
browseInfo.hwndOwner = hDlg;
browseInfo.pidlRoot = NULL; //this will get the desktop folder
browseInfo.pszDisplayName = pszSelectedFolder;
browseInfo.lpszTitle = szBrowseTitle;
browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_RETURNFSANCESTORS |
BIF_VALIDATE | BIF_EDITBOX;
browseInfo.lpfn = BrowseCallback;
browseInfo.lParam = (LPARAM)m_TempDestLocation;
if (NULL != (lpItemIDList = SHBrowseForFolder (&browseInfo)))
{
//the user chose the OK button in the browse dialog box
SHGetPathFromIDList(lpItemIDList, pszSelectedFolder);
lstrcpy (m_TempDestLocation, pszSelectedFolder);
m_recvdFilesLocation.SetWindowText(m_TempDestLocation);
if (lstrcmpi(m_TempDestLocation, m_FinalDestLocation))
m_ChangeMask |= CHANGE_FILE_LOCATION;
else
m_ChangeMask &= ~(CHANGE_FILE_LOCATION);
SetModified(m_ChangeMask);
SHGetMalloc(&pMalloc);
pMalloc->Free (lpItemIDList); //free the item id list as we do not need it any more
pMalloc->Release();
}
}
void FileTransferPage::OnApply(LPPSHNOTIFY lppsn)
{
IRINFO((_T("FileTransferPage::OnApply")));
if (m_ChangeMask)
{
if (m_ChangeMask & CHANGE_FILE_LOCATION)
lstrcpy(m_FinalDestLocation, m_TempDestLocation);
if (m_ChangeMask & CHANGE_ALLOW_FILE_XFER)
m_fAllowSend = m_cbAllowSend.GetCheck();
if (m_ChangeMask & CHANGE_NOTIFY_ON_FILE_XFER)
m_fDisplayRecv = m_cbDisplayRecv.GetCheck();
if (m_ChangeMask & CHANGE_DISPLAY_ICON)
m_fDisplayTray = m_cbDisplayTray.GetCheck();
if (m_ChangeMask & CHANGE_PLAY_SOUND)
m_fPlaySound = m_cbPlaySound.GetCheck();
SaveSettingsToRegistry();
m_ChangeMask = 0;
}
PropertyPage::OnApply(lppsn);
}
BOOL FileTransferPage::OnHelp (LPHELPINFO pHelpInfo)
{
TCHAR szHelpFile[MAX_PATH];
IRINFO((_T("FileTransferPage::OnHelp")));
::LoadString(hInstance, IDS_HELP_FILE, szHelpFile, MAX_PATH);
::WinHelp((HWND)(pHelpInfo->hItemHandle),
(LPCTSTR) szHelpFile,
HELP_WM_HELP,
(ULONG_PTR)(LPTSTR)g_FileTransferHelp);
return FALSE;
}
BOOL FileTransferPage::OnContextMenu (WPARAM wParam, LPARAM lParam)
{
TCHAR szHelpFile[MAX_PATH];
IRINFO((_T("FileTransferPage::OnContextMenu")));
::LoadString(hInstance, IDS_HELP_FILE, szHelpFile, MAX_PATH);
::WinHelp((HWND) wParam,
(LPCTSTR) szHelpFile,
HELP_CONTEXTMENU,
(ULONG_PTR)(LPVOID)g_FileTransferHelp);
return FALSE;
}