1*efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*efeef26fSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*efeef26fSAndrew Rist * or more contributor license agreements. See the NOTICE file
5*efeef26fSAndrew Rist * distributed with this work for additional information
6*efeef26fSAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*efeef26fSAndrew Rist * to you under the Apache License, Version 2.0 (the
8*efeef26fSAndrew Rist * "License"); you may not use this file except in compliance
9*efeef26fSAndrew Rist * with the License. You may obtain a copy of the License at
10*efeef26fSAndrew Rist *
11*efeef26fSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*efeef26fSAndrew Rist *
13*efeef26fSAndrew Rist * Unless required by applicable law or agreed to in writing,
14*efeef26fSAndrew Rist * software distributed under the License is distributed on an
15*efeef26fSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*efeef26fSAndrew Rist * KIND, either express or implied. See the License for the
17*efeef26fSAndrew Rist * specific language governing permissions and limitations
18*efeef26fSAndrew Rist * under the License.
19*efeef26fSAndrew Rist *
20*efeef26fSAndrew Rist *************************************************************/
21*efeef26fSAndrew Rist
22*efeef26fSAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include <tools/resid.hxx>
28cdf0e10cSrcweir
29cdf0e10cSrcweir #include <swcrsr.hxx>
30cdf0e10cSrcweir #include <doc.hxx>
31cdf0e10cSrcweir #include <IDocumentUndoRedo.hxx>
32cdf0e10cSrcweir #include <pamtyp.hxx>
33cdf0e10cSrcweir #include <swundo.hxx>
34cdf0e10cSrcweir #include <SwRewriter.hxx>
35cdf0e10cSrcweir #include <comcore.hrc>
36cdf0e10cSrcweir
37cdf0e10cSrcweir //------------------ Methoden der CrsrShell ---------------------------
38cdf0e10cSrcweir
39cdf0e10cSrcweir // Parameter fuer das Suchen vom FormatCollections
40cdf0e10cSrcweir struct SwFindParaFmtColl : public SwFindParas
41cdf0e10cSrcweir {
42cdf0e10cSrcweir const SwTxtFmtColl *pFmtColl, *pReplColl;
43cdf0e10cSrcweir SwCursor& rCursor;
SwFindParaFmtCollSwFindParaFmtColl44cdf0e10cSrcweir SwFindParaFmtColl( const SwTxtFmtColl& rFmtColl,
45cdf0e10cSrcweir const SwTxtFmtColl* pRpColl, SwCursor& rCrsr )
46cdf0e10cSrcweir : pFmtColl( &rFmtColl ), pReplColl( pRpColl ), rCursor( rCrsr )
47cdf0e10cSrcweir {}
48cdf0e10cSrcweir virtual int Find( SwPaM* , SwMoveFn , const SwPaM*, sal_Bool bInReadOnly );
49cdf0e10cSrcweir virtual int IsReplaceMode() const;
50cdf0e10cSrcweir };
51cdf0e10cSrcweir
52cdf0e10cSrcweir
Find(SwPaM * pCrsr,SwMoveFn fnMove,const SwPaM * pRegion,sal_Bool bInReadOnly)53cdf0e10cSrcweir int SwFindParaFmtColl::Find( SwPaM* pCrsr, SwMoveFn fnMove, const SwPaM* pRegion,
54cdf0e10cSrcweir sal_Bool bInReadOnly )
55cdf0e10cSrcweir {
56cdf0e10cSrcweir int nRet = FIND_FOUND;
57cdf0e10cSrcweir if( bInReadOnly && pReplColl )
58cdf0e10cSrcweir bInReadOnly = sal_False;
59cdf0e10cSrcweir
60cdf0e10cSrcweir if( !pCrsr->Find( *pFmtColl, fnMove, pRegion, bInReadOnly ) )
61cdf0e10cSrcweir nRet = FIND_NOT_FOUND;
62cdf0e10cSrcweir else if( pReplColl )
63cdf0e10cSrcweir {
64cdf0e10cSrcweir pCrsr->GetDoc()->SetTxtFmtColl( *pCrsr, (SwTxtFmtColl*)pReplColl );
65cdf0e10cSrcweir nRet = FIND_NO_RING;
66cdf0e10cSrcweir }
67cdf0e10cSrcweir return nRet;
68cdf0e10cSrcweir }
69cdf0e10cSrcweir
70cdf0e10cSrcweir
IsReplaceMode() const71cdf0e10cSrcweir int SwFindParaFmtColl::IsReplaceMode() const
72cdf0e10cSrcweir {
73cdf0e10cSrcweir return 0 != pReplColl;
74cdf0e10cSrcweir }
75cdf0e10cSrcweir
76cdf0e10cSrcweir
77cdf0e10cSrcweir // Suchen nach Format-Collections
78cdf0e10cSrcweir
79cdf0e10cSrcweir
Find(const SwTxtFmtColl & rFmtColl,SwDocPositions nStart,SwDocPositions nEnde,sal_Bool & bCancel,FindRanges eFndRngs,const SwTxtFmtColl * pReplFmtColl)80cdf0e10cSrcweir sal_uLong SwCursor::Find( const SwTxtFmtColl& rFmtColl,
81cdf0e10cSrcweir SwDocPositions nStart, SwDocPositions nEnde, sal_Bool& bCancel,
82cdf0e10cSrcweir FindRanges eFndRngs, const SwTxtFmtColl* pReplFmtColl )
83cdf0e10cSrcweir {
84cdf0e10cSrcweir // OLE-Benachrichtigung abschalten !!
85cdf0e10cSrcweir SwDoc* pDoc = GetDoc();
86cdf0e10cSrcweir Link aLnk( pDoc->GetOle2Link() );
87cdf0e10cSrcweir pDoc->SetOle2Link( Link() );
88cdf0e10cSrcweir
89cdf0e10cSrcweir bool const bStartUndo =
90cdf0e10cSrcweir pDoc->GetIDocumentUndoRedo().DoesUndo() && pReplFmtColl;
91cdf0e10cSrcweir if (bStartUndo)
92cdf0e10cSrcweir {
93cdf0e10cSrcweir SwRewriter aRewriter;
94cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG1, rFmtColl.GetName());
95cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG2, SW_RES(STR_YIELDS));
96cdf0e10cSrcweir aRewriter.AddRule(UNDO_ARG3, pReplFmtColl->GetName());
97cdf0e10cSrcweir
98cdf0e10cSrcweir pDoc->GetIDocumentUndoRedo().StartUndo( UNDO_UI_REPLACE_STYLE,
99cdf0e10cSrcweir &aRewriter );
100cdf0e10cSrcweir }
101cdf0e10cSrcweir
102cdf0e10cSrcweir SwFindParaFmtColl aSwFindParaFmtColl( rFmtColl, pReplFmtColl, *this );
103cdf0e10cSrcweir
104cdf0e10cSrcweir sal_uLong nRet = FindAll( aSwFindParaFmtColl, nStart, nEnde, eFndRngs, bCancel );
105cdf0e10cSrcweir pDoc->SetOle2Link( aLnk );
106cdf0e10cSrcweir
107cdf0e10cSrcweir if( nRet && pReplFmtColl )
108cdf0e10cSrcweir pDoc->SetModified();
109cdf0e10cSrcweir
110cdf0e10cSrcweir if (bStartUndo)
111cdf0e10cSrcweir {
112cdf0e10cSrcweir pDoc->GetIDocumentUndoRedo().EndUndo(UNDO_END, 0);
113cdf0e10cSrcweir }
114cdf0e10cSrcweir return nRet;
115cdf0e10cSrcweir }
116cdf0e10cSrcweir
117cdf0e10cSrcweir
118cdf0e10cSrcweir
119