/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ #include #include "linguistic/misc.hxx" #include "sprophelp.hxx" #include "linguistic/lngprops.hxx" #include #include #include #include #include using namespace osl; using namespace com::sun::star; using namespace com::sun::star::beans; using namespace com::sun::star::lang; using namespace com::sun::star::uno; using namespace com::sun::star::linguistic2; using namespace linguistic; PropertyChgHelper::PropertyChgHelper( const Reference< XInterface > & rxSource, Reference< XPropertySet > &rxPropSet, const char *pPropNames[], sal_uInt16 nPropCount ) : aPropNames(nPropCount) , xMyEvtObj(rxSource) , aLngSvcEvtListeners(GetLinguMutex()) , xPropSet(rxPropSet) { OUString *pName = aPropNames.getArray(); for (sal_Int32 i = 0; i < nPropCount; ++i) { pName[i] = OUString::createFromAscii( pPropNames[i] ); } } PropertyChgHelper::PropertyChgHelper( const PropertyChgHelper &rHelper ) : aLngSvcEvtListeners (GetLinguMutex()) { xPropSet = rHelper.xPropSet; aPropNames = rHelper.aPropNames; AddAsPropListener(); xMyEvtObj = rHelper.xMyEvtObj; } PropertyChgHelper::~PropertyChgHelper() { } void PropertyChgHelper::AddAsPropListener() { if (xPropSet.is()) { sal_Int32 nLen = aPropNames.getLength(); const OUString *pPropName = aPropNames.getConstArray(); for (sal_Int32 i = 0; i < nLen; ++i) { if (pPropName[i].getLength()) xPropSet->addPropertyChangeListener( pPropName[i], this ); } } } void PropertyChgHelper::RemoveAsPropListener() { if (xPropSet.is()) { sal_Int32 nLen = aPropNames.getLength(); const OUString *pPropName = aPropNames.getConstArray(); for (sal_Int32 i = 0; i < nLen; ++i) { if (pPropName[i].getLength()) xPropSet->removePropertyChangeListener( pPropName[i], this ); } } } void PropertyChgHelper::LaunchEvent( const LinguServiceEvent &rEvt ) { cppu::OInterfaceIteratorHelper aIt( aLngSvcEvtListeners ); while (aIt.hasMoreElements()) { Reference< XLinguServiceEventListener > xRef( aIt.next(), UNO_QUERY ); if (xRef.is()) xRef->processLinguServiceEvent( rEvt ); } } void SAL_CALL PropertyChgHelper::disposing( const EventObject& rSource ) throw(RuntimeException) { MutexGuard aGuard( GetLinguMutex() ); if (rSource.Source == xPropSet) { RemoveAsPropListener(); xPropSet = NULL; aPropNames.realloc( 0 ); } } sal_Bool SAL_CALL PropertyChgHelper::addLinguServiceEventListener( const Reference< XLinguServiceEventListener >& rxListener ) throw(RuntimeException) { MutexGuard aGuard( GetLinguMutex() ); sal_Bool bRes = sal_False; if (rxListener.is()) { sal_Int32 nCount = aLngSvcEvtListeners.getLength(); bRes = aLngSvcEvtListeners.addInterface( rxListener ) != nCount; } return bRes; } sal_Bool SAL_CALL PropertyChgHelper::removeLinguServiceEventListener( const Reference< XLinguServiceEventListener >& rxListener ) throw(RuntimeException) { MutexGuard aGuard( GetLinguMutex() ); sal_Bool bRes = sal_False; if (rxListener.is()) { sal_Int32 nCount = aLngSvcEvtListeners.getLength(); bRes = aLngSvcEvtListeners.removeInterface( rxListener ) != nCount; } return bRes; } static const char *aSP[] = { UPN_IS_GERMAN_PRE_REFORM, UPN_IS_IGNORE_CONTROL_CHARACTERS, UPN_IS_USE_DICTIONARY_LIST, UPN_IS_SPELL_UPPER_CASE, UPN_IS_SPELL_WITH_DIGITS, UPN_IS_SPELL_CAPITALIZATION }; PropertyHelper_Spell::PropertyHelper_Spell( const Reference< XInterface > & rxSource, Reference< XPropertySet > &rxPropSet ) : PropertyChgHelper ( rxSource, rxPropSet, aSP, sizeof(aSP) / sizeof(aSP[0]) ) { SetDefault(); sal_Int32 nLen = GetPropNames().getLength(); if (rxPropSet.is() && nLen) { const OUString *pPropName = GetPropNames().getConstArray(); for (sal_Int32 i = 0; i < nLen; ++i) { sal_Bool *pbVal = NULL, *pbResVal = NULL; if (OUString( UPN_IS_GERMAN_PRE_REFORM ) == pPropName[i]) { pbVal = &bIsGermanPreReform; pbResVal = &bResIsGermanPreReform; } else if (OUString( UPN_IS_IGNORE_CONTROL_CHARACTERS ) == pPropName[i]) { pbVal = &bIsIgnoreControlCharacters; pbResVal = &bResIsIgnoreControlCharacters; } else if (OUString( UPN_IS_USE_DICTIONARY_LIST ) == pPropName[i]) { pbVal = &bIsUseDictionaryList; pbResVal = &bResIsUseDictionaryList; } else if (OUString( UPN_IS_SPELL_UPPER_CASE ) == pPropName[i]) { pbVal = &bIsSpellUpperCase; pbResVal = &bResIsSpellUpperCase; } else if (OUString( UPN_IS_SPELL_WITH_DIGITS ) == pPropName[i]) { pbVal = &bIsSpellWithDigits; pbResVal = &bResIsSpellWithDigits; } else if (OUString( UPN_IS_SPELL_CAPITALIZATION ) == pPropName[i]) { pbVal = &bIsSpellCapitalization; pbResVal = &bResIsSpellCapitalization; } if (pbVal && pbResVal) { rxPropSet->getPropertyValue( pPropName[i] ) >>= *pbVal; *pbResVal = *pbVal; } } } } PropertyHelper_Spell::~PropertyHelper_Spell() { } void PropertyHelper_Spell::SetDefault() { bResIsGermanPreReform = bIsGermanPreReform = sal_False; bResIsIgnoreControlCharacters = bIsIgnoreControlCharacters = sal_True; bResIsUseDictionaryList = bIsUseDictionaryList = sal_True; bResIsSpellUpperCase = bIsSpellUpperCase = sal_False; bResIsSpellWithDigits = bIsSpellWithDigits = sal_False; bResIsSpellCapitalization = bIsSpellCapitalization = sal_True; } void SAL_CALL PropertyHelper_Spell::propertyChange( const PropertyChangeEvent& rEvt ) throw(RuntimeException) { MutexGuard aGuard( GetLinguMutex() ); if (GetPropSet().is() && rEvt.Source == GetPropSet()) { sal_Int16 nLngSvcFlags = 0; sal_Bool bSCWA = sal_False, // SPELL_CORRECT_WORDS_AGAIN ? bSWWA = sal_False; // SPELL_WRONG_WORDS_AGAIN ? sal_Bool *pbVal = NULL; switch (rEvt.PropertyHandle) { case UPH_IS_IGNORE_CONTROL_CHARACTERS : { pbVal = &bIsIgnoreControlCharacters; break; } case UPH_IS_GERMAN_PRE_REFORM : { pbVal = &bIsGermanPreReform; bSCWA = bSWWA = sal_True; break; } case UPH_IS_USE_DICTIONARY_LIST : { pbVal = &bIsUseDictionaryList; bSCWA = bSWWA = sal_True; break; } case UPH_IS_SPELL_UPPER_CASE : { pbVal = &bIsSpellUpperCase; bSCWA = sal_False == *pbVal; // sal_False->sal_True change? bSWWA = !bSCWA; // sal_True->sal_False change? break; } case UPH_IS_SPELL_WITH_DIGITS : { pbVal = &bIsSpellWithDigits; bSCWA = sal_False == *pbVal; // sal_False->sal_True change? bSWWA = !bSCWA; // sal_True->sal_False change? break; } case UPH_IS_SPELL_CAPITALIZATION : { pbVal = &bIsSpellCapitalization; bSCWA = sal_False == *pbVal; // sal_False->sal_True change? bSWWA = !bSCWA; // sal_True->sal_False change? break; } default: OSL_FAIL( "unknown property" ); } if (pbVal) rEvt.NewValue >>= *pbVal; if (bSCWA) nLngSvcFlags |= LinguServiceEventFlags::SPELL_CORRECT_WORDS_AGAIN; if (bSWWA) nLngSvcFlags |= LinguServiceEventFlags::SPELL_WRONG_WORDS_AGAIN; if (nLngSvcFlags) { LinguServiceEvent aEvt( GetEvtObj(), nLngSvcFlags ); LaunchEvent( aEvt ); } } } void PropertyHelper_Spell::SetTmpPropVals( const PropertyValues &rPropVals ) { // set return value to default value unless there is an // explicitly supplied temporary value bResIsGermanPreReform = bIsGermanPreReform; bResIsIgnoreControlCharacters = bIsIgnoreControlCharacters; bResIsUseDictionaryList = bIsUseDictionaryList; bResIsSpellUpperCase = bIsSpellUpperCase; bResIsSpellWithDigits = bIsSpellWithDigits; bResIsSpellCapitalization = bIsSpellCapitalization; sal_Int32 nLen = rPropVals.getLength(); if (nLen) { const PropertyValue *pVal = rPropVals.getConstArray(); for (sal_Int32 i = 0; i < nLen; ++i) { sal_Bool *pbResVal = NULL; switch (pVal[i].Handle) { case UPH_IS_GERMAN_PRE_REFORM : pbResVal = &bResIsGermanPreReform; break; case UPH_IS_IGNORE_CONTROL_CHARACTERS : pbResVal = &bResIsIgnoreControlCharacters; break; case UPH_IS_USE_DICTIONARY_LIST : pbResVal = &bResIsUseDictionaryList; break; case UPH_IS_SPELL_UPPER_CASE : pbResVal = &bResIsSpellUpperCase; break; case UPH_IS_SPELL_WITH_DIGITS : pbResVal = &bResIsSpellWithDigits; break; case UPH_IS_SPELL_CAPITALIZATION : pbResVal = &bResIsSpellCapitalization; break; default: OSL_FAIL( "unknown property" ); } if (pbResVal) pVal[i].Value >>= *pbResVal; } } } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ alctiledrendering2 LibreOffice 核心代码仓库文档基金会
summaryrefslogtreecommitdiff
AgeCommit message (Expand)Author
2012-04-13extract ImpGetIntntlSep() into sbxconv.hxx and reuse itTakeshi Abe
2012-04-10String::CreateFromInt32->rtl::OUString::valueOfCaolán McNamara
2012-03-20remove ToDouble/ToFloatCaolán McNamara
2012-03-08these Links either shouldn't be links, or shouldn't existCaolán McNamara
2012-03-05Remove unused SbxMemoryStreamTor Lillqvist
2012-03-05Sprinkle more DISABLE_SCRIPTING ifdefsTor Lillqvist
2012-03-05Convert SbxFactory from SV_DECL_PTRARR_DEL to boost::ptr_vectorNoel Grandin
2012-02-23Get rid of CREATEVERSIONRESMGR[_NAME]Stephan Bergmann
2012-02-20Remove unused codePetr Vorel
2012-02-18Prefer equalsIgnoreAsciiCaseAsciiL(RTL_CONSTASCII_STRINGPARAM("..."))Takeshi Abe
2012-02-15WaE: moaning about unintialized variablesCaolán McNamara
2012-02-14remove sunpro 5.0 handlingThomas Arnhold
2012-01-29Removed unused define and externTakeshi Abe
2012-01-27SvDispatch class doesn't exist anymoreCaolán McNamara
2012-01-26WaE: possibly uninitializedCaolán McNamara
2012-01-26Deleting a null pointer is safeTakeshi Abe
2012-01-25tweak the ifdefs to clarify the unused SbxDecimal methodsCaolán McNamara
2012-01-24tweak treatment of '+/-' operators when dealing with Date typesNoel Power
2012-01-19Fix SvStream::operator>> problem that showed up with the Android gcc 4.4.3Tor Lillqvist
2012-01-18fdo#39428 Remove/audit SvStream operator>>/<<(long)Keith McRae
2012-01-17fix Date 'operation' Date foobarNoel Power
2012-01-15WaE: deleting object of abstract class type with non-virtual destructorDavid Tardon
2012-01-14SV_DECL_PTRARR_DEL->boost::ptr_vectorAugust Sodora
2012-01-13WaE: d shadows another dCaolán McNamara
2012-01-09restore special DATE handling code for SbxValue::ComputeNoel Power
2012-01-05Removed unnecessary tools includes.Marcel Metz
2011-12-21tweak for pre language-defect #77Caolán McNamara
2011-12-21disentangle Read/WriteByteString OUString variantsCaolán McNamara
2011-12-21bah, need to tweak for pre c++0xCaolán McNamara
2011-12-21disentangle Read/WriteByteString OUString variantsCaolán McNamara
2011-12-12German translationsNoel Grandin
2011-12-10Fix for fdo43460 Part III getLength to isEmptyOlivier Hallot
2011-12-09callcatcher: remove unused code post automation removalCaolán McNamara
2011-12-08childs -> childrenMichael T. Whiteley
2011-11-28Remove uses of OUString::setCharAtAugust Sodora
2011-11-28ByteString->rtl::OUStringToOStringCaolán McNamara
2011-11-27rmove include of pch header in basicNorbert Thiebaud
2011-11-23Changed sal/log.h -> sal/log.hxx, drop _S from C++ streaming log macros.Stephan Bergmann
2011-11-22New sal/log.h obsoletes osl/diagnose.h and tools/debug.hxx.Stephan Bergmann
2011-11-15Put back a method needed by Windows and reformat a bitFridrich Štrba
2011-11-15FDO#39446 [EasyHack] Bloat Removal. Removing uncallable code with callcatcherJulien Chaffraix
2011-11-06StaticIsEnabledBroadcasting can only be trueCaolán McNamara
2011-11-06callcatcher: update and remove some more unused methodsCaolán McNamara
2011-10-06WaE: unreachable codeTor Lillqvist
2011-10-06WaE: unreachable codeTor Lillqvist
2011-09-30add mode-lines to .m files and last round of merged files, etc.Caolán McNamara