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.
480 lines
13 KiB
480 lines
13 KiB
|
|
#include "faxcfgwz.h"
|
|
#include <shlwapi.h>
|
|
|
|
|
|
PPRINTER_NAMES g_pPrinterNames = NULL;
|
|
DWORD g_dwNumPrinters = 0;
|
|
|
|
BOOL
|
|
DirectoryExists(
|
|
LPTSTR pDirectoryName
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Check the existancy of given folder name
|
|
|
|
Arguments:
|
|
|
|
pDirectoryName - point to folder name
|
|
|
|
Return Value:
|
|
|
|
if the folder exists, return TRUE; else, return FALSE.
|
|
|
|
--*/
|
|
|
|
{
|
|
DWORD dwFileAttributes;
|
|
|
|
if(!pDirectoryName || lstrlen(pDirectoryName) == 0)
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
dwFileAttributes = GetFileAttributes(pDirectoryName);
|
|
|
|
if ( dwFileAttributes != 0xffffffff &&
|
|
dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
|
|
{
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
VOID
|
|
DoInitRouteOptions(
|
|
HWND hDlg
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Initializes the "Route" page with information from system
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "Route" page
|
|
|
|
Return Value:
|
|
|
|
NONE
|
|
|
|
--*/
|
|
|
|
{
|
|
HWND hControl;
|
|
DWORD CurrentRM;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("DoInitRouteOptions()"));
|
|
|
|
hControl = GetDlgItem( hDlg, IDC_RECV_PRINT_TO );
|
|
|
|
SetLTRComboBox(hDlg, IDC_RECV_PRINT_TO);
|
|
|
|
//
|
|
// Initialize the list of destination printers
|
|
//
|
|
if (g_pPrinterNames)
|
|
{
|
|
ReleasePrinterNames (g_pPrinterNames, g_dwNumPrinters);
|
|
g_pPrinterNames = NULL;
|
|
}
|
|
g_pPrinterNames = CollectPrinterNames (&g_dwNumPrinters, TRUE);
|
|
if (!g_pPrinterNames)
|
|
{
|
|
if (ERROR_PRINTER_NOT_FOUND == GetLastError ())
|
|
{
|
|
//
|
|
// No printers
|
|
//
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Real error
|
|
//
|
|
}
|
|
SendMessage(hControl, CB_SETCURSEL, -1, 0);
|
|
SetWindowText(hControl, g_wizData.pRouteInfo[RM_PRINT].tszCurSel);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// Success - fill in the combo-box
|
|
//
|
|
DWORD dw;
|
|
LPCWSTR lpcwstrMatchingText;
|
|
|
|
for (dw = 0; dw < g_dwNumPrinters; dw++)
|
|
{
|
|
SendMessage(hControl, CB_ADDSTRING, 0, (LPARAM) g_pPrinterNames[dw].lpcwstrDisplayName);
|
|
}
|
|
//
|
|
// Now find out if we match the data the server has
|
|
//
|
|
if (lstrlen(g_wizData.pRouteInfo[RM_PRINT].tszCurSel))
|
|
{
|
|
//
|
|
// Server has some name for printer
|
|
//
|
|
lpcwstrMatchingText = FindPrinterNameFromPath (g_pPrinterNames, g_dwNumPrinters, g_wizData.pRouteInfo[RM_PRINT].tszCurSel);
|
|
if (!lpcwstrMatchingText)
|
|
{
|
|
//
|
|
// No match, just fill in the text we got from the server
|
|
//
|
|
SendMessage(hControl, CB_SETCURSEL, -1, 0);
|
|
SetWindowText(hControl, g_wizData.pRouteInfo[RM_PRINT].tszCurSel);
|
|
}
|
|
else
|
|
{
|
|
SendMessage(hControl, CB_SELECTSTRING, -1, (LPARAM) lpcwstrMatchingText);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// No server configuation - display no selection
|
|
//
|
|
}
|
|
}
|
|
//
|
|
// Display routing methods info in the dialog.
|
|
//
|
|
for (CurrentRM = 0; CurrentRM < RM_COUNT; CurrentRM++)
|
|
{
|
|
BOOL bEnabled;
|
|
LPTSTR tszCurSel;
|
|
|
|
//
|
|
// if we don't have this kind of method, go to the next one
|
|
//
|
|
tszCurSel = g_wizData.pRouteInfo[CurrentRM].tszCurSel;
|
|
bEnabled = g_wizData.pRouteInfo[CurrentRM].bEnabled;
|
|
|
|
switch (CurrentRM)
|
|
{
|
|
case RM_FOLDER:
|
|
|
|
CheckDlgButton( hDlg, IDC_RECV_SAVE, bEnabled ? BST_CHECKED : BST_UNCHECKED );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_RECV_DEST_FOLDER ), bEnabled );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_RECV_BROWSE_DIR ), bEnabled );
|
|
if (*tszCurSel)
|
|
{
|
|
SetDlgItemText( hDlg, IDC_RECV_DEST_FOLDER, tszCurSel );
|
|
}
|
|
|
|
break;
|
|
|
|
case RM_PRINT:
|
|
CheckDlgButton( hDlg, IDC_RECV_PRINT, bEnabled ? BST_CHECKED : BST_UNCHECKED );
|
|
EnableWindow(GetDlgItem(hDlg, IDC_RECV_PRINT_TO), bEnabled);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
BOOL
|
|
DoSaveRouteOptions(
|
|
HWND hDlg
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Save the information on the "Route" page to system
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "Route" page
|
|
|
|
Return Value:
|
|
|
|
TRUE if success, else FALSE
|
|
|
|
--*/
|
|
{
|
|
HWND hControl;
|
|
DWORD i;
|
|
ROUTINFO SetInfo[RM_COUNT] = {0};
|
|
LPTSTR lpCurSel;
|
|
BOOL* pbEnabled;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("DoSaveRouteOptions()"));
|
|
|
|
//
|
|
// Check the validity first in the loop,
|
|
// then save the routing info
|
|
//
|
|
for (i = 0; i < RM_COUNT; i++)
|
|
{
|
|
lpCurSel = SetInfo[i].tszCurSel;
|
|
Assert(lpCurSel);
|
|
pbEnabled = &(SetInfo[i].bEnabled);
|
|
Assert(pbEnabled);
|
|
*pbEnabled = 0;
|
|
|
|
switch (i)
|
|
{
|
|
case RM_PRINT:
|
|
|
|
*pbEnabled = (IsDlgButtonChecked( hDlg, IDC_RECV_PRINT ) == BST_CHECKED);
|
|
if(FALSE == *pbEnabled)
|
|
{
|
|
break;
|
|
}
|
|
hControl = GetDlgItem(hDlg, IDC_RECV_PRINT_TO);
|
|
lpCurSel[0] = TEXT('\0');
|
|
//
|
|
// Just read-in the selected printer display name
|
|
//
|
|
GetDlgItemText (hDlg, IDC_RECV_PRINT_TO, lpCurSel, MAX_PATH);
|
|
//
|
|
// we will check the validity only when this routing method is enabled
|
|
// but we will save the select change anyway.
|
|
//
|
|
if (*pbEnabled)
|
|
{
|
|
if (lpCurSel[0] == 0)
|
|
{
|
|
DisplayMessageDialog( hDlg, 0, 0, IDS_ERR_SELECT_PRINTER );
|
|
SetFocus(hControl);
|
|
SetActiveWindow(hControl);
|
|
goto error;
|
|
}
|
|
}
|
|
break;
|
|
|
|
case RM_FOLDER:
|
|
{
|
|
BOOL bValid = TRUE;
|
|
HCURSOR hOldCursor;
|
|
|
|
hControl = GetDlgItem(hDlg, IDC_RECV_DEST_FOLDER);
|
|
|
|
*pbEnabled = (IsDlgButtonChecked( hDlg, IDC_RECV_SAVE ) == BST_CHECKED);
|
|
if(!*pbEnabled)
|
|
{
|
|
break;
|
|
}
|
|
|
|
GetWindowText( hControl, lpCurSel, MAX_PATH - 1 );
|
|
|
|
//
|
|
// Validate the directory
|
|
//
|
|
hOldCursor = SetCursor (LoadCursor(NULL, IDC_WAIT));
|
|
|
|
if(!FaxCheckValidFaxFolder(g_hFaxSvcHandle, lpCurSel))
|
|
{
|
|
DWORD dwRes = GetLastError();
|
|
DebugPrintEx(DEBUG_ERR, TEXT("FaxCheckValidFaxFolder failed (ec: %ld)"), dwRes);
|
|
|
|
//
|
|
// Try to adjust folder
|
|
//
|
|
dwRes = AskUserAndAdjustFaxFolder(hDlg, NULL, lpCurSel, dwRes);
|
|
if(ERROR_SUCCESS != dwRes)
|
|
{
|
|
bValid = FALSE;
|
|
|
|
if(ERROR_BAD_PATHNAME != dwRes)
|
|
{
|
|
//
|
|
// The error message has not been shown by AskUserAndAdjustFaxFolder
|
|
//
|
|
DisplayMessageDialog( hDlg, 0, 0, IDS_ERR_ARCHIVE_DIR );
|
|
}
|
|
}
|
|
}
|
|
|
|
SetCursor (hOldCursor);
|
|
if(!bValid)
|
|
{
|
|
// go to the "Browse" button
|
|
hControl = GetDlgItem(hDlg, IDC_RECV_BROWSE_DIR);
|
|
SetFocus(hControl);
|
|
SetActiveWindow(hControl);
|
|
goto error;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
//
|
|
// now save the device and routing info into shared data.
|
|
//
|
|
CopyMemory((LPVOID)(g_wizData.pRouteInfo), (LPVOID)SetInfo, RM_COUNT * sizeof(ROUTINFO));
|
|
|
|
return TRUE;
|
|
|
|
error:
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
RecvRouteDlgProc (
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Procedure for handling the "Route" page
|
|
|
|
Arguments:
|
|
|
|
hDlg - Identifies the property sheet page
|
|
uMsg - Specifies the message
|
|
wParam - Specifies additional message-specific information
|
|
lParam - Specifies additional message-specific information
|
|
|
|
Return Value:
|
|
|
|
Depends on the value of message parameter
|
|
|
|
--*/
|
|
|
|
#define EnableRouteWindow( id, idResource ) \
|
|
EnableWindow( GetDlgItem(hDlg, idResource), IsDlgButtonChecked(hDlg, id) )
|
|
|
|
{
|
|
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG :
|
|
{
|
|
//
|
|
// Maximum length for various text fields in the dialog
|
|
//
|
|
static INT textLimits[] =
|
|
{
|
|
IDC_RECV_DEST_FOLDER, MAX_PATH,
|
|
0,
|
|
};
|
|
LimitTextFields(hDlg, textLimits);
|
|
DoInitRouteOptions(hDlg);
|
|
|
|
SetLTREditDirection(hDlg, IDC_RECV_DEST_FOLDER);
|
|
SHAutoComplete (GetDlgItem(hDlg, IDC_RECV_DEST_FOLDER), SHACF_FILESYSTEM);
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch (GET_WM_COMMAND_CMD(wParam, lParam))
|
|
{
|
|
case BN_CLICKED:
|
|
|
|
switch(GET_WM_COMMAND_ID(wParam, lParam))
|
|
{
|
|
case IDC_RECV_PRINT:
|
|
EnableRouteWindow(IDC_RECV_PRINT, IDC_RECV_PRINT_TO);
|
|
break;
|
|
|
|
case IDC_RECV_SAVE:
|
|
EnableRouteWindow(IDC_RECV_SAVE, IDC_RECV_DEST_FOLDER);
|
|
EnableRouteWindow(IDC_RECV_SAVE, IDC_RECV_BROWSE_DIR);
|
|
break;
|
|
|
|
case IDC_RECV_BROWSE_DIR:
|
|
{
|
|
TCHAR szTitle[MAX_PATH] = {0};
|
|
|
|
if( !LoadString( g_hResource, IDS_RECV_BROWSE_DIR, szTitle, MAX_PATH ) )
|
|
{
|
|
DEBUG_FUNCTION_NAME(TEXT("RecvRouteDlgProc()"));
|
|
DebugPrintEx(DEBUG_ERR,
|
|
TEXT("LoadString failed: string ID=%d, error=%d"),
|
|
IDS_RECV_BROWSE_DIR,
|
|
GetLastError());
|
|
}
|
|
|
|
if( !BrowseForDirectory(hDlg, IDC_RECV_DEST_FOLDER, szTitle) )
|
|
{
|
|
return FALSE;
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_NOTIFY :
|
|
{
|
|
LPNMHDR lpnm = (LPNMHDR) lParam;
|
|
|
|
switch (lpnm->code)
|
|
{
|
|
case PSN_SETACTIVE : //Enable the Back and Finish button
|
|
|
|
//
|
|
// Check the "Next" button status
|
|
//
|
|
PropSheet_SetWizButtons(GetParent(hDlg), PSWIZB_BACK | PSWIZB_NEXT);
|
|
break;
|
|
|
|
case PSN_WIZBACK :
|
|
{
|
|
//
|
|
// Handle a Back button click here
|
|
//
|
|
if(RemoveLastPage(hDlg))
|
|
{
|
|
return TRUE;
|
|
}
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
case PSN_WIZNEXT :
|
|
//Handle a Next button click, if necessary
|
|
|
|
if(!DoSaveRouteOptions(hDlg))
|
|
{
|
|
//
|
|
// not finished with route configuration
|
|
//
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
return TRUE;
|
|
}
|
|
|
|
SetLastPage(IDD_WIZARD_RECV_ROUTE);
|
|
break;
|
|
|
|
case PSN_RESET :
|
|
{
|
|
// Handle a Cancel button click, if necessary
|
|
break;
|
|
}
|
|
|
|
default :
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|