refactor out frame collection with layout
Change-Id: I977c9915414eedead860622b120f00ad811e18e9
This commit is contained in:
@@ -51,6 +51,7 @@ class SwSortedObjs
|
|||||||
std::vector< SwAnchoredObject* > maSortedObjLst;
|
std::vector< SwAnchoredObject* > maSortedObjLst;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
typedef std::vector<SwAnchoredObject*>::const_iterator const_iterator;
|
||||||
SwSortedObjs();
|
SwSortedObjs();
|
||||||
~SwSortedObjs();
|
~SwSortedObjs();
|
||||||
|
|
||||||
@@ -62,6 +63,10 @@ class SwSortedObjs
|
|||||||
input parameter - index of entry, valid value range [0..size()-1]
|
input parameter - index of entry, valid value range [0..size()-1]
|
||||||
*/
|
*/
|
||||||
SwAnchoredObject* operator[]( size_t _nIndex ) const;
|
SwAnchoredObject* operator[]( size_t _nIndex ) const;
|
||||||
|
const_iterator begin() const
|
||||||
|
{ return maSortedObjLst.cbegin(); };
|
||||||
|
const_iterator end() const
|
||||||
|
{ return maSortedObjLst.cend(); };
|
||||||
|
|
||||||
bool Insert( SwAnchoredObject& _rAnchoredObj );
|
bool Insert( SwAnchoredObject& _rAnchoredObj );
|
||||||
|
|
||||||
|
@@ -165,6 +165,35 @@ struct FrameClientSortListLess
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
void lcl_CollectFrameAtNodeWithLayout(SwDoc* pDoc, const SwContentFrm* pCFrm,
|
||||||
|
FrameClientSortList_t& rFrames,
|
||||||
|
const sal_uInt16 nAnchorType)
|
||||||
|
{
|
||||||
|
auto pObjs = pCFrm->GetDrawObjs();
|
||||||
|
if(!pObjs)
|
||||||
|
return;
|
||||||
|
const auto aTextBoxes = SwTextBoxHelper::findTextBoxes(pDoc);
|
||||||
|
for(const auto pAnchoredObj : *pObjs)
|
||||||
|
{
|
||||||
|
SwFrameFormat& rFormat = pAnchoredObj->GetFrameFormat();
|
||||||
|
// Filter out textboxes, which are not interesting at an UNO level.
|
||||||
|
if(aTextBoxes.find(&rFormat) != aTextBoxes.end())
|
||||||
|
continue;
|
||||||
|
if(rFormat.GetAnchor().GetAnchorId() == nAnchorType)
|
||||||
|
{
|
||||||
|
const auto nIdx =
|
||||||
|
rFormat.GetAnchor().GetContentAnchor()->nContent.GetIndex();
|
||||||
|
const auto nOrder = rFormat.GetAnchor().GetOrder();
|
||||||
|
FrameClientSortListEntry entry(nIdx, nOrder, new sw::FrameClient(&rFormat));
|
||||||
|
rFrames.push_back(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void CollectFrameAtNode( const SwNodeIndex& rIdx,
|
void CollectFrameAtNode( const SwNodeIndex& rIdx,
|
||||||
FrameClientSortList_t& rFrames,
|
FrameClientSortList_t& rFrames,
|
||||||
const bool bAtCharAnchoredObjs )
|
const bool bAtCharAnchoredObjs )
|
||||||
@@ -176,7 +205,7 @@ void CollectFrameAtNode( const SwNodeIndex& rIdx,
|
|||||||
// search all borders, images, and OLEs that are connected to the paragraph
|
// search all borders, images, and OLEs that are connected to the paragraph
|
||||||
SwDoc* pDoc = rIdx.GetNode().GetDoc();
|
SwDoc* pDoc = rIdx.GetNode().GetDoc();
|
||||||
|
|
||||||
const sal_uInt16 nChkType = static_cast< sal_uInt16 >((bAtCharAnchoredObjs)
|
const auto nChkType = static_cast< sal_uInt16 >((bAtCharAnchoredObjs)
|
||||||
? FLY_AT_CHAR : FLY_AT_PARA);
|
? FLY_AT_CHAR : FLY_AT_PARA);
|
||||||
const SwContentFrm* pCFrm;
|
const SwContentFrm* pCFrm;
|
||||||
const SwContentNode* pCNd;
|
const SwContentNode* pCNd;
|
||||||
@@ -184,34 +213,7 @@ void CollectFrameAtNode( const SwNodeIndex& rIdx,
|
|||||||
0 != (pCNd = rIdx.GetNode().GetContentNode()) &&
|
0 != (pCNd = rIdx.GetNode().GetContentNode()) &&
|
||||||
0 != (pCFrm = pCNd->getLayoutFrm( pDoc->getIDocumentLayoutAccess().GetCurrentLayout())) )
|
0 != (pCFrm = pCNd->getLayoutFrm( pDoc->getIDocumentLayoutAccess().GetCurrentLayout())) )
|
||||||
{
|
{
|
||||||
const SwSortedObjs *pObjs = pCFrm->GetDrawObjs();
|
lcl_CollectFrameAtNodeWithLayout(pDoc, pCFrm, rFrames, nChkType);
|
||||||
if( pObjs )
|
|
||||||
{
|
|
||||||
std::set<const SwFrameFormat*> aTextBoxes = SwTextBoxHelper::findTextBoxes(pDoc);
|
|
||||||
for( size_t i = 0; i < pObjs->size(); ++i )
|
|
||||||
{
|
|
||||||
SwAnchoredObject* pAnchoredObj = (*pObjs)[i];
|
|
||||||
SwFrameFormat& rFormat = pAnchoredObj->GetFrameFormat();
|
|
||||||
|
|
||||||
// Filter out textboxes, which are not interesting at an UNO level.
|
|
||||||
if (aTextBoxes.find(&rFormat) != aTextBoxes.end())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if ( rFormat.GetAnchor().GetAnchorId() == nChkType )
|
|
||||||
{
|
|
||||||
// create SwDepend and insert into array
|
|
||||||
sw::FrameClient* pNewClient = new sw::FrameClient( &rFormat );
|
|
||||||
const sal_Int32 idx =
|
|
||||||
rFormat.GetAnchor().GetContentAnchor()->nContent.GetIndex();
|
|
||||||
sal_uInt32 nOrder = rFormat.GetAnchor().GetOrder();
|
|
||||||
|
|
||||||
// OD 2004-05-07 #i28701# - sorting no longer needed,
|
|
||||||
// because list <SwSortedObjs> is already sorted.
|
|
||||||
FrameClientSortListEntry entry(idx, nOrder, pNewClient);
|
|
||||||
rFrames.push_back(entry);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user