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.
 
 
 
 
 
 

366 lines
7.7 KiB

#include "faxcfgwz.h"
BOOL g_bInitializing = FALSE; // TRUE during DoInitDevLimitDlg()
DWORD
CountSelectedDev(
HWND hDlg
)
/*++
Routine Description:
Count selected devices
Arguments:
hDlg - Handle to the "Device limit" page
Return Value:
Number of the selected devices
--*/
{
DWORD dw;
HWND hwndLv;
DWORD dwSelected=0; // count selected devices
DEBUG_FUNCTION_NAME(TEXT("OnDevSelect()"));
hwndLv = GetDlgItem(hDlg, IDC_DEVICE_LIST);
for (dw = 0; dw < g_wizData.dwDeviceCount; ++dw)
{
if(ListView_GetCheckState(hwndLv, dw))
{
++dwSelected;
}
}
return dwSelected;
}
VOID
OnDevSelect(
HWND hDlg
)
/*++
Routine Description:
Handle device selection
Arguments:
hDlg - Handle to the "Device limit" page
Return Value:
None
--*/
{
HWND hwndLv;
INT iItem;
DWORD dwSelectNum; // count selected devices
DEBUG_FUNCTION_NAME(TEXT("OnDevSelect()"));
hwndLv = GetDlgItem(hDlg, IDC_DEVICE_LIST);
dwSelectNum = CountSelectedDev(hDlg);
if(dwSelectNum > g_wizData.dwDeviceLimit)
{
//
// If the user exceeds the device limit
// uncheck selected device
//
iItem = ListView_GetNextItem(hwndLv, -1, LVNI_ALL | LVNI_SELECTED);
if(iItem == -1)
{
Assert(FALSE);
}
else
{
ListView_SetCheckState(hwndLv, iItem, FALSE);
}
DisplayMessageDialog(hDlg, MB_OK | MB_ICONSTOP, 0, IDS_DEV_LIMIT_ERROR, g_wizData.dwDeviceLimit);
}
ShowWindow(GetDlgItem(hDlg, IDCSTATIC_NO_DEVICE_ERR), (dwSelectNum > 0) ? SW_HIDE : SW_SHOW);
ShowWindow(GetDlgItem(hDlg, IDC_STATIC_NO_DEVICE), (dwSelectNum > 0) ? SW_HIDE : SW_SHOW);
}
VOID
DoInitDevLimitDlg(
HWND hDlg
)
/*++
Routine Description:
Init the "Device limit" page
Arguments:
hDlg - Handle to the "Device limit" page
Return Value:
None
--*/
{
DWORD dw;
DWORD dwSelected=0; // count selected devices
BOOL bCheck;
HWND hwndLv;
INT iIndex;
LV_ITEM lvItem = {0};
DEBUG_FUNCTION_NAME(TEXT("DoInitDevLimitDlg()"));
g_bInitializing = TRUE;
InitDeviceList(hDlg, IDC_DEVICE_LIST);
hwndLv = GetDlgItem(hDlg, IDC_DEVICE_LIST);
//
// Fill the list of devices and select the first item.
//
lvItem.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM | LVIF_STATE;
lvItem.iImage = DI_Modem;
for (dw = 0; dw < g_wizData.dwDeviceCount; ++dw)
{
lvItem.iItem = dw;
lvItem.pszText = g_wizData.pDevInfo[dw].szDeviceName;
lvItem.lParam = dw;
iIndex = ListView_InsertItem(hwndLv, &lvItem);
bCheck = FALSE;
if((dwSelected < g_wizData.dwDeviceLimit) &&
(g_wizData.pDevInfo[dw].bSend ||
(FAX_DEVICE_RECEIVE_MODE_OFF != g_wizData.pDevInfo[dw].ReceiveMode)))
{
bCheck = TRUE;
++dwSelected;
}
ListView_SetCheckState(hwndLv, iIndex, bCheck);
}
//
// Select the first item.
//
ListView_SetItemState(hwndLv, 0, LVIS_SELECTED | LVIS_FOCUSED, LVIS_SELECTED | LVIS_FOCUSED);
OnDevSelect(hDlg);
ListView_SetColumnWidth(hwndLv, 0, LVSCW_AUTOSIZE_USEHEADER );
g_bInitializing = FALSE;
}
void
DoSaveDevLimit(
HWND hDlg
)
/*++
Routine Description:
Save the user's choice for devices
Arguments:
hDlg - Handle to the "Device limit" page
Return Value:
None
--*/
{
DWORD dw;
HWND hwndLv;
BOOL bSelected;
DEBUG_FUNCTION_NAME(TEXT("DoSaveDevLimit()"));
hwndLv = GetDlgItem(hDlg, IDC_DEVICE_LIST);
for (dw = 0; dw < g_wizData.dwDeviceCount; ++dw)
{
bSelected = ListView_GetCheckState(hwndLv, dw);
g_wizData.pDevInfo[dw].bSelected = bSelected;
if(!bSelected)
{
g_wizData.pDevInfo[dw].bSend = FALSE;
g_wizData.pDevInfo[dw].ReceiveMode = FAX_DEVICE_RECEIVE_MODE_OFF;
}
}
}
INT_PTR
CALLBACK
DevLimitDlgProc (
HWND hDlg,
UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
/*++
Routine Description:
Procedure for handling the "Send Device" 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 :
{
DoInitDevLimitDlg(hDlg);
return TRUE;
}
case WM_COMMAND:
switch(LOWORD(wParam))
{
default:
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
//
DoSaveDevLimit(hDlg);
SetLastPage(IDD_DEVICE_LIMIT_SELECT);
if(CountSelectedDev(hDlg) == 0)
{
//
// 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;
}
case LVN_ITEMCHANGED:
{
//
// need to validate the control after changing selection by keyboard
//
if(!g_bInitializing)
{
OnDevSelect(hDlg);
}
break;
}
case NM_DBLCLK:
{
//
// Handle a double click event
//
INT iItem;
HWND hwndLv;
hwndLv = GetDlgItem(hDlg, IDC_DEVICE_LIST);
iItem = ((LPNMITEMACTIVATE) lParam)->iItem;
ListView_SetCheckState(hwndLv, iItem, !ListView_GetCheckState(hwndLv, iItem));
// we don't have break here because we'll go through NM_CLICK
}
case NM_CLICK:
{
//
// Handle a Click event
//
INT iItem;
HWND hwndLv;
hwndLv = GetDlgItem(hDlg, IDC_DEVICE_LIST);
iItem = ((LPNMITEMACTIVATE) lParam)->iItem;
ListView_SetItemState(hwndLv, iItem, LVIS_SELECTED, LVIS_SELECTED);
break;
}
default :
break;
}
}
break;
default:
break;
}
return FALSE;
}