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