summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Stahl <Michael.Stahl@cib.de>2018-05-14 16:25:19 +0200
committerMichael Stahl <Michael.Stahl@cib.de>2018-06-08 21:51:27 +0200
commitf8a3250c38509755046db03a0736415ce0fbeea4 (patch)
tree5b8cd4111e68f4f478c6b52cc61b38185f2b5b19
parent305591728395e3e32279b88a633d7852f0d98017 (diff)
sw_redlinehide: add 3rd mode to SwRedlineItr
So it can work both in the old ignore-redlines mode and in the new hide-redlines mode. Change-Id: I29b23c6749a0f314aff5e9b2342fb389b53bd107
-rw-r--r--sw/source/core/text/frmpaint.cxx2
-rw-r--r--sw/source/core/text/porrst.cxx2
-rw-r--r--sw/source/core/text/redlnitr.cxx23
-rw-r--r--sw/source/core/text/redlnitr.hxx10
4 files changed, 24 insertions, 13 deletions
diff --git a/sw/source/core/text/frmpaint.cxx b/sw/source/core/text/frmpaint.cxx
index a036e2d1e964..1ba4b8588d91 100644
--- a/sw/source/core/text/frmpaint.cxx
+++ b/sw/source/core/text/frmpaint.cxx
@@ -485,7 +485,7 @@ bool SwTextFrame::PaintEmpty( const SwRect &rRect, bool bCheck ) const
SwAttrHandler aAttrHandler;
aAttrHandler.Init( rTextNode.GetSwAttrSet(),
*rTextNode.getIDocumentSettingAccess() );
- SwRedlineItr aRedln( rTextNode, *pFnt, aAttrHandler, nRedlPos, true );
+ SwRedlineItr aRedln(rTextNode, *pFnt, aAttrHandler, nRedlPos, SwRedlineItr::Mode::Show);
}
}
diff --git a/sw/source/core/text/porrst.cxx b/sw/source/core/text/porrst.cxx
index a162577879f8..5d85adbf3c6d 100644
--- a/sw/source/core/text/porrst.cxx
+++ b/sw/source/core/text/porrst.cxx
@@ -259,7 +259,7 @@ SwTwips SwTextFrame::EmptyHeight() const
aAttrHandler.Init( GetTextNode()->GetSwAttrSet(),
*GetTextNode()->getIDocumentSettingAccess() );
SwRedlineItr aRedln( rTextNode, *pFnt, aAttrHandler,
- nRedlPos, true );
+ nRedlPos, SwRedlineItr::Mode::Show);
}
}
diff --git a/sw/source/core/text/redlnitr.cxx b/sw/source/core/text/redlnitr.cxx
index e8da906c0d42..8ee64aa2206b 100644
--- a/sw/source/core/text/redlnitr.cxx
+++ b/sw/source/core/text/redlnitr.cxx
@@ -243,7 +243,12 @@ void SwAttrIter::CtorInitAttrIter(SwTextNode & rTextNode,
}
m_pRedline = new SwRedlineItr( rTextNode, *m_pFont, m_aAttrHandler, nRedlPos,
- bShow, pArr, pExtInp ? pExtInp->Start() : nullptr);
+ m_pMergedPara
+ ? SwRedlineItr::Mode::Hide
+ : bShow
+ ? SwRedlineItr::Mode::Show
+ : SwRedlineItr::Mode::Ignore,
+ pArr, pExtInp ? pExtInp->Start() : nullptr);
if( m_pRedline->IsOn() )
++m_nChgCnt;
@@ -264,7 +269,8 @@ void SwAttrIter::CtorInitAttrIter(SwTextNode & rTextNode,
// If m_nAct is set to SwRedlineTable::npos (via Reset()), then currently no
// Redline is active, m_nStart and m_nEnd are invalid.
SwRedlineItr::SwRedlineItr( const SwTextNode& rTextNd, SwFont& rFnt,
- SwAttrHandler& rAH, sal_Int32 nRed, bool bShow,
+ SwAttrHandler& rAH, sal_Int32 nRed,
+ Mode const mode,
const std::vector<ExtTextInputAttr> *pArr,
SwPosition const*const pExtInputStart)
: m_rDoc( *rTextNd.GetDoc() )
@@ -273,7 +279,7 @@ SwRedlineItr::SwRedlineItr( const SwTextNode& rTextNd, SwFont& rFnt,
, m_nFirst( nRed )
, m_nAct( SwRedlineTable::npos )
, m_bOn( false )
- , m_bShow( bShow )
+ , m_eMode( mode )
{
if( pArr )
{
@@ -301,7 +307,8 @@ short SwRedlineItr::Seek_(SwFont& rFnt, sal_uLong const nNode, sal_Int32 const n
if( ExtOn() )
return 0; // Abbreviation: if we're within an ExtendTextInputs
// there can't be other changes of attributes (not even by redlining)
- if (m_bShow)
+ assert(m_eMode == Mode::Hide || m_nNdIdx == nNode);
+ if (m_eMode == Mode::Show)
{
if (m_bOn)
{
@@ -405,7 +412,7 @@ void SwRedlineItr::ChangeTextAttr( SwFont* pFnt, SwTextAttr const &rHt, bool bCh
{
OSL_ENSURE( IsOn(), "SwRedlineItr::ChangeTextAttr: Off?" );
- if (!m_bShow && !m_pExt)
+ if (m_eMode != Mode::Show && !m_pExt)
return;
if( bChg )
@@ -444,7 +451,7 @@ SwRedlineItr::GetNextRedln(sal_Int32 nNext, SwTextNode const*const pNode, SwRedl
sal_Int32 nStart(m_nStart);
sal_Int32 nEnd(m_nEnd);
nNext = NextExtend(pNode->GetIndex(), nNext);
- if (!m_bShow || SwRedlineTable::npos == m_nFirst)
+ if (m_eMode == Mode::Ignore || SwRedlineTable::npos == m_nFirst)
return std::make_pair(nNext, nullptr);
if (SwRedlineTable::npos == rAct)
{
@@ -463,7 +470,7 @@ SwRedlineItr::GetNextRedln(sal_Int32 nNext, SwTextNode const*const pNode, SwRedl
else if (nStart <= nNext)
{
nNext = nStart;
- if (!m_bShow)
+ if (m_eMode == Mode::Hide)
{
SwRangeRedline const* pRedline = m_rDoc.getIDocumentRedlineAccess().GetRedlineTable()[rAct];
if (pRedline->GetType() == nsRedlineType_t::REDLINE_DELETE)
@@ -511,7 +518,7 @@ bool SwRedlineItr::CheckLine(
{
// note: previously this would return true in the (!m_bShow && m_pExt)
// case, but surely that was a bug?
- if (m_nFirst == SwRedlineTable::npos || !m_bShow)
+ if (m_nFirst == SwRedlineTable::npos || m_eMode != Mode::Show)
return false;
assert(nStartNode == nEndNode); (void) nStartNode; (void) nEndNode;
if( nChkEnd == nChkStart ) // empty lines look one char further
diff --git a/sw/source/core/text/redlnitr.hxx b/sw/source/core/text/redlnitr.hxx
index 24f24650fdd0..0b9f1c940e24 100644
--- a/sw/source/core/text/redlnitr.hxx
+++ b/sw/source/core/text/redlnitr.hxx
@@ -81,7 +81,10 @@ class SwRedlineItr
sal_Int32 m_nStart;
sal_Int32 m_nEnd;
bool m_bOn;
- bool m_bShow;
+public:
+ enum class Mode { Show, Ignore, Hide };
+private:
+ Mode const m_eMode;
void Clear_( SwFont* pFnt );
bool ChkSpecialUnderline_() const;
@@ -98,7 +101,8 @@ class SwRedlineItr
}
public:
SwRedlineItr( const SwTextNode& rTextNd, SwFont& rFnt, SwAttrHandler& rAH,
- sal_Int32 nRedlPos, bool bShw, const std::vector<ExtTextInputAttr> *pArr = nullptr,
+ sal_Int32 nRedlPos, Mode mode,
+ const std::vector<ExtTextInputAttr> *pArr = nullptr,
SwPosition const* pExtInputStart = nullptr);
~SwRedlineItr() COVERITY_NOEXCEPT_FALSE;
SwRedlineTable::size_type GetAct() const { return m_nAct; }
@@ -107,7 +111,7 @@ public:
void ChangeTextAttr( SwFont* pFnt, SwTextAttr const &rHt, bool bChg );
short Seek(SwFont& rFnt, sal_uLong nNode, sal_Int32 nNew, sal_Int32 nOld)
{
- if (m_bShow || m_pExt) return Seek_(rFnt, nNode, nNew, nOld);
+ if (m_eMode != Mode::Hide || m_pExt) return Seek_(rFnt, nNode, nNew, nOld);
return 0;
}
void Reset() {