xref: /AOO41X/main/sw/source/core/unocore/unosrch.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sw.hxx"
30 
31 #include "unosrch.hxx"
32 #include <doc.hxx>
33 #include <hints.hxx>
34 #include <unomap.hxx>
35 #include <unobaseclass.hxx>
36 #include <unomid.h>
37 
38 #include <vos/mutex.hxx>
39 #include <vcl/svapp.hxx>
40 #include "editeng/unolingu.hxx"
41 #include <com/sun/star/util/SearchOptions.hpp>
42 #include <com/sun/star/util/SearchFlags.hpp>
43 #include <com/sun/star/i18n/TransliterationModules.hpp>
44 #include <com/sun/star/beans/PropertyAttribute.hpp>
45 
46 using namespace ::com::sun::star;
47 using ::rtl::OUString;
48 
49 /******************************************************************************
50  *
51  ******************************************************************************/
52 
53 /* -----------------23.06.99 12:19-------------------
54 
55  --------------------------------------------------*/
56 class SwSearchProperties_Impl
57 {
58 	beans::PropertyValue** 			pValueArr; //
59     sal_uInt32                      nArrLen;
60     const PropertyEntryVector_t     aPropertyEntries;
61 public:
62 	SwSearchProperties_Impl();
63 	~SwSearchProperties_Impl();
64 
65 	void	SetProperties(const uno::Sequence< beans::PropertyValue >& aSearchAttribs)
66 		throw( beans::UnknownPropertyException, lang::IllegalArgumentException, uno::RuntimeException );
67 	const uno::Sequence< beans::PropertyValue > GetProperties() const;
68 
69 	void	FillItemSet(SfxItemSet& rSet, sal_Bool bIsValueSearch) const;
70 	sal_Bool 	HasAttributes() const;
71 };
72 /* -----------------23.06.99 13:08-------------------
73 
74  --------------------------------------------------*/
75 SwSearchProperties_Impl::SwSearchProperties_Impl() :
76     nArrLen(0),
77     aPropertyEntries( aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_CURSOR)->getPropertyMap()->getPropertyEntries())
78 {
79     nArrLen = aPropertyEntries.size();
80     pValueArr = new beans::PropertyValue*[nArrLen];
81     for(sal_uInt32 i = 0; i < nArrLen; i++)
82 		pValueArr[i] = 0;
83 }
84 /* -----------------23.06.99 13:08-------------------
85 
86  --------------------------------------------------*/
87 SwSearchProperties_Impl::~SwSearchProperties_Impl()
88 {
89     for(sal_uInt32 i = 0; i < nArrLen; i++)
90 		delete pValueArr[i];
91     delete[] pValueArr;
92 }
93 /* -----------------23.06.99 13:09-------------------
94 
95  --------------------------------------------------*/
96 void	SwSearchProperties_Impl::SetProperties(const uno::Sequence< beans::PropertyValue >& aSearchAttribs)
97 				throw( beans::UnknownPropertyException, lang::IllegalArgumentException, uno::RuntimeException )
98 {
99 	const beans::PropertyValue* pProps = aSearchAttribs.getConstArray();
100     sal_uInt32 i;
101 
102 	//delete all existing values
103 	for( i = 0; i < nArrLen; i++)
104 	{
105 		delete pValueArr[i];
106 		pValueArr[i] = 0;
107 	}
108 
109     sal_uInt32 nLen = aSearchAttribs.getLength();
110     for(i = 0; i < nLen; i++)
111 	{
112 		sal_uInt16 nIndex = 0;
113         PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
114         while(pProps[i].Name != aIt->sName)
115 		{
116             ++aIt;
117 			nIndex++;
118             if( aIt == aPropertyEntries.end() )
119                 throw beans::UnknownPropertyException();
120 		}
121 		pValueArr[nIndex] = new beans::PropertyValue(pProps[i]);
122 	}
123 }
124 /* -----------------23.06.99 13:08-------------------
125 
126  --------------------------------------------------*/
127 const uno::Sequence< beans::PropertyValue > SwSearchProperties_Impl::GetProperties() const
128 {
129     sal_uInt32 nPropCount = 0;
130     sal_uInt32 i;
131 	for( i = 0; i < nArrLen; i++)
132 		if(pValueArr[i])
133 			nPropCount++;
134 
135 	uno::Sequence< beans::PropertyValue > aRet(nPropCount);
136 	beans::PropertyValue* pProps = aRet.getArray();
137 	nPropCount = 0;
138 	for(i = 0; i < nArrLen; i++)
139 	{
140 		if(pValueArr[i])
141 		{
142 			pProps[nPropCount++] = *(pValueArr[i]);
143 		}
144 	}
145 	return aRet;
146 }
147 /* -----------------23.06.99 13:06-------------------
148 
149  --------------------------------------------------*/
150 void SwSearchProperties_Impl::FillItemSet(SfxItemSet& rSet, sal_Bool bIsValueSearch) const
151 {
152 	//
153 
154 	SfxPoolItem* pBoxItem = 0,
155 	*pBreakItem = 0,
156 	*pAutoKernItem  = 0,
157 	*pWLineItem	  = 0,
158 	*pTabItem  = 0,
159 	*pSplitItem  = 0,
160 	*pRegItem  = 0,
161 	*pLineSpaceItem  = 0,
162 	*pLineNumItem  = 0,
163 	*pKeepItem  = 0,
164 	*pLRItem  = 0,
165 	*pULItem  = 0,
166 	*pBackItem  = 0,
167 	*pAdjItem  = 0,
168 	*pDescItem  = 0,
169 	*pInetItem  = 0,
170 	*pDropItem  = 0,
171 	*pWeightItem  = 0,
172 	*pULineItem  = 0,
173 	*pOLineItem  = 0,
174 	*pCharFmtItem  = 0,
175 	*pShadItem  = 0,
176 	*pPostItem  = 0,
177 	*pNHyphItem  = 0,
178 	*pLangItem  = 0,
179 	*pKernItem  = 0,
180 	*pFontSizeItem  = 0,
181 	*pFontItem  = 0,
182 	*pBlinkItem  = 0,
183 	*pEscItem  = 0,
184 	*pCrossedOutItem  = 0,
185 	*pContourItem  = 0,
186 	*pCharColorItem  = 0,
187 	*pCasemapItem  = 0,
188     *pBrushItem  = 0,
189     *pFontCJKItem = 0,
190     *pFontSizeCJKItem = 0,
191     *pCJKLangItem = 0,
192     *pCJKPostureItem = 0,
193     *pCJKWeightItem = 0,
194     *pFontCTLItem = 0,
195     *pFontSizeCTLItem = 0,
196     *pCTLLangItem = 0,
197     *pCTLPostureItem = 0,
198     *pCTLWeightItem = 0;
199 
200     PropertyEntryVector_t::const_iterator aIt = aPropertyEntries.begin();
201     for(sal_uInt32 i = 0; i < nArrLen; i++, ++aIt)
202 	{
203 		if(pValueArr[i])
204 		{
205 			SfxPoolItem* pTempItem = 0;
206             switch(aIt->nWID)
207 			{
208 				case  RES_BOX:
209 					if(!pBoxItem)
210                         pBoxItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
211 					pTempItem = pBoxItem;
212 				break;
213 				case  RES_BREAK:
214 					if(!pBreakItem)
215                         pBreakItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
216 					pTempItem = pBreakItem;
217 				break;
218 				case  RES_CHRATR_AUTOKERN:
219 					if(!pAutoKernItem)
220                         pAutoKernItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
221 					pTempItem = pAutoKernItem;
222 					break;
223 				case  RES_CHRATR_BACKGROUND:
224 					if(!pBrushItem)
225                         pBrushItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
226 					pTempItem = pBrushItem;
227 				break;
228 				case  RES_CHRATR_CASEMAP:
229 					if(!pCasemapItem)
230                         pCasemapItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
231 					pTempItem = pCasemapItem;
232 				break;
233 				case  RES_CHRATR_COLOR:
234 					if(!pCharColorItem)
235                         pCharColorItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
236 					pTempItem = pCharColorItem;
237 				break;
238 				case  RES_CHRATR_CONTOUR:
239 					if(!pContourItem)
240                         pContourItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
241 					pTempItem = pContourItem;
242 				break;
243 				case  RES_CHRATR_CROSSEDOUT:
244 					if(!pCrossedOutItem)
245                         pCrossedOutItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
246 					pTempItem = pCrossedOutItem;
247 				break;
248 				case  RES_CHRATR_ESCAPEMENT:
249 					if(!pEscItem)
250                         pEscItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
251 					pTempItem = pEscItem;
252 				break;
253 				case  RES_CHRATR_BLINK:
254 					if(!pBlinkItem)
255                         pBlinkItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
256 					pTempItem = pBlinkItem;
257 				break;
258 				case  RES_CHRATR_FONT:
259 					if(!pFontItem)
260                         pFontItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
261 					pTempItem = pFontItem;
262 				break;
263 				case  RES_CHRATR_FONTSIZE:
264 					if(!pFontSizeItem)
265                         pFontSizeItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
266 					pTempItem = pFontSizeItem;
267 				break;
268 				case  RES_CHRATR_KERNING:
269 					if(!pKernItem)
270                         pKernItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
271 					pTempItem = pKernItem;
272 				break;
273 				case  RES_CHRATR_LANGUAGE:
274 					if(!pLangItem)
275                         pLangItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
276 					pTempItem = pLangItem;
277 				break;
278 				case  RES_CHRATR_NOHYPHEN:
279 					if(!pNHyphItem)
280                         pNHyphItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
281 					pTempItem = pNHyphItem;
282 				break;
283 				case  RES_CHRATR_POSTURE:
284 					if(!pPostItem)
285                         pPostItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
286 					pTempItem = pPostItem;
287 				break;
288 				case  RES_CHRATR_SHADOWED:
289 					if(!pShadItem)
290                         pShadItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
291 					pTempItem = pShadItem;
292 				break;
293 				case  RES_TXTATR_CHARFMT:
294 					if(!pCharFmtItem)
295                         pCharFmtItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
296 					pTempItem = pCharFmtItem;
297 				break;
298 				case  RES_CHRATR_UNDERLINE:
299 					if(!pULineItem)
300                         pULineItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
301 					pTempItem = pULineItem;
302 				break;
303 				case  RES_CHRATR_OVERLINE:
304 					if(!pOLineItem)
305                         pOLineItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
306 					pTempItem = pOLineItem;
307 				break;
308 				case  RES_CHRATR_WEIGHT:
309 					if(!pWeightItem)
310                         pWeightItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
311 					pTempItem = pWeightItem;
312 				break;
313 				case  RES_PARATR_DROP:
314 					if(!pDropItem)
315                         pDropItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
316 					pTempItem = pDropItem;
317 				break;
318 				case  RES_TXTATR_INETFMT:
319 					if(!pInetItem)
320                         pInetItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
321 					pTempItem = pInetItem;
322 				break;
323 				case  RES_PAGEDESC:
324 					if(!pDescItem)
325                         pDescItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
326 					pTempItem = pDescItem;
327 				break;
328 				case  RES_PARATR_ADJUST:
329 					if(!pAdjItem)
330                         pAdjItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
331 					pTempItem = pAdjItem;
332 				break;
333 				case  RES_BACKGROUND:
334 					if(!pBackItem)
335                         pBackItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
336 					pTempItem = pBackItem;
337 				break;
338 				case  RES_UL_SPACE:
339 					if(!pULItem)
340                         pULItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
341 					pTempItem = pULItem;
342 				break;
343 				case  RES_LR_SPACE:
344 					if(!pLRItem)
345                         pLRItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
346 					pTempItem = pLRItem;
347 				break;
348 				case  RES_KEEP:
349 					if(!pKeepItem)
350                         pKeepItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
351 					pTempItem = pKeepItem;
352 				break;
353 				case  RES_LINENUMBER:
354 					if(!pLineNumItem)
355                         pLineNumItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
356 					pTempItem = pLineNumItem;
357 				break;
358 				case  RES_PARATR_LINESPACING:
359 					if(!pLineSpaceItem)
360                         pLineSpaceItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
361 					pTempItem = pLineSpaceItem;
362 				break;
363 				case  RES_PARATR_REGISTER:
364 					if(!pRegItem)
365                         pRegItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
366 					pTempItem = pRegItem;
367 				break;
368 				case  RES_PARATR_SPLIT:
369 					if(!pSplitItem)
370                         pSplitItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
371 					pTempItem = pSplitItem;
372 				break;
373 				case  RES_PARATR_TABSTOP:
374 					if(!pTabItem)
375                         pTabItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
376 					pTempItem = pTabItem;
377 				break;
378 				case  RES_CHRATR_WORDLINEMODE:
379 					if(!pWLineItem)
380                         pWLineItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
381 					pTempItem = pWLineItem;
382 				break;
383                 case RES_CHRATR_CJK_FONT:
384                     if(!pFontCJKItem )
385                         pFontCJKItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
386                     pTempItem = pFontCJKItem;
387                 break;
388                 case RES_CHRATR_CJK_FONTSIZE:
389                     if(!pFontSizeCJKItem )
390                         pFontSizeCJKItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
391                     pTempItem = pFontSizeCJKItem;
392                 break;
393                 case RES_CHRATR_CJK_LANGUAGE:
394                     if(!pCJKLangItem )
395                         pCJKLangItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
396                     pTempItem = pCJKLangItem;
397                 break;
398                 case RES_CHRATR_CJK_POSTURE:
399                     if(!pCJKPostureItem )
400                         pCJKPostureItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
401                     pTempItem = pCJKPostureItem;
402                 break;
403                 case RES_CHRATR_CJK_WEIGHT:
404                     if(!pCJKWeightItem )
405                         pCJKWeightItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
406                     pTempItem = pCJKWeightItem;
407                 break;
408                 case RES_CHRATR_CTL_FONT:
409                     if(!pFontCTLItem )
410                         pFontCTLItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
411                     pTempItem = pFontCTLItem;
412                 break;
413                 case RES_CHRATR_CTL_FONTSIZE:
414                     if(!pFontSizeCTLItem )
415                         pFontSizeCTLItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
416                     pTempItem = pFontSizeCTLItem;
417                 break;
418                 case RES_CHRATR_CTL_LANGUAGE:
419                     if(!pCTLLangItem )
420                         pCTLLangItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
421                     pTempItem = pCTLLangItem;
422                 break;
423                 case RES_CHRATR_CTL_POSTURE:
424                     if(!pCTLPostureItem )
425                         pCTLPostureItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
426                     pTempItem = pCTLPostureItem;
427                 break;
428                 case RES_CHRATR_CTL_WEIGHT:
429                     if(!pCTLWeightItem )
430                         pCTLWeightItem = rSet.GetPool()->GetDefaultItem(aIt->nWID).Clone();
431                     pTempItem = pCTLWeightItem;
432                 break;
433 			}
434 			if(pTempItem)
435 			{
436 				if(bIsValueSearch)
437 				{
438                     pTempItem->PutValue(pValueArr[i]->Value, aIt->nMemberId);
439 					rSet.Put(*pTempItem);
440 				}
441 				else
442 					rSet.InvalidateItem( pTempItem->Which() );
443 			}
444 		}
445 	}
446 	delete pBoxItem;
447 	delete pBreakItem;
448 	delete pBreakItem ;
449 	delete pAutoKernItem ;
450 	delete pWLineItem;
451 	delete pTabItem;
452 	delete pSplitItem;
453 	delete pRegItem;
454 	delete pLineSpaceItem ;
455 	delete pLineNumItem  ;
456 	delete pKeepItem;
457 	delete pLRItem  ;
458 	delete pULItem  ;
459 	delete pBackItem;
460 	delete pAdjItem;
461 	delete pDescItem;
462 	delete pInetItem;
463 	delete pDropItem;
464 	delete pWeightItem;
465 	delete pULineItem;
466 	delete pOLineItem;
467 	delete pCharFmtItem  ;
468 	delete pShadItem;
469 	delete pPostItem;
470 	delete pNHyphItem;
471 	delete pLangItem;
472 	delete pKernItem;
473 	delete pFontSizeItem ;
474 	delete pFontItem;
475 	delete pBlinkItem;
476 	delete pEscItem;
477 	delete pCrossedOutItem;
478 	delete pContourItem  ;
479 	delete pCharColorItem;
480 	delete pCasemapItem  ;
481 	delete pBrushItem  ;
482 }
483 /* -----------------23.06.99 14:18-------------------
484 
485  --------------------------------------------------*/
486 sal_Bool 	SwSearchProperties_Impl::HasAttributes() const
487 {
488     for(sal_uInt32 i = 0; i < nArrLen; i++)
489 		if(pValueArr[i])
490 			return sal_True;
491 	return sal_False;
492 }
493 
494 /*-- 14.12.98 13:07:10    ---------------------------------------------------
495 
496   -----------------------------------------------------------------------*/
497 SwXTextSearch::SwXTextSearch() :
498 	pSearchProperties( new SwSearchProperties_Impl),
499 	pReplaceProperties( new SwSearchProperties_Impl),
500     m_pPropSet(aSwMapProvider.GetPropertySet(PROPERTY_MAP_TEXT_SEARCH)),
501 	bAll(sal_False),
502 	bWord(sal_False),
503 	bBack(sal_False),
504 	bExpr(sal_False),
505 	bCase(sal_False),
506 	bStyles(sal_False),
507 	bSimilarity(sal_False),
508 	bLevRelax(sal_False),
509 	nLevExchange(2),
510 	nLevAdd(2),
511 	nLevRemove(2),
512 	bIsValueSearch(sal_True)
513 {
514 }
515 /*-- 14.12.98 13:07:12    ---------------------------------------------------
516 
517   -----------------------------------------------------------------------*/
518 SwXTextSearch::~SwXTextSearch()
519 {
520 	delete pSearchProperties;
521 	delete pReplaceProperties;
522 }
523 /* -----------------------------10.03.00 18:02--------------------------------
524 
525  ---------------------------------------------------------------------------*/
526 const uno::Sequence< sal_Int8 > & SwXTextSearch::getUnoTunnelId()
527 {
528     static uno::Sequence< sal_Int8 > aSeq = ::CreateUnoTunnelId();
529 	return aSeq;
530 }
531 /* -----------------------------10.03.00 18:04--------------------------------
532 
533  ---------------------------------------------------------------------------*/
534 sal_Int64 SAL_CALL SwXTextSearch::getSomething( const uno::Sequence< sal_Int8 >& rId )
535 	throw(uno::RuntimeException)
536 {
537     if( rId.getLength() == 16
538         && 0 == rtl_compareMemory( getUnoTunnelId().getConstArray(),
539 										rId.getConstArray(), 16 ) )
540     {
541 		return sal::static_int_cast< sal_Int64 >( reinterpret_cast< sal_IntPtr >(this) );
542     }
543 	return 0;
544 }
545 /*-- 14.12.98 13:07:12---------------------------------------------------
546 
547   -----------------------------------------------------------------------*/
548 OUString SwXTextSearch::getSearchString(void) throw( uno::RuntimeException )
549 {
550 	vos::OGuard aGuard(Application::GetSolarMutex());
551 	return sSearchText;
552 }
553 /*-- 14.12.98 13:07:12---------------------------------------------------
554 
555   -----------------------------------------------------------------------*/
556 void SwXTextSearch::setSearchString(const OUString& rString)
557 										throw( uno::RuntimeException )
558 {
559 	vos::OGuard aGuard(Application::GetSolarMutex());
560 	sSearchText = String(rString);
561 }
562 /*-- 14.12.98 13:07:12---------------------------------------------------
563 
564   -----------------------------------------------------------------------*/
565 OUString SwXTextSearch::getReplaceString(void) throw( uno::RuntimeException )
566 {
567 	vos::OGuard aGuard(Application::GetSolarMutex());
568 	return sReplaceText;
569 }
570 /*-- 14.12.98 13:07:12---------------------------------------------------
571 
572   -----------------------------------------------------------------------*/
573 void SwXTextSearch::setReplaceString(const OUString& rReplaceString) throw( uno::RuntimeException )
574 {
575 	vos::OGuard aGuard(Application::GetSolarMutex());
576 	sReplaceText = String(rReplaceString);
577 }
578 /*-- 14.12.98 13:07:13---------------------------------------------------
579 
580   -----------------------------------------------------------------------*/
581 uno::Reference< beans::XPropertySetInfo >  SwXTextSearch::getPropertySetInfo(void) throw( uno::RuntimeException )
582 {
583     static uno::Reference< beans::XPropertySetInfo >  aRef = m_pPropSet->getPropertySetInfo();
584 	return aRef;
585 }
586 /*-- 14.12.98 13:07:13---------------------------------------------------
587 
588   -----------------------------------------------------------------------*/
589 void SwXTextSearch::setPropertyValue(const OUString& rPropertyName, const uno::Any& aValue)
590 	throw( beans::UnknownPropertyException, beans::PropertyVetoException,
591 		lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException )
592 {
593 	vos::OGuard aGuard(Application::GetSolarMutex());
594     const SfxItemPropertySimpleEntry*  pEntry = m_pPropSet->getPropertyMap()->getByName(rPropertyName);
595     if(pEntry)
596 	{
597         if ( pEntry->nFlags & beans::PropertyAttribute::READONLY)
598             throw beans::PropertyVetoException ( OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Property is read-only: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
599 		sal_Bool bVal = sal_False;
600 		if(aValue.getValueType() == ::getBooleanCppuType())
601 			bVal = *(sal_Bool*)aValue.getValue();
602         switch(pEntry->nWID)
603 		{
604 			case WID_SEARCH_ALL :			bAll 		= bVal; break;
605 			case WID_WORDS:					bWord 		= bVal; break;
606 			case WID_BACKWARDS :            bBack 		= bVal; break;
607 			case WID_REGULAR_EXPRESSION :   bExpr 		= bVal; break;
608 			case WID_CASE_SENSITIVE  :      bCase 		= bVal; break;
609 			//case WID_IN_SELECTION  :      bInSel 		= bVal; break;
610 			case WID_STYLES          :      bStyles 	= bVal; break;
611 			case WID_SIMILARITY      :      bSimilarity = bVal; break;
612 			case WID_SIMILARITY_RELAX:      bLevRelax 	= bVal; break;
613 			case WID_SIMILARITY_EXCHANGE:	aValue >>= nLevExchange; break;
614 			case WID_SIMILARITY_ADD:		aValue >>= nLevAdd; break;
615 			case WID_SIMILARITY_REMOVE :	aValue >>= nLevRemove;break;
616 		};
617 	}
618 	else
619         throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
620 }
621 /*-- 14.12.98 13:07:13---------------------------------------------------
622 
623   -----------------------------------------------------------------------*/
624 uno::Any SwXTextSearch::getPropertyValue(const OUString& rPropertyName) throw( beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
625 {
626 	vos::OGuard aGuard(Application::GetSolarMutex());
627 	uno::Any aRet;
628 
629     const SfxItemPropertySimpleEntry*  pEntry = m_pPropSet->getPropertyMap()->getByName(rPropertyName);
630 	sal_Bool bSet = sal_False;
631 	sal_Int16 nSet = 0;
632     if(pEntry)
633 	{
634         switch(pEntry->nWID)
635 		{
636 			case WID_SEARCH_ALL :			bSet = bAll; goto SET_BOOL;
637 			case WID_WORDS:					bSet = bWord; goto SET_BOOL;
638 			case WID_BACKWARDS :            bSet = bBack; goto SET_BOOL;
639 			case WID_REGULAR_EXPRESSION :   bSet = bExpr; goto SET_BOOL;
640 			case WID_CASE_SENSITIVE  :      bSet = bCase; goto SET_BOOL;
641 			//case WID_IN_SELECTION  :      bSet = bInSel; goto SET_BOOL;
642 			case WID_STYLES          :      bSet = bStyles; goto SET_BOOL;
643 			case WID_SIMILARITY      :      bSet = bSimilarity; goto SET_BOOL;
644 			case WID_SIMILARITY_RELAX:      bSet = bLevRelax;
645 SET_BOOL:
646 			aRet.setValue(&bSet, ::getBooleanCppuType());
647 			break;
648 			case WID_SIMILARITY_EXCHANGE:	nSet = nLevExchange; goto SET_UINT16;
649 			case WID_SIMILARITY_ADD:		nSet = nLevAdd; goto SET_UINT16;
650 			case WID_SIMILARITY_REMOVE :	nSet = nLevRemove;
651 SET_UINT16:
652 			aRet <<= nSet;
653 			break;
654 		};
655 	}
656 	else
657         throw beans::UnknownPropertyException(OUString ( RTL_CONSTASCII_USTRINGPARAM ( "Unknown property: " ) ) + rPropertyName, static_cast < cppu::OWeakObject * > ( this ) );
658 	return aRet;
659 }
660 /*-- 14.12.98 13:07:13---------------------------------------------------
661 
662   -----------------------------------------------------------------------*/
663 void SwXTextSearch::addPropertyChangeListener(const OUString& /*rPropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*xListener*/) throw(beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException )
664 {
665 	DBG_WARNING("not implemented");
666 }
667 /*-- 14.12.98 13:07:13---------------------------------------------------
668 
669   -----------------------------------------------------------------------*/
670 void SwXTextSearch::removePropertyChangeListener(const OUString& /*rPropertyName*/, const uno::Reference< beans::XPropertyChangeListener > & /*xListener*/) throw(beans::UnknownPropertyException, lang::WrappedTargetException,uno::RuntimeException )
671 {
672 	DBG_WARNING("not implemented");
673 }
674 /*-- 14.12.98 13:07:14---------------------------------------------------
675 
676   -----------------------------------------------------------------------*/
677 void SwXTextSearch::addVetoableChangeListener(const OUString& /*rPropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*xListener*/) throw(beans::UnknownPropertyException, lang::WrappedTargetException,uno::RuntimeException )
678 {
679 	DBG_WARNING("not implemented");
680 }
681 /*-- 14.12.98 13:07:14---------------------------------------------------
682 
683   -----------------------------------------------------------------------*/
684 void SwXTextSearch::removeVetoableChangeListener(const OUString& /*rPropertyName*/, const uno::Reference< beans::XVetoableChangeListener > & /*xListener*/) throw(beans::UnknownPropertyException, lang::WrappedTargetException,uno::RuntimeException )
685 {
686 	DBG_WARNING("not implemented");
687 }
688 /*-- 14.12.98 13:07:14---------------------------------------------------
689 
690   -----------------------------------------------------------------------*/
691 sal_Bool SwXTextSearch::getValueSearch(void) throw( uno::RuntimeException )
692 {
693 	vos::OGuard aGuard(Application::GetSolarMutex());
694 	return bIsValueSearch;
695 }
696 /*-- 14.12.98 13:07:15---------------------------------------------------
697 
698   -----------------------------------------------------------------------*/
699 void SwXTextSearch::setValueSearch(sal_Bool ValueSearch_) throw( uno::RuntimeException )
700 {
701 	vos::OGuard aGuard(Application::GetSolarMutex());
702 	bIsValueSearch = ValueSearch_;
703 }
704 /*-- 14.12.98 13:07:15---------------------------------------------------
705 
706   -----------------------------------------------------------------------*/
707 uno::Sequence< beans::PropertyValue > SwXTextSearch::getSearchAttributes(void) throw( uno::RuntimeException )
708 {
709 	return 	pSearchProperties->GetProperties();
710 }
711 /*-- 14.12.98 13:07:16---------------------------------------------------
712 
713   -----------------------------------------------------------------------*/
714 void SwXTextSearch::setSearchAttributes(const uno::Sequence< beans::PropertyValue >& rSearchAttribs)
715 	throw( beans::UnknownPropertyException, lang::IllegalArgumentException, uno::RuntimeException )
716 {
717 	pSearchProperties->SetProperties(rSearchAttribs);
718 }
719 /*-- 14.12.98 13:07:16---------------------------------------------------
720 
721   -----------------------------------------------------------------------*/
722 uno::Sequence< beans::PropertyValue > SwXTextSearch::getReplaceAttributes(void)
723 	throw( uno::RuntimeException )
724 {
725 	return pReplaceProperties->GetProperties();
726 }
727 /*-- 14.12.98 13:07:17---------------------------------------------------
728 
729   -----------------------------------------------------------------------*/
730 void SwXTextSearch::setReplaceAttributes(const uno::Sequence< beans::PropertyValue >& rReplaceAttribs)
731 	throw( beans::UnknownPropertyException, lang::IllegalArgumentException, uno::RuntimeException )
732 {
733 	pReplaceProperties->SetProperties(rReplaceAttribs);
734 }
735 /* -----------------23.06.99 14:13-------------------
736 
737  --------------------------------------------------*/
738 void	SwXTextSearch::FillSearchItemSet(SfxItemSet& rSet) const
739 {
740 	pSearchProperties->FillItemSet(rSet, bIsValueSearch);
741 }
742 /* -----------------23.06.99 14:14-------------------
743 
744  --------------------------------------------------*/
745 void	SwXTextSearch::FillReplaceItemSet(SfxItemSet& rSet) const
746 {
747 	pReplaceProperties->FillItemSet(rSet, bIsValueSearch);
748 }
749 /* -----------------23.06.99 14:17-------------------
750 
751  --------------------------------------------------*/
752 sal_Bool	SwXTextSearch::HasSearchAttributes() const
753 {
754 	return pSearchProperties->HasAttributes();
755 }
756 /* -----------------23.06.99 14:17-------------------
757 
758  --------------------------------------------------*/
759 sal_Bool	SwXTextSearch::HasReplaceAttributes() const
760 {
761 	return pReplaceProperties->HasAttributes();
762 }
763 /* -----------------------------19.04.00 14:43--------------------------------
764 
765  ---------------------------------------------------------------------------*/
766 OUString SwXTextSearch::getImplementationName(void) throw( uno::RuntimeException )
767 {
768 	return C2U("SwXTextSearch");
769 }
770 /* -----------------------------19.04.00 14:43--------------------------------
771 
772  ---------------------------------------------------------------------------*/
773 sal_Bool SwXTextSearch::supportsService(const OUString& rServiceName) throw( uno::RuntimeException )
774 {
775 	return C2U("com.sun.star.util.SearchDescriptor") == rServiceName ||
776 			C2U("com.sun.star.util.ReplaceDescriptor") == rServiceName;
777 }
778 /* -----------------------------19.04.00 14:43--------------------------------
779 
780  ---------------------------------------------------------------------------*/
781 uno::Sequence< OUString > SwXTextSearch::getSupportedServiceNames(void) throw( uno::RuntimeException )
782 {
783 	uno::Sequence< OUString > aRet(2);
784 	OUString* pArray = aRet.getArray();
785 	pArray[0] = C2U("com.sun.star.util.SearchDescriptor");
786 	pArray[1] = C2U("com.sun.star.util.ReplaceDescriptor");
787 	return aRet;
788 }
789 
790 void SwXTextSearch::FillSearchOptions( util::SearchOptions& rSearchOpt ) const
791 {
792 	if( bSimilarity )
793 	{
794 		rSearchOpt.algorithmType = util::SearchAlgorithms_APPROXIMATE;
795 		rSearchOpt.changedChars = nLevExchange;
796 		rSearchOpt.deletedChars = nLevRemove;
797 		rSearchOpt.insertedChars = nLevAdd;
798 		if( bLevRelax )
799 			rSearchOpt.searchFlag |= util::SearchFlags::LEV_RELAXED;
800 	}
801 	else if( bExpr )
802 		rSearchOpt.algorithmType = util::SearchAlgorithms_REGEXP;
803 	else
804 		rSearchOpt.algorithmType = util::SearchAlgorithms_ABSOLUTE;
805 
806 	rSearchOpt.Locale = SvxCreateLocale( GetAppLanguage() );
807 	rSearchOpt.searchString = sSearchText;
808 	rSearchOpt.replaceString = sReplaceText;
809 
810 	if( !bCase )
811 		rSearchOpt.transliterateFlags |= i18n::TransliterationModules_IGNORE_CASE;
812 	if( bWord )
813 		rSearchOpt.searchFlag |= util::SearchFlags::NORM_WORD_ONLY;
814 
815 //	bInSel: 1;  // wie geht	das?
816 //	TODO: pSearch->bStyles!
817 //		inSelection??
818 //	 	aSrchParam.SetSrchInSelection(TypeConversion::toBOOL(aVal));
819 }
820 
821 
822 
823