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