|
|
//+-------------------------------------------------------------------------
//
// Microsoft Windows
//
// Copyright (C) Microsoft Corporation, 1998 - 1999
//
// File: imagetransferpage.cpp
//
//--------------------------------------------------------------------------
// ImageTransferPage.cpp : implementation file
//
#include "precomp.hxx"
#include "imagetransferpage.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__; #endif
//context ids for context help
const DWORD g_ImageTransferHelp [] = { IDC_IMAGEXFER_ENABLE_IRCOMM, IDH_IMAGEXFER_ENABLE_IRCOMM, IDC_IMAGEXFER_DESTGROUP, IDH_DISABLEHELP, IDC_IMAGEXFER_DESTDESC, IDH_IMAGEXFER_DESTDESC, IDC_IMAGEXFER_DEST, IDH_IMAGEXFER_DEST, IDC_IMAGEXFER_BROWSE, IDH_IMAGEXFER_BROWSE, IDC_IMAGEXFER_EXPLOREONCOMPLETION, IDH_IMAGEXFER_EXPLOREONCOMPLETION, 0, 0 };
//
// Registry entries that control IrTranP image transfer behavior.
// Everything is under HKEY_CURRENT_USER\\Control Panel\\Infrared\IrTranP
// subkey. Whenever there are changes, they are recorded in the registry
// and the service(IrMon) would pick up the changes by RegNotifyChangeKeyValue
// API.
//
//
//
TCHAR const REG_PATH_IRTRANP_CPL[] = TEXT("Control Panel\\Infrared\\IrTranP");
//
// Entry that controls if IrTranPV1 service should be disabled.
// The type is REG_DWORD. Default is enabled(either the entry
// does not exist or the value is zero).
//
TCHAR const REG_STR_DISABLE_IRTRANPV1[] = TEXT("DisableIrTranPv1");
//
// Entry that controls if IrCOMM should be disabled.
// The type is REG_DWORD. Default is enabled(either the entry
// does not exist or the value is zero).
//
TCHAR const REG_STR_DISABLE_IRCOMM[] = TEXT("DisableIrCOMM");
// Entry that specifies the image file destionation subfolder.
// The type is REG_SZ. The default is Shell special folder CSIDL_MYPICTURES
// (if the entry does not exist).
//
TCHAR const REG_STR_DESTLOCATION[] = TEXT("RecvdFilesLocation");
//
// Entry that controls if IrMon should explore the picture subfolder
// when image transfer(s) are done. The type is REG_DWORD.
// Default is enabled(the entry does not exist of its value is
// non-zero.
//
TCHAR const REG_STR_EXPLORE_ON_COMPLETION[] = TEXT("ExploreOnCompletion");
/////////////////////////////////////////////////////////////////////////////
// ImageTransferPage property page
void ImageTransferPage::OnCommand(UINT ctrlId, HWND hwndCtrl, UINT cNotify) { switch (ctrlId) { case IDC_IMAGEXFER_EXPLOREONCOMPLETION: OnEnableExploring(); break; case IDC_IMAGEXFER_BROWSE: OnBrowse(); break; case IDC_IMAGEXFER_ENABLE_IRCOMM: OnEnableIrCOMM(); break; } }
/////////////////////////////////////////////////////////////////////////////
// ImageTransferPage message handlers
void ImageTransferPage::OnBrowse() { BROWSEINFO browseInfo; TCHAR pszSelectedFolder[MAX_PATH]; TCHAR pszTitle[MAX_PATH]; LPITEMIDLIST lpItemIDList; LPMALLOC pMalloc;
// load the title string
::LoadString(hInstance, IDS_IMAGEFOLDER_PROMPT, pszTitle, sizeof(pszTitle) / sizeof(TCHAR)); browseInfo.hwndOwner = hDlg; browseInfo.pidlRoot = NULL; //this will get the desktop folder
browseInfo.pszDisplayName = pszSelectedFolder; browseInfo.lpszTitle = pszTitle; browseInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_RETURNFSANCESTORS | BIF_VALIDATE | BIF_EDITBOX; browseInfo.lpfn = BrowseCallback; // this will the the initial selection which is from
// either the registry or the default or the last value
// selected.
browseInfo.lParam = (LPARAM)m_TempDestLocation;
if (NULL != (lpItemIDList = SHBrowseForFolder (&browseInfo))) {
HRESULT hr; //the user chose the OK button in the browse dialog box
SHGetPathFromIDList(lpItemIDList, pszSelectedFolder);
StringCbCopy(m_TempDestLocation,sizeof(m_TempDestLocation), pszSelectedFolder);
m_ctrlDestLocation.SetWindowText(m_TempDestLocation); if (lstrcmpi(m_TempDestLocation, m_FinalDestLocation)) m_ChangeMask |= CHANGE_IMAGE_LOCATION; else m_ChangeMask &= ~(CHANGE_IMAGE_LOCATION);
SetModified(m_ChangeMask);
hr=SHGetMalloc(&pMalloc);
if (SUCCEEDED(hr)) {
pMalloc->Free (lpItemIDList); //free the item id list as we do not need it any more
pMalloc->Release(); } }
}
void ImageTransferPage::OnEnableExploring() { int Enabled = m_ctrlEnableExploring.GetCheck(); // Only accepted value is 0 or 1.
assert(Enabled >= 0 && Enabled <= 1);
// if new state is different than our old one
// enable/disable Apply Now accordingly
if (Enabled != m_ExploringEnabled) m_ChangeMask |= CHANGE_EXPLORE_ON_COMPLETION; else m_ChangeMask &= ~(CHANGE_EXPLORE_ON_COMPLETION); SetModified(m_ChangeMask); }
void ImageTransferPage::OnEnableIrCOMM() { int Enabled = m_ctrlEnableIrCOMM.GetCheck(); // Only accepted value is 0 or 1.
assert(Enabled >= 0 && Enabled <= 1);
// enable/disable Apply Now accordingly.
if (Enabled != m_IrCOMMEnabled) m_ChangeMask |= CHANGE_DISABLE_IRCOMM; else m_ChangeMask &= ~(CHANGE_DISABLE_IRCOMM); SetModified(m_ChangeMask); }
void ImageTransferPage::LoadRegistrySettings() { HKEY hKeyIrTranP; DWORD dwType, dwValue, dwSize; LONG Error;
//
// the ctor should have initialized
// m_ExploringEnabled,
// m_IrCOMMEnabled and
// m_FinalDestLocation
//
// It is okay if we can not open the registry key.
// We simply use the defaults.
if (ERROR_SUCCESS == RegOpenKeyEx(HKEY_CURRENT_USER, REG_PATH_IRTRANP_CPL, 0, KEY_READ, &hKeyIrTranP))
{ // read the value "ExploreOnCompletion" and "RecvdFilesLocation"
dwSize = sizeof(dwValue); Error = RegQueryValueEx(hKeyIrTranP, REG_STR_EXPLORE_ON_COMPLETION, 0, &dwType, (LPBYTE)&dwValue, &dwSize ); if (ERROR_SUCCESS == Error && REG_DWORD == dwType) { m_ExploringEnabled = (dwValue) ? 1 : 0; } dwSize = sizeof(m_FinalDestLocation); Error = RegQueryValueEx(hKeyIrTranP, REG_STR_DESTLOCATION, 0, &dwType, (LPBYTE)m_FinalDestLocation, &dwSize); if (ERROR_SUCCESS != Error || REG_SZ != dwType) { // If the destionation location is not specified,
// use the default(My Picture subfolder).
// Create it if necessary.
SHGetSpecialFolderPath(hDlg, m_FinalDestLocation, CSIDL_MYPICTURES, TRUE); } else { // make sure the folder does exist
dwType = GetFileAttributes(m_FinalDestLocation); if (0xFFFFFFFF == dwType || !(dwType & FILE_ATTRIBUTE_DIRECTORY)) { // the destination does not exist or it is not a
// directory, delete it
Error = RegDeleteValue(hKeyIrTranP, REG_STR_DESTLOCATION); if (ERROR_SUCCESS == Error) { // If the destionation location is not specified,
// use the default(My Picture subfolder).
// Create it if necessary.
SHGetSpecialFolderPath(hDlg, m_FinalDestLocation, CSIDL_MYPICTURES, TRUE); } } } //
// m_TempDestLocation will be used as the intial
// folder of choice for SHBrowseForFolder call.
//
StringCbCopy(m_TempDestLocation,sizeof(m_TempDestLocation), m_FinalDestLocation); dwSize = sizeof(dwValue); Error = RegQueryValueEx(hKeyIrTranP, REG_STR_DISABLE_IRCOMM, 0, &dwType, (LPBYTE)&dwValue, &dwSize ); if (ERROR_SUCCESS == Error && REG_DWORD == dwType) { // when the value is non-zero, IrCOMM is disabled.
// Do not assume it is either 1 or 0!
m_IrCOMMEnabled = (dwValue) ? 0 : 1; } else { // default
m_IrCOMMEnabled = 0; } RegCloseKey(hKeyIrTranP); } }
void ImageTransferPage::SaveRegistrySettings() { LONG Error; HKEY hKeyIrTranP; if (m_ChangeMask) { Error = RegCreateKeyEx(HKEY_CURRENT_USER, REG_PATH_IRTRANP_CPL, 0, // reserved
NULL, // class
REG_OPTION_NON_VOLATILE, // options
KEY_ALL_ACCESS,// REGSAM
NULL, // Security
&hKeyIrTranP, //
NULL // disposition
); if (ERROR_SUCCESS == Error) { if (m_ChangeMask & CHANGE_EXPLORE_ON_COMPLETION) { Error = RegSetValueEx(hKeyIrTranP, REG_STR_EXPLORE_ON_COMPLETION, 0, REG_DWORD, (LPBYTE)&m_ExploringEnabled, sizeof(m_ExploringEnabled) ); if (ERROR_SUCCESS != Error) { IdMessageBox(hDlg, IDS_ERROR_REGVALUE_WRITE); } } if (m_ChangeMask & CHANGE_IMAGE_LOCATION) { Error = RegSetValueEx(hKeyIrTranP, REG_STR_DESTLOCATION, 0, REG_SZ, (LPBYTE)m_FinalDestLocation, lstrlen(m_FinalDestLocation) * sizeof(TCHAR) ); if (ERROR_SUCCESS != Error) IdMessageBox(hDlg, IDS_ERROR_REGVALUE_WRITE); } if (m_ChangeMask & CHANGE_DISABLE_IRCOMM) { int IrCOMMDisabled = m_IrCOMMEnabled ^ 1; Error = RegSetValueEx(hKeyIrTranP, REG_STR_DISABLE_IRCOMM, 0, REG_DWORD, (LPBYTE)&IrCOMMDisabled, sizeof(IrCOMMDisabled) ); if (ERROR_SUCCESS != Error) IdMessageBox(hDlg, IDS_ERROR_REGVALUE_WRITE); } RegCloseKey(hKeyIrTranP); } else { IdMessageBox(hDlg, IDS_ERROR_REGKEY_CREATE); } } }
INT_PTR ImageTransferPage::OnInitDialog(HWND hDialog) { PropertyPage::OnInitDialog(hDialog); m_ctrlEnableExploring.SetParent(hDialog); m_ctrlDestLocation.SetParent(hDialog); m_ctrlEnableIrCOMM.SetParent(hDialog); //
// Load initial settings from the system registry
//
LoadRegistrySettings(); m_ctrlEnableExploring.SetCheck(m_ExploringEnabled); m_ctrlEnableIrCOMM.SetCheck(m_IrCOMMEnabled); m_ctrlDestLocation.SetWindowText(m_FinalDestLocation);
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
void ImageTransferPage::OnApply(LPPSHNOTIFY lppsn) { if (m_ChangeMask) { if (m_ChangeMask & CHANGE_IMAGE_LOCATION) StringCbCopy(m_FinalDestLocation,sizeof(m_FinalDestLocation), m_TempDestLocation); if (m_ChangeMask & CHANGE_EXPLORE_ON_COMPLETION) m_ExploringEnabled = m_ctrlEnableExploring.GetCheck(); if (m_ChangeMask & CHANGE_DISABLE_IRCOMM) m_IrCOMMEnabled = m_ctrlEnableIrCOMM.GetCheck(); SaveRegistrySettings(); m_ChangeMask = 0; } PropertyPage::OnApply(lppsn); }
BOOL ImageTransferPage::OnHelp (LPHELPINFO pHelpInfo) { TCHAR szHelpFile[MAX_PATH];
::LoadString(hInstance, IDS_HELP_FILE, szHelpFile, MAX_PATH);
::WinHelp((HWND)(pHelpInfo->hItemHandle), (LPCTSTR) szHelpFile, HELP_WM_HELP, (ULONG_PTR)(LPTSTR)g_ImageTransferHelp);
return FALSE; }
BOOL ImageTransferPage::OnContextMenu (WPARAM wParam, LPARAM lParam) { TCHAR szHelpFile[MAX_PATH];
::LoadString(hInstance, IDS_HELP_FILE, szHelpFile, MAX_PATH);
::WinHelp((HWND) wParam, (LPCTSTR) szHelpFile, HELP_CONTEXTMENU, (ULONG_PTR)(LPVOID)g_ImageTransferHelp);
return FALSE; }
|