Kaydet (Commit) 87514172 authored tarafından Michael Stahl's avatar Michael Stahl

sw_redlinehide_4b: adapt FindFormat()

Change-Id: I78cfca1cd629bf518f8294450a34ee228a360ef9
üst 1199902f
......@@ -123,7 +123,8 @@ public:
SwDocPositions nStart, SwDocPositions nEnde,
bool& bCancel,
FindRanges,
const SwTextFormatColl* pReplFormat );
const SwTextFormatColl* pReplFormat,
SwRootFrame const*const pLayout = nullptr);
sal_uLong FindAttrs( const SfxItemSet& rSet, bool bNoCollections,
SwDocPositions nStart, SwDocPositions nEnde,
bool& bCancel,
......
......@@ -30,8 +30,13 @@
struct SwFindParaFormatColl : public SwFindParas
{
const SwTextFormatColl *pFormatColl, *pReplColl;
SwFindParaFormatColl(const SwTextFormatColl& rFormatColl, const SwTextFormatColl* pRpColl)
: pFormatColl( &rFormatColl ), pReplColl( pRpColl )
SwRootFrame const* m_pLayout;
SwFindParaFormatColl(const SwTextFormatColl& rFormatColl,
const SwTextFormatColl *const pRpColl,
SwRootFrame const*const pLayout)
: pFormatColl( &rFormatColl )
, pReplColl( pRpColl )
, m_pLayout(pLayout)
{}
virtual ~SwFindParaFormatColl() {}
virtual int DoFind(SwPaM &, SwMoveFnCollection const &, const SwPaM &, bool bInReadOnly) override;
......@@ -45,11 +50,12 @@ int SwFindParaFormatColl::DoFind(SwPaM & rCursor, SwMoveFnCollection const & fnM
if( bInReadOnly && pReplColl )
bInReadOnly = false;
if (!sw::FindFormatImpl(rCursor, *pFormatColl, fnMove, rRegion, bInReadOnly))
if (!sw::FindFormatImpl(rCursor, *pFormatColl, fnMove, rRegion, bInReadOnly, m_pLayout))
nRet = FIND_NOT_FOUND;
else if( pReplColl )
{
rCursor.GetDoc()->SetTextFormatColl(rCursor, const_cast<SwTextFormatColl*>(pReplColl));
rCursor.GetDoc()->SetTextFormatColl(rCursor,
const_cast<SwTextFormatColl*>(pReplColl), true, false, m_pLayout);
nRet = FIND_NO_RING;
}
return nRet;
......@@ -63,7 +69,8 @@ bool SwFindParaFormatColl::IsReplaceMode() const
/// search for Format-Collections
sal_uLong SwCursor::FindFormat( const SwTextFormatColl& rFormatColl, SwDocPositions nStart,
SwDocPositions nEnd, bool& bCancel,
FindRanges eFndRngs, const SwTextFormatColl* pReplFormatColl )
FindRanges eFndRngs, const SwTextFormatColl* pReplFormatColl,
SwRootFrame const*const pLayout)
{
// switch off OLE-notifications
SwDoc* pDoc = GetDoc();
......@@ -83,7 +90,7 @@ sal_uLong SwCursor::FindFormat( const SwTextFormatColl& rFormatColl, SwDocPositi
&aRewriter );
}
SwFindParaFormatColl aSwFindParaFormatColl(rFormatColl, pReplFormatColl);
SwFindParaFormatColl aSwFindParaFormatColl(rFormatColl, pReplFormatColl, pLayout);
sal_uLong nRet = FindAll( aSwFindParaFormatColl, nStart, nEnd, eFndRngs, bCancel );
pDoc->SetOle2Link( aLnk );
......
......@@ -20,13 +20,15 @@
#include <doc.hxx>
#include <pamtyp.hxx>
#include <pam.hxx>
#include <txtfrm.hxx>
#include <memory>
namespace sw {
bool FindFormatImpl(SwPaM & rSearchPam,
const SwFormat& rFormat, SwMoveFnCollection const & fnMove,
const SwPaM &rRegion, bool bInReadOnly)
const SwPaM &rRegion, bool bInReadOnly,
SwRootFrame const*const pLayout)
{
bool bFound = false;
const bool bSrchForward = &fnMove == &fnMoveForward;
......@@ -47,19 +49,37 @@ bool FindFormatImpl(SwPaM & rSearchPam,
bool bFirst = true;
SwContentNode* pNode;
while( nullptr != ( pNode = ::GetNode( *pPam, bFirst, fnMove, bInReadOnly )))
while (nullptr != (pNode = ::GetNode(*pPam, bFirst, fnMove, bInReadOnly, pLayout)))
{
if ( pNode->GetFormatColl() == &rFormat )
SwTextFrame const*const pFrame(pLayout && pNode->IsTextNode()
? static_cast<SwTextFrame const*>(pNode->getLayoutFrame(pLayout))
: nullptr);
assert(!pLayout || !pNode->IsTextNode() || pFrame);
SwContentNode const& rPropsNode(*(pFrame
? pFrame->GetTextNodeForParaProps()
: pNode));
if (rPropsNode.GetFormatColl() == &rFormat)
{
// if a FormatCollection is found then it is definitely a SwContentNode
// FORWARD: SPoint at the end, GetMark at the beginning of the node
// BACKWARD: SPoint at the beginning, GetMark at the end of the node
// always: incl. start and incl. end
*rSearchPam.GetPoint() = *pPam->GetPoint();
rSearchPam.SetMark();
pNode->MakeEndIndex( &rSearchPam.GetPoint()->nContent );
rSearchPam.GetMark()->nContent = 0;
if (pFrame)
{
*rSearchPam.GetPoint() = *pPam->GetPoint();
rSearchPam.SetMark();
*rSearchPam.GetMark() = pFrame->MapViewToModelPos(
TextFrameIndex(bSrchForward ? pFrame->GetText().getLength() : 0));
}
else
{
*rSearchPam.GetPoint() = *pPam->GetPoint();
rSearchPam.SetMark();
pNode->MakeEndIndex( &rSearchPam.GetPoint()->nContent );
rSearchPam.GetMark()->nContent = 0;
}
// if backward search, switch point and mark
if( !bSrchForward )
......
......@@ -95,7 +95,8 @@ namespace sw {
bool FindFormatImpl(SwPaM & rSearchPam,
const SwFormat& rFormat,
SwMoveFnCollection const & fnMove,
const SwPaM & rRegion, bool bInReadOnly = false);
const SwPaM & rRegion, bool bInReadOnly,
SwRootFrame const* pLayout);
bool FindAttrImpl(SwPaM & rSearchPam,
const SfxPoolItem& rAttr,
SwMoveFnCollection const & fnMove,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment