586 lines
19 KiB
C++
586 lines
19 KiB
C++
/*++
|
|
|
|
Copyright (c) 1996 Microsoft Corporation
|
|
|
|
Module Name:
|
|
|
|
config.cpp
|
|
|
|
Abstract:
|
|
|
|
This module contains routines for the fax config dialog.
|
|
|
|
Author:
|
|
|
|
Wesley Witt (wesw) 13-Aug-1996
|
|
|
|
--*/
|
|
|
|
#include "faxxp.h"
|
|
#include "faxhelp.h"
|
|
#include "resource.h"
|
|
#pragma hdrstop
|
|
|
|
|
|
|
|
VOID
|
|
AddCoverPagesToList(
|
|
HWND hwndList,
|
|
LPSTR pDirPath,
|
|
BOOL ServerCoverPage
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Add the cover page files in the specified directory to a listbox
|
|
|
|
Arguments:
|
|
|
|
hwndList - Handle to a list window
|
|
pDirPath - Directory to look for coverpage files
|
|
ServerCoverPage - TRUE if the dir contains server cover pages
|
|
|
|
Return Value:
|
|
|
|
NONE
|
|
|
|
--*/
|
|
|
|
{
|
|
WIN32_FIND_DATA findData;
|
|
CHAR filename[MAX_PATH];
|
|
CHAR CpName[MAX_PATH];
|
|
HANDLE hFindFile;
|
|
LPSTR pFilename;
|
|
LPSTR pExtension;
|
|
INT listIndex;
|
|
INT dirLen;
|
|
INT fileLen;
|
|
INT flags = CPFLAG_LINK;
|
|
INT Cnt = 2;
|
|
|
|
|
|
//
|
|
// Copy the directory path to a local buffer
|
|
//
|
|
|
|
if (pDirPath == NULL || pDirPath[0] == 0) {
|
|
return;
|
|
}
|
|
|
|
if ((dirLen = strlen( pDirPath )) >= MAX_PATH - MAX_FILENAME_EXT - 1) {
|
|
return;
|
|
}
|
|
|
|
strcpy( filename, pDirPath );
|
|
if (filename[dirLen] != '\\') {
|
|
filename[dirLen] = '\\';
|
|
filename[dirLen+1] = '\0';
|
|
dirLen++;
|
|
}
|
|
|
|
//
|
|
// Go through the following loop twice:
|
|
// Once to add the files with .ncp extension
|
|
// Again to add the files with .lnk extension
|
|
//
|
|
// Don't chase links for server based cover pages
|
|
//
|
|
|
|
while( Cnt ) {
|
|
|
|
//
|
|
// Generate a specification for the files we're interested in
|
|
//
|
|
|
|
pFilename = &filename[dirLen];
|
|
*pFilename = TEXT('*');
|
|
strcpy( pFilename+1, ServerCoverPage ? CP_FILENAME_EXT : (flags & CPFLAG_LINK) ? LNK_FILENAME_EXT : CP_FILENAME_EXT );
|
|
|
|
//
|
|
// Call FindFirstFile/FindNextFile to enumerate the files
|
|
// matching our specification
|
|
//
|
|
|
|
hFindFile = FindFirstFile( filename, &findData );
|
|
|
|
if (hFindFile != INVALID_HANDLE_VALUE) {
|
|
|
|
do {
|
|
|
|
//
|
|
// Exclude directories and hidden files
|
|
//
|
|
|
|
if (findData.dwFileAttributes & (FILE_ATTRIBUTE_HIDDEN|FILE_ATTRIBUTE_DIRECTORY)) {
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// Make sure we have enough room to store the full pathname
|
|
//
|
|
|
|
if ((fileLen = strlen( findData.cFileName)) <= MAX_FILENAME_EXT ) {
|
|
continue;
|
|
}
|
|
|
|
if (fileLen + dirLen >= MAX_PATH) {
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// If we're chasing links, make sure the link refers to
|
|
// a cover page file.
|
|
//
|
|
|
|
if (!ServerCoverPage && (flags & CPFLAG_LINK)) {
|
|
|
|
strcpy( pFilename, findData.cFileName );
|
|
|
|
if (!IsCoverPageShortcut(filename)) {
|
|
continue;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Don't display the filename extension
|
|
//
|
|
|
|
if (pExtension = strrchr(findData.cFileName,'.')) {
|
|
*pExtension = NULL;
|
|
}
|
|
|
|
//
|
|
// Add the cover page name to the list window
|
|
//
|
|
|
|
strcpy( CpName, findData.cFileName );
|
|
if ( ! ServerCoverPage )
|
|
{
|
|
char szPersonal[30];
|
|
LoadString( FaxXphInstance, IDS_PERSONAL, szPersonal, 30 );
|
|
strcat( CpName, (char *) " " );
|
|
strcat( CpName, szPersonal );
|
|
}
|
|
|
|
listIndex = (INT)SendMessage(
|
|
hwndList,
|
|
LB_ADDSTRING,
|
|
0,
|
|
(LPARAM) CpName
|
|
);
|
|
|
|
if (listIndex != LB_ERR) {
|
|
SendMessage( hwndList, LB_SETITEMDATA, listIndex, ServerCoverPage );
|
|
}
|
|
|
|
} while (FindNextFile(hFindFile, &findData));
|
|
|
|
FindClose(hFindFile);
|
|
}
|
|
|
|
flags ^= CPFLAG_LINK;
|
|
Cnt -= 1;
|
|
if (ServerCoverPage) {
|
|
Cnt -= 1;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
VOID
|
|
DrawSampleText(
|
|
HWND hDlg,
|
|
HDC hDC,
|
|
PFAXXP_CONFIG FaxConfig
|
|
)
|
|
{
|
|
|
|
int PointSize;
|
|
TCHAR PointSizeBuffer[16];
|
|
TCHAR FontTypeBuffer[32];
|
|
BOOL bItalic = FALSE;
|
|
BOOL bBold = FALSE;
|
|
|
|
PointSize = abs ( MulDiv((int) FaxConfig->FontStruct.lfHeight, 72, GetDeviceCaps( hDC, LOGPIXELSY)));
|
|
_stprintf( PointSizeBuffer, TEXT("%d"), PointSize );
|
|
SetWindowText( GetDlgItem( hDlg, IDC_FONT_SIZE ), PointSizeBuffer );
|
|
|
|
SetWindowText( GetDlgItem( hDlg, IDC_FONT_NAME), FaxConfig->FontStruct.lfFaceName );
|
|
|
|
//
|
|
// get the font type
|
|
//
|
|
ZeroMemory(FontTypeBuffer, sizeof(FontTypeBuffer) );
|
|
if (FaxConfig->FontStruct.lfItalic) {
|
|
bItalic = TRUE;
|
|
}
|
|
|
|
if ( FaxConfig->FontStruct.lfWeight == FW_BOLD ) {
|
|
bBold = TRUE;
|
|
}
|
|
|
|
if (bBold) {
|
|
LoadString(FaxXphInstance, IDS_FONT_BOLD, FontTypeBuffer,sizeof(FontTypeBuffer)/sizeof(TCHAR) );
|
|
// concat "italic"
|
|
if (bItalic) {
|
|
LoadString(FaxXphInstance,
|
|
IDS_FONT_ITALIC,
|
|
&FontTypeBuffer[lstrlen(FontTypeBuffer)],
|
|
sizeof(FontTypeBuffer)/sizeof(TCHAR) - lstrlen(FontTypeBuffer) );
|
|
}
|
|
} else if (bItalic) {
|
|
LoadString(FaxXphInstance, IDS_FONT_ITALIC, FontTypeBuffer,sizeof(FontTypeBuffer)/sizeof(TCHAR) );
|
|
} else {
|
|
LoadString(FaxXphInstance, IDS_FONT_REGULAR, FontTypeBuffer,sizeof(FontTypeBuffer)/sizeof(TCHAR) );
|
|
}
|
|
|
|
|
|
SetWindowText( GetDlgItem( hDlg, IDC_FONT_STYLE), FontTypeBuffer );
|
|
|
|
|
|
}
|
|
|
|
INT_PTR CALLBACK
|
|
ConfigDlgProc(
|
|
HWND hDlg,
|
|
UINT message,
|
|
WPARAM wParam,
|
|
LPARAM lParam
|
|
)
|
|
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Dialog procedure for the fax mail transport configuration
|
|
|
|
Arguments:
|
|
|
|
hDlg - Window handle for this dialog
|
|
message - Message number
|
|
wParam - Parameter #1
|
|
lParam - Parameter #2
|
|
|
|
Return Value:
|
|
|
|
TRUE - Message was handled
|
|
FALSE - Message was NOT handled
|
|
|
|
--*/
|
|
|
|
{
|
|
static PFAXXP_CONFIG FaxConfig;
|
|
static HWND hwndListPrn;
|
|
static HWND hwndListCov;
|
|
static const DWORD faxextHelpIDs[] = {
|
|
IDC_PRINTER_LIST, IDH_FAXMAILTRANSPORT_FAX_PRINTERS,
|
|
IDC_STATIC_PRINTERS, IDH_FAXMAILTRANSPORT_FAX_PRINTERS,
|
|
IDC_USE_COVERPAGE, IDH_FAXMAILTRANSPORT_INCLUDE_COVER_PAGE,
|
|
IDC_COVERPAGE_LIST, IDH_FAXMAILTRANSPORT_COVER_PAGES,
|
|
IDC_COVERPAGE_LIST_LABEL, IDH_FAXMAILTRANSPORT_COVER_PAGES,
|
|
IDCSTATIC_FONT_GROUP, IDH_FAXMAILTRANSPORT_DEFAULT_MESSAGE_FONT_GRP,
|
|
IDCSTATIC_FONT, IDH_FAXMAILTRANSPORT_FONT,
|
|
IDCSTATIC_FONTSTYLE, IDH_FAXMAILTRANSPORT_FONT_STYLE,
|
|
IDCSTATIC_FONTSIZE, IDH_FAXMAILTRANSPORT_SIZE,
|
|
IDC_FONT_NAME, IDH_FAXMAILTRANSPORT_FONT,
|
|
IDC_FONT_STYLE, IDH_FAXMAILTRANSPORT_FONT_STYLE,
|
|
IDC_FONT_SIZE, IDH_FAXMAILTRANSPORT_SIZE,
|
|
IDC_SET_FONT, IDH_FAXMAILTRANSPORT_SET_FONT,
|
|
IDC_STATIC, (LONG)IDH_INACTIVE,
|
|
IDC_STATIC_ICON, (LONG)IDH_INACTIVE,
|
|
IDC_STATIC_TITLE, (LONG)IDH_INACTIVE,
|
|
0, 0
|
|
};
|
|
|
|
PPRINTER_INFO_2 PrinterInfo;
|
|
DWORD CountPrinters;
|
|
DWORD Selection = 0;
|
|
CHAR Buffer[256];
|
|
CHAR CpDir[MAX_PATH];
|
|
LPSTR p;
|
|
PAINTSTRUCT ps;
|
|
#ifndef WIN95
|
|
HANDLE hFax;
|
|
PFAX_CONFIGURATION pFaxConfiguration;
|
|
#endif
|
|
|
|
|
|
|
|
switch( message ) {
|
|
case WM_INITDIALOG:
|
|
FaxConfig = (PFAXXP_CONFIG) lParam;
|
|
#ifndef WIN95
|
|
//
|
|
// defer the server CP check to this point so we don't fire up fax service
|
|
// unless we really need this property
|
|
//
|
|
if (FaxConnectFaxServer(FaxConfig->ServerName,&hFax) ){
|
|
if (FaxGetConfiguration(hFax,&pFaxConfiguration) ){
|
|
FaxConfig->ServerCpOnly = pFaxConfiguration->ServerCp;
|
|
FaxFreeBuffer(pFaxConfiguration);
|
|
}
|
|
FaxClose(hFax);
|
|
}
|
|
#endif
|
|
|
|
hwndListPrn = GetDlgItem( hDlg, IDC_PRINTER_LIST );
|
|
hwndListCov = GetDlgItem( hDlg, IDC_COVERPAGE_LIST );
|
|
|
|
//
|
|
// populate the printers listbox
|
|
//
|
|
Buffer[0] = 0;
|
|
PrinterInfo = (PPRINTER_INFO_2) MyEnumPrinters( NULL, 2, &CountPrinters, PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS );
|
|
if (PrinterInfo) {
|
|
DWORD i,j;
|
|
for (i=0,j=0; i<CountPrinters; i++) {
|
|
if (strcmp( PrinterInfo[i].pDriverName, FAX_DRIVER_NAME ) == 0) {
|
|
SendMessage( hwndListPrn, CB_ADDSTRING, 0, (LPARAM) PrinterInfo[i].pPrinterName );
|
|
if (FaxConfig->PrinterName && strcmp( PrinterInfo[i].pPrinterName, FaxConfig->PrinterName ) == 0) {
|
|
#if defined(WIN95)
|
|
if (PrinterInfo[i].pPortName) {
|
|
strcpy( Buffer, PrinterInfo[i].pPortName );
|
|
}
|
|
#else
|
|
if (PrinterInfo[i].pServerName) {
|
|
strcpy( Buffer, PrinterInfo[i].pServerName );
|
|
}
|
|
#endif
|
|
}
|
|
j += 1;
|
|
}
|
|
}
|
|
MemFree( PrinterInfo );
|
|
SendMessage( hwndListPrn, CB_SELECTSTRING, (WPARAM) -1, (LPARAM) FaxConfig->PrinterName );
|
|
}
|
|
|
|
if (FaxConfig->UseCoverPage) {
|
|
CheckDlgButton( hDlg, IDC_USE_COVERPAGE, BST_CHECKED );
|
|
} else {
|
|
EnableWindow( GetDlgItem( hDlg, IDC_COVERPAGE_LIST ), FALSE );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_COVERPAGE_LIST_LABEL ), FALSE );
|
|
}
|
|
|
|
#if defined(WIN95)
|
|
if (Buffer[0]) {
|
|
char *LastWhack;
|
|
LastWhack = strrchr(Buffer, '\\');
|
|
if (LastWhack != NULL)
|
|
*LastWhack = '\0';
|
|
strcpy(CpDir, Buffer);
|
|
strcat(CpDir, "\\print$\\coverpg\\");
|
|
} else {
|
|
GetServerCpDir( NULL, CpDir, sizeof(CpDir) );
|
|
}
|
|
|
|
AddCoverPagesToList( hwndListCov, CpDir, TRUE );
|
|
|
|
GetWindowsDirectory( CpDir, sizeof(CpDir) );
|
|
strcat( CpDir, "\\spool\\fax\\coverpg\\" );
|
|
AddCoverPagesToList( hwndListCov, CpDir, FALSE );
|
|
#else
|
|
GetServerCpDir( Buffer[0] ? Buffer : NULL, CpDir, sizeof(CpDir) );
|
|
AddCoverPagesToList( hwndListCov, CpDir, TRUE );
|
|
|
|
|
|
if (!FaxConfig->ServerCpOnly) {
|
|
GetClientCpDir( CpDir, sizeof(CpDir) );
|
|
AddCoverPagesToList( hwndListCov, CpDir, FALSE );
|
|
}
|
|
#endif
|
|
strcpy( Buffer, FaxConfig->CoverPageName );
|
|
|
|
if ( ! FaxConfig->ServerCoverPage )
|
|
{
|
|
char szPersonal[30];
|
|
LoadString( FaxXphInstance, IDS_PERSONAL, szPersonal, 30 );
|
|
strcat( Buffer, (char *) " " );
|
|
strcat( Buffer, szPersonal );
|
|
}
|
|
|
|
Selection = (DWORD)SendMessage( hwndListCov, LB_FINDSTRING, 0, (LPARAM) Buffer );
|
|
if (Selection == LB_ERR) {
|
|
Selection = 0;
|
|
}
|
|
|
|
SendMessage( hwndListCov, LB_SETCURSEL, (WPARAM) Selection, 0 );
|
|
break;
|
|
|
|
case ( WM_PAINT ) :
|
|
if (BeginPaint( hDlg, &ps )) {
|
|
DrawSampleText( hDlg, ps.hdc, FaxConfig );
|
|
EndPaint( hDlg, &ps );
|
|
}
|
|
break;
|
|
|
|
case WM_COMMAND:
|
|
if (HIWORD(wParam) == BN_CLICKED) {
|
|
if (LOWORD(wParam) == IDC_USE_COVERPAGE) {
|
|
if (IsDlgButtonChecked( hDlg, IDC_USE_COVERPAGE ) == BST_CHECKED) {
|
|
EnableWindow( GetDlgItem( hDlg, IDC_COVERPAGE_LIST ), TRUE );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_COVERPAGE_LIST_LABEL ), TRUE );
|
|
} else {
|
|
EnableWindow( GetDlgItem( hDlg, IDC_COVERPAGE_LIST ), FALSE );
|
|
EnableWindow( GetDlgItem( hDlg, IDC_COVERPAGE_LIST_LABEL ), FALSE );
|
|
}
|
|
return FALSE;
|
|
}
|
|
}
|
|
|
|
if (HIWORD(wParam) == CBN_SELCHANGE && LOWORD(wParam) == IDC_PRINTER_LIST) {
|
|
char SelectedPrinter[50];
|
|
|
|
//
|
|
// delete the old items from the list
|
|
//
|
|
SendMessage(hwndListCov, LB_RESETCONTENT, 0, 0);
|
|
|
|
Selection = (DWORD)SendMessage( hwndListPrn, CB_GETCURSEL, 0, 0 );
|
|
SendMessage( hwndListPrn, CB_GETLBTEXT, Selection, (LPARAM) SelectedPrinter );
|
|
|
|
Buffer[0] = 0;
|
|
PrinterInfo = (PPRINTER_INFO_2) MyEnumPrinters( NULL, 2, &CountPrinters, PRINTER_ENUM_LOCAL | PRINTER_ENUM_CONNECTIONS );
|
|
if (PrinterInfo) {
|
|
DWORD i;
|
|
for (i=0; i<CountPrinters; i++) {
|
|
if (strcmp( PrinterInfo[i].pDriverName, FAX_DRIVER_NAME ) == 0) {
|
|
if (strcmp( PrinterInfo[i].pPrinterName, SelectedPrinter ) == 0) {
|
|
if (PrinterInfo[i].pServerName) {
|
|
strcpy( Buffer, PrinterInfo[i].pServerName );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
MemFree( PrinterInfo );
|
|
}
|
|
#ifndef WIN95
|
|
GetServerCpDir( Buffer[0] ? Buffer : NULL, CpDir, sizeof(CpDir) );
|
|
AddCoverPagesToList( hwndListCov, CpDir, TRUE );
|
|
|
|
BOOL ServerChanged = FALSE;
|
|
if (!FaxConfig->ServerName) {
|
|
if (Buffer[0]) {
|
|
ServerChanged = TRUE;
|
|
}
|
|
} else if (strcmp(Buffer,FaxConfig->ServerName) != 0) {
|
|
ServerChanged = TRUE;
|
|
}
|
|
|
|
if (ServerChanged) {
|
|
|
|
//
|
|
// refresh server name
|
|
//
|
|
if (FaxConfig->ServerName) MemFree(FaxConfig->ServerName);
|
|
FaxConfig->ServerName = Buffer[0] ? StringDup(Buffer) : NULL ;
|
|
|
|
HANDLE hFax;
|
|
PFAX_CONFIGURATION pFaxConfiguration;
|
|
|
|
|
|
//
|
|
// get the servercp flag
|
|
//
|
|
FaxConfig->ServerCpOnly = FALSE;
|
|
if (FaxConnectFaxServer(FaxConfig->ServerName,&hFax) ){
|
|
if (FaxGetConfiguration(hFax,&pFaxConfiguration) ) {
|
|
FaxConfig->ServerCpOnly = pFaxConfiguration->ServerCp;
|
|
FaxFreeBuffer(pFaxConfiguration);
|
|
}
|
|
FaxClose(hFax);
|
|
}
|
|
}
|
|
|
|
//
|
|
// don't add client coverpages if FaxConfig->ServerCpOnly is set to true
|
|
//
|
|
if (! FaxConfig->ServerCpOnly) {
|
|
GetClientCpDir( CpDir, sizeof(CpDir) );
|
|
AddCoverPagesToList( hwndListCov, CpDir, FALSE );
|
|
}
|
|
#else
|
|
if (Buffer[0]) {
|
|
strcpy(CpDir, Buffer);
|
|
strcat(CpDir, "\\print$\\coverpg\\");
|
|
} else {
|
|
GetServerCpDir( NULL, CpDir, sizeof(CpDir) );
|
|
}
|
|
|
|
AddCoverPagesToList( hwndListCov, CpDir, TRUE );
|
|
|
|
GetWindowsDirectory( CpDir, sizeof(CpDir) );
|
|
strcat( CpDir, "\\spool\\fax\\coverpg\\" );
|
|
AddCoverPagesToList( hwndListCov, CpDir, FALSE );
|
|
#endif
|
|
}
|
|
|
|
switch (wParam) {
|
|
case IDC_SET_FONT:
|
|
{
|
|
CHOOSEFONT cf;
|
|
LOGFONT FontStruct;
|
|
|
|
CopyMemory( &FontStruct, &FaxConfig->FontStruct, sizeof(LOGFONT) );
|
|
|
|
cf.lStructSize = sizeof(CHOOSEFONT);
|
|
cf.hwndOwner = hDlg;
|
|
cf.lpLogFont = &FontStruct;
|
|
cf.Flags = CF_INITTOLOGFONTSTRUCT | CF_SCREENFONTS;
|
|
cf.rgbColors = 0;
|
|
cf.lCustData = 0;
|
|
cf.lpfnHook = NULL;
|
|
cf.lpTemplateName = NULL;
|
|
cf.hInstance = NULL;
|
|
cf.lpszStyle = NULL;
|
|
cf.nFontType = SCREEN_FONTTYPE;
|
|
cf.nSizeMin = 0;
|
|
cf.nSizeMax = 0;
|
|
|
|
if (ChooseFont(&cf)) {
|
|
CopyMemory( &FaxConfig->FontStruct, &FontStruct, sizeof(LOGFONT) );
|
|
InvalidateRect(hDlg, NULL, TRUE);
|
|
UpdateWindow( hDlg );
|
|
}
|
|
}
|
|
break;
|
|
|
|
case IDOK :
|
|
FaxConfig->UseCoverPage = IsDlgButtonChecked( hDlg, IDC_USE_COVERPAGE ) == BST_CHECKED;
|
|
Selection = (DWORD)SendMessage( hwndListPrn, CB_GETCURSEL, 0, 0 );
|
|
SendMessage( hwndListPrn, CB_GETLBTEXT, Selection, (LPARAM) Buffer );
|
|
MemFree( FaxConfig->PrinterName );
|
|
FaxConfig->PrinterName = StringDup( Buffer );
|
|
Selection = (DWORD)SendMessage( hwndListCov, LB_GETCURSEL, 0, 0 );
|
|
SendMessage( hwndListCov, LB_GETTEXT, Selection, (LPARAM) Buffer );
|
|
MemFree( FaxConfig->CoverPageName );
|
|
p = strrchr( Buffer, '(' );
|
|
if (p) {
|
|
p[-1] = 0;
|
|
FaxConfig->ServerCoverPage = FALSE;
|
|
} else {
|
|
FaxConfig->ServerCoverPage = TRUE;
|
|
}
|
|
FaxConfig->CoverPageName = StringDup( Buffer );
|
|
EndDialog( hDlg, TRUE );
|
|
break;
|
|
|
|
case IDCANCEL:
|
|
EndDialog( hDlg, TRUE );
|
|
break;
|
|
}
|
|
break;
|
|
|
|
case WM_HELP:
|
|
case WM_CONTEXTMENU:
|
|
|
|
FAXWINHELP( message, wParam, lParam, faxextHelpIDs );
|
|
break;
|
|
}
|
|
|
|
return FALSE;
|
|
}
|