sc/source/ui/docshell/dataprovider.cxx | 21 +++++++++++---------- sc/source/ui/inc/dataprovider.hxx | 8 ++++---- sc/source/ui/inc/dataproviderdlg.hxx | 1 + sc/source/ui/miscdlgs/dataproviderdlg.cxx | 8 ++++++++ sc/source/ui/view/cellsh2.cxx | 1 - 5 files changed, 24 insertions(+), 15 deletions(-)
New commits: commit 0814bf35b2287e448e350c15d60d0400fd9e224c Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Aug 10 09:35:44 2017 +0200 external data: fix a few issues with the dialog Change-Id: I16358e785d4ebd6375c98b84f4a31d3fa604d734 Reviewed-on: https://gerrit.libreoffice.org/40965 Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Tested-by: Jenkins <c...@libreoffice.org> diff --git a/sc/source/ui/inc/dataproviderdlg.hxx b/sc/source/ui/inc/dataproviderdlg.hxx index 0bba15b4e70d..1281adb0581f 100644 --- a/sc/source/ui/inc/dataproviderdlg.hxx +++ b/sc/source/ui/inc/dataproviderdlg.hxx @@ -39,6 +39,7 @@ class DataProviderDlg : public ModalDialog DECL_LINK(UpdateClickHdl, Button*, void); DECL_LINK(UpdateComboBoxHdl, ComboBox&, void); DECL_LINK(BrowseHdl, Button*, void); + DECL_LINK(EditHdl, Edit&, void); void UpdateEnable(); diff --git a/sc/source/ui/miscdlgs/dataproviderdlg.cxx b/sc/source/ui/miscdlgs/dataproviderdlg.cxx index 8c20f8fff4a6..c583df378300 100644 --- a/sc/source/ui/miscdlgs/dataproviderdlg.cxx +++ b/sc/source/ui/miscdlgs/dataproviderdlg.cxx @@ -29,7 +29,10 @@ DataProviderDlg::DataProviderDlg(ScDocShell *pDocShell, vcl::Window* pParent) get(m_pCBData, "combobox_db"); m_pCbUrl->SetSelectHdl( LINK( this, DataProviderDlg, UpdateComboBoxHdl ) ); + m_pCbUrl->SetModifyHdl(LINK(this, DataProviderDlg, EditHdl)); m_pBtnBrowse->SetClickHdl( LINK( this, DataProviderDlg, BrowseHdl ) ); + Init(); + m_pCBData->Resize(); UpdateEnable(); } @@ -67,6 +70,11 @@ IMPL_LINK_NOARG(DataProviderDlg, UpdateComboBoxHdl, ComboBox&, void) UpdateEnable(); } +IMPL_LINK_NOARG(DataProviderDlg, EditHdl, Edit&, void) +{ + UpdateEnable(); +} + void DataProviderDlg::UpdateEnable() { bool bOk = !m_pCbUrl->GetURL().isEmpty(); diff --git a/sc/source/ui/view/cellsh2.cxx b/sc/source/ui/view/cellsh2.cxx index abbb35219c0a..7a2848251b1a 100644 --- a/sc/source/ui/view/cellsh2.cxx +++ b/sc/source/ui/view/cellsh2.cxx @@ -782,7 +782,6 @@ void ScCellShell::ExecuteDB( SfxRequest& rReq ) case SID_DATA_PROVIDER: { ScopedVclPtrInstance< sc::DataProviderDlg > aDialog( GetViewData()->GetDocShell(), pTabViewShell->GetDialogParent() ); - aDialog->Init(/**pStrm*/); if (aDialog->Execute() == RET_OK) { aDialog->StartImport(); commit 4bd3b786b2d53fd08767e4efaa7abe9803610aae Author: Markus Mohrhard <markus.mohrh...@googlemail.com> Date: Thu Aug 10 09:14:05 2017 +0200 external data: use the DB name instead of a DB pointer When we modify the DB range we create a copy and replace the original DB range with the modified one. Therefore, we would store a pointer to a deleted object. We can always get the range through the name. Change-Id: Ifce28efb7263c300c2c8722ac969807de1ab8b2a Reviewed-on: https://gerrit.libreoffice.org/40964 Reviewed-by: Markus Mohrhard <markus.mohrh...@googlemail.com> Tested-by: Jenkins <c...@libreoffice.org> diff --git a/sc/source/ui/docshell/dataprovider.cxx b/sc/source/ui/docshell/dataprovider.cxx index 9d17c892cb96..5839f3d0f4e8 100644 --- a/sc/source/ui/docshell/dataprovider.cxx +++ b/sc/source/ui/docshell/dataprovider.cxx @@ -104,11 +104,11 @@ void ExternalDataSource::setDBData(ScDBData* pDBData) { if (!mpDBDataManager) { - mpDBDataManager.reset(new ScDBDataManager(pDBData, false, mpDoc)); + mpDBDataManager.reset(new ScDBDataManager(pDBData->GetName(), false, mpDoc)); } else { - mpDBDataManager->SetDatabase(pDBData); + mpDBDataManager->SetDatabase(pDBData->GetName()); } } @@ -321,7 +321,7 @@ void CSVDataProvider::Import() IMPL_LINK_NOARG(CSVDataProvider, ImportFinishedHdl, Timer*, void) { - mpDBDataManager->WriteToDoc(*mpDoc, mpDBDataManager->getDBData()); + mpDBDataManager->WriteToDoc(*mpDoc); mxCSVFetchThread.clear(); mpDoc.reset(); Refresh(); @@ -333,7 +333,7 @@ void CSVDataProvider::Refresh() pDocShell->SetDocumentModified(); } -void ScDBDataManager::WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) +void ScDBDataManager::WriteToDoc(ScDocument& rDoc) { bool bShrunk = false; SCCOL nStartCol = 0; @@ -345,7 +345,7 @@ void ScDBDataManager::WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) rDoc.SetClipArea(aClipRange); ScRange aDestRange; - pDBData->GetArea(aDestRange); + getDBData()->GetArea(aDestRange); SCCOL nColSize = std::min<SCCOL>(aDestRange.aEnd.Col() - aDestRange.aStart.Col(), nEndCol); aDestRange.aEnd.SetCol(aDestRange.aStart.Col() + nColSize); @@ -359,8 +359,8 @@ void ScDBDataManager::WriteToDoc(ScDocument& rDoc, ScDBData* pDBData) pDocShell->PostPaint(aDestRange, PaintPartFlags::All); } -ScDBDataManager::ScDBDataManager(ScDBData* pDBData, bool /*bAllowResize*/, ScDocument* pDoc): - mpDBData(pDBData), +ScDBDataManager::ScDBDataManager(const OUString& rDBName, bool /*bAllowResize*/, ScDocument* pDoc): + maDBName(rDBName), //mbAllowResize(bAllowResize), mpDoc(pDoc) { @@ -370,14 +370,15 @@ ScDBDataManager::~ScDBDataManager() { } -void ScDBDataManager::SetDatabase(ScDBData* pDbData) +void ScDBDataManager::SetDatabase(const OUString& rDBName) { - mpDBData = pDbData; + maDBName = rDBName; } ScDBData* ScDBDataManager::getDBData() { - return mpDBData; + ScDBData* pDBData = mpDoc->GetDBCollection()->getNamedDBs().findByUpperName(ScGlobal::pCharClass->uppercase(maDBName)); + return pDBData; } bool DataProviderFactory::isInternalDataProvider(const OUString& rProvider) diff --git a/sc/source/ui/inc/dataprovider.hxx b/sc/source/ui/inc/dataprovider.hxx index e3d25317578d..8afff1aefc83 100644 --- a/sc/source/ui/inc/dataprovider.hxx +++ b/sc/source/ui/inc/dataprovider.hxx @@ -146,18 +146,18 @@ public: */ class ScDBDataManager { - ScDBData* mpDBData; + OUString maDBName; ScDocument* mpDoc; public: - ScDBDataManager(ScDBData* pDBData, bool bAllowResize, ScDocument* pDoc); + ScDBDataManager(const OUString& rDBName, bool bAllowResize, ScDocument* pDoc); ~ScDBDataManager(); - void SetDatabase(ScDBData* pDBData); + void SetDatabase(const OUString& rDBName); ScDBData* getDBData(); - void WriteToDoc(ScDocument& rDoc, ScDBData* pDBData); + void WriteToDoc(ScDocument& rDoc); }; class DataProviderFactory _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits