LCOV - code coverage report
Current view: top level - sw/source/core/unocore - unosrch.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 115 476 24.2 %
Date: 2014-11-03 Functions: 21 38 55.3 %
Legend: Lines: hit not hit

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

Generated by: LCOV version 1.10