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