merge the formfield patch from ooo-build
[ooovba.git] / sw / source / core / crsr / findcoll.cxx
blob60fc08bdcfe3ec8add52e2978471a3aaf8a18bcb
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: findcoll.cxx,v $
10 * $Revision: 1.10 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_sw.hxx"
35 #include <swcrsr.hxx>
36 #include <doc.hxx>
37 #include <pamtyp.hxx>
38 #include <swundo.hxx>
39 #include <undobj.hxx>
40 #ifndef _COMCORE_HRC
41 #include <comcore.hrc>
42 #endif
43 #include <tools/resid.hxx>
45 //------------------ Methoden der CrsrShell ---------------------------
47 // Parameter fuer das Suchen vom FormatCollections
48 struct SwFindParaFmtColl : public SwFindParas
50 const SwTxtFmtColl *pFmtColl, *pReplColl;
51 SwCursor& rCursor;
52 SwFindParaFmtColl( const SwTxtFmtColl& rFmtColl,
53 const SwTxtFmtColl* pRpColl, SwCursor& rCrsr )
54 : pFmtColl( &rFmtColl ), pReplColl( pRpColl ), rCursor( rCrsr )
56 virtual int Find( SwPaM* , SwMoveFn , const SwPaM*, BOOL bInReadOnly );
57 virtual int IsReplaceMode() const;
61 int SwFindParaFmtColl::Find( SwPaM* pCrsr, SwMoveFn fnMove, const SwPaM* pRegion,
62 BOOL bInReadOnly )
64 int nRet = FIND_FOUND;
65 if( bInReadOnly && pReplColl )
66 bInReadOnly = FALSE;
68 if( !pCrsr->Find( *pFmtColl, fnMove, pRegion, bInReadOnly ) )
69 nRet = FIND_NOT_FOUND;
70 else if( pReplColl )
72 pCrsr->GetDoc()->SetTxtFmtColl( *pCrsr, (SwTxtFmtColl*)pReplColl );
73 nRet = FIND_NO_RING;
75 return nRet;
79 int SwFindParaFmtColl::IsReplaceMode() const
81 return 0 != pReplColl;
85 // Suchen nach Format-Collections
88 ULONG SwCursor::Find( const SwTxtFmtColl& rFmtColl,
89 SwDocPositions nStart, SwDocPositions nEnde, BOOL& bCancel,
90 FindRanges eFndRngs, const SwTxtFmtColl* pReplFmtColl )
92 // OLE-Benachrichtigung abschalten !!
93 SwDoc* pDoc = GetDoc();
94 Link aLnk( pDoc->GetOle2Link() );
95 pDoc->SetOle2Link( Link() );
97 BOOL bSttUndo = pDoc->DoesUndo() && pReplFmtColl;
98 if( bSttUndo )
100 SwRewriter aRewriter;
101 aRewriter.AddRule(UNDO_ARG1, rFmtColl.GetName());
102 aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS));
103 aRewriter.AddRule(UNDO_ARG3, pReplFmtColl->GetName());
105 pDoc->StartUndo( UNDO_UI_REPLACE_STYLE, &aRewriter );
108 SwFindParaFmtColl aSwFindParaFmtColl( rFmtColl, pReplFmtColl, *this );
110 ULONG nRet = FindAll( aSwFindParaFmtColl, nStart, nEnde, eFndRngs, bCancel );
111 pDoc->SetOle2Link( aLnk );
113 if( nRet && pReplFmtColl )
114 pDoc->SetModified();
116 if( bSttUndo )
117 pDoc->EndUndo( UNDO_UI_REPLACE_STYLE, NULL );
118 return nRet;