1276 lines
28 KiB
C
1276 lines
28 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1996 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
recvopts.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
Functions for handling events in the "Receive Options" tab of
|
|||
|
the fax server configuration property sheet
|
|||
|
|
|||
|
Environment:
|
|||
|
|
|||
|
Fax configuration applet
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
03/13/96 -davidx-
|
|||
|
Created it.
|
|||
|
|
|||
|
mm/dd/yy -author-
|
|||
|
description
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "faxcpl.h"
|
|||
|
|
|||
|
//
|
|||
|
// Information about the fax device list view on "Receive Options" page
|
|||
|
//
|
|||
|
|
|||
|
static COLUMNINFO faxDeviceListViewColumnInfo[] = {
|
|||
|
|
|||
|
{ COLUMN_DEVICE_NAME, 2 },
|
|||
|
{ COLUMN_CSID, 1 },
|
|||
|
{ 0, 0 },
|
|||
|
};
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
EnumMapiProfiles(
|
|||
|
HWND hwnd
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Put the mapi profiles in the combo box
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hwnd - window handle to mapi profiles combo box
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
{
|
|||
|
LPTSTR MapiProfiles;
|
|||
|
|
|||
|
MapiProfiles = gConfigData->pMapiProfiles;
|
|||
|
|
|||
|
while (MapiProfiles && *MapiProfiles) {
|
|||
|
SendMessage(
|
|||
|
hwnd,
|
|||
|
CB_ADDSTRING,
|
|||
|
0,
|
|||
|
(LPARAM) MapiProfiles
|
|||
|
);
|
|||
|
MapiProfiles += _tcslen(MapiProfiles) + 1;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DoInitRecvOptions(
|
|||
|
HWND hDlg
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Perform one-time initialization of "Receive Options" property page
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
HWND hwnd;
|
|||
|
TCHAR buffer[MAX_STRING_LEN];
|
|||
|
|
|||
|
//
|
|||
|
// Maximum length for various text fields in the dialog
|
|||
|
//
|
|||
|
|
|||
|
static INT textLimits[] = {
|
|||
|
|
|||
|
IDC_CSID, 21,
|
|||
|
IDC_DEST_DIRPATH, MAX_ARCHIVE_DIR,
|
|||
|
IDC_DEST_RINGS, 3,
|
|||
|
0,
|
|||
|
};
|
|||
|
|
|||
|
GetMapiProfiles();
|
|||
|
|
|||
|
LimitTextFields(hDlg, textLimits);
|
|||
|
|
|||
|
if (gConfigData->pMapiProfiles && (hwnd = GetDlgItem(hDlg, IDC_DEST_PROFILENAME))){
|
|||
|
|
|||
|
EnumMapiProfiles(hwnd);
|
|||
|
|
|||
|
LoadString(ghInstance, IDS_DEFAULT_PROFILE, buffer, MAX_STRING_LEN);
|
|||
|
|
|||
|
SendMessage(hwnd, CB_INSERTSTRING, 0, (LPARAM) buffer);
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Initialize the list of destination printers
|
|||
|
//
|
|||
|
|
|||
|
if (hwnd = GetDlgItem(hDlg, IDC_DEST_PRINTERLIST)) {
|
|||
|
|
|||
|
PPRINTER_INFO_2 pPrinterInfo2, pSaved;
|
|||
|
DWORD cPrinters, dwFlags;
|
|||
|
|
|||
|
dwFlags = gConfigData->pServerName ?
|
|||
|
PRINTER_ENUM_NAME :
|
|||
|
(PRINTER_ENUM_LOCAL|PRINTER_ENUM_CONNECTIONS);
|
|||
|
|
|||
|
pPrinterInfo2 = MyEnumPrinters(gConfigData->pServerName, 2, &cPrinters, dwFlags);
|
|||
|
|
|||
|
if (pSaved = pPrinterInfo2) {
|
|||
|
|
|||
|
//
|
|||
|
// Filtering out fax printers from the list
|
|||
|
//
|
|||
|
|
|||
|
for ( ; cPrinters--; pPrinterInfo2++) {
|
|||
|
|
|||
|
if (_tcsicmp(pPrinterInfo2->pDriverName, FAX_DRIVER_NAME) != EQUAL_STRING)
|
|||
|
SendMessage(hwnd, CB_ADDSTRING, 0, (LPARAM) pPrinterInfo2->pPrinterName);
|
|||
|
}
|
|||
|
|
|||
|
MemFree(pSaved);
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// The first choice is always the system default printer
|
|||
|
//
|
|||
|
|
|||
|
LoadString(ghInstance, IDS_DEFAULT_PRINTER, buffer, MAX_STRING_LEN);
|
|||
|
SendMessage(hwnd, CB_INSERTSTRING, 0, (LPARAM) buffer);
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Connect to the fax service and retrieve the list of fax devices
|
|||
|
//
|
|||
|
|
|||
|
GetFaxDeviceAndConfigInfo();
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Data structure and constants used for comparing two fax devices
|
|||
|
//
|
|||
|
|
|||
|
typedef struct {
|
|||
|
|
|||
|
PCONFIG_PORT_INFO_2 pDevInfo;
|
|||
|
DWORD match;
|
|||
|
|
|||
|
} MATCHINFO, *PMATCHINFO;
|
|||
|
|
|||
|
#define MATCH_DEST_PRINTER 0x0001
|
|||
|
#define MATCH_DEST_DIR 0x0002
|
|||
|
#define MATCH_DEST_EMAIL 0x0004
|
|||
|
#define MATCH_DEST_MAILBOX 0x0008
|
|||
|
#define MATCH_DEST_PRINTERNAME 0x0010
|
|||
|
#define MATCH_DEST_DIRPATH 0x0020
|
|||
|
#define MATCH_DEST_PROFILENAME 0x0040
|
|||
|
#define MATCH_DEST_CSID 0x0080
|
|||
|
#define MATCH_DEST_RINGS 0x0100
|
|||
|
#define MATCH_ALL 0x0FFF
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
MatchFaxDevInfo(
|
|||
|
PMATCHINFO pMatchInfo,
|
|||
|
PCONFIG_PORT_INFO_2 pDevInfo
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Compare a fax device with another one and
|
|||
|
figure out what attributes they have in common
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
pMatchInfo - Points to a MATCHINFO structure
|
|||
|
pDevInfo - Specifies the fax device to match
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#define MatchRoutingOption(matchFlag, routingFlag) { \
|
|||
|
if ((pMatchInfo->match & (matchFlag)) && \
|
|||
|
(pRefInfo->Mask & (routingFlag)) != (pDevInfo->Mask & (routingFlag))) \
|
|||
|
{ \
|
|||
|
pMatchInfo->match &= ~(matchFlag); \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define MatchDWORDField(matchFlag, FieldName) { \
|
|||
|
if ((pMatchInfo->match & (matchFlag)) && \
|
|||
|
(pRefInfo->FieldName != pDevInfo->FieldName)) \
|
|||
|
{ \
|
|||
|
pMatchInfo->match &= ~(matchFlag); \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
#define MatchTextField(matchFlag, pFieldName) { \
|
|||
|
if ((pMatchInfo->match & (matchFlag)) && \
|
|||
|
(! pRefInfo->pFieldName || \
|
|||
|
! pDevInfo->pFieldName || \
|
|||
|
_tcsicmp(pRefInfo->pFieldName, pDevInfo->pFieldName) != EQUAL_STRING)) \
|
|||
|
{ \
|
|||
|
pMatchInfo->match &= ~(matchFlag); \
|
|||
|
} \
|
|||
|
}
|
|||
|
|
|||
|
{
|
|||
|
PCONFIG_PORT_INFO_2 pRefInfo;
|
|||
|
|
|||
|
//
|
|||
|
// Remember the first fax device as the reference
|
|||
|
//
|
|||
|
|
|||
|
if ((pRefInfo = pMatchInfo->pDevInfo) == NULL) {
|
|||
|
|
|||
|
pMatchInfo->pDevInfo = pDevInfo;
|
|||
|
pMatchInfo->match = MATCH_ALL;
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Match each attribute in turn
|
|||
|
//
|
|||
|
|
|||
|
MatchRoutingOption(MATCH_DEST_PRINTER, LR_PRINT);
|
|||
|
MatchRoutingOption(MATCH_DEST_EMAIL, LR_EMAIL);
|
|||
|
MatchRoutingOption(MATCH_DEST_DIR, LR_STORE);
|
|||
|
MatchRoutingOption(MATCH_DEST_MAILBOX, LR_INBOX);
|
|||
|
|
|||
|
MatchTextField(MATCH_DEST_PRINTERNAME, PrinterName);
|
|||
|
MatchTextField(MATCH_DEST_DIRPATH, DirStore);
|
|||
|
MatchTextField(MATCH_DEST_PROFILENAME, ProfileName);
|
|||
|
MatchTextField(MATCH_DEST_CSID, CSID);
|
|||
|
|
|||
|
MatchDWORDField(MATCH_DEST_RINGS, Rings);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DoChangeRecvDeviceSel(
|
|||
|
HWND hDlg,
|
|||
|
HWND hwndLV
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Process selection change events in the fax device list
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
hwndLV - Handle to the fax device list
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#define SetMatchedCheckBox(matchFlag, routingFlag, itemId) \
|
|||
|
CheckDlgButton(hDlg, itemId, \
|
|||
|
(match & (matchFlag)) ? \
|
|||
|
((pDevInfo->Mask & (routingFlag)) ? BST_CHECKED : BST_UNCHECKED) : \
|
|||
|
BST_INDETERMINATE)
|
|||
|
|
|||
|
#define SetMatchedTextField(matchFlag, itemId, pFieldName) \
|
|||
|
SetDlgItemText(hDlg, itemId, \
|
|||
|
((match & (matchFlag)) && pDevInfo->pFieldName) ? \
|
|||
|
pDevInfo->pFieldName : TEXT(""))
|
|||
|
|
|||
|
#define SetMatchedDWORDField(matchFlag, itemId, pFieldName) \
|
|||
|
SetDlgItemInt(hDlg, itemId, \
|
|||
|
(match & matchFlag) ? pDevInfo->pFieldName : 0, FALSE)
|
|||
|
|
|||
|
{
|
|||
|
MATCHINFO matchInfo = { NULL, 0 };
|
|||
|
INT index = -1;
|
|||
|
DWORD match;
|
|||
|
HWND hwndList;
|
|||
|
PCONFIG_PORT_INFO_2 pDevInfo;
|
|||
|
|
|||
|
//
|
|||
|
// Find the common attributes shared by selected devices
|
|||
|
//
|
|||
|
|
|||
|
while ((index = ListView_GetNextItem(hwndLV, index, LVNI_ALL|LVNI_SELECTED)) != -1) {
|
|||
|
|
|||
|
Assert(index < gConfigData->cDevices);
|
|||
|
MatchFaxDevInfo(&matchInfo, gConfigData->pDevInfo + index);
|
|||
|
}
|
|||
|
|
|||
|
if ((pDevInfo = matchInfo.pDevInfo) == NULL)
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Display the shared attributes at the bottom of the page
|
|||
|
//
|
|||
|
|
|||
|
match = matchInfo.match;
|
|||
|
|
|||
|
SetMatchedCheckBox(MATCH_DEST_PRINTER, LR_PRINT, IDC_DEST_PRINTER);
|
|||
|
SetMatchedCheckBox(MATCH_DEST_EMAIL, LR_EMAIL, IDC_DEST_EMAIL);
|
|||
|
SetMatchedCheckBox(MATCH_DEST_DIR, LR_STORE, IDC_DEST_DIR);
|
|||
|
SetMatchedCheckBox(MATCH_DEST_MAILBOX, LR_INBOX, IDC_DEST_MAILBOX);
|
|||
|
|
|||
|
if (hwndList = GetDlgItem(hDlg, IDC_DEST_PRINTERLIST)) {
|
|||
|
|
|||
|
if ((match & MATCH_DEST_PRINTERNAME) && pDevInfo->PrinterName) {
|
|||
|
|
|||
|
if (IsEmptyString(pDevInfo->PrinterName))
|
|||
|
SendMessage(hwndList, CB_SETCURSEL, 0, 0);
|
|||
|
else if (SendMessage(hwndList,
|
|||
|
CB_SELECTSTRING,
|
|||
|
(WPARAM) -1,
|
|||
|
(LPARAM) pDevInfo->PrinterName) == CB_ERR)
|
|||
|
{
|
|||
|
DisplayMessageDialog(hDlg,
|
|||
|
0,
|
|||
|
IDS_WARNING_DLGTITLE,
|
|||
|
IDS_NONEXISTENT_PRINTER,
|
|||
|
pDevInfo->PrinterName);
|
|||
|
}
|
|||
|
|
|||
|
} else
|
|||
|
SendMessage(hwndList, CB_SETCURSEL, (WPARAM) -1, 0);
|
|||
|
}
|
|||
|
|
|||
|
if (hwndList = GetDlgItem(hDlg, IDC_DEST_PROFILENAME)) {
|
|||
|
|
|||
|
if ((match & MATCH_DEST_PROFILENAME) && pDevInfo->ProfileName) {
|
|||
|
|
|||
|
if (IsEmptyString(pDevInfo->ProfileName) ||
|
|||
|
! SendMessage(hwndList,
|
|||
|
CB_SELECTSTRING,
|
|||
|
(WPARAM) -1,
|
|||
|
(LPARAM) pDevInfo->ProfileName))
|
|||
|
{
|
|||
|
SendMessage(hwndList, CB_SETCURSEL, 0, 0);
|
|||
|
}
|
|||
|
|
|||
|
} else
|
|||
|
SendMessage(hwndList, CB_SETCURSEL, (WPARAM) -1, 0);
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// This is a real kluge. But we have no other way of telling whether
|
|||
|
// EN_CHANGE message is caused by user action or was caused by
|
|||
|
// us calling SetDlgItemText.
|
|||
|
//
|
|||
|
|
|||
|
insideSetDlgItemText = TRUE;
|
|||
|
|
|||
|
SetMatchedTextField(MATCH_DEST_DIRPATH, IDC_DEST_DIRPATH, DirStore);
|
|||
|
SetMatchedTextField(MATCH_DEST_CSID, IDC_CSID, CSID);
|
|||
|
|
|||
|
SetMatchedDWORDField(MATCH_DEST_RINGS, IDC_DEST_RINGS, Rings);
|
|||
|
|
|||
|
insideSetDlgItemText = FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
ValidateReceiveOptions(
|
|||
|
HWND hDlg,
|
|||
|
INT index
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Check the receive options for the specified fax device
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
index - Specifies the index of the interested fax device
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
TRUE if successful, FALSE if there is an error
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
PCONFIG_PORT_INFO_2 pDevInfo;
|
|||
|
INT errorId = 0;
|
|||
|
|
|||
|
//
|
|||
|
// Sanity check
|
|||
|
//
|
|||
|
|
|||
|
if (index >= gConfigData->cDevices || gConfigData->pDevInfo == NULL) {
|
|||
|
|
|||
|
Assert(FALSE);
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Check if the specified device is not enabled for receiving fax
|
|||
|
//
|
|||
|
|
|||
|
pDevInfo = gConfigData->pDevInfo + index;
|
|||
|
|
|||
|
if (! (pDevInfo->Flags & FPF_RECEIVE))
|
|||
|
return TRUE;
|
|||
|
|
|||
|
if ((pDevInfo->Mask & (LR_PRINT|LR_STORE|LR_EMAIL|LR_INBOX)) == 0) {
|
|||
|
|
|||
|
//
|
|||
|
// At least one inbound routing option must be selected
|
|||
|
//
|
|||
|
|
|||
|
errorId = IDS_NO_INBOUND_ROUTING;
|
|||
|
|
|||
|
} else if ((pDevInfo->Mask & LR_STORE) &&
|
|||
|
(pDevInfo->DirStore == NULL || *(pDevInfo->DirStore) == NUL))
|
|||
|
{
|
|||
|
//
|
|||
|
// If the "Store In Directory" option is selected,
|
|||
|
// a directory path must be specified.
|
|||
|
//
|
|||
|
|
|||
|
errorId = IDS_MISSING_INBOUND_DIR;
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Display an error message the receive options are invalid
|
|||
|
//
|
|||
|
|
|||
|
if (errorId != 0) {
|
|||
|
|
|||
|
DisplayMessageDialog(hDlg,
|
|||
|
0,
|
|||
|
IDS_INVALID_INBOUND_OPTIONS,
|
|||
|
errorId,
|
|||
|
pDevInfo->DeviceName);
|
|||
|
}
|
|||
|
|
|||
|
return (errorId == 0);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
ValidateReceiveOptionsForSelectedDevices(
|
|||
|
HWND hDlg,
|
|||
|
HWND hwndLV
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Check if the receive options for the selected fax devices are valid
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
hwndLV - Handle to the fax device list
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
TRUE if successful, FALSE otherwise
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
INT index = -1;
|
|||
|
|
|||
|
//
|
|||
|
// Check the receive options for each selected device
|
|||
|
//
|
|||
|
|
|||
|
while ((index = ListView_GetNextItem(hwndLV, index, LVNI_ALL|LVNI_SELECTED)) != -1) {
|
|||
|
|
|||
|
if (! ValidateReceiveOptions(hDlg, index))
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
ToggleFaxDeviceForReceive(
|
|||
|
HWND hwndLV,
|
|||
|
INT index
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Toggle a fax device for receiving
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hwndLV - Handle to the fax device list view
|
|||
|
index - Specifies the fax device to be toggled
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
Assert(index < gConfigData->cDevices);
|
|||
|
|
|||
|
if (IsListViewItemChecked(hwndLV, index)) {
|
|||
|
|
|||
|
UncheckListViewItem(hwndLV, index);
|
|||
|
gConfigData->pDevInfo[index].Flags &= ~FPF_RECEIVE;
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
CheckListViewItem(hwndLV, index);
|
|||
|
gConfigData->pDevInfo[index].Flags |= FPF_RECEIVE;
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
UpdateReceiveOptionControls(
|
|||
|
HWND hDlg
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Enable/disable receive option controls
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
HWND hwndLV;
|
|||
|
|
|||
|
//
|
|||
|
// Check if something is selected in the fax device list view
|
|||
|
//
|
|||
|
|
|||
|
if ((hwndLV = GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)) == NULL ||
|
|||
|
ListView_GetNextItem(hwndLV, -1, LVNI_ALL|LVNI_SELECTED) == -1)
|
|||
|
{
|
|||
|
insideSetDlgItemText = TRUE;
|
|||
|
SetDlgItemText(hDlg, IDC_DEST_DIRPATH, TEXT(""));
|
|||
|
SetDlgItemText(hDlg, IDC_CSID, TEXT(""));
|
|||
|
SetDlgItemInt(hDlg, IDC_DEST_RINGS, 0, FALSE);
|
|||
|
insideSetDlgItemText = FALSE;
|
|||
|
|
|||
|
SendDlgItemMessage(hDlg, IDC_DEST_PRINTERLIST, CB_SETCURSEL, (WPARAM) -1, 0);
|
|||
|
SendDlgItemMessage(hDlg, IDC_DEST_PROFILENAME, CB_SETCURSEL, (WPARAM) -1, 0);
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_RINGS), FALSE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_CSID), FALSE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_PRINTER), FALSE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_EMAIL), FALSE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_DIR), FALSE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_MAILBOX), FALSE);
|
|||
|
|
|||
|
CheckDlgButton(hDlg, IDC_DEST_PRINTER, BST_UNCHECKED);
|
|||
|
CheckDlgButton(hDlg, IDC_DEST_EMAIL, BST_UNCHECKED);
|
|||
|
CheckDlgButton(hDlg, IDC_DEST_DIR, BST_UNCHECKED);
|
|||
|
CheckDlgButton(hDlg, IDC_DEST_MAILBOX, BST_UNCHECKED);
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_CSID), TRUE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_PRINTER), TRUE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_DIR), TRUE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_EMAIL), TRUE);
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_MAILBOX), gConfigData->pMapiProfiles != NULL);
|
|||
|
|
|||
|
if (!GetDlgItemInt(hDlg, IDC_DEST_RINGS, NULL, FALSE)) {
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_RINGS), FALSE);
|
|||
|
} else {
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_RINGS), TRUE);
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_PRINTERLIST),
|
|||
|
IsDlgButtonChecked(hDlg, IDC_DEST_PRINTER) == BST_CHECKED);
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_DIRPATH),
|
|||
|
IsDlgButtonChecked(hDlg, IDC_DEST_DIR) == BST_CHECKED);
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_BROWSE_DIR),
|
|||
|
IsDlgButtonChecked(hDlg, IDC_DEST_DIR) == BST_CHECKED &&
|
|||
|
gConfigData->pServerName == NULL);
|
|||
|
|
|||
|
if (gConfigData->pMapiProfiles && IsDlgButtonChecked(hDlg, IDC_DEST_MAILBOX) == BST_CHECKED) {
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDCSTATIC_PROFILE_NAME), TRUE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_PROFILENAME), TRUE);
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
if (gConfigData->pMapiProfiles == NULL)
|
|||
|
CheckDlgButton(hDlg, IDC_DEST_MAILBOX, BST_UNCHECKED);
|
|||
|
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDCSTATIC_PROFILE_NAME), FALSE);
|
|||
|
EnableWindow(GetDlgItem(hDlg, IDC_DEST_PROFILENAME), FALSE);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
HandleRecvListViewMessage(
|
|||
|
HWND hDlg,
|
|||
|
LPNMHDR pNMHdr
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Handle notification events from the fax device list
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
pNMHdr - Points to an NMHDR structure
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
FALSE if there is no device assigned to the current printer
|
|||
|
TRUE otherwise
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
LV_HITTESTINFO hitTestInfo;
|
|||
|
DWORD msgPos;
|
|||
|
INT index;
|
|||
|
NM_LISTVIEW *pnmlv;
|
|||
|
HWND hwndLV = pNMHdr->hwndFrom;
|
|||
|
|
|||
|
switch (pNMHdr->code) {
|
|||
|
|
|||
|
case NM_CLICK:
|
|||
|
|
|||
|
//
|
|||
|
// Figure out which item (if any) was clicked on
|
|||
|
//
|
|||
|
|
|||
|
msgPos = GetMessagePos();
|
|||
|
hitTestInfo.pt.x = LOWORD(msgPos);
|
|||
|
hitTestInfo.pt.y = HIWORD(msgPos);
|
|||
|
MapWindowPoints(HWND_DESKTOP, hwndLV, &hitTestInfo.pt, 1 );
|
|||
|
|
|||
|
index = ListView_HitTest(hwndLV, &hitTestInfo);
|
|||
|
|
|||
|
if (index == -1 || ! (hitTestInfo.flags & LVHT_ONITEMSTATEICON))
|
|||
|
return FALSE;
|
|||
|
|
|||
|
//
|
|||
|
// Toggle between checked and unchecked state
|
|||
|
//
|
|||
|
|
|||
|
ToggleFaxDeviceForReceive(hwndLV, index);
|
|||
|
return TRUE;
|
|||
|
|
|||
|
case LVN_KEYDOWN:
|
|||
|
|
|||
|
//
|
|||
|
// Use space key to toggle check boxes
|
|||
|
//
|
|||
|
|
|||
|
if (((LV_KEYDOWN *) pNMHdr)->wVKey == VK_SPACE) {
|
|||
|
|
|||
|
index = ListView_GetNextItem(hwndLV, -1, LVNI_ALL|LVNI_SELECTED);
|
|||
|
|
|||
|
if (index != -1) {
|
|||
|
|
|||
|
ToggleFaxDeviceForReceive(hwndLV, index);
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case LVN_ITEMCHANGING:
|
|||
|
|
|||
|
//
|
|||
|
// Validate receive options before switch to another device
|
|||
|
//
|
|||
|
|
|||
|
pnmlv = (NM_LISTVIEW *) pNMHdr;
|
|||
|
|
|||
|
if ((pnmlv->uChanged & LVIF_STATE) != 0 &&
|
|||
|
(pnmlv->uOldState & LVIS_SELECTED) != (pnmlv->uNewState & LVIS_SELECTED) &&
|
|||
|
! ValidateReceiveOptionsForSelectedDevices(hDlg, hwndLV))
|
|||
|
{
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
case LVN_ITEMCHANGED:
|
|||
|
|
|||
|
//
|
|||
|
// Update the contents at the bottom of the page
|
|||
|
// when there is a selection change
|
|||
|
//
|
|||
|
|
|||
|
pnmlv = (NM_LISTVIEW *) pNMHdr;
|
|||
|
|
|||
|
if ((pnmlv->uChanged & LVIF_STATE) != 0 &&
|
|||
|
(pnmlv->uOldState & LVIS_SELECTED) != (pnmlv->uNewState & LVIS_SELECTED))
|
|||
|
{
|
|||
|
Verbose(("Selection change: %d\n", pnmlv->iItem));
|
|||
|
DoChangeRecvDeviceSel(hDlg, hwndLV);
|
|||
|
UpdateReceiveOptionControls(hDlg);
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DoActivateRecvOptions(
|
|||
|
HWND hDlg
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Called when the "Receive Options" property page is activated
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Window handle to the "Receive Options" property page
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
HWND hwndLV;
|
|||
|
INT index;
|
|||
|
|
|||
|
//
|
|||
|
// Reinitialize the fax device list view if necessary
|
|||
|
//
|
|||
|
|
|||
|
if (!IsFaxDeviceListInSync(RECEIVE_OPTIONS_PAGE) &&
|
|||
|
(hwndLV = GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)))
|
|||
|
{
|
|||
|
InitFaxDeviceListView(hwndLV, LV_HASCHECKBOX, faxDeviceListViewColumnInfo);
|
|||
|
|
|||
|
for (index=0; index < gConfigData->cDevices; index++) {
|
|||
|
|
|||
|
if (gConfigData->pDevInfo[index].Flags & FPF_RECEIVE) {
|
|||
|
|
|||
|
CheckListViewItem(hwndLV, index);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
SetFaxDeviceListInSync(RECEIVE_OPTIONS_PAGE);
|
|||
|
|
|||
|
if (gConfigData->configType & FAXCONFIG_WORKSTATION) {
|
|||
|
HideWindow( GetDlgItem( hDlg, IDC_DEST_EMAIL ) );
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
DoSaveRecvOptions(
|
|||
|
HWND hDlg
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Save the information on the "Receive Options" property page
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Handle to the "Receive Options" property page
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
TRUE if successful, FALSE if there is an error
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
INT index;
|
|||
|
|
|||
|
//
|
|||
|
// Check if anything on this page was changed
|
|||
|
//
|
|||
|
|
|||
|
Verbose(("Saving 'Receive Options' page ...\n"));
|
|||
|
|
|||
|
if (! GetChangedFlag(RECEIVE_OPTIONS_PAGE))
|
|||
|
return TRUE;
|
|||
|
|
|||
|
//
|
|||
|
// Validate the inbound routing options for all fax devics
|
|||
|
//
|
|||
|
|
|||
|
for (index=0; index < gConfigData->cDevices; index++) {
|
|||
|
|
|||
|
if (! ValidateReceiveOptions(hDlg, index))
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
//
|
|||
|
// Save the fax device information if this is the last modified page
|
|||
|
//
|
|||
|
|
|||
|
return SaveFaxDeviceAndConfigInfo(hDlg, RECEIVE_OPTIONS_PAGE);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
GetDestPrinterName(
|
|||
|
HWND hwndList,
|
|||
|
LPTSTR pBuffer,
|
|||
|
INT cch
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Retrieve the name of the currently selected inbound destination printer.
|
|||
|
Also used to get the mapi profile name.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hwndList - Specifies the inbound destination printer list box
|
|||
|
pBuffer - Specifies a buffer for storing the selected printer name
|
|||
|
cch - Size of the buffer in characters
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
TRUE if successful
|
|||
|
FALSE if there is no selection or if there is an error
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
INT sel, length;
|
|||
|
|
|||
|
pBuffer[0] = NUL;
|
|||
|
|
|||
|
if (hwndList && (sel = SendMessage(hwndList, CB_GETCURSEL, 0, 0)) != CB_ERR) {
|
|||
|
|
|||
|
//
|
|||
|
// Get the current selection index. The first item is special:
|
|||
|
// It means to use the sytem default printer and not a specific printer name.
|
|||
|
//
|
|||
|
|
|||
|
if ((sel == 0) ||
|
|||
|
(length = SendMessage(hwndList, CB_GETLBTEXTLEN, sel, 0)) != CB_ERR &&
|
|||
|
(length < cch) &&
|
|||
|
SendMessage(hwndList, CB_GETLBTEXT, sel, (LPARAM) pBuffer) != CB_ERR)
|
|||
|
{
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
DoChangeInboundRouting(
|
|||
|
HWND hDlg,
|
|||
|
INT itemId
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Called when the user changes any inbound routing options
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Handle to the "Receive Options" property page
|
|||
|
itemId - Specifies which inbound routing option is changed
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NONE
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
TCHAR buffer[MAX_STRING_LEN];
|
|||
|
DWORD dwValue;
|
|||
|
DWORD routing, routingMask = 0;
|
|||
|
INT index;
|
|||
|
HWND hwndLV;
|
|||
|
|
|||
|
if (! (hwndLV = GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)))
|
|||
|
return;
|
|||
|
|
|||
|
//
|
|||
|
// Figure out the new setting of the changing item
|
|||
|
//
|
|||
|
|
|||
|
switch (itemId) {
|
|||
|
|
|||
|
case IDC_DEST_PRINTER:
|
|||
|
|
|||
|
routingMask = LR_PRINT;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_DIR:
|
|||
|
|
|||
|
routingMask = LR_STORE;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_EMAIL:
|
|||
|
|
|||
|
routingMask = LR_EMAIL;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_PRINTERLIST:
|
|||
|
|
|||
|
if (! GetDestPrinterName(GetDlgItem(hDlg, IDC_DEST_PRINTERLIST), buffer, MAX_STRING_LEN))
|
|||
|
return;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_MAILBOX:
|
|||
|
|
|||
|
routingMask = LR_INBOX;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_PROFILENAME:
|
|||
|
|
|||
|
if (! GetDestPrinterName(GetDlgItem(hDlg, IDC_DEST_PROFILENAME), buffer, MAX_STRING_LEN))
|
|||
|
return;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_DIRPATH:
|
|||
|
case IDC_CSID:
|
|||
|
|
|||
|
if (! GetDlgItemText(hDlg, itemId, buffer, MAX_STRING_LEN))
|
|||
|
buffer[0] = NUL;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_RINGS:
|
|||
|
|
|||
|
dwValue = GetDlgItemInt( hDlg, itemId, NULL, FALSE );
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
|
|||
|
Assert(FALSE);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
if (routingMask != 0)
|
|||
|
routing = IsDlgButtonChecked(hDlg, itemId) ? routingMask : 0;
|
|||
|
|
|||
|
//
|
|||
|
// Apply the change to selected fax device(s)
|
|||
|
//
|
|||
|
|
|||
|
index = -1;
|
|||
|
|
|||
|
while ((index = ListView_GetNextItem(hwndLV, index, LVNI_ALL|LVNI_SELECTED)) != -1) {
|
|||
|
|
|||
|
PCONFIG_PORT_INFO_2 pDevInfo;
|
|||
|
|
|||
|
Assert(index < gConfigData->cDevices);
|
|||
|
pDevInfo = gConfigData->pDevInfo + index;
|
|||
|
|
|||
|
if (routingMask) {
|
|||
|
|
|||
|
pDevInfo->Mask &= ~routingMask;
|
|||
|
pDevInfo->Mask |= routing;
|
|||
|
|
|||
|
} else if (itemId == IDC_DEST_RINGS) {
|
|||
|
|
|||
|
pDevInfo->Rings = dwValue;
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
LPTSTR *ppStr;
|
|||
|
|
|||
|
switch (itemId) {
|
|||
|
|
|||
|
case IDC_DEST_PRINTERLIST:
|
|||
|
|
|||
|
ppStr = &pDevInfo->PrinterName;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_DIRPATH:
|
|||
|
|
|||
|
ppStr = &pDevInfo->DirStore;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_PROFILENAME:
|
|||
|
|
|||
|
ppStr = &pDevInfo->ProfileName;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_CSID:
|
|||
|
|
|||
|
ppStr = &pDevInfo->CSID;
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
|
|||
|
Assert(FALSE);
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
MemFree(*ppStr);
|
|||
|
*ppStr = DuplicateString(buffer);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
|
|||
|
BOOL
|
|||
|
ReceiveOptionsProc(
|
|||
|
HWND hDlg,
|
|||
|
UINT message,
|
|||
|
UINT wParam,
|
|||
|
LONG lParam
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Procedure for handling the "Receive Options" tab
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
hDlg - Identifies the property sheet page
|
|||
|
message - Specifies the message
|
|||
|
wParam - Specifies additional message-specific information
|
|||
|
lParam - Specifies additional message-specific information
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
Depends on the value of message parameter
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
INT cmdId;
|
|||
|
LPNMHDR pNMHdr;
|
|||
|
|
|||
|
switch (message) {
|
|||
|
|
|||
|
case WM_INITDIALOG:
|
|||
|
|
|||
|
DoInitRecvOptions(hDlg);
|
|||
|
return TRUE;
|
|||
|
|
|||
|
case WM_COMMAND:
|
|||
|
|
|||
|
switch (cmdId = GET_WM_COMMAND_ID(wParam, lParam)) {
|
|||
|
|
|||
|
case IDC_DEST_PRINTER:
|
|||
|
case IDC_DEST_DIR:
|
|||
|
case IDC_DEST_EMAIL:
|
|||
|
case IDC_DEST_MAILBOX:
|
|||
|
|
|||
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != BN_CLICKED)
|
|||
|
return FALSE;
|
|||
|
|
|||
|
CheckDlgButton(hDlg, cmdId,
|
|||
|
(IsDlgButtonChecked(hDlg, cmdId) == BST_CHECKED) ? BST_UNCHECKED : BST_CHECKED);
|
|||
|
|
|||
|
UpdateReceiveOptionControls(hDlg);
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_BROWSE_DIR:
|
|||
|
|
|||
|
if (! DoBrowseForDirectory(hDlg, IDC_DEST_DIRPATH, IDS_INBOUND_DIR))
|
|||
|
return TRUE;
|
|||
|
|
|||
|
cmdId = IDC_DEST_DIRPATH;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_PROFILENAME:
|
|||
|
case IDC_DEST_PRINTERLIST:
|
|||
|
|
|||
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != CBN_SELCHANGE)
|
|||
|
return TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
case IDC_DEST_DIRPATH:
|
|||
|
case IDC_DEST_RINGS:
|
|||
|
|
|||
|
//
|
|||
|
// We would like to change our internal data only after EN_KILLFOCUS.
|
|||
|
// But the list view control gets selection change message before
|
|||
|
// the edit controls get kill focus message.
|
|||
|
//
|
|||
|
//
|
|||
|
|
|||
|
if (insideSetDlgItemText) {
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
if (cmdId == IDC_DEST_RINGS && GET_WM_COMMAND_CMD(wParam, lParam) == EN_UPDATE) {
|
|||
|
BOOL Rslt; DWORD Value;
|
|||
|
Value = GetDlgItemInt(hDlg, IDC_DEST_RINGS, &Rslt, FALSE);
|
|||
|
if (Rslt && Value == 0) {
|
|||
|
SetDlgItemText(hDlg, IDC_DEST_RINGS, TEXT("") );
|
|||
|
MessageBeep(0);
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
if (GET_WM_COMMAND_CMD(wParam, lParam) != EN_CHANGE) {
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
|
|||
|
case IDC_CSID:
|
|||
|
|
|||
|
switch (GET_WM_COMMAND_CMD(wParam, lParam)) {
|
|||
|
|
|||
|
case EN_CHANGE:
|
|||
|
|
|||
|
if (insideSetDlgItemText)
|
|||
|
return TRUE;
|
|||
|
break;
|
|||
|
|
|||
|
case EN_KILLFOCUS:
|
|||
|
|
|||
|
UpdateFaxDeviceListViewColumns(GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST),
|
|||
|
faxDeviceListViewColumnInfo,
|
|||
|
1);
|
|||
|
|
|||
|
default:
|
|||
|
|
|||
|
return TRUE;
|
|||
|
}
|
|||
|
|
|||
|
break;
|
|||
|
|
|||
|
default:
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
DoChangeInboundRouting(hDlg, cmdId);
|
|||
|
SetChangedFlag(hDlg, RECEIVE_OPTIONS_PAGE, TRUE);
|
|||
|
return TRUE;
|
|||
|
|
|||
|
case WM_NOTIFY:
|
|||
|
|
|||
|
pNMHdr = (NMHDR *) lParam;
|
|||
|
|
|||
|
if (pNMHdr->hwndFrom == GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)) {
|
|||
|
|
|||
|
if (HandleRecvListViewMessage(hDlg, pNMHdr))
|
|||
|
SetChangedFlag(hDlg, RECEIVE_OPTIONS_PAGE, TRUE);
|
|||
|
|
|||
|
} else switch (pNMHdr->code) {
|
|||
|
|
|||
|
case PSN_SETACTIVE:
|
|||
|
|
|||
|
DoActivateRecvOptions(hDlg);
|
|||
|
break;
|
|||
|
|
|||
|
case PSN_APPLY:
|
|||
|
|
|||
|
//
|
|||
|
// User pressed OK or Apply - validate inputs and save changes
|
|||
|
//
|
|||
|
|
|||
|
if (! DoSaveRecvOptions(hDlg)) {
|
|||
|
|
|||
|
SetWindowLong(hDlg, DWL_MSGRESULT, -1);
|
|||
|
return PSNRET_INVALID_NOCHANGEPAGE;
|
|||
|
|
|||
|
} else {
|
|||
|
|
|||
|
SetChangedFlag(hDlg, RECEIVE_OPTIONS_PAGE, FALSE);
|
|||
|
return PSNRET_NOERROR;
|
|||
|
}
|
|||
|
}
|
|||
|
break;
|
|||
|
|
|||
|
case WM_HELP:
|
|||
|
case WM_CONTEXTMENU:
|
|||
|
|
|||
|
return HandleHelpPopup(hDlg, message, wParam, lParam, RECEIVE_OPTIONS_PAGE);
|
|||
|
}
|
|||
|
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
|
|||
|
|