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>
diff --git a/sw/source/core/text/porlay.cxx b/sw/source/core/text/porlay.cxx
index 499dac0..b9ed4ec 100644
--- a/sw/source/core/text/porlay.cxx
+++ b/sw/source/core/text/porlay.cxx
@@ -48,9 +48,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;
@@ -2515,8 +2517,30 @@
pBookmarks->emplace_back(pBookmark, MarkKind::End);
}
}
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();