summaryrefslogtreecommitdiffstats
path: root/padmin/source/fontentry.cxx
diff options
context:
space:
mode:
authorPhilipp Lohmann <pl@openoffice.org>2001-05-08 10:56:39 +0000
committerPhilipp Lohmann <pl@openoffice.org>2001-05-08 10:56:39 +0000
commita9f8d75e6c54b40845fc198019788ff6b568aaf5 (patch)
tree1b05b9ef170326a691b81031bd7415d70daeffd9 /padmin/source/fontentry.cxx
parentUnix PS-Print Environment (diff)
downloadcore-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.cxx645
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;
+}