windows-nt/Source/XPSP1/NT/printscan/fax/print/faxprint/faxui/faxopts.c
2020-09-26 16:20:57 +08:00

449 lines
12 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1996 Microsoft Corporation
Module Name:
faxopts.c
Abstract:
Functions for handling the Fax Options property sheet page
Environment:
Fax driver user interface
Revision History:
01/16/96 -davidx-
Created it.
mm/dd/yy -author-
description
--*/
#include "faxui.h"
#include "faxhelp.h"
//
// Table for mapping control IDs to help indices
//
static ULONG_PTR faxOptionsHelpIDs[] = {
IDC_SEND_ASAP, IDH_FAXDEFAULT_SEND_ASAP,
IDC_SEND_AT_CHEAP, IDH_FAXDEFAULT_SEND_AT_CHEAP,
IDC_SEND_AT_TIME, IDH_FAXDEFAULT_SEND_AT_TIME,
IDC_PAPER_SIZE, IDH_FAXDEFAULT_PAPER_SIZE,
IDC_IMAGE_QUALITY, IDH_FAXDEFAULT_IMAGE_QUALITY,
IDC_PORTRAIT, IDH_FAXDEFAULT_PORTRAIT,
IDC_LANDSCAPE, IDH_FAXDEFAULT_LANDSCAPE,
IDC_BILLING_CODE, IDH_FAXDEFAULT_BILLING_CODE,
IDC_EMAIL, IDH_FAXDEFAULT_GENERAL_EMAIL_ADDRESS,
IDI_FAX_OPTIONS, (DWORD) -1,
IDC_TITLE, (DWORD) -1,
IDC_FAX_SEND_GRP, IDH_FAXDEFAULT_FAX_SEND_TIME_GRP,
IDC_DEFAULT_PRINT_SETUP_GRP, IDH_FAXDEFAULT_DEFAULT_PRINT_SETUP_GRP,
IDC_ORIENTATION, IDH_FAXDEFAULT_ORIENTATION,
IDC_SENDTIME, IDH_FAXDEFAULT_FAX_SEND_AT_TIME,
0, 0
};
VOID
DoInitializeFaxOptions(
HWND hDlg,
PUIDATA pUiData
)
/*++
Routine Description:
Initializes the Fax Options property sheet page with information from the registry
Arguments:
hDlg - Handle to the Fax Options property sheet page
pUiData - Points to our UIDATA structure
Return Value:
NONE
--*/
{
PDEVMODE pdmPublic = &pUiData->devmode.dmPublic;
PDMPRIVATE pdmPrivate = &pUiData->devmode.dmPrivate;
TCHAR buffer[MAX_STRING_LEN];
//TCHAR TimeFormat[32];
SYSTEMTIME st;
HWND hwndList,hTimeControl;
INT itemId;
TCHAR Is24H[2], IsRTL[2], *pszTimeFormat = TEXT("h : mm tt");
if (GetLocaleInfo( LOCALE_USER_DEFAULT,LOCALE_ITIME, Is24H,sizeof(Is24H) ) && Is24H[0] == TEXT('1')) {
pszTimeFormat = TEXT("H : mm");
}
else if (GetLocaleInfo( LOCALE_USER_DEFAULT,LOCALE_ITIMEMARKPOSN, IsRTL,sizeof(IsRTL) ) && IsRTL[0] == TEXT('1')) {
pszTimeFormat = TEXT("tt h : mm");
}
//
// Time to send
//
itemId = (pdmPrivate->whenToSend == SENDFAX_AT_CHEAP) ? IDC_SEND_AT_CHEAP :
(pdmPrivate->whenToSend == SENDFAX_AT_TIME) ? IDC_SEND_AT_TIME : IDC_SEND_ASAP;
CheckRadioButton(hDlg, IDC_SEND_ASAP, IDC_SEND_AT_TIME, itemId);
//
// Initialize the send-at time control
//
//LoadString(ghInstance,IDS_WIZ_TIME_FORMAT,TimeFormat,sizeof(TimeFormat));
hTimeControl = GetDlgItem(hDlg, IDC_SENDTIME);
//DateTime_SetFormat( hTimeControl,TimeFormat );
DateTime_SetFormat( hTimeControl,pszTimeFormat );
GetLocalTime(&st);
st.wHour = pdmPrivate->sendAtTime.Hour;
st.wMinute = pdmPrivate->sendAtTime.Minute;
DateTime_SetSystemtime( hTimeControl, GDT_VALID, &st );
EnableWindow(hTimeControl, pdmPrivate->whenToSend == SENDFAX_AT_TIME);
//
// Initialize the print setup controls:
// paper size
// image quality
// orientation
// billing code
//
if (hwndList = GetDlgItem(hDlg, IDC_PAPER_SIZE)) {
LPTSTR pFormName = pUiData->pFormNames;
INT listIdx;
for (itemId=0; itemId < pUiData->cForms; itemId++, pFormName += CCHPAPERNAME) {
if ((listIdx = (INT)SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM) pFormName)) != CB_ERR) {
SendMessage(hwndList, CB_SETITEMDATA, listIdx, itemId);
if (_tcscmp(pFormName, pdmPublic->dmFormName) == EQUAL_STRING)
SendMessage(hwndList, CB_SETCURSEL, listIdx, 0);
}
}
}
if (hwndList = GetDlgItem(hDlg, IDC_IMAGE_QUALITY)) {
LoadString(ghInstance, IDS_QUALITY_NORMAL, buffer, MAX_STRING_LEN);
SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM) buffer);
LoadString(ghInstance, IDS_QUALITY_DRAFT, buffer, MAX_STRING_LEN);
SendMessage(hwndList, CB_ADDSTRING, 0, (LPARAM) buffer);
itemId = (pdmPublic->dmYResolution == FAXRES_VERTDRAFT) ? 1 : 0;
SendMessage(hwndList, CB_SETCURSEL, itemId, 0);
}
itemId = (pdmPublic->dmOrientation == DMORIENT_LANDSCAPE) ?
IDC_LANDSCAPE : IDC_PORTRAIT;
CheckDlgButton(hDlg, itemId, TRUE);
SendDlgItemMessage(hDlg, IDC_BILLING_CODE, EM_SETLIMITTEXT, MAX_BILLING_CODE-1, 0);
SetDlgItemText(hDlg, IDC_BILLING_CODE, pdmPrivate->billingCode);
SendDlgItemMessage(hDlg, IDC_EMAIL, EM_SETLIMITTEXT, MAX_EMAIL_ADDRESS-1, 0);
SetDlgItemText(hDlg, IDC_EMAIL, pdmPrivate->emailAddress);
//
// Disable all controls if the user has no permission
//
if (! pUiData->hasPermission) {
EnableWindow(GetDlgItem(hDlg, IDC_SEND_ASAP), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_SEND_AT_CHEAP), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_SEND_AT_TIME), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PAPER_SIZE), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_IMAGE_QUALITY), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_PORTRAIT), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_LANDSCAPE), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_BILLING_CODE), FALSE);
EnableWindow(GetDlgItem(hDlg, IDC_EMAIL), FALSE);
}
}
VOID
DoSaveFaxOptions(
HWND hDlg,
PUIDATA pUiData
)
/*++
Routine Description:
Save the information on the Fax Options property sheet page to registry
Arguments:
hDlg - Handle to the Fax Options property sheet page
pUiData - Points to our UIDATA structure
Return Value:
NONE
--*/
{
PDEVMODE pdmPublic = &pUiData->devmode.dmPublic;
PDMPRIVATE pdmPrivate = &pUiData->devmode.dmPrivate;
HWND hwndList;
INT listIdx;
DWORD rVal;
SYSTEMTIME SendTime;
//
// Time to send
//
pdmPrivate->whenToSend =
IsDlgButtonChecked(hDlg, IDC_SEND_AT_CHEAP) ? SENDFAX_AT_CHEAP :
IsDlgButtonChecked(hDlg, IDC_SEND_AT_TIME) ? SENDFAX_AT_TIME : SENDFAX_ASAP;
//
// Retrieve the current settings of send-at time control
//
rVal = DateTime_GetSystemtime(GetDlgItem(hDlg, IDC_SENDTIME), &SendTime);
pdmPrivate->sendAtTime.Hour = SendTime.wHour;
pdmPrivate->sendAtTime.Minute = SendTime.wMinute;
//
// Retrieve the current settings of print setup controls:
// paper size
// image quality
// orientation
// billing code
//
if ((hwndList = GetDlgItem(hDlg, IDC_PAPER_SIZE)) &&
(listIdx = (INT)SendMessage(hwndList, CB_GETCURSEL, 0, 0)) != CB_ERR)
{
listIdx = (INT)SendMessage(hwndList, CB_GETITEMDATA, listIdx, 0);
if (listIdx >= 0 && listIdx < pUiData->cForms) {
pdmPublic->dmFields &= ~(DM_PAPERLENGTH|DM_PAPERWIDTH);
pdmPublic->dmFields |= DM_FORMNAME;
pdmPublic->dmPaperSize = pUiData->pPapers[listIdx];
CopyStringW(pdmPublic->dmFormName,
pUiData->pFormNames + listIdx * CCHPAPERNAME,
CCHFORMNAME);
}
}
pdmPublic->dmPrintQuality = FAXRES_HORIZONTAL;
pdmPublic->dmYResolution =
(SendDlgItemMessage(hDlg, IDC_IMAGE_QUALITY, CB_GETCURSEL, 0, 0) == 1) ?
FAXRES_VERTDRAFT :
FAXRES_VERTICAL;
pdmPublic->dmOrientation =
IsDlgButtonChecked(hDlg, IDC_LANDSCAPE) ? DMORIENT_LANDSCAPE : DMORIENT_PORTRAIT;
GetDlgItemText(hDlg, IDC_BILLING_CODE, pdmPrivate->billingCode, MAX_BILLING_CODE);
GetDlgItemText(hDlg, IDC_EMAIL, pdmPrivate->emailAddress, MAX_EMAIL_ADDRESS);
}
INT_PTR
FaxOptionsProc(
HWND hDlg,
UINT message,
WPARAM wParam,
LPARAM lParam
)
/*++
Routine Description:
Procedure for handling Fax Options property sheet page
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
--*/
{
PUIDATA pUiData;
WORD cmdId;
static BOOL bPortrait;
LPHELPINFO lpHelpInfo;
switch (message) {
case WM_INITDIALOG:
//
// Remember the pointer to our UIDATA structure
//
lParam = ((PROPSHEETPAGE *) lParam)->lParam;
pUiData = (PUIDATA) lParam;
Assert(ValidUiData(pUiData));
SetWindowLongPtr(hDlg, DWLP_USER, lParam);
//
// Intitialize the controls with information from the registry
//
DoInitializeFaxOptions(hDlg, pUiData);
bPortrait = IsDlgButtonChecked(hDlg,IDC_PORTRAIT);
return TRUE;
case WM_COMMAND:
switch (cmdId = GET_WM_COMMAND_ID(wParam, lParam)) {
case IDC_SEND_ASAP:
case IDC_SEND_AT_CHEAP:
case IDC_SEND_AT_TIME:
//
// Enable/disable time control depending on whether user
// has chosen to send fax at specific time.
//
EnableWindow(GetDlgItem(hDlg, IDC_SENDTIME), cmdId == IDC_SEND_AT_TIME);
PropSheet_Changed(GetParent(hDlg),hDlg);
return TRUE;
case IDC_SENDTIME:
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
case IDC_BILLING_CODE:
case IDC_EMAIL:
PropSheet_Changed(GetParent(hDlg),hDlg);
break;
};
if (HIWORD(wParam) == CBN_SELCHANGE) {
if (GetDlgCtrlID((HWND)lParam) == IDC_IMAGE_QUALITY ||
GetDlgCtrlID((HWND)lParam) == IDC_PAPER_SIZE ) {
PropSheet_Changed(GetParent(hDlg),hDlg);
}
}
if (HIWORD(wParam) == BN_CLICKED) {
if ((LOWORD(wParam) == IDC_PORTRAIT && !bPortrait) ||
(LOWORD(wParam) == IDC_LANDSCAPE && bPortrait)) {
PropSheet_Changed(GetParent(hDlg),hDlg);
}
}
break;
case WM_NOTIFY:
if (((NMHDR *) lParam)->code == PSN_APPLY) {
pUiData = (PUIDATA) GetWindowLongPtr(hDlg, DWLP_USER);
Assert(ValidUiData(pUiData));
//
// User pressed OK or Apply - validate inputs and save changes
//
DoSaveFaxOptions(hDlg, pUiData);
//
// HACK: Inform common UI library that user has pressed OK
//
pUiData->pfnComPropSheet(pUiData->hComPropSheet,
CPSFUNC_SET_RESULT,
(LPARAM) pUiData->hFaxOptsPage,
CPSUI_OK);
return TRUE;
} else if (((NMHDR *) lParam)->code == DTN_DATETIMECHANGE) {
PropSheet_Changed(GetParent(hDlg),hDlg);
}
break;
case WM_HELP:
lpHelpInfo = (LPHELPINFO) lParam;
if (IsChild(hDlg, lpHelpInfo->hItemHandle)) {
while (GetParent(lpHelpInfo->hItemHandle) != hDlg) {
lpHelpInfo->hItemHandle = GetParent(lpHelpInfo->hItemHandle);
}
}
case WM_CONTEXTMENU:
FAXWINHELP(message, wParam, lParam, faxOptionsHelpIDs);
/*++
pUiData = (PUIDATA) GetWindowLongPtr(hDlg, DWLP_USER);
if (ValidUiData(pUiData) && pUiData->pHelpFile) {
HWND hwndHelp;
INT helpCommand;
if (message == WM_HELP) {
hwndHelp = ((LPHELPINFO) lParam)->hItemHandle;
helpCommand = HELP_WM_HELP;
} else {
hwndHelp = (HWND) wParam;
helpCommand = HELP_CONTEXTMENU;
}
WinHelp(hwndHelp, pUiData->pHelpFile, helpCommand, (ULONG_PTR) faxOptionsHelpIDs);
} else
Assert(FALSE);
--*/
break;
}
return FALSE;
}