Kaydet (Commit) 3f66d987 authored tarafından Markus Mohrhard's avatar Markus Mohrhard

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: 's avatarMarkus Mohrhard <markus.mohrhard@googlemail.com>
üst eac72845
...@@ -89,7 +89,7 @@ public: ...@@ -89,7 +89,7 @@ public:
const OUString& getID() const; const OUString& getID() const;
double getUpdateFrequency() const; double getUpdateFrequency() const;
OUString getDBName() const; OUString getDBName() const;
void setDBData(const ScDBData* pDBData); void setDBData(const OUString& rDBName);
ScDBDataManager* getDBManager(); ScDBDataManager* getDBManager();
void refresh(ScDocument* pDoc, bool bDeterministic = false); void refresh(ScDocument* pDoc, bool bDeterministic = false);
......
...@@ -50,7 +50,7 @@ void ScDataProvidersTest::testCSVImport() ...@@ -50,7 +50,7 @@ void ScDataProvidersTest::testCSVImport()
OUString aFileURL; OUString aFileURL;
createFileURL("test1.", "csv", aFileURL); createFileURL("test1.", "csv", aFileURL);
sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.csv", m_pDoc); sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.csv", m_pDoc);
aDataSource.setDBData(pDBData); aDataSource.setDBData(pDBData->GetName());
m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource); m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource);
...@@ -78,7 +78,7 @@ void ScDataProvidersTest::testDataLargerThanDB() ...@@ -78,7 +78,7 @@ void ScDataProvidersTest::testDataLargerThanDB()
OUString aFileURL; OUString aFileURL;
createFileURL("test1.", "csv", aFileURL); createFileURL("test1.", "csv", aFileURL);
sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.csv", m_pDoc); sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.csv", m_pDoc);
aDataSource.setDBData(pDBData); aDataSource.setDBData(pDBData->GetName());
m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource); m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource);
...@@ -107,7 +107,7 @@ void ScDataProvidersTest::testHTMLImport() ...@@ -107,7 +107,7 @@ void ScDataProvidersTest::testHTMLImport()
createFileURL("test1.", "html", aFileURL); createFileURL("test1.", "html", aFileURL);
sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.html", m_pDoc); sc::ExternalDataSource aDataSource(aFileURL, "org.libreoffice.calc.html", m_pDoc);
aDataSource.setID("//table"); aDataSource.setID("//table");
aDataSource.setDBData(pDBData); aDataSource.setDBData(pDBData->GetName());
m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource); m_pDoc->GetExternalDataMapper().insertDataSource(aDataSource);
......
...@@ -105,15 +105,11 @@ ScXMLMappingContext::ScXMLMappingContext( ScXMLImport& rImport, ...@@ -105,15 +105,11 @@ ScXMLMappingContext::ScXMLMappingContext( ScXMLImport& rImport,
if (!aProvider.isEmpty()) if (!aProvider.isEmpty())
{ {
ScDocument* pDoc = GetScImport().GetDocument(); ScDocument* pDoc = GetScImport().GetDocument();
ScDBData* pDBData = pDoc->GetDBCollection()->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(aDBName)); auto& rDataMapper = pDoc->GetExternalDataMapper();
if (pDBData) sc::ExternalDataSource aSource(aURL, aProvider, pDoc);
{ aSource.setID(aID);
auto& rDataMapper = pDoc->GetExternalDataMapper(); aSource.setDBData(aDBName);
sc::ExternalDataSource aSource(aURL, aProvider, pDoc); rDataMapper.insertDataSource(aSource);
aSource.setID(aID);
aSource.setDBData(pDBData);
rDataMapper.insertDataSource(aSource);
}
} }
} }
......
...@@ -111,15 +111,15 @@ OUString ExternalDataSource::getDBName() const ...@@ -111,15 +111,15 @@ OUString ExternalDataSource::getDBName() const
return OUString(); return OUString();
} }
void ExternalDataSource::setDBData(const ScDBData* pDBData) void ExternalDataSource::setDBData(const OUString& rDBName)
{ {
if (!mpDBDataManager) if (!mpDBDataManager)
{ {
mpDBDataManager.reset(new ScDBDataManager(pDBData->GetName(), false, mpDoc)); mpDBDataManager.reset(new ScDBDataManager(rDBName, false, mpDoc));
} }
else else
{ {
mpDBDataManager->SetDatabase(pDBData->GetName()); mpDBDataManager->SetDatabase(rDBName);
} }
} }
......
...@@ -36,6 +36,7 @@ private: ...@@ -36,6 +36,7 @@ private:
VclPtr<ListControl> mpList; VclPtr<ListControl> mpList;
VclPtr<MenuBar> mpBar; VclPtr<MenuBar> mpBar;
VclPtr<ScDataProviderBaseControl> mpDataProviderCtrl; VclPtr<ScDataProviderBaseControl> mpDataProviderCtrl;
VclPtr<ListBox> mpDBRanges;
ScDBData* pDBData; ScDBData* pDBData;
...@@ -47,7 +48,7 @@ private: ...@@ -47,7 +48,7 @@ private:
public: public:
ScDataProviderDlg(vcl::Window* pWindow, std::shared_ptr<ScDocument> pDoc); ScDataProviderDlg(vcl::Window* pWindow, std::shared_ptr<ScDocument> pDoc, ScDocument* pDocument);
virtual ~ScDataProviderDlg() override; virtual ~ScDataProviderDlg() override;
virtual void dispose() override; virtual void dispose() override;
...@@ -61,7 +62,7 @@ public: ...@@ -61,7 +62,7 @@ public:
void splitColumn(); void splitColumn();
void mergeColumns(); void mergeColumns();
void import(ScDocument* pDoc); void import(ScDocument* pDoc, bool bInternal = false);
}; };
#endif #endif
......
...@@ -437,15 +437,23 @@ std::shared_ptr<sc::DataTransformation> ScMergeColumnTransformationControl::getT ...@@ -437,15 +437,23 @@ std::shared_ptr<sc::DataTransformation> ScMergeColumnTransformationControl::getT
} }
ScDataProviderDlg::ScDataProviderDlg(vcl::Window* pParent, std::shared_ptr<ScDocument> pDoc): ScDataProviderDlg::ScDataProviderDlg(vcl::Window* pParent, std::shared_ptr<ScDocument> pDoc, ScDocument* pDocument):
ModalDialog(pParent, "dataproviderdlg", "modules/scalc/ui/dataproviderdlg.ui", true), ModalDialog(pParent, "dataproviderdlg", "modules/scalc/ui/dataproviderdlg.ui", true),
mpDoc(pDoc), mpDoc(pDoc),
mpBar(VclPtr<MenuBar>::Create()) mpBar(VclPtr<MenuBar>::Create())
{ {
get(mpTable, "data_table"); get(mpTable, "data_table");
get(mpList, "operation_ctrl"); get(mpList, "operation_ctrl");
get(mpDBRanges, "select_db_range");
mpTable->Init(mpDoc); mpTable->Init(mpDoc);
ScDBCollection* pDBCollection = pDocument->GetDBCollection();
auto& rNamedDBs = pDBCollection->getNamedDBs();
for (auto& rNamedDB : rNamedDBs)
{
mpDBRanges->InsertEntry(rNamedDB->GetName());
}
mpDataProviderCtrl = VclPtr<ScDataProviderBaseControl>::Create(mpList, LINK(this, ScDataProviderDlg, ImportHdl)); mpDataProviderCtrl = VclPtr<ScDataProviderBaseControl>::Create(mpList, LINK(this, ScDataProviderDlg, ImportHdl));
mpList->addEntry(mpDataProviderCtrl); mpList->addEntry(mpDataProviderCtrl);
...@@ -466,6 +474,7 @@ void ScDataProviderDlg::dispose() ...@@ -466,6 +474,7 @@ void ScDataProviderDlg::dispose()
mpDataProviderCtrl.clear(); mpDataProviderCtrl.clear();
mpTable.clear(); mpTable.clear();
mpList.clear(); mpList.clear();
mpDBRanges.clear();
mpBar.disposeAndClear(); mpBar.disposeAndClear();
ModalDialog::dispose(); ModalDialog::dispose();
...@@ -534,7 +543,7 @@ IMPL_LINK(ScDataProviderDlg, ImportHdl, Window*, pCtrl, void) ...@@ -534,7 +543,7 @@ IMPL_LINK(ScDataProviderDlg, ImportHdl, Window*, pCtrl, void)
{ {
if (pCtrl == mpDataProviderCtrl.get()) if (pCtrl == mpDataProviderCtrl.get())
{ {
import(mpDoc.get()); import(mpDoc.get(), true);
} }
} }
...@@ -572,7 +581,7 @@ void ScDataProviderDlg::mergeColumns() ...@@ -572,7 +581,7 @@ void ScDataProviderDlg::mergeColumns()
mpList->addEntry(pMergeColumnEntry); mpList->addEntry(pMergeColumnEntry);
} }
void ScDataProviderDlg::import(ScDocument* pDoc) void ScDataProviderDlg::import(ScDocument* pDoc, bool bInternal)
{ {
sc::ExternalDataSource aSource = mpDataProviderCtrl->getDataSource(pDoc); sc::ExternalDataSource aSource = mpDataProviderCtrl->getDataSource(pDoc);
std::vector<VclPtr<vcl::Window>> aListEntries = mpList->getEntries(); std::vector<VclPtr<vcl::Window>> aListEntries = mpList->getEntries();
...@@ -586,7 +595,13 @@ void ScDataProviderDlg::import(ScDocument* pDoc) ...@@ -586,7 +595,13 @@ void ScDataProviderDlg::import(ScDocument* pDoc)
} }
aSource.AddDataTransformation(pTransformationCtrl->getTransformation()); 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); aSource.refresh(pDoc, true);
mpTable->Invalidate(); mpTable->Invalidate();
} }
......
...@@ -787,10 +787,10 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) ...@@ -787,10 +787,10 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq )
{ {
std::shared_ptr<ScDocument> xDoc(new ScDocument, o3tl::default_delete<ScDocument>()); std::shared_ptr<ScDocument> xDoc(new ScDocument, o3tl::default_delete<ScDocument>());
xDoc->InsertTab(0, "test"); 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) if (aDialog->Execute() == RET_OK)
{ {
ScDocument* pDoc = GetViewData()->GetDocument();
aDialog->import(pDoc); aDialog->import(pDoc);
} }
} }
......
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.20.0 --> <!-- Generated with glade 3.20.2 -->
<interface domain="sc"> <interface domain="sc">
<requires lib="gtk+" version="3.18"/> <requires lib="gtk+" version="3.18"/>
<requires lib="LibreOffice" version="1.0"/> <requires lib="LibreOffice" version="1.0"/>
...@@ -21,20 +21,76 @@ ...@@ -21,20 +21,76 @@
</packing> </packing>
</child> </child>
<child> <child>
<placeholder/> <object class="GtkBox">
</child>
<child>
<object class="GtkListBox" id="operation_ctrl">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkGrid">
<property name="visible">True</property>
<property name="can_focus">False</property>
<child>
<object class="GtkLabel" id="label2">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="label" translatable="yes" context="dataproviderdlg|db_name">Database Range: </property>
<accessibility>
<relation type="label-for" target="select_db_range"/>
</accessibility>
</object>
<packing>
<property name="left_attach">0</property>
<property name="top_attach">0</property>
</packing>
</child>
<child>
<object class="GtkComboBox" id="select_db_range">
<property name="visible">True</property>
<property name="can_focus">False</property>
<accessibility>
<relation type="labelled-by" target="label2"/>
</accessibility>
</object>
<packing>
<property name="left_attach">1</property>
<property name="top_attach">0</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkListBox" id="operation_ctrl">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="position">1</property>
</packing>
</child>
<child>
<placeholder/>
</child>
</object> </object>
<packing> <packing>
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">2</property> <property name="position">1</property>
</packing> </packing>
</child> </child>
<child>
<placeholder/>
</child>
</object> </object>
</child> </child>
<child type="titlebar">
<placeholder/>
</child>
</object> </object>
</interface> </interface>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment