diff options
Diffstat (limited to 'sw/source/core/crsr/findcoll.cxx')
-rw-r--r-- | sw/source/core/crsr/findcoll.cxx | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/sw/source/core/crsr/findcoll.cxx b/sw/source/core/crsr/findcoll.cxx new file mode 100644 index 000000000000..4bb594ceb4ca --- /dev/null +++ b/sw/source/core/crsr/findcoll.cxx @@ -0,0 +1,119 @@ +/************************************************************************* + * + * 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 <swcrsr.hxx> +#include <doc.hxx> +#include <pamtyp.hxx> +#include <swundo.hxx> +#include <undobj.hxx> +#ifndef _COMCORE_HRC +#include <comcore.hrc> +#endif +#include <tools/resid.hxx> + +//------------------ Methoden der CrsrShell --------------------------- + +// Parameter fuer das Suchen vom FormatCollections +struct SwFindParaFmtColl : public SwFindParas +{ + const SwTxtFmtColl *pFmtColl, *pReplColl; + SwCursor& rCursor; + SwFindParaFmtColl( const SwTxtFmtColl& rFmtColl, + const SwTxtFmtColl* pRpColl, SwCursor& rCrsr ) + : pFmtColl( &rFmtColl ), pReplColl( pRpColl ), rCursor( rCrsr ) + {} + virtual int Find( SwPaM* , SwMoveFn , const SwPaM*, BOOL bInReadOnly ); + virtual int IsReplaceMode() const; +}; + + +int SwFindParaFmtColl::Find( SwPaM* pCrsr, SwMoveFn fnMove, const SwPaM* pRegion, + BOOL bInReadOnly ) +{ + int nRet = FIND_FOUND; + if( bInReadOnly && pReplColl ) + bInReadOnly = FALSE; + + if( !pCrsr->Find( *pFmtColl, fnMove, pRegion, bInReadOnly ) ) + nRet = FIND_NOT_FOUND; + else if( pReplColl ) + { + pCrsr->GetDoc()->SetTxtFmtColl( *pCrsr, (SwTxtFmtColl*)pReplColl ); + nRet = FIND_NO_RING; + } + return nRet; +} + + +int SwFindParaFmtColl::IsReplaceMode() const +{ + return 0 != pReplColl; +} + + +// Suchen nach Format-Collections + + +ULONG SwCursor::Find( const SwTxtFmtColl& rFmtColl, + SwDocPositions nStart, SwDocPositions nEnde, BOOL& bCancel, + FindRanges eFndRngs, const SwTxtFmtColl* pReplFmtColl ) +{ + // OLE-Benachrichtigung abschalten !! + SwDoc* pDoc = GetDoc(); + Link aLnk( pDoc->GetOle2Link() ); + pDoc->SetOle2Link( Link() ); + + BOOL bSttUndo = pDoc->DoesUndo() && pReplFmtColl; + if( bSttUndo ) + { + SwRewriter aRewriter; + aRewriter.AddRule(UNDO_ARG1, rFmtColl.GetName()); + aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS)); + aRewriter.AddRule(UNDO_ARG3, pReplFmtColl->GetName()); + + pDoc->StartUndo( UNDO_UI_REPLACE_STYLE, &aRewriter ); + } + + SwFindParaFmtColl aSwFindParaFmtColl( rFmtColl, pReplFmtColl, *this ); + + ULONG nRet = FindAll( aSwFindParaFmtColl, nStart, nEnde, eFndRngs, bCancel ); + pDoc->SetOle2Link( aLnk ); + + if( nRet && pReplFmtColl ) + pDoc->SetModified(); + + if( bSttUndo ) + pDoc->EndUndo( UNDO_UI_REPLACE_STYLE, NULL ); + return nRet; +} + + + |