summaryrefslogtreecommitdiff
path: root/sw/source/uibase/app/apphdl.cxx
diff options
context:
space:
mode:
authorJan Holesovsky <kendy@collabora.com>2015-12-18 21:19:10 +0100
committerMiklos Vajna <vmiklos@collabora.co.uk>2016-03-18 09:13:56 +0100
commit827ff2e8531619e96666a5690f538a0a27e5780f (patch)
tree0472e3a2be1e81bc4f8f87e4f9b8462b85567f3c /sw/source/uibase/app/apphdl.cxx
parent299cc331bebe951b8b6fcfdd1e279ce6d2123ece (diff)
mailmerge: Introduce buttons for first/prev/next/last mailmerge entry.
Change-Id: I3dc63d568dc4cd6f7e06b057ca4a387e4ad0677e
Diffstat (limited to 'sw/source/uibase/app/apphdl.cxx')
-rw-r--r--sw/source/uibase/app/apphdl.cxx69
1 files changed, 69 insertions, 0 deletions
diff --git a/sw/source/uibase/app/apphdl.cxx b/sw/source/uibase/app/apphdl.cxx
index 3bd9d4132d84..0f1209c2df0c 100644
--- a/sw/source/uibase/app/apphdl.cxx
+++ b/sw/source/uibase/app/apphdl.cxx
@@ -22,6 +22,7 @@
#include <hintids.hxx>
#include <comphelper/processfactory.hxx>
+#include <comphelper/propertysequence.hxx>
#include <osl/diagnose.h>
#include <tools/link.hxx>
#include <svl/urihelper.hxx>
@@ -201,6 +202,35 @@ void SwModule::StateOther(SfxItemSet &rSet)
rSet.Put( SfxBoolItem( nWhich, m_pModuleConfig->
IsInsTableFormatNum( bWebView )));
break;
+ case FN_MAILMERGE_FIRST_ENTRY:
+ case FN_MAILMERGE_PREV_ENTRY:
+ case FN_MAILMERGE_NEXT_ENTRY:
+ case FN_MAILMERGE_LAST_ENTRY:
+ {
+ /*
+ SwView* pView = ::GetActiveView();
+ SwMailMergeConfigItem* pConfigItem = pView->GetMailMergeConfigItem();
+ if (!pConfigItem)
+ rSet.DisableItem(nWhich);
+ else
+ {
+ bool bFirst, bLast;
+ bool bValid = pConfigItem->IsResultSetFirstLast(bFirst, bLast);
+
+ if (!bValid ||
+ (bFirst && (nWhich == FN_MAILMERGE_FIRST_ENTRY || nWhich == FN_MAILMERGE_PREV_ENTRY)) ||
+ (bLast && (nWhich == FN_MAILMERGE_LAST_ENTRY || nWhich == FN_MAILMERGE_NEXT_ENTRY)))
+ {
+ rSet.DisableItem(nWhich);
+ }
+ else
+ {
+ rSet.Put(SfxVoidItem(nWhich));
+ }
+ }
+ */
+ }
+ break;
default:
OSL_FAIL("::StateOther: default");
}
@@ -699,6 +729,45 @@ void SwModule::ExecOther(SfxRequest& rReq)
}
}
break;
+ case FN_MAILMERGE_FIRST_ENTRY:
+ case FN_MAILMERGE_PREV_ENTRY:
+ case FN_MAILMERGE_NEXT_ENTRY:
+ case FN_MAILMERGE_LAST_ENTRY:
+ {
+ SwView* pView = ::GetActiveView();
+ SwMailMergeConfigItem* pConfigItem = pView->GetMailMergeConfigItem();
+ if (!pConfigItem)
+ return;
+
+ sal_Int32 nPos = pConfigItem->GetResultSetPosition();
+ switch (nWhich)
+ {
+ case FN_MAILMERGE_FIRST_ENTRY: pConfigItem->MoveResultSet(1); break;
+ case FN_MAILMERGE_PREV_ENTRY: pConfigItem->MoveResultSet(nPos - 1); break;
+ case FN_MAILMERGE_NEXT_ENTRY: pConfigItem->MoveResultSet(nPos + 1); break;
+ case FN_MAILMERGE_LAST_ENTRY: pConfigItem->MoveResultSet(-1); break;
+ default: break;
+ }
+
+ //now the record has to be merged into the source document
+ const SwDBData& rDBData = pConfigItem->GetCurrentDBData();
+ uno::Sequence<uno::Any> vSelection({ uno::makeAny(pConfigItem->GetResultSetPosition()) });
+ svx::ODataAccessDescriptor aDescriptor(::comphelper::InitPropertySequence({
+ {"Selection", uno::makeAny(vSelection)},
+ {"DataSourceName", uno::makeAny(rDBData.sDataSource)},
+ {"Command", uno::makeAny(rDBData.sCommand)},
+ {"CommandType", uno::makeAny(rDBData.nCommandType)},
+ {"ActiveConnection", uno::makeAny(pConfigItem->GetConnection().getTyped())},
+ {"Filter", uno::makeAny(pConfigItem->GetFilter())},
+ {"Cursor", uno::makeAny(pConfigItem->GetResultSet())}
+ }));
+
+ SwView* pActView = ::GetActiveView();
+ SwWrtShell& rSh = pActView->GetWrtShell();
+ SwMergeDescriptor aMergeDesc(DBMGR_MERGE, rSh, aDescriptor);
+ rSh.GetDBManager()->MergeNew(aMergeDesc);
+ }
+ break;
#endif
}
}