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