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