summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
authorOliver Specht <oliver.specht@cib.de>2015-11-04 13:58:41 +0100
committerOliver Specht <oliver.specht@cib.de>2015-11-06 11:42:36 +0000
commit7f533e6cdac4557970f07c1d407999e3e8c44f2f (patch)
tree198655711b64bded41389c3d8f3220bd8c10d057 /vcl
parent938f670928683ae3251119c896a894d7204b24af (diff)
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 <ci@libreoffice.org> Reviewed-by: Oliver Specht <oliver.specht@cib.de>
Diffstat (limited to 'vcl')
-rw-r--r--vcl/source/filter/FilterConfigCache.cxx23
-rw-r--r--vcl/source/filter/FilterConfigCache.hxx3
-rw-r--r--vcl/source/filter/graphicfilter.cxx80
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 ) )