|
|
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
devstat.c
Abstract:
Functions for handling events in the "Device Status" tab of the fax server configuration property sheet
Environment:
Fax configuration applet
Revision History:
03/13/96 -davidx- Created it.
mm/dd/yy -author- description
--*/
#include "faxcpl.h"
//
// Information about the fax device list view on "Send Options" page
//
static COLUMNINFO faxDeviceListViewColumnInfo[] = {
{ COLUMN_DEVICE_NAME, 2 }, { COLUMN_STATUS, 1 }, { 0, 0 }, };
VOID DoActivateDeviceStatus( HWND hDlg )
/*++
Routine Description:
Called when the "Device Status" property page is activated
Arguments:
hDlg - Window handle to the "Device Status" property page
Return Value:
NONE
--*/
{ HWND hwndLV;
//
// Reinitialize the fax device list view if necessary
//
if (!IsFaxDeviceListInSync(DEVICE_STATUS_PAGE) && (hwndLV = GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST))) { InitFaxDeviceListView(hwndLV, 0, faxDeviceListViewColumnInfo); }
SetFaxDeviceListInSync(DEVICE_STATUS_PAGE); }
VOID DoRefreshDevStatus( HWND hDlg )
/*++
Routine Description:
Refresh the fax device list on "Device Status" property page
Arguments:
hDlg - Window handle to the "Device Status" property page
Return Value:
NONE
--*/
{ PFAX_PORT_INFO pFaxPortInfo, pSaved; DWORD cPorts; INT index;
//
// Talk with the fax service to get the current status of each device
//
if (gConfigData->hFaxSvc && (pSaved = pFaxPortInfo = FaxSvcEnumPorts(gConfigData->hFaxSvc, &cPorts))) { for (index=0; index < gConfigData->cDevices; index++) gConfigData->pDevInfo[index].State = FPS_UNAVAILABLE;
for ( ; cPorts--; pFaxPortInfo++) {
for (index=0; index < gConfigData->cDevices; index++) {
if (gConfigData->pDevInfo[index].DeviceId == pFaxPortInfo->DeviceId) {
gConfigData->pDevInfo[index].State = pFaxPortInfo->State; break; } } }
//
// Redisplay the fax device status
//
FaxFreeBuffer(pSaved); UpdateFaxDeviceListViewColumns(GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST), faxDeviceListViewColumnInfo, 1); } }
VOID SetTimeField( HWND hwnd, PFILETIME pFileTime )
/*++
Routine Description:
Display the specified time value in a text field
Arguments:
hwnd - Window handle to the text field pFileTime - Time value to be displayed
Return Value:
NONE
--*/
{ SYSTEMTIME systemTime; TCHAR timeString[64];
if (! FileTimeToSystemTime(pFileTime, &systemTime) || ! GetTimeFormat(LOCALE_USER_DEFAULT, 0, &systemTime, NULL, timeString, 64)) { Error(("Bad time value: error = %d\n", GetLastError())); timeString[0] = NUL; }
SetWindowText(hwnd, timeString); }
BOOL CALLBACK SendStatusProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
/*++
Routine Description:
Dialog procedure for displaying send device status dialog
Arguments:
hDlg - Handle to dialog window uMsg - Message wParam, lParam - Parameters
Return Value:
Depends on message
--*/
#define SetStatusTextField(hDlg, idc, p) \
SetDlgItemText(hDlg, idc, (p) ? (p) : TEXT(""))
{ PFAX_DEVICE_STATUS pDevStatus;
switch (uMsg) {
case WM_INITDIALOG:
pDevStatus = (PFAX_DEVICE_STATUS) lParam;
if (pDevStatus == NULL || pDevStatus->SizeOfStruct != sizeof(FAX_DEVICE_STATUS)) {
Error(("Corrupted FAX_DEVICE_STATUS structure\n")); return TRUE; }
SetStatusTextField(hDlg, IDC_DEVSTAT_DEVICE, pDevStatus->DeviceName); SetStatusTextField(hDlg, IDC_DEVSTAT_SENDER, pDevStatus->SenderName); SetStatusTextField(hDlg, IDC_DEVSTAT_DOCUMENT, pDevStatus->DocumentName); SetStatusTextField(hDlg, IDC_DEVSTAT_TO, pDevStatus->RecipientName); SetStatusTextField(hDlg, IDC_DEVSTAT_FAXNUMBER, pDevStatus->PhoneNumber);
SetDlgItemInt(hDlg, IDC_DEVSTAT_TOTAL_BYTES, pDevStatus->Size, FALSE); SetDlgItemInt(hDlg, IDC_DEVSTAT_CURRENT_PAGE, pDevStatus->CurrentPage, FALSE); SetDlgItemInt(hDlg, IDC_DEVSTAT_TOTAL_PAGES, pDevStatus->TotalPages, FALSE);
//
// Start time and submitted time
//
SetTimeField(GetDlgItem(hDlg, IDC_DEVSTAT_STARTEDAT), &pDevStatus->StartTime);
SetTimeField(GetDlgItem(hDlg, IDC_DEVSTAT_SUBMITTEDAT), &pDevStatus->SubmittedTime);
//
// Status string
//
if (pDevStatus->Status == 0) {
SetStatusTextField(hDlg, IDC_DEVSTAT_STATUS, pDevStatus->StatusString);
} else {
LPTSTR pStatusString;
pStatusString = MakeDeviceStatusString(pDevStatus->Status); SetStatusTextField(hDlg, IDC_DEVSTAT_STATUS, pStatusString); MemFree(pStatusString); }
return TRUE;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
case IDOK: case IDCANCEL:
EndDialog(hDlg, IDCANCEL); return TRUE; } break; }
return FALSE; }
BOOL CALLBACK ReceiveStatusProc( HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam )
/*++
Routine Description:
Dialog procedure for displaying receive device status dialog
Arguments:
hDlg - Handle to dialog window uMsg - Message wParam, lParam - Parameters
Return Value:
Depends on message
--*/
{ PFAX_DEVICE_STATUS pDevStatus;
switch (uMsg) {
case WM_INITDIALOG:
pDevStatus = (PFAX_DEVICE_STATUS) lParam;
if (pDevStatus == NULL || pDevStatus->SizeOfStruct != sizeof(FAX_DEVICE_STATUS)) {
Error(("Corrupted FAX_DEVICE_STATUS structure\n")); return TRUE; }
SetStatusTextField(hDlg, IDC_DEVSTAT_DEVICE, pDevStatus->DeviceName); SetStatusTextField(hDlg, IDC_DEVSTAT_SENDER, pDevStatus->Tsid); SetStatusTextField(hDlg, IDC_DEVSTAT_TO, pDevStatus->Csid);
//
// Start time
//
SetTimeField(GetDlgItem(hDlg, IDC_DEVSTAT_STARTEDAT), &pDevStatus->StartTime);
//
// Status string
//
if (pDevStatus->Status == 0) {
SetStatusTextField(hDlg, IDC_DEVSTAT_STATUS, pDevStatus->StatusString);
} else {
LPTSTR pStatusString;
pStatusString = MakeDeviceStatusString(pDevStatus->Status); SetStatusTextField(hDlg, IDC_DEVSTAT_STATUS, pStatusString); MemFree(pStatusString); }
return TRUE;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
case IDOK: case IDCANCEL:
EndDialog(hDlg, IDCANCEL); return TRUE; } break; }
return FALSE; }
VOID DoShowStatusDetails( HWND hDlg )
/*++
Routine Description:
Display detailed status of the currently selected fax device
Arguments:
hDlg - Window handle to the "Device Status" property page
Return Value:
NONE
--*/
{ HWND hwndLV; INT index; PFAX_DEVICE_STATUS pDevStatus = NULL;
//
// Get the index of the currently selected item and
// count the total number of items in the list view
//
if ((hwndLV = GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)) == NULL || (index = ListView_GetNextItem(hwndLV, -1, LVNI_ALL|LVNI_SELECTED)) < 0 || (index >= gConfigData->cDevices)) { return; }
//
// Call the fax service to get the status of the specified device
//
pDevStatus = FaxSvcGetDeviceStatus(gConfigData->hFaxSvc, gConfigData->pDevInfo[index].DeviceId);
if (pDevStatus == NULL) {
DisplayMessageDialog(hDlg, 0, 0, IDS_DEVICE_STATUS_ERROR, gConfigData->pDevInfo[index].DeviceName);
FaxFreeBuffer(pDevStatus); return; }
//
// Display appropriate status dialog depending on the current job type
//
switch (pDevStatus->JobType) {
case JT_SEND:
DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_SEND_STATUS), hDlg, SendStatusProc, (LPARAM) pDevStatus); break;
case JT_RECEIVE:
DialogBoxParam(ghInstance, MAKEINTRESOURCE(IDD_RECEIVE_STATUS), hDlg, ReceiveStatusProc, (LPARAM) pDevStatus); break;
default:
if (pDevStatus->JobType != 0) Error(("Unknown job type: %d\n", pDevStatus->JobType));
DisplayMessageDialog(hDlg, MB_OK | MB_ICONINFORMATION, IDS_DEVICE_STATUS, IDS_DEVICE_STATUS_IDLE, gConfigData->pDevInfo[index].DeviceName);
break; }
FaxFreeBuffer(pDevStatus); }
VOID HandleDevStatusListViewMessage( HWND hDlg, LPNMHDR pNMHdr )
/*++
Routine Description:
Handle notification events from the fax device list
Arguments:
hDlg - Window handle to the "Device Status" property page pNMHdr - Points to an NMHDR structure
Return Value:
NONE
--*/
{ HWND hwndLV = pNMHdr->hwndFrom;
switch (pNMHdr->code) {
case LVN_KEYDOWN:
if (((LV_KEYDOWN *) pNMHdr)->wVKey != VK_RETURN) break;
case NM_DBLCLK:
DoShowStatusDetails(hDlg); break; } }
BOOL DeviceStatusProc( HWND hDlg, UINT message, UINT wParam, LONG lParam )
/*++
Routine Description:
Procedure for handling the "Device Status" 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
--*/
{ LPNMHDR pNMHdr;
switch (message) {
case WM_INITDIALOG:
GetFaxDeviceAndConfigInfo(); return TRUE;
case WM_COMMAND:
switch (GET_WM_COMMAND_ID(wParam, lParam)) {
case IDC_REFRESH:
DoRefreshDevStatus(hDlg); return TRUE;
case IDC_DETAILS:
DoShowStatusDetails(hDlg); break; } break;
case WM_NOTIFY:
pNMHdr = (NMHDR *) lParam;
if (pNMHdr->hwndFrom == GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)) {
HandleDevStatusListViewMessage(hDlg, pNMHdr);
} else switch (pNMHdr->code) {
case PSN_SETACTIVE:
DoActivateDeviceStatus(hDlg); break;
case PSN_APPLY:
return PSNRET_NOERROR; } break;
case WM_HELP: case WM_CONTEXTMENU:
return HandleHelpPopup(hDlg, message, wParam, lParam, DEVICE_STATUS_PAGE); }
return FALSE; }
|