diff options
author | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2017-08-10 00:56:48 +0200 |
---|---|---|
committer | Markus Mohrhard <markus.mohrhard@googlemail.com> | 2017-08-10 18:53:37 +0200 |
commit | 95c25102aeefbc0082ba467755b91a483775e193 (patch) | |
tree | 09d4fcae9f0ab1f364f8c8fe6d827940b79fd0b0 | |
parent | 213a83ce46edf1b81f2285fd59f1d04935760caa (diff) |
external data: move the copying to the document to ScDBDataManager
Change-Id: Ic97dcc6418176630ceb50c0c6010c848f2302b59
Reviewed-on: https://gerrit.libreoffice.org/40958
Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
-rw-r--r-- | sc/inc/datamapper.hxx | 4 | ||||
-rw-r--r-- | sc/source/filter/xml/xmlmappingi.cxx | 2 | ||||
-rw-r--r-- | sc/source/ui/docshell/dataprovider.cxx | 23 | ||||
-rw-r--r-- | sc/source/ui/inc/dataprovider.hxx | 10 | ||||
-rw-r--r-- | sc/source/ui/miscdlgs/dataproviderdlg.cxx | 2 |
5 files changed, 21 insertions, 20 deletions
diff --git a/sc/inc/datamapper.hxx b/sc/inc/datamapper.hxx index c96c63f942c0..b8216b0de0de 100644 --- a/sc/inc/datamapper.hxx +++ b/sc/inc/datamapper.hxx @@ -67,10 +67,12 @@ private: std::shared_ptr<DataProvider> mpDataProvider; std::shared_ptr<ScDBDataManager> mpDBDataManager; + ScDocument* mpDoc; + public: ExternalDataSource(const OUString& rURL, - const OUString& rProvider); + const OUString& rProvider, ScDocument* pDoc); ~ExternalDataSource(); diff --git a/sc/source/filter/xml/xmlmappingi.cxx b/sc/source/filter/xml/xmlmappingi.cxx index 426de53670e6..b32dbd9c72f7 100644 --- a/sc/source/filter/xml/xmlmappingi.cxx +++ b/sc/source/filter/xml/xmlmappingi.cxx @@ -113,7 +113,7 @@ ScXMLMappingContext::ScXMLMappingContext( ScXMLImport& rImport, if (pDBData) { auto& rDataMapper = pDoc->GetExternalDataMapper(); - sc::ExternalDataSource aSource(aURL, aProvider); + sc::ExternalDataSource aSource(aURL, aProvider, pDoc); aSource.setID(aID); aSource.setDBData(pDBData); rDataMapper.insertDataSource(aSource); diff --git a/sc/source/ui/docshell/dataprovider.cxx b/sc/source/ui/docshell/dataprovider.cxx index 703bf6b363e6..9cafe70e94f5 100644 --- a/sc/source/ui/docshell/dataprovider.cxx +++ b/sc/source/ui/docshell/dataprovider.cxx @@ -58,10 +58,10 @@ std::unique_ptr<SvStream> FetchStreamFromURL(const OUString& rURL, OStringBuffer } ExternalDataSource::ExternalDataSource(const OUString& rURL, - const OUString& rProvider): + const OUString& rProvider, ScDocument* pDoc): maURL(rURL), maProvider(rProvider), - mnUpdateFrequency(0) + mpDoc(pDoc) { } @@ -104,7 +104,7 @@ void ExternalDataSource::setDBData(ScDBData* pDBData) { if (!mpDBDataManager) { - mpDBDataManager.reset(new ScDBDataManager(pDBData, false)); + mpDBDataManager.reset(new ScDBDataManager(pDBData, false, mpDoc)); } else { @@ -352,7 +352,7 @@ void CSVDataProvider::Import() IMPL_LINK_NOARG(CSVDataProvider, ImportFinishedHdl, Timer*, void) { - WriteToDoc(*mpDoc, mpDBDataManager->getDBData()); + mpDBDataManager->WriteToDoc(*mpDoc, mpDBDataManager->getDBData()); mxCSVFetchThread.clear(); mpDoc.reset(); Refresh(); @@ -387,7 +387,7 @@ Line CSVDataProvider::GetLine() } // TODO: why don't we use existing copy functionality -void CSVDataProvider::WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) +void ScDBDataManager::WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) { bool bShrunk = false; SCCOL nStartCol = 0; @@ -409,21 +409,22 @@ void CSVDataProvider::WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) if (pfValue == nullptr) { OUString aString = rDoc.GetString(nCol, nRow, 0); - mpDocument->SetString(aDestRange.aStart.Col() + nCol, aDestRange.aStart.Row() + nRow, aDestRange.aStart.Tab(), aString); + mpDoc->SetString(aDestRange.aStart.Col() + nCol, aDestRange.aStart.Row() + nRow, aDestRange.aStart.Tab(), aString); } else { - mpDocument->SetValue(aDestRange.aStart.Col() + nCol, aDestRange.aStart.Row() + nRow, aDestRange.aStart.Tab(), *pfValue); + mpDoc->SetValue(aDestRange.aStart.Col() + nCol, aDestRange.aStart.Row() + nRow, aDestRange.aStart.Tab(), *pfValue); } } } - ScDocShell* pDocShell = static_cast<ScDocShell*>(mpDocument->GetDocumentShell()); + ScDocShell* pDocShell = static_cast<ScDocShell*>(mpDoc->GetDocumentShell()); pDocShell->PostPaint(aDestRange, PaintPartFlags::All); } -ScDBDataManager::ScDBDataManager(ScDBData* pDBData, bool /*bAllowResize*/): - mpDBData(pDBData) - //mbAllowResize(bAllowResize) +ScDBDataManager::ScDBDataManager(ScDBData* pDBData, bool /*bAllowResize*/, ScDocument* pDoc): + mpDBData(pDBData), + //mbAllowResize(bAllowResize), + mpDoc(pDoc) { } diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx index b0a3b5d58273..6f203889fb37 100644 --- a/sc/source/ui/inc/dataprovider.hxx +++ b/sc/source/ui/inc/dataprovider.hxx @@ -116,7 +116,6 @@ public: virtual ~DataProvider() = 0; virtual void Import() = 0; - virtual void WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) = 0; virtual const OUString& GetURL() const = 0; }; @@ -141,14 +140,10 @@ public: virtual void Import() override; - // TODO: this method should be moved to the ScDBDataManager - virtual void WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) override; const OUString& GetURL() const override { return maURL; } - DECL_LINK( ImportFinishedHdl, Timer*, void ); }; - /** * This class handles the copying of the data from the imported * temporary document to the actual document. Additionally, in the future @@ -162,14 +157,17 @@ public: class ScDBDataManager { ScDBData* mpDBData; + ScDocument* mpDoc; public: - ScDBDataManager(ScDBData* pDBData, bool bAllowResize); + ScDBDataManager(ScDBData* pDBData, bool bAllowResize, ScDocument* pDoc); ~ScDBDataManager(); void SetDatabase(ScDBData* pDBData); ScDBData* getDBData(); + + void WriteToDoc(ScDocument& rDoc, ScDBData* pDBData); }; class DataProviderFactory diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx index ae0427217ed9..eaa830cde2c1 100644 --- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx +++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx @@ -161,7 +161,7 @@ void DataProviderDlg::StartImport() OUString aURL; // TODO : replace those strings with something that is obtained from user - ExternalDataSource aDataSource(aURL, "org.libreoffice.calc.csv"); + ExternalDataSource aDataSource(aURL, "org.libreoffice.calc.csv", &mpDocShell->GetDocument()); //aDataSource.setDBData(pDBData); mpDocShell->GetDocument().GetExternalDataMapper().insertDataSource(aDataSource); } |