Translate German comments (continued)
Change-Id: Ia33f8b85120381c75bcb3696845dfab1fd8b61fc Reviewed-on: https://gerrit.libreoffice.org/10151 Reviewed-by: Markus Mohrhard <markus.mohrhard@googlemail.com> Tested-by: Markus Mohrhard <markus.mohrhard@googlemail.com>
This commit is contained in:
parent
5e8b31f1d3
commit
d72d71517e
@ -266,41 +266,31 @@ bool SfxItemPool::HasPersistentRefCounts() const
|
||||
return pImp->mbPersistentRefCounts;
|
||||
}
|
||||
|
||||
void SfxItemPool::LoadCompleted()
|
||||
|
||||
/* [Beschreibung]
|
||||
|
||||
Wurde der SfxItemPool mit 'bRefCounts' == sal_False geladen, mu\s das
|
||||
Laden der Dokumentinhalte mit einem Aufruf dieser Methode beendet
|
||||
werden. Ansonsten hat der Aufruf dieser Methode keine Funktion.
|
||||
|
||||
|
||||
[Anmerkung]
|
||||
|
||||
Beim Laden ohne Ref-Counts werden diese tats"achlich auf 1 gesetzt,
|
||||
damit nicht w"ahrend des Ladevorgangs SfxPoolItems gel"oscht werden,
|
||||
die danach, aber auch noch beim Ladevorgang, ben"otigt werden. Diese
|
||||
Methode setzt den Ref-Count wieder zur"uck und entfernt dabei
|
||||
gleichzeitig alle nicht mehr ben"otigten Items.
|
||||
|
||||
|
||||
[Querverweise]
|
||||
|
||||
<SfxItemPool::Load()>
|
||||
/**
|
||||
* If the SfxItemPool was loaded with 'bRefCounts' == sal_False, we need
|
||||
* to finish the loading of the document contents with a call of this method.
|
||||
* In any other case calling this function has no meaning.
|
||||
*
|
||||
* When loading without RefCounts, they are actually set to 1 so that
|
||||
* SfxPoolItems that are needed during and after loading are not deleted.
|
||||
* This method resets the RefCount and also removes all items that are not
|
||||
* needed anymore.
|
||||
*
|
||||
* @see SfxItemPool::Load()
|
||||
*/
|
||||
|
||||
void SfxItemPool::LoadCompleted()
|
||||
{
|
||||
// wurden keine Ref-Counts mitgeladen?
|
||||
// Did we load without RefCounts?
|
||||
if ( pImp->nInitRefCount > 1 )
|
||||
{
|
||||
// "uber alle Which-Werte iterieren
|
||||
// Iterate over all Which values
|
||||
std::vector<SfxPoolItemArray_Impl*>::iterator itrItemArr = pImp->maPoolItems.begin();
|
||||
for( sal_uInt16 nArrCnt = GetSize_Impl(); nArrCnt; --nArrCnt, ++itrItemArr )
|
||||
{
|
||||
// ist "uberhaupt ein Item mit dem Which-Wert da?
|
||||
// Is there an item with the Which value present at all?
|
||||
if ( *itrItemArr )
|
||||
{
|
||||
// "uber alle Items mit dieser Which-Id iterieren
|
||||
// Iterate over all items with this WhichId
|
||||
SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin();
|
||||
for( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr )
|
||||
{
|
||||
@ -358,17 +348,17 @@ void SfxItemPool_Impl::readTheItems (
|
||||
sal_uLong n, nLastSurrogate = sal_uLong(-1);
|
||||
while (aItemsRec.GetContent())
|
||||
{
|
||||
// n"achstes Surrogat holen
|
||||
// Get next surrogate
|
||||
sal_uInt16 nSurrogate = aItemsRec.GetContentTag();
|
||||
DBG_ASSERT( aItemsRec.GetContentVersion() == 'X',
|
||||
"not an item content" );
|
||||
|
||||
// fehlende auff"ullen
|
||||
// Fill up missing ones
|
||||
for ( pItem = 0, n = nLastSurrogate+1; n < nSurrogate; ++n )
|
||||
pNewArr->push_back( (SfxPoolItem*) pItem );
|
||||
nLastSurrogate = nSurrogate;
|
||||
|
||||
// Ref-Count und Item laden
|
||||
// Load RefCount and Item
|
||||
sal_uInt16 nRef(0);
|
||||
rStream.ReadUInt16( nRef );
|
||||
|
||||
@ -376,7 +366,7 @@ void SfxItemPool_Impl::readTheItems (
|
||||
pNewArr->push_back( (SfxPoolItem*) pItem );
|
||||
|
||||
if ( !mbPersistentRefCounts )
|
||||
// bis <SfxItemPool::LoadCompleted()> festhalten
|
||||
// Hold onto it until SfxItemPool::LoadCompleted()
|
||||
SfxItemPool::AddRef(*pItem, 1);
|
||||
else
|
||||
{
|
||||
@ -387,14 +377,14 @@ void SfxItemPool_Impl::readTheItems (
|
||||
}
|
||||
}
|
||||
|
||||
// fehlende auff"ullen
|
||||
// Fill up missing ones
|
||||
for ( pItem = 0, n = nLastSurrogate+1; n < nItemCount; ++n )
|
||||
pNewArr->push_back( (SfxPoolItem*) pItem );
|
||||
|
||||
SfxPoolItemArray_Impl *pOldArr = *ppArr;
|
||||
*ppArr = pNewArr;
|
||||
|
||||
// die Items merken, die schon im Pool sind
|
||||
// Remember items that are already in the pool
|
||||
bool bEmpty = true;
|
||||
if ( 0 != pOldArr )
|
||||
for ( n = 0; bEmpty && n < pOldArr->size(); ++n )
|
||||
@ -402,7 +392,7 @@ void SfxItemPool_Impl::readTheItems (
|
||||
DBG_ASSERTWARNING( bEmpty, "loading non-empty pool" );
|
||||
if ( !bEmpty )
|
||||
{
|
||||
// f"ur alle alten suchen, ob ein gleiches neues existiert
|
||||
// See if there's a new one for all old ones
|
||||
for ( size_t nOld = 0; nOld < pOldArr->size(); ++nOld )
|
||||
{
|
||||
SfxPoolItem *pOldItem = (*pOldArr)[nOld];
|
||||
@ -412,18 +402,18 @@ void SfxItemPool_Impl::readTheItems (
|
||||
bool bFound = false;
|
||||
for ( size_t nNew = (*ppArr)->size(); nNew--; )
|
||||
{
|
||||
// geladenes Item
|
||||
// Loaded Item
|
||||
SfxPoolItem *&rpNewItem =
|
||||
(SfxPoolItem*&)(*ppArr)->operator[](nNew);
|
||||
|
||||
// surrogat unbenutzt?
|
||||
// Unused surrogate?
|
||||
if ( !rpNewItem )
|
||||
nFree = nNew;
|
||||
|
||||
// gefunden?
|
||||
// Found it?
|
||||
else if ( *rpNewItem == *pOldItem )
|
||||
{
|
||||
// wiederverwenden
|
||||
// Reuse
|
||||
SfxItemPool::AddRef( *pOldItem, rpNewItem->GetRefCount() );
|
||||
SfxItemPool::SetRefCount( *rpNewItem, 0 );
|
||||
delete rpNewItem;
|
||||
@ -433,7 +423,7 @@ void SfxItemPool_Impl::readTheItems (
|
||||
}
|
||||
}
|
||||
|
||||
// vorhervorhandene, nicht geladene uebernehmen
|
||||
// Take over the ones that were previously present, but had not been loaded
|
||||
if ( !bFound )
|
||||
{
|
||||
if ( nFree != SAL_MAX_UINT32 )
|
||||
@ -451,20 +441,20 @@ void SfxItemPool_Impl::readTheItems (
|
||||
|
||||
SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
{
|
||||
DBG_ASSERT(pImp->ppStaticDefaults, "kein DefaultArray");
|
||||
DBG_ASSERT(pImp->ppStaticDefaults, "No DefaultArray");
|
||||
|
||||
// protect items by increasing ref count
|
||||
// Protect items by increasing ref count
|
||||
if ( !pImp->mbPersistentRefCounts )
|
||||
{
|
||||
|
||||
// "uber alle Which-Werte iterieren
|
||||
// Iterate over all Which values
|
||||
std::vector<SfxPoolItemArray_Impl*>::iterator itrItemArr = pImp->maPoolItems.begin();
|
||||
for( size_t nArrCnt = GetSize_Impl(); nArrCnt; --nArrCnt, ++itrItemArr )
|
||||
{
|
||||
// ist "uberhaupt ein Item mit dem Which-Wert da?
|
||||
if ( *itrItemArr )
|
||||
{
|
||||
// "uber alle Items mit dieser Which-Id iterieren
|
||||
// Is there an item with the Which value present at all?
|
||||
SfxPoolItemArrayBase_Impl::iterator ppHtArr = (*itrItemArr)->begin();
|
||||
for( size_t n = (*itrItemArr)->size(); n; --n, ++ppHtArr )
|
||||
if (*ppHtArr)
|
||||
@ -482,34 +472,34 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
}
|
||||
}
|
||||
|
||||
// during loading (until LoadCompleted()) protect all items
|
||||
// During loading (until LoadCompleted()) protect all items
|
||||
pImp->nInitRefCount = 2;
|
||||
}
|
||||
|
||||
// Load-Master finden
|
||||
// Find LoadMaster
|
||||
SfxItemPool *pLoadMaster = pImp->mpMaster != this ? pImp->mpMaster : 0;
|
||||
while ( pLoadMaster && !pLoadMaster->pImp->bStreaming )
|
||||
pLoadMaster = pLoadMaster->pImp->mpSecondary;
|
||||
|
||||
// Gesamt Header einlesen
|
||||
// Read whole Header
|
||||
pImp->bStreaming = true;
|
||||
if ( !pLoadMaster )
|
||||
{
|
||||
// Format-Version laden
|
||||
// Load format version
|
||||
CHECK_FILEFORMAT2( rStream,
|
||||
SFX_ITEMPOOL_TAG_STARTPOOL_5, SFX_ITEMPOOL_TAG_STARTPOOL_4 );
|
||||
rStream.ReadUChar( pImp->nMajorVer ).ReadUChar( pImp->nMinorVer );
|
||||
|
||||
// Format-Version in Master-Pool "ubertragen
|
||||
// Take over format version to MasterPool
|
||||
pImp->mpMaster->pImp->nMajorVer = pImp->nMajorVer;
|
||||
pImp->mpMaster->pImp->nMinorVer = pImp->nMinorVer;
|
||||
|
||||
// altes Format?
|
||||
// Old Format?
|
||||
if ( pImp->nMajorVer < 2 )
|
||||
// pImp->bStreaming wird von Load1_Impl() zur"uckgesetzt
|
||||
// pImp->bStreaming is reset by Load1_Impl()
|
||||
return Load1_Impl( rStream );
|
||||
|
||||
// zu neues Format?
|
||||
// New Format?
|
||||
if ( pImp->nMajorVer > SFX_ITEMPOOL_VER_MAJOR )
|
||||
{
|
||||
rStream.SetError(SVSTREAM_FILEFORMAT_ERROR);
|
||||
@ -517,12 +507,12 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
return rStream;
|
||||
}
|
||||
|
||||
// Version 1.2-Trick-Daten "uberspringen
|
||||
// Trick for version 1.2: skip data
|
||||
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_TRICK4OLD );
|
||||
rStream.SeekRel( 4 ); // Hack-Daten wegen SfxStyleSheetPool-Bug skippen
|
||||
rStream.SeekRel( 4 ); // Hack: Skip data due to SfxStyleSheetPool bug
|
||||
}
|
||||
|
||||
// neues Record-orientiertes Format
|
||||
// New record-oriented format
|
||||
SfxMiniRecordReader aPoolRec( &rStream, SFX_ITEMPOOL_REC );
|
||||
if ( rStream.GetError() )
|
||||
{
|
||||
@ -530,10 +520,10 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
return rStream;
|
||||
}
|
||||
|
||||
// Einzel-Header
|
||||
// Single header
|
||||
OUString aExternName;
|
||||
{
|
||||
// Header-Record suchen
|
||||
// Find HeaderRecord
|
||||
SfxMiniRecordReader aPoolHeaderRec( &rStream, SFX_ITEMPOOL_REC_HEADER );
|
||||
if ( rStream.GetError() )
|
||||
{
|
||||
@ -541,12 +531,12 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
return rStream;
|
||||
}
|
||||
|
||||
// Header-lesen
|
||||
// Read Header
|
||||
rStream.ReadUInt16( pImp->nLoadingVersion );
|
||||
aExternName = SfxPoolItem::readByteString(rStream);
|
||||
bool bOwnPool = aExternName == pImp->aName;
|
||||
|
||||
//! solange wir keine fremden Pools laden k"onnen
|
||||
//! As long as we cannot read foreign Pools
|
||||
if ( !bOwnPool )
|
||||
{
|
||||
rStream.SetError(SVSTREAM_FILEFORMAT_ERROR);
|
||||
@ -556,7 +546,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
}
|
||||
}
|
||||
|
||||
// Version-Maps
|
||||
// Version maps
|
||||
{
|
||||
SfxMultiRecordReader aVerRec( &rStream, SFX_ITEMPOOL_REC_VERSIONMAP );
|
||||
if ( rStream.GetError() )
|
||||
@ -565,11 +555,11 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
return rStream;
|
||||
}
|
||||
|
||||
// Versions-Maps einlesen
|
||||
// Version maps einlesen
|
||||
sal_uInt16 nOwnVersion = pImp->nVersion;
|
||||
for ( sal_uInt16 nVerNo = 0; aVerRec.GetContent(); ++nVerNo )
|
||||
{
|
||||
// Header f"ur einzelne Version einlesen
|
||||
// Read header for single versions
|
||||
sal_uInt16 nVersion(0), nHStart(0), nHEnd(0);
|
||||
rStream.ReadUInt16( nVersion ).ReadUInt16( nHStart ).ReadUInt16( nHEnd );
|
||||
sal_uInt16 nCount = nHEnd - nHStart + 1;
|
||||
@ -588,23 +578,23 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
pImp->nVersion = nOwnVersion;
|
||||
}
|
||||
|
||||
// Items laden
|
||||
// Load Items
|
||||
bool bSecondaryLoaded = false;
|
||||
long nSecondaryEnd = 0;
|
||||
{
|
||||
SfxMultiRecordReader aWhichIdsRec( &rStream, SFX_ITEMPOOL_REC_WHICHIDS);
|
||||
while ( aWhichIdsRec.GetContent() )
|
||||
{
|
||||
// SlotId, Which-Id und Item-Version besorgen
|
||||
// Get SlotId, WhichId and Item version
|
||||
sal_uInt32 nCount(0);
|
||||
sal_uInt16 nVersion(0), nWhich(0);
|
||||
//!sal_uInt16 nSlotId = aWhichIdsRec.GetContentTag();
|
||||
rStream.ReadUInt16( nWhich );
|
||||
if ( pImp->nLoadingVersion != pImp->nVersion )
|
||||
// Which-Id aus File-Version in Pool-Version verschieben
|
||||
// Move WhichId from file version to Pool version
|
||||
nWhich = GetNewWhich( nWhich );
|
||||
|
||||
// unbekanntes Item aus neuerer Version
|
||||
// Unknown Item from newer version
|
||||
if ( !IsInRange(nWhich) )
|
||||
continue;
|
||||
|
||||
@ -618,46 +608,46 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
sal_uInt16 nIndex = GetIndex_Impl(nWhich);
|
||||
SfxPoolItemArray_Impl **ppArr = &pImp->maPoolItems[0] + nIndex;
|
||||
|
||||
// SfxSetItems k"onnten Items aus Sekund"arpools beinhalten
|
||||
// SfxSetItems could contain Items from secondary Pools
|
||||
SfxPoolItem *pDefItem = *(pImp->ppStaticDefaults + nIndex);
|
||||
pImp->bInSetItem = pDefItem->ISA(SfxSetItem);
|
||||
if ( !bSecondaryLoaded && pImp->mpSecondary && pImp->bInSetItem )
|
||||
{
|
||||
// an das Ende des eigenen Pools seeken
|
||||
// Seek to end of own Pool
|
||||
sal_uLong nLastPos = rStream.Tell();
|
||||
aPoolRec.Skip();
|
||||
|
||||
// Sekund"arpool einlesen
|
||||
// Read secondary Pool
|
||||
pImp->mpSecondary->Load( rStream );
|
||||
bSecondaryLoaded = true;
|
||||
nSecondaryEnd = rStream.Tell();
|
||||
|
||||
// zur"uck zu unseren eigenen Items
|
||||
// Back to our own Items
|
||||
rStream.Seek(nLastPos);
|
||||
}
|
||||
|
||||
// Items an sich lesen
|
||||
// Read Items
|
||||
pImp->readTheItems(rStream, nCount, nVersion, pDefItem, ppArr);
|
||||
|
||||
pImp->bInSetItem = false;
|
||||
}
|
||||
}
|
||||
|
||||
// Pool-Defaults lesen
|
||||
// Read Pool defaults
|
||||
{
|
||||
SfxMultiRecordReader aDefsRec( &rStream, SFX_ITEMPOOL_REC_DEFAULTS );
|
||||
|
||||
while ( aDefsRec.GetContent() )
|
||||
{
|
||||
// SlotId, Which-Id und Item-Version besorgen
|
||||
// Get SlotId, WhichId and Item versions
|
||||
sal_uInt16 nVersion(0), nWhich(0);
|
||||
//!sal_uInt16 nSlotId = aDefsRec.GetContentTag();
|
||||
rStream.ReadUInt16( nWhich );
|
||||
if ( pImp->nLoadingVersion != pImp->nVersion )
|
||||
// Which-Id aus File-Version in Pool-Version verschieben
|
||||
// Move WhichId from file version to Pool version
|
||||
nWhich = GetNewWhich( nWhich );
|
||||
|
||||
// unbekanntes Item aus neuerer Version
|
||||
// Unknown Item from newer version
|
||||
if ( !IsInRange(nWhich) )
|
||||
continue;
|
||||
|
||||
@ -665,7 +655,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
//!SFX_ASSERTWARNING( !HasMap() || ( nSlotId == GetSlotId( nWhich, sal_False ) ),
|
||||
//! nWhich, "Slot/Which mismatch" );
|
||||
|
||||
// Pool-Default-Item selbst laden
|
||||
// Load PoolDefaultItem
|
||||
SfxPoolItem *pItem =
|
||||
( *( pImp->ppStaticDefaults + GetIndex_Impl(nWhich) ) )
|
||||
->Create( rStream, nVersion );
|
||||
@ -674,7 +664,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
}
|
||||
}
|
||||
|
||||
// ggf. Secondary-Pool laden
|
||||
// Load secondary Pool if needed
|
||||
aPoolRec.Skip();
|
||||
if ( pImp->mpSecondary )
|
||||
{
|
||||
@ -684,7 +674,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
rStream.Seek( nSecondaryEnd );
|
||||
}
|
||||
|
||||
// wenn nicht own-Pool, dann kein Name
|
||||
// If not own Pool, then no name
|
||||
if ( aExternName != pImp->aName )
|
||||
pImp->aName = OUString();
|
||||
|
||||
@ -694,7 +684,7 @@ SvStream &SfxItemPool::Load(SvStream &rStream)
|
||||
|
||||
sal_uInt16 SfxItemPool::GetIndex_Impl(sal_uInt16 nWhich) const
|
||||
{
|
||||
DBG_ASSERT(nWhich >= pImp->mnStart && nWhich <= pImp->mnEnd, "Which-Id nicht im Pool-Bereich");
|
||||
DBG_ASSERT(nWhich >= pImp->mnStart && nWhich <= pImp->mnEnd, "WhichId not within the Pool range");
|
||||
return nWhich - pImp->mnStart;
|
||||
}
|
||||
|
||||
@ -705,10 +695,10 @@ sal_uInt16 SfxItemPool::GetSize_Impl() const
|
||||
|
||||
SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
{
|
||||
// beim Master ist der Header schon von <Load()> geladen worden
|
||||
// For the Master the Header has already been loaded in Load()
|
||||
if ( !pImp->bStreaming )
|
||||
{
|
||||
// Header des Secondary lesen
|
||||
// Read the secondary's Header
|
||||
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_STARTPOOL_4 );
|
||||
rStream.ReadUChar( pImp->nMajorVer ).ReadUChar( pImp->nMinorVer );
|
||||
}
|
||||
@ -720,7 +710,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
bool bOwnPool = aExternName == pImp->aName;
|
||||
pImp->bStreaming = true;
|
||||
|
||||
//! solange wir keine fremden laden k"onnen
|
||||
//! As long as we cannot read foreign ones
|
||||
if ( !bOwnPool )
|
||||
{
|
||||
rStream.SetError(SVSTREAM_FILEFORMAT_ERROR);
|
||||
@ -728,7 +718,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
return rStream;
|
||||
}
|
||||
|
||||
// Versionen bis 1.3 k"onnen noch keine Which-Verschiebungen lesen
|
||||
// Versions up to 1.3 cannot read WhichMoves
|
||||
if ( pImp->nMajorVer == 1 && pImp->nMinorVer <= 2 &&
|
||||
pImp->nVersion < pImp->nLoadingVersion )
|
||||
{
|
||||
@ -737,10 +727,10 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
return rStream;
|
||||
}
|
||||
|
||||
// Size-Table liegt hinter den eigentlichen Attributen
|
||||
// SizeTable comes after the actual attributes
|
||||
rStream.ReadUInt32( nAttribSize );
|
||||
|
||||
// Size-Table einlesen
|
||||
// Read SizeTable
|
||||
sal_uLong nStartPos = rStream.Tell();
|
||||
rStream.SeekRel( nAttribSize );
|
||||
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_SIZES );
|
||||
@ -751,31 +741,31 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
sal_uLong nEndOfSizes = rStream.Tell();
|
||||
SvMemoryStream aSizeTable( pBuf.get(), nSizeTableLen, STREAM_READ );
|
||||
|
||||
// ab Version 1.3 steht in der Size-Table eine Versions-Map
|
||||
// Starting with version 1.3 the SizeTable contains a versions map
|
||||
if ( pImp->nMajorVer > 1 || pImp->nMinorVer >= 3 )
|
||||
{
|
||||
// Version-Map finden (letztes sal_uLong der Size-Table gibt Pos an)
|
||||
// Find version map (last sal_uLong of the SizeTable determines position)
|
||||
rStream.Seek( nEndOfSizes - sizeof(sal_uInt32) );
|
||||
sal_uInt32 nVersionMapPos(0);
|
||||
rStream.ReadUInt32( nVersionMapPos );
|
||||
rStream.Seek( nVersionMapPos );
|
||||
|
||||
// Versions-Maps einlesen
|
||||
// Read version maps
|
||||
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_VERSIONMAP );
|
||||
sal_uInt16 nVerCount(0);
|
||||
rStream.ReadUInt16( nVerCount );
|
||||
for ( sal_uInt16 nVerNo = 0; nVerNo < nVerCount; ++nVerNo )
|
||||
{
|
||||
// Header f"ur einzelne Version einlesen
|
||||
// Read Header for single versions
|
||||
sal_uInt16 nVersion(0), nHStart(0), nHEnd(0);
|
||||
rStream.ReadUInt16( nVersion ).ReadUInt16( nHStart ).ReadUInt16( nHEnd );
|
||||
sal_uInt16 nCount = nHEnd - nHStart + 1;
|
||||
sal_uInt16 nBytes = (nCount)*sizeof(sal_uInt16);
|
||||
|
||||
// Is new version is known?
|
||||
// Is new version known?
|
||||
if ( nVerNo >= pImp->aVersions.size() )
|
||||
{
|
||||
// Add new Version
|
||||
// Add new version
|
||||
sal_uInt16 *pMap = new sal_uInt16[nCount];
|
||||
memset(pMap, 0, nCount * sizeof(sal_uInt16));
|
||||
for ( sal_uInt16 n = 0; n < nCount; ++n )
|
||||
@ -783,12 +773,12 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
SetVersionMap( nVersion, nHStart, nHEnd, pMap );
|
||||
}
|
||||
else
|
||||
// Version schon bekannt => "uberspringen
|
||||
// Skip known versions
|
||||
rStream.SeekRel( nBytes );
|
||||
}
|
||||
}
|
||||
|
||||
// Items laden
|
||||
// Load Items
|
||||
rStream.Seek( nStartPos );
|
||||
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_ITEMS );
|
||||
bool bSecondaryLoaded = false;
|
||||
@ -796,7 +786,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
sal_uInt16 nWhich(0), nSlot(0);
|
||||
while ( rStream.ReadUInt16( nWhich ), nWhich )
|
||||
{
|
||||
// ggf. Which-Id aus alter Version verschieben?
|
||||
// Move WhichId from old version?
|
||||
if ( pImp->nLoadingVersion != pImp->nVersion )
|
||||
nWhich = GetNewWhich( nWhich );
|
||||
|
||||
@ -817,27 +807,27 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
SfxPoolItemArray_Impl *pNewArr = new SfxPoolItemArray_Impl();
|
||||
SfxPoolItem *pDefItem = *(pImp->ppStaticDefaults + nIndex);
|
||||
|
||||
// Position vor ersten Item merken
|
||||
// Remember position of first Item
|
||||
sal_uLong nLastPos = rStream.Tell();
|
||||
|
||||
// SfxSetItems k"onnten Items aus Sekund"arpools beinhalten
|
||||
// SfxSetItems could contain Items from secondary Pool
|
||||
if ( !bSecondaryLoaded && pImp->mpSecondary && pDefItem->ISA(SfxSetItem) )
|
||||
{
|
||||
// an das Ende des eigenen Pools seeken
|
||||
// Seek to end of own Pool
|
||||
rStream.Seek(nEndOfSizes);
|
||||
CHECK_FILEFORMAT_RELEASE( rStream, SFX_ITEMPOOL_TAG_ENDPOOL, pNewArr );
|
||||
CHECK_FILEFORMAT_RELEASE( rStream, SFX_ITEMPOOL_TAG_ENDPOOL, pNewArr );
|
||||
|
||||
// Sekund"arpool einlesen
|
||||
// Read secondary Pool
|
||||
pImp->mpSecondary->Load1_Impl( rStream );
|
||||
bSecondaryLoaded = true;
|
||||
nSecondaryEnd = rStream.Tell();
|
||||
|
||||
// zur"uck zu unseren eigenen Items
|
||||
// Back to our own Items
|
||||
rStream.Seek(nLastPos);
|
||||
}
|
||||
|
||||
// Items an sich lesen
|
||||
// Read Items
|
||||
for ( sal_uInt16 j = 0; j < nCount; ++j )
|
||||
{
|
||||
sal_uLong nPos = nLastPos;
|
||||
@ -849,7 +839,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
pItem = pDefItem->Create(rStream, nVersion);
|
||||
|
||||
if ( !pImp->mbPersistentRefCounts )
|
||||
// bis <SfxItemPool::LoadCompleted()> festhalten
|
||||
// Hold onto them until SfxItemPool::LoadCompleted()
|
||||
AddRef(*pItem, 1);
|
||||
else
|
||||
{
|
||||
@ -862,7 +852,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
//pNewArr->insert( pItem, j );
|
||||
pNewArr->push_back( (SfxPoolItem*) pItem );
|
||||
|
||||
// restliche gespeicherte Laenge skippen (neueres Format)
|
||||
// Skip the rest of the saved length (newer format)
|
||||
nLastPos = rStream.Tell();
|
||||
|
||||
aSizeTable.ReadUInt32( nAttrSize );
|
||||
@ -880,7 +870,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
SfxPoolItemArray_Impl *pOldArr = *ppArr;
|
||||
*ppArr = pNewArr;
|
||||
|
||||
// die Items merken, die schon im Pool sind
|
||||
// Remember Items already in the Pool
|
||||
bool bEmpty = true;
|
||||
if ( 0 != pOldArr )
|
||||
for ( size_t n = 0; bEmpty && n < pOldArr->size(); ++n )
|
||||
@ -888,7 +878,7 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
DBG_ASSERTWARNING( bEmpty, "loading non-empty pool" );
|
||||
if ( !bEmpty )
|
||||
{
|
||||
// f"ur alle alten suchen, ob ein gleiches neues existiert
|
||||
// Find out for all old ones, whether there's a same new one
|
||||
for ( size_t nOld = 0; nOld < pOldArr->size(); ++nOld )
|
||||
{
|
||||
SfxPoolItem *pOldItem = (*pOldArr)[nOld];
|
||||
@ -917,17 +907,17 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
}
|
||||
}
|
||||
}
|
||||
delete pOldArr; /* @@@ */
|
||||
delete pOldArr;
|
||||
}
|
||||
|
||||
// Pool-Defaults lesen
|
||||
// Read Pool defaults
|
||||
if ( pImp->nMajorVer > 1 || pImp->nMinorVer > 0 )
|
||||
CHECK_FILEFORMAT( rStream, SFX_ITEMPOOL_TAG_DEFAULTS );
|
||||
|
||||
sal_uLong nLastPos = rStream.Tell();
|
||||
while ( rStream.ReadUInt16( nWhich ), nWhich )
|
||||
{
|
||||
// ggf. Which-Id aus alter Version verschieben?
|
||||
// Move WhichId from old version?
|
||||
if ( pImp->nLoadingVersion != pImp->nVersion )
|
||||
nWhich = GetNewWhich( nWhich );
|
||||
|
||||
@ -973,6 +963,38 @@ SvStream &SfxItemPool::Load1_Impl(SvStream &rStream)
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Loads surrogate from 'rStream' and returns the corresponding SfxPoolItem
|
||||
* from the rRefPool.
|
||||
* If the surrogate contained within the stream == SFX_ITEMS_DIRECT
|
||||
* (!SFX_ITEM_POOLABLE), we return 0 and the Item is to be loaded directly
|
||||
* from the stream.
|
||||
* We also return 0 for 0xfffffff0 (SFX_ITEMS_NULL) and rWhich is set to 0,
|
||||
* making the Items unavailable.
|
||||
*
|
||||
* Apart from that we also take into account whether the Pool is loaded without
|
||||
* RefCounts, if we reload from a new Pool (&rRefPool != this) or if we're
|
||||
* building from a differently constructed Pool.
|
||||
*
|
||||
* If we load from a differently constructed Pool and the 'nSlotId' cannot be
|
||||
* mapped to a WhichId of this Pool, we also return 0.
|
||||
*
|
||||
* Preconditions: - Pool must be loaded
|
||||
* - LoadCompleted must not have been called yet
|
||||
* - 'rStream' is at the position at which a surrogate
|
||||
* for an Item with the SlotId 'nSlotId', the WhichId
|
||||
* 'rWhichId' was saved with StoreSurrogate
|
||||
*
|
||||
* Postconditions: - 'rStream' is at the same position as after StoreSurrogate
|
||||
* had finished saving
|
||||
* - If we were able to load an Item, it's now in this
|
||||
* SfxItemPool
|
||||
* - 'rWhichId' now contains the mapped WhichId
|
||||
*
|
||||
* Runtime: Depth of the traget secondary Pool * 10 + 10
|
||||
*
|
||||
* @see SfxItemPool::StoreSurrogate(SvStream&,const SfxPoolItem &)const
|
||||
*/
|
||||
const SfxPoolItem* SfxItemPool::LoadSurrogate
|
||||
(
|
||||
SvStream& rStream, // vor einem Surrogat positionierter Stream
|
||||
@ -980,43 +1002,6 @@ const SfxPoolItem* SfxItemPool::LoadSurrogate
|
||||
sal_uInt16 nSlotId, // Slot-Id des zu ladenden <SfxPoolItem>s
|
||||
const SfxItemPool* pRefPool // <SfxItemPool> in dem das Surrogat gilt
|
||||
)
|
||||
|
||||
/* [Beschreibung]
|
||||
|
||||
L"adt Surrogat aus 'rStream' und liefert das dadurch in 'rRefPool'
|
||||
repr"asentierte SfxPoolItem zu"ruck. Ist das im Stream befindliche
|
||||
Surrogat == SFX_ITEMS_DIRECT (!SFX_ITEM_POOLABLE) wird 0 zur"uckgegeben,
|
||||
das Item ist direkt aus dem Stream zu laden. Bei 0xfffffff0 (SFX_ITEMS_NULL)
|
||||
wird auch 0 zurueckgegeben und rWhich auf 0 gesetzt, das Item ist nicht
|
||||
verfuegbar.
|
||||
|
||||
Ansonsten wird ber"ucksichtigt, ob der betroffene Pool ohne Ref-Counts
|
||||
geladen wird, ob aus einem neuen Pool nachgeladen wird (&rRefPool != this)
|
||||
oder ob aus einem g"anzlich anders aufgebauten Pool geladen wird.
|
||||
|
||||
Wird aus einem anders aufgebauten Pool geladen und die 'nSlotId' kann
|
||||
nicht in eine Which-Id dieses Pools gemappt werden, wird ebenfalls 0
|
||||
zur"uckgeliefert.
|
||||
|
||||
Preconditions: - Pool mu\s geladen sein
|
||||
- LoadCompleted darf noch nicht gerufen worden sein
|
||||
- 'rStream' steht genau an der Position, an der ein
|
||||
Surrogat f"ur ein Item mit der SlotId 'nSlotId' und
|
||||
der WhichId 'rWhichId' mit StoreSurrogate gepeichert
|
||||
wurde
|
||||
|
||||
Postconditions: - 'rStream' ist so positioniert, wie auch StoreSurrogate
|
||||
sein speichern beendet hatte
|
||||
- konnte ein Item geladen werden, befindet es sich
|
||||
in diesem SfxItemPool
|
||||
- 'rWhichId' enth"alt die ggf. gemappte Which-Id
|
||||
Laufzeit: Tiefe des Ziel Sekund"arpools * 10 + 10
|
||||
|
||||
[Querverweise]
|
||||
|
||||
<SfxItemPool::StoreSurrogate(SvStream&,const SfxPoolItem &)const>
|
||||
*/
|
||||
|
||||
{
|
||||
// Read the first surrogate
|
||||
sal_uInt32 nSurrogat(0);
|
||||
@ -1098,32 +1083,18 @@ const SfxPoolItem* SfxItemPool::LoadSurrogate
|
||||
}
|
||||
|
||||
|
||||
|
||||
bool SfxItemPool::StoreSurrogate
|
||||
(
|
||||
SvStream& rStream,
|
||||
const SfxPoolItem* pItem
|
||||
) const
|
||||
|
||||
/* [Beschreibung]
|
||||
|
||||
Speichert ein Surrogat f"ur '*pItem' in 'rStream'.
|
||||
|
||||
|
||||
[R"uckgabewert]
|
||||
|
||||
bool TRUE
|
||||
es wurde ein echtes Surrogat gespeichert, auch
|
||||
SFX_ITEMS_NULL bei 'pItem==0',
|
||||
SFX_ITEMS_STATICDEFAULT und SFX_ITEMS_POOLDEFAULT
|
||||
gelten als 'echte' Surrogate
|
||||
|
||||
sal_False
|
||||
es wurde ein Dummy-Surrogat (SFX_ITEMS_DIRECT)
|
||||
gespeichert, das eigentliche Item mu\s direkt
|
||||
hinterher selbst gespeichert werden
|
||||
/**
|
||||
* Saves a surrogate for '*pItem' in 'rStream'
|
||||
*
|
||||
* @returns sal_True: a real surrogates has been saved
|
||||
* SFX_ITEMS_NULL for 'pItem==0', SFX_ITEMS_STATICDEFAULT
|
||||
* and SFX_ITEMS_POOLDEFAULT are 'real' surrogates
|
||||
*
|
||||
* @returns sal_False: a dummy surrogate (SFX_ITEMS_DIRECT) has been saved;
|
||||
* the actual Item needs to be saved right after it on
|
||||
* its own
|
||||
*/
|
||||
|
||||
bool SfxItemPool::StoreSurrogate ( SvStream& rStream, const SfxPoolItem* pItem) const
|
||||
{
|
||||
if ( pItem )
|
||||
{
|
||||
@ -1177,24 +1148,21 @@ bool SfxItemPool::IsInStoringRange( sal_uInt16 nWhich ) const
|
||||
nWhich <= pImp->nStoringEnd;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* This method allows for restricting the WhichRange, which is saved
|
||||
* by ItemSets of this Pool (and the Pool itself).
|
||||
* The method must be called before SfxItemPool::Store() and the values
|
||||
* must also be still set when the actual document (the ItemSets) is
|
||||
* being saved.
|
||||
*
|
||||
* Resetting it is not necessary, if this range is set correctly before
|
||||
* _every_ save, because its only accounted for when saving.
|
||||
*
|
||||
* We need to do this for the 3.1 format, because there's a bug in the
|
||||
* Pool loading method.
|
||||
*/
|
||||
void SfxItemPool::SetStoringRange( sal_uInt16 nFrom, sal_uInt16 nTo )
|
||||
|
||||
/* [Beschreibung]
|
||||
|
||||
Mit dieser Methode kann der Which-Bereich eingeengt werden, der
|
||||
von ItemSets dieses Pool (und dem Pool selbst) gespeichert wird.
|
||||
Die Methode muss dazu vor <SfxItemPool::Store()> gerufen werden
|
||||
und die Werte muessen auch noch gesetzt sein, wenn das eigentliche
|
||||
Dokument (also die ItemSets gespeicher werden).
|
||||
|
||||
Ein Zuruecksetzen ist dann nicht noetig, wenn dieser Range vor
|
||||
JEDEM Speichern richtig gesetzt wird, da er nur beim Speichern
|
||||
beruecksichtigt wird.
|
||||
|
||||
Dieses muss fuer das 3.1-Format gemacht werden, da dort eine
|
||||
Bug in der Pool-Lade-Methode vorliegt.
|
||||
*/
|
||||
|
||||
{
|
||||
pImp->nStoringStart = nFrom;
|
||||
|
Loading…
x
Reference in New Issue
Block a user