diff options
Diffstat (limited to 'sc')
-rw-r--r-- | sc/inc/datamapper.hxx | 2 | ||||
-rw-r--r-- | sc/source/ui/dataprovider/csvdataprovider.cxx | 6 | ||||
-rw-r--r-- | sc/source/ui/dataprovider/dataprovider.cxx | 15 | ||||
-rw-r--r-- | sc/source/ui/inc/dataprovider.hxx | 9 |
4 files changed, 30 insertions, 2 deletions
diff --git a/sc/inc/datamapper.hxx b/sc/inc/datamapper.hxx index b8216b0de0de..55390fc5a39b 100644 --- a/sc/inc/datamapper.hxx +++ b/sc/inc/datamapper.hxx @@ -87,7 +87,7 @@ public: OUString getDBName() const; void setDBData(ScDBData* pDBData); - void refresh(ScDocument* pDoc); + void refresh(ScDocument* pDoc, bool bDeterministic = false); }; class SC_DLLPUBLIC ExternalDataMapper diff --git a/sc/source/ui/dataprovider/csvdataprovider.cxx b/sc/source/ui/dataprovider/csvdataprovider.cxx index cd87d21c3de4..4e2aea9cffa9 100644 --- a/sc/source/ui/dataprovider/csvdataprovider.cxx +++ b/sc/source/ui/dataprovider/csvdataprovider.cxx @@ -202,6 +202,12 @@ void CSVDataProvider::Import() mpDoc->ResetClip(mpDocument, (SCTAB)0); mxCSVFetchThread = new CSVFetchThread(*mpDoc, maURL, &maIdle); mxCSVFetchThread->launch(); + + if (mbDeterministic) + { + SolarMutexReleaser aReleaser; + mxCSVFetchThread->join(); + } } IMPL_LINK_NOARG(CSVDataProvider, ImportFinishedHdl, Timer*, void) diff --git a/sc/source/ui/dataprovider/dataprovider.cxx b/sc/source/ui/dataprovider/dataprovider.cxx index 119dbdd18e9b..79b936f5d704 100644 --- a/sc/source/ui/dataprovider/dataprovider.cxx +++ b/sc/source/ui/dataprovider/dataprovider.cxx @@ -107,7 +107,7 @@ double ExternalDataSource::getUpdateFrequency() const return mnUpdateFrequency; } -void ExternalDataSource::refresh(ScDocument* pDoc) +void ExternalDataSource::refresh(ScDocument* pDoc, bool bDeterministic) { // no DB data available if (!mpDBDataManager) @@ -121,6 +121,9 @@ void ExternalDataSource::refresh(ScDocument* pDoc) if (!mpDataProvider) return; + if (bDeterministic) + mpDataProvider->setDeterministic(); + mpDataProvider->Import(); } @@ -148,6 +151,16 @@ std::vector<sc::ExternalDataSource>& ExternalDataMapper::getDataSources() return maDataSources; } +DataProvider::DataProvider(): + mbDeterministic(false) +{ +} + +void DataProvider::setDeterministic() +{ + mbDeterministic = true; +} + DataProvider::~DataProvider() { } diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx index 00fec69638fb..c45adc9616a1 100644 --- a/sc/source/ui/inc/dataprovider.hxx +++ b/sc/source/ui/inc/dataprovider.hxx @@ -76,7 +76,14 @@ public: */ class DataProvider { +protected: + /** + * If true make the threaded import deterministic for the tests. + */ + bool mbDeterministic; + public: + DataProvider(); virtual ~DataProvider() = 0; virtual void Import() = 0; @@ -84,6 +91,8 @@ public: virtual const OUString& GetURL() const = 0; static std::unique_ptr<SvStream> FetchStreamFromURL(const OUString&, OStringBuffer& rBuffer); + + void setDeterministic(); }; class CSVDataProvider : public DataProvider |