rework ImportCGM to take a SvStream
Change-Id: I261cb5afd251e96fa676ba37fa397159eb7fce32
diff --git a/filter/source/graphicfilter/icgm/cgm.cxx b/filter/source/graphicfilter/icgm/cgm.cxx
index 00d3cec..3e9e0fc 100644
--- a/filter/source/graphicfilter/icgm/cgm.cxx
+++ b/filter/source/graphicfilter/icgm/cgm.cxx
@@ -18,7 +18,6 @@
*/
#include <com/sun/star/task/XStatusIndicator.hpp>
#include <unotools/ucbstreamhelper.hxx>
#include <osl/endian.h>
#include <vcl/virdev.hxx>
@@ -707,7 +706,7 @@ bool CGM::Write( SvStream& rIStm )
// GraphicImport - the exported function
extern "C" SAL_DLLPUBLIC_EXPORT sal_uInt32 SAL_CALL
ImportCGM( OUString const & rFileName, uno::Reference< frame::XModel > const & rXModel, sal_uInt32 nMode, css::uno::Reference<css::task::XStatusIndicator> const & aXStatInd )
ImportCGM(SvStream& rIn, uno::Reference< frame::XModel > const & rXModel, sal_uInt32 nMode, css::uno::Reference<css::task::XStatusIndicator> const & aXStatInd)
{
sal_uInt32 nStatus = 0; // retvalue == 0 -> ERROR
@@ -722,41 +721,37 @@ ImportCGM( OUString const & rFileName, uno::Reference< frame::XModel > const & r
{
if ( nMode & CGM_IMPORT_CGM )
{
std::unique_ptr<SvStream> pIn(::utl::UcbStreamHelper::CreateStream( rFileName, StreamMode::READ ));
if ( pIn )
rIn.SetEndian(SvStreamEndian::BIG);
sal_uInt64 const nInSize = rIn.remainingSize();
rIn.Seek(0);
sal_uInt32 nNext = 0;
sal_uInt32 nAdd = nInSize / 20;
bool bProgressBar = aXStatInd.is();
if ( bProgressBar )
aXStatInd->start( "CGM Import" , nInSize );
while (pCGM->IsValid() && (rIn.Tell() < nInSize) && !pCGM->IsFinished())
{
pIn->SetEndian( SvStreamEndian::BIG );
sal_uInt64 const nInSize = pIn->remainingSize();
pIn->Seek( 0 );
sal_uInt32 nNext = 0;
sal_uInt32 nAdd = nInSize / 20;
bool bProgressBar = aXStatInd.is();
if ( bProgressBar )
aXStatInd->start( "CGM Import" , nInSize );
while ( pCGM->IsValid() && ( pIn->Tell() < nInSize ) && !pCGM->IsFinished() )
{
if ( bProgressBar )
sal_uInt32 nCurrentPos = rIn.Tell();
if ( nCurrentPos >= nNext )
{
sal_uInt32 nCurrentPos = pIn->Tell();
if ( nCurrentPos >= nNext )
{
aXStatInd->setValue( nCurrentPos );
nNext = nCurrentPos + nAdd;
}
aXStatInd->setValue( nCurrentPos );
nNext = nCurrentPos + nAdd;
}
}
if ( !pCGM->Write( *pIn ) )
break;
}
if ( pCGM->IsValid() )
{
nStatus = pCGM->GetBackGroundColor() | 0xff000000;
}
if ( bProgressBar )
aXStatInd->end();
if (!pCGM->Write(rIn))
break;
}
if ( pCGM->IsValid() )
{
nStatus = pCGM->GetBackGroundColor() | 0xff000000;
}
if ( bProgressBar )
aXStatInd->end();
}
}
}
diff --git a/sd/source/filter/cgm/sdcgmfilter.cxx b/sd/source/filter/cgm/sdcgmfilter.cxx
index 9c34f628..1c22e16 100644
--- a/sd/source/filter/cgm/sdcgmfilter.cxx
+++ b/sd/source/filter/cgm/sdcgmfilter.cxx
@@ -19,6 +19,7 @@
#include <osl/module.hxx>
#include <tools/urlobj.hxx>
#include <unotools/ucbstreamhelper.hxx>
#include <svl/itemset.hxx>
#include <sfx2/docfile.hxx>
#include <sfx2/docfilt.hxx>
@@ -40,11 +41,11 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::task;
using namespace ::com::sun::star::frame;
typedef sal_uInt32 ( SAL_CALL *ImportCGMPointer )( OUString const &, Reference< XModel > const &, sal_uInt32, Reference< XStatusIndicator > const & );
typedef sal_uInt32 ( SAL_CALL *ImportCGMPointer )(SvStream&, Reference< XModel > const &, sal_uInt32, Reference< XStatusIndicator > const &);
#ifdef DISABLE_DYNLOADING
extern "C" sal_uInt32 ImportCGM( OUString const &, Reference< XModel > const &, sal_uInt32, Reference< XStatusIndicator > const & );
extern "C" sal_uInt32 ImportCGM(SvStream&, Reference< XModel > const &, sal_uInt32, Reference< XStatusIndicator > const &);
#endif
@@ -82,7 +83,8 @@ bool SdCGMFilter::Import()
mrDocument.CreateFirstPages();
CreateStatusIndicator();
nRetValue = FncImportCGM( aFileURL, mxModel, CGM_IMPORT_CGM | CGM_BIG_ENDIAN | CGM_EXPORT_IMPRESS, mxStatusIndicator );
std::unique_ptr<SvStream> xIn(::utl::UcbStreamHelper::CreateStream(aFileURL, StreamMode::READ));
nRetValue = xIn ? FncImportCGM(*xIn, mxModel, CGM_IMPORT_CGM | CGM_BIG_ENDIAN | CGM_EXPORT_IMPRESS, mxStatusIndicator) : 0;
if( nRetValue )
{