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 90 void SetAutoDetectSystemHC(sal_Bool bSet); 91 void SetIsForPagePreviews(sal_Bool bSet); 92 void SetIsHelpTipsDisappear(sal_Bool bSet); 93 void SetIsAllowAnimatedGraphics(sal_Bool bSet); 94 void SetIsAllowAnimatedText(sal_Bool bSet); 95 void SetIsAutomaticFontColor(sal_Bool bSet); 96 void SetIsSystemFont(sal_Bool bSet); 97 void SetHelpTipSeconds(sal_Int16 nSet); 98 void SetSelectionInReadonly(sal_Bool bSet); 99 100 sal_Bool IsModified() const { return bIsModified; }; 101 }; 102 103 // initialization of static members -------------------------------------- 104 105 SvtAccessibilityOptions_Impl* volatile SvtAccessibilityOptions::sm_pSingleImplConfig =NULL; 106 sal_Int32 volatile SvtAccessibilityOptions::sm_nAccessibilityRefCount(0); 107 108 namespace 109 { 110 struct SingletonMutex 111 : public rtl::Static< ::osl::Mutex, SingletonMutex > {}; 112 } 113 114 // ----------------------------------------------------------------------- 115 // class SvtAccessibilityOptions_Impl --------------------------------------------- 116 117 SvtAccessibilityOptions_Impl::SvtAccessibilityOptions_Impl() 118 { 119 try 120 { 121 m_xCfg = css::uno::Reference< css::container::XNameAccess >( 122 ::comphelper::ConfigurationHelper::openConfig( 123 utl::getProcessServiceFactory(), 124 s_sAccessibility, 125 ::comphelper::ConfigurationHelper::E_STANDARD), 126 css::uno::UNO_QUERY); 127 128 bIsModified = sal_False; 129 } 130 catch(const css::uno::Exception& ex) 131 { 132 m_xCfg.clear(); 133 LogHelper::logIt(ex); 134 } 135 } 136 137 SvtAccessibilityOptions_Impl::~SvtAccessibilityOptions_Impl() 138 { 139 } 140 141 // ----------------------------------------------------------------------- 142 sal_Bool SvtAccessibilityOptions_Impl::GetAutoDetectSystemHC() 143 { 144 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 145 sal_Bool bRet = sal_True; 146 147 try 148 { 149 if(xNode.is()) 150 xNode->getPropertyValue(s_sAutoDetectSystemHC) >>= bRet; 151 } 152 catch(const css::uno::Exception& ex) 153 { 154 LogHelper::logIt(ex); 155 } 156 157 return bRet; 158 } 159 160 sal_Bool SvtAccessibilityOptions_Impl::GetIsForPagePreviews() const 161 { 162 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 163 sal_Bool bRet = sal_True; 164 165 try 166 { 167 if(xNode.is()) 168 xNode->getPropertyValue(s_sIsForPagePreviews) >>= bRet; 169 } 170 catch(const css::uno::Exception& ex) 171 { 172 LogHelper::logIt(ex); 173 } 174 return bRet; 175 } 176 177 sal_Bool SvtAccessibilityOptions_Impl::GetIsHelpTipsDisappear() const 178 { 179 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 180 sal_Bool bRet = sal_True; 181 182 try 183 { 184 if(xNode.is()) 185 xNode->getPropertyValue(s_sIsHelpTipsDisappear) >>= bRet; 186 } 187 catch(const css::uno::Exception& ex) 188 { 189 LogHelper::logIt(ex); 190 } 191 192 return bRet; 193 } 194 195 sal_Bool SvtAccessibilityOptions_Impl::GetIsAllowAnimatedGraphics() const 196 { 197 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 198 sal_Bool bRet = sal_True; 199 200 try 201 { 202 if(xNode.is()) 203 xNode->getPropertyValue(s_sIsAllowAnimatedGraphics) >>= bRet; 204 } 205 catch(const css::uno::Exception& ex) 206 { 207 LogHelper::logIt(ex); 208 } 209 210 return bRet; 211 } 212 213 sal_Bool SvtAccessibilityOptions_Impl::GetIsAllowAnimatedText() const 214 { 215 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 216 sal_Bool bRet = sal_True; 217 218 try 219 { 220 if(xNode.is()) 221 xNode->getPropertyValue(s_sIsAllowAnimatedText) >>= bRet; 222 } 223 catch(const css::uno::Exception& ex) 224 { 225 LogHelper::logIt(ex); 226 } 227 228 return bRet; 229 } 230 231 sal_Bool SvtAccessibilityOptions_Impl::GetIsAutomaticFontColor() const 232 { 233 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 234 sal_Bool bRet = sal_False; 235 236 try 237 { 238 if(xNode.is()) 239 xNode->getPropertyValue(s_sIsAutomaticFontColor) >>= bRet; 240 } 241 catch(const css::uno::Exception& ex) 242 { 243 LogHelper::logIt(ex); 244 } 245 246 return bRet; 247 } 248 249 sal_Bool SvtAccessibilityOptions_Impl::GetIsSystemFont() const 250 { 251 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 252 sal_Bool bRet = sal_True; 253 254 try 255 { 256 if(xNode.is()) 257 xNode->getPropertyValue(s_sIsSystemFont) >>= bRet; 258 } 259 catch(const css::uno::Exception& ex) 260 { 261 LogHelper::logIt(ex); 262 } 263 264 return bRet; 265 } 266 267 sal_Int16 SvtAccessibilityOptions_Impl::GetHelpTipSeconds() const 268 { 269 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 270 sal_Int16 nRet = 4; 271 272 try 273 { 274 if(xNode.is()) 275 xNode->getPropertyValue(s_sHelpTipSeconds) >>= nRet; 276 } 277 catch(const css::uno::Exception& ex) 278 { 279 LogHelper::logIt(ex); 280 } 281 282 return nRet; 283 } 284 285 sal_Bool SvtAccessibilityOptions_Impl::IsSelectionInReadonly() const 286 { 287 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 288 sal_Bool bRet = sal_False; 289 290 try 291 { 292 if(xNode.is()) 293 xNode->getPropertyValue(s_sIsSelectionInReadonly) >>= bRet; 294 } 295 catch(const css::uno::Exception& ex) 296 { 297 LogHelper::logIt(ex); 298 } 299 300 return bRet; 301 } 302 303 void SvtAccessibilityOptions_Impl::SetAutoDetectSystemHC(sal_Bool bSet) 304 { 305 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 306 307 try 308 { 309 if(xNode.is() && xNode->getPropertyValue(s_sAutoDetectSystemHC)!=bSet) 310 { 311 xNode->setPropertyValue(s_sAutoDetectSystemHC, css::uno::makeAny(bSet)); 312 ::comphelper::ConfigurationHelper::flush(m_xCfg); 313 314 bIsModified = sal_True; 315 } 316 } 317 catch(const css::uno::Exception& ex) 318 { 319 LogHelper::logIt(ex); 320 } 321 } 322 323 void SvtAccessibilityOptions_Impl::SetIsForPagePreviews(sal_Bool bSet) 324 { 325 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 326 327 try 328 { 329 if(xNode.is() && xNode->getPropertyValue(s_sIsForPagePreviews)!=bSet) 330 { 331 xNode->setPropertyValue(s_sIsForPagePreviews, css::uno::makeAny(bSet)); 332 ::comphelper::ConfigurationHelper::flush(m_xCfg); 333 334 bIsModified = sal_True; 335 } 336 } 337 catch(const css::uno::Exception& ex) 338 { 339 LogHelper::logIt(ex); 340 } 341 } 342 343 void SvtAccessibilityOptions_Impl::SetIsHelpTipsDisappear(sal_Bool bSet) 344 { 345 css::uno::Reference< css::beans::XPropertySet > xNode(m_xCfg, css::uno::UNO_QUERY); 346 347 try 348 { 349 if(xNode.is() && xNode->getPropertyValue(s_sIsHelpTipsDisappear)!=bSet) 350 { 351 xNode->setPropertyValue(s_sIsHelpTipsDisappear, css::uno::makeAny(bSet)); 352 ::comphelper::ConfigurationHelper::flush(m_xCfg); 353 354 bIsModified = sal_True; 355 } 356 } 357 catch(const css::uno::Exception& ex) 358 { 359 LogHelper::logIt(ex); 360 } 361 } 362 363 void SvtAccessibilityOptions_Impl::SetIsAllowAnimatedGraphics(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_sIsAllowAnimatedGraphics)!=bSet) 370 { 371 xNode->setPropertyValue(s_sIsAllowAnimatedGraphics, 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::SetIsAllowAnimatedText(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_sIsAllowAnimatedText)!=bSet) 390 { 391 xNode->setPropertyValue(s_sIsAllowAnimatedText, 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::SetIsAutomaticFontColor(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_sIsAutomaticFontColor)!=bSet) 410 { 411 xNode->setPropertyValue(s_sIsAutomaticFontColor, 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::SetIsSystemFont(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_sIsSystemFont)!=bSet) 430 { 431 xNode->setPropertyValue(s_sIsSystemFont, 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::SetHelpTipSeconds(sal_Int16 nSet) 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_sHelpTipSeconds)!=nSet) 450 { 451 xNode->setPropertyValue(s_sHelpTipSeconds, css::uno::makeAny(nSet)); 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::SetSelectionInReadonly(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_sIsSelectionInReadonly)!=bSet) 470 { 471 xNode->setPropertyValue(s_sIsSelectionInReadonly, 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::SetVCLSettings() 484 { 485 AllSettings aAllSettings = Application::GetSettings(); 486 HelpSettings aHelpSettings = aAllSettings.GetHelpSettings(); 487 aHelpSettings.SetTipTimeout( GetIsHelpTipsDisappear() ? GetHelpTipSeconds() * 1000 : HELP_TIP_TIMEOUT); 488 aAllSettings.SetHelpSettings(aHelpSettings); 489 if(aAllSettings.GetStyleSettings().GetUseSystemUIFonts() != GetIsSystemFont() ) 490 { 491 StyleSettings aStyleSettings = aAllSettings.GetStyleSettings(); 492 aStyleSettings.SetUseSystemUIFonts( GetIsSystemFont() ); 493 aAllSettings.SetStyleSettings(aStyleSettings); 494 Application::MergeSystemSettings( aAllSettings ); 495 } 496 497 Application::SetSettings(aAllSettings); 498 } 499 500 // ----------------------------------------------------------------------- 501 // class SvtAccessibilityOptions -------------------------------------------------- 502 503 SvtAccessibilityOptions::SvtAccessibilityOptions() 504 { 505 { 506 ::osl::MutexGuard aGuard( SingletonMutex::get() ); 507 if(!sm_pSingleImplConfig) 508 { 509 sm_pSingleImplConfig = new SvtAccessibilityOptions_Impl; 510 ItemHolder2::holdConfigItem(E_ACCESSIBILITYOPTIONS); 511 } 512 ++sm_nAccessibilityRefCount; 513 } 514 //StartListening( *sm_pSingleImplConfig, sal_True ); 515 } 516 517 // ----------------------------------------------------------------------- 518 519 SvtAccessibilityOptions::~SvtAccessibilityOptions() 520 { 521 //EndListening( *sm_pSingleImplConfig, sal_True ); 522 ::osl::MutexGuard aGuard( SingletonMutex::get() ); 523 if( !--sm_nAccessibilityRefCount ) 524 { 525 //if( sm_pSingleImplConfig->IsModified() ) 526 // sm_pSingleImplConfig->Commit(); 527 DELETEZ( sm_pSingleImplConfig ); 528 } 529 } 530 531 // ----------------------------------------------------------------------- 532 533 void SvtAccessibilityOptions::Notify( SfxBroadcaster&, const SfxHint& rHint ) 534 { 535 NotifyListeners(0); 536 if ( rHint.IsA(TYPE(SfxSimpleHint)) ) 537 { 538 if ( ((SfxSimpleHint&)rHint).GetId() == SFX_HINT_ACCESSIBILITY_CHANGED ) 539 SetVCLSettings(); 540 } 541 } 542 543 // ----------------------------------------------------------------------- 544 545 sal_Bool SvtAccessibilityOptions::IsModified() const 546 { 547 return sm_pSingleImplConfig->IsModified(); 548 } 549 void SvtAccessibilityOptions::Commit() 550 { 551 //sm_pSingleImplConfig->Commit(); 552 } 553 554 // ----------------------------------------------------------------------- 555 556 sal_Bool SvtAccessibilityOptions::GetIsForDrawings() const 557 { 558 DBG_ERROR( "SvtAccessibilityOptions::GetIsForDrawings: is obsolete!" ); 559 return sal_False; 560 } 561 sal_Bool SvtAccessibilityOptions::GetIsForBorders() const 562 { 563 DBG_ERROR( "SvtAccessibilityOptions::GetIsForBorders: is obsolete!" ); 564 return sal_False; 565 } 566 sal_Bool SvtAccessibilityOptions::GetAutoDetectSystemHC() const 567 { 568 return sm_pSingleImplConfig->GetAutoDetectSystemHC(); 569 } 570 sal_Bool SvtAccessibilityOptions::GetIsForPagePreviews() const 571 { 572 return sm_pSingleImplConfig->GetIsForPagePreviews(); 573 } 574 sal_Bool SvtAccessibilityOptions::GetIsHelpTipsDisappear() const 575 { 576 return sm_pSingleImplConfig->GetIsHelpTipsDisappear(); 577 } 578 sal_Bool SvtAccessibilityOptions::GetIsAllowAnimatedGraphics() const 579 { 580 return sm_pSingleImplConfig->GetIsAllowAnimatedGraphics(); 581 } 582 sal_Bool SvtAccessibilityOptions::GetIsAllowAnimatedText() const 583 { 584 return sm_pSingleImplConfig->GetIsAllowAnimatedText(); 585 } 586 sal_Bool SvtAccessibilityOptions::GetIsAutomaticFontColor() const 587 { 588 return sm_pSingleImplConfig->GetIsAutomaticFontColor(); 589 } 590 sal_Bool SvtAccessibilityOptions::GetIsSystemFont() const 591 { 592 return sm_pSingleImplConfig->GetIsSystemFont(); 593 } 594 sal_Int16 SvtAccessibilityOptions::GetHelpTipSeconds() const 595 { 596 return sm_pSingleImplConfig->GetHelpTipSeconds(); 597 } 598 sal_Bool SvtAccessibilityOptions::IsSelectionInReadonly() const 599 { 600 return sm_pSingleImplConfig->IsSelectionInReadonly(); 601 } 602 603 // ----------------------------------------------------------------------- 604 void SvtAccessibilityOptions::SetAutoDetectSystemHC(sal_Bool bSet) 605 { 606 sm_pSingleImplConfig->SetAutoDetectSystemHC(bSet); 607 } 608 void SvtAccessibilityOptions::SetIsForPagePreviews(sal_Bool bSet) 609 { 610 sm_pSingleImplConfig->SetIsForPagePreviews(bSet); 611 } 612 void SvtAccessibilityOptions::SetIsHelpTipsDisappear(sal_Bool bSet) 613 { 614 sm_pSingleImplConfig->SetIsHelpTipsDisappear(bSet); 615 } 616 void SvtAccessibilityOptions::SetIsAllowAnimatedGraphics(sal_Bool bSet) 617 { 618 sm_pSingleImplConfig->SetIsAllowAnimatedGraphics(bSet); 619 } 620 void SvtAccessibilityOptions::SetIsAllowAnimatedText(sal_Bool bSet) 621 { 622 sm_pSingleImplConfig->SetIsAllowAnimatedText(bSet); 623 } 624 void SvtAccessibilityOptions::SetIsAutomaticFontColor(sal_Bool bSet) 625 { 626 sm_pSingleImplConfig->SetIsAutomaticFontColor(bSet); 627 } 628 void SvtAccessibilityOptions::SetIsSystemFont(sal_Bool bSet) 629 { 630 sm_pSingleImplConfig->SetIsSystemFont(bSet); 631 } 632 void SvtAccessibilityOptions::SetHelpTipSeconds(sal_Int16 nSet) 633 { 634 sm_pSingleImplConfig->SetHelpTipSeconds(nSet); 635 } 636 void SvtAccessibilityOptions::SetSelectionInReadonly(sal_Bool bSet) 637 { 638 sm_pSingleImplConfig->SetSelectionInReadonly(bSet); 639 } 640 641 void SvtAccessibilityOptions::SetVCLSettings() 642 { 643 sm_pSingleImplConfig->SetVCLSettings(); 644 } 645 // ----------------------------------------------------------------------- 646