windows-nt/Source/XPSP1/NT/printscan/fax/config/dll/diaglog.c
2020-09-26 16:20:57 +08:00

512 lines
9.1 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
diaglog.c
Abstract:
Functions for handling events in the "Diagnostics Logging" tab of
the fax server configuration property sheet
Environment:
Fax configuration applet
Revision History:
03/22/96 -davidx-
Created it.
mm/dd/yy -author-
description
--*/
#include "faxcpl.h"
VOID
UpdateLoggingLevels(
HWND hwndLV
)
/*++
Routine Description:
Display current logging level for each category
Arguments:
hwndLV - Specifies the list view window
Return Value:
NONE
--*/
{
INT index, nItems, strId;
TCHAR buffer[MAX_TITLE_LEN];
LV_ITEM lvi;
//
// Count the number of items in the list view
//
if (hwndLV == NULL ||
(nItems = ListView_GetItemCount(hwndLV)) == -1 ||
gConfigData->pFaxConfig == NULL ||
nItems > (INT) gConfigData->NumberCategories)
{
return;
}
ZeroMemory(&lvi, sizeof(lvi));
lvi.mask = LVIF_TEXT;
lvi.iSubItem = 1;
lvi.pszText = buffer;
for (index=0; index < nItems; index++) {
//
// Map logging level to radio button control ID
//
switch (gConfigData->pFaxLogging[index].Level) {
case FAXLOG_LEVEL_MIN:
strId = IDS_LOGGING_MIN;
break;
case FAXLOG_LEVEL_MED:
strId = IDS_LOGGING_MED;
break;
case FAXLOG_LEVEL_MAX:
strId = IDS_LOGGING_MAX;
break;
default:
strId = IDS_LOGGING_NONE;
break;
}
if (! LoadString(ghInstance, strId, buffer, MAX_TITLE_LEN))
buffer[0] = NUL;
lvi.iItem = index;
if (! ListView_SetItem(hwndLV, &lvi))
Error(("ListView_SetItem failed\n"));
}
}
VOID
DoInitDiagLog(
HWND hDlg
)
/*++
Routine Description:
Perform one-time initialization of "Diagnostics Logging" property page
Arguments:
hDlg - Window handle to the "Diagnostics Logging" property page
Return Value:
NONE
--*/
{
HWND hwndLV;
RECT rect;
LV_COLUMN lvc;
TCHAR buffer[MAX_TITLE_LEN];
//
// Connect to the fax service and retrieve the list of fax devices
//
GetFaxDeviceAndConfigInfo();
//
// Insert two columns: Category and Logging Level
//
if (! (hwndLV = GetDlgItem(hDlg, IDC_LOGGING_LIST)))
return;
GetClientRect(hwndLV, &rect);
rect.right -= rect.left;
ZeroMemory(&lvc, sizeof(lvc));
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.fmt = LVCFMT_LEFT;
lvc.pszText = buffer;
lvc.cx = rect.right * 2 / 3;
lvc.iSubItem = 0;
LoadString(ghInstance, IDS_CATEGORY, buffer, MAX_TITLE_LEN);
if (ListView_InsertColumn(hwndLV, 0, &lvc) == -1) {
Error(("ListView_InsertColumn failed\n"));
return;
}
lvc.cx = rect.right / 3 - GetSystemMetrics(SM_CXVSCROLL);
lvc.iSubItem = 1;
LoadString(ghInstance, IDS_LOGGING_LEVEL, buffer, MAX_TITLE_LEN);
if (ListView_InsertColumn(hwndLV, 1, &lvc) == -1) {
Error(("ListView_InsertColumn failed\n"));
return;
}
//
// Insert an item for each category
//
if (gConfigData->pFaxConfig) {
LV_ITEM lvi;
DWORD index;
ZeroMemory(&lvi, sizeof(lvi));
lvi.iSubItem = 0;
lvi.mask = LVIF_TEXT;
for (index=0; index < gConfigData->NumberCategories; index++) {
lvi.iItem = index;
lvi.pszText = gConfigData->pFaxLogging[index].Name;
if (ListView_InsertItem(hwndLV, &lvi) == -1) {
Error(("ListView_InsertItem failed\n"));
break;
}
}
}
UpdateLoggingLevels(hwndLV);
//
// The initial selection is the first category in the list
//
ListView_SetItemState(hwndLV, 0, LVIS_SELECTED|LVIS_FOCUSED, LVIS_SELECTED|LVIS_FOCUSED);
}
BOOL
DoSaveDiagLog(
HWND hDlg
)
/*++
Routine Description:
Save the information on the "Diagnostics Logging" property page
Arguments:
hDlg - Handle to the "Diagnostics Logging" property page
Return Value:
TRUE if successful, FALSE if there is an error
--*/
{
//
// Check if anything on this page was changed
//
Verbose(("Saving 'Diagnostics Logging' page ...\n"));
if (! GetChangedFlag(DIAG_LOG_PAGE))
return TRUE;
//
// Save the fax device information if this is the last modified page
//
return SaveFaxDeviceAndConfigInfo(hDlg, DIAG_LOG_PAGE);
}
VOID
DoChangeLoggingCategory(
HWND hDlg,
HWND hwndLV
)
/*++
Routine Description:
Called when the changes the category selection
Arguments:
hDlg - Handle to the "Diagnostics Logging" property page
hwndLV - Handle to the logging category list view
Return Value:
NONE
--*/
{
INT index, itemId;
DWORD level = 0xffffffff;
//
// Find the common level shared by selected categories
//
if (hwndLV == NULL || gConfigData->pFaxLogging == NULL)
return;
if ((index = ListView_GetNextItem(hwndLV, -1, LVNI_ALL|LVNI_SELECTED)) != -1) {
Assert(index < (INT) gConfigData->NumberCategories);
level = gConfigData->pFaxLogging[index].Level;
while ((index = ListView_GetNextItem(hwndLV, index, LVNI_ALL|LVNI_SELECTED)) != -1) {
Assert(index < (INT) gConfigData->NumberCategories );
if (gConfigData->pFaxLogging[index].Level != level) {
level = 0xffffffff;
break;
}
}
}
//
// Map logging level to radio button control ID
//
switch (level) {
case FAXLOG_LEVEL_NONE:
itemId = IDC_LOG_NONE;
break;
case FAXLOG_LEVEL_MIN:
itemId = IDC_LOG_MIN;
break;
case FAXLOG_LEVEL_MED:
itemId = IDC_LOG_MED;
break;
case FAXLOG_LEVEL_MAX:
itemId = IDC_LOG_MAX;
break;
default:
itemId = 0;
break;
}
for (index=IDC_LOG_NONE; index <= IDC_LOG_MAX; index++)
CheckDlgButton(hDlg, index, (index == itemId) ? BST_CHECKED : BST_UNCHECKED);
}
VOID
DoChangeLoggingLevel(
HWND hDlg,
INT itemId
)
/*++
Routine Description:
Change the logging level of the currently selected categories
Arguments:
hDlg - Handle to the "Diagnostics Logging" property page
itemId - Control ID of the selected logging level
Return Value:
NONE
--*/
{
HWND hwndLV;
DWORD level;
INT index = -1;
if (!(hwndLV = GetDlgItem(hDlg, IDC_LOGGING_LIST)) || gConfigData->pFaxLogging == NULL)
return;
switch (itemId) {
case IDC_LOG_NONE:
level = FAXLOG_LEVEL_NONE;
break;
case IDC_LOG_MIN:
level = FAXLOG_LEVEL_MIN;
break;
case IDC_LOG_MED:
level = FAXLOG_LEVEL_MED;
break;
case IDC_LOG_MAX:
level = FAXLOG_LEVEL_MAX;
break;
}
while ((index = ListView_GetNextItem(hwndLV, index, LVNI_ALL|LVNI_SELECTED)) != -1) {
Assert(index < (INT) gConfigData->NumberCategories);
gConfigData->pFaxLogging[index].Level = level;
}
UpdateLoggingLevels(hwndLV);
}
BOOL
DiagLogProc(
HWND hDlg,
UINT message,
UINT wParam,
LONG lParam
)
/*++
Routine Description:
Procedure for handling the "Diagnostics Logging" tab
Arguments:
hDlg - Identifies the property sheet page
message - Specifies the message
wParam - Specifies additional message-specific information
lParam - Specifies additional message-specific information
Return Value:
Depends on the value of message parameter
--*/
{
INT cmdId;
NMHDR *pNMHdr;
switch (message) {
case WM_INITDIALOG:
DoInitDiagLog(hDlg);
return TRUE;
case WM_COMMAND:
switch (cmdId = GET_WM_COMMAND_ID(wParam, lParam)) {
case IDC_LOG_NONE:
case IDC_LOG_MIN:
case IDC_LOG_MED:
case IDC_LOG_MAX:
DoChangeLoggingLevel(hDlg, cmdId);
SetChangedFlag(hDlg, DIAG_LOG_PAGE, TRUE);
return TRUE;
default:
break;
}
break;
case WM_NOTIFY:
pNMHdr = (NMHDR *) lParam;
if (pNMHdr->hwndFrom == GetDlgItem(hDlg, IDC_LOGGING_LIST)) {
if (pNMHdr->code == LVN_ITEMCHANGED)
DoChangeLoggingCategory(hDlg, pNMHdr->hwndFrom);
} else if (pNMHdr->code == PSN_APPLY) {
//
// User pressed OK or Apply - validate inputs and save changes
//
if (! DoSaveDiagLog(hDlg)) {
SetWindowLong(hDlg, DWL_MSGRESULT, -1);
return PSNRET_INVALID_NOCHANGEPAGE;
} else {
SetChangedFlag(hDlg, DIAG_LOG_PAGE, FALSE);
return PSNRET_NOERROR;
}
}
break;
case WM_HELP:
case WM_CONTEXTMENU:
return HandleHelpPopup(hDlg, message, wParam, lParam, DIAG_LOG_PAGE);
}
return FALSE;
}