sw/inc/doc.hxx | 12 +- sw/source/core/crsr/crstrvl.cxx | 4 sw/source/core/doc/DocumentContentOperationsManager.cxx | 4 sw/source/core/doc/docnum.cxx | 92 ++++++++++++---- sw/source/core/edit/ednumber.cxx | 81 ++++++++------ sw/source/core/inc/txtfrm.hxx | 2 sw/source/core/text/txtfrm.cxx | 27 ++++ sw/source/uibase/wrtsh/wrtsh1.cxx | 2 8 files changed, 167 insertions(+), 57 deletions(-)
New commits: commit 26c8b4ddf978e4fce5c7906270497c52e8ad1aee Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 17:22:48 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 17:25:49 2018 +0200 sw_redlinehide_3: adapt even more SwEditShell Num IsNoNum(), GetNumLevel(), IsNumRuleStart(), GetNodeNumStart() Change-Id: I38e592835f3e6e3e7faa901e5b6533b2222fb35a diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 4e7261f8e368..d82a72c03b13 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -666,7 +666,7 @@ bool SwEditShell::IsNoNum( bool bChkStart ) const && !HasSelection() && ( !bChkStart || IsSttPara() ) ) { - const SwTextNode* pTextNd = GetCursor()->GetNode().GetTextNode(); + const SwTextNode* pTextNd = sw::GetParaPropsNode(*GetLayout(), GetCursor()->GetPoint()->nNode); if ( pTextNd != nullptr ) { bResult = !pTextNd->IsCountedInList(); @@ -682,7 +682,7 @@ sal_uInt8 SwEditShell::GetNumLevel() const sal_uInt8 nLevel = MAXLEVEL; SwPaM* pCursor = GetCursor(); - const SwTextNode* pTextNd = pCursor->GetNode().GetTextNode(); + const SwTextNode *const pTextNd = sw::GetParaPropsNode(*GetLayout(), pCursor->GetPoint()->nNode); OSL_ENSURE( pTextNd, "GetNumLevel() without text node" ); if ( pTextNd == nullptr ) @@ -837,7 +837,7 @@ void SwEditShell::SetNumRuleStart( bool bFlag, SwPaM* pPaM ) bool SwEditShell::IsNumRuleStart( SwPaM* pPaM ) const { SwPaM* pCursor = pPaM ? pPaM : GetCursor( ); - const SwTextNode* pTextNd = pCursor->GetNode().GetTextNode(); + const SwTextNode *const pTextNd = sw::GetParaPropsNode(*GetLayout(), pCursor->GetPoint()->nNode); return pTextNd && pTextNd->IsListRestart(); } @@ -870,7 +870,7 @@ void SwEditShell::SetNodeNumStart( sal_uInt16 nStt ) sal_uInt16 SwEditShell::GetNodeNumStart( SwPaM* pPaM ) const { SwPaM* pCursor = pPaM ? pPaM : GetCursor(); - const SwTextNode* pTextNd = pCursor->GetNode().GetTextNode(); + const SwTextNode *const pTextNd = sw::GetParaPropsNode(*GetLayout(), pCursor->GetPoint()->nNode); // correction: check, if list restart value is set at text node and // use new method <SwTextNode::GetAttrListRestartValue()>. // return USHRT_MAX, if no list restart value is found. commit f39631e225669b46b5df7ac74b601b8e51a6e85c Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 17:20:17 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 17:24:29 2018 +0200 sw_redlinehide_3: adapt more SwEditShell Num ReplaceNumRule(), SetNumRuleStart(), SetNodeNumStart() Change-Id: I7e58d477b02e0e242ce3c12eca0071856533debf diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 272a83e8122c..4e7261f8e368 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -804,7 +804,8 @@ void SwEditShell::ChgNumRuleFormats( const SwNumRule& rRule ) void SwEditShell::ReplaceNumRule( const OUString& rOldRule, const OUString& rNewRule ) { StartAllAction(); - GetDoc()->ReplaceNumRule( *GetCursor()->GetPoint(), rOldRule, rNewRule ); + SwPosition const pos(sw::GetParaPropsPos(*GetLayout(), *GetCursor()->GetPoint())); + GetDoc()->ReplaceNumRule( pos, rOldRule, rNewRule ); EndAllAction(); } @@ -818,11 +819,17 @@ void SwEditShell::SetNumRuleStart( bool bFlag, SwPaM* pPaM ) SwPamRanges aRangeArr( *pCursor ); SwPaM aPam( *pCursor->GetPoint() ); for( size_t n = 0; n < aRangeArr.Count(); ++n ) - GetDoc()->SetNumRuleStart( *aRangeArr.SetPam( n, aPam ).GetPoint(), bFlag ); + { + SwPosition const pos(sw::GetParaPropsPos(*GetLayout(), *aRangeArr.SetPam( n, aPam ).GetPoint())); + GetDoc()->SetNumRuleStart( pos, bFlag ); + } GetDoc()->GetIDocumentUndoRedo().EndUndo( SwUndoId::END, nullptr ); } else - GetDoc()->SetNumRuleStart( *pCursor->GetPoint(), bFlag ); + { + SwPosition const pos(sw::GetParaPropsPos(*GetLayout(), *GetCursor()->GetPoint())); + GetDoc()->SetNumRuleStart(pos, bFlag); + } EndAllAction(); } @@ -845,11 +852,17 @@ void SwEditShell::SetNodeNumStart( sal_uInt16 nStt ) SwPamRanges aRangeArr( *pCursor ); SwPaM aPam( *pCursor->GetPoint() ); for( size_t n = 0; n < aRangeArr.Count(); ++n ) - GetDoc()->SetNodeNumStart( *aRangeArr.SetPam( n, aPam ).GetPoint(), nStt ); + { + SwPosition const pos(sw::GetParaPropsPos(*GetLayout(), *aRangeArr.SetPam( n, aPam ).GetPoint())); + GetDoc()->SetNodeNumStart( pos, nStt ); + } GetDoc()->GetIDocumentUndoRedo().EndUndo( SwUndoId::END, nullptr ); } else - GetDoc()->SetNodeNumStart( *pCursor->GetPoint(), nStt ); + { + SwPosition const pos(sw::GetParaPropsPos(*GetLayout(), *pCursor->GetPoint())); + GetDoc()->SetNodeNumStart( pos, nStt ); + } EndAllAction(); } diff --git a/sw/source/core/inc/txtfrm.hxx b/sw/source/core/inc/txtfrm.hxx index bac7372cd27e..d74f5d4dd2d0 100644 --- a/sw/source/core/inc/txtfrm.hxx +++ b/sw/source/core/inc/txtfrm.hxx @@ -102,6 +102,7 @@ std::unique_ptr<sw::MergedPara> CheckParaRedlineMerge(SwTextFrame & rFrame, SwTe bool FrameContainsNode(SwContentFrame const& rFrame, sal_uLong nNodeIndex); bool IsParaPropsNode(SwRootFrame const& rLayout, SwTextNode const& rNode); SwTextNode * GetParaPropsNode(SwRootFrame const& rLayout, SwNodeIndex const& rNode); +SwPosition GetParaPropsPos(SwRootFrame const& rLayout, SwPosition const& rPos); TextFrameIndex UpdateMergedParaForDelete(MergedPara & rMerged, bool isRealDelete, diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx index e1f4beaefc3d..24d6b5fdb347 100644 --- a/sw/source/core/text/txtfrm.cxx +++ b/sw/source/core/text/txtfrm.cxx @@ -341,6 +341,19 @@ namespace sw { } } + SwPosition + GetParaPropsPos(SwRootFrame const& rLayout, SwPosition const& rPos) + { + SwPosition pos(rPos); + SwTextNode const*const pNode(pos.nNode.GetNode().GetTextNode()); + if (pNode) + { + pos.nNode = *sw::GetParaPropsNode(rLayout, *pNode); + pos.nContent.Assign(pos.nNode.GetNode().GetContentNode(), 0); + } + return pos; + } + } // namespace sw /// Switches width and height of the text frame commit 106f51e17c057adba0de233a25a0c7c1ad1136bb Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 17:12:14 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 17:13:42 2018 +0200 sw_redlinehide_3: adapt SwEditShell::SearchNumRule() Change-Id: Ic7d07a1e4920d5776a8fec3893cd2cd2aff2c6fc diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 8072372e78e7..8ccee0b48349 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -1100,6 +1100,7 @@ public: const bool bOutline, int nNonEmptyAllowed, OUString& sListId, + SwRootFrame const* pLayout, const bool bInvestigateStartNode = false ); // Paragraphs without numbering but with indents. diff --git a/sw/source/core/doc/DocumentContentOperationsManager.cxx b/sw/source/core/doc/DocumentContentOperationsManager.cxx index 85cef08f4698..e52356822ed4 100644 --- a/sw/source/core/doc/DocumentContentOperationsManager.cxx +++ b/sw/source/core/doc/DocumentContentOperationsManager.cxx @@ -4337,11 +4337,11 @@ bool DocumentContentOperationsManager::CopyImpl( SwPaM& rPam, SwPosition& rPos, // Keep also the <ListId> value for possible propagation. OUString aListIdToPropagate; const SwNumRule* pNumRuleToPropagate = - pDoc->SearchNumRule( rPos, false, true, false, 0, aListIdToPropagate, true ); + pDoc->SearchNumRule( rPos, false, true, false, 0, aListIdToPropagate, nullptr, true ); if ( !pNumRuleToPropagate ) { pNumRuleToPropagate = - pDoc->SearchNumRule( rPos, false, false, false, 0, aListIdToPropagate, true ); + pDoc->SearchNumRule( rPos, false, false, false, 0, aListIdToPropagate, nullptr, true ); } // #i86492# // Do not propagate previous found list, if diff --git a/sw/source/core/doc/docnum.cxx b/sw/source/core/doc/docnum.cxx index db962dfd71a2..ff96eb5596e8 100644 --- a/sw/source/core/doc/docnum.cxx +++ b/sw/source/core/doc/docnum.cxx @@ -1236,7 +1236,7 @@ void SwDoc::MakeUniqueNumRules(const SwPaM & rPaM) const_cast<SwNumRule *> (SearchNumRule( aPos, false, pCNd->HasNumber(), false, 0, - aListStyleData.sListId, true )); + aListStyleData.sListId, nullptr, true )); } if ( aListStyleData.pReplaceNumRule == nullptr ) @@ -1571,10 +1571,15 @@ const SwNumRule * SwDoc::SearchNumRule(const SwPosition & rPos, const bool bOutline, int nNonEmptyAllowed, OUString& sListId, + SwRootFrame const* pLayout, const bool bInvestigateStartNode) { const SwNumRule * pResult = nullptr; SwTextNode * pTextNd = rPos.nNode.GetNode().GetTextNode(); + if (pLayout) + { + pTextNd = sw::GetParaPropsNode(*pLayout, rPos.nNode); + } SwNode * pStartFromNode = pTextNd; if (pTextNd) @@ -1588,9 +1593,9 @@ const SwNumRule * SwDoc::SearchNumRule(const SwPosition & rPos, if ( !bInvestigateStartNode ) { if (bForward) - ++aIdx; + lcl_GotoNextLayoutTextFrame(aIdx, pLayout); else - --aIdx; + lcl_GotoPrevLayoutTextFrame(aIdx, pLayout); } if (aIdx.GetNode().IsTextNode()) @@ -1626,9 +1631,9 @@ const SwNumRule * SwDoc::SearchNumRule(const SwPosition & rPos, if ( bInvestigateStartNode ) { if (bForward) - ++aIdx; + lcl_GotoNextLayoutTextFrame(aIdx, pLayout); else - --aIdx; + lcl_GotoPrevLayoutTextFrame(aIdx, pLayout); } pNode = &aIdx.GetNode(); diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 9068ba1bce49..272a83e8122c 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -873,7 +873,7 @@ const SwNumRule * SwEditShell::SearchNumRule( const bool bNum, { return GetDoc()->SearchNumRule( *(GetCursor()->Start()), false/*bForward*/, bNum, false/*bOutline*/, -1/*nNonEmptyAllowe*/, - sListId ); + sListId, GetLayout() ); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/sw/source/uibase/wrtsh/wrtsh1.cxx b/sw/source/uibase/wrtsh/wrtsh1.cxx index f97a0daf62ad..9ddfd9fe39e8 100644 --- a/sw/source/uibase/wrtsh/wrtsh1.cxx +++ b/sw/source/uibase/wrtsh/wrtsh1.cxx @@ -1122,7 +1122,7 @@ void SwWrtShell::NumOrBulletOn(bool bNum) { pNumRule = GetDoc()->SearchNumRule( *GetCursor()->GetPoint(), false, bNum, false, 0, - sContinuedListId ); + sContinuedListId, GetLayout() ); bContinueFoundNumRule = pNumRule != nullptr; } commit e80304f652383e1212e1669f735cbd8e1af20927 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 14:39:23 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 17:10:49 2018 +0200 sw_redlinehide_3: adapt SwDoc::GotoNextNum()/GotoPrevNum() ... and callers in SwCursorShell / SwEditShell. Change-Id: Iffe4ca7893b97df8bd07f25c9e0e1dc908011e3f diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 4ef4f0e51a29..8072372e78e7 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -1065,9 +1065,11 @@ public: const OUString& rNewRule ); // Goto next/previous on same level. - static bool GotoNextNum( SwPosition&, bool bOverUpper = true, + static bool GotoNextNum( SwPosition&, SwRootFrame const* pLayout, + bool bOverUpper = true, sal_uInt8* pUpper = nullptr, sal_uInt8* pLower = nullptr ); - static bool GotoPrevNum( SwPosition&, bool bOverUpper = true ); + static bool GotoPrevNum( SwPosition&, SwRootFrame const* pLayout, + bool bOverUpper = true ); /** Searches for a text node with a numbering rule. diff --git a/sw/source/core/crsr/crstrvl.cxx b/sw/source/core/crsr/crstrvl.cxx index 9b8f2e6c6bf3..05890b2e1803 100644 --- a/sw/source/core/crsr/crstrvl.cxx +++ b/sw/source/core/crsr/crstrvl.cxx @@ -112,14 +112,14 @@ void SwCursorShell::MoveCursorToNum() /// go to next/previous point on the same level void SwCursorShell::GotoNextNum() { - if (!SwDoc::GotoNextNum( *m_pCurrentCursor->GetPoint() )) + if (!SwDoc::GotoNextNum(*m_pCurrentCursor->GetPoint(), GetLayout())) return; MoveCursorToNum(); } void SwCursorShell::GotoPrevNum() { - if (!SwDoc::GotoPrevNum( *m_pCurrentCursor->GetPoint() )) + if (!SwDoc::GotoPrevNum(*m_pCurrentCursor->GetPoint(), GetLayout())) return; MoveCursorToNum(); } diff --git a/sw/source/core/doc/docnum.cxx b/sw/source/core/doc/docnum.cxx index f8ed4e468393..db962dfd71a2 100644 --- a/sw/source/core/doc/docnum.cxx +++ b/sw/source/core/doc/docnum.cxx @@ -42,6 +42,7 @@ #include <docary.hxx> #include <mvsave.hxx> #include <txtfrm.hxx> +#include <rootfrm.hxx> #include <pamtyp.hxx> #include <redline.hxx> #include <strings.hrc> @@ -1407,10 +1408,47 @@ static bool lcl_IsValidPrevNextNumNode( const SwNodeIndex& rIdx ) return bRet; } +static void +lcl_GotoPrevLayoutTextFrame(SwNodeIndex & rIndex, SwRootFrame const*const pLayout) +{ + if (pLayout && pLayout->IsHideRedlines() + && rIndex.GetNode().IsTextNode() + && rIndex.GetNode().GetRedlineMergeFlag() != SwNode::Merge::None) + { + rIndex = *static_cast<SwTextFrame*>(rIndex.GetNode().GetTextNode()->getLayoutFrame(pLayout))->GetMergedPara()->pFirstNode; + } + --rIndex; + if (pLayout && rIndex.GetNode().IsTextNode()) + { + rIndex = *sw::GetParaPropsNode(*pLayout, *rIndex.GetNode().GetTextNode()); + } +} + +static void +lcl_GotoNextLayoutTextFrame(SwNodeIndex & rIndex, SwRootFrame const*const pLayout) +{ + if (pLayout && pLayout->IsHideRedlines() + && rIndex.GetNode().IsTextNode() + && rIndex.GetNode().GetRedlineMergeFlag() != SwNode::Merge::None) + { + rIndex = *static_cast<SwTextFrame*>(rIndex.GetNode().GetTextNode()->getLayoutFrame(pLayout))->GetMergedPara()->pLastNode; + } + ++rIndex; + if (pLayout && rIndex.GetNode().IsTextNode()) + { + rIndex = *sw::GetParaPropsNode(*pLayout, *rIndex.GetNode().GetTextNode()); + } +} + static bool lcl_GotoNextPrevNum( SwPosition& rPos, bool bNext, - bool bOverUpper, sal_uInt8* pUpper, sal_uInt8* pLower ) + bool bOverUpper, sal_uInt8* pUpper, sal_uInt8* pLower, + SwRootFrame const*const pLayout) { const SwTextNode* pNd = rPos.nNode.GetNode().GetTextNode(); + if (pNd && pLayout) + { + pNd = sw::GetParaPropsNode(*pLayout, *pNd); + } if( !pNd || nullptr == pNd->GetNumRule() ) return false; @@ -1422,7 +1460,7 @@ static bool lcl_GotoNextPrevNum( SwPosition& rPos, bool bNext, // If NO_NUMLEVEL is switched on, we search the preceding Node with Numbering bool bError = false; do { - --aIdx; + lcl_GotoPrevLayoutTextFrame(aIdx, pLayout); if( aIdx.GetNode().IsTextNode() ) { pNd = aIdx.GetNode().GetTextNode(); @@ -1454,12 +1492,12 @@ static bool lcl_GotoNextPrevNum( SwPosition& rPos, bool bNext, const SwTextNode* pLast; if( bNext ) { - ++aIdx; + lcl_GotoNextLayoutTextFrame(aIdx, pLayout); pLast = pNd; } else { - --aIdx; + lcl_GotoPrevLayoutTextFrame(aIdx, pLayout); pLast = nullptr; } @@ -1490,9 +1528,9 @@ static bool lcl_GotoNextPrevNum( SwPosition& rPos, bool bNext, break; if( bNext ) - ++aIdx; + lcl_GotoNextLayoutTextFrame(aIdx, pLayout); else - --aIdx; + lcl_GotoPrevLayoutTextFrame(aIdx, pLayout); } if( !bRet && !bOverUpper && pLast ) // do not iterate over higher numbers, but still to the end @@ -1521,10 +1559,10 @@ static bool lcl_GotoNextPrevNum( SwPosition& rPos, bool bNext, return bRet; } -bool SwDoc::GotoNextNum( SwPosition& rPos, bool bOverUpper, - sal_uInt8* pUpper, sal_uInt8* pLower ) +bool SwDoc::GotoNextNum(SwPosition& rPos, SwRootFrame const*const pLayout, + bool bOverUpper, sal_uInt8* pUpper, sal_uInt8* pLower) { - return ::lcl_GotoNextPrevNum( rPos, true, bOverUpper, pUpper, pLower ); + return ::lcl_GotoNextPrevNum(rPos, true, bOverUpper, pUpper, pLower, pLayout); } const SwNumRule * SwDoc::SearchNumRule(const SwPosition & rPos, @@ -1602,9 +1640,10 @@ const SwNumRule * SwDoc::SearchNumRule(const SwPosition & rPos, return pResult; } -bool SwDoc::GotoPrevNum( SwPosition& rPos, bool bOverUpper ) +bool SwDoc::GotoPrevNum(SwPosition& rPos, SwRootFrame const*const pLayout, + bool bOverUpper) { - return ::lcl_GotoNextPrevNum( rPos, false, bOverUpper, nullptr, nullptr ); + return ::lcl_GotoNextPrevNum(rPos, false, bOverUpper, nullptr, nullptr, pLayout); } bool SwDoc::NumUpDown( const SwPaM& rPam, bool bDown ) diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index f6394b08d808..9068ba1bce49 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -430,7 +430,7 @@ void SwEditShell::GetCurrentOutlineLevels( sal_uInt8& rUpper, sal_uInt8& rLower aCursor.SetMark(); if( pCursor->HasMark() ) *aCursor.GetPoint() = *pCursor->End(); - SwDoc::GotoNextNum( *aCursor.GetPoint(), false, &rUpper, &rLower ); + SwDoc::GotoNextNum(*aCursor.GetPoint(), GetLayout(), false, &rUpper, &rLower); } bool SwEditShell::MoveNumParas( bool bUpperLower, bool bUpperLeft ) @@ -447,7 +447,7 @@ bool SwEditShell::MoveNumParas( bool bUpperLower, bool bUpperLeft ) bool bRet = false; sal_uInt8 nUpperLevel, nLowerLevel; - if( SwDoc::GotoNextNum( *aCursor.GetPoint(), false, + if (SwDoc::GotoNextNum( *aCursor.GetPoint(), GetLayout(), false, &nUpperLevel, &nLowerLevel )) { if( bUpperLower ) @@ -459,7 +459,7 @@ bool SwEditShell::MoveNumParas( bool bUpperLower, bool bUpperLeft ) if( bUpperLeft ) // move up { SwPosition aPos( *aCursor.GetMark() ); - if( SwDoc::GotoPrevNum( aPos, false ) ) + if (SwDoc::GotoPrevNum( aPos, GetLayout(), false )) nOffset = aPos.nNode.GetIndex() - aCursor.GetMark()->nNode.GetIndex(); else @@ -475,7 +475,9 @@ bool SwEditShell::MoveNumParas( bool bUpperLower, bool bUpperLeft ) } else // move down { - const SwNumRule* pOrig = aCursor.GetNode(false).GetTextNode()->GetNumRule(); + assert(!aCursor.GetNode().IsTextNode() + || sw::IsParaPropsNode(*GetLayout(), *aCursor.GetNode().GetTextNode())); + const SwNumRule* pOrig = sw::GetParaPropsNode(*GetLayout(), *aCursor.GetNode(false).GetTextNode())->GetNumRule(); if( aCursor.GetNode().IsTextNode() && pOrig == aCursor.GetNode().GetTextNode()->GetNumRule() ) { commit cf6555f33872e55718cc5a3ff9559c46b8ba0a71 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 12:48:46 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 13:09:00 2018 +0200 sw_redlinehide_3: SwEditShell::HasNumber, HasBullet etc. Change-Id: I6db8421a52f7a9bece5ebb95b377dd3bb0a39af4 diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 28345c98147d..f6394b08d808 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -150,8 +150,7 @@ void SwEditShell::NoNum() bool SwEditShell::SelectionHasNumber() const { bool bResult = HasNumber(); - const SwTextNode * pTextNd = - GetCursor()->GetPoint()->nNode.GetNode().GetTextNode(); + const SwTextNode * pTextNd = sw::GetParaPropsNode(*GetLayout(), GetCursor()->GetPoint()->nNode); if (!bResult && pTextNd && pTextNd->Len()==0 && !pTextNd->GetNumRule()) { SwPamRanges aRangeArr( *GetCursor() ); SwPaM aPam( *GetCursor()->GetPoint() ); @@ -168,6 +167,10 @@ bool SwEditShell::SelectionHasNumber() const for (sal_uInt32 nPos = nStt; nPos<=nEnd; nPos++) { pTextNd = mxDoc->GetNodes()[nPos]->GetTextNode(); + if (pTextNd) + { + pTextNd = sw::GetParaPropsNode(*GetLayout(), SwNodeIndex(*pTextNd)); + } if (pTextNd && pTextNd->Len()!=0) { bResult = pTextNd->HasNumber(); @@ -196,8 +199,7 @@ bool SwEditShell::SelectionHasNumber() const bool SwEditShell::SelectionHasBullet() const { bool bResult = HasBullet(); - const SwTextNode * pTextNd = - GetCursor()->GetPoint()->nNode.GetNode().GetTextNode(); + const SwTextNode * pTextNd = sw::GetParaPropsNode(*GetLayout(), GetCursor()->GetPoint()->nNode); if (!bResult && pTextNd && pTextNd->Len()==0 && !pTextNd->GetNumRule()) { SwPamRanges aRangeArr( *GetCursor() ); SwPaM aPam( *GetCursor()->GetPoint() ); @@ -214,6 +216,10 @@ bool SwEditShell::SelectionHasBullet() const for (sal_uInt32 nPos = nStt; nPos<=nEnd; nPos++) { pTextNd = mxDoc->GetNodes()[nPos]->GetTextNode(); + if (pTextNd) + { + pTextNd = sw::GetParaPropsNode(*GetLayout(), SwNodeIndex(*pTextNd)); + } if (pTextNd && pTextNd->Len()!=0) { bResult = pTextNd->HasBullet(); @@ -235,8 +241,7 @@ bool SwEditShell::HasNumber() const { bool bResult = false; - const SwTextNode * pTextNd = - GetCursor()->GetPoint()->nNode.GetNode().GetTextNode(); + const SwTextNode *const pTextNd = sw::GetParaPropsNode(*GetLayout(), GetCursor()->GetPoint()->nNode); if (pTextNd) { @@ -258,8 +263,7 @@ bool SwEditShell::HasBullet() const { bool bResult = false; - const SwTextNode * pTextNd = - GetCursor()->GetPoint()->nNode.GetNode().GetTextNode(); + const SwTextNode *const pTextNd = sw::GetParaPropsNode(*GetLayout(), GetCursor()->GetPoint()->nNode); if (pTextNd) { commit bccac365f8373ca150d7625036557662a13112f1 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 12:48:16 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 13:08:44 2018 +0200 sw_redlinehide_3: fix GetCurrentParaOutlineLevel Change-Id: I1e4c79b78f644dcebf011757be6f5e85c8924441 diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 2571533e9fff..28345c98147d 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -413,8 +413,8 @@ int SwEditShell::GetCurrentParaOutlineLevel( ) const int nLevel = 0; SwPaM* pCursor = GetCursor(); - const SwTextNode* pTextNd = pCursor->GetNode().GetTextNode(); - if (pTextNd && sw::IsParaPropsNode(*GetLayout(), *pTextNd)) + const SwTextNode *const pTextNd = sw::GetParaPropsNode(*GetLayout(), pCursor->GetPoint()->nNode); + if (pTextNd) nLevel = pTextNd->GetAttrOutlineLevel(); return nLevel; } diff --git a/sw/source/core/inc/txtfrm.hxx b/sw/source/core/inc/txtfrm.hxx index 7e2c2aef044c..bac7372cd27e 100644 --- a/sw/source/core/inc/txtfrm.hxx +++ b/sw/source/core/inc/txtfrm.hxx @@ -101,6 +101,7 @@ std::unique_ptr<sw::MergedPara> CheckParaRedlineMerge(SwTextFrame & rFrame, SwTe bool FrameContainsNode(SwContentFrame const& rFrame, sal_uLong nNodeIndex); bool IsParaPropsNode(SwRootFrame const& rLayout, SwTextNode const& rNode); +SwTextNode * GetParaPropsNode(SwRootFrame const& rLayout, SwNodeIndex const& rNode); TextFrameIndex UpdateMergedParaForDelete(MergedPara & rMerged, bool isRealDelete, diff --git a/sw/source/core/text/txtfrm.cxx b/sw/source/core/text/txtfrm.cxx index d550944252e0..e1f4beaefc3d 100644 --- a/sw/source/core/text/txtfrm.cxx +++ b/sw/source/core/text/txtfrm.cxx @@ -327,6 +327,20 @@ namespace sw { return true; } + SwTextNode * + GetParaPropsNode(SwRootFrame const& rLayout, SwNodeIndex const& rPos) + { + SwTextNode *const pTextNode(rPos.GetNode().GetTextNode()); + if (pTextNode && !sw::IsParaPropsNode(rLayout, *pTextNode)) + { + return static_cast<SwTextFrame*>(pTextNode->getLayoutFrame(&rLayout))->GetMergedPara()->pParaPropsNode; + } + else + { + return pTextNode; + } + } + } // namespace sw /// Switches width and height of the text frame commit 02eedffe53d98fd9c2c08c3d6b6dad7308ac8ec7 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 11:58:58 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 11:58:58 2018 +0200 sw_redlinehide_3: SwEditShell::IsFirstNumRuleAtPos() Change-Id: Ic6bd9adc909d7c325f5e450fd9e53a15f68e7a63 diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 5acdb10dd8a1..4ef4f0e51a29 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -1539,7 +1539,7 @@ public: */ static OUString GetPaMDescr(const SwPaM & rPaM); - static bool IsFirstOfNumRuleAtPos( const SwPosition & rPos ); + static bool IsFirstOfNumRuleAtPos(const SwPosition & rPos, SwRootFrame const* pLayout); // access methods for XForms model(s) diff --git a/sw/source/core/doc/docnum.cxx b/sw/source/core/doc/docnum.cxx index cb1baa96358e..f8ed4e468393 100644 --- a/sw/source/core/doc/docnum.cxx +++ b/sw/source/core/doc/docnum.cxx @@ -2323,13 +2323,18 @@ void SwDoc::MarkListLevel( const OUString& sListId, } } -bool SwDoc::IsFirstOfNumRuleAtPos( const SwPosition & rPos ) +bool SwDoc::IsFirstOfNumRuleAtPos(const SwPosition & rPos, + SwRootFrame const*const pLayout) { bool bResult = false; const SwTextNode* pTextNode = rPos.nNode.GetNode().GetTextNode(); if ( pTextNode != nullptr ) { + if (pLayout && !sw::IsParaPropsNode(*pLayout, *pTextNode)) + { + pTextNode = static_cast<SwTextFrame*>(pTextNode->getLayoutFrame(pLayout))->GetMergedPara()->pParaPropsNode; + } bResult = pTextNode->IsFirstOfNumRule(); } diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 00b429349775..2571533e9fff 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -331,7 +331,7 @@ void SwEditShell::NumUpDown( bool bDown ) bool SwEditShell::IsFirstOfNumRuleAtCursorPos() const { - return SwDoc::IsFirstOfNumRuleAtPos( *GetCursor()->GetPoint() ); + return SwDoc::IsFirstOfNumRuleAtPos(*GetCursor()->GetPoint(), GetLayout()); } // -> #i23725#, #i90078# commit 9f3ac160629ea50d8f801c523d37dd90bbfb8168 Author: Michael Stahl <michael.st...@cib.de> AuthorDate: Fri Oct 26 11:29:16 2018 +0200 Commit: Michael Stahl <michael.st...@cib.de> CommitDate: Fri Oct 26 11:34:28 2018 +0200 sw_redlinehide_3: adapt SwEditShell callers of SwDoc::GetNumRuleAtPos Change-Id: I192a9743300a77bc463319789064abd89d046b0a diff --git a/sw/inc/doc.hxx b/sw/inc/doc.hxx index 2670ff98bd03..5acdb10dd8a1 100644 --- a/sw/inc/doc.hxx +++ b/sw/inc/doc.hxx @@ -1032,7 +1032,8 @@ public: void SetNumRuleStart( const SwPosition& rPos, bool bFlag = true ); void SetNodeNumStart( const SwPosition& rPos, sal_uInt16 nStt ); - static SwNumRule* GetNumRuleAtPos( const SwPosition& rPos ); + // sw_redlinehide: may set rPos to different node (the one with the NumRule) + static SwNumRule* GetNumRuleAtPos(SwPosition& rPos, SwRootFrame const* pLayout = nullptr); const SwNumRuleTable& GetNumRuleTable() const { return *mpNumRuleTable; } diff --git a/sw/source/core/doc/docnum.cxx b/sw/source/core/doc/docnum.cxx index 78696475537f..cb1baa96358e 100644 --- a/sw/source/core/doc/docnum.cxx +++ b/sw/source/core/doc/docnum.cxx @@ -2100,13 +2100,20 @@ bool SwDoc::NumOrNoNum( const SwNodeIndex& rIdx, bool bDel ) return bResult; } -SwNumRule* SwDoc::GetNumRuleAtPos( const SwPosition& rPos ) +SwNumRule* SwDoc::GetNumRuleAtPos(SwPosition& rPos, + SwRootFrame const*const pLayout) { SwNumRule* pRet = nullptr; SwTextNode* pTNd = rPos.nNode.GetNode().GetTextNode(); if ( pTNd != nullptr ) { + if (pLayout && !sw::IsParaPropsNode(*pLayout, *pTNd)) + { + pTNd = static_cast<SwTextFrame*>(pTNd->getLayoutFrame(pLayout))->GetMergedPara()->pParaPropsNode; + rPos.nNode = *pTNd; + rPos.nContent.Assign(pTNd, 0); + } pRet = pTNd->GetNumRule(); } diff --git a/sw/source/core/edit/ednumber.cxx b/sw/source/core/edit/ednumber.cxx index 1ea0ace72e8d..00b429349775 100644 --- a/sw/source/core/edit/ednumber.cxx +++ b/sw/source/core/edit/ednumber.cxx @@ -361,7 +361,8 @@ void SwEditShell::SetIndent(short nIndent, const SwPosition & rPos) { StartAllAction(); - SwNumRule *pCurNumRule = SwDoc::GetNumRuleAtPos(rPos); + SwPosition pos(rPos); + SwNumRule *pCurNumRule = SwDoc::GetNumRuleAtPos(pos, GetLayout()); if (pCurNumRule) { @@ -372,7 +373,7 @@ void SwEditShell::SetIndent(short nIndent, const SwPosition & rPos) } else { - const SwTextNode* pTextNode = rPos.nNode.GetNode().GetTextNode(); + const SwTextNode* pTextNode = pos.nNode.GetNode().GetTextNode(); if ( pTextNode != nullptr && pTextNode->GetActualListLevel() >= 0 ) { @@ -381,7 +382,7 @@ void SwEditShell::SetIndent(short nIndent, const SwPosition & rPos) } // change numbering rule - changed numbering rule is not applied at <aPaM> - SwPaM aPaM(rPos); + SwPaM aPaM(pos); GetDoc()->SetNumRule( aPaM, aRule, false, OUString(), false ); } @@ -696,7 +697,7 @@ sal_uInt8 SwEditShell::GetNumLevel() const const SwNumRule* SwEditShell::GetNumRuleAtCurrCursorPos() const { - return SwDoc::GetNumRuleAtPos( *GetCursor()->GetPoint() ); + return SwDoc::GetNumRuleAtPos( *GetCursor()->GetPoint(), GetLayout() ); } const SwNumRule* SwEditShell::GetNumRuleAtCurrentSelection() const @@ -710,7 +711,8 @@ const SwNumRule* SwEditShell::GetNumRuleAtCurrentSelection() const for ( SwNodeIndex aNode = rCurrentCursor.Start()->nNode; aNode <= aEndNode; ++aNode ) { - const SwNumRule* pNumRule = SwDoc::GetNumRuleAtPos( SwPosition( aNode ) ); + SwPosition pos(aNode); + const SwNumRule* pNumRule = SwDoc::GetNumRuleAtPos(pos, GetLayout()); if ( pNumRule == nullptr ) { continue; _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits