summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-08-10 00:56:48 +0200
committerMarkus Mohrhard <markus.mohrhard@googlemail.com>2017-08-10 18:53:37 +0200
commit95c25102aeefbc0082ba467755b91a483775e193 (patch)
tree09d4fcae9f0ab1f364f8c8fe6d827940b79fd0b0
parent213a83ce46edf1b81f2285fd59f1d04935760caa (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.hxx4
-rw-r--r--sc/source/filter/xml/xmlmappingi.cxx2
-rw-r--r--sc/source/ui/docshell/dataprovider.cxx23
-rw-r--r--sc/source/ui/inc/dataprovider.hxx10
-rw-r--r--sc/source/ui/miscdlgs/dataproviderdlg.cxx2
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);
}