1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: findcoll.cxx,v $
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"
41 #include <comcore.hrc>
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
;
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
,
64 int nRet
= FIND_FOUND
;
65 if( bInReadOnly
&& pReplColl
)
68 if( !pCrsr
->Find( *pFmtColl
, fnMove
, pRegion
, bInReadOnly
) )
69 nRet
= FIND_NOT_FOUND
;
72 pCrsr
->GetDoc()->SetTxtFmtColl( *pCrsr
, (SwTxtFmtColl
*)pReplColl
);
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
;
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
)
117 pDoc
->EndUndo( UNDO_UI_REPLACE_STYLE
, NULL
);