summaryrefslogtreecommitdiff
path: root/sw/inc
diff options
context:
space:
mode:
Diffstat (limited to 'sw/inc')
-rw-r--r--sw/inc/IDocumentSettingAccess.hxx1
-rw-r--r--sw/inc/doc.hxx3
-rw-r--r--sw/inc/ndhints.hxx26
-rw-r--r--sw/inc/ndtxt.hxx12
-rw-r--r--sw/inc/viewsh.hxx2
5 files changed, 30 insertions, 14 deletions
diff --git a/sw/inc/IDocumentSettingAccess.hxx b/sw/inc/IDocumentSettingAccess.hxx
index f152fef3ff26..7dbfdf5331dd 100644
--- a/sw/inc/IDocumentSettingAccess.hxx
+++ b/sw/inc/IDocumentSettingAccess.hxx
@@ -82,6 +82,7 @@ enum class DocumentSettingId
SURROUND_TEXT_WRAP_SMALL,
PROP_LINE_SPACING_SHRINKS_FIRST_LINE,
SUBTRACT_FLYS,
+ EMPTY_DB_FIELD_HIDES_PARA,
// COMPATIBILITY FLAGS END
BROWSE_MODE,
HTML_MODE,
diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx
index 90ec57051f12..cdd82b1306b1 100644
--- a/sw/inc/doc.hxx
+++ b/sw/inc/doc.hxx
@@ -505,6 +505,9 @@ public:
::sw::DocumentFieldsManager & GetDocumentFieldsManager();
+ bool FieldCanHidePara(sal_uInt16 eFieldId) const;
+ bool FieldHidesPara(const SwField& rField) const;
+
// IDocumentContentOperations
IDocumentContentOperations const & getIDocumentContentOperations() const;
IDocumentContentOperations & getIDocumentContentOperations();
diff --git a/sw/inc/ndhints.hxx b/sw/inc/ndhints.hxx
index 6643a6a920c3..88f61a8700d7 100644
--- a/sw/inc/ndhints.hxx
+++ b/sw/inc/ndhints.hxx
@@ -77,6 +77,8 @@ class SwpHtEnd : public o3tl::sorted_vector<SwTextAttr*, CompareSwpHtEnd,
class SwpHints
{
private:
+ const SwTextNode& m_rParent;
+
// SAL_MAX_SIZE is used by GetStartOf to return
// failure, so just allow SAL_MAX_SIZE-1 hints
static const size_t MAX_HINTS = SAL_MAX_SIZE-1;
@@ -88,9 +90,11 @@ private:
/// true: the Node is in Split and Frames are moved
bool m_bInSplitNode : 1;
- /// m_bHasHiddenParaField is invalid, call CalcHiddenParaField()
- bool m_bCalcHiddenParaField : 1;
- bool m_bHasHiddenParaField : 1; ///< HiddenParaField
+ // m_bHiddenByParaField is invalid, call CalcHiddenParaField()
+ mutable bool m_bCalcHiddenParaField : 1;
+ // if all fields controlling visibility of the paragraph require to hide it
+ // (if there's no such fields, or if any field requires to show, then this is false)
+ mutable bool m_bHiddenByParaField : 1;
bool m_bFootnote : 1; ///< footnotes
bool m_bDDEFields : 1; ///< the TextNode has DDE fields
@@ -108,15 +112,15 @@ private:
void Delete( SwTextAttr* pTextHt );
void SetInSplitNode(bool bInSplit) { m_bInSplitNode = bInSplit; }
- void SetCalcHiddenParaField() { m_bCalcHiddenParaField = true; }
- void SetHiddenParaField( const bool bNew ) { m_bHasHiddenParaField = bNew; }
- bool HasHiddenParaField() const
+ void SetCalcHiddenParaField() const { m_bCalcHiddenParaField = true; }
+ void SetHiddenByParaField( const bool bNew ) const { m_bHiddenByParaField = bNew; }
+ bool IsHiddenByParaField() const
{
if ( m_bCalcHiddenParaField )
{
- (const_cast<SwpHints*>(this))->CalcHiddenParaField();
+ CalcHiddenParaField();
}
- return m_bHasHiddenParaField;
+ return m_bHiddenByParaField;
}
void InsertNesting(SwTextAttrNesting & rNewHint);
@@ -144,7 +148,7 @@ private:
#endif
public:
- SwpHints();
+ SwpHints(const SwTextNode& rParent);
size_t Count() const { return m_HintsByStart.size(); }
bool Contains( const SwTextAttr *pHt ) const;
@@ -179,8 +183,8 @@ public:
bool HasFootnote() const { return m_bFootnote; }
bool IsInSplitNode() const { return m_bInSplitNode; }
- /// calc current value of m_bHasHiddenParaField, returns true iff changed
- bool CalcHiddenParaField();
+ // calc current value of m_bHiddenByParaField, returns true iff changed
+ bool CalcHiddenParaField() const; // changes mutable state
DECL_FIXEDMEMPOOL_NEWDEL(SwpHints)
};
diff --git a/sw/inc/ndtxt.hxx b/sw/inc/ndtxt.hxx
index 87f4a7b28e81..73d44de8915e 100644
--- a/sw/inc/ndtxt.hxx
+++ b/sw/inc/ndtxt.hxx
@@ -21,6 +21,7 @@
#include <cppuhelper/weakref.hxx>
+#include "doc.hxx"
#include "swdllapi.h"
#include <node.hxx>
#include <hintids.hxx>
@@ -702,8 +703,13 @@ public:
{ if (m_pSwpHints) m_pSwpHints->SetCalcHiddenParaField(); }
/// is the paragraph visible?
- inline bool HasHiddenParaField() const
- { return m_pSwpHints && m_pSwpHints->HasHiddenParaField(); }
+ inline bool IsHiddenByParaField() const
+ { return m_pSwpHints && m_pSwpHints->IsHiddenByParaField(); }
+
+ bool FieldCanHidePara(sal_uInt16 eFieldId) const
+ { return GetDoc()->FieldCanHidePara(eFieldId); }
+ bool FieldHidesPara(const SwField& rField) const
+ { return GetDoc()->FieldHidesPara(rField); }
/// Hidden Paragraph Field:
@@ -812,7 +818,7 @@ inline SwpHints& SwTextNode::GetOrCreateSwpHints()
{
if ( !m_pSwpHints )
{
- m_pSwpHints = new SwpHints;
+ m_pSwpHints = new SwpHints(*this);
}
return *m_pSwpHints;
}
diff --git a/sw/inc/viewsh.hxx b/sw/inc/viewsh.hxx
index 94d458753d7b..5b964fdcdbcb 100644
--- a/sw/inc/viewsh.hxx
+++ b/sw/inc/viewsh.hxx
@@ -420,6 +420,8 @@ public:
void SetSubtractFlysAnchoredAtFlys(bool bSubtractFlysAnchoredAtFlys);
+ void SetEmptyDbFieldHidesPara(bool bEmptyDbFieldHidesPara);
+
// DOCUMENT COMPATIBILITY FLAGS END
// Calls Idle-formatter of Layout.