summaryrefslogtreecommitdiff
path: root/sw/source/uibase
diff options
context:
space:
mode:
authorOliver Specht <oliver.specht@cib.de>2016-05-18 14:29:01 +0200
committerOliver Specht <oliver.specht@cib.de>2016-05-19 07:08:33 +0000
commit7b24f21a46d8f9321434e40e6f9821df0ed2e2d3 (patch)
tree38e44c93b0805a234ce8a71ae1c152b64117791c /sw/source/uibase
parent5cf5dc32202e2b785f5a7979a16da3b2a35dee5f (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.cxx36
-rw-r--r--sw/source/uibase/dbui/dbmgr.cxx26
-rw-r--r--sw/source/uibase/dbui/mmconfigitem.cxx16
-rw-r--r--sw/source/uibase/inc/mmconfigitem.hxx2
-rw-r--r--sw/source/uibase/uiview/uivwimp.cxx3
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;