windows-nt/Source/XPSP1/NT/printscan/fax/config/dll/priority.c

303 lines
5.7 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
priority.c
Abstract:
Functions for handling events in the "Device Priority" tab of
the fax server configuration property sheet
Environment:
Fax configuration applet
Revision History:
05/06/96 -davidx-
Created it.
mm/dd/yy -author-
description
--*/
#include "faxcpl.h"
VOID
DoActivateDevicePriority(
HWND hDlg
)
/*++
Routine Description:
Called when the "Device Priority" property page is activated
Arguments:
hDlg - Window handle to the "Device Priority" property page
Return Value:
NONE
--*/
{
//
// Information about the fax device list view
//
static COLUMNINFO faxDeviceListViewColumnInfo[] = {
{ COLUMN_DEVICE_NAME, 1 },
{ 0, 0 },
};
HWND hwndLV;
//
// Reinitialize the fax device list view if necessary
//
if (!IsFaxDeviceListInSync(DEVICE_PRIORITY_PAGE) &&
(hwndLV = GetDlgItem(hDlg, IDC_FAX_DEVICE_LIST)))
{
InitFaxDeviceListView(hwndLV, 0, faxDeviceListViewColumnInfo);
}
SetFaxDeviceListInSync(DEVICE_PRIORITY_PAGE);
}
BOOL
DoSaveDevicePriority(
HWND hDlg
)
/*++
Routine Description:
Save the information on the "Device Priority" property page
Arguments:
hDlg - Handle to the "Device Priority" property page
Return Value:
TRUE if successful, FALSE if there is an error
--*/
{
INT index;
//
// Check if anything on this page was changed
//
Verbose(("Saving 'Receive Options' page ...\n"));
if (! GetChangedFlag(DEVICE_PRIORITY_PAGE))
return TRUE;
//
// Assign priority to fax devices: smaller number corresponds to lower priority
//
for (index=0; index < gConfigData->cDevices; index++)
gConfigData->pDevInfo[index].Priority = gConfigData->cDevices - index + 1;
//
// Save the fax device information if this is the last modified page
//
gConfigData->priorityChanged = TRUE;
return SaveFaxDeviceAndConfigInfo(hDlg, DEVICE_PRIORITY_PAGE);
}
VOID
DoChangeDevicePriority(
HWND hDlg,
INT direction
)
/*++
Routine Description:
Increment or decrement the priority of current selected fax device
Arguments:
hDlg - Handle to the "Device Priority" property page
direction - Whether to increment or decrement the device priority
-1 to increment device priority
1 to decrement device priority
Return Value:
NONE
--*/
{
HWND hwndLV;
INT index, newIndex, nItems;
//
// 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 ||
(nItems = ListView_GetItemCount(hwndLV)) == -1 ||
(index = ListView_GetNextItem(hwndLV, -1, LVNI_ALL|LVNI_SELECTED)) == -1)
{
return;
}
//
// Calculate the new item index
//
Assert(nItems <= gConfigData->cDevices && index < nItems);
if ((newIndex = index + direction) >= 0 && newIndex < nItems) {
CONFIG_PORT_INFO_2 portInfo;
portInfo = gConfigData->pDevInfo[index];
gConfigData->pDevInfo[index] = gConfigData->pDevInfo[newIndex];
gConfigData->pDevInfo[newIndex] = portInfo;
gConfigData->faxDeviceSyncFlag = 0;
DoActivateDevicePriority(hDlg);
//
// Keep the original fax device selected
//
ListView_SetItemState(hwndLV,
newIndex,
LVIS_SELECTED|LVIS_FOCUSED,
LVIS_SELECTED|LVIS_FOCUSED);
}
}
BOOL
DevicePriorityProc(
HWND hDlg,
UINT message,
UINT wParam,
LONG lParam
)
/*++
Routine Description:
Procedure for handling the "Device Priority" 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;
switch (message) {
case WM_INITDIALOG:
GetFaxDeviceAndConfigInfo();
SendMessage(GetDlgItem(hDlg, IDC_MOVEUP),
BM_SETIMAGE,
IMAGE_ICON,
(WPARAM) LoadIcon(ghInstance, MAKEINTRESOURCE(IDI_ARROWUP)));
SendMessage(GetDlgItem(hDlg, IDC_MOVEDOWN),
BM_SETIMAGE,
IMAGE_ICON,
(LPARAM) LoadIcon(ghInstance, MAKEINTRESOURCE(IDI_ARROWDOWN)));
return TRUE;
case WM_COMMAND:
switch (cmdId = GET_WM_COMMAND_ID(wParam, lParam)) {
case IDC_MOVEUP:
case IDC_MOVEDOWN:
DoChangeDevicePriority(hDlg, (cmdId == IDC_MOVEUP) ? -1 : 1);
break;
default:
return FALSE;
}
SetChangedFlag(hDlg, DEVICE_PRIORITY_PAGE, TRUE);
return TRUE;
case WM_NOTIFY:
switch (((NMHDR *) lParam)->code) {
case PSN_SETACTIVE:
DoActivateDevicePriority(hDlg);
break;
case PSN_APPLY:
//
// User pressed OK or Apply - validate inputs and save changes
//
if (! DoSaveDevicePriority(hDlg)) {
SetWindowLong(hDlg, DWL_MSGRESULT, -1);
return PSNRET_INVALID_NOCHANGEPAGE;
} else {
SetChangedFlag(hDlg, DEVICE_PRIORITY_PAGE, FALSE);
return PSNRET_NOERROR;
}
}
break;
case WM_HELP:
case WM_CONTEXTMENU:
return HandleHelpPopup(hDlg, message, wParam, lParam, DEVICE_PRIORITY_PAGE);
}
return FALSE;
}