Kaydet (Commit) 73f462e2 authored tarafından Oliver-Rainer Wittmann's avatar Oliver-Rainer Wittmann

#119945# - improved setting of OrdNums to reflect "nesting" of objects

- instead of adjusting the OrdNum of the "nested" object the OrdNum of the "parent" is adjusted.

Found by: Yan Ji <yanji.yj at gmail dot com>
Patch by: yuanlin <yuanlin.ibm at gmail dot com>
Review by: Oliver <orw at apache dot org>
üst ba5e132c
...@@ -666,14 +666,15 @@ void SwPageFrm::AppendFlyToPage( SwFlyFrm *pNew ) ...@@ -666,14 +666,15 @@ void SwPageFrm::AppendFlyToPage( SwFlyFrm *pNew )
SdrObject* pObj = pNew->GetVirtDrawObj(); SdrObject* pObj = pNew->GetVirtDrawObj();
ASSERT( pNew->GetAnchorFrm(), "Fly without Anchor" ); ASSERT( pNew->GetAnchorFrm(), "Fly without Anchor" );
const SwFlyFrm* pFly = pNew->GetAnchorFrm()->FindFlyFrm(); SwFlyFrm* pFly = (SwFlyFrm*)pNew->GetAnchorFrm()->FindFlyFrm();
if ( pFly && pObj->GetOrdNum() < pFly->GetVirtDrawObj()->GetOrdNum() ) if ( pFly && pObj->GetOrdNum() < pFly->GetVirtDrawObj()->GetOrdNum() )
{ {
sal_uInt32 nNewNum = pFly->GetVirtDrawObj()->GetOrdNumDirect(); //#i119945# set pFly's OrdNum to _rNewObj's. So when pFly is removed by Undo, the original OrdNum will not be changed.
sal_uInt32 nNewNum = pObj->GetOrdNumDirect();
if ( pObj->GetPage() ) if ( pObj->GetPage() )
pObj->GetPage()->SetObjectOrdNum( pObj->GetOrdNumDirect(), nNewNum); pObj->GetPage()->SetObjectOrdNum( pFly->GetVirtDrawObj()->GetOrdNumDirect(), nNewNum );
else else
pObj->SetOrdNum( nNewNum ); pFly->GetVirtDrawObj()->SetOrdNum( nNewNum );
} }
//Flys die im Cntnt sitzen beachten wir nicht weiter. //Flys die im Cntnt sitzen beachten wir nicht weiter.
...@@ -936,16 +937,16 @@ void SwPageFrm::AppendDrawObjToPage( SwAnchoredObject& _rNewObj ) ...@@ -936,16 +937,16 @@ void SwPageFrm::AppendDrawObjToPage( SwAnchoredObject& _rNewObj )
} }
ASSERT( _rNewObj.GetAnchorFrm(), "anchored draw object without anchor" ); ASSERT( _rNewObj.GetAnchorFrm(), "anchored draw object without anchor" );
const SwFlyFrm* pFlyFrm = _rNewObj.GetAnchorFrm()->FindFlyFrm(); SwFlyFrm* pFlyFrm = (SwFlyFrm*)_rNewObj.GetAnchorFrm()->FindFlyFrm();
if ( pFlyFrm && if ( pFlyFrm &&
_rNewObj.GetDrawObj()->GetOrdNum() < pFlyFrm->GetVirtDrawObj()->GetOrdNum() ) _rNewObj.GetDrawObj()->GetOrdNum() < pFlyFrm->GetVirtDrawObj()->GetOrdNum() )
{ {
sal_uInt32 nNewNum = pFlyFrm->GetVirtDrawObj()->GetOrdNumDirect(); //#i119945# set pFly's OrdNum to _rNewObj's. So when pFly is removed by Undo, the original OrdNum will not be changed.
sal_uInt32 nNewNum = _rNewObj.GetDrawObj()->GetOrdNumDirect();
if ( _rNewObj.GetDrawObj()->GetPage() ) if ( _rNewObj.GetDrawObj()->GetPage() )
_rNewObj.DrawObj()->GetPage()->SetObjectOrdNum( _rNewObj.DrawObj()->GetPage()->SetObjectOrdNum( pFlyFrm->GetVirtDrawObj()->GetOrdNumDirect(), nNewNum );
_rNewObj.GetDrawObj()->GetOrdNumDirect(), nNewNum);
else else
_rNewObj.DrawObj()->SetOrdNum( nNewNum ); pFlyFrm->GetVirtDrawObj()->SetOrdNum( nNewNum );
} }
if ( FLY_AS_CHAR == _rNewObj.GetFrmFmt().GetAnchor().GetAnchorId() ) if ( FLY_AS_CHAR == _rNewObj.GetFrmFmt().GetAnchor().GetAnchorId() )
......
...@@ -2804,9 +2804,9 @@ void MA_FASTCALL lcl_Regist( SwPageFrm *pPage, const SwFrm *pAnch ) ...@@ -2804,9 +2804,9 @@ void MA_FASTCALL lcl_Regist( SwPageFrm *pPage, const SwFrm *pAnch )
pObj->GetDrawObj()->GetOrdNum() < pFly->GetVirtDrawObj()->GetOrdNum() && pObj->GetDrawObj()->GetOrdNum() < pFly->GetVirtDrawObj()->GetOrdNum() &&
pObj->GetDrawObj()->GetPage() ) pObj->GetDrawObj()->GetPage() )
{ {
pObj->DrawObj()->GetPage()->SetObjectOrdNum( //#i119945# set pFly's OrdNum to pObj's. So when pFly is removed by Undo, the original OrdNum will not be changed.
pObj->GetDrawObj()->GetOrdNumDirect(), pObj->DrawObj()->GetPage()->SetObjectOrdNum( pFly->GetVirtDrawObj()->GetOrdNumDirect(),
pFly->GetVirtDrawObj()->GetOrdNumDirect() + 1 ); pObj->GetDrawObj()->GetOrdNumDirect() );
} }
} }
} }
......
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