diff options
author | Oliver Specht <oliver.specht@cib.de> | 2016-05-18 14:29:01 +0200 |
---|---|---|
committer | Oliver Specht <oliver.specht@cib.de> | 2016-05-19 07:08:33 +0000 |
commit | 7b24f21a46d8f9321434e40e6f9821df0ed2e2d3 (patch) | |
tree | 38e44c93b0805a234ce8a71ae1c152b64117791c /sw/source/uibase | |
parent | 5cf5dc32202e2b785f5a7979a16da3b2a35dee5f (diff) |
tdf#98985 create merge results at the right time
When using mail merge toolbar the resulting documents are now created
on OK in Save/Print and Send dialogs.
Additionally the 'To' is set in the save dialog and the
MailMergeConfigItem ist not deleted twice anymore.
Change-Id: I21f1f49d8bbd40c11b6f771e15b89e0f6c4bc87a
Reviewed-on: https://gerrit.libreoffice.org/25104
Tested-by: Jenkins <ci@libreoffice.org>
Reviewed-by: Oliver Specht <oliver.specht@cib.de>
Diffstat (limited to 'sw/source/uibase')
-rw-r--r-- | sw/source/uibase/app/apphdl.cxx | 36 | ||||
-rw-r--r-- | sw/source/uibase/dbui/dbmgr.cxx | 26 | ||||
-rw-r--r-- | sw/source/uibase/dbui/mmconfigitem.cxx | 16 | ||||
-rw-r--r-- | sw/source/uibase/inc/mmconfigitem.hxx | 2 | ||||
-rw-r--r-- | sw/source/uibase/uiview/uivwimp.cxx | 3 |
5 files changed, 47 insertions, 36 deletions
diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx index c623d484a117..8f93cdb42cc7 100644 --- a/sw/source/uibase/app/apphdl.cxx +++ b/sw/source/uibase/app/apphdl.cxx @@ -615,34 +615,6 @@ IMPL_LINK_NOARG_TYPED(SwMailMergeWizardExecutor, CloseFrameHdl, void*, void) m_pView2Close = nullptr; } } - -SwMailMergeConfigItem* PerformMailMerge(SwView* pView) -{ - SwMailMergeConfigItem* pConfigItem = pView->GetMailMergeConfigItem(); - if (!pConfigItem) - return nullptr; - - svx::ODataAccessDescriptor aDescriptor; - aDescriptor.setDataSource(pConfigItem->GetCurrentDBData().sDataSource); - aDescriptor[ svx::daConnection ] <<= pConfigItem->GetConnection().getTyped(); - aDescriptor[ svx::daCursor ] <<= pConfigItem->GetResultSet(); - aDescriptor[ svx::daCommand ] <<= pConfigItem->GetCurrentDBData().sCommand; - aDescriptor[ svx::daCommandType ] <<= pConfigItem->GetCurrentDBData().nCommandType; - aDescriptor[ svx::daSelection ] <<= pConfigItem->GetSelection(); - - SwWrtShell& rSh = pView->GetWrtShell(); - pConfigItem->SetTargetView(nullptr); - - SwMergeDescriptor aMergeDesc(DBMGR_MERGE_SHELL, rSh, aDescriptor); - aMergeDesc.pMailMergeConfigItem = pConfigItem; - aMergeDesc.bCreateSingleFile = true; - rSh.GetDBManager()->Merge(aMergeDesc); - - pConfigItem->SetMergeDone(); - - return pConfigItem; -} - } // namespace #endif // HAVE_FEATURE_DBCONNECTIVITY @@ -789,7 +761,7 @@ void SwModule::ExecOther(SfxRequest& rReq) break; case FN_MAILMERGE_CREATE_DOCUMENTS: { - SwMailMergeConfigItem* pConfigItem = PerformMailMerge(GetActiveView()); + SwMailMergeConfigItem* pConfigItem = SwDBManager::PerformMailMerge(GetActiveView()); if (pConfigItem && pConfigItem->GetTargetView()) pConfigItem->GetTargetView()->GetViewFrame()->GetFrame().Appear(); @@ -799,10 +771,10 @@ void SwModule::ExecOther(SfxRequest& rReq) case FN_MAILMERGE_PRINT_DOCUMENTS: case FN_MAILMERGE_EMAIL_DOCUMENTS: { - SwMailMergeConfigItem* pConfigItem = PerformMailMerge(GetActiveView()); - if (!pConfigItem) + SwMailMergeConfigItem* pConfigItem = GetActiveView()->GetMailMergeConfigItem(); + if(!pConfigItem) return; - + pConfigItem->SetTargetView(nullptr); SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); switch (nWhich) { diff --git a/sw/source/uibase/dbui/dbmgr.cxx b/sw/source/uibase/dbui/dbmgr.cxx index 576a9fa9adac..74c2a7259752 100644 --- a/sw/source/uibase/dbui/dbmgr.cxx +++ b/sw/source/uibase/dbui/dbmgr.cxx @@ -3086,5 +3086,31 @@ void SwConnectionDisposedListener_Impl::disposing( const lang::EventObject& rSou } } } +SwMailMergeConfigItem* SwDBManager::PerformMailMerge(SwView* pView) +{ + SwMailMergeConfigItem* pConfigItem = pView->GetMailMergeConfigItem(); + if (!pConfigItem) + return nullptr; + + svx::ODataAccessDescriptor aDescriptor; + aDescriptor.setDataSource(pConfigItem->GetCurrentDBData().sDataSource); + aDescriptor[ svx::daConnection ] <<= pConfigItem->GetConnection().getTyped(); + aDescriptor[ svx::daCursor ] <<= pConfigItem->GetResultSet(); + aDescriptor[ svx::daCommand ] <<= pConfigItem->GetCurrentDBData().sCommand; + aDescriptor[ svx::daCommandType ] <<= pConfigItem->GetCurrentDBData().nCommandType; + aDescriptor[ svx::daSelection ] <<= pConfigItem->GetSelection(); + + SwWrtShell& rSh = pView->GetWrtShell(); + pConfigItem->SetTargetView(nullptr); + + SwMergeDescriptor aMergeDesc(DBMGR_MERGE_SHELL, rSh, aDescriptor); + aMergeDesc.pMailMergeConfigItem = pConfigItem; + aMergeDesc.bCreateSingleFile = true; + rSh.GetDBManager()->Merge(aMergeDesc); + + pConfigItem->SetMergeDone(); + + return pConfigItem; +} /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/dbui/mmconfigitem.cxx b/sw/source/uibase/dbui/mmconfigitem.cxx index 6e2d1fd3d4ed..031897a202ba 100644 --- a/sw/source/uibase/dbui/mmconfigitem.cxx +++ b/sw/source/uibase/dbui/mmconfigitem.cxx @@ -1576,9 +1576,20 @@ SwDocMergeInfo& SwMailMergeConfigItem::GetDocumentMergeInfo(sal_uInt32 nDocument return m_pImpl->m_aMergeInfos[nDocument]; } -sal_uInt32 SwMailMergeConfigItem::GetMergedDocumentCount() const + +sal_uInt32 SwMailMergeConfigItem::GetMergedDocumentCount() { - return m_pImpl->m_aMergeInfos.size(); + if(m_pTargetView) + return m_pImpl->m_aMergeInfos.size(); + else + { + sal_Int32 nRestore = GetResultSetPosition(); + MoveResultSet(-1); + sal_Int32 nRet = GetResultSetPosition(); + MoveResultSet( nRestore ); + nRet -= m_aExcludedRecords.size(); + return nRet >= 0 ? nRet : 0; + } } static SwView* lcl_ExistsView(SwView* pView) @@ -1611,6 +1622,7 @@ void SwMailMergeConfigItem::SetTargetView(SwView* pView) if(!m_pTargetView) { m_pImpl->m_aMergeInfos.clear(); + m_bMergeDone = false; } } diff --git a/sw/source/uibase/inc/mmconfigitem.hxx b/sw/source/uibase/inc/mmconfigitem.hxx index d70445ed5d32..6a1d7447c1e0 100644 --- a/sw/source/uibase/inc/mmconfigitem.hxx +++ b/sw/source/uibase/inc/mmconfigitem.hxx @@ -239,7 +239,7 @@ public: void AddMergedDocument(SwDocMergeInfo& rInfo); //returns the page and database cursor information of each merged document SwDocMergeInfo& GetDocumentMergeInfo(sal_uInt32 nDocument); - sal_uInt32 GetMergedDocumentCount() const; + sal_uInt32 GetMergedDocumentCount(); void SetPrintRange( sal_uInt16 nStartDocument, sal_uInt16 nEndDocument) { m_nStartPrint = nStartDocument; m_nEndPrint = nEndDocument; } diff --git a/sw/source/uibase/uiview/uivwimp.cxx b/sw/source/uibase/uiview/uivwimp.cxx index 830e32d8e85f..115ba4d22865 100644 --- a/sw/source/uibase/uiview/uivwimp.cxx +++ b/sw/source/uibase/uiview/uivwimp.cxx @@ -97,7 +97,8 @@ SwView_Impl::~SwView_Impl() pClipEvtLstnr->ViewDestroyed(); } #if HAVE_FEATURE_DBCONNECTIVITY - delete pConfigItem; + if(bMailMergeSourceView) + delete pConfigItem; #endif delete m_pDocInserter; delete m_pRequest; |