tdf#101856 evaluate condition to expand / collapse bookmarks
Change-Id: I7c135eab0feeca0ede794f6c88a2b06e339d6a14
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/95795
Tested-by: Jenkins
Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/96003
Reviewed-by: Michael Stahl <michael.stahl@cib.de>
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
index d9406a4..2bb9e87b 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -54,9 +54,11 @@
#include <doc.hxx>
#include <swscanner.hxx>
#include <txatbase.hxx>
#include <calc.hxx>
#include <IDocumentRedlineAccess.hxx>
#include <IDocumentSettingAccess.hxx>
#include <IDocumentContentOperations.hxx>
#include <IDocumentFieldsAccess.hxx>
#include <IMark.hxx>
using namespace ::com::sun::star;
@@ -2283,8 +2285,30 @@
{
const sw::mark::IMark* pMark = pIndex->GetMark();
const sw::mark::IBookmark* pBookmark = dynamic_cast<const sw::mark::IBookmark*>(pMark);
bool bHide = false;
if (pBookmark && pBookmark->IsHidden())
{
// bookmark is marked as hidden
bHide = true;
// bookmark is marked as hidden with conditions
if (!pBookmark->GetHideCondition().isEmpty())
{
SwDoc& rDoc = *const_cast<SwDoc*>(rNode.GetDoc());
SwCalc aCalc(rDoc);
rDoc.getIDocumentFieldsAccess().FieldsToCalc(aCalc, rNode.GetIndex(), USHRT_MAX);
SwSbxValue aValue = aCalc.Calculate(pBookmark->GetHideCondition());
if(!aValue.IsVoidValue())
{
bHide = aValue.GetBool();
}
}
}
if (bHide)
{
// intersect bookmark range with textnode range and add the intersection to rHiddenMulti
const sal_Int32 nSt = pBookmark->GetMarkStart().nContent.GetIndex();