|
|
#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; }
|