From 7f533e6cdac4557970f07c1d407999e3e8c44f2f Mon Sep 17 00:00:00 2001 From: Oliver Specht Date: Wed, 4 Nov 2015 13:58:41 +0100 Subject: merged graphic import/export into a single library instead of egi, eme, epb, epg, epp, eps, ept, era, eti, exp, icd, idx, ime, ipb, ipd, ips, ipt, ipx, ira, itg, iti, there is now one graphic import export lib (gie) Change-Id: I20c0dd94e5857bb6e2e8cc8ac175ff500c6bbdfc Reviewed-on: https://gerrit.libreoffice.org/19756 Tested-by: Jenkins Reviewed-by: Oliver Specht --- vcl/source/filter/FilterConfigCache.cxx | 23 ++++++++-- vcl/source/filter/FilterConfigCache.hxx | 3 ++ vcl/source/filter/graphicfilter.cxx | 80 +++++++++++++++++++++++++-------- 3 files changed, 83 insertions(+), 23 deletions(-) (limited to 'vcl') 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(maLibrary.getFunctionSymbol(IMPORT_FUNCTION_NAME)); -#else + if (maFormatName.equalsAscii("icd")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("icdGraphicImport")); + else if (maFormatName.equalsAscii("idx")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("idxGraphicImport")); + else if (maFormatName.equalsAscii("ime")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("imeGraphicImport")); + else if (maFormatName.equalsAscii("ipb")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("ipbGraphicImport")); + else if (maFormatName.equalsAscii("ipd")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("ipdGraphicImport")); + else if (maFormatName.equalsAscii("ips")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("ipsGraphicImport")); + else if (maFormatName.equalsAscii("ipt")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("iptGraphicImport")); + else if (maFormatName.equalsAscii("ipx")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("ipxGraphicImport")); + else if (maFormatName.equalsAscii("ira")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("iraGraphicImport")); + else if (maFormatName.equalsAscii("itg")) + mpfnImport = reinterpret_cast(maLibrary.getFunctionSymbol("itgGraphicImport")); + else if (maFormatName.equalsAscii("iti")) + mpfnImport = reinterpret_cast(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*>(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(aLibrary.getFunctionSymbol(EXPORT_FUNCTION_NAME)); - // Execute dialog in DLL -#else + PFilterCall pFunc = NULL; + OUString tmpFilterName = aExternalFilterName; + if (tmpFilterName.equalsAscii("egi")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("egiGraphicExport")); + else if (tmpFilterName.equalsAscii("eme")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("emeGraphicExport")); + else if (tmpFilterName.equalsAscii("epb")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("epbGraphicExport")); + else if (tmpFilterName.equalsAscii("epg")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("epgGraphicExport")); + else if (tmpFilterName.equalsAscii("epp")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("eppGraphicExport")); + else if (tmpFilterName.equalsAscii("eps")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("epsGraphicExport")); + else if (tmpFilterName.equalsAscii("ept")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("eptGraphicExport")); + else if (tmpFilterName.equalsAscii("era")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("eraGraphicExport")); + else if (tmpFilterName.equalsAscii("eti")) + pFunc = reinterpret_cast(aLibrary.getFunctionSymbol("etiGraphicExport")); + else if (tmpFilterName.equalsAscii("exp")) + pFunc = reinterpret_cast(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 ) ) -- cgit