From 3f66d987ce3a46eb836f2c11bbaf360bd6195e27 Mon Sep 17 00:00:00 2001 From: Markus Mohrhard Date: Thu, 8 Feb 2018 22:49:55 +0100 Subject: add a selection for the DB range to Dataprovider dlg Change-Id: I02c63b46e21cd8d04e6b515e2cbbee08743d5657 Reviewed-on: https://gerrit.libreoffice.org/49459 Tested-by: Jenkins Reviewed-by: Markus Mohrhard --- sc/inc/datamapper.hxx | 2 +- sc/qa/unit/dataproviders_test.cxx | 6 +-- sc/source/filter/xml/xmlmappingi.cxx | 14 +++--- sc/source/ui/dataprovider/dataprovider.cxx | 6 +-- sc/source/ui/inc/dataproviderdlg.hxx | 5 ++- sc/source/ui/miscdlgs/dataproviderdlg.cxx | 23 ++++++++-- sc/source/ui/view/cellsh2.cxx | 4 +- sc/uiconfig/scalc/ui/dataproviderdlg.ui | 68 +++++++++++++++++++++++++++--- 8 files changed, 98 insertions(+), 30 deletions(-) (limited to 'sc') diff --git a/sc/inc/datamapper.hxx b/sc/inc/datamapper.hxx index 75b04440153e..1d7e710051c0 100644 --- a/sc/inc/datamapper.hxx +++ b/sc/inc/datamapper.hxx @@ -89,7 +89,7 @@ public: const OUString& getID() const; double getUpdateFrequency() const; OUString getDBName() const; - void setDBData(const ScDBData* pDBData); + void setDBData(const OUString& rDBName); ScDBDataManager* getDBManager(); void refresh(ScDocument* pDoc, bool bDeterministic = false); diff --git a/sc/qa/unit/dataproviders_test.cxx b/sc/qa/unit/dataproviders_test.cxx index d0df69c96d5c..1960fa59eecf 100644 --- a/sc/qa/unit/dataproviders_test.cxx +++ b/sc/qa/unit/dataproviders_test.cxx @@ -50,7 +50,7 @@ void ScDataProvidersTest::testCSVImport() OUString aFileURL; createFileURL("test1.", "csv", aFileURL); sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.csv", m_pDoc); - aDataSource.setDBData(pDBData); + aDataSource.setDBData(pDBData->GetName()); m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource); @@ -78,7 +78,7 @@ void ScDataProvidersTest::testDataLargerThanDB() OUString aFileURL; createFileURL("test1.", "csv", aFileURL); sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.csv", m_pDoc); - aDataSource.setDBData(pDBData); + aDataSource.setDBData(pDBData->GetName()); m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource); @@ -107,7 +107,7 @@ void ScDataProvidersTest::testHTMLImport() createFileURL("test1.", "html", aFileURL); sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.html", m_pDoc); aDataSource.setID("//table"); - aDataSource.setDBData(pDBData); + aDataSource.setDBData(pDBData->GetName()); m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource); diff --git a/sc/source/filter/xml/xmlmappingi.cxx b/sc/source/filter/xml/xmlmappingi.cxx index c40734afc177..c2f8b4004213 100644 --- a/sc/source/filter/xml/xmlmappingi.cxx +++ b/sc/source/filter/xml/xmlmappingi.cxx @@ -105,15 +105,11 @@ ScXMLMappingContext::ScXMLMappingContext( ScXMLImport& rImport, if (!aProvider.isEmpty()) { ScDocument* pDoc = GetScImport().GetDocument(); - ScDBData* pDBData = pDoc->GetDBCollection()->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aDBName)); - if (pDBData) - { - auto& rDataMapper = pDoc->GetExternalDataMapper(); - sc::ExternalDataSource aSource(aURL, aProvider, pDoc); - aSource.setID(aID); - aSource.setDBData(pDBData); - rDataMapper.insertDataSource(aSource); - } + auto& rDataMapper = pDoc->GetExternalDataMapper(); + sc::ExternalDataSource aSource(aURL, aProvider, pDoc); + aSource.setID(aID); + aSource.setDBData(aDBName); + rDataMapper.insertDataSource(aSource); } } diff --git a/sc/source/ui/dataprovider/dataprovider.cxx b/sc/source/ui/dataprovider/dataprovider.cxx index 161aaf502fa9..22a3be99475e 100644 --- a/sc/source/ui/dataprovider/dataprovider.cxx +++ b/sc/source/ui/dataprovider/dataprovider.cxx @@ -111,15 +111,15 @@ OUString ExternalDataSource::getDBName() const return OUString(); } -void ExternalDataSource::setDBData(const ScDBData* pDBData) +void ExternalDataSource::setDBData(const OUString& rDBName) { if (!mpDBDataManager) { - mpDBDataManager.reset(new ScDBDataManager(pDBData->GetName(), false, mpDoc)); + mpDBDataManager.reset(new ScDBDataManager(rDBName, false, mpDoc)); } else { - mpDBDataManager->SetDatabase(pDBData->GetName()); + mpDBDataManager->SetDatabase(rDBName); } } diff --git a/sc/source/ui/inc/dataproviderdlg.hxx b/sc/source/ui/inc/dataproviderdlg.hxx index a56f4f612b45..5b5c444d13d8 100644 --- a/sc/source/ui/inc/dataproviderdlg.hxx +++ b/sc/source/ui/inc/dataproviderdlg.hxx @@ -36,6 +36,7 @@ private: VclPtr mpList; VclPtr mpBar; VclPtr mpDataProviderCtrl; + VclPtr mpDBRanges; ScDBData* pDBData; @@ -47,7 +48,7 @@ private: public: - ScDataProviderDlg(vcl::Window* pWindow, std::shared_ptr pDoc); + ScDataProviderDlg(vcl::Window* pWindow, std::shared_ptr pDoc, ScDocument* pDocument); virtual ~ScDataProviderDlg() override; virtual void dispose() override; @@ -61,7 +62,7 @@ public: void splitColumn(); void mergeColumns(); - void import(ScDocument* pDoc); + void import(ScDocument* pDoc, bool bInternal = false); }; #endif diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx index a94a5d4d41e1..a867b419aa7e 100644 --- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx +++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx @@ -437,15 +437,23 @@ std::shared_ptr ScMergeColumnTransformationControl::getT } -ScDataProviderDlg::ScDataProviderDlg(vcl::Window* pParent, std::shared_ptr pDoc): +ScDataProviderDlg::ScDataProviderDlg(vcl::Window* pParent, std::shared_ptr pDoc, ScDocument* pDocument): ModalDialog(pParent, "dataproviderdlg", "modules/scalc/ui/dataproviderdlg.ui", true), mpDoc(pDoc), mpBar(VclPtr::Create()) { get(mpTable, "data_table"); get(mpList, "operation_ctrl"); + get(mpDBRanges, "select_db_range"); mpTable->Init(mpDoc); + ScDBCollection* pDBCollection = pDocument->GetDBCollection(); + auto& rNamedDBs = pDBCollection->getNamedDBs(); + for (auto& rNamedDB : rNamedDBs) + { + mpDBRanges->InsertEntry(rNamedDB->GetName()); + } + mpDataProviderCtrl = VclPtr::Create(mpList, LINK(this, ScDataProviderDlg, ImportHdl)); mpList->addEntry(mpDataProviderCtrl); @@ -466,6 +474,7 @@ void ScDataProviderDlg::dispose() mpDataProviderCtrl.clear(); mpTable.clear(); mpList.clear(); + mpDBRanges.clear(); mpBar.disposeAndClear(); ModalDialog::dispose(); @@ -534,7 +543,7 @@ IMPL_LINK(ScDataProviderDlg, ImportHdl, Window*, pCtrl, void) { if (pCtrl == mpDataProviderCtrl.get()) { - import(mpDoc.get()); + import(mpDoc.get(), true); } } @@ -572,7 +581,7 @@ void ScDataProviderDlg::mergeColumns() mpList->addEntry(pMergeColumnEntry); } -void ScDataProviderDlg::import(ScDocument* pDoc) +void ScDataProviderDlg::import(ScDocument* pDoc, bool bInternal) { sc::ExternalDataSource aSource = mpDataProviderCtrl->getDataSource(pDoc); std::vector> aListEntries = mpList->getEntries(); @@ -586,7 +595,13 @@ void ScDataProviderDlg::import(ScDocument* pDoc) } aSource.AddDataTransformation(pTransformationCtrl->getTransformation()); } - aSource.setDBData(pDBData); + if (bInternal) + aSource.setDBData(pDBData->GetName()); + else + { + aSource.setDBData(mpDBRanges->GetSelectedEntry()); + pDoc->GetExternalDataMapper().insertDataSource(aSource); + } aSource.refresh(pDoc, true); mpTable->Invalidate(); } diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx index b8b64d869880..b9cead695b7a 100644 --- a/sc/source/ui/view/cellsh2.cxx +++ b/sc/source/ui/view/cellsh2.cxx @@ -787,10 +787,10 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) { std::shared_ptr xDoc(new ScDocument, o3tl::default_delete()); xDoc->InsertTab(0, "test"); - ScopedVclPtrInstance< ScDataProviderDlg > aDialog( pTabViewShell->GetDialogParent(), xDoc); + ScDocument* pDoc = GetViewData()->GetDocument(); + ScopedVclPtrInstance< ScDataProviderDlg > aDialog( pTabViewShell->GetDialogParent(), xDoc, pDoc); if (aDialog->Execute() == RET_OK) { - ScDocument* pDoc = GetViewData()->GetDocument(); aDialog->import(pDoc); } } diff --git a/sc/uiconfig/scalc/ui/dataproviderdlg.ui b/sc/uiconfig/scalc/ui/dataproviderdlg.ui index 7d04e52c5acc..ead166b83cf2 100644 --- a/sc/uiconfig/scalc/ui/dataproviderdlg.ui +++ b/sc/uiconfig/scalc/ui/dataproviderdlg.ui @@ -1,5 +1,5 @@ - + @@ -21,20 +21,76 @@ - - - - + True False + vertical + + + True + False + + + True + False + Database Range: + + + + + + 0 + 0 + + + + + True + False + + + + + + 1 + 0 + + + + + False + True + 0 + + + + + True + False + + + False + True + 1 + + + + + False True - 2 + 1 + + + + + + -- cgit v1.2.3