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.
485 lines
12 KiB
485 lines
12 KiB
#include "faxcfgwz.h"
|
|
|
|
|
|
DWORD
|
|
GetSelectedDevIndex(
|
|
HWND hDlg
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Get selected device index in WIZARDDATA.pDevInfo array
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "One device limit" page
|
|
|
|
Return Value:
|
|
|
|
Device index in WIZARDDATA.pDevInfo array
|
|
|
|
--*/
|
|
{
|
|
DWORD dwIndex = 0;
|
|
DWORD dwDeviceId = 0;
|
|
DWORD dwDevIndex = 0;
|
|
HWND hComboModem = NULL;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("GetSelectedDevIndex()"));
|
|
|
|
hComboModem = GetDlgItem(hDlg, IDC_COMBO_MODEM);
|
|
if(!hComboModem)
|
|
{
|
|
Assert(FALSE);
|
|
DebugPrintEx(DEBUG_ERR, TEXT("GetDlgItem(hDlg, IDC_COMBO_MODEM) failed, ec = %d."), GetLastError());
|
|
return dwDevIndex;
|
|
}
|
|
|
|
dwIndex = (DWORD)SendMessage(hComboModem, CB_GETCURSEL,0,0);
|
|
if(CB_ERR == dwIndex)
|
|
{
|
|
DebugPrintEx(DEBUG_ERR, TEXT("SendMessage(hComboModem, CB_GETCURSEL,0,0) failed."));
|
|
return dwDevIndex;
|
|
}
|
|
|
|
dwDevIndex = (DWORD)SendMessage(hComboModem, CB_GETITEMDATA, dwIndex, 0);
|
|
if(CB_ERR == dwDevIndex)
|
|
{
|
|
DebugPrintEx(DEBUG_ERR, TEXT("SendMessage(hComboModem, CB_GETITEMDATA, dwIndex, 0) failed."));
|
|
return dwDevIndex;
|
|
}
|
|
|
|
return dwDevIndex;
|
|
}
|
|
|
|
|
|
void
|
|
OnReceiveEnable(
|
|
HWND hDlg
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Handle "Receive Enable" check button
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "One device limit" page
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
{
|
|
BOOL bRcvEnable;
|
|
BOOL bAutoAnswer;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("OnReceiveEnable()"));
|
|
|
|
bRcvEnable = IsDlgButtonChecked(hDlg, IDC_RECEIVE_ENABLE) == BST_CHECKED;
|
|
|
|
if(bRcvEnable &&
|
|
IsDlgButtonChecked(hDlg, IDC_MANUAL_ANSWER) != BST_CHECKED &&
|
|
IsDlgButtonChecked(hDlg, IDC_AUTO_ANSWER) != BST_CHECKED)
|
|
{
|
|
//
|
|
// Auto answer is the default
|
|
//
|
|
CheckDlgButton(hDlg, IDC_AUTO_ANSWER, BST_CHECKED);
|
|
}
|
|
|
|
if (bRcvEnable)
|
|
{
|
|
//
|
|
// Let's see if the device is virtual
|
|
//
|
|
DWORD dwDevIndex = GetSelectedDevIndex(hDlg);
|
|
DWORD dwRes;
|
|
BOOL bVirtual = FALSE;
|
|
|
|
dwRes = IsDeviceVirtual (g_hFaxSvcHandle, g_wizData.pDevInfo[dwDevIndex].dwDeviceId, &bVirtual);
|
|
if (ERROR_SUCCESS != dwRes)
|
|
{
|
|
//
|
|
// Assume device is virtual
|
|
//
|
|
bVirtual = TRUE;
|
|
}
|
|
if (bVirtual)
|
|
{
|
|
//
|
|
// A virtual device is set to receive.
|
|
// Enable ONLY auto-answer and set rings to 1.
|
|
//
|
|
EnableWindow (GetDlgItem(hDlg, IDC_MANUAL_ANSWER), FALSE);
|
|
EnableWindow (GetDlgItem(hDlg, IDC_AUTO_ANSWER), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDCSTATIC_RINGS), TRUE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_RING_COUNT), FALSE);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SPIN_RING_COUNT), FALSE);
|
|
SetDlgItemInt(hDlg, IDC_RING_COUNT, 1, FALSE);
|
|
return;
|
|
}
|
|
}
|
|
bAutoAnswer = IsDlgButtonChecked(hDlg, IDC_AUTO_ANSWER) == BST_CHECKED;
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_MANUAL_ANSWER), bRcvEnable);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_AUTO_ANSWER), bRcvEnable);
|
|
EnableWindow(GetDlgItem(hDlg, IDCSTATIC_RINGS), bRcvEnable);
|
|
|
|
EnableWindow(GetDlgItem(hDlg, IDC_RING_COUNT), bRcvEnable && bAutoAnswer);
|
|
EnableWindow(GetDlgItem(hDlg, IDC_SPIN_RING_COUNT), bRcvEnable && bAutoAnswer);
|
|
} // OnReceiveEnable
|
|
|
|
void
|
|
OnDevSelectChanged(
|
|
HWND hDlg
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Handle device selection change
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "One device limit" page
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
|
|
{
|
|
DWORD dwDevIndex;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("OnDevSelectChanged()"));
|
|
|
|
dwDevIndex = GetSelectedDevIndex(hDlg);
|
|
|
|
CheckDlgButton(hDlg, IDC_SEND_ENABLE, g_wizData.pDevInfo[dwDevIndex].bSend ? BST_CHECKED : BST_UNCHECKED);
|
|
CheckDlgButton(hDlg,
|
|
IDC_RECEIVE_ENABLE,
|
|
(FAX_DEVICE_RECEIVE_MODE_OFF != g_wizData.pDevInfo[dwDevIndex].ReceiveMode) ? BST_CHECKED : BST_UNCHECKED);
|
|
|
|
if(FAX_DEVICE_RECEIVE_MODE_MANUAL == g_wizData.pDevInfo[dwDevIndex].ReceiveMode)
|
|
{
|
|
CheckDlgButton(hDlg, IDC_MANUAL_ANSWER, BST_CHECKED);
|
|
CheckDlgButton(hDlg, IDC_AUTO_ANSWER, BST_UNCHECKED);
|
|
}
|
|
else if(FAX_DEVICE_RECEIVE_MODE_AUTO == g_wizData.pDevInfo[dwDevIndex].ReceiveMode)
|
|
{
|
|
CheckDlgButton(hDlg, IDC_MANUAL_ANSWER, BST_UNCHECKED);
|
|
CheckDlgButton(hDlg, IDC_AUTO_ANSWER, BST_CHECKED);
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// No answer mode
|
|
//
|
|
CheckDlgButton(hDlg, IDC_MANUAL_ANSWER, BST_UNCHECKED);
|
|
CheckDlgButton(hDlg, IDC_AUTO_ANSWER, BST_UNCHECKED);
|
|
}
|
|
|
|
OnReceiveEnable(hDlg);
|
|
}
|
|
|
|
|
|
VOID
|
|
DoInitOneDevLimitDlg(
|
|
HWND hDlg
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Init the "One device limit" page
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "One device limit" page
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
|
|
{
|
|
DWORD dw;
|
|
DWORD dwItem;
|
|
DWORD dwSelectedItem=0;
|
|
HWND hComboModem;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("DoInitOneDevLimitDlg()"));
|
|
|
|
hComboModem = GetDlgItem(hDlg, IDC_COMBO_MODEM);
|
|
if(!hComboModem)
|
|
{
|
|
Assert(FALSE);
|
|
return;
|
|
}
|
|
|
|
for(dw=0; dw < g_wizData.dwDeviceCount; ++dw)
|
|
{
|
|
dwItem = (DWORD)SendMessage(hComboModem, CB_ADDSTRING, 0, (LPARAM)(g_wizData.pDevInfo[dw].szDeviceName));
|
|
if(CB_ERR != dwItem && CB_ERRSPACE != dwItem)
|
|
{
|
|
SendMessage(hComboModem, CB_SETITEMDATA, dwItem, dw);
|
|
|
|
if(g_wizData.pDevInfo[dw].bSend ||
|
|
(FAX_DEVICE_RECEIVE_MODE_OFF != g_wizData.pDevInfo[dw].ReceiveMode))
|
|
{
|
|
dwSelectedItem = dwItem;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
DebugPrintEx(DEBUG_ERR, TEXT("SendMessage(hComboModem, CB_ADDSTRING) failed."));
|
|
}
|
|
}
|
|
|
|
SendDlgItemMessage(hDlg,
|
|
IDC_SPIN_RING_COUNT,
|
|
UDM_SETRANGE32,
|
|
(WPARAM)FXS_RINGS_LOWER,
|
|
(LPARAM)FXS_RINGS_UPPER);
|
|
|
|
SendDlgItemMessage(hDlg, IDC_RING_COUNT, EM_SETLIMITTEXT, FXS_RINGS_LENGTH, 0);
|
|
|
|
if(!SetDlgItemInt(hDlg, IDC_RING_COUNT, g_wizData.dwRingCount, FALSE))
|
|
{
|
|
DebugPrintEx(DEBUG_ERR, TEXT("SetDlgItemInt(IDC_RING_COUNT) failed with %d."), GetLastError());
|
|
}
|
|
|
|
SendMessage(hComboModem, CB_SETCURSEL, dwSelectedItem, 0);
|
|
OnDevSelectChanged(hDlg);
|
|
}
|
|
|
|
void
|
|
DoSaveOneDevLimit(
|
|
HWND hDlg
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Save the user's choice for devices
|
|
|
|
Arguments:
|
|
|
|
hDlg - Handle to the "One device limit" page
|
|
|
|
Return Value:
|
|
|
|
None
|
|
|
|
--*/
|
|
|
|
{
|
|
DWORD dw;
|
|
BOOL bRes;
|
|
DWORD dwRes;
|
|
DWORD dwDevIndex;
|
|
|
|
DEBUG_FUNCTION_NAME(TEXT("DoSaveOneDevLimit()"));
|
|
|
|
dwDevIndex = GetSelectedDevIndex(hDlg);
|
|
|
|
//
|
|
// disable all devices
|
|
//
|
|
for(dw=0; dw < g_wizData.dwDeviceCount; ++dw)
|
|
{
|
|
g_wizData.pDevInfo[dw].bSend = FALSE;
|
|
g_wizData.pDevInfo[dw].ReceiveMode = FAX_DEVICE_RECEIVE_MODE_OFF;
|
|
g_wizData.pDevInfo[dw].bSelected = FALSE;
|
|
}
|
|
|
|
//
|
|
// save "Send enable"
|
|
//
|
|
if(IsDlgButtonChecked(hDlg, IDC_SEND_ENABLE) == BST_CHECKED)
|
|
{
|
|
g_wizData.pDevInfo[dwDevIndex].bSend = TRUE;
|
|
}
|
|
|
|
//
|
|
// save receive options
|
|
//
|
|
if(IsDlgButtonChecked(hDlg, IDC_RECEIVE_ENABLE) != BST_CHECKED)
|
|
{
|
|
return;
|
|
}
|
|
|
|
if(IsDlgButtonChecked(hDlg, IDC_MANUAL_ANSWER) == BST_CHECKED)
|
|
{
|
|
g_wizData.pDevInfo[dwDevIndex].ReceiveMode = FAX_DEVICE_RECEIVE_MODE_MANUAL;
|
|
return;
|
|
}
|
|
|
|
//
|
|
// auto answer
|
|
//
|
|
g_wizData.pDevInfo[dwDevIndex].ReceiveMode = FAX_DEVICE_RECEIVE_MODE_AUTO;
|
|
//
|
|
// get ring count
|
|
//
|
|
dwRes = GetDlgItemInt(hDlg, IDC_RING_COUNT, &bRes, FALSE);
|
|
if(!bRes)
|
|
{
|
|
DebugPrintEx(DEBUG_ERR, TEXT("GetDlgItemInt(IDC_RING_COUNT) failed with %d."), GetLastError());
|
|
}
|
|
else
|
|
{
|
|
g_wizData.dwRingCount = dwRes;
|
|
}
|
|
}
|
|
|
|
|
|
INT_PTR
|
|
CALLBACK
|
|
OneDevLimitDlgProc (
|
|
HWND hDlg,
|
|
UINT uMsg,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Procedure for handling the "One device limit" 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
|
|
|
|
--*/
|
|
|
|
{
|
|
switch (uMsg)
|
|
{
|
|
case WM_INITDIALOG :
|
|
{
|
|
DoInitOneDevLimitDlg(hDlg);
|
|
return TRUE;
|
|
}
|
|
|
|
case WM_COMMAND:
|
|
|
|
switch(LOWORD(wParam))
|
|
{
|
|
case IDC_COMBO_MODEM:
|
|
|
|
if(HIWORD(wParam) == CBN_SELCHANGE)
|
|
{
|
|
OnDevSelectChanged(hDlg);
|
|
}
|
|
break;
|
|
|
|
case IDC_MANUAL_ANSWER:
|
|
case IDC_AUTO_ANSWER:
|
|
case IDC_RECEIVE_ENABLE:
|
|
|
|
OnReceiveEnable(hDlg);
|
|
break;
|
|
}
|
|
|
|
break;
|
|
|
|
case WM_NOTIFY :
|
|
{
|
|
LPNMHDR lpnm = (LPNMHDR) lParam;
|
|
|
|
switch (lpnm->code)
|
|
{
|
|
case PSN_SETACTIVE :
|
|
|
|
// Enable the Back and Finish button
|
|
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((IsDlgButtonChecked(hDlg, IDC_RECEIVE_ENABLE) == BST_CHECKED) &&
|
|
(IsDlgButtonChecked(hDlg, IDC_AUTO_ANSWER) == BST_CHECKED) &&
|
|
(SendDlgItemMessage(hDlg, IDC_RING_COUNT, WM_GETTEXTLENGTH, 0, 0) == 0))
|
|
{
|
|
//
|
|
// If the rings field is empty
|
|
// go back to this page
|
|
//
|
|
DisplayMessageDialog(hDlg, MB_OK | MB_ICONSTOP, 0, IDS_ERR_NO_RINGS);
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, -1);
|
|
return TRUE;
|
|
}
|
|
|
|
DoSaveOneDevLimit(hDlg);
|
|
|
|
SetLastPage(IDD_ONE_DEVICE_LIMIT);
|
|
|
|
if(!IsSendEnable())
|
|
{
|
|
if(IsReceiveEnable())
|
|
{
|
|
//
|
|
// go to the CSID page
|
|
//
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_WIZARD_RECV_CSID);
|
|
return TRUE;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
// go to the completion page
|
|
//
|
|
SetWindowLongPtr(hDlg, DWLP_MSGRESULT, IDD_WIZARD_COMPLETE);
|
|
return TRUE;
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case PSN_RESET :
|
|
{
|
|
// Handle a Cancel button click, if necessary
|
|
break;
|
|
}
|
|
|
|
default :
|
|
break;
|
|
}
|
|
}
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
return FALSE;
|
|
}
|