512 lines
9.1 KiB
C
512 lines
9.1 KiB
C
|
/*++
|
|||
|
|
|||
|
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;
|
|||
|
}
|