summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEike Rathke <erack@redhat.com>2013-11-27 00:04:44 +0100
committerEike Rathke <erack@redhat.com>2013-11-27 00:13:36 +0100
commit513eadd422ff6a41cfe9a16f82cf32872d729652 (patch)
tree591b363df8e3289ae0ef3433b7888716235d20ba
parent2fde76459153fe3a9c87a601cbde8f79dd2e6adc (diff)
resolved fdo#53103 actually use the external data filter options
ScDocShell::ConvertFrom() queries the filter options from the SfxItemSet at SfxMedium, which is fine when loading the data into the table selector first, but the final load via ScAreaLink created a bare SfxMedium without options set. Do so. Additionally it may now even work that ScDocShell sets options at SfxMedium, which the ScAreaLink code prepared for but previously the SfxMedium did not have an SfxItemSet. Change-Id: I45d6a24906dc3ba41654b8c0951dd84939d8af5e
-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 ;