xref: /aoo41x/main/sw/source/core/crsr/findcoll.cxx (revision efeef26f)
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