diff options
Diffstat (limited to 'sw/source/core/doc/doctxm.cxx')
-rw-r--r-- | sw/source/core/doc/doctxm.cxx | 89 |
1 files changed, 33 insertions, 56 deletions
diff --git a/sw/source/core/doc/doctxm.cxx b/sw/source/core/doc/doctxm.cxx index 79fcfc60049d..ce17a146d40f 100644 --- a/sw/source/core/doc/doctxm.cxx +++ b/sw/source/core/doc/doctxm.cxx @@ -76,6 +76,7 @@ #include <breakit.hxx> #include <editsh.hxx> #include <scriptinfo.hxx> +#include <switerator.hxx> using namespace ::com::sun::star; @@ -258,19 +259,20 @@ const SwTOXMark& SwDoc::GotoTOXMark( const SwTOXMark& rCurTOXMark, const SwTOXMark* pMax = &rCurTOXMark; const SwTOXMark* pMin = &rCurTOXMark; - const SwModify* pType = rCurTOXMark.GetRegisteredIn(); - SwClientIter aIter( *(SwModify*)pType ); + const SwTOXType* pType = rCurTOXMark.GetTOXType(); + SwTOXMarks aMarks; + SwTOXMark::InsertTOXMarks( aMarks, *pType ); const SwTOXMark* pTOXMark; const SwCntntFrm* pCFrm; Point aPt; - for( pTOXMark = (SwTOXMark*)aIter.First( TYPE( SwTOXMark )); pTOXMark; - pTOXMark = (SwTOXMark*)aIter.Next() ) + for( sal_Int32 nMark=0; nMark<aMarks.Count(); nMark++ ) { + pTOXMark = aMarks[nMark]; if( pTOXMark != &rCurTOXMark && 0 != ( pMark = pTOXMark->GetTxtTOXMark()) && 0 != ( pTOXSrc = pMark->GetpTxtNd() ) && - 0 != ( pCFrm = pTOXSrc->GetFrm( &aPt, 0, sal_False )) && + 0 != ( pCFrm = pTOXSrc->getLayoutFrm( GetCurrentLayout(), &aPt, 0, sal_False )) && ( bInReadOnly || !pCFrm->IsProtected() )) { CompareNodeCntnt aAbsNew( pTOXSrc->GetIndex(), *pMark->GetStart() ); @@ -356,7 +358,6 @@ const SwTOXMark& SwDoc::GotoTOXMark( const SwTOXMark& rCurTOXMark, return *pNew; } -/* */ const SwTOXBaseSection* SwDoc::InsertTableOf( const SwPosition& rPos, const SwTOXBase& rTOX, @@ -476,9 +477,7 @@ const SwTOXBase* SwDoc::GetCurTOX( const SwPosition& rPos ) const } return 0; } -/* -----------------01.09.99 16:01------------------- - --------------------------------------------------*/ const SwAttrSet& SwDoc::GetTOXBaseAttrSet(const SwTOXBase& rTOXBase) const { ASSERT( rTOXBase.ISA( SwTOXBaseSection ), "no TOXBaseSection!" ); @@ -487,9 +486,7 @@ const SwAttrSet& SwDoc::GetTOXBaseAttrSet(const SwTOXBase& rTOXBase) const ASSERT( pFmt, "invalid TOXBaseSection!" ); return pFmt->GetAttrSet(); } -/* -----------------02.09.99 07:48------------------- - --------------------------------------------------*/ const SwTOXBase* SwDoc::GetDefaultTOXBase( TOXTypes eTyp, sal_Bool bCreate ) { SwTOXBase** prBase = 0; @@ -511,9 +508,7 @@ const SwTOXBase* SwDoc::GetDefaultTOXBase( TOXTypes eTyp, sal_Bool bCreate ) } return (*prBase); } -/* -----------------02.09.99 08:06------------------- - --------------------------------------------------*/ void SwDoc::SetDefaultTOXBase(const SwTOXBase& rBase) { SwTOXBase** prBase = 0; @@ -639,9 +634,7 @@ sal_uInt16 SwDoc::GetTOXTypeCount(TOXTypes eTyp) const ++nCnt; return nCnt; } -/*-------------------------------------------------------------------- - --------------------------------------------------------------------*/ const SwTOXType* SwDoc::GetTOXType( TOXTypes eTyp, sal_uInt16 nId ) const { const SwTOXTypePtr * ppTTypes = pTOXTypes->GetData(); @@ -652,18 +645,14 @@ const SwTOXType* SwDoc::GetTOXType( TOXTypes eTyp, sal_uInt16 nId ) const return 0; } -/*-------------------------------------------------------------------- - --------------------------------------------------------------------*/ const SwTOXType* SwDoc::InsertTOXType( const SwTOXType& rTyp ) { SwTOXType * pNew = new SwTOXType( rTyp ); pTOXTypes->Insert( pNew, pTOXTypes->Count() ); return pNew; } -/*-------------------------------------------------------------------- - --------------------------------------------------------------------*/ String SwDoc::GetUniqueTOXBaseName( const SwTOXType& rType, const String* pChkStr ) const { @@ -718,9 +707,6 @@ String SwDoc::GetUniqueTOXBaseName( const SwTOXType& rType, return aName += String::CreateFromInt32( ++nNum ); } -/*-------------------------------------------------------------------- - - --------------------------------------------------------------------*/ sal_Bool SwDoc::SetTOXBaseName(const SwTOXBase& rTOXBase, const String& rName) { ASSERT( rTOXBase.ISA( SwTOXBaseSection ), @@ -738,7 +724,6 @@ sal_Bool SwDoc::SetTOXBaseName(const SwTOXBase& rTOXBase, const String& rName) return bRet; } -/* */ const SwTxtNode* lcl_FindChapterNode( const SwNode& rNd, sal_uInt8 nLvl = 0 ) { @@ -809,7 +794,7 @@ sal_Bool SwTOXBaseSection::SetPosAtStartEnd( SwPosition& rPos, sal_Bool bAtStart --------------------------------------------------------------------*/ void SwTOXBaseSection::Update(const SfxItemSet* pAttr, - const bool _bNewTOX ) + const bool _bNewTOX )//swmodtest 080307 { const SwSectionNode* pSectNd; if( !SwTOXBase::GetRegisteredIn()->GetDepends() || @@ -1089,8 +1074,11 @@ sNm.AppendAscii( RTL_CONSTASCII_STRINGPARAM( "_Head" )); pDoc->GetNodes().Delete( aInsPos, 1 ); aN2L.RestoreUpperFrms( pDoc->GetNodes(), nIdx, nIdx + 1 ); - if(pDoc->GetRootFrm()) - SwFrm::CheckPageDescs( (SwPageFrm*)pDoc->GetRootFrm()->Lower() ); + std::set<SwRootFrm*> aAllLayouts = pDoc->GetAllLayouts(); + for ( std::set<SwRootFrm*>::iterator pLayoutIter = aAllLayouts.begin(); pLayoutIter != aAllLayouts.end(); pLayoutIter++) + { + SwFrm::CheckPageDescs( (SwPageFrm*)(*pLayoutIter)->Lower() ); + }//swmod 080310 SetProtect( SwTOXBase::IsProtected() ); } @@ -1200,18 +1188,17 @@ SwTxtFmtColl* SwTOXBaseSection::GetTxtFmtColl( sal_uInt16 nLevel ) void SwTOXBaseSection::UpdateMarks( const SwTOXInternational& rIntl, const SwTxtNode* pOwnChapterNode ) { - const SwModify* pType = SwTOXBase::GetRegisteredIn(); + const SwTOXType* pType = (SwTOXType*) SwTOXBase::GetRegisteredIn(); if( !pType->GetDepends() ) return; SwDoc* pDoc = (SwDoc*)GetFmt()->GetDoc(); TOXTypes eTOXTyp = GetTOXType()->GetType(); - SwClientIter aIter( *(SwModify*)pType ); + SwIterator<SwTOXMark,SwTOXType> aIter( *pType ); SwTxtTOXMark* pTxtMark; SwTOXMark* pMark; - for( pMark = (SwTOXMark*)aIter.First( TYPE( SwTOXMark )); pMark; - pMark = (SwTOXMark*)aIter.Next() ) + for( pMark = aIter.First(); pMark; pMark = aIter.Next() ) { ::SetProgressState( 0, pDoc->GetDocShell() ); @@ -1225,7 +1212,7 @@ void SwTOXBaseSection::UpdateMarks( const SwTOXInternational& rIntl, // if selected use marks from the same chapter only if( pTOXSrc->GetNodes().IsDocNodes() && pTOXSrc->GetTxt().Len() && pTOXSrc->GetDepends() && - pTOXSrc->GetFrm() && + pTOXSrc->getLayoutFrm( pDoc->GetCurrentLayout() ) && (!IsFromChapter() || ::lcl_FindChapterNode( *pTOXSrc, 0 ) == pOwnChapterNode ) && !pTOXSrc->HasHiddenParaField() && !SwScriptInfo::IsInHiddenRange( *pTOXSrc, *pTxtMark->GetStart() ) ) @@ -1289,7 +1276,7 @@ void SwTOXBaseSection::UpdateOutline( const SwTxtNode* pOwnChapterNode ) if( pTxtNd && pTxtNd->Len() && pTxtNd->GetDepends() && //sal_uInt16(pTxtNd->GetTxtColl()->GetOutlineLevel()+1) <= GetLevel() && //#outline level,zhaojianwei sal_uInt16( pTxtNd->GetAttrOutlineLevel()) <= GetLevel() && //<-end,zhaojianwei - pTxtNd->GetFrm() && + pTxtNd->getLayoutFrm( pDoc->GetCurrentLayout() ) && !pTxtNd->HasHiddenParaField() && !pTxtNd->HasHiddenCharAttribute( true ) && ( !IsFromChapter() || @@ -1325,13 +1312,12 @@ void SwTOXBaseSection::UpdateTemplate( const SwTxtNode* pOwnChapterNode ) pColl->IsAssignedToListLevelOfOutlineStyle()) )//<-end,zhaojianwei continue; - SwClientIter aIter( *pColl ); - SwTxtNode* pTxtNd = (SwTxtNode*)aIter.First( TYPE( SwTxtNode )); - for( ; pTxtNd; pTxtNd = (SwTxtNode*)aIter.Next() ) + SwIterator<SwTxtNode,SwFmtColl> aIter( *pColl ); + for( SwTxtNode* pTxtNd = aIter.First(); pTxtNd; pTxtNd = aIter.Next() ) { ::SetProgressState( 0, pDoc->GetDocShell() ); - if( pTxtNd->GetTxt().Len() && pTxtNd->GetFrm() && + if( pTxtNd->GetTxt().Len() && pTxtNd->getLayoutFrm( pDoc->GetCurrentLayout() ) && pTxtNd->GetNodes().IsDocNodes() && ( !IsFromChapter() || pOwnChapterNode == ::lcl_FindChapterNode( *pTxtNd, 0 ) ) ) @@ -1354,9 +1340,8 @@ void SwTOXBaseSection::UpdateSequence( const SwTxtNode* pOwnChapterNode ) if(!pSeqFld) return; - SwClientIter aIter( *pSeqFld ); - SwFmtFld* pFmtFld = (SwFmtFld*)aIter.First( TYPE( SwFmtFld )); - for( ; pFmtFld; pFmtFld = (SwFmtFld*)aIter.Next() ) + SwIterator<SwFmtFld,SwFieldType> aIter( *pSeqFld ); + for( SwFmtFld* pFmtFld = aIter.First(); pFmtFld; pFmtFld = aIter.Next() ) { const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld(); if(!pTxtFld) @@ -1364,7 +1349,7 @@ void SwTOXBaseSection::UpdateSequence( const SwTxtNode* pOwnChapterNode ) const SwTxtNode& rTxtNode = pTxtFld->GetTxtNode(); ::SetProgressState( 0, pDoc->GetDocShell() ); - if( rTxtNode.GetTxt().Len() && rTxtNode.GetFrm() && + if( rTxtNode.GetTxt().Len() && rTxtNode.getLayoutFrm( pDoc->GetCurrentLayout() ) && rTxtNode.GetNodes().IsDocNodes() && ( !IsFromChapter() || ::lcl_FindChapterNode( rTxtNode, 0 ) == pOwnChapterNode ) ) @@ -1384,9 +1369,7 @@ void SwTOXBaseSection::UpdateSequence( const SwTxtNode* pOwnChapterNode ) } } } -/* -----------------15.09.99 14:18------------------- - --------------------------------------------------*/ void SwTOXBaseSection::UpdateAuthorities( const SwTOXInternational& rIntl ) { SwDoc* pDoc = (SwDoc*)GetFmt()->GetDoc(); @@ -1394,9 +1377,8 @@ void SwTOXBaseSection::UpdateAuthorities( const SwTOXInternational& rIntl ) if(!pAuthFld) return; - SwClientIter aIter( *pAuthFld ); - SwFmtFld* pFmtFld = (SwFmtFld*)aIter.First( TYPE( SwFmtFld )); - for( ; pFmtFld; pFmtFld = (SwFmtFld*)aIter.Next() ) + SwIterator<SwFmtFld,SwFieldType> aIter( *pAuthFld ); + for( SwFmtFld* pFmtFld = aIter.First(); pFmtFld; pFmtFld = aIter.Next() ) { const SwTxtFld* pTxtFld = pFmtFld->GetTxtFld(); //undo @@ -1407,12 +1389,12 @@ void SwTOXBaseSection::UpdateAuthorities( const SwTOXInternational& rIntl ) // const SwTxtNode* pChapterCompareNode = 0; - if( rTxtNode.GetTxt().Len() && rTxtNode.GetFrm() && + if( rTxtNode.GetTxt().Len() && rTxtNode.getLayoutFrm( pDoc->GetCurrentLayout() ) && rTxtNode.GetNodes().IsDocNodes() /*&& (!IsFromChapter() || pChapterCompareNode == pOwnChapterNode) */) { //#106485# the body node has to be used! - SwCntntFrm *pFrm = rTxtNode.GetFrm(); + SwCntntFrm *pFrm = rTxtNode.getLayoutFrm( pDoc->GetCurrentLayout() ); SwPosition aFldPos(rTxtNode); const SwTxtNode* pTxtNode = 0; if(pFrm && !pFrm->IsInDocBody()) @@ -1561,7 +1543,7 @@ void SwTOXBaseSection::UpdateCntnt( SwTOXElement eMyType, } } - if( pCNd->GetFrm() && ( !IsFromChapter() || + if( pCNd->getLayoutFrm( pDoc->GetCurrentLayout() ) && ( !IsFromChapter() || ::lcl_FindChapterNode( *pCNd, 0 ) == pOwnChapterNode )) { SwTOXPara * pNew = new SwTOXPara( *pCNd, eMyType, @@ -1602,7 +1584,7 @@ void SwTOXBaseSection::UpdateTable( const SwTxtNode* pOwnChapterNode ) while( 0 != ( pCNd = rNds.GoNext( &aCntntIdx ) ) && aCntntIdx.GetIndex() < pTblNd->EndOfSectionIndex() ) { - if( pCNd->GetFrm() && (!IsFromChapter() || + if( pCNd->getLayoutFrm( pDoc->GetCurrentLayout() ) && (!IsFromChapter() || ::lcl_FindChapterNode( *pCNd, 0 ) == pOwnChapterNode )) { SwTOXTable * pNew = new SwTOXTable( *pCNd ); @@ -1743,7 +1725,7 @@ void SwTOXBaseSection::GenerateText( sal_uInt16 nArrayIdx, long nRightMargin; if( pPageDesc ) { - const SwFrm* pFrm = pTOXNd->GetFrm( 0, 0, sal_True ); + const SwFrm* pFrm = pTOXNd->getLayoutFrm( pDoc->GetCurrentLayout(), 0, 0, sal_True ); if( !pFrm || 0 == ( pFrm = pFrm->FindPageFrm() ) || pPageDesc != ((SwPageFrm*)pFrm)->GetPageDesc() ) // dann muss man ueber den PageDesc gehen @@ -1835,7 +1817,7 @@ void SwTOXBaseSection::GenerateText( sal_uInt16 nArrayIdx, pTOXSource->pNd->IsCntntNode() ) // <-- { - const SwCntntFrm* pFrm = pTOXSource->pNd->GetFrm(); + const SwCntntFrm* pFrm = pTOXSource->pNd->getLayoutFrm( pDoc->GetCurrentLayout() ); if( pFrm ) { SwChapterFieldType aFldTyp; @@ -2010,7 +1992,7 @@ void SwTOXBaseSection::UpdatePageNum() SwTOXSource& rTOXSource = pSortBase->aTOXSources[j]; if( rTOXSource.pNd ) { - SwCntntFrm* pFrm = rTOXSource.pNd->GetFrm(); + SwCntntFrm* pFrm = rTOXSource.pNd->getLayoutFrm( pDoc->GetCurrentLayout() ); ASSERT( pFrm || pDoc->IsUpdateTOX(), "TOX, no Frame found"); if( !pFrm ) continue; @@ -2426,9 +2408,7 @@ sal_Bool SwTOXBase::IsTOXBaseInReadonly() const } return bRet; } -/* -----------------17.08.99 13:29------------------- - --------------------------------------------------*/ const SfxItemSet* SwTOXBase::GetAttrSet() const { const SwTOXBaseSection *pSect = PTR_CAST(SwTOXBaseSection, this); @@ -2459,6 +2439,3 @@ sal_Bool SwTOXBase::GetInfo( SfxPoolItem& rInfo ) const return sal_True; } -/* */ - - |