Files
libreoffice/sw/source/core/docnode/ndnum.cxx
Jan Holesovsky 5a267de99f Merge remote-tracking branch 'origin/integration/dev300_m101'
Conflicts:
	starmath/source/symbol.cxx
	sw/source/core/doc/docnew.cxx
	sw/source/core/doc/docnum.cxx
	sw/source/core/draw/dview.cxx
	sw/source/core/fields/docufld.cxx
	sw/source/core/layout/calcmove.cxx
	sw/source/filter/html/swhtml.cxx
	sw/source/filter/rtf/rtftbl.cxx
	sw/source/ui/config/modcfg.cxx
	sw/source/ui/dialog/docstdlg.cxx
	sw/source/ui/dialog/docstdlg.src
	sw/source/ui/fldui/flddb.cxx
	sw/source/ui/fldui/flddinf.cxx
	sw/source/ui/fldui/flddok.cxx
	sw/source/ui/fldui/fldfunc.cxx
	sw/source/ui/fldui/fldmgr.cxx
	sw/source/ui/fldui/fldpage.hxx
	sw/source/ui/fldui/fldref.cxx
	sw/source/ui/fldui/fldvar.cxx
	sw/source/ui/fldui/fldvar.hxx
	sw/source/ui/fldui/fldwrap.cxx
	sw/source/ui/fldui/xfldui.cxx
	sw/source/ui/inc/docstdlg.hxx
	sw/source/ui/shells/langhelper.cxx
	sw/source/ui/shells/txtattr.cxx
	sw/source/ui/shells/txtcrsr.cxx
	sw/source/ui/table/tabledlg.cxx
2011-03-18 15:59:29 +01:00

149 lines
4.4 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_sw.hxx"
#include <node.hxx>
#include <doc.hxx>
#include <pam.hxx>
#include <ndtxt.hxx>
#include <fldbas.hxx> // UpdateFlds der KapitelNummerierung
#include <docary.hxx>
_SV_IMPL_SORTAR_ALG( SwOutlineNodes, SwNodePtr )
sal_Bool SwOutlineNodes::Seek_Entry( const SwNodePtr rSrch, sal_uInt16* pFndPos ) const
{
sal_uLong nIdx = rSrch->GetIndex();
sal_uInt16 nO = Count(), nM, nU = 0;
if( nO > 0 )
{
//JP 17.03.98: aufgrund des Bug 48592 - wo unter anderem nach Undo/Redo
// Nodes aus dem falschen NodesArray im OutlineArray standen,
// jetzt mal einen Check eingebaut.
#if OSL_DEBUG_LEVEL > 1
{
for( sal_uInt16 n = 1; n < nO; ++n )
if( &(*this)[ n-1 ]->GetNodes() !=
&(*this)[ n ]->GetNodes() )
{
OSL_ENSURE( !this, "Node im falschen Outline-Array" );
}
}
#endif
nO--;
while( nU <= nO )
{
nM = nU + ( nO - nU ) / 2;
if( (*this)[ nM ] == rSrch )
{
if( pFndPos )
*pFndPos = nM;
return sal_True;
}
else if( (*this)[ nM ]->GetIndex() < nIdx )
nU = nM + 1;
else if( nM == 0 )
{
if( pFndPos )
*pFndPos = nU;
return sal_False;
}
else
nO = nM - 1;
}
}
if( pFndPos )
*pFndPos = nU;
return sal_False;
}
void SwNodes::UpdateOutlineNode(SwNode & rNd)
{
SwTxtNode * pTxtNd = rNd.GetTxtNode();
if (pTxtNd && pTxtNd->IsOutlineStateChanged())
{
sal_Bool bFound = pOutlineNds->Seek_Entry(pTxtNd);
if (pTxtNd->IsOutline())
{
if (! bFound)
{
// assure that text is in the correct nodes array
if ( &(pTxtNd->GetNodes()) == this )
{
pOutlineNds->Insert(pTxtNd);
}
else
{
OSL_FAIL( "<SwNodes::UpdateOutlineNode(..)> - given text node isn't in the correct nodes array. This is a serious defect -> inform OD" );
}
}
}
else
{
if (bFound)
pOutlineNds->Remove(pTxtNd);
}
pTxtNd->UpdateOutlineState();
// die Gliederungs-Felder Updaten
GetDoc()->GetSysFldType( RES_CHAPTERFLD )->UpdateFlds();
}
}
void SwNodes::UpdtOutlineIdx( const SwNode& rNd )
{
if( !pOutlineNds->Count() ) // keine OutlineNodes vorhanden ?
return;
const SwNodePtr pSrch = (SwNodePtr)&rNd;
sal_uInt16 nPos;
pOutlineNds->Seek_Entry( pSrch, &nPos );
if( nPos == pOutlineNds->Count() ) // keine zum Updaten vorhanden ?
return;
if( nPos )
--nPos;
if( !GetDoc()->IsInDtor() && IsDocNodes() )
UpdateOutlineNode( *(*pOutlineNds)[ nPos ]);
}
const SwOutlineNodes & SwNodes::GetOutLineNds() const
{
return *pOutlineNds;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */