diff options
Diffstat (limited to 'vcl')
-rw-r--r-- | vcl/source/filter/FilterConfigCache.cxx | 23 | ||||
-rw-r--r-- | vcl/source/filter/FilterConfigCache.hxx | 3 | ||||
-rw-r--r-- | vcl/source/filter/graphicfilter.cxx | 80 |
3 files changed, 83 insertions, 23 deletions
diff --git a/vcl/source/filter/FilterConfigCache.cxx b/vcl/source/filter/FilterConfigCache.cxx index e50dcabc725a..6c11e98925cd 100644 --- a/vcl/source/filter/FilterConfigCache.cxx +++ b/vcl/source/filter/FilterConfigCache.cxx @@ -87,8 +87,8 @@ bool FilterConfigCache::FilterConfigCacheEntry::CreateFilterName( const OUString if ( sFilterName.equalsIgnoreAsciiCase( OUString(*pPtr, strlen(*pPtr), RTL_TEXTENCODING_ASCII_US) ) ) bIsPixelFormat = true; } - OUString sTemp(SVLIBRARY("?")); - sFilterName = sTemp.replaceFirst("?", sFilterName); + sExternalFilterName = sFilterName; + sFilterName = SVLIBRARY("gie"); } return ! sFilterName.isEmpty(); } @@ -410,7 +410,22 @@ OUString FilterConfigCache::GetImportFilterTypeName( sal_uInt16 nFormat ) return OUString(""); } -OUString FilterConfigCache::GetImportWildcard( sal_uInt16 nFormat, sal_Int32 nEntry ) +OUString FilterConfigCache::GetExternalFilterName(sal_uInt16 nFormat, bool bExport) +{ + if (bExport) + { + if (nFormat < aExport.size()) + return aExport[nFormat].sExternalFilterName; + } + else + { + if (nFormat < aImport.size()) + return aImport[nFormat].sExternalFilterName; + } + return OUString(""); +} + +OUString FilterConfigCache::GetImportWildcard(sal_uInt16 nFormat, sal_Int32 nEntry) { OUString aWildcard( GetImportFormatExtension( nFormat, nEntry ) ); if ( !aWildcard.isEmpty() ) @@ -430,7 +445,7 @@ OUString FilterConfigCache::GetExportFilterName( sal_uInt16 nFormat ) return OUString(""); } -sal_uInt16 FilterConfigCache::GetExportFormatNumber( const OUString& rFormatName ) +sal_uInt16 FilterConfigCache::GetExportFormatNumber(const OUString& rFormatName) { CacheVector::const_iterator aIter, aEnd; for (aIter = aExport.begin(), aEnd = aExport.end(); aIter != aEnd; ++aIter) diff --git a/vcl/source/filter/FilterConfigCache.hxx b/vcl/source/filter/FilterConfigCache.hxx index a5bfb641ff2b..e4c204b817e5 100644 --- a/vcl/source/filter/FilterConfigCache.hxx +++ b/vcl/source/filter/FilterConfigCache.hxx @@ -39,6 +39,7 @@ class FilterConfigCache OUString sDocumentService; OUString sFilterService; OUString sTemplateName; + OUString sExternalFilterName; OUString sMediaType; OUString sFilterType; @@ -96,6 +97,8 @@ public: OUString GetImportWildcard( sal_uInt16 nFormat, sal_Int32 nEntry ); OUString GetImportFilterType( sal_uInt16 nFormat ); OUString GetImportFilterTypeName( sal_uInt16 nFormat ); + OUString GetExternalFilterName(sal_uInt16 nFormat, bool bExport); + bool IsImportInternalFilter( sal_uInt16 nFormat ); diff --git a/vcl/source/filter/graphicfilter.cxx b/vcl/source/filter/graphicfilter.cxx index b7ef652b9a9d..2ed81cd0e8f4 100644 --- a/vcl/source/filter/graphicfilter.cxx +++ b/vcl/source/filter/graphicfilter.cxx @@ -71,11 +71,6 @@ #define PMGCHUNG_msOG 0x6d734f47 // Microsoft Office Animated GIF -#ifndef DISABLE_DYNLOADING -#define IMPORT_FUNCTION_NAME "GraphicImport" -#define EXPORT_FUNCTION_NAME "GraphicExport" -#endif - using namespace ::com::sun::star; using comphelper::string::getTokenCount; @@ -941,20 +936,22 @@ struct ImpFilterLibCacheEntry osl::Module maLibrary; #endif OUString maFiltername; + OUString maFormatName; PFilterCall mpfnImport; - ImpFilterLibCacheEntry( const OUString& rPathname, const OUString& rFiltername ); + ImpFilterLibCacheEntry(const OUString& rPathname, const OUString& rFiltername, const OUString& rFormatName); bool operator==( const OUString& rFiltername ) const { return maFiltername == rFiltername; } PFilterCall GetImportFunction(); }; -ImpFilterLibCacheEntry::ImpFilterLibCacheEntry( const OUString& rPathname, const OUString& rFiltername ) : +ImpFilterLibCacheEntry::ImpFilterLibCacheEntry( const OUString& rPathname, const OUString& rFiltername, const OUString& rFormatName ) : mpNext ( NULL ), #ifndef DISABLE_DYNLOADING maLibrary ( rPathname ), #endif maFiltername ( rFiltername ), + maFormatName ( rFormatName ), mpfnImport ( NULL ) { #ifdef DISABLE_DYNLOADING @@ -983,8 +980,29 @@ PFilterCall ImpFilterLibCacheEntry::GetImportFunction() if( !mpfnImport ) { #ifndef DISABLE_DYNLOADING - mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol(IMPORT_FUNCTION_NAME)); -#else + if (maFormatName.equalsAscii("icd")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("icdGraphicImport")); + else if (maFormatName.equalsAscii("idx")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("idxGraphicImport")); + else if (maFormatName.equalsAscii("ime")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("imeGraphicImport")); + else if (maFormatName.equalsAscii("ipb")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("ipbGraphicImport")); + else if (maFormatName.equalsAscii("ipd")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("ipdGraphicImport")); + else if (maFormatName.equalsAscii("ips")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("ipsGraphicImport")); + else if (maFormatName.equalsAscii("ipt")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("iptGraphicImport")); + else if (maFormatName.equalsAscii("ipx")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("ipxGraphicImport")); + else if (maFormatName.equalsAscii("ira")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("iraGraphicImport")); + else if (maFormatName.equalsAscii("itg")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("itgGraphicImport")); + else if (maFormatName.equalsAscii("iti")) + mpfnImport = reinterpret_cast<PFilterCall>(maLibrary.getFunctionSymbol("itiGraphicImport")); + #else if( maFiltername.equalsAscii( "icd" ) ) mpfnImport = icdGraphicImport; else if( maFiltername.equalsAscii( "idx" ) ) @@ -1007,7 +1025,7 @@ PFilterCall ImpFilterLibCacheEntry::GetImportFunction() mpfnImport = itgGraphicImport; else if( maFiltername.equalsAscii( "iti" ) ) mpfnImport = itiGraphicImport; -#endif + #endif } return mpfnImport; @@ -1022,7 +1040,7 @@ public: ImpFilterLibCache(); ~ImpFilterLibCache(); - ImpFilterLibCacheEntry* GetFilter( const OUString& rFilterPath, const OUString& rFiltername ); + ImpFilterLibCacheEntry* GetFilter( const OUString& rFilterPath, const OUString& rFiltername, const OUString& rFormatName ); }; ImpFilterLibCache::ImpFilterLibCache() : @@ -1042,13 +1060,13 @@ ImpFilterLibCache::~ImpFilterLibCache() } } -ImpFilterLibCacheEntry* ImpFilterLibCache::GetFilter( const OUString& rFilterPath, const OUString& rFilterName ) +ImpFilterLibCacheEntry* ImpFilterLibCache::GetFilter(const OUString& rFilterPath, const OUString& rFilterName, const OUString& rFormatName) { ImpFilterLibCacheEntry* pEntry = mpFirst; while( pEntry ) { - if( *pEntry == rFilterName ) + if( *pEntry == rFilterName && pEntry->maFormatName == rFormatName ) break; else pEntry = pEntry->mpNext; @@ -1056,7 +1074,7 @@ ImpFilterLibCacheEntry* ImpFilterLibCache::GetFilter( const OUString& rFilterPat if( !pEntry ) { OUString aPhysicalName( ImpCreateFullFilterPath( rFilterPath, rFilterName ) ); - pEntry = new ImpFilterLibCacheEntry( aPhysicalName, rFilterName ); + pEntry = new ImpFilterLibCacheEntry(aPhysicalName, rFilterName, rFormatName ); #ifndef DISABLE_DYNLOADING if ( pEntry->maLibrary.is() ) #endif @@ -1305,6 +1323,7 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat WMF_EXTERNALHEADER *pExtHeader ) { OUString aFilterName; + OUString aExternalFilterName; sal_uLong nStreamBegin; sal_uInt16 nStatus; GraphicReader* pContext = rGraphic.GetContext(); @@ -1385,6 +1404,7 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat *pDeterminedFormat = nFormat; aFilterName = pConfig->GetImportFilterName( nFormat ); + aExternalFilterName = pConfig->GetExternalFilterName(nFormat, false); } else { @@ -1679,7 +1699,7 @@ sal_uInt16 GraphicFilter::ImportGraphic( Graphic& rGraphic, const OUString& rPat sal_Int32 i, nTokenCount = getTokenCount(aFilterPath, ';'); ImpFilterLibCache &rCache = Cache::get(); for( i = 0; ( i < nTokenCount ) && ( pFilter == NULL ); i++ ) - pFilter = rCache.GetFilter( aFilterPath.getToken(i, ';'), aFilterName ); + pFilter = rCache.GetFilter(aFilterPath.getToken(i, ';'), aFilterName, aExternalFilterName); if( !pFilter ) nStatus = GRFILTER_FILTERERROR; else @@ -1855,6 +1875,7 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString FilterConfigItem aConfigItem( const_cast<uno::Sequence< beans::PropertyValue >*>(pFilterData) ); OUString aFilterName( pConfig->GetExportFilterName( nFormat ) ); + OUString aExternalFilterName(pConfig->GetExternalFilterName(nFormat, true)); bAbort = false; sal_uInt16 nStatus = GRFILTER_OK; @@ -2096,9 +2117,30 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString OUString aPhysicalName( ImpCreateFullFilterPath( aFilterPath.getToken(i, ';'), aFilterName ) ); osl::Module aLibrary( aPhysicalName ); - PFilterCall pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol(EXPORT_FUNCTION_NAME)); - // Execute dialog in DLL -#else + PFilterCall pFunc = NULL; + OUString tmpFilterName = aExternalFilterName; + if (tmpFilterName.equalsAscii("egi")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("egiGraphicExport")); + else if (tmpFilterName.equalsAscii("eme")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("emeGraphicExport")); + else if (tmpFilterName.equalsAscii("epb")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("epbGraphicExport")); + else if (tmpFilterName.equalsAscii("epg")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("epgGraphicExport")); + else if (tmpFilterName.equalsAscii("epp")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("eppGraphicExport")); + else if (tmpFilterName.equalsAscii("eps")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("epsGraphicExport")); + else if (tmpFilterName.equalsAscii("ept")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("eptGraphicExport")); + else if (tmpFilterName.equalsAscii("era")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("eraGraphicExport")); + else if (tmpFilterName.equalsAscii("eti")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("etiGraphicExport")); + else if (tmpFilterName.equalsAscii("exp")) + pFunc = reinterpret_cast<PFilterCall>(aLibrary.getFunctionSymbol("expGraphicExport")); + // Execute dialog in DLL + #else PFilterCall pFunc = NULL; if( aFilterName.equalsAscii( "egi" ) ) pFunc = egiGraphicExport; @@ -2120,7 +2162,7 @@ sal_uInt16 GraphicFilter::ExportGraphic( const Graphic& rGraphic, const OUString pFunc = etiGraphicExport; else if( aFilterName.equalsAscii( "exp" ) ) pFunc = expGraphicExport; -#endif + #endif if( pFunc ) { if ( !(*pFunc)( rOStm, aGraphic, &aConfigItem ) ) |