diff options
author | Philipp Lohmann <pl@openoffice.org> | 2001-05-08 10:56:39 +0000 |
---|---|---|
committer | Philipp Lohmann <pl@openoffice.org> | 2001-05-08 10:56:39 +0000 |
commit | a9f8d75e6c54b40845fc198019788ff6b568aaf5 (patch) | |
tree | 1b05b9ef170326a691b81031bd7415d70daeffd9 /padmin/source/fontentry.cxx | |
parent | Unix PS-Print Environment (diff) | |
download | core-a9f8d75e6c54b40845fc198019788ff6b568aaf5.tar.gz core-a9f8d75e6c54b40845fc198019788ff6b568aaf5.zip |
Administration utility for Unix PS-Print Environment
Diffstat (limited to 'padmin/source/fontentry.cxx')
-rw-r--r-- | padmin/source/fontentry.cxx | 645 |
1 files changed, 645 insertions, 0 deletions
diff --git a/padmin/source/fontentry.cxx b/padmin/source/fontentry.cxx new file mode 100644 index 000000000000..1a2cd118f4c3 --- /dev/null +++ b/padmin/source/fontentry.cxx @@ -0,0 +1,645 @@ +/************************************************************************* + * + * $RCSfile: fontentry.cxx,v $ + * + * $Revision: 1.1.1.1 $ + * + * last change: $Author: pl $ $Date: 2001-05-08 11:56:35 $ + * + * The Contents of this file are made available subject to the terms of + * either of the following licenses + * + * - GNU Lesser General Public License Version 2.1 + * - Sun Industry Standards Source License Version 1.1 + * + * Sun Microsystems Inc., October, 2000 + * + * GNU Lesser General Public License Version 2.1 + * ============================================= + * Copyright 2000 by Sun Microsystems, Inc. + * 901 San Antonio Road, Palo Alto, CA 94303, USA + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License version 2.1, as published by the Free Software Foundation. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this library; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + * + * + * Sun Industry Standards Source License Version 1.1 + * ================================================= + * The contents of this file are subject to the Sun Industry Standards + * Source License Version 1.1 (the "License"); You may not use this file + * except in compliance with the License. You may obtain a copy of the + * License at http://www.openoffice.org/license.html. + * + * Software provided under this License is provided on an "AS IS" basis, + * WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, + * WITHOUT LIMITATION, WARRANTIES THAT THE SOFTWARE IS FREE OF DEFECTS, + * MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE, OR NON-INFRINGING. + * See the License for the specific provisions governing your rights and + * obligations concerning the Software. + * + * The Initial Developer of the Original Code is: Sun Microsystems, Inc. + * + * Copyright: 2000 by Sun Microsystems, Inc. + * + * All Rights Reserved. + * + * Contributor(s): _______________________________________ + * + * + ************************************************************************/ + +#ifndef _SV_MSGBOX_HXX +#include <vcl/msgbox.hxx> +#endif + +#ifndef _PSPRINT_FONTMANAGER_HXX_ +#include <psprint/fontmanager.hxx> +#endif + +#ifndef _PAD_PADIALOG_HRC_ +#include <padialog.hrc> +#endif +#ifndef _PAD_FONTENTRY_HXX_ +#include <fontentry.hxx> +#endif +#ifndef _SVT_FILEDLG_HXX +#include <filedlg.hxx> +#endif +#ifndef _PAD_HELPER_HXX_ +#include <helper.hxx> +#endif + +#if 0 +#include <convafm.hxx> +#include <progress.hxx> +#include <osl/file.hxx> +#endif + +using namespace padmin; +using namespace osl; +using namespace rtl; +using namespace psp; + +#if 0 +static void CreateAfmFile( const INetURLObject& rFontFile ) +{ + rtl_TextEncoding aEncoding = gsl_getSystemTextEncoding(); + + INetURLObject aFontMap( rFontFile.GetPath(), INET_PROT_FILE, INetURLObject::ENCODE_ALL ); + aFontMap.Append( String( RTL_CONSTASCII_USTRINGPARAM( "Fontmap" ) ) ); + INetURLObject aAfmFile( rFontFile ); + aAfmFile.setExtension( String::CreateFromAscii( "afm", 3 ) ); + + + SvFileStream aMap( aFontMap.PathToFileName(), STREAM_WRITE | STREAM_TRUNC ); + if( aMap.IsOpen() ) + { + SvFileStream aRead( rFontFile.GetFull(), STREAM_READ ); + ByteString aLine; + ByteString aFullName; + int nPos; + while( ! aRead.IsEof() && + ( nPos = aLine.Search( "/FullName" ) ) == STRING_NOTFOUND ) + aRead.ReadLine( aLine ); + aRead.Close(); + if( nPos != STRING_NOTFOUND ) + { + aLine.Erase( 0, nPos ); + aFullName = aLine.GetToken( 1, '(' ).GetToken( 0, ')' ); + + aLine = '/'; + aLine += aFullName; + aLine += ' '; + aLine += '('; + aLine += ByteString( rFontFile.GetName(), aEncoding ); + aLine += ')'; + aLine += ';'; + + aMap.WriteLine( aLine ); + } + aMap.Close(); + pid_t nPID = fork(); + if( ! nPID ) + { + INetURLObject aTmp( rFontFile ); + aTmp.CutName(); + ByteString aEnv( "GS_LIB=" ); + aEnv += ByteString( aTmp.PathToFileName(), aEncoding ); + putenv( const_cast<char*>(aEnv.GetBuffer()) ); + + int nDescr = open( ByteString( aAfmFile.PathToFileName(), aEncoding ).GetBuffer(), + O_CREAT | O_TRUNC| O_WRONLY, + 00755 ); +#ifdef DEBUG + if( nDescr < 0 ) + fprintf( stderr, "open( %s ) failed because of %d\n", ByteString( aAfmFile.GetFull(), aEncoding ).GetBuffer(), errno ); +#endif + if( dup2( nDescr, STDOUT_FILENO ) > 0 ) + { + execlp( "gs", + "-q", + "-dNODISPLAY", + "--", "printafm.ps", + aFullName.GetBuffer(), + NULL ); + } +#ifdef DEBUG + else + fprintf( stderr, "dup2( %d, %d ) failed because of %d\n", nDescr, STDOUT_FILENO, errno ); +#endif + _exit( 0 ); + } + if( nPID > 0 ) + waitpid( nPID, NULL, 0 ); + MetricConverter::ConvertAFM( aAfmFile ); + } + + struct stat aStat; + ByteString aSysFile( aAfmFile.PathToFileName(), aEncoding ); + if( stat( aSysFile.GetBuffer(), &aStat ) || ! aStat.st_size ) + unlink( aSysFile.GetBuffer() ); +#ifdef DEBUG + fprintf( stderr, " %s\n", ! access( aSysFile.GetBuffer(), F_OK ) ? "success" : "failed" ); +#endif + unlink( ByteString( aFontMap.PathToFileName(), aEncoding ).GetBuffer() ); +} + +#endif + +FontNameDlg::FontNameDlg( Window *pParent ) : + ModalDialog( pParent, PaResId( RID_FONTNAMEDIALOG ) ), + m_aFixedText( this, PaResId( RID_FNTNM_FIXED ) ), + m_aOKButton( this, PaResId( RID_FNTNM_BTN_OK ) ), + m_aFoundryBox( this, PaResId( RID_FNTNM_FOUNDRY ) ), + m_aFamilyEdit( this, PaResId( RID_FNTNM_FAMILY ) ), + m_aWeightBox( this, PaResId( RID_FNTNM_WEIGHT ) ), + m_aSlantBox( this, PaResId( RID_FNTNM_SLANT ) ), + m_aStyleWidthBox( this, PaResId( RID_FNTNM_STYLEWIDTH ) ), + m_aSpacingListBox( this, PaResId( RID_FNTNM_SPACING ) ), + m_aAddStyleBox( this, PaResId( RID_FNTNM_ADDSTYLE ) ), + m_aRegistryBox( this, PaResId( RID_FNTNM_REGISTRY ) ), + m_aEncodingBox( this, PaResId( RID_FNTNM_ENCODING ) ), + m_aTxtFoundry( this, PaResId( RID_FNTNM_TXT_FOUNDRY ) ), + m_aTxtFamily( this, PaResId( RID_FNTNM_TXT_FAMILY ) ), + m_aTxtWeight( this, PaResId( RID_FNTNM_TXT_WEIGHT ) ), + m_aTxtSlant( this, PaResId( RID_FNTNM_TXT_SLANT ) ), + m_aTxtStyleWidth( this, PaResId( RID_FNTNM_TXT_STYLEWIDTH ) ), + m_aTxtSpacing( this, PaResId( RID_FNTNM_TXT_SPACING ) ), + m_aTxtAddStyle( this, PaResId( RID_FNTNM_TXT_ADDSTYLE ) ), + m_aTxtRegistry( this, PaResId( RID_FNTNM_TXT_REGISTRY ) ), + m_aTxtEncoding( this, PaResId( RID_FNTNM_TXT_ENCODING ) ), + m_aRemoveButton( this, PaResId( RID_FNTNM_BTN_REMOVE ) ), + m_aModifyButton( this, PaResId( RID_FNTNM_BTN_MODIFY ) ), + m_aFontBox( this, PaResId( RID_FNTNM_LB_FONTS ) ), + m_aPropGroupBox( this, PaResId( RID_FNTNM_GRP_FONTPROP ) ), + m_rFontManager( PrintFontManager::get() ), + m_aFontsDirWriteFailed( PaResId( RID_FNTNM_STR_FONTSDIRWRITEFAILED ) ) +{ + FreeResource(); + + m_aFontBox.EnableMultiSelection( TRUE ); + + ::std::list< fontID > aFonts; + m_rFontManager.getFontList( aFonts ); + for( ::std::list< fontID >::iterator font_it = aFonts.begin(); font_it != aFonts.end(); ++font_it ) + { + fonttype::type eType = m_rFontManager.getFontType( *font_it ); + if( eType == fonttype::Type1 || eType == fonttype::TrueType ) + { + m_aFonts[ *font_it ] = m_rFontManager.getFontXLFD( *font_it ); + INetURLObject aFont( m_rFontManager.getFontFileSysPath( *font_it ), INET_PROT_FILE, INetURLObject::ENCODE_ALL ); + String aEntry( aFont.GetName() ); + aEntry += '='; + aEntry += String( m_rFontManager.getFontFamily( *font_it ) ); + USHORT nEntry = m_aFontBox.InsertEntry( aEntry ); + m_aFontBox.SetEntryData( nEntry, (void*)(*font_it) ); + } + } + + // iterate over fonts and fill comoboxes + ::std::hash_map< OUString, int, OUStringHash > aFoundries, aWeights, aWidths, aRegistries, aEncodings; + for( ::std::hash_map< fontID, String >::iterator it = m_aFonts.begin(); it != m_aFonts.end(); ++it ) + { + aFoundries[ it->second.GetToken( 1, '-' ).ToLowerAscii() ] = 1; + aWeights[ it->second.GetToken( 3, '-' ).ToLowerAscii() ] = 1; + aWidths[ it->second.GetToken( 5, '-' ).ToLowerAscii() ] = 1; + aRegistries[ it->second.GetToken( 13, '-' ).ToLowerAscii() ] = 1; + aEncodings[ it->second.GetToken( 14, '-' ).ToLowerAscii() ] = 1; + } + ::std::hash_map< OUString, int, OUStringHash >::iterator m_it; + for( m_it = aFoundries.begin(); m_it != aFoundries.end(); ++m_it ) + m_aFoundryBox.InsertEntry( m_it->first ); + for( m_it = aWeights.begin(); m_it != aWeights.end(); ++m_it ) + m_aWeightBox.InsertEntry( m_it->first ); + for( m_it = aWidths.begin(); m_it != aWidths.end(); ++m_it ) + m_aStyleWidthBox.InsertEntry( m_it->first ); + for( m_it = aRegistries.begin(); m_it != aRegistries.end(); ++m_it ) + m_aRegistryBox.InsertEntry( m_it->first ); + for( m_it = aEncodings.begin(); m_it != aEncodings.end(); ++m_it ) + m_aEncodingBox.InsertEntry( m_it->first ); + + m_aFontBox.SelectEntryPos( 0, TRUE ); + SelectFont(); + + m_aOKButton.SetClickHdl( LINK( this, FontNameDlg, ClickBtnHdl ) ); + m_aRemoveButton.SetClickHdl( LINK( this, FontNameDlg, ClickBtnHdl ) ); + m_aModifyButton.SetClickHdl( LINK( this, FontNameDlg, ClickBtnHdl ) ); + m_aFontBox.SetSelectHdl( LINK( this, FontNameDlg, SelectHdl ) ); + m_aFontBox.setDelPressedLink( LINK( this, FontNameDlg, DelPressedHdl ) ); +} + +FontNameDlg::~FontNameDlg() +{ +} + +void FontNameDlg::changeSelected() +{ + ::std::list< fontID > aFonts; + for( int i = 0; i < m_aFontBox.GetSelectEntryCount(); i++ ) + aFonts.push_back( (fontID)m_aFontBox.GetEntryData( m_aFontBox.GetSelectEntryPos( i ) ) ); + while( aFonts.begin() != aFonts.end() ) + { + ChangeFontEntry( aFonts.front() ); + aFonts.pop_front(); + } +} + +void FontNameDlg::ChangeFontEntry( fontID nFont ) +{ + rtl_TextEncoding aEncoding = gsl_getSystemTextEncoding(); + + String aFontFoundry, aFontFamily, aFontWeight, aFontSlant, + aFontStyleWidth, aAddStyle, aFontSpacing, aFontRegistry, aFontEncoding, + aLine, aFileName; + + m_aPropGroupBox.SetText( String( PaResId( RID_FNTNM_NOFONT_TXT ) ) ); + + aFontFoundry = m_aFoundryBox.GetText(); + if( aFontFoundry.GetChar(0) == '*' ) + aFontFoundry = m_aFonts[ nFont ].GetToken( 1, '-' ); + + aFontFamily = m_aFamilyEdit.GetText(); + if( aFontFamily.GetChar(0) == '*' ) + aFontFamily = m_aFonts[ nFont ].GetToken( 2, '-' ); + + aFontWeight = m_aWeightBox.GetText(); + if( aFontWeight.GetChar(0) == '*' ) + aFontWeight = m_aFonts[ nFont ].GetToken( 3, '-' ); + + aFontSlant = m_aSlantBox.GetText().GetToken( 0, ' ' ); + if( aFontSlant.GetChar(0) == '*' ) + aFontSlant = m_aFonts[ nFont ].GetToken( 4, '-' ); + + aFontStyleWidth = m_aStyleWidthBox.GetText(); + if( aFontStyleWidth.GetChar(0) == '*' ) + aFontStyleWidth = m_aFonts[ nFont ].GetToken( 5, '-' ); + + aAddStyle = m_aAddStyleBox.GetText(); + if( aAddStyle.GetChar(0) == '*' ) + aAddStyle = m_aFonts[ nFont ].GetToken( 6, '-' ); + + aFontSpacing = m_aSpacingListBox.GetSelectEntry().GetToken( 0, ' ' ); + if( aFontSpacing.GetChar(0) == '*' ) + aFontSpacing = m_aFonts[ nFont ].GetToken( 11, '-' ); + + aFontRegistry = m_aRegistryBox.GetText(); + if( aFontRegistry.GetChar(0) == '*' ) + aFontRegistry = m_aFonts[ nFont ].GetToken( 13, '-' ); + + aFontEncoding = m_aEncodingBox.GetText(); + if( aFontEncoding.GetChar(0) == '*' ) + aFontEncoding = m_aFonts[ nFont ].GetToken( 14, '-' ); + + // create new XLFD + String aXLFD( RTL_CONSTASCII_USTRINGPARAM( "-" ) ); + aXLFD += aFontFoundry; + aXLFD += '-'; + aFontFamily.SearchAndReplaceAll( '-', '_' ); + aXLFD += aFontFamily; + aXLFD += '-'; + aXLFD += aFontWeight; + aXLFD += '-'; + aXLFD += aFontSlant; + aXLFD += '-'; + aXLFD += aFontStyleWidth; + aXLFD += '-'; + aXLFD += aAddStyle; + aXLFD.AppendAscii( "-0-0-0-0-" ); + aXLFD += aFontSpacing; + aXLFD.AppendAscii( "-0-" ); + aXLFD += aFontRegistry; + aXLFD += '-'; + aXLFD += aFontEncoding; + + if( m_rFontManager.changeFontProperties( nFont, aXLFD ) ) + { + m_aFonts[ nFont ] = aXLFD; + + // update ListBox + for( int i = 0; i < m_aFontBox.GetEntryCount(); i++ ) + { + if( m_aFontBox.GetEntryData( i ) == (void*)nFont ) + { + m_aFontBox.RemoveEntry( i ); + INetURLObject aFont( m_rFontManager.getFontFileSysPath( nFont ), INET_PROT_FILE, INetURLObject::ENCODE_ALL ); + String aEntry = aFont.GetName(); + aEntry += '='; + aEntry += String( m_rFontManager.getFontFamily( nFont ) ); + USHORT nEntry = m_aFontBox.InsertEntry( aEntry ); + m_aFontBox.SetEntryData( nEntry, (void*)nFont ); + } + } + } + else + { + INetURLObject aFont( m_rFontManager.getFontFileSysPath( nFont ), INET_PROT_FILE, INetURLObject::ENCODE_ALL ); + String aString( m_aFontsDirWriteFailed ); + aString.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s1" ) ), + aFont.GetName() ); + aFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM( "fonts.dir" ) ) ); + aString.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s2" ) ), + aFont.PathToFileName() ); + ErrorBox aBox( this, WB_OK | WB_DEF_OK, aString ); + aBox.Execute(); + } +} + +String FontNameDlg::matchSelectionToken( int n ) +{ + if( m_aFontBox.GetSelectEntryCount() < 1 ) + return '*'; + + fontID nFont = (fontID)m_aFontBox.GetEntryData( m_aFontBox.GetSelectEntryPos( 0 ) ); + if( ! nFont ) + return '*'; + String aMatch = m_aFonts[ nFont ].GetToken( n, '-' ); + int i; + for( i = 1; i < m_aFontBox.GetSelectEntryCount(); i++ ) + { + nFont = (fontID)m_aFontBox.GetEntryData( m_aFontBox.GetSelectEntryPos( i ) ); + if( m_aFonts[ nFont ].GetToken( n, '-' ) != aMatch ) + { + aMatch = '*'; + break; + } + } + return aMatch; +} + +void FontNameDlg::SelectFont() +{ + if( m_aFontBox.GetSelectEntryCount() < 1 ) + return; + + // initialize xfontnames + + String aMatch; + int i; + + m_aFoundryBox.SetText( matchSelectionToken( 1 ) ); + m_aFamilyEdit.SetText( matchSelectionToken( 2 ) ); + m_aWeightBox.SetText( matchSelectionToken( 3 ) ); + m_aSlantBox.SetText( matchSelectionToken( 4 ) ); + m_aStyleWidthBox.SetText( matchSelectionToken( 5 ) ); + m_aAddStyleBox.SetText( matchSelectionToken( 6 ) ); + aMatch = matchSelectionToken( 11 ); + for( i = 0; i < m_aSpacingListBox.GetEntryCount(); i++ ) + { + if( aMatch == m_aSpacingListBox.GetEntry( i ).GetToken( 0, ' ' ) ) + { + m_aSpacingListBox.SelectEntryPos( i, TRUE ); + break; + } + } + if( i >= m_aSpacingListBox.GetEntryCount() ) + m_aSpacingListBox.SelectEntry( '*' ); + m_aRegistryBox.SetText( matchSelectionToken( 13 ) ); + m_aEncodingBox.SetText( matchSelectionToken( 14 ) ); +} + +IMPL_LINK( FontNameDlg, DelPressedHdl, ListBox*, pBox ) +{ + if( pBox == &m_aFontBox && m_aRemoveButton.IsEnabled() ) + { + ClickBtnHdl( &m_aRemoveButton ); + } + return 0; +} + +IMPL_LINK( FontNameDlg, ClickBtnHdl, Button*, pButton ) +{ + + int i; + + if( pButton == &m_aOKButton ) + { + EndDialog(); + } + else if( pButton == &m_aRemoveButton && AreYouSure( this, RID_QUERY_REMOVEFONTFROMLIST ) ) + { + ::std::list< fontID > aRemoveList; + for( i = 0; i < m_aFontBox.GetSelectEntryCount(); i++ ) + { + fontID nFont = (fontID)m_aFontBox.GetEntryData( m_aFontBox.GetSelectEntryPos( i ) ); + // if( m_rFontManager.removeFont( nFont ) ) + aRemoveList.push_back( nFont ); + } + + while( aRemoveList.begin() != aRemoveList.end() ) + { + fontID nFont = aRemoveList.front(); + aRemoveList.pop_front(); + for( i = 0; i < m_aFontBox.GetEntryCount(); i++ ) + { + if( m_aFontBox.GetEntryData( i ) == (void*)nFont ) + { + m_aFontBox.RemoveEntry( i ); + break; + } + } + } + m_aFontBox.SelectEntryPos( 0, TRUE ); + SelectFont(); + } + else if( pButton == &m_aModifyButton ) + { + changeSelected(); + } + return 0; +} + +IMPL_LINK( FontNameDlg, SelectHdl, ListBox*, pBox ) +{ + if( pBox == &m_aFontBox ) + { + SelectFont(); + } + return 0; +} + +//-------------------------------------------------- + +FontImportDialog::FontImportDialog( Window* pParent ) : + ModalDialog( pParent, PaResId( RID_FONTIMPORT_DIALOG ) ), + m_aOKBtn( this, PaResId( RID_FIMP_BTN_OK ) ), + m_aCancelBtn( this, PaResId( RID_FIMP_BTN_CANCEL ) ), + m_aFromBox( this, PaResId( RID_FIMP_GRP_FROM ) ), + m_aFromDirEdt( this, PaResId( RID_FIMP_EDT_FROM ) ), + m_aFromBtn( this, PaResId( RID_FIMP_BTN_FROM ) ), + m_bOverwriteAll( false ), + m_bOverwriteNone( false ), + m_pProgress( NULL ), + m_aImportOperation( PaResId( RID_FIMP_STR_IMPORTOP ) ), + m_aOverwriteQueryText( PaResId( RID_FIMP_STR_QUERYOVERWRITE ) ), + m_aOverwriteAllText( PaResId( RID_FIMP_STR_OVERWRITEALL ) ), + m_aOverwriteNoneText( PaResId( RID_FIMP_STR_OVERWRITENONE ) ), + m_aNoAfmText( PaResId( RID_FIMP_STR_NOAFM ) ), + m_aAfmCopyFailedText( PaResId( RID_FIMP_STR_AFMCOPYFAILED ) ), + m_aFontCopyFailedText( PaResId( RID_FIMP_STR_FONTCOPYFAILED ) ), + m_aNoWritableFontsDirText( PaResId( RID_FIMP_STR_NOWRITEABLEFONTSDIR ) ), + m_aFontsImportedText( PaResId( RID_FIMP_STR_NUMBEROFFONTSIMPORTED ) ), + m_rFontManager( ::psp::PrintFontManager::get() ) +{ + FreeResource(); + + m_aOKBtn.SetClickHdl( LINK( this, FontImportDialog, ClickBtnHdl ) ); + m_aFromBtn.SetClickHdl( LINK( this, FontImportDialog, ClickBtnHdl ) ); +} + +FontImportDialog::~FontImportDialog() +{ +} + +void FontImportDialog::importFontsFailed( ::psp::PrintFontManager::ImportFontCallback::FailCondition eReason ) +{ + String aText; + switch( eReason ) + { + case ::psp::PrintFontManager::ImportFontCallback::NoWritableDirectory: + aText = m_aNoWritableFontsDirText; + } + ErrorBox aBox( m_pProgress ? (Window*)m_pProgress : (Window*)this, WB_OK | WB_DEF_OK, aText ); + aBox.Execute(); +} + +void FontImportDialog::progress( const ::rtl::OUString& rFile ) +{ + m_pProgress->setValue( ++m_nFont ); + m_pProgress->setFilename( rFile ); +} + +bool FontImportDialog::queryOverwriteFile( const ::rtl::OUString& rFile ) +{ + bool bRet = false; + + if( m_bOverwriteNone ) + return false; + if( m_bOverwriteAll ) + return true; + + String aText( m_aOverwriteQueryText ); + aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), rFile ); + + QueryBox aQueryBox( m_pProgress ? (Window*)m_pProgress : (Window*)this, WB_YES_NO | WB_DEF_NO, aText ); + aQueryBox.AddButton( m_aOverwriteAllText, 20, 0 ); + aQueryBox.AddButton( m_aOverwriteNoneText, 21, 0 ); + + int nResult = aQueryBox.Execute(); + switch( nResult ) + { + case BUTTONID_YES: bRet = true; break; + case BUTTONID_NO: bRet = false; break; + case 20: bRet = m_bOverwriteAll = true; break; + case 21: bRet = false; m_bOverwriteNone = true; break; + } + + return bRet; +} + +void FontImportDialog::importFontFailed( const ::rtl::OUString& rFile, ::psp::PrintFontManager::ImportFontCallback::FailCondition eReason ) +{ + String aText; + switch( eReason ) + { + case ::psp::PrintFontManager::ImportFontCallback::NoAfmMetric: + aText = m_aNoAfmText; + break; + case ::psp::PrintFontManager::ImportFontCallback::AfmCopyFailed: + aText = m_aAfmCopyFailedText; + break; + case ::psp::PrintFontManager::ImportFontCallback::FontCopyFailed: + aText = m_aFontCopyFailedText; + break; + } + aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%s" ) ), rFile ); + ErrorBox aBox( m_pProgress ? (Window*)m_pProgress : (Window*)this, WB_OK | WB_DEF_OK, aText ); + aBox.Execute(); +} + +bool FontImportDialog::isCanceled() +{ + return m_pProgress->isCanceled(); +} + +void FontImportDialog::copyFonts() +{ + ::std::list< String > aFiles; + String aDirectory( m_aFromDirEdt.GetText() ); + FindFiles( aDirectory, aFiles, String( RTL_CONSTASCII_USTRINGPARAM( "PFA;PFB;TTF" ) ) ); + ::std::list< OUString > aFontFiles; + while( aFiles.begin() != aFiles.end() ) + { + String aFont( aDirectory ); + aFont += '/'; + aFont += aFiles.front(); + aFiles.pop_front(); + aFontFiles.push_back( aFont ); + } + int nSuccess = 0; + if( aFontFiles.size() ) + { + m_nFont = 0; + m_pProgress = new ProgressDialog( this ); + m_pProgress->setRange( 0, aFontFiles.size() ); + m_pProgress->startOperation( m_aImportOperation ); + m_pProgress->Show( TRUE ); + m_pProgress->setValue( 0 ); + m_pProgress->Invalidate(); + m_pProgress->Sync(); + nSuccess = m_rFontManager.importFonts( aFontFiles, this ); + m_pProgress->Show( FALSE ); + delete m_pProgress; + m_pProgress = NULL; + } + String aText( m_aFontsImportedText ); + aText.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "%d" ) ), String::CreateFromInt32( nSuccess ) ); + InfoBox aBox( this, aText ); + aBox.Execute(); +} + +IMPL_LINK( FontImportDialog, ClickBtnHdl, Button*, pButton ) +{ + if( pButton == & m_aFromBtn ) + { + PathDialog aDlg( this ); + if( aDlg.Execute() ) + m_aFromDirEdt.SetText( aDlg.GetPath() ); + } + else if( pButton == & m_aOKBtn ) + { + copyFonts(); + EndDialog( 0 ); + } + return 0; +} |