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 )
        {