LCOV - code coverage report
Current view: top level - linguistic/source - lngprophelp.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 204 378 54.0 %
Date: 2015-06-13 12:38:46 Functions: 39 60 65.0 %
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             : 
      21             : #include <tools/debug.hxx>
      22             : #include <sal/macros.h>
      23             : 
      24             : #include <com/sun/star/linguistic2/LinguServiceEvent.hpp>
      25             : #include <com/sun/star/linguistic2/LinguServiceEventFlags.hpp>
      26             : #include <com/sun/star/linguistic2/XLinguServiceEventListener.hpp>
      27             : #include <com/sun/star/beans/XPropertySet.hpp>
      28             : #include <osl/mutex.hxx>
      29             : 
      30             : #include <linguistic/misc.hxx>
      31             : #include <linguistic/lngprops.hxx>
      32             : 
      33             : #include <linguistic/lngprophelp.hxx>
      34             : 
      35             : using namespace osl;
      36             : using namespace com::sun::star;
      37             : using namespace com::sun::star::beans;
      38             : using namespace com::sun::star::lang;
      39             : using namespace com::sun::star::uno;
      40             : using namespace com::sun::star::linguistic2;
      41             : using namespace linguistic;
      42             : 
      43             : 
      44             : namespace linguistic
      45             : {
      46             : 
      47             : 
      48             : static const char *aCH[] =
      49             : {
      50             :     UPN_IS_IGNORE_CONTROL_CHARACTERS,
      51             :     UPN_IS_USE_DICTIONARY_LIST,
      52             : };
      53             : 
      54             : static const int nCHCount = sizeof(aCH) / sizeof(aCH[0]);
      55             : 
      56             : 
      57          32 : PropertyChgHelper::PropertyChgHelper(
      58             :         const Reference< XInterface > &rxSource,
      59             :         Reference< XLinguProperties > &rxPropSet,
      60             :         int nAllowedEvents ) :
      61             :     PropertyChgHelperBase(),
      62             :     aPropNames          (nCHCount),
      63             :     xMyEvtObj           (rxSource),
      64          32 :     aLngSvcEvtListeners (GetLinguMutex()),
      65             :     xPropSet            (rxPropSet),
      66          64 :     nEvtFlags           (nAllowedEvents)
      67             : {
      68          32 :     OUString *pName = aPropNames.getArray();
      69          96 :     for (sal_Int32 i = 0;  i < nCHCount;  ++i)
      70             :     {
      71          64 :         pName[i] = OUString::createFromAscii( aCH[i] );
      72             :     }
      73             : 
      74          32 :     SetDefaultValues();
      75          32 : }
      76             : 
      77          32 : PropertyChgHelper::~PropertyChgHelper()
      78             : {
      79          32 : }
      80             : 
      81             : 
      82          32 : void PropertyChgHelper::AddPropNames( const char *pNewNames[], sal_Int32 nCount )
      83             : {
      84          32 :     if (pNewNames && nCount)
      85             :     {
      86          32 :         sal_Int32 nLen = GetPropNames().getLength();
      87          32 :         GetPropNames().realloc( nLen + nCount );
      88          32 :         OUString *pName = GetPropNames().getArray();
      89         128 :         for (sal_Int32 i = 0;  i < nCount;  ++i)
      90             :         {
      91          96 :             pName[ nLen + i ] = OUString::createFromAscii( pNewNames[ i ] );
      92             : 
      93             :         }
      94             :     }
      95          32 : }
      96             : 
      97             : 
      98          64 : void PropertyChgHelper::SetDefaultValues()
      99             : {
     100          64 :     bResIsIgnoreControlCharacters   = bIsIgnoreControlCharacters    = true;
     101          64 :     bResIsUseDictionaryList         = bIsUseDictionaryList          = true;
     102          64 : }
     103             : 
     104             : 
     105          32 : void PropertyChgHelper::GetCurrentValues()
     106             : {
     107          32 :     sal_Int32 nLen = GetPropNames().getLength();
     108          32 :     if (GetPropSet().is() && nLen)
     109             :     {
     110          32 :         const OUString *pPropName = GetPropNames().getConstArray();
     111         192 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     112             :         {
     113         160 :             bool *pbVal     = NULL,
     114         160 :                  *pbResVal  = NULL;
     115             : 
     116         160 :             if ( pPropName[i] == UPN_IS_IGNORE_CONTROL_CHARACTERS )
     117             :             {
     118          32 :                 pbVal    = &bIsIgnoreControlCharacters;
     119          32 :                 pbResVal = &bResIsIgnoreControlCharacters;
     120             :             }
     121         128 :             else if ( pPropName[i] == UPN_IS_USE_DICTIONARY_LIST )
     122             :             {
     123          32 :                 pbVal    = &bIsUseDictionaryList;
     124          32 :                 pbResVal = &bResIsUseDictionaryList;
     125             :             }
     126             : 
     127         160 :             if (pbVal && pbResVal)
     128             :             {
     129          64 :                 GetPropSet()->getPropertyValue( pPropName[i] ) >>= *pbVal;
     130          64 :                 *pbResVal = *pbVal;
     131             :             }
     132             :         }
     133             :     }
     134          32 : }
     135             : 
     136             : 
     137    71077363 : void PropertyChgHelper::SetTmpPropVals( const PropertyValues &rPropVals )
     138             : {
     139             :     // return value is default value unless there is an explicitly supplied
     140             :     // temporary value
     141    71077363 :     bResIsIgnoreControlCharacters   = bIsIgnoreControlCharacters;
     142    71077363 :     bResIsUseDictionaryList         = bIsUseDictionaryList;
     143             : 
     144    71077363 :     sal_Int32 nLen = rPropVals.getLength();
     145    71077363 :     if (nLen)
     146             :     {
     147           0 :         const PropertyValue *pVal = rPropVals.getConstArray();
     148           0 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     149             :         {
     150           0 :             bool  *pbResVal = NULL;
     151           0 :             switch (pVal[i].Handle)
     152             :             {
     153             :                 case UPH_IS_IGNORE_CONTROL_CHARACTERS :
     154           0 :                         pbResVal = &bResIsIgnoreControlCharacters; break;
     155             :                 case UPH_IS_USE_DICTIONARY_LIST     :
     156           0 :                         pbResVal = &bResIsUseDictionaryList; break;
     157             :                 default:
     158             :                         ;
     159             :             }
     160           0 :             if (pbResVal)
     161           0 :                 pVal[i].Value >>= *pbResVal;
     162             :         }
     163             :     }
     164    71077363 : }
     165             : 
     166             : 
     167           0 : bool PropertyChgHelper::propertyChange_Impl( const PropertyChangeEvent& rEvt )
     168             : {
     169           0 :     bool bRes = false;
     170             : 
     171           0 :     if (GetPropSet().is()  &&  rEvt.Source == GetPropSet())
     172             :     {
     173           0 :         sal_Int16 nLngSvcFlags = (nEvtFlags & AE_HYPHENATOR) ?
     174           0 :                     LinguServiceEventFlags::HYPHENATE_AGAIN : 0;
     175           0 :         bool bSCWA = false, // SPELL_CORRECT_WORDS_AGAIN ?
     176           0 :              bSWWA = false; // SPELL_WRONG_WORDS_AGAIN ?
     177             : 
     178           0 :         bool  *pbVal = NULL;
     179           0 :         switch (rEvt.PropertyHandle)
     180             :         {
     181             :             case UPH_IS_IGNORE_CONTROL_CHARACTERS :
     182             :             {
     183           0 :                 pbVal = &bIsIgnoreControlCharacters;
     184           0 :                 nLngSvcFlags = 0;
     185           0 :                 break;
     186             :             }
     187             :             case UPH_IS_USE_DICTIONARY_LIST       :
     188             :             {
     189           0 :                 pbVal = &bIsUseDictionaryList;
     190           0 :                 bSCWA = bSWWA = true;
     191           0 :                 break;
     192             :             }
     193             :             default:
     194             :             {
     195           0 :                 bRes = false;
     196             :             }
     197             :         }
     198           0 :         if (pbVal)
     199           0 :             rEvt.NewValue >>= *pbVal;
     200             : 
     201           0 :         bRes = 0 != pbVal;  // sth changed?
     202           0 :         if (bRes)
     203             :         {
     204           0 :             bool bSpellEvts = (nEvtFlags & AE_SPELLCHECKER);
     205           0 :             if (bSCWA && bSpellEvts)
     206           0 :                 nLngSvcFlags |= LinguServiceEventFlags::SPELL_CORRECT_WORDS_AGAIN;
     207           0 :             if (bSWWA && bSpellEvts)
     208           0 :                 nLngSvcFlags |= LinguServiceEventFlags::SPELL_WRONG_WORDS_AGAIN;
     209           0 :             if (nLngSvcFlags)
     210             :             {
     211           0 :                 LinguServiceEvent aEvt( GetEvtObj(), nLngSvcFlags );
     212           0 :                 LaunchEvent( aEvt );
     213             :             }
     214             :         }
     215             :     }
     216             : 
     217           0 :     return bRes;
     218             : }
     219             : 
     220             : 
     221             : void SAL_CALL
     222           0 :     PropertyChgHelper::propertyChange( const PropertyChangeEvent& rEvt )
     223             :         throw(RuntimeException, std::exception)
     224             : {
     225           0 :     MutexGuard  aGuard( GetLinguMutex() );
     226           0 :     propertyChange_Impl( rEvt );
     227           0 : }
     228             : 
     229             : 
     230          32 : void PropertyChgHelper::AddAsPropListener()
     231             : {
     232          32 :     if (xPropSet.is())
     233             :     {
     234          32 :         sal_Int32 nLen = aPropNames.getLength();
     235          32 :         const OUString *pPropName = aPropNames.getConstArray();
     236         192 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     237             :         {
     238         160 :             if (!pPropName[i].isEmpty())
     239         160 :                 xPropSet->addPropertyChangeListener( pPropName[i], this );
     240             :         }
     241             :     }
     242          32 : }
     243             : 
     244          32 : void PropertyChgHelper::RemoveAsPropListener()
     245             : {
     246          32 :     if (xPropSet.is())
     247             :     {
     248          32 :         sal_Int32 nLen = aPropNames.getLength();
     249          32 :         const OUString *pPropName = aPropNames.getConstArray();
     250         192 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     251             :         {
     252         160 :             if (!pPropName[i].isEmpty())
     253         160 :                 xPropSet->removePropertyChangeListener( pPropName[i], this );
     254             :         }
     255             :     }
     256          32 : }
     257             : 
     258             : 
     259           0 : void PropertyChgHelper::LaunchEvent( const LinguServiceEvent &rEvt )
     260             : {
     261           0 :     cppu::OInterfaceIteratorHelper aIt( aLngSvcEvtListeners );
     262           0 :     while (aIt.hasMoreElements())
     263             :     {
     264           0 :         Reference< XLinguServiceEventListener > xRef( aIt.next(), UNO_QUERY );
     265           0 :         if (xRef.is())
     266           0 :             xRef->processLinguServiceEvent( rEvt );
     267           0 :     }
     268           0 : }
     269             : 
     270             : 
     271           0 : void SAL_CALL PropertyChgHelper::disposing( const EventObject& rSource )
     272             :         throw(RuntimeException, std::exception)
     273             : {
     274           0 :     MutexGuard  aGuard( GetLinguMutex() );
     275           0 :     if (rSource.Source == xPropSet)
     276             :     {
     277           0 :         RemoveAsPropListener();
     278           0 :         xPropSet = NULL;
     279           0 :         aPropNames.realloc( 0 );
     280           0 :     }
     281           0 : }
     282             : 
     283             : 
     284             : sal_Bool SAL_CALL
     285          32 :     PropertyChgHelper::addLinguServiceEventListener(
     286             :             const Reference< XLinguServiceEventListener >& rxListener )
     287             :         throw(RuntimeException, std::exception)
     288             : {
     289          32 :     MutexGuard  aGuard( GetLinguMutex() );
     290             : 
     291          32 :     bool bRes = false;
     292          32 :     if (rxListener.is())
     293             :     {
     294          32 :         sal_Int32   nCount = aLngSvcEvtListeners.getLength();
     295          32 :         bRes = aLngSvcEvtListeners.addInterface( rxListener ) != nCount;
     296             :     }
     297          32 :     return bRes;
     298             : }
     299             : 
     300             : 
     301             : sal_Bool SAL_CALL
     302           0 :     PropertyChgHelper::removeLinguServiceEventListener(
     303             :             const Reference< XLinguServiceEventListener >& rxListener )
     304             :         throw(RuntimeException, std::exception)
     305             : {
     306           0 :     MutexGuard  aGuard( GetLinguMutex() );
     307             : 
     308           0 :     bool bRes = false;
     309           0 :     if (rxListener.is())
     310             :     {
     311           0 :         sal_Int32   nCount = aLngSvcEvtListeners.getLength();
     312           0 :         bRes = aLngSvcEvtListeners.removeInterface( rxListener ) != nCount;
     313             :     }
     314           0 :     return bRes;
     315             : }
     316             : 
     317             : 
     318             : 
     319           0 : PropertyHelper_Thes::PropertyHelper_Thes(
     320             :         const Reference< XInterface > &rxSource,
     321             :         Reference< XLinguProperties > &rxPropSet ) :
     322           0 :     PropertyChgHelper   ( rxSource, rxPropSet, 0 )
     323             : {
     324           0 :     SetDefaultValues();
     325           0 :     GetCurrentValues();
     326           0 : }
     327             : 
     328             : 
     329           0 : PropertyHelper_Thes::~PropertyHelper_Thes()
     330             : {
     331           0 : }
     332             : 
     333             : 
     334             : void SAL_CALL
     335           0 :     PropertyHelper_Thes::propertyChange( const PropertyChangeEvent& rEvt )
     336             :         throw(RuntimeException, std::exception)
     337             : {
     338           0 :     MutexGuard  aGuard( GetLinguMutex() );
     339           0 :     PropertyChgHelper::propertyChange_Impl( rEvt );
     340           0 : }
     341             : 
     342             : 
     343             : 
     344             : // list of properties from the property set to be used
     345             : // and listened to
     346             : static const char *aSP[] =
     347             : {
     348             :     UPN_IS_SPELL_UPPER_CASE,
     349             :     UPN_IS_SPELL_WITH_DIGITS,
     350             :     UPN_IS_SPELL_CAPITALIZATION
     351             : };
     352             : 
     353             : 
     354          27 : PropertyHelper_Spell::PropertyHelper_Spell(
     355             :         const Reference< XInterface > & rxSource,
     356             :         Reference< XLinguProperties > &rxPropSet ) :
     357          27 :     PropertyChgHelper   ( rxSource, rxPropSet, AE_SPELLCHECKER )
     358             : {
     359          27 :     AddPropNames( aSP, sizeof(aSP) / sizeof(aSP[0]) );
     360          27 :     SetDefaultValues();
     361          27 :     GetCurrentValues();
     362             : 
     363          27 :     nResMaxNumberOfSuggestions = GetDefaultNumberOfSuggestions();
     364          27 : }
     365             : 
     366             : 
     367          54 : PropertyHelper_Spell::~PropertyHelper_Spell()
     368             : {
     369          54 : }
     370             : 
     371             : 
     372          27 : void PropertyHelper_Spell::SetDefaultValues()
     373             : {
     374          27 :     PropertyChgHelper::SetDefaultValues();
     375             : 
     376          27 :     bResIsSpellUpperCase        = bIsSpellUpperCase         = false;
     377          27 :     bResIsSpellWithDigits       = bIsSpellWithDigits        = false;
     378          27 :     bResIsSpellCapitalization   = bIsSpellCapitalization    = true;
     379          27 : }
     380             : 
     381             : 
     382          27 : void PropertyHelper_Spell::GetCurrentValues()
     383             : {
     384          27 :     PropertyChgHelper::GetCurrentValues();
     385             : 
     386          27 :     sal_Int32 nLen = GetPropNames().getLength();
     387          27 :     if (GetPropSet().is() && nLen)
     388             :     {
     389          27 :         const OUString *pPropName = GetPropNames().getConstArray();
     390         162 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     391             :         {
     392         135 :             bool *pbVal     = NULL,
     393         135 :                  *pbResVal  = NULL;
     394             : 
     395         135 :             if ( pPropName[i] == UPN_IS_SPELL_UPPER_CASE )
     396             :             {
     397          27 :                 pbVal    = &bIsSpellUpperCase;
     398          27 :                 pbResVal = &bResIsSpellUpperCase;
     399             :             }
     400         108 :             else if ( pPropName[i] == UPN_IS_SPELL_WITH_DIGITS )
     401             :             {
     402          27 :                 pbVal    = &bIsSpellWithDigits;
     403          27 :                 pbResVal = &bResIsSpellWithDigits;
     404             :             }
     405          81 :             else if ( pPropName[i] == UPN_IS_SPELL_CAPITALIZATION )
     406             :             {
     407          27 :                 pbVal    = &bIsSpellCapitalization;
     408          27 :                 pbResVal = &bResIsSpellCapitalization;
     409             :             }
     410             : 
     411         135 :             if (pbVal && pbResVal)
     412             :             {
     413          81 :                 GetPropSet()->getPropertyValue( pPropName[i] ) >>= *pbVal;
     414          81 :                 *pbResVal = *pbVal;
     415             :             }
     416             :         }
     417             :     }
     418          27 : }
     419             : 
     420             : 
     421           0 : bool PropertyHelper_Spell::propertyChange_Impl( const PropertyChangeEvent& rEvt )
     422             : {
     423           0 :     bool bRes = PropertyChgHelper::propertyChange_Impl( rEvt );
     424             : 
     425           0 :     if (!bRes  &&  GetPropSet().is()  &&  rEvt.Source == GetPropSet())
     426             :     {
     427           0 :         bool bSCWA = false, // SPELL_CORRECT_WORDS_AGAIN ?
     428           0 :              bSWWA = false; // SPELL_WRONG_WORDS_AGAIN ?
     429             : 
     430           0 :         bool *pbVal = NULL;
     431           0 :         switch (rEvt.PropertyHandle)
     432             :         {
     433             :             case UPH_IS_SPELL_UPPER_CASE          :
     434             :             {
     435           0 :                 pbVal = &bIsSpellUpperCase;
     436           0 :                 bSCWA = ! *pbVal;    // sal_False->sal_True change?
     437           0 :                 bSWWA = !bSCWA;             // sal_True->sal_False change?
     438           0 :                 break;
     439             :             }
     440             :             case UPH_IS_SPELL_WITH_DIGITS         :
     441             :             {
     442           0 :                 pbVal = &bIsSpellWithDigits;
     443           0 :                 bSCWA = ! *pbVal;    // sal_False->sal_True change?
     444           0 :                 bSWWA = !bSCWA;             // sal_True->sal_False change?
     445           0 :                 break;
     446             :             }
     447             :             case UPH_IS_SPELL_CAPITALIZATION      :
     448             :             {
     449           0 :                 pbVal = &bIsSpellCapitalization;
     450           0 :                 bSCWA = ! *pbVal;    // sal_False->sal_True change?
     451           0 :                 bSWWA = !bSCWA;             // sal_True->sal_False change?
     452           0 :                 break;
     453             :             }
     454             :             default:
     455             :                 DBG_ASSERT( false, "unknown property" );
     456             :         }
     457           0 :         if (pbVal)
     458           0 :             rEvt.NewValue >>= *pbVal;
     459             : 
     460           0 :         bRes = (pbVal != 0);
     461           0 :         if (bRes)
     462             :         {
     463           0 :             sal_Int16 nLngSvcFlags = 0;
     464           0 :             if (bSCWA)
     465           0 :                 nLngSvcFlags |= LinguServiceEventFlags::SPELL_CORRECT_WORDS_AGAIN;
     466           0 :             if (bSWWA)
     467           0 :                 nLngSvcFlags |= LinguServiceEventFlags::SPELL_WRONG_WORDS_AGAIN;
     468           0 :             if (nLngSvcFlags)
     469             :             {
     470           0 :                 LinguServiceEvent aEvt( GetEvtObj(), nLngSvcFlags );
     471           0 :                 LaunchEvent( aEvt );
     472             :             }
     473             :         }
     474             :     }
     475             : 
     476           0 :     return bRes;
     477             : }
     478             : 
     479             : 
     480             : void SAL_CALL
     481           0 :     PropertyHelper_Spell::propertyChange( const PropertyChangeEvent& rEvt )
     482             :         throw(RuntimeException, std::exception)
     483             : {
     484           0 :     MutexGuard  aGuard( GetLinguMutex() );
     485           0 :     propertyChange_Impl( rEvt );
     486           0 : }
     487             : 
     488             : 
     489    71072128 : void PropertyHelper_Spell::SetTmpPropVals( const PropertyValues &rPropVals )
     490             : {
     491    71072128 :     PropertyChgHelper::SetTmpPropVals( rPropVals );
     492             : 
     493             :     // return value is default value unless there is an explicitly supplied
     494             :     // temporary value
     495    71072128 :     nResMaxNumberOfSuggestions  = GetDefaultNumberOfSuggestions();
     496    71072128 :     bResIsSpellWithDigits       = bIsSpellWithDigits;
     497    71072128 :     bResIsSpellCapitalization   = bIsSpellCapitalization;
     498    71072128 :     bResIsSpellUpperCase        = bIsSpellUpperCase;
     499             : 
     500    71072128 :     sal_Int32 nLen = rPropVals.getLength();
     501    71072128 :     if (nLen)
     502             :     {
     503           0 :         const PropertyValue *pVal = rPropVals.getConstArray();
     504           0 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     505             :         {
     506           0 :             if ( pVal[i].Name == UPN_MAX_NUMBER_OF_SUGGESTIONS )
     507             :             {
     508           0 :                 pVal[i].Value >>= nResMaxNumberOfSuggestions;
     509             :             }
     510             :             else
     511             :             {
     512           0 :                 bool *pbResVal = NULL;
     513           0 :                 switch (pVal[i].Handle)
     514             :                 {
     515           0 :                     case UPH_IS_SPELL_UPPER_CASE     : pbResVal = &bResIsSpellUpperCase; break;
     516           0 :                     case UPH_IS_SPELL_WITH_DIGITS    : pbResVal = &bResIsSpellWithDigits; break;
     517           0 :                     case UPH_IS_SPELL_CAPITALIZATION : pbResVal = &bResIsSpellCapitalization; break;
     518             :                     default:
     519             :                         DBG_ASSERT( false, "unknown property" );
     520             :                 }
     521           0 :                 if (pbResVal)
     522           0 :                     pVal[i].Value >>= *pbResVal;
     523             :             }
     524             :         }
     525             :     }
     526    71072128 : }
     527             : 
     528             : static const char *aHP[] =
     529             : {
     530             :     UPN_HYPH_MIN_LEADING,
     531             :     UPN_HYPH_MIN_TRAILING,
     532             :     UPN_HYPH_MIN_WORD_LENGTH
     533             : };
     534             : 
     535             : 
     536           5 : PropertyHelper_Hyphen::PropertyHelper_Hyphen(
     537             :         const Reference< XInterface > & rxSource,
     538             :         Reference< XLinguProperties > &rxPropSet ) :
     539           5 :     PropertyChgHelper   ( rxSource, rxPropSet, AE_HYPHENATOR )
     540             : {
     541           5 :     AddPropNames( aHP, sizeof(aHP) / sizeof(aHP[0]) );
     542           5 :     SetDefaultValues();
     543           5 :     GetCurrentValues();
     544           5 : }
     545             : 
     546             : 
     547          10 : PropertyHelper_Hyphen::~PropertyHelper_Hyphen()
     548             : {
     549          10 : }
     550             : 
     551             : 
     552           5 : void PropertyHelper_Hyphen::SetDefaultValues()
     553             : {
     554           5 :     PropertyChgHelper::SetDefaultValues();
     555             : 
     556           5 :     nResHyphMinLeading      = nHyphMinLeading       = 2;
     557           5 :     nResHyphMinTrailing     = nHyphMinTrailing      = 2;
     558           5 :     nResHyphMinWordLength   = nHyphMinWordLength    = 0;
     559           5 : }
     560             : 
     561             : 
     562           5 : void PropertyHelper_Hyphen::GetCurrentValues()
     563             : {
     564           5 :     PropertyChgHelper::GetCurrentValues();
     565             : 
     566           5 :     sal_Int32 nLen = GetPropNames().getLength();
     567           5 :     if (GetPropSet().is() && nLen)
     568             :     {
     569           5 :         const OUString *pPropName = GetPropNames().getConstArray();
     570          30 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     571             :         {
     572          25 :             sal_Int16  *pnVal    = NULL,
     573          25 :                    *pnResVal = NULL;
     574             : 
     575          25 :             if ( pPropName[i] == UPN_HYPH_MIN_LEADING )
     576             :             {
     577           5 :                 pnVal    = &nHyphMinLeading;
     578           5 :                 pnResVal = &nResHyphMinLeading;
     579             :             }
     580          20 :             else if ( pPropName[i] == UPN_HYPH_MIN_TRAILING )
     581             :             {
     582           5 :                 pnVal    = &nHyphMinTrailing;
     583           5 :                 pnResVal = &nResHyphMinTrailing;
     584             :             }
     585          15 :             else if ( pPropName[i] == UPN_HYPH_MIN_WORD_LENGTH )
     586             :             {
     587           5 :                 pnVal    = &nHyphMinWordLength;
     588           5 :                 pnResVal = &nResHyphMinWordLength;
     589             :             }
     590             : 
     591          25 :             if (pnVal && pnResVal)
     592             :             {
     593          15 :                 GetPropSet()->getPropertyValue( pPropName[i] ) >>= *pnVal;
     594          15 :                 *pnResVal = *pnVal;
     595             :             }
     596             :         }
     597             :     }
     598           5 : }
     599             : 
     600             : 
     601           0 : bool PropertyHelper_Hyphen::propertyChange_Impl( const PropertyChangeEvent& rEvt )
     602             : {
     603           0 :     bool bRes = PropertyChgHelper::propertyChange_Impl( rEvt );
     604             : 
     605           0 :     if (!bRes  &&  GetPropSet().is()  &&  rEvt.Source == GetPropSet())
     606             :     {
     607           0 :         sal_Int16 nLngSvcFlags = LinguServiceEventFlags::HYPHENATE_AGAIN;
     608             : 
     609           0 :         sal_Int16   *pnVal = NULL;
     610           0 :         switch (rEvt.PropertyHandle)
     611             :         {
     612           0 :             case UPH_HYPH_MIN_LEADING     : pnVal = &nHyphMinLeading; break;
     613           0 :             case UPH_HYPH_MIN_TRAILING    : pnVal = &nHyphMinTrailing; break;
     614           0 :             case UPH_HYPH_MIN_WORD_LENGTH : pnVal = &nHyphMinWordLength; break;
     615             :             default:
     616             :                 DBG_ASSERT( false, "unknown property" );
     617             :         }
     618           0 :         if (pnVal)
     619           0 :             rEvt.NewValue >>= *pnVal;
     620             : 
     621           0 :         bRes = (pnVal != 0);
     622           0 :         if (bRes)
     623             :         {
     624           0 :             if (nLngSvcFlags)
     625             :             {
     626           0 :                 LinguServiceEvent aEvt( GetEvtObj(), nLngSvcFlags );
     627           0 :                 LaunchEvent( aEvt );
     628             :             }
     629             :         }
     630             :     }
     631             : 
     632           0 :     return bRes;
     633             : }
     634             : 
     635             : 
     636             : void SAL_CALL
     637           0 :     PropertyHelper_Hyphen::propertyChange( const PropertyChangeEvent& rEvt )
     638             :         throw(RuntimeException, std::exception)
     639             : {
     640           0 :     MutexGuard  aGuard( GetLinguMutex() );
     641           0 :     propertyChange_Impl( rEvt );
     642           0 : }
     643             : 
     644             : 
     645        5235 : void PropertyHelper_Hyphen::SetTmpPropVals( const PropertyValues &rPropVals )
     646             : {
     647        5235 :     PropertyChgHelper::SetTmpPropVals( rPropVals );
     648             : 
     649             :     // return value is default value unless there is an explicitly supplied
     650             :     // temporary value
     651        5235 :     nResHyphMinLeading      = nHyphMinLeading;
     652        5235 :     nResHyphMinTrailing     = nHyphMinTrailing;
     653        5235 :     nResHyphMinWordLength   = nHyphMinWordLength;
     654             : 
     655        5235 :     sal_Int32 nLen = rPropVals.getLength();
     656             : 
     657        5235 :     if (nLen)
     658             :     {
     659           0 :         const PropertyValue *pVal = rPropVals.getConstArray();
     660           0 :         for (sal_Int32 i = 0;  i < nLen;  ++i)
     661             :         {
     662           0 :             sal_Int16 *pnResVal = NULL;
     663             : 
     664           0 :             if ( pVal[i].Name == UPN_HYPH_MIN_LEADING )
     665           0 :                 pnResVal = &nResHyphMinLeading;
     666           0 :             else if ( pVal[i].Name == UPN_HYPH_MIN_TRAILING )
     667           0 :                 pnResVal = &nResHyphMinTrailing;
     668           0 :             else if ( pVal[i].Name == UPN_HYPH_MIN_WORD_LENGTH )
     669           0 :                 pnResVal = &nResHyphMinWordLength;
     670             : 
     671             :             DBG_ASSERT( pnResVal, "unknown property" );
     672             : 
     673           0 :             if (pnResVal)
     674           0 :                 pVal[i].Value >>= *pnResVal;
     675             :         }
     676             :     }
     677        5235 : }
     678             : 
     679           0 : PropertyHelper_Thesaurus::PropertyHelper_Thesaurus(
     680             :             const ::com::sun::star::uno::Reference<
     681             :                 ::com::sun::star::uno::XInterface > &rxSource,
     682             :             ::com::sun::star::uno::Reference<
     683           0 :                 ::com::sun::star::linguistic2::XLinguProperties > &rxPropSet )
     684             : {
     685           0 :     pInst = new PropertyHelper_Thes( rxSource, rxPropSet );
     686           0 :     xPropHelper = pInst;
     687           0 : }
     688             : 
     689           0 : PropertyHelper_Thesaurus::~PropertyHelper_Thesaurus()
     690             : {
     691           0 : }
     692             : 
     693           0 : void PropertyHelper_Thesaurus::AddAsPropListener()
     694             : {
     695           0 :     pInst->AddAsPropListener();
     696           0 : }
     697             : 
     698           0 : void PropertyHelper_Thesaurus::RemoveAsPropListener()
     699             : {
     700           0 :     pInst->RemoveAsPropListener();
     701           0 : }
     702             : 
     703           0 : void PropertyHelper_Thesaurus::SetTmpPropVals( const com::sun::star::beans::PropertyValues &rPropVals )
     704             : {
     705           0 :     pInst->SetTmpPropVals( rPropVals );
     706           0 : }
     707             : 
     708           5 : PropertyHelper_Hyphenation::PropertyHelper_Hyphenation(
     709             :             const ::com::sun::star::uno::Reference<
     710             :                 ::com::sun::star::uno::XInterface > &rxSource,
     711             :             ::com::sun::star::uno::Reference<
     712           5 :                 ::com::sun::star::linguistic2::XLinguProperties > &rxPropSet)
     713             : {
     714           5 :     pInst = new PropertyHelper_Hyphen( rxSource, rxPropSet );
     715           5 :     xPropHelper = pInst;
     716           5 : }
     717             : 
     718           5 : PropertyHelper_Hyphenation::~PropertyHelper_Hyphenation()
     719             : {
     720           5 : }
     721             : 
     722           5 : void PropertyHelper_Hyphenation::AddAsPropListener()
     723             : {
     724           5 :     pInst->AddAsPropListener();
     725           5 : }
     726             : 
     727           5 : void PropertyHelper_Hyphenation::RemoveAsPropListener()
     728             : {
     729           5 :     pInst->RemoveAsPropListener();
     730           5 : }
     731             : 
     732        5235 : void PropertyHelper_Hyphenation::SetTmpPropVals( const com::sun::star::beans::PropertyValues &rPropVals )
     733             : {
     734        5235 :     pInst->SetTmpPropVals( rPropVals );
     735        5235 : }
     736             : 
     737        5235 : sal_Int16 PropertyHelper_Hyphenation::GetMinLeading() const
     738             : {
     739        5235 :     return pInst->GetMinLeading();
     740             : }
     741             : 
     742        5235 : sal_Int16 PropertyHelper_Hyphenation::GetMinTrailing() const
     743             : {
     744        5235 :     return pInst->GetMinTrailing();
     745             : }
     746             : 
     747        5235 : sal_Int16 PropertyHelper_Hyphenation::GetMinWordLength() const
     748             : {
     749        5235 :     return pInst->GetMinWordLength();
     750             : }
     751             : 
     752           5 : bool PropertyHelper_Hyphenation::addLinguServiceEventListener(
     753             :                 const ::com::sun::star::uno::Reference<
     754             :                     ::com::sun::star::linguistic2::XLinguServiceEventListener >& rxListener )
     755             :             throw(::com::sun::star::uno::RuntimeException)
     756             : {
     757           5 :     return pInst->addLinguServiceEventListener( rxListener );
     758             : }
     759             : 
     760           0 : bool PropertyHelper_Hyphenation::removeLinguServiceEventListener(
     761             :                 const ::com::sun::star::uno::Reference<
     762             :                     ::com::sun::star::linguistic2::XLinguServiceEventListener >& rxListener )
     763             :             throw(::com::sun::star::uno::RuntimeException)
     764             : {
     765           0 :     return pInst->removeLinguServiceEventListener( rxListener );
     766             : }
     767             : 
     768          27 : PropertyHelper_Spelling::PropertyHelper_Spelling(
     769             :             const ::com::sun::star::uno::Reference<
     770             :                 ::com::sun::star::uno::XInterface > &rxSource,
     771             :             ::com::sun::star::uno::Reference<
     772          27 :                 ::com::sun::star::linguistic2::XLinguProperties > &rxPropSet )
     773             : {
     774          27 :     pInst = new PropertyHelper_Spell( rxSource, rxPropSet );
     775          27 :     xPropHelper = pInst;
     776          27 : }
     777             : 
     778          27 : PropertyHelper_Spelling::~PropertyHelper_Spelling()
     779             : {
     780          27 : }
     781             : 
     782          27 : void PropertyHelper_Spelling::AddAsPropListener()
     783             : {
     784          27 :     pInst->AddAsPropListener();
     785          27 : }
     786             : 
     787          27 : void PropertyHelper_Spelling::RemoveAsPropListener()
     788             : {
     789          27 :     pInst->RemoveAsPropListener();
     790          27 : }
     791             : 
     792    71072128 : void PropertyHelper_Spelling::SetTmpPropVals( const com::sun::star::beans::PropertyValues &rPropVals )
     793             : {
     794    71072128 :     pInst->SetTmpPropVals( rPropVals );
     795    71072128 : }
     796             : 
     797    71070576 : bool PropertyHelper_Spelling::IsSpellUpperCase() const
     798             : {
     799    71070576 :     return pInst->IsSpellUpperCase();
     800             : }
     801             : 
     802    71070576 : bool PropertyHelper_Spelling::IsSpellWithDigits() const
     803             : {
     804    71070576 :     return pInst->IsSpellWithDigits();
     805             : }
     806             : 
     807    71065185 : bool PropertyHelper_Spelling::IsSpellCapitalization() const
     808             : {
     809    71065185 :     return pInst->IsSpellCapitalization();
     810             : }
     811             : 
     812          27 : bool PropertyHelper_Spelling::addLinguServiceEventListener(
     813             :                 const ::com::sun::star::uno::Reference<
     814             :                     ::com::sun::star::linguistic2::XLinguServiceEventListener >& rxListener )
     815             :             throw(::com::sun::star::uno::RuntimeException)
     816             : {
     817          27 :     return pInst->addLinguServiceEventListener( rxListener );
     818             : }
     819             : 
     820           0 : bool PropertyHelper_Spelling::removeLinguServiceEventListener(
     821             :                 const ::com::sun::star::uno::Reference<
     822             :                     ::com::sun::star::linguistic2::XLinguServiceEventListener >& rxListener )
     823             :             throw(::com::sun::star::uno::RuntimeException)
     824             : {
     825           0 :     return pInst->removeLinguServiceEventListener( rxListener );
     826             : }
     827             : 
     828             : }   // namespace linguistic
     829             : 
     830             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11