1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svtools.hxx"
26 
27 #include <svtools/accessibilityoptions.hxx>
28 #include "configitems/accessibilityoptions_const.hxx"
29 
30 #include <unotools/configmgr.hxx>
31 #include <tools/debug.hxx>
32 #include <com/sun/star/uno/Any.hxx>
33 #include <com/sun/star/uno/Sequence.hxx>
34 
35 #ifndef _COM_SUN_STAR_BEANS_XPROPERTYSET_HPP_
36 #include <com/sun/star/beans/XPropertySet.hpp>
37 #endif
38 #ifndef _COM_SUN_STAR_CONTAINER_XNAMEACCESS_HPP_
39 #include <com/sun/star/container/XNameAccess.hpp>
40 #endif
41 #ifndef _COMPHELPER_CONFIGURATIONHELPER_HXX_
42 #include <comphelper/configurationhelper.hxx>
43 #endif
44 #ifndef _UNOTOOLS_PROCESSFACTORY_HXX_
45 #include <unotools/processfactory.hxx>
46 #endif
47 #ifndef _SVT_LOGHELPER_HXX_
48 #include <unotools/loghelper.hxx>
49 #endif
50 
51 #include <svl/smplhint.hxx>
52 
53 #include <vcl/settings.hxx>
54 #include <vcl/svapp.hxx>
55 #include <rtl/instance.hxx>
56 
57 #include <itemholder2.hxx>
58 
59 using namespace utl;
60 using namespace rtl;
61 using namespace com::sun::star::uno;
62 namespace css = com::sun::star;
63 
64 #define HELP_TIP_TIMEOUT 0xffff     // max. timeout setting to pretend a non-timeout
65 
66 
67 // class SvtAccessibilityOptions_Impl ---------------------------------------------
68 
69 class SvtAccessibilityOptions_Impl
70 {
71 private:
72 	css::uno::Reference< css::container::XNameAccess > m_xCfg;
73 	sal_Bool										   bIsModified;
74 
75 public:
76 	SvtAccessibilityOptions_Impl();
77 	~SvtAccessibilityOptions_Impl();
78 
79 	void		SetVCLSettings();
80 	sal_Bool	GetAutoDetectSystemHC();
81 	sal_Bool	GetIsForPagePreviews() const;
82 	sal_Bool	GetIsHelpTipsDisappear() const;
83 	sal_Bool	GetIsAllowAnimatedGraphics() const;
84 	sal_Bool	GetIsAllowAnimatedText() const;
85 	sal_Bool	GetIsAutomaticFontColor() const;
86 	sal_Bool	GetIsSystemFont() const;
87 	sal_Int16	GetHelpTipSeconds() const;
88 	sal_Bool	IsSelectionInReadonly() const;
89     sal_Int16   GetEdgeBlending() const;
90     sal_Int16   GetListBoxMaximumLineCount() const;
91     sal_Int16   GetColorValueSetColumnCount() const;
92 
93 	void		SetAutoDetectSystemHC(sal_Bool bSet);
94 	void		SetIsForPagePreviews(sal_Bool bSet);
95 	void		SetIsHelpTipsDisappear(sal_Bool bSet);
96 	void		SetIsAllowAnimatedGraphics(sal_Bool bSet);
97 	void		SetIsAllowAnimatedText(sal_Bool bSet);
98 	void		SetIsAutomaticFontColor(sal_Bool bSet);
99 	void		SetIsSystemFont(sal_Bool bSet);
100 	void		SetHelpTipSeconds(sal_Int16 nSet);
101 	void		SetSelectionInReadonly(sal_Bool bSet);
102     void        SetEdgeBlending(sal_Int16 nSet);
103     void        SetListBoxMaximumLineCount(sal_Int16 nSet);
104     void        SetColorValueSetColumnCount(sal_Int16 nSet);
105 
106 	sal_Bool	IsModified() const { return bIsModified; };
107 };
108 
109 // initialization of static members --------------------------------------
110 
111 SvtAccessibilityOptions_Impl* volatile 	SvtAccessibilityOptions::sm_pSingleImplConfig =NULL;
112 sal_Int32					  volatile 	SvtAccessibilityOptions::sm_nAccessibilityRefCount(0);
113 
114 namespace
115 {
116 	struct SingletonMutex
117 		: public rtl::Static< ::osl::Mutex, SingletonMutex > {};
118 }
119 
120 // -----------------------------------------------------------------------
121 // class SvtAccessibilityOptions_Impl ---------------------------------------------
122 
123 SvtAccessibilityOptions_Impl::SvtAccessibilityOptions_Impl()
124 {
125 	try
126 	{
127 		m_xCfg = css::uno::Reference< css::container::XNameAccess >(
128 			::comphelper::ConfigurationHelper::openConfig(
129 			utl::getProcessServiceFactory(),
130 			s_sAccessibility,
131 			::comphelper::ConfigurationHelper::E_STANDARD),
132 			css::uno::UNO_QUERY);
133 
134 		bIsModified = sal_False;
135 	}
136 	catch(const css::uno::Exception& ex)
137 	{
138 		m_xCfg.clear();
139 		LogHelper::logIt(ex);
140 	}
141 }
142 
143 SvtAccessibilityOptions_Impl::~SvtAccessibilityOptions_Impl()
144 {
145 }
146 
147 // -----------------------------------------------------------------------
148 sal_Bool SvtAccessibilityOptions_Impl::GetAutoDetectSystemHC()
149 {
150 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
151 	sal_Bool										bRet = sal_True;
152 
153 	try
154 	{
155 		if(xNode.is())
156 			xNode->getPropertyValue(s_sAutoDetectSystemHC) >>= bRet;
157 	}
158 	catch(const css::uno::Exception& ex)
159 	{
160 		LogHelper::logIt(ex);
161 	}
162 
163 	return bRet;
164 }
165 
166 sal_Bool SvtAccessibilityOptions_Impl::GetIsForPagePreviews() const
167 {
168 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
169 	sal_Bool										bRet = sal_True;
170 
171 	try
172 	{
173 		if(xNode.is())
174 			xNode->getPropertyValue(s_sIsForPagePreviews) >>= bRet;
175 	}
176 	catch(const css::uno::Exception& ex)
177 	{
178 		LogHelper::logIt(ex);
179 	}
180 	return bRet;
181 }
182 
183 sal_Bool SvtAccessibilityOptions_Impl::GetIsHelpTipsDisappear() const
184 {
185 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
186 	sal_Bool										bRet = sal_True;
187 
188 	try
189 	{
190 		if(xNode.is())
191 			xNode->getPropertyValue(s_sIsHelpTipsDisappear) >>= bRet;
192 	}
193 	catch(const css::uno::Exception& ex)
194 	{
195 		LogHelper::logIt(ex);
196 	}
197 
198 	return bRet;
199 }
200 
201 sal_Bool SvtAccessibilityOptions_Impl::GetIsAllowAnimatedGraphics() const
202 {
203 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
204 	sal_Bool										bRet = sal_True;
205 
206 	try
207 	{
208 		if(xNode.is())
209 			xNode->getPropertyValue(s_sIsAllowAnimatedGraphics) >>= bRet;
210 	}
211 	catch(const css::uno::Exception& ex)
212 	{
213 		LogHelper::logIt(ex);
214 	}
215 
216 	return bRet;
217 }
218 
219 sal_Bool SvtAccessibilityOptions_Impl::GetIsAllowAnimatedText() const
220 {
221 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
222 	sal_Bool										bRet = sal_True;
223 
224 	try
225 	{
226 		if(xNode.is())
227 			xNode->getPropertyValue(s_sIsAllowAnimatedText) >>= bRet;
228 	}
229 	catch(const css::uno::Exception& ex)
230 	{
231 		LogHelper::logIt(ex);
232 	}
233 
234 	return bRet;
235 }
236 
237 sal_Bool SvtAccessibilityOptions_Impl::GetIsAutomaticFontColor() const
238 {
239 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
240 	sal_Bool										bRet = sal_False;
241 
242 	try
243 	{
244 		if(xNode.is())
245 			xNode->getPropertyValue(s_sIsAutomaticFontColor) >>= bRet;
246 	}
247 	catch(const css::uno::Exception& ex)
248 	{
249 		LogHelper::logIt(ex);
250 	}
251 
252 	return bRet;
253 }
254 
255 sal_Bool SvtAccessibilityOptions_Impl::GetIsSystemFont() const
256 {
257 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
258 	sal_Bool										bRet = sal_True;
259 
260 	try
261 	{
262 		if(xNode.is())
263 			xNode->getPropertyValue(s_sIsSystemFont) >>= bRet;
264 	}
265 	catch(const css::uno::Exception& ex)
266 	{
267 		LogHelper::logIt(ex);
268 	}
269 
270 	return bRet;
271 }
272 
273 sal_Int16 SvtAccessibilityOptions_Impl::GetHelpTipSeconds() const
274 {
275 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
276 	sal_Int16										nRet = 4;
277 
278 	try
279 	{
280 		if(xNode.is())
281 			xNode->getPropertyValue(s_sHelpTipSeconds) >>= nRet;
282 	}
283 	catch(const css::uno::Exception& ex)
284 	{
285 		LogHelper::logIt(ex);
286 	}
287 
288 	return nRet;
289 }
290 
291 sal_Bool SvtAccessibilityOptions_Impl::IsSelectionInReadonly() const
292 {
293 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
294 	sal_Bool										bRet = sal_False;
295 
296 	try
297 	{
298 		if(xNode.is())
299 			xNode->getPropertyValue(s_sIsSelectionInReadonly) >>= bRet;
300 	}
301 	catch(const css::uno::Exception& ex)
302 	{
303 		LogHelper::logIt(ex);
304 	}
305 
306 	return bRet;
307 }
308 
309 sal_Int16 SvtAccessibilityOptions_Impl::GetEdgeBlending() const
310 {
311     css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
312     sal_Int16 nRet = 35;
313 
314     try
315     {
316         if(xNode.is())
317             xNode->getPropertyValue(s_sEdgeBlending) >>= nRet;
318     }
319     catch(const css::uno::Exception& ex)
320     {
321         LogHelper::logIt(ex);
322     }
323 
324     return nRet;
325 }
326 
327 sal_Int16 SvtAccessibilityOptions_Impl::GetListBoxMaximumLineCount() const
328 {
329     css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
330     sal_Int16 nRet = 25;
331 
332     try
333     {
334         if(xNode.is())
335             xNode->getPropertyValue(s_sListBoxMaximumLineCount) >>= nRet;
336     }
337     catch(const css::uno::Exception& ex)
338     {
339         LogHelper::logIt(ex);
340     }
341 
342     return nRet;
343 }
344 
345 sal_Int16 SvtAccessibilityOptions_Impl::GetColorValueSetColumnCount() const
346 {
347     css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
348     sal_Int16 nRet = 12;
349 
350     try
351     {
352         if(xNode.is())
353             xNode->getPropertyValue(s_sColorValueSetColumnCount) >>= nRet;
354     }
355     catch(const css::uno::Exception& ex)
356     {
357         LogHelper::logIt(ex);
358     }
359 
360     return nRet;
361 }
362 
363 void SvtAccessibilityOptions_Impl::SetAutoDetectSystemHC(sal_Bool bSet)
364 {
365 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
366 
367 	try
368 	{
369 		if(xNode.is() && xNode->getPropertyValue(s_sAutoDetectSystemHC)!=bSet)
370 		{
371 			xNode->setPropertyValue(s_sAutoDetectSystemHC, css::uno::makeAny(bSet));
372 			::comphelper::ConfigurationHelper::flush(m_xCfg);
373 
374 			bIsModified = sal_True;
375 		}
376 	}
377 	catch(const css::uno::Exception& ex)
378 	{
379 		LogHelper::logIt(ex);
380 	}
381 }
382 
383 void SvtAccessibilityOptions_Impl::SetIsForPagePreviews(sal_Bool bSet)
384 {
385 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
386 
387 	try
388 	{
389 		if(xNode.is() && xNode->getPropertyValue(s_sIsForPagePreviews)!=bSet)
390 		{
391 			xNode->setPropertyValue(s_sIsForPagePreviews, css::uno::makeAny(bSet));
392 			::comphelper::ConfigurationHelper::flush(m_xCfg);
393 
394 			bIsModified = sal_True;
395 		}
396 	}
397 	catch(const css::uno::Exception& ex)
398 	{
399 		LogHelper::logIt(ex);
400 	}
401 }
402 
403 void SvtAccessibilityOptions_Impl::SetIsHelpTipsDisappear(sal_Bool bSet)
404 {
405 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
406 
407 	try
408 	{
409 		if(xNode.is() && xNode->getPropertyValue(s_sIsHelpTipsDisappear)!=bSet)
410 		{
411 			xNode->setPropertyValue(s_sIsHelpTipsDisappear, css::uno::makeAny(bSet));
412 			::comphelper::ConfigurationHelper::flush(m_xCfg);
413 
414 			bIsModified = sal_True;
415 		}
416 	}
417 	catch(const css::uno::Exception& ex)
418 	{
419 		LogHelper::logIt(ex);
420 	}
421 }
422 
423 void SvtAccessibilityOptions_Impl::SetIsAllowAnimatedGraphics(sal_Bool bSet)
424 {
425 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
426 
427 	try
428 	{
429 		if(xNode.is() && xNode->getPropertyValue(s_sIsAllowAnimatedGraphics)!=bSet)
430 		{
431 			xNode->setPropertyValue(s_sIsAllowAnimatedGraphics, css::uno::makeAny(bSet));
432 			::comphelper::ConfigurationHelper::flush(m_xCfg);
433 
434 			bIsModified = sal_True;
435 		}
436 	}
437 	catch(const css::uno::Exception& ex)
438 	{
439 		LogHelper::logIt(ex);
440 	}
441 }
442 
443 void SvtAccessibilityOptions_Impl::SetIsAllowAnimatedText(sal_Bool bSet)
444 {
445 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
446 
447 	try
448 	{
449 		if(xNode.is() && xNode->getPropertyValue(s_sIsAllowAnimatedText)!=bSet)
450 		{
451 			xNode->setPropertyValue(s_sIsAllowAnimatedText, css::uno::makeAny(bSet));
452 			::comphelper::ConfigurationHelper::flush(m_xCfg);
453 
454 			bIsModified = sal_True;
455 		}
456 	}
457 	catch(const css::uno::Exception& ex)
458 	{
459 		LogHelper::logIt(ex);
460 	}
461 }
462 
463 void SvtAccessibilityOptions_Impl::SetIsAutomaticFontColor(sal_Bool bSet)
464 {
465 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
466 
467 	try
468 	{
469 		if(xNode.is() && xNode->getPropertyValue(s_sIsAutomaticFontColor)!=bSet)
470 		{
471 			xNode->setPropertyValue(s_sIsAutomaticFontColor, css::uno::makeAny(bSet));
472 			::comphelper::ConfigurationHelper::flush(m_xCfg);
473 
474 			bIsModified = sal_True;
475 		}
476 	}
477 	catch(const css::uno::Exception& ex)
478 	{
479 		LogHelper::logIt(ex);
480 	}
481 }
482 
483 void SvtAccessibilityOptions_Impl::SetIsSystemFont(sal_Bool bSet)
484 {
485 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
486 
487 	try
488 	{
489 		if(xNode.is() && xNode->getPropertyValue(s_sIsSystemFont)!=bSet)
490 		{
491 			xNode->setPropertyValue(s_sIsSystemFont, css::uno::makeAny(bSet));
492 			::comphelper::ConfigurationHelper::flush(m_xCfg);
493 
494 			bIsModified = sal_True;
495 		}
496 	}
497 	catch(const css::uno::Exception& ex)
498 	{
499 		LogHelper::logIt(ex);
500 	}
501 }
502 
503 void SvtAccessibilityOptions_Impl::SetHelpTipSeconds(sal_Int16 nSet)
504 {
505 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
506 
507 	try
508 	{
509 		if(xNode.is() && xNode->getPropertyValue(s_sHelpTipSeconds)!=nSet)
510 		{
511 			xNode->setPropertyValue(s_sHelpTipSeconds, css::uno::makeAny(nSet));
512 			::comphelper::ConfigurationHelper::flush(m_xCfg);
513 
514 			bIsModified = sal_True;
515 		}
516 	}
517 	catch(const css::uno::Exception& ex)
518 	{
519 		LogHelper::logIt(ex);
520 	}
521 }
522 
523 void SvtAccessibilityOptions_Impl::SetSelectionInReadonly(sal_Bool bSet)
524 {
525 	css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
526 
527 	try
528 	{
529 		if(xNode.is() && xNode->getPropertyValue(s_sIsSelectionInReadonly)!=bSet)
530 		{
531 			xNode->setPropertyValue(s_sIsSelectionInReadonly, css::uno::makeAny(bSet));
532 			::comphelper::ConfigurationHelper::flush(m_xCfg);
533 
534 			bIsModified = sal_True;
535 		}
536 	}
537 	catch(const css::uno::Exception& ex)
538 	{
539 		LogHelper::logIt(ex);
540 	}
541 }
542 
543 void SvtAccessibilityOptions_Impl::SetVCLSettings()
544 {
545     AllSettings aAllSettings(Application::GetSettings());
546     StyleSettings aStyleSettings(aAllSettings.GetStyleSettings());
547     HelpSettings aHelpSettings(aAllSettings.GetHelpSettings());
548     bool StyleSettingsChanged(false);
549 
550     aHelpSettings.SetTipTimeout( GetIsHelpTipsDisappear() ? GetHelpTipSeconds() * 1000 : HELP_TIP_TIMEOUT);
551     aAllSettings.SetHelpSettings(aHelpSettings);
552 
553     if(aStyleSettings.GetUseSystemUIFonts() != GetIsSystemFont())
554     {
555         aStyleSettings.SetUseSystemUIFonts(GetIsSystemFont());
556         StyleSettingsChanged = true;
557     }
558 
559     const sal_Int16 nEdgeBlendingCountA(GetEdgeBlending());
560     OSL_ENSURE(nEdgeBlendingCountA >= 0, "OOps, negative values for EdgeBlending are not allowed (!)");
561     const sal_uInt16 nEdgeBlendingCountB(static_cast< sal_uInt16 >(nEdgeBlendingCountA >= 0 ? nEdgeBlendingCountA : 0));
562 
563     if(aStyleSettings.GetEdgeBlending() != nEdgeBlendingCountB)
564     {
565         aStyleSettings.SetEdgeBlending(nEdgeBlendingCountB);
566         StyleSettingsChanged = true;
567     }
568 
569     const sal_Int16 nMaxLineCountA(GetListBoxMaximumLineCount());
570     OSL_ENSURE(nMaxLineCountA >= 0, "OOps, negative values for ListBoxMaximumLineCount are not allowed (!)");
571     const sal_uInt16 nMaxLineCountB(static_cast< sal_uInt16 >(nMaxLineCountA >= 0 ? nMaxLineCountA : 0));
572 
573     if(aStyleSettings.GetListBoxMaximumLineCount() != nMaxLineCountB)
574     {
575         aStyleSettings.SetListBoxMaximumLineCount(nMaxLineCountB);
576         StyleSettingsChanged = true;
577     }
578 
579     const sal_Int16 nMaxColumnCountA(GetColorValueSetColumnCount());
580     OSL_ENSURE(nMaxColumnCountA >= 0, "OOps, negative values for ColorValueSetColumnCount are not allowed (!)");
581     const sal_uInt16 nMaxColumnCountB(static_cast< sal_uInt16 >(nMaxColumnCountA >= 0 ? nMaxColumnCountA : 0));
582 
583     if(aStyleSettings.GetColorValueSetColumnCount() != nMaxColumnCountB)
584     {
585         aStyleSettings.SetColorValueSetColumnCount(nMaxColumnCountB);
586         StyleSettingsChanged = true;
587     }
588 
589     if(StyleSettingsChanged)
590     {
591         aAllSettings.SetStyleSettings(aStyleSettings);
592         Application::MergeSystemSettings(aAllSettings);
593     }
594 
595     Application::SetSettings(aAllSettings);
596 }
597 
598 void SvtAccessibilityOptions_Impl::SetEdgeBlending(sal_Int16 nSet)
599 {
600     css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
601 
602     try
603     {
604         if(xNode.is() && xNode->getPropertyValue(s_sEdgeBlending)!=nSet)
605         {
606             xNode->setPropertyValue(s_sEdgeBlending, css::uno::makeAny(nSet));
607             ::comphelper::ConfigurationHelper::flush(m_xCfg);
608 
609             bIsModified = sal_True;
610         }
611     }
612     catch(const css::uno::Exception& ex)
613     {
614         LogHelper::logIt(ex);
615     }
616 }
617 
618 void SvtAccessibilityOptions_Impl::SetListBoxMaximumLineCount(sal_Int16 nSet)
619 {
620     css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
621 
622     try
623     {
624         if(xNode.is() && xNode->getPropertyValue(s_sListBoxMaximumLineCount)!=nSet)
625         {
626             xNode->setPropertyValue(s_sListBoxMaximumLineCount, css::uno::makeAny(nSet));
627             ::comphelper::ConfigurationHelper::flush(m_xCfg);
628 
629             bIsModified = sal_True;
630         }
631     }
632     catch(const css::uno::Exception& ex)
633     {
634         LogHelper::logIt(ex);
635     }
636 }
637 
638 void SvtAccessibilityOptions_Impl::SetColorValueSetColumnCount(sal_Int16 nSet)
639 {
640     css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY);
641 
642     try
643     {
644         if(xNode.is() && xNode->getPropertyValue(s_sColorValueSetColumnCount)!=nSet)
645         {
646             xNode->setPropertyValue(s_sColorValueSetColumnCount, css::uno::makeAny(nSet));
647             ::comphelper::ConfigurationHelper::flush(m_xCfg);
648 
649             bIsModified = sal_True;
650         }
651     }
652     catch(const css::uno::Exception& ex)
653     {
654         LogHelper::logIt(ex);
655     }
656 }
657 
658 // -----------------------------------------------------------------------
659 // class SvtAccessibilityOptions --------------------------------------------------
660 
661 SvtAccessibilityOptions::SvtAccessibilityOptions()
662 {
663 	{
664 		::osl::MutexGuard aGuard( SingletonMutex::get() );
665 		if(!sm_pSingleImplConfig)
666 		{
667 			sm_pSingleImplConfig = new SvtAccessibilityOptions_Impl;
668 			ItemHolder2::holdConfigItem(E_ACCESSIBILITYOPTIONS);
669 		}
670 		++sm_nAccessibilityRefCount;
671 	}
672 	//StartListening( *sm_pSingleImplConfig, sal_True );
673 }
674 
675 // -----------------------------------------------------------------------
676 
677 SvtAccessibilityOptions::~SvtAccessibilityOptions()
678 {
679 	//EndListening( *sm_pSingleImplConfig, sal_True );
680 	::osl::MutexGuard aGuard( SingletonMutex::get() );
681 	if( !--sm_nAccessibilityRefCount )
682 	{
683 		//if( sm_pSingleImplConfig->IsModified() )
684 		//	sm_pSingleImplConfig->Commit();
685 		DELETEZ( sm_pSingleImplConfig );
686 	}
687 }
688 
689 // -----------------------------------------------------------------------
690 
691 void SvtAccessibilityOptions::Notify( SfxBroadcaster&, const SfxHint& rHint )
692 {
693 	NotifyListeners(0);
694 	if ( rHint.IsA(TYPE(SfxSimpleHint)) )
695 	{
696 		if ( ((SfxSimpleHint&)rHint).GetId()  == SFX_HINT_ACCESSIBILITY_CHANGED )
697 			SetVCLSettings();
698 	}
699 }
700 
701 // -----------------------------------------------------------------------
702 
703 sal_Bool SvtAccessibilityOptions::IsModified() const
704 {
705 	return sm_pSingleImplConfig->IsModified();
706 }
707 void SvtAccessibilityOptions::Commit()
708 {
709 	//sm_pSingleImplConfig->Commit();
710 }
711 
712 // -----------------------------------------------------------------------
713 
714 sal_Bool SvtAccessibilityOptions::GetIsForDrawings() const
715 {
716 	DBG_ERROR( "SvtAccessibilityOptions::GetIsForDrawings: is obsolete!" );
717     return sal_False;
718 }
719 sal_Bool SvtAccessibilityOptions::GetIsForBorders() const
720 {
721 	DBG_ERROR( "SvtAccessibilityOptions::GetIsForBorders: is obsolete!" );
722     return sal_False;
723 }
724 sal_Bool SvtAccessibilityOptions::GetAutoDetectSystemHC() const
725 {
726 	return sm_pSingleImplConfig->GetAutoDetectSystemHC();
727 }
728 sal_Bool SvtAccessibilityOptions::GetIsForPagePreviews() const
729 {
730 	return sm_pSingleImplConfig->GetIsForPagePreviews();
731 }
732 sal_Bool SvtAccessibilityOptions::GetIsHelpTipsDisappear() const
733 {
734 	return sm_pSingleImplConfig->GetIsHelpTipsDisappear();
735 }
736 sal_Bool SvtAccessibilityOptions::GetIsAllowAnimatedGraphics() const
737 {
738 	return sm_pSingleImplConfig->GetIsAllowAnimatedGraphics();
739 }
740 sal_Bool SvtAccessibilityOptions::GetIsAllowAnimatedText() const
741 {
742 	return sm_pSingleImplConfig->GetIsAllowAnimatedText();
743 }
744 sal_Bool SvtAccessibilityOptions::GetIsAutomaticFontColor() const
745 {
746 	return sm_pSingleImplConfig->GetIsAutomaticFontColor();
747 }
748 sal_Bool SvtAccessibilityOptions::GetIsSystemFont() const
749 {
750 	return sm_pSingleImplConfig->GetIsSystemFont();
751 }
752 sal_Int16 SvtAccessibilityOptions::GetHelpTipSeconds() const
753 {
754 	return sm_pSingleImplConfig->GetHelpTipSeconds();
755 }
756 sal_Bool SvtAccessibilityOptions::IsSelectionInReadonly() const
757 {
758 	return sm_pSingleImplConfig->IsSelectionInReadonly();
759 }
760 sal_Int16 SvtAccessibilityOptions::GetEdgeBlending() const
761 {
762     return sm_pSingleImplConfig->GetEdgeBlending();
763 }
764 sal_Int16 SvtAccessibilityOptions::GetListBoxMaximumLineCount() const
765 {
766     return sm_pSingleImplConfig->GetListBoxMaximumLineCount();
767 }
768 sal_Int16 SvtAccessibilityOptions::GetColorValueSetColumnCount() const
769 {
770     return sm_pSingleImplConfig->GetColorValueSetColumnCount();
771 }
772 
773 // -----------------------------------------------------------------------
774 void SvtAccessibilityOptions::SetAutoDetectSystemHC(sal_Bool bSet)
775 {
776 	sm_pSingleImplConfig->SetAutoDetectSystemHC(bSet);
777 }
778 void SvtAccessibilityOptions::SetIsForPagePreviews(sal_Bool bSet)
779 {
780 	sm_pSingleImplConfig->SetIsForPagePreviews(bSet);
781 }
782 void SvtAccessibilityOptions::SetIsHelpTipsDisappear(sal_Bool bSet)
783 {
784 	sm_pSingleImplConfig->SetIsHelpTipsDisappear(bSet);
785 }
786 void SvtAccessibilityOptions::SetIsAllowAnimatedGraphics(sal_Bool bSet)
787 {
788 	sm_pSingleImplConfig->SetIsAllowAnimatedGraphics(bSet);
789 }
790 void SvtAccessibilityOptions::SetIsAllowAnimatedText(sal_Bool bSet)
791 {
792 	sm_pSingleImplConfig->SetIsAllowAnimatedText(bSet);
793 }
794 void SvtAccessibilityOptions::SetIsAutomaticFontColor(sal_Bool bSet)
795 {
796 	sm_pSingleImplConfig->SetIsAutomaticFontColor(bSet);
797 }
798 void SvtAccessibilityOptions::SetIsSystemFont(sal_Bool bSet)
799 {
800 	sm_pSingleImplConfig->SetIsSystemFont(bSet);
801 }
802 void SvtAccessibilityOptions::SetHelpTipSeconds(sal_Int16 nSet)
803 {
804 	sm_pSingleImplConfig->SetHelpTipSeconds(nSet);
805 }
806 void SvtAccessibilityOptions::SetSelectionInReadonly(sal_Bool bSet)
807 {
808 	sm_pSingleImplConfig->SetSelectionInReadonly(bSet);
809 }
810 void SvtAccessibilityOptions::SetVCLSettings()
811 {
812 	sm_pSingleImplConfig->SetVCLSettings();
813 }
814 void SvtAccessibilityOptions::SetEdgeBlending(sal_Int16 nSet)
815 {
816     sm_pSingleImplConfig->SetEdgeBlending(nSet);
817 }
818 void SvtAccessibilityOptions::SetListBoxMaximumLineCount(sal_Int16 nSet)
819 {
820     sm_pSingleImplConfig->SetListBoxMaximumLineCount(nSet);
821 }
822 void SvtAccessibilityOptions::SetColorValueSetColumnCount(sal_Int16 nSet)
823 {
824     sm_pSingleImplConfig->SetColorValueSetColumnCount(nSet);
825 }
826 
827 // -----------------------------------------------------------------------
828