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: */
|