summaryrefslogtreecommitdiff
path: root/vcl
diff options
context:
space:
mode:
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 ) )