summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens-Heiner Rechtien <hr@openoffice.org>2008-11-19 16:29:07 +0000
committerJens-Heiner Rechtien <hr@openoffice.org>2008-11-19 16:29:07 +0000
commitfbd6c04509d50dbd600b67c4249ab7057dc3d37f (patch)
tree1cfd334326d389ed7b5b76f8ea5480b46035f203
parentddcf9b9ff2caaffcc59d250b2d7f50ca3ab20330 (diff)
CWS-TOOLING: integrate CWS sw301bf02_DEV300
-rw-r--r--svx/inc/svx/msdffimp.hxx27
-rw-r--r--svx/source/msfilter/msdffimp.cxx56
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
{