summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sc/inc/tablink.hxx8
-rw-r--r--sc/source/ui/docshell/arealink.cxx2
-rw-r--r--sc/source/ui/docshell/tablink.cxx18
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 ;