Leaked source code of windows server 2003
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

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