diff options
author | Jens-Heiner Rechtien <hr@openoffice.org> | 2008-11-19 16:29:07 +0000 |
---|---|---|
committer | Jens-Heiner Rechtien <hr@openoffice.org> | 2008-11-19 16:29:07 +0000 |
commit | fbd6c04509d50dbd600b67c4249ab7057dc3d37f (patch) | |
tree | 1cfd334326d389ed7b5b76f8ea5480b46035f203 | |
parent | ddcf9b9ff2caaffcc59d250b2d7f50ca3ab20330 (diff) |
CWS-TOOLING: integrate CWS sw301bf02_DEV300
-rw-r--r-- | svx/inc/svx/msdffimp.hxx | 27 | ||||
-rw-r--r-- | svx/source/msfilter/msdffimp.cxx | 56 |
2 files changed, 66 insertions, 17 deletions
diff --git a/svx/inc/svx/msdffimp.hxx b/svx/inc/svx/msdffimp.hxx index f99185d29526..c70ed64203b6 100644 --- a/svx/inc/svx/msdffimp.hxx +++ b/svx/inc/svx/msdffimp.hxx @@ -7,7 +7,7 @@ * OpenOffice.org - a multi-platform office productivity suite * * $RCSfile: msdffimp.hxx,v $ - * $Revision: 1.4 $ + * $Revision: 1.4.214.1 $ * * This file is part of OpenOffice.org. * @@ -383,12 +383,25 @@ protected : SvxMSDffShapeIdContainer maShapeIdContainer; void GetCtrlData( long nOffsDgg ); - void GetDrawingGroupContainerData( SvStream& rSt, ULONG nLenDgg ); - void GetDrawingContainerData( SvStream& rSt, ULONG nLenDg ); - BOOL GetShapeGroupContainerData( SvStream& rSt, ULONG nLenShapeGroupCont, - BOOL bPatriarch ); - BOOL GetShapeContainerData( SvStream& rSt, ULONG nLenShapeCont, - ULONG nPosGroup = ULONG_MAX); + void GetDrawingGroupContainerData( SvStream& rSt, + ULONG nLenDgg ); + // --> OD 2008-08-01 #156763# + // Add internal drawing container id as parameter to the sub methods of + // reading the control information about the drawing objects. + // The drawing container id is used to distinguish the text ids of drawing + // objects in different drawing containers. + void GetDrawingContainerData( SvStream& rSt, + ULONG nLenDg, + const unsigned long nDrawingContainerId ); + BOOL GetShapeGroupContainerData( SvStream& rSt, + ULONG nLenShapeGroupCont, + BOOL bPatriarch, + const unsigned long nDrawingContainerId ); + BOOL GetShapeContainerData( SvStream& rSt, + ULONG nLenShapeCont, + ULONG nPosGroup, + const unsigned long nDrawingContainerId ); + // <-- FASTBOOL ReadGraphic( SvStream& rSt, ULONG nIndex, Graphic& rGraphic ) const; SdrObject* ImportFontWork( SvStream&, SfxItemSet&, Rectangle& rBoundRect ) const; diff --git a/svx/source/msfilter/msdffimp.cxx b/svx/source/msfilter/msdffimp.cxx index e0b0cea77f51..fa8695eaa3e2 100644 --- a/svx/source/msfilter/msdffimp.cxx +++ b/svx/source/msfilter/msdffimp.cxx @@ -6177,14 +6177,23 @@ void SvxMSDffManager::CheckTxBxStoryChain() { pObj->bLastBoxInChain = FALSE; // Gruppenwechsel ? - if( nChain != (pObj->nTxBxComp & 0xFFFF0000) ) + // --> OD 2008-07-28 #156763# + // the text id also contains an internal drawing container id + // to distinguish between text id of drawing objects in different + // drawing containers. +// if( nChain != (pObj->nTxBxComp & 0xFFFF0000) ) + if( nChain != pObj->nTxBxComp ) + // <-- { // voriger war letzter seiner Gruppe if( nObj ) pOld->GetObject( nObj-1 )->bLastBoxInChain = TRUE; // Merker und Hilfs-Flag zuruecksetzen nObjMark = nObj; - nChain = pObj->nTxBxComp & 0xFFFF0000; + // --> OD 2008-07-28 #156763# +// nChain = pObj->nTxBxComp & 0xFFFF0000; + nChain = pObj->nTxBxComp; + // <-- bSetReplaceFALSE = !pObj->bReplaceByFly; } else @@ -6206,6 +6215,9 @@ void SvxMSDffManager::CheckTxBxStoryChain() // alle Shape-Info-Objekte in pShapeInfos umkopieren // (aber nach nShapeId sortieren) pObj->bSortByShapeId = TRUE; + // --> OD 2008-07-28 #156763# + pObj->nTxBxComp = pObj->nTxBxComp & 0xFFFF0000; + // <-- pShapeInfos->Insert( pObj ); } // voriger war letzter seiner Gruppe @@ -6252,6 +6264,9 @@ void SvxMSDffManager::GetCtrlData( long nOffsDgg_ ) UINT32 nMaxStrPos = rStCtrl.Tell(); nPos += nLength; + // --> OD 2008-07-28 #156763# + unsigned long nDrawingContainerId = 1; + // <-- do { rStCtrl.Seek( nPos ); @@ -6266,8 +6281,15 @@ void SvxMSDffManager::GetCtrlData( long nOffsDgg_ ) && ( DFF_msofbtDgContainer == nFbt ); } if( bOk ) - GetDrawingContainerData( rStCtrl, nLength ); + { + // --> OD 2008-07-28 #156763# + GetDrawingContainerData( rStCtrl, nLength, nDrawingContainerId ); + // <-- + } nPos += DFF_COMMON_RECORD_HEADER_SIZE + nLength; + // --> OD 2008-07-28 #156763# + ++nDrawingContainerId; + // <-- } while( nPos < nMaxStrPos && bOk ); } @@ -6363,7 +6385,8 @@ void SvxMSDffManager::GetDrawingGroupContainerData( SvStream& rSt, ULONG nLenDgg // ab hier: Drawing Container d.h. Seiten (Blatt, Dia) - weit gueltige Daten // ================= ====== // -void SvxMSDffManager::GetDrawingContainerData( SvStream& rSt, ULONG nLenDg ) +void SvxMSDffManager::GetDrawingContainerData( SvStream& rSt, ULONG nLenDg, + const unsigned long nDrawingContainerId ) { BYTE nVer;USHORT nInst;USHORT nFbt;UINT32 nLength; @@ -6379,13 +6402,13 @@ void SvxMSDffManager::GetDrawingContainerData( SvStream& rSt, ULONG nLenDg ) // Patriarch gefunden (der oberste Shape Group Container) ? if( DFF_msofbtSpgrContainer == nFbt ) { - if(!this->GetShapeGroupContainerData( rSt, nLength, TRUE)) return; + if(!this->GetShapeGroupContainerData( rSt, nLength, TRUE, nDrawingContainerId )) return; } else // blanker Shape Container ? (ausserhalb vom Shape Group Container) if( DFF_msofbtSpContainer == nFbt ) { - if(!this->GetShapeContainerData( rSt, nLength)) return; + if(!this->GetShapeContainerData( rSt, nLength, ULONG_MAX, nDrawingContainerId )) return; } else rSt.SeekRel( nLength ); @@ -6396,7 +6419,8 @@ void SvxMSDffManager::GetDrawingContainerData( SvStream& rSt, ULONG nLenDg ) BOOL SvxMSDffManager::GetShapeGroupContainerData( SvStream& rSt, ULONG nLenShapeGroupCont, - BOOL bPatriarch ) + BOOL bPatriarch, + const unsigned long nDrawingContainerId ) { BYTE nVer;USHORT nInst;USHORT nFbt;UINT32 nLength; long nStartShapeGroupCont = rSt.Tell(); @@ -6414,7 +6438,7 @@ BOOL SvxMSDffManager::GetShapeGroupContainerData( SvStream& rSt, if( DFF_msofbtSpContainer == nFbt ) { ULONG nGroupOffs = bFirst ? nStartShapeGroupCont - DFF_COMMON_RECORD_HEADER_SIZE : ULONG_MAX; - if ( !this->GetShapeContainerData( rSt, nLength, nGroupOffs ) ) + if ( !this->GetShapeContainerData( rSt, nLength, nGroupOffs, nDrawingContainerId ) ) return FALSE; bFirst = FALSE; } @@ -6422,7 +6446,7 @@ BOOL SvxMSDffManager::GetShapeGroupContainerData( SvStream& rSt, // eingeschachtelter Shape Group Container ? if( DFF_msofbtSpgrContainer == nFbt ) { - if ( !this->GetShapeGroupContainerData( rSt, nLength, FALSE ) ) + if ( !this->GetShapeGroupContainerData( rSt, nLength, FALSE, nDrawingContainerId ) ) return FALSE; } else @@ -6435,7 +6459,10 @@ BOOL SvxMSDffManager::GetShapeGroupContainerData( SvStream& rSt, return TRUE; } -BOOL SvxMSDffManager::GetShapeContainerData( SvStream& rSt, ULONG nLenShapeCont, ULONG nPosGroup ) +BOOL SvxMSDffManager::GetShapeContainerData( SvStream& rSt, + ULONG nLenShapeCont, + ULONG nPosGroup, + const unsigned long nDrawingContainerId ) { BYTE nVer;USHORT nInst;USHORT nFbt;UINT32 nLength; long nStartShapeCont = rSt.Tell(); @@ -6619,6 +6646,15 @@ BOOL SvxMSDffManager::GetShapeContainerData( SvStream& rSt, ULONG nLenShapeCont, else if( ( DFF_msofbtClientTextbox == nFbt ) && ( 4 == nLength ) ) // Text-Box-Story-Eintrag gefunden { rSt >> aInfo.nTxBxComp; + // --> OD 2008-07-28 #156763# + // Add internal drawing container id to text id. + // Note: The text id uses the first two bytes, while the internal + // drawing container id used the second two bytes. + aInfo.nTxBxComp = ( aInfo.nTxBxComp & 0xFFFF0000 ) + + nDrawingContainerId; + DBG_ASSERT( (aInfo.nTxBxComp & 0x0000FFFF) == nDrawingContainerId, + "<SvxMSDffManager::GetShapeContainerData(..)> - internal drawing container Id could not be correctly merged into DFF_msofbtClientTextbox value." ) + // <-- } else { |