/*++ 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; iPrinterName && 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; iServerName) { 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; }