diff options
-rw-r--r-- | sc/inc/tablink.hxx | 8 | ||||
-rw-r--r-- | sc/source/ui/docshell/arealink.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/docshell/tablink.cxx | 18 |
3 files changed, 20 insertions, 8 deletions
diff --git a/sc/inc/tablink.hxx b/sc/inc/tablink.hxx index aabb2e25dcbe..d8d173e9b744 100644 --- a/sc/inc/tablink.hxx +++ b/sc/inc/tablink.hxx @@ -72,6 +72,7 @@ public: class ScDocument; class SfxMedium; +class SfxFilter; class SC_DLLPUBLIC ScDocumentLoader { @@ -92,7 +93,12 @@ public: void ReleaseDocRef(); // without calling DoClose - static OUString GetOptions( SfxMedium& rMedium ); + /** Create SfxMedium for stream read with SfxFilter and filter options set + at the medium's SfxItemSet. + */ + static SfxMedium* CreateMedium( const OUString& rFileName, const SfxFilter* pFilter, const OUString& rOptions ); + + static OUString GetOptions( SfxMedium& rMedium ); /** Returns the filter name and options from a file name. @param bWithContent diff --git a/sc/source/ui/docshell/arealink.cxx b/sc/source/ui/docshell/arealink.cxx index 2069141d9aff..f917e880ff52 100644 --- a/sc/source/ui/docshell/arealink.cxx +++ b/sc/source/ui/docshell/arealink.cxx @@ -253,7 +253,7 @@ sal_Bool ScAreaLink::Refresh( const OUString& rNewFile, const OUString& rNewFilt if ( rNewFilter != aFilterName ) aOptions = ""; - SfxMedium* pMed = new SfxMedium(aNewUrl, STREAM_STD_READ, pFilter); + SfxMedium* pMed = ScDocumentLoader::CreateMedium( aNewUrl, pFilter, aOptions); // aRef->DoClose() will be closed explicitly, but it is still more safe to use SfxObjectShellLock here ScDocShell* pSrcShell = new ScDocShell(SFX_CREATE_MODE_INTERNAL); diff --git a/sc/source/ui/docshell/tablink.cxx b/sc/source/ui/docshell/tablink.cxx index 9085f08df574..0e89441aa5da 100644 --- a/sc/source/ui/docshell/tablink.cxx +++ b/sc/source/ui/docshell/tablink.cxx @@ -506,6 +506,17 @@ void ScDocumentLoader::RemoveAppPrefix( OUString& rFilterName ) rFilterName = rFilterName.copy( aAppPrefix.getLength()); } +SfxMedium* ScDocumentLoader::CreateMedium( const OUString& rFileName, const SfxFilter* pFilter, + const OUString& rOptions ) +{ + // Always create SfxItemSet so ScDocShell can set options. + SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() ); + if ( !rOptions.isEmpty() ) + pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) ); + + return new SfxMedium( rFileName, STREAM_STD_READ, pFilter, pSet ); +} + ScDocumentLoader::ScDocumentLoader( const OUString& rFileName, OUString& rFilterName, OUString& rOptions, sal_uInt32 nRekCnt, bool bWithInteraction ) : @@ -517,12 +528,7 @@ ScDocumentLoader::ScDocumentLoader( const OUString& rFileName, const SfxFilter* pFilter = ScDocShell::Factory().GetFilterContainer()->GetFilter4FilterName( rFilterName ); - // ItemSet immer anlegen, damit die DocShell die Optionen setzen kann - SfxItemSet* pSet = new SfxAllItemSet( SFX_APP()->GetPool() ); - if ( !rOptions.isEmpty() ) - pSet->Put( SfxStringItem( SID_FILE_FILTEROPTIONS, rOptions ) ); - - pMedium = new SfxMedium( rFileName, STREAM_STD_READ, pFilter, pSet ); + pMedium = CreateMedium( rFileName, pFilter, rOptions); if ( pMedium->GetError() != ERRCODE_NONE ) return ; |