1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */ 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 #include <config_folders.h> 21 22 #include <officecfg/Office/Common.hxx> 23 24 #ifdef _WIN32 25 #include <win/svsys.h> 26 #endif 27 28 #include <comphelper/processfactory.hxx> 29 #include <rtl/bootstrap.hxx> 30 31 #include <i18nlangtag/mslangid.hxx> 32 #include <i18nlangtag/languagetag.hxx> 33 34 #include <comphelper/lok.hxx> 35 36 #include <vcl/graphicfilter.hxx> 37 #include <IconThemeScanner.hxx> 38 #include <IconThemeSelector.hxx> 39 #include <vcl/IconThemeInfo.hxx> 40 #include <vcl/svapp.hxx> 41 #include <vcl/event.hxx> 42 #include <vcl/settings.hxx> 43 #include <vcl/i18nhelp.hxx> 44 #include <configsettings.hxx> 45 #include <vcl/outdev.hxx> 46 47 #include <unotools/fontcfg.hxx> 48 #include <unotools/localedatawrapper.hxx> 49 #include <unotools/confignode.hxx> 50 #include <unotools/configmgr.hxx> 51 #include <unotools/syslocale.hxx> 52 #include <unotools/syslocaleoptions.hxx> 53 54 using namespace ::com::sun::star; 55 56 #include <svdata.hxx> 57 58 struct ImplMouseData 59 { 60 MouseSettingsOptions mnOptions = MouseSettingsOptions::NONE; 61 sal_uInt64 mnDoubleClkTime = 500; 62 sal_Int32 mnDoubleClkWidth = 2; 63 sal_Int32 mnDoubleClkHeight = 2; 64 sal_Int32 mnStartDragWidth = 2 ; 65 sal_Int32 mnStartDragHeight = 2; 66 sal_Int32 mnButtonRepeat = 90; 67 sal_Int32 mnMenuDelay = 150; 68 MouseFollowFlags mnFollow = MouseFollowFlags::Menu; 69 MouseMiddleButtonAction mnMiddleButtonAction= MouseMiddleButtonAction::AutoScroll; 70 MouseWheelBehaviour mnWheelBehavior = MouseWheelBehaviour::FocusOnly; 71 }; 72 73 struct ImplStyleData 74 { 75 ImplStyleData(); 76 ImplStyleData( const ImplStyleData& rData ); 77 78 void SetStandardStyles(); 79 80 Color maActiveBorderColor; 81 Color maActiveColor; 82 Color maActiveTextColor; 83 Color maAlternatingRowColor; 84 Color maDefaultButtonTextColor; 85 Color maButtonTextColor; 86 Color maDefaultActionButtonTextColor; 87 Color maActionButtonTextColor; 88 Color maFlatButtonTextColor; 89 Color maDefaultButtonRolloverTextColor; 90 Color maButtonRolloverTextColor; 91 Color maDefaultActionButtonRolloverTextColor; 92 Color maActionButtonRolloverTextColor; 93 Color maFlatButtonRolloverTextColor; 94 Color maDefaultButtonPressedRolloverTextColor; 95 Color maButtonPressedRolloverTextColor; 96 Color maDefaultActionButtonPressedRolloverTextColor; 97 Color maActionButtonPressedRolloverTextColor; 98 Color maFlatButtonPressedRolloverTextColor; 99 Color maCheckedColor; 100 Color maDarkShadowColor; 101 Color maDeactiveBorderColor; 102 Color maDeactiveColor; 103 Color maDeactiveTextColor; 104 Color maDialogColor; 105 Color maDialogTextColor; 106 Color maDisableColor; 107 Color maFaceColor; 108 Color maFieldColor; 109 Color maFieldTextColor; 110 Color maFieldRolloverTextColor; 111 Color maGroupTextColor; 112 Color maHelpColor; 113 Color maHelpTextColor; 114 Color maHighlightColor; 115 Color maHighlightTextColor; 116 Color maLabelTextColor; 117 Color maLightBorderColor; 118 Color maLightColor; 119 Color maLinkColor; 120 Color maMenuBarColor; 121 Color maMenuBarRolloverColor; 122 Color maMenuBorderColor; 123 Color maMenuColor; 124 Color maMenuHighlightColor; 125 Color maMenuHighlightTextColor; 126 Color maMenuTextColor; 127 Color maListBoxWindowBackgroundColor; 128 Color maListBoxWindowTextColor; 129 Color maListBoxWindowHighlightColor; 130 Color maListBoxWindowHighlightTextColor; 131 Color maMenuBarTextColor; 132 Color maMenuBarRolloverTextColor; 133 Color maMenuBarHighlightTextColor; 134 Color maMonoColor; 135 Color maRadioCheckTextColor; 136 Color maShadowColor; 137 Color maWarningColor; 138 Color maVisitedLinkColor; 139 Color maToolTextColor; 140 Color maWindowColor; 141 Color maWindowTextColor; 142 Color maWorkspaceColor; 143 Color maActiveTabColor; 144 Color maInactiveTabColor; 145 Color maTabTextColor; 146 Color maTabRolloverTextColor; 147 Color maTabHighlightTextColor; 148 vcl::Font maAppFont; 149 vcl::Font maHelpFont; 150 vcl::Font maTitleFont; 151 vcl::Font maFloatTitleFont; 152 vcl::Font maMenuFont; 153 vcl::Font maToolFont; 154 vcl::Font maLabelFont; 155 vcl::Font maRadioCheckFont; 156 vcl::Font maPushButtonFont; 157 vcl::Font maFieldFont; 158 vcl::Font maIconFont; 159 vcl::Font maTabFont; 160 vcl::Font maGroupFont; 161 sal_Int32 mnTitleHeight; 162 sal_Int32 mnFloatTitleHeight; 163 sal_Int32 mnScrollBarSize; 164 sal_Int32 mnSpinSize; 165 sal_Int32 mnCursorSize; 166 sal_Int32 mnAntialiasedMin; 167 sal_uInt64 mnCursorBlinkTime; 168 DragFullOptions mnDragFullOptions; 169 SelectionOptions mnSelectionOptions; 170 DisplayOptions mnDisplayOptions; 171 ToolbarIconSize mnToolbarIconSize; 172 bool mnUseFlatMenus; 173 StyleSettingsOptions mnOptions; 174 bool mbHighContrast; 175 bool mbUseSystemUIFonts; 176 /** 177 * Disabling AA doesn't actually disable AA of fonts, instead it is taken 178 * from system settings. 179 */ 180 bool mbUseFontAAFromSystem; 181 bool mbAutoMnemonic; 182 TriState meUseImagesInMenus; 183 bool mnUseFlatBorders; 184 bool mbPreferredUseImagesInMenus; 185 sal_Int32 mnMinThumbSize; 186 std::shared_ptr<vcl::IconThemeScanner> 187 mIconThemeScanner; 188 std::shared_ptr<vcl::IconThemeSelector> 189 mIconThemeSelector; 190 191 OUString mIconTheme; 192 bool mbSkipDisabledInMenus; 193 bool mbHideDisabledMenuItems; 194 bool mbPreferredContextMenuShortcuts; 195 TriState meContextMenuShortcuts; 196 //mbPrimaryButtonWarpsSlider == true for "jump to here" behavior for primary button, otherwise 197 //primary means scroll by single page. Secondary button takes the alternative behaviour 198 bool mbPrimaryButtonWarpsSlider; 199 DialogStyle maDialogStyle; 200 201 sal_uInt16 mnEdgeBlending; 202 Color maEdgeBlendingTopLeftColor; 203 Color maEdgeBlendingBottomRightColor; 204 sal_uInt16 mnListBoxMaximumLineCount; 205 sal_uInt16 mnColorValueSetColumnCount; 206 Size maListBoxPreviewDefaultLogicSize; 207 Size maListBoxPreviewDefaultPixelSize; 208 bool mbPreviewUsesCheckeredBackground; 209 210 OUString maPersonaHeaderFooter; ///< Cache the settings to detect changes. 211 212 BitmapEx maPersonaHeaderBitmap; ///< Cache the header bitmap. 213 BitmapEx maPersonaFooterBitmap; ///< Cache the footer bitmap. 214 std::optional<Color> maPersonaMenuBarTextColor; ///< Cache the menubar color. 215 }; 216 217 struct ImplMiscData 218 { 219 ImplMiscData(); 220 TriState mnEnableATT; 221 bool mbEnableLocalizedDecimalSep; 222 TriState mnDisablePrinting; 223 }; 224 225 struct ImplHelpData 226 { 227 sal_Int32 mnTipTimeout = 3000; 228 }; 229 230 struct ImplAllSettingsData 231 { 232 ImplAllSettingsData(); 233 ImplAllSettingsData( const ImplAllSettingsData& rData ); 234 ~ImplAllSettingsData(); 235 236 MouseSettings maMouseSettings; 237 StyleSettings maStyleSettings; 238 MiscSettings maMiscSettings; 239 HelpSettings maHelpSettings; 240 LanguageTag maLocale; 241 LanguageTag maUILocale; 242 std::unique_ptr<LocaleDataWrapper> mpLocaleDataWrapper; 243 std::unique_ptr<LocaleDataWrapper> mpUILocaleDataWrapper; 244 std::unique_ptr<LocaleDataWrapper> mpNeutralLocaleDataWrapper; 245 std::unique_ptr<vcl::I18nHelper> mpI18nHelper; 246 std::unique_ptr<vcl::I18nHelper> mpUII18nHelper; 247 SvtSysLocale maSysLocale; 248 }; 249 250 void 251 MouseSettings::SetOptions(MouseSettingsOptions nOptions) 252 { 253 CopyData(); 254 mxData->mnOptions = nOptions; 255 } 256 257 MouseSettingsOptions 258 MouseSettings::GetOptions() const 259 { 260 return mxData->mnOptions; 261 } 262 263 void 264 MouseSettings::SetDoubleClickTime( sal_uInt64 nDoubleClkTime ) 265 { 266 CopyData(); 267 mxData->mnDoubleClkTime = nDoubleClkTime; 268 } 269 270 sal_uInt64 271 MouseSettings::GetDoubleClickTime() const 272 { 273 return mxData->mnDoubleClkTime; 274 } 275 276 void 277 MouseSettings::SetDoubleClickWidth( sal_Int32 nDoubleClkWidth ) 278 { 279 CopyData(); 280 mxData->mnDoubleClkWidth = nDoubleClkWidth; 281 } 282 283 sal_Int32 284 MouseSettings::GetDoubleClickWidth() const 285 { 286 return mxData->mnDoubleClkWidth; 287 } 288 289 void 290 MouseSettings::SetDoubleClickHeight( sal_Int32 nDoubleClkHeight ) 291 { 292 CopyData(); 293 mxData->mnDoubleClkHeight = nDoubleClkHeight; 294 } 295 296 sal_Int32 297 MouseSettings::GetDoubleClickHeight() const 298 { 299 return mxData->mnDoubleClkHeight; 300 } 301 302 void 303 MouseSettings::SetStartDragWidth( sal_Int32 nDragWidth ) 304 { 305 CopyData(); 306 mxData->mnStartDragWidth = nDragWidth; 307 } 308 309 sal_Int32 310 MouseSettings::GetStartDragWidth() const 311 { 312 return mxData->mnStartDragWidth; 313 } 314 315 void 316 MouseSettings::SetStartDragHeight( sal_Int32 nDragHeight ) 317 { 318 CopyData(); 319 mxData->mnStartDragHeight = nDragHeight; 320 } 321 322 sal_Int32 323 MouseSettings::GetStartDragHeight() const 324 { 325 return mxData->mnStartDragHeight; 326 } 327 328 sal_uInt16 329 MouseSettings::GetStartDragCode() 330 { 331 return MOUSE_LEFT; 332 } 333 334 sal_uInt16 335 MouseSettings::GetContextMenuCode() 336 { 337 return MOUSE_RIGHT; 338 } 339 340 sal_uInt16 341 MouseSettings::GetContextMenuClicks() 342 { 343 return 1; 344 } 345 346 sal_Int32 347 MouseSettings::GetScrollRepeat() 348 { 349 return 100; 350 } 351 352 sal_Int32 353 MouseSettings::GetButtonStartRepeat() 354 { 355 return 370; 356 } 357 358 void 359 MouseSettings::SetButtonRepeat( sal_Int32 nRepeat ) 360 { 361 CopyData(); 362 mxData->mnButtonRepeat = nRepeat; 363 } 364 365 sal_Int32 366 MouseSettings::GetButtonRepeat() const 367 { 368 return mxData->mnButtonRepeat; 369 } 370 371 sal_Int32 372 MouseSettings::GetActionDelay() 373 { 374 return 250; 375 } 376 377 void 378 MouseSettings::SetMenuDelay( sal_Int32 nDelay ) 379 { 380 CopyData(); 381 mxData->mnMenuDelay = nDelay; 382 } 383 384 sal_Int32 385 MouseSettings::GetMenuDelay() const 386 { 387 return mxData->mnMenuDelay; 388 } 389 390 void 391 MouseSettings::SetFollow( MouseFollowFlags nFollow ) 392 { 393 CopyData(); 394 mxData->mnFollow = nFollow; 395 } 396 397 MouseFollowFlags 398 MouseSettings::GetFollow() const 399 { 400 return mxData->mnFollow; 401 } 402 403 void 404 MouseSettings::SetMiddleButtonAction( MouseMiddleButtonAction nAction ) 405 { 406 CopyData(); 407 mxData->mnMiddleButtonAction = nAction; 408 } 409 410 MouseMiddleButtonAction 411 MouseSettings::GetMiddleButtonAction() const 412 { 413 return mxData->mnMiddleButtonAction; 414 } 415 416 void 417 MouseSettings::SetWheelBehavior( MouseWheelBehaviour nBehavior ) 418 { 419 CopyData(); 420 mxData->mnWheelBehavior = nBehavior; 421 } 422 423 MouseWheelBehaviour 424 MouseSettings::GetWheelBehavior() const 425 { 426 return mxData->mnWheelBehavior; 427 } 428 429 bool 430 MouseSettings::operator !=( const MouseSettings& rSet ) const 431 { 432 return !(*this == rSet); 433 } 434 435 MouseSettings::MouseSettings() 436 : mxData(std::make_shared<ImplMouseData>()) 437 { 438 } 439 440 void MouseSettings::CopyData() 441 { 442 // copy if other references exist 443 if (mxData.use_count() > 1) 444 { 445 mxData = std::make_shared<ImplMouseData>(*mxData); 446 } 447 } 448 449 bool MouseSettings::operator ==( const MouseSettings& rSet ) const 450 { 451 if ( mxData == rSet.mxData ) 452 return true; 453 454 return 455 (mxData->mnOptions == rSet.mxData->mnOptions) && 456 (mxData->mnDoubleClkTime == rSet.mxData->mnDoubleClkTime) && 457 (mxData->mnDoubleClkWidth == rSet.mxData->mnDoubleClkWidth) && 458 (mxData->mnDoubleClkHeight == rSet.mxData->mnDoubleClkHeight) && 459 (mxData->mnStartDragWidth == rSet.mxData->mnStartDragWidth) && 460 (mxData->mnStartDragHeight == rSet.mxData->mnStartDragHeight) && 461 (mxData->mnMiddleButtonAction == rSet.mxData->mnMiddleButtonAction) && 462 (mxData->mnButtonRepeat == rSet.mxData->mnButtonRepeat) && 463 (mxData->mnMenuDelay == rSet.mxData->mnMenuDelay) && 464 (mxData->mnFollow == rSet.mxData->mnFollow) && 465 (mxData->mnWheelBehavior == rSet.mxData->mnWheelBehavior ); 466 } 467 468 ImplStyleData::ImplStyleData() : 469 mnScrollBarSize(16), 470 mnSpinSize(16), 471 mnCursorSize(2), 472 mnAntialiasedMin(0), 473 mnCursorBlinkTime(STYLE_CURSOR_NOBLINKTIME), 474 mnDragFullOptions(DragFullOptions::All), 475 mnSelectionOptions(SelectionOptions::NONE), 476 mnDisplayOptions(DisplayOptions::NONE), 477 mnToolbarIconSize(ToolbarIconSize::Unknown), 478 mnOptions(StyleSettingsOptions::NONE), 479 mbAutoMnemonic(true), 480 meUseImagesInMenus(TRISTATE_INDET), 481 mnMinThumbSize(16), 482 mIconThemeSelector(std::make_shared<vcl::IconThemeSelector>()), 483 meContextMenuShortcuts(TRISTATE_INDET), 484 mnEdgeBlending(35), 485 maEdgeBlendingTopLeftColor(Color(0xC0, 0xC0, 0xC0)), 486 maEdgeBlendingBottomRightColor(Color(0x40, 0x40, 0x40)), 487 mnListBoxMaximumLineCount(25), 488 // For some reason this isn't actually the column count that gets used, at least on iOS, but 489 // instead what SvtAccessibilityOptions_Impl::GetColorValueSetColumnCount() in 490 // svtools/source/config/accessibilityoptions.cxx returns. 491 mnColorValueSetColumnCount(12), 492 #ifdef IOS 493 maListBoxPreviewDefaultLogicSize(Size(30, 30)), 494 #else 495 maListBoxPreviewDefaultLogicSize(Size(15, 7)), 496 #endif 497 maListBoxPreviewDefaultPixelSize(Size(0, 0)), // on-demand calculated in GetListBoxPreviewDefaultPixelSize(), 498 mbPreviewUsesCheckeredBackground(true) 499 { 500 SetStandardStyles(); 501 } 502 503 ImplStyleData::ImplStyleData( const ImplStyleData& rData ) : 504 maActiveBorderColor( rData.maActiveBorderColor ), 505 maActiveColor( rData.maActiveColor ), 506 maActiveTextColor( rData.maActiveTextColor ), 507 maAlternatingRowColor( rData.maAlternatingRowColor ), 508 maDefaultButtonTextColor( rData.maDefaultButtonTextColor ), 509 maButtonTextColor( rData.maButtonTextColor ), 510 maDefaultActionButtonTextColor( rData.maDefaultActionButtonTextColor ), 511 maActionButtonTextColor( rData.maActionButtonTextColor ), 512 maFlatButtonTextColor( rData.maFlatButtonTextColor ), 513 maDefaultButtonRolloverTextColor( rData.maDefaultButtonRolloverTextColor ), 514 maButtonRolloverTextColor( rData.maButtonRolloverTextColor ), 515 maDefaultActionButtonRolloverTextColor( rData.maDefaultActionButtonRolloverTextColor ), 516 maActionButtonRolloverTextColor( rData.maActionButtonRolloverTextColor ), 517 maFlatButtonRolloverTextColor( rData.maFlatButtonRolloverTextColor ), 518 maDefaultButtonPressedRolloverTextColor( rData.maDefaultButtonPressedRolloverTextColor ), 519 maButtonPressedRolloverTextColor( rData.maButtonPressedRolloverTextColor ), 520 maDefaultActionButtonPressedRolloverTextColor( rData.maDefaultActionButtonPressedRolloverTextColor ), 521 maActionButtonPressedRolloverTextColor( rData.maActionButtonPressedRolloverTextColor ), 522 maFlatButtonPressedRolloverTextColor( rData.maFlatButtonPressedRolloverTextColor ), 523 maCheckedColor( rData.maCheckedColor ), 524 maDarkShadowColor( rData.maDarkShadowColor ), 525 maDeactiveBorderColor( rData.maDeactiveBorderColor ), 526 maDeactiveColor( rData.maDeactiveColor ), 527 maDeactiveTextColor( rData.maDeactiveTextColor ), 528 maDialogColor( rData.maDialogColor ), 529 maDialogTextColor( rData.maDialogTextColor ), 530 maDisableColor( rData.maDisableColor ), 531 maFaceColor( rData.maFaceColor ), 532 maFieldColor( rData.maFieldColor ), 533 maFieldTextColor( rData.maFieldTextColor ), 534 maFieldRolloverTextColor( rData.maFieldRolloverTextColor ), 535 maGroupTextColor( rData.maGroupTextColor ), 536 maHelpColor( rData.maHelpColor ), 537 maHelpTextColor( rData.maHelpTextColor ), 538 maHighlightColor( rData.maHighlightColor ), 539 maHighlightTextColor( rData.maHighlightTextColor ), 540 maLabelTextColor( rData.maLabelTextColor ), 541 maLightBorderColor( rData.maLightBorderColor ), 542 maLightColor( rData.maLightColor ), 543 maLinkColor( rData.maLinkColor ), 544 maMenuBarColor( rData.maMenuBarColor ), 545 maMenuBarRolloverColor( rData.maMenuBarRolloverColor ), 546 maMenuBorderColor( rData.maMenuBorderColor ), 547 maMenuColor( rData.maMenuColor ), 548 maMenuHighlightColor( rData.maMenuHighlightColor ), 549 maMenuHighlightTextColor( rData.maMenuHighlightTextColor ), 550 maMenuTextColor( rData.maMenuTextColor ), 551 maListBoxWindowBackgroundColor( rData.maListBoxWindowBackgroundColor ), 552 maListBoxWindowTextColor( rData.maListBoxWindowTextColor ), 553 maListBoxWindowHighlightColor( rData.maListBoxWindowHighlightColor ), 554 maListBoxWindowHighlightTextColor( rData.maListBoxWindowHighlightTextColor ), 555 maMenuBarTextColor( rData.maMenuBarTextColor ), 556 maMenuBarRolloverTextColor( rData.maMenuBarRolloverTextColor ), 557 maMenuBarHighlightTextColor( rData.maMenuBarHighlightTextColor ), 558 maMonoColor( rData.maMonoColor ), 559 maRadioCheckTextColor( rData.maRadioCheckTextColor ), 560 maShadowColor( rData.maShadowColor ), 561 maWarningColor( rData.maWarningColor ), 562 maVisitedLinkColor( rData.maVisitedLinkColor ), 563 maToolTextColor( rData.maToolTextColor ), 564 maWindowColor( rData.maWindowColor ), 565 maWindowTextColor( rData.maWindowTextColor ), 566 maWorkspaceColor( rData.maWorkspaceColor ), 567 maActiveTabColor( rData.maActiveTabColor ), 568 maInactiveTabColor( rData.maInactiveTabColor ), 569 maTabTextColor( rData.maTabTextColor ), 570 maTabRolloverTextColor( rData.maTabRolloverTextColor ), 571 maTabHighlightTextColor( rData.maTabHighlightTextColor ), 572 maAppFont( rData.maAppFont ), 573 maHelpFont( rData.maAppFont ), 574 maTitleFont( rData.maTitleFont ), 575 maFloatTitleFont( rData.maFloatTitleFont ), 576 maMenuFont( rData.maMenuFont ), 577 maToolFont( rData.maToolFont ), 578 maLabelFont( rData.maLabelFont ), 579 maRadioCheckFont( rData.maRadioCheckFont ), 580 maPushButtonFont( rData.maPushButtonFont ), 581 maFieldFont( rData.maFieldFont ), 582 maIconFont( rData.maIconFont ), 583 maTabFont( rData.maTabFont ), 584 maGroupFont( rData.maGroupFont ), 585 mnTitleHeight(rData.mnTitleHeight), 586 mnFloatTitleHeight(rData.mnFloatTitleHeight), 587 mnScrollBarSize(rData.mnScrollBarSize), 588 mnSpinSize(rData.mnSpinSize), 589 mnCursorSize(rData.mnCursorSize), 590 mnAntialiasedMin(rData.mnAntialiasedMin), 591 mnCursorBlinkTime(rData.mnCursorBlinkTime), 592 mnDragFullOptions(rData.mnDragFullOptions), 593 mnSelectionOptions(rData.mnSelectionOptions), 594 mnDisplayOptions(rData.mnDisplayOptions), 595 mnToolbarIconSize(rData.mnToolbarIconSize), 596 mnUseFlatMenus(rData.mnUseFlatMenus), 597 mnOptions(rData.mnOptions), 598 mbHighContrast(rData.mbHighContrast), 599 mbUseSystemUIFonts(rData.mbUseSystemUIFonts), 600 mbUseFontAAFromSystem(rData.mbUseFontAAFromSystem), 601 mbAutoMnemonic(rData.mbAutoMnemonic), 602 meUseImagesInMenus(rData.meUseImagesInMenus), 603 mnUseFlatBorders(rData.mnUseFlatBorders), 604 mbPreferredUseImagesInMenus(rData.mbPreferredUseImagesInMenus), 605 mnMinThumbSize(rData.mnMinThumbSize), 606 mIconThemeSelector(std::make_shared<vcl::IconThemeSelector>(*rData.mIconThemeSelector)), 607 mIconTheme(rData.mIconTheme), 608 mbSkipDisabledInMenus(rData.mbSkipDisabledInMenus), 609 mbHideDisabledMenuItems(rData.mbHideDisabledMenuItems), 610 mbPreferredContextMenuShortcuts(rData.mbPreferredContextMenuShortcuts), 611 meContextMenuShortcuts(rData.meContextMenuShortcuts), 612 mbPrimaryButtonWarpsSlider(rData.mbPrimaryButtonWarpsSlider), 613 maDialogStyle( rData.maDialogStyle ), 614 mnEdgeBlending(rData.mnEdgeBlending), 615 maEdgeBlendingTopLeftColor(rData.maEdgeBlendingTopLeftColor), 616 maEdgeBlendingBottomRightColor(rData.maEdgeBlendingBottomRightColor), 617 mnListBoxMaximumLineCount(rData.mnListBoxMaximumLineCount), 618 mnColorValueSetColumnCount(rData.mnColorValueSetColumnCount), 619 maListBoxPreviewDefaultLogicSize(rData.maListBoxPreviewDefaultLogicSize), 620 maListBoxPreviewDefaultPixelSize(rData.maListBoxPreviewDefaultPixelSize), 621 mbPreviewUsesCheckeredBackground(rData.mbPreviewUsesCheckeredBackground), 622 maPersonaHeaderFooter( rData.maPersonaHeaderFooter ), 623 maPersonaHeaderBitmap( rData.maPersonaHeaderBitmap ), 624 maPersonaFooterBitmap( rData.maPersonaFooterBitmap ), 625 maPersonaMenuBarTextColor( rData.maPersonaMenuBarTextColor ) 626 { 627 if (rData.mIconThemeScanner) 628 mIconThemeScanner = std::make_shared<vcl::IconThemeScanner>(*rData.mIconThemeScanner); 629 } 630 631 void ImplStyleData::SetStandardStyles() 632 { 633 vcl::Font aStdFont( FAMILY_SWISS, Size( 0, 8 ) ); 634 aStdFont.SetCharSet( osl_getThreadTextEncoding() ); 635 aStdFont.SetWeight( WEIGHT_NORMAL ); 636 if (!utl::ConfigManager::IsFuzzing()) 637 aStdFont.SetFamilyName(utl::DefaultFontConfiguration::get().getUserInterfaceFont(LanguageTag("en"))); 638 else 639 aStdFont.SetFamilyName("Liberation Sans"); 640 maAppFont = aStdFont; 641 maHelpFont = aStdFont; 642 maMenuFont = aStdFont; 643 maToolFont = aStdFont; 644 maGroupFont = aStdFont; 645 maLabelFont = aStdFont; 646 maRadioCheckFont = aStdFont; 647 maPushButtonFont = aStdFont; 648 maFieldFont = aStdFont; 649 maIconFont = aStdFont; 650 maTabFont = aStdFont; 651 aStdFont.SetWeight( WEIGHT_BOLD ); 652 maFloatTitleFont = aStdFont; 653 maTitleFont = aStdFont; 654 655 maFaceColor = COL_LIGHTGRAY; 656 maCheckedColor = Color( 0xCC, 0xCC, 0xCC ); 657 maLightColor = COL_WHITE; 658 maLightBorderColor = COL_LIGHTGRAY; 659 maShadowColor = COL_GRAY; 660 maDarkShadowColor = COL_BLACK; 661 662 maWarningColor = COL_YELLOW; 663 664 maDefaultButtonTextColor = COL_BLACK; 665 maButtonTextColor = COL_BLACK; 666 maDefaultActionButtonTextColor = COL_BLACK; 667 maActionButtonTextColor = COL_BLACK; 668 maFlatButtonTextColor = COL_BLACK; 669 maDefaultButtonRolloverTextColor = COL_BLACK; 670 maButtonRolloverTextColor = COL_BLACK; 671 maDefaultActionButtonRolloverTextColor = COL_BLACK; 672 maActionButtonRolloverTextColor = COL_BLACK; 673 maFlatButtonRolloverTextColor = COL_BLACK; 674 maDefaultButtonPressedRolloverTextColor = COL_BLACK; 675 maButtonPressedRolloverTextColor = COL_BLACK; 676 maDefaultActionButtonPressedRolloverTextColor = COL_BLACK; 677 maActionButtonPressedRolloverTextColor = COL_BLACK; 678 maFlatButtonPressedRolloverTextColor = COL_BLACK; 679 680 maRadioCheckTextColor = COL_BLACK; 681 maGroupTextColor = COL_BLACK; 682 maLabelTextColor = COL_BLACK; 683 maWindowColor = COL_WHITE; 684 maWindowTextColor = COL_BLACK; 685 maDialogColor = COL_LIGHTGRAY; 686 maDialogTextColor = COL_BLACK; 687 maWorkspaceColor = Color( 0xDF, 0xDF, 0xDE ); 688 maMonoColor = COL_BLACK; 689 maFieldColor = COL_WHITE; 690 maFieldTextColor = COL_BLACK; 691 maFieldRolloverTextColor = COL_BLACK; 692 maActiveBorderColor = COL_LIGHTGRAY; 693 maDeactiveColor = COL_GRAY; 694 maDeactiveTextColor = COL_LIGHTGRAY; 695 maDeactiveBorderColor = COL_LIGHTGRAY; 696 maMenuColor = COL_LIGHTGRAY; 697 maMenuBarColor = COL_LIGHTGRAY; 698 maMenuBarRolloverColor = COL_BLUE; 699 maMenuBorderColor = COL_LIGHTGRAY; 700 maMenuTextColor = COL_BLACK; 701 maListBoxWindowBackgroundColor = COL_WHITE; 702 maListBoxWindowTextColor = COL_BLACK; 703 maListBoxWindowHighlightColor = COL_BLUE; 704 maListBoxWindowHighlightTextColor = COL_WHITE; 705 maMenuBarTextColor = COL_BLACK; 706 maMenuBarRolloverTextColor = COL_WHITE; 707 maMenuBarHighlightTextColor = COL_WHITE; 708 maMenuHighlightColor = COL_BLUE; 709 maMenuHighlightTextColor = COL_WHITE; 710 maHighlightColor = COL_BLUE; 711 maHighlightTextColor = COL_WHITE; 712 // make active like highlight, except with a small contrast 713 maActiveColor = maHighlightColor; 714 maActiveColor.IncreaseLuminance(32); 715 maActiveTextColor = maHighlightTextColor; 716 maActiveTabColor = COL_WHITE; 717 maInactiveTabColor = COL_LIGHTGRAY; 718 maTabTextColor = COL_BLACK; 719 maTabRolloverTextColor = COL_BLACK; 720 maTabHighlightTextColor = COL_BLACK; 721 maDisableColor = COL_GRAY; 722 maHelpColor = Color( 0xFF, 0xFF, 0xE0 ); 723 maHelpTextColor = COL_BLACK; 724 maLinkColor = COL_BLUE; 725 maVisitedLinkColor = Color( 0x00, 0x00, 0xCC ); 726 maToolTextColor = COL_BLACK; 727 maAlternatingRowColor = Color( 0xEE, 0xEE, 0xEE ); 728 729 mnTitleHeight = 18; 730 mnFloatTitleHeight = 13; 731 mbHighContrast = false; 732 mbUseSystemUIFonts = true; 733 mbUseFontAAFromSystem = true; 734 mnUseFlatBorders = false; 735 mnUseFlatMenus = false; 736 mbPreferredUseImagesInMenus = true; 737 mbSkipDisabledInMenus = false; 738 mbHideDisabledMenuItems = false; 739 mbPreferredContextMenuShortcuts = true; 740 mbPrimaryButtonWarpsSlider = false; 741 } 742 743 StyleSettings::StyleSettings() 744 : mxData(std::make_shared<ImplStyleData>()) 745 { 746 } 747 748 void 749 StyleSettings::SetFaceColor( const Color& rColor ) 750 { 751 CopyData(); 752 mxData->maFaceColor = rColor; 753 } 754 755 const Color& 756 StyleSettings::GetFaceColor() const 757 { 758 return mxData->maFaceColor; 759 } 760 761 void 762 StyleSettings::SetCheckedColor( const Color& rColor ) 763 { 764 CopyData(); 765 mxData->maCheckedColor = rColor; 766 } 767 768 const Color& 769 StyleSettings::GetCheckedColor() const 770 { 771 return mxData->maCheckedColor; 772 } 773 774 void 775 StyleSettings::SetLightColor( const Color& rColor ) 776 { 777 CopyData(); 778 mxData->maLightColor = rColor; 779 } 780 781 const Color& 782 StyleSettings::GetLightColor() const 783 { 784 return mxData->maLightColor; 785 } 786 787 void 788 StyleSettings::SetLightBorderColor( const Color& rColor ) 789 { 790 CopyData(); 791 mxData->maLightBorderColor = rColor; 792 } 793 794 const Color& 795 StyleSettings::GetLightBorderColor() const 796 { 797 return mxData->maLightBorderColor; 798 } 799 800 void 801 StyleSettings::SetWarningColor( const Color& rColor ) 802 { 803 CopyData(); 804 mxData->maWarningColor = rColor; 805 } 806 807 const Color& 808 StyleSettings::GetWarningColor() const 809 { 810 return mxData->maWarningColor; 811 } 812 813 void 814 StyleSettings::SetShadowColor( const Color& rColor ) 815 { 816 CopyData(); 817 mxData->maShadowColor = rColor; 818 } 819 820 const Color& 821 StyleSettings::GetShadowColor() const 822 { 823 return mxData->maShadowColor; 824 } 825 826 void 827 StyleSettings::SetDarkShadowColor( const Color& rColor ) 828 { 829 CopyData(); 830 mxData->maDarkShadowColor = rColor; 831 } 832 833 const Color& 834 StyleSettings::GetDarkShadowColor() const 835 { 836 return mxData->maDarkShadowColor; 837 } 838 839 void 840 StyleSettings::SetDefaultButtonTextColor( const Color& rColor ) 841 { 842 CopyData(); 843 mxData->maDefaultButtonTextColor = rColor; 844 } 845 846 const Color& 847 StyleSettings::GetDefaultButtonTextColor() const 848 { 849 return mxData->maDefaultButtonTextColor; 850 } 851 852 void 853 StyleSettings::SetButtonTextColor( const Color& rColor ) 854 { 855 CopyData(); 856 mxData->maButtonTextColor = rColor; 857 } 858 859 const Color& 860 StyleSettings::GetButtonTextColor() const 861 { 862 return mxData->maButtonTextColor; 863 } 864 865 void 866 StyleSettings::SetDefaultActionButtonTextColor( const Color& rColor ) 867 { 868 CopyData(); 869 mxData->maDefaultActionButtonTextColor = rColor; 870 } 871 872 const Color& 873 StyleSettings::GetDefaultActionButtonTextColor() const 874 { 875 return mxData->maDefaultActionButtonTextColor; 876 } 877 878 void 879 StyleSettings::SetActionButtonTextColor( const Color& rColor ) 880 { 881 CopyData(); 882 mxData->maActionButtonTextColor = rColor; 883 } 884 885 const Color& 886 StyleSettings::GetActionButtonTextColor() const 887 { 888 return mxData->maActionButtonTextColor; 889 } 890 891 void 892 StyleSettings::SetFlatButtonTextColor( const Color& rColor ) 893 { 894 CopyData(); 895 mxData->maFlatButtonTextColor = rColor; 896 } 897 898 const Color& 899 StyleSettings::GetFlatButtonTextColor() const 900 { 901 return mxData->maFlatButtonTextColor; 902 } 903 904 void 905 StyleSettings::SetDefaultButtonRolloverTextColor( const Color& rColor ) 906 { 907 CopyData(); 908 mxData->maDefaultButtonRolloverTextColor = rColor; 909 } 910 911 const Color& 912 StyleSettings::GetDefaultButtonRolloverTextColor() const 913 { 914 return mxData->maDefaultButtonRolloverTextColor; 915 } 916 917 void 918 StyleSettings::SetButtonRolloverTextColor( const Color& rColor ) 919 { 920 CopyData(); 921 mxData->maButtonRolloverTextColor = rColor; 922 } 923 924 const Color& 925 StyleSettings::GetButtonRolloverTextColor() const 926 { 927 return mxData->maButtonRolloverTextColor; 928 } 929 930 void 931 StyleSettings::SetDefaultActionButtonRolloverTextColor( const Color& rColor ) 932 { 933 CopyData(); 934 mxData->maDefaultActionButtonRolloverTextColor = rColor; 935 } 936 937 const Color& 938 StyleSettings::GetDefaultActionButtonRolloverTextColor() const 939 { 940 return mxData->maDefaultActionButtonRolloverTextColor; 941 } 942 943 void 944 StyleSettings::SetActionButtonRolloverTextColor( const Color& rColor ) 945 { 946 CopyData(); 947 mxData->maActionButtonRolloverTextColor = rColor; 948 } 949 950 const Color& 951 StyleSettings::GetActionButtonRolloverTextColor() const 952 { 953 return mxData->maActionButtonRolloverTextColor; 954 } 955 956 void 957 StyleSettings::SetFlatButtonRolloverTextColor( const Color& rColor ) 958 { 959 CopyData(); 960 mxData->maFlatButtonRolloverTextColor = rColor; 961 } 962 963 const Color& 964 StyleSettings::GetFlatButtonRolloverTextColor() const 965 { 966 return mxData->maFlatButtonRolloverTextColor; 967 } 968 969 void 970 StyleSettings::SetDefaultButtonPressedRolloverTextColor( const Color& rColor ) 971 { 972 CopyData(); 973 mxData->maDefaultButtonPressedRolloverTextColor = rColor; 974 } 975 976 const Color& 977 StyleSettings::GetDefaultButtonPressedRolloverTextColor() const 978 { 979 return mxData->maDefaultButtonPressedRolloverTextColor; 980 } 981 982 void 983 StyleSettings::SetButtonPressedRolloverTextColor( const Color& rColor ) 984 { 985 CopyData(); 986 mxData->maButtonPressedRolloverTextColor = rColor; 987 } 988 989 const Color& 990 StyleSettings::GetButtonPressedRolloverTextColor() const 991 { 992 return mxData->maButtonPressedRolloverTextColor; 993 } 994 995 void 996 StyleSettings::SetDefaultActionButtonPressedRolloverTextColor( const Color& rColor ) 997 { 998 CopyData(); 999 mxData->maDefaultActionButtonPressedRolloverTextColor = rColor; 1000 } 1001 1002 const Color& 1003 StyleSettings::GetDefaultActionButtonPressedRolloverTextColor() const 1004 { 1005 return mxData->maDefaultActionButtonPressedRolloverTextColor; 1006 } 1007 1008 void 1009 StyleSettings::SetActionButtonPressedRolloverTextColor( const Color& rColor ) 1010 { 1011 CopyData(); 1012 mxData->maActionButtonPressedRolloverTextColor = rColor; 1013 } 1014 1015 const Color& 1016 StyleSettings::GetActionButtonPressedRolloverTextColor() const 1017 { 1018 return mxData->maActionButtonPressedRolloverTextColor; 1019 } 1020 1021 void 1022 StyleSettings::SetFlatButtonPressedRolloverTextColor( const Color& rColor ) 1023 { 1024 CopyData(); 1025 mxData->maFlatButtonPressedRolloverTextColor = rColor; 1026 } 1027 1028 const Color& 1029 StyleSettings::GetFlatButtonPressedRolloverTextColor() const 1030 { 1031 return mxData->maFlatButtonPressedRolloverTextColor; 1032 } 1033 1034 void 1035 StyleSettings::SetRadioCheckTextColor( const Color& rColor ) 1036 { 1037 CopyData(); 1038 mxData->maRadioCheckTextColor = rColor; 1039 } 1040 1041 const Color& 1042 StyleSettings::GetRadioCheckTextColor() const 1043 { 1044 return mxData->maRadioCheckTextColor; 1045 } 1046 1047 void 1048 StyleSettings::SetGroupTextColor( const Color& rColor ) 1049 { 1050 CopyData(); 1051 mxData->maGroupTextColor = rColor; 1052 } 1053 1054 const Color& 1055 StyleSettings::GetGroupTextColor() const 1056 { 1057 return mxData->maGroupTextColor; 1058 } 1059 1060 void 1061 StyleSettings::SetLabelTextColor( const Color& rColor ) 1062 { 1063 CopyData(); 1064 mxData->maLabelTextColor = rColor; 1065 } 1066 1067 const Color& 1068 StyleSettings::GetLabelTextColor() const 1069 { 1070 return mxData->maLabelTextColor; 1071 } 1072 1073 void 1074 StyleSettings::SetWindowColor( const Color& rColor ) 1075 { 1076 CopyData(); 1077 mxData->maWindowColor = rColor; 1078 } 1079 1080 const Color& 1081 StyleSettings::GetWindowColor() const 1082 { 1083 return mxData->maWindowColor; 1084 } 1085 1086 void 1087 StyleSettings::SetWindowTextColor( const Color& rColor ) 1088 { 1089 CopyData(); 1090 mxData->maWindowTextColor = rColor; 1091 } 1092 1093 const Color& 1094 StyleSettings::GetWindowTextColor() const 1095 { 1096 return mxData->maWindowTextColor; 1097 } 1098 1099 void 1100 StyleSettings::SetDialogColor( const Color& rColor ) 1101 { 1102 CopyData(); 1103 mxData->maDialogColor = rColor; 1104 } 1105 1106 const Color& 1107 StyleSettings::GetDialogColor() const 1108 { 1109 return mxData->maDialogColor; 1110 } 1111 1112 void 1113 StyleSettings::SetDialogTextColor( const Color& rColor ) 1114 { 1115 CopyData(); 1116 mxData->maDialogTextColor = rColor; 1117 } 1118 1119 const Color& 1120 StyleSettings::GetDialogTextColor() const 1121 { 1122 return mxData->maDialogTextColor; 1123 } 1124 1125 void 1126 StyleSettings::SetWorkspaceColor( const Color& rColor ) 1127 { 1128 CopyData(); 1129 mxData->maWorkspaceColor = rColor; 1130 } 1131 1132 const Color& 1133 StyleSettings::GetWorkspaceColor() const 1134 { 1135 return mxData->maWorkspaceColor; 1136 } 1137 1138 void 1139 StyleSettings::SetFieldColor( const Color& rColor ) 1140 { 1141 CopyData(); 1142 mxData->maFieldColor = rColor; 1143 } 1144 1145 const Color& 1146 StyleSettings::GetFieldColor() const 1147 { 1148 return mxData->maFieldColor; 1149 } 1150 1151 void 1152 StyleSettings::SetFieldTextColor( const Color& rColor ) 1153 { 1154 CopyData(); 1155 mxData->maFieldTextColor = rColor; 1156 } 1157 1158 const Color& 1159 StyleSettings::GetFieldTextColor() const 1160 { 1161 return mxData->maFieldTextColor; 1162 } 1163 1164 void 1165 StyleSettings::SetFieldRolloverTextColor( const Color& rColor ) 1166 { 1167 CopyData(); 1168 mxData->maFieldRolloverTextColor = rColor; 1169 } 1170 1171 const Color& 1172 StyleSettings::GetFieldRolloverTextColor() const 1173 { 1174 return mxData->maFieldRolloverTextColor; 1175 } 1176 1177 void 1178 StyleSettings::SetActiveColor( const Color& rColor ) 1179 { 1180 CopyData(); 1181 mxData->maActiveColor = rColor; 1182 } 1183 1184 const Color& 1185 StyleSettings::GetActiveColor() const 1186 { 1187 return mxData->maActiveColor; 1188 } 1189 1190 void 1191 StyleSettings::SetActiveTextColor( const Color& rColor ) 1192 { 1193 CopyData(); 1194 mxData->maActiveTextColor = rColor; 1195 } 1196 1197 const Color& 1198 StyleSettings::GetActiveTextColor() const 1199 { 1200 return mxData->maActiveTextColor; 1201 } 1202 1203 void 1204 StyleSettings::SetActiveBorderColor( const Color& rColor ) 1205 { 1206 CopyData(); 1207 mxData->maActiveBorderColor = rColor; 1208 } 1209 1210 const Color& 1211 StyleSettings::GetActiveBorderColor() const 1212 { 1213 return mxData->maActiveBorderColor; 1214 } 1215 1216 void 1217 StyleSettings::SetDeactiveColor( const Color& rColor ) 1218 { 1219 CopyData(); 1220 mxData->maDeactiveColor = rColor; 1221 } 1222 1223 const Color& 1224 StyleSettings::GetDeactiveColor() const 1225 { 1226 return mxData->maDeactiveColor; 1227 } 1228 1229 void 1230 StyleSettings::SetDeactiveTextColor( const Color& rColor ) 1231 { 1232 CopyData(); 1233 mxData->maDeactiveTextColor = rColor; 1234 } 1235 1236 const Color& 1237 StyleSettings::GetDeactiveTextColor() const 1238 { 1239 return mxData->maDeactiveTextColor; 1240 } 1241 1242 void 1243 StyleSettings::SetDeactiveBorderColor( const Color& rColor ) 1244 { 1245 CopyData(); 1246 mxData->maDeactiveBorderColor = rColor; 1247 } 1248 1249 const Color& 1250 StyleSettings::GetDeactiveBorderColor() const 1251 { 1252 return mxData->maDeactiveBorderColor; 1253 } 1254 1255 void 1256 StyleSettings::SetHighlightColor( const Color& rColor ) 1257 { 1258 CopyData(); 1259 mxData->maHighlightColor = rColor; 1260 } 1261 1262 const Color& 1263 StyleSettings::GetHighlightColor() const 1264 { 1265 return mxData->maHighlightColor; 1266 } 1267 1268 void 1269 StyleSettings::SetHighlightTextColor( const Color& rColor ) 1270 { 1271 CopyData(); 1272 mxData->maHighlightTextColor = rColor; 1273 } 1274 1275 const Color& 1276 StyleSettings::GetHighlightTextColor() const 1277 { 1278 return mxData->maHighlightTextColor; 1279 } 1280 1281 void 1282 StyleSettings::SetDisableColor( const Color& rColor ) 1283 { 1284 CopyData(); 1285 mxData->maDisableColor = rColor; 1286 } 1287 1288 const Color& 1289 StyleSettings::GetDisableColor() const 1290 { 1291 return mxData->maDisableColor; 1292 } 1293 1294 void 1295 StyleSettings::SetHelpColor( const Color& rColor ) 1296 { 1297 CopyData(); 1298 mxData->maHelpColor = rColor; 1299 } 1300 1301 const Color& 1302 StyleSettings::GetHelpColor() const 1303 { 1304 return mxData->maHelpColor; 1305 } 1306 1307 void 1308 StyleSettings::SetHelpTextColor( const Color& rColor ) 1309 { 1310 CopyData(); 1311 mxData->maHelpTextColor = rColor; 1312 } 1313 1314 const Color& 1315 StyleSettings::GetHelpTextColor() const 1316 { 1317 return mxData->maHelpTextColor; 1318 } 1319 1320 void 1321 StyleSettings::SetMenuColor( const Color& rColor ) 1322 { 1323 CopyData(); 1324 mxData->maMenuColor = rColor; 1325 } 1326 1327 const Color& 1328 StyleSettings::GetMenuColor() const 1329 { 1330 return mxData->maMenuColor; 1331 } 1332 1333 void 1334 StyleSettings::SetMenuBarColor( const Color& rColor ) 1335 { 1336 CopyData(); 1337 mxData->maMenuBarColor = rColor; 1338 } 1339 1340 const Color& 1341 StyleSettings::GetMenuBarColor() const 1342 { 1343 return mxData->maMenuBarColor; 1344 } 1345 1346 void 1347 StyleSettings::SetMenuBarRolloverColor( const Color& rColor ) 1348 { 1349 CopyData(); 1350 mxData->maMenuBarRolloverColor = rColor; 1351 } 1352 1353 const Color& 1354 StyleSettings::GetMenuBarRolloverColor() const 1355 { 1356 return mxData->maMenuBarRolloverColor; 1357 } 1358 1359 void 1360 StyleSettings::SetMenuBorderColor( const Color& rColor ) 1361 { 1362 CopyData(); 1363 mxData->maMenuBorderColor = rColor; 1364 } 1365 1366 const Color& 1367 StyleSettings::GetMenuBorderColor() const 1368 { 1369 return mxData->maMenuBorderColor; 1370 } 1371 1372 void 1373 StyleSettings::SetMenuTextColor( const Color& rColor ) 1374 { 1375 CopyData(); 1376 mxData->maMenuTextColor = rColor; 1377 } 1378 1379 const Color& 1380 StyleSettings::GetMenuTextColor() const 1381 { 1382 return mxData->maMenuTextColor; 1383 } 1384 1385 void 1386 StyleSettings::SetMenuBarTextColor( const Color& rColor ) 1387 { 1388 CopyData(); 1389 mxData->maMenuBarTextColor = rColor; 1390 } 1391 1392 const Color& 1393 StyleSettings::GetMenuBarTextColor() const 1394 { 1395 return mxData->maMenuBarTextColor; 1396 } 1397 1398 void 1399 StyleSettings::SetMenuBarRolloverTextColor( const Color& rColor ) 1400 { 1401 CopyData(); 1402 mxData->maMenuBarRolloverTextColor = rColor; 1403 } 1404 1405 const Color& 1406 StyleSettings::GetMenuBarRolloverTextColor() const 1407 { 1408 return mxData->maMenuBarRolloverTextColor; 1409 } 1410 1411 void 1412 StyleSettings::SetMenuBarHighlightTextColor( const Color& rColor ) 1413 { 1414 CopyData(); 1415 mxData->maMenuBarHighlightTextColor = rColor; 1416 } 1417 1418 const Color& 1419 StyleSettings::GetMenuBarHighlightTextColor() const 1420 { 1421 return mxData->maMenuBarHighlightTextColor; 1422 } 1423 1424 void 1425 StyleSettings::SetMenuHighlightColor( const Color& rColor ) 1426 { 1427 CopyData(); 1428 mxData->maMenuHighlightColor = rColor; 1429 } 1430 1431 const Color& 1432 StyleSettings::GetMenuHighlightColor() const 1433 { 1434 return mxData->maMenuHighlightColor; 1435 } 1436 1437 void 1438 StyleSettings::SetMenuHighlightTextColor( const Color& rColor ) 1439 { 1440 CopyData(); 1441 mxData->maMenuHighlightTextColor = rColor; 1442 } 1443 1444 const Color& 1445 StyleSettings::GetMenuHighlightTextColor() const 1446 { 1447 return mxData->maMenuHighlightTextColor; 1448 } 1449 1450 void 1451 StyleSettings::SetListBoxWindowBackgroundColor( const Color& rColor ) 1452 { 1453 CopyData(); 1454 mxData->maListBoxWindowBackgroundColor = rColor; 1455 } 1456 1457 const Color& 1458 StyleSettings::GetListBoxWindowBackgroundColor() const 1459 { 1460 return mxData->maListBoxWindowBackgroundColor; 1461 } 1462 1463 void 1464 StyleSettings::SetListBoxWindowTextColor( const Color& rColor ) 1465 { 1466 CopyData(); 1467 mxData->maListBoxWindowTextColor = rColor; 1468 } 1469 1470 const Color& 1471 StyleSettings::GetListBoxWindowTextColor() const 1472 { 1473 return mxData->maListBoxWindowTextColor; 1474 } 1475 1476 void 1477 StyleSettings::SetListBoxWindowHighlightColor( const Color& rColor ) 1478 { 1479 CopyData(); 1480 mxData->maListBoxWindowHighlightColor = rColor; 1481 } 1482 1483 const Color& 1484 StyleSettings::GetListBoxWindowHighlightColor() const 1485 { 1486 return mxData->maListBoxWindowHighlightColor; 1487 } 1488 1489 void 1490 StyleSettings::SetListBoxWindowHighlightTextColor( const Color& rColor ) 1491 { 1492 CopyData(); 1493 mxData->maListBoxWindowHighlightTextColor = rColor; 1494 } 1495 1496 const Color& 1497 StyleSettings::GetListBoxWindowHighlightTextColor() const 1498 { 1499 return mxData->maListBoxWindowHighlightTextColor; 1500 } 1501 1502 void 1503 StyleSettings::SetTabTextColor( const Color& rColor ) 1504 { 1505 CopyData(); 1506 mxData->maTabTextColor = rColor; 1507 } 1508 1509 const Color& 1510 StyleSettings::GetTabTextColor() const 1511 { 1512 return mxData->maTabTextColor; 1513 } 1514 1515 void 1516 StyleSettings::SetTabRolloverTextColor( const Color& rColor ) 1517 { 1518 CopyData(); 1519 mxData->maTabRolloverTextColor = rColor; 1520 } 1521 1522 const Color& 1523 StyleSettings::GetTabRolloverTextColor() const 1524 { 1525 return mxData->maTabRolloverTextColor; 1526 } 1527 1528 void 1529 StyleSettings::SetTabHighlightTextColor( const Color& rColor ) 1530 { 1531 CopyData(); 1532 mxData->maTabHighlightTextColor = rColor; 1533 } 1534 1535 const Color& 1536 StyleSettings::GetTabHighlightTextColor() const 1537 { 1538 return mxData->maTabHighlightTextColor; 1539 } 1540 1541 void 1542 StyleSettings::SetLinkColor( const Color& rColor ) 1543 { 1544 CopyData(); 1545 mxData->maLinkColor = rColor; 1546 } 1547 1548 const Color& 1549 StyleSettings::GetLinkColor() const 1550 { 1551 return mxData->maLinkColor; 1552 } 1553 1554 void 1555 StyleSettings::SetVisitedLinkColor( const Color& rColor ) 1556 { 1557 CopyData(); 1558 mxData->maVisitedLinkColor = rColor; 1559 } 1560 1561 const Color& 1562 StyleSettings::GetVisitedLinkColor() const 1563 { 1564 return mxData->maVisitedLinkColor; 1565 } 1566 1567 void 1568 StyleSettings::SetToolTextColor( const Color& rColor ) 1569 { 1570 CopyData(); 1571 mxData->maToolTextColor = rColor; 1572 } 1573 1574 const Color& 1575 StyleSettings::GetToolTextColor() const 1576 { 1577 return mxData->maToolTextColor; 1578 } 1579 1580 void 1581 StyleSettings::SetMonoColor( const Color& rColor ) 1582 { 1583 CopyData(); 1584 mxData->maMonoColor = rColor; 1585 } 1586 1587 const Color& 1588 StyleSettings::GetMonoColor() const 1589 { 1590 return mxData->maMonoColor; 1591 } 1592 1593 void 1594 StyleSettings::SetActiveTabColor( const Color& rColor ) 1595 { 1596 CopyData(); 1597 mxData->maActiveTabColor = rColor; 1598 } 1599 1600 const Color& 1601 StyleSettings::GetActiveTabColor() const 1602 { 1603 return mxData->maActiveTabColor; 1604 } 1605 1606 void 1607 StyleSettings::SetInactiveTabColor( const Color& rColor ) 1608 { 1609 CopyData(); 1610 mxData->maInactiveTabColor = rColor; 1611 } 1612 1613 const Color& 1614 StyleSettings::GetInactiveTabColor() const 1615 { 1616 return mxData->maInactiveTabColor; 1617 } 1618 1619 void StyleSettings::SetAlternatingRowColor(const Color& rColor) 1620 { 1621 CopyData(); 1622 mxData->maAlternatingRowColor = rColor; 1623 } 1624 1625 const Color& 1626 StyleSettings::GetAlternatingRowColor() const 1627 { 1628 return mxData->maAlternatingRowColor; 1629 } 1630 1631 void 1632 StyleSettings::SetUseSystemUIFonts( bool bUseSystemUIFonts ) 1633 { 1634 CopyData(); 1635 mxData->mbUseSystemUIFonts = bUseSystemUIFonts; 1636 } 1637 1638 bool 1639 StyleSettings::GetUseSystemUIFonts() const 1640 { 1641 return mxData->mbUseSystemUIFonts; 1642 } 1643 1644 void StyleSettings::SetUseFontAAFromSystem(bool bUseFontAAFromSystem) 1645 { 1646 CopyData(); 1647 mxData->mbUseFontAAFromSystem = bUseFontAAFromSystem; 1648 } 1649 1650 bool StyleSettings::GetUseFontAAFromSystem() const 1651 { 1652 return mxData->mbUseFontAAFromSystem; 1653 } 1654 1655 void 1656 StyleSettings::SetUseFlatBorders( bool bUseFlatBorders ) 1657 { 1658 CopyData(); 1659 mxData->mnUseFlatBorders = bUseFlatBorders; 1660 } 1661 1662 bool 1663 StyleSettings::GetUseFlatBorders() const 1664 { 1665 return mxData->mnUseFlatBorders; 1666 } 1667 1668 void 1669 StyleSettings::SetUseFlatMenus( bool bUseFlatMenus ) 1670 { 1671 CopyData(); 1672 mxData->mnUseFlatMenus = bUseFlatMenus; 1673 } 1674 1675 bool 1676 StyleSettings::GetUseFlatMenus() const 1677 { 1678 return mxData->mnUseFlatMenus; 1679 } 1680 1681 void 1682 StyleSettings::SetUseImagesInMenus( TriState eUseImagesInMenus ) 1683 { 1684 CopyData(); 1685 mxData->meUseImagesInMenus = eUseImagesInMenus; 1686 } 1687 1688 void 1689 StyleSettings::SetPreferredUseImagesInMenus( bool bPreferredUseImagesInMenus ) 1690 { 1691 CopyData(); 1692 mxData->mbPreferredUseImagesInMenus = bPreferredUseImagesInMenus; 1693 } 1694 1695 bool 1696 StyleSettings::GetPreferredUseImagesInMenus() const 1697 { 1698 return mxData->mbPreferredUseImagesInMenus; 1699 } 1700 1701 void 1702 StyleSettings::SetSkipDisabledInMenus( bool bSkipDisabledInMenus ) 1703 { 1704 CopyData(); 1705 mxData->mbSkipDisabledInMenus = bSkipDisabledInMenus; 1706 } 1707 1708 bool 1709 StyleSettings::GetSkipDisabledInMenus() const 1710 { 1711 return mxData->mbSkipDisabledInMenus; 1712 } 1713 1714 void 1715 StyleSettings::SetHideDisabledMenuItems( bool bHideDisabledMenuItems ) 1716 { 1717 CopyData(); 1718 mxData->mbHideDisabledMenuItems = bHideDisabledMenuItems; 1719 } 1720 1721 bool 1722 StyleSettings::GetHideDisabledMenuItems() const 1723 { 1724 return mxData->mbHideDisabledMenuItems; 1725 } 1726 1727 void 1728 StyleSettings::SetContextMenuShortcuts( TriState eContextMenuShortcuts ) 1729 { 1730 CopyData(); 1731 mxData->meContextMenuShortcuts = eContextMenuShortcuts; 1732 } 1733 1734 bool 1735 StyleSettings::GetContextMenuShortcuts() const 1736 { 1737 switch (mxData->meContextMenuShortcuts) 1738 { 1739 case TRISTATE_FALSE: 1740 return false; 1741 case TRISTATE_TRUE: 1742 return true; 1743 default: // TRISTATE_INDET: 1744 return GetPreferredContextMenuShortcuts(); 1745 } 1746 } 1747 1748 void 1749 StyleSettings::SetPreferredContextMenuShortcuts( bool bContextMenuShortcuts ) 1750 { 1751 CopyData(); 1752 mxData->mbPreferredContextMenuShortcuts = bContextMenuShortcuts; 1753 } 1754 1755 bool 1756 StyleSettings::GetPreferredContextMenuShortcuts() const 1757 { 1758 return mxData->mbPreferredContextMenuShortcuts; 1759 } 1760 1761 void 1762 StyleSettings::SetPrimaryButtonWarpsSlider( bool bPrimaryButtonWarpsSlider ) 1763 { 1764 CopyData(); 1765 mxData->mbPrimaryButtonWarpsSlider = bPrimaryButtonWarpsSlider; 1766 } 1767 1768 bool 1769 StyleSettings::GetPrimaryButtonWarpsSlider() const 1770 { 1771 return mxData->mbPrimaryButtonWarpsSlider; 1772 } 1773 1774 void 1775 StyleSettings::SetAppFont( const vcl::Font& rFont ) 1776 { 1777 CopyData(); 1778 mxData->maAppFont = rFont; 1779 } 1780 1781 const vcl::Font& 1782 StyleSettings::GetAppFont() const 1783 { 1784 return mxData->maAppFont; 1785 } 1786 1787 void 1788 StyleSettings::SetHelpFont( const vcl::Font& rFont ) 1789 { 1790 CopyData(); 1791 mxData->maHelpFont = rFont; 1792 } 1793 1794 const vcl::Font& 1795 StyleSettings::GetHelpFont() const 1796 { 1797 return mxData->maHelpFont; 1798 } 1799 1800 void 1801 StyleSettings::SetTitleFont( const vcl::Font& rFont ) 1802 { 1803 CopyData(); 1804 mxData->maTitleFont = rFont; 1805 } 1806 1807 const vcl::Font& 1808 StyleSettings::GetTitleFont() const 1809 { 1810 return mxData->maTitleFont; 1811 } 1812 1813 void 1814 StyleSettings::SetFloatTitleFont( const vcl::Font& rFont ) 1815 { 1816 CopyData(); 1817 mxData->maFloatTitleFont = rFont; 1818 } 1819 1820 const vcl::Font& 1821 StyleSettings::GetFloatTitleFont() const 1822 { 1823 return mxData->maFloatTitleFont; 1824 } 1825 1826 void 1827 StyleSettings::SetMenuFont( const vcl::Font& rFont ) 1828 { 1829 CopyData(); 1830 mxData->maMenuFont = rFont; 1831 } 1832 1833 const vcl::Font& 1834 StyleSettings::GetMenuFont() const 1835 { 1836 return mxData->maMenuFont; 1837 } 1838 1839 void 1840 StyleSettings::SetToolFont( const vcl::Font& rFont ) 1841 { 1842 CopyData(); 1843 mxData->maToolFont = rFont; 1844 } 1845 1846 const vcl::Font& 1847 StyleSettings::GetToolFont() const 1848 { 1849 return mxData->maToolFont; 1850 } 1851 1852 void 1853 StyleSettings::SetGroupFont( const vcl::Font& rFont ) 1854 { 1855 CopyData(); 1856 mxData->maGroupFont = rFont; 1857 } 1858 1859 const vcl::Font& 1860 StyleSettings::GetGroupFont() const 1861 { 1862 return mxData->maGroupFont; 1863 } 1864 1865 void 1866 StyleSettings::SetLabelFont( const vcl::Font& rFont ) 1867 { 1868 CopyData(); 1869 mxData->maLabelFont = rFont; 1870 } 1871 1872 const vcl::Font& 1873 StyleSettings::GetLabelFont() const 1874 { 1875 return mxData->maLabelFont; 1876 } 1877 1878 void 1879 StyleSettings::SetRadioCheckFont( const vcl::Font& rFont ) 1880 { 1881 CopyData(); 1882 mxData->maRadioCheckFont = rFont; 1883 } 1884 1885 const vcl::Font& 1886 StyleSettings::GetRadioCheckFont() const 1887 { 1888 return mxData->maRadioCheckFont; 1889 } 1890 1891 void 1892 StyleSettings::SetPushButtonFont( const vcl::Font& rFont ) 1893 { 1894 CopyData(); 1895 mxData->maPushButtonFont = rFont; 1896 } 1897 1898 const vcl::Font& 1899 StyleSettings::GetPushButtonFont() const 1900 { 1901 return mxData->maPushButtonFont; 1902 } 1903 1904 void 1905 StyleSettings::SetFieldFont( const vcl::Font& rFont ) 1906 { 1907 CopyData(); 1908 mxData->maFieldFont = rFont; 1909 } 1910 1911 const vcl::Font& 1912 StyleSettings::GetFieldFont() const 1913 { 1914 return mxData->maFieldFont; 1915 } 1916 1917 void 1918 StyleSettings::SetIconFont( const vcl::Font& rFont ) 1919 { 1920 CopyData(); 1921 mxData->maIconFont = rFont; 1922 } 1923 1924 const vcl::Font& 1925 StyleSettings::GetIconFont() const 1926 { 1927 return mxData->maIconFont; 1928 } 1929 1930 void 1931 StyleSettings::SetTabFont( const vcl::Font& rFont ) 1932 { 1933 CopyData(); 1934 mxData->maTabFont = rFont; 1935 } 1936 1937 const vcl::Font& 1938 StyleSettings::GetTabFont() const 1939 { 1940 return mxData->maTabFont; 1941 } 1942 1943 sal_Int32 1944 StyleSettings::GetBorderSize() 1945 { 1946 return 1; 1947 } 1948 1949 void 1950 StyleSettings::SetTitleHeight( sal_Int32 nSize ) 1951 { 1952 CopyData(); 1953 mxData->mnTitleHeight = nSize; 1954 } 1955 1956 sal_Int32 1957 StyleSettings::GetTitleHeight() const 1958 { 1959 return mxData->mnTitleHeight; 1960 } 1961 1962 void 1963 StyleSettings::SetFloatTitleHeight( sal_Int32 nSize ) 1964 { 1965 CopyData(); 1966 mxData->mnFloatTitleHeight = nSize; 1967 } 1968 1969 sal_Int32 1970 StyleSettings::GetFloatTitleHeight() const 1971 { 1972 return mxData->mnFloatTitleHeight; 1973 } 1974 1975 void 1976 StyleSettings::SetScrollBarSize( sal_Int32 nSize ) 1977 { 1978 CopyData(); 1979 mxData->mnScrollBarSize = nSize; 1980 } 1981 1982 sal_Int32 1983 StyleSettings::GetScrollBarSize() const 1984 { 1985 return mxData->mnScrollBarSize; 1986 } 1987 1988 void 1989 StyleSettings::SetMinThumbSize( sal_Int32 nSize ) 1990 { 1991 CopyData(); 1992 mxData->mnMinThumbSize = nSize; 1993 } 1994 1995 sal_Int32 1996 StyleSettings::GetMinThumbSize() const 1997 { 1998 return mxData->mnMinThumbSize; 1999 } 2000 2001 void 2002 StyleSettings::SetSpinSize( sal_Int32 nSize ) 2003 { 2004 CopyData(); 2005 mxData->mnSpinSize = nSize; 2006 } 2007 2008 sal_Int32 2009 StyleSettings::GetSpinSize() const 2010 { 2011 return mxData->mnSpinSize; 2012 } 2013 2014 sal_Int32 2015 StyleSettings::GetSplitSize() 2016 { 2017 return 3; 2018 } 2019 2020 void 2021 StyleSettings::SetCursorSize( sal_Int32 nSize ) 2022 { 2023 CopyData(); 2024 mxData->mnCursorSize = nSize; 2025 } 2026 2027 sal_Int32 2028 StyleSettings::GetCursorSize() const 2029 { 2030 return mxData->mnCursorSize; 2031 } 2032 2033 void 2034 StyleSettings::SetCursorBlinkTime( sal_uInt64 nBlinkTime ) 2035 { 2036 CopyData(); 2037 mxData->mnCursorBlinkTime = nBlinkTime; 2038 } 2039 2040 sal_uInt64 2041 StyleSettings::GetCursorBlinkTime() const 2042 { 2043 return mxData->mnCursorBlinkTime; 2044 } 2045 2046 void 2047 StyleSettings::SetDragFullOptions( DragFullOptions nOptions ) 2048 { 2049 CopyData(); 2050 mxData->mnDragFullOptions = nOptions; 2051 } 2052 2053 DragFullOptions 2054 StyleSettings::GetDragFullOptions() const 2055 { 2056 return mxData->mnDragFullOptions; 2057 } 2058 2059 void 2060 StyleSettings::SetSelectionOptions( SelectionOptions nOptions ) 2061 { 2062 CopyData(); 2063 mxData->mnSelectionOptions = nOptions; 2064 } 2065 2066 SelectionOptions 2067 StyleSettings::GetSelectionOptions() const 2068 { 2069 return mxData->mnSelectionOptions; 2070 } 2071 2072 void 2073 StyleSettings::SetDisplayOptions( DisplayOptions nOptions ) 2074 { 2075 CopyData(); 2076 mxData->mnDisplayOptions = nOptions; 2077 } 2078 2079 DisplayOptions 2080 StyleSettings::GetDisplayOptions() const 2081 { 2082 return mxData->mnDisplayOptions; 2083 } 2084 2085 void 2086 StyleSettings::SetAntialiasingMinPixelHeight( sal_Int32 nMinPixel ) 2087 { 2088 CopyData(); 2089 mxData->mnAntialiasedMin = nMinPixel; 2090 } 2091 2092 sal_Int32 2093 StyleSettings::GetAntialiasingMinPixelHeight() const 2094 { 2095 return mxData->mnAntialiasedMin; 2096 } 2097 2098 void 2099 StyleSettings::SetOptions( StyleSettingsOptions nOptions ) 2100 { 2101 CopyData(); 2102 mxData->mnOptions = nOptions; 2103 } 2104 2105 void 2106 StyleSettings::SetAutoMnemonic( bool bAutoMnemonic ) 2107 { 2108 CopyData(); 2109 mxData->mbAutoMnemonic = bAutoMnemonic; 2110 } 2111 2112 bool 2113 StyleSettings::GetAutoMnemonic() const 2114 { 2115 return mxData->mbAutoMnemonic; 2116 } 2117 2118 bool 2119 StyleSettings::GetDockingFloatsSupported() 2120 { 2121 ImplSVData* pSVData = ImplGetSVData(); 2122 return pSVData->maNWFData.mbCanDetermineWindowPosition; 2123 } 2124 2125 void 2126 StyleSettings::SetToolbarIconSize( ToolbarIconSize nSize ) 2127 { 2128 CopyData(); 2129 mxData->mnToolbarIconSize = nSize; 2130 } 2131 2132 ToolbarIconSize 2133 StyleSettings::GetToolbarIconSize() const 2134 { 2135 return mxData->mnToolbarIconSize; 2136 } 2137 2138 Size StyleSettings::GetToolbarIconSizePixel() const 2139 { 2140 switch (GetToolbarIconSize()) 2141 { 2142 case ToolbarIconSize::Large: 2143 return Size(24, 24); 2144 case ToolbarIconSize::Size32: 2145 return Size(32, 32); 2146 case ToolbarIconSize::Small: 2147 default: 2148 return Size(16, 16); 2149 } 2150 } 2151 2152 const DialogStyle& 2153 StyleSettings::GetDialogStyle() const 2154 { 2155 return mxData->maDialogStyle; 2156 } 2157 2158 void 2159 StyleSettings::SetEdgeBlending(sal_uInt16 nCount) 2160 { 2161 CopyData(); 2162 mxData->mnEdgeBlending = nCount; 2163 } 2164 2165 sal_uInt16 2166 StyleSettings::GetEdgeBlending() const 2167 { 2168 return mxData->mnEdgeBlending; 2169 } 2170 2171 const Color& 2172 StyleSettings::GetEdgeBlendingTopLeftColor() const 2173 { 2174 return mxData->maEdgeBlendingTopLeftColor; 2175 } 2176 2177 const Color& 2178 StyleSettings::GetEdgeBlendingBottomRightColor() const 2179 { 2180 return mxData->maEdgeBlendingBottomRightColor; 2181 } 2182 2183 void 2184 StyleSettings::SetListBoxMaximumLineCount(sal_uInt16 nCount) 2185 { 2186 CopyData(); 2187 mxData->mnListBoxMaximumLineCount = nCount; 2188 } 2189 2190 sal_uInt16 2191 StyleSettings::GetListBoxMaximumLineCount() const 2192 { 2193 return mxData->mnListBoxMaximumLineCount; 2194 } 2195 2196 void 2197 StyleSettings::SetColorValueSetColumnCount(sal_uInt16 nCount) 2198 { 2199 CopyData(); 2200 mxData->mnColorValueSetColumnCount = nCount; 2201 } 2202 2203 sal_uInt16 2204 StyleSettings::GetColorValueSetColumnCount() const 2205 { 2206 return mxData->mnColorValueSetColumnCount; 2207 } 2208 2209 sal_uInt16 2210 StyleSettings::GetListBoxPreviewDefaultLineWidth() 2211 { 2212 return 1; 2213 } 2214 2215 void 2216 StyleSettings::SetPreviewUsesCheckeredBackground(bool bNew) 2217 { 2218 CopyData(); 2219 mxData->mbPreviewUsesCheckeredBackground = bNew; 2220 } 2221 2222 bool 2223 StyleSettings::GetPreviewUsesCheckeredBackground() const 2224 { 2225 return mxData->mbPreviewUsesCheckeredBackground; 2226 } 2227 2228 bool 2229 StyleSettings::operator !=( const StyleSettings& rSet ) const 2230 { 2231 return !(*this == rSet); 2232 } 2233 2234 void StyleSettings::SetListBoxPreviewDefaultLogicSize(Size const& rSize) 2235 { 2236 mxData->maListBoxPreviewDefaultLogicSize = rSize; 2237 } 2238 2239 const Size& StyleSettings::GetListBoxPreviewDefaultPixelSize() const 2240 { 2241 if(0 == mxData->maListBoxPreviewDefaultPixelSize.Width() || 0 == mxData->maListBoxPreviewDefaultPixelSize.Height()) 2242 { 2243 const_cast< StyleSettings* >(this)->mxData->maListBoxPreviewDefaultPixelSize = 2244 Application::GetDefaultDevice()->LogicToPixel(mxData->maListBoxPreviewDefaultLogicSize, MapMode(MapUnit::MapAppFont)); 2245 } 2246 2247 return mxData->maListBoxPreviewDefaultPixelSize; 2248 } 2249 2250 void StyleSettings::Set3DColors( const Color& rColor ) 2251 { 2252 CopyData(); 2253 mxData->maFaceColor = rColor; 2254 mxData->maLightBorderColor = rColor; 2255 mxData->maMenuBorderColor = rColor; 2256 mxData->maDarkShadowColor = COL_BLACK; 2257 if ( rColor != COL_LIGHTGRAY ) 2258 { 2259 mxData->maLightColor = rColor; 2260 mxData->maShadowColor = rColor; 2261 mxData->maDarkShadowColor=rColor; 2262 mxData->maLightColor.IncreaseLuminance( 64 ); 2263 mxData->maShadowColor.DecreaseLuminance( 64 ); 2264 mxData->maDarkShadowColor.DecreaseLuminance( 100 ); 2265 sal_uLong nRed = mxData->maLightColor.GetRed(); 2266 sal_uLong nGreen = mxData->maLightColor.GetGreen(); 2267 sal_uLong nBlue = mxData->maLightColor.GetBlue(); 2268 nRed += static_cast<sal_uLong>(mxData->maShadowColor.GetRed()); 2269 nGreen += static_cast<sal_uLong>(mxData->maShadowColor.GetGreen()); 2270 nBlue += static_cast<sal_uLong>(mxData->maShadowColor.GetBlue()); 2271 mxData->maCheckedColor = Color( static_cast<sal_uInt8>(nRed/2), static_cast<sal_uInt8>(nGreen/2), static_cast<sal_uInt8>(nBlue/2) ); 2272 } 2273 else 2274 { 2275 mxData->maCheckedColor = Color( 0x99, 0x99, 0x99 ); 2276 mxData->maLightColor = COL_WHITE; 2277 mxData->maShadowColor = COL_GRAY; 2278 } 2279 } 2280 2281 void StyleSettings::SetCheckedColorSpecialCase( ) 2282 { 2283 CopyData(); 2284 // Light gray checked color special case 2285 if ( GetFaceColor() == COL_LIGHTGRAY ) 2286 mxData->maCheckedColor = Color( 0xCC, 0xCC, 0xCC ); 2287 else 2288 { 2289 sal_uInt8 nRed = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxData->maFaceColor.GetRed()) + static_cast<sal_uInt16>(mxData->maLightColor.GetRed()))/2); 2290 sal_uInt8 nGreen = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxData->maFaceColor.GetGreen()) + static_cast<sal_uInt16>(mxData->maLightColor.GetGreen()))/2); 2291 sal_uInt8 nBlue = static_cast<sal_uInt8>((static_cast<sal_uInt16>(mxData->maFaceColor.GetBlue()) + static_cast<sal_uInt16>(mxData->maLightColor.GetBlue()))/2); 2292 mxData->maCheckedColor = Color( nRed, nGreen, nBlue ); 2293 } 2294 } 2295 2296 bool StyleSettings::GetUseImagesInMenus() const 2297 { 2298 // icon mode selected in Tools -> Options... -> OpenOffice.org -> View 2299 switch (mxData->meUseImagesInMenus) { 2300 case TRISTATE_FALSE: 2301 return false; 2302 case TRISTATE_TRUE: 2303 return true; 2304 default: // TRISTATE_INDET: 2305 return GetPreferredUseImagesInMenus(); 2306 } 2307 } 2308 2309 static BitmapEx readBitmapEx( const OUString& rPath ) 2310 { 2311 OUString aPath( rPath ); 2312 rtl::Bootstrap::expandMacros( aPath ); 2313 2314 // import the image 2315 Graphic aGraphic; 2316 if ( GraphicFilter::LoadGraphic( aPath, OUString(), aGraphic ) != ERRCODE_NONE ) 2317 return BitmapEx(); 2318 return aGraphic.GetBitmapEx(); 2319 } 2320 2321 namespace { 2322 2323 enum WhichPersona { PERSONA_HEADER, PERSONA_FOOTER }; 2324 2325 } 2326 2327 /** Update the setting of the Persona header / footer in ImplStyleData */ 2328 static void setupPersonaHeaderFooter( WhichPersona eWhich, OUString& rHeaderFooter, BitmapEx& rHeaderFooterBitmap, std::optional<Color>& rMenuBarTextColor ) 2329 { 2330 // don't burn time loading images we don't need. 2331 if ( Application::IsHeadlessModeEnabled() ) 2332 return; 2333 2334 // read from the configuration 2335 OUString aPersona( officecfg::Office::Common::Misc::Persona::get() ); 2336 OUString aPersonaSettings( officecfg::Office::Common::Misc::PersonaSettings::get() ); 2337 2338 // have the settings changed? marks if header /footer prepared before 2339 //should maybe extended to a flag that marks if header /footer /both are loaded 2340 OUString aOldValue= eWhich==PERSONA_HEADER?OUString(aPersona + ";" + aPersonaSettings+";h" ):OUString(aPersona + ";" + aPersonaSettings+";f" ); 2341 if ( rHeaderFooter == aOldValue ) 2342 return; 2343 2344 rHeaderFooter = aOldValue; 2345 rHeaderFooterBitmap = BitmapEx(); 2346 rMenuBarTextColor.reset(); 2347 2348 // now read the new values and setup bitmaps 2349 OUString aHeader, aFooter; 2350 if ( aPersona == "own" || aPersona == "default" ) 2351 { 2352 sal_Int32 nIndex = 0; 2353 2354 // Skip the persona slug, name, and preview 2355 aHeader = aPersonaSettings.getToken( 3, ';', nIndex ); 2356 2357 if ( nIndex > 0 ) 2358 aFooter = aPersonaSettings.getToken( 0, ';', nIndex ); 2359 2360 // change menu text color, advance nIndex to skip the '#' 2361 if ( nIndex > 0 ) 2362 { 2363 OUString aColor = aPersonaSettings.getToken( 0, ';', ++nIndex ); 2364 rMenuBarTextColor = Color( ColorTransparency, aColor.toUInt32( 16 ) ); 2365 } 2366 } 2367 2368 OUString aName; 2369 switch ( eWhich ) { 2370 case PERSONA_HEADER: aName = aHeader; break; 2371 case PERSONA_FOOTER: aName = aFooter; break; 2372 } 2373 2374 if ( !aName.isEmpty() ) 2375 { 2376 OUString gallery(""); 2377 // try the gallery first, then the program path: 2378 if ( aPersona == "own" && !aPersonaSettings.startsWith( "vnd.sun.star.expand" ) ) 2379 { 2380 gallery = "${$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" SAL_CONFIGFILE( "bootstrap") "::UserInstallation}"; 2381 rtl::Bootstrap::expandMacros( gallery ); 2382 gallery += "/user/gallery/personas/"; 2383 } 2384 else if ( aPersona == "default" ) 2385 { 2386 gallery = "$BRAND_BASE_DIR/" LIBO_SHARE_FOLDER "/gallery/personas/"; 2387 } 2388 rHeaderFooterBitmap = readBitmapEx( gallery + aName ); 2389 2390 if ( rHeaderFooterBitmap.IsEmpty() ) 2391 rHeaderFooterBitmap = readBitmapEx( "$BRAND_BASE_DIR/" LIBO_ETC_FOLDER "/" + aName ); 2392 } 2393 2394 // Something went wrong. Probably, the images are missing. Clear the persona properties in the registry. 2395 2396 if( rHeaderFooterBitmap.IsEmpty() ) 2397 { 2398 std::shared_ptr<comphelper::ConfigurationChanges> batch(comphelper::ConfigurationChanges::create()); 2399 officecfg::Office::Common::Misc::Persona::set( "no", batch ); 2400 officecfg::Office::Common::Misc::PersonaSettings::set( "", batch ); 2401 batch->commit(); 2402 } 2403 } 2404 2405 BitmapEx const & StyleSettings::GetPersonaHeader() const 2406 { 2407 setupPersonaHeaderFooter( PERSONA_HEADER, mxData->maPersonaHeaderFooter, mxData->maPersonaHeaderBitmap, mxData->maPersonaMenuBarTextColor ); 2408 return mxData->maPersonaHeaderBitmap; 2409 } 2410 2411 BitmapEx const & StyleSettings::GetPersonaFooter() const 2412 { 2413 setupPersonaHeaderFooter( PERSONA_FOOTER, mxData->maPersonaHeaderFooter, mxData->maPersonaFooterBitmap, mxData->maPersonaMenuBarTextColor ); 2414 return mxData->maPersonaFooterBitmap; 2415 } 2416 2417 const std::optional<Color>& StyleSettings::GetPersonaMenuBarTextColor() const 2418 { 2419 GetPersonaHeader(); 2420 return mxData->maPersonaMenuBarTextColor; 2421 } 2422 2423 void StyleSettings::SetStandardStyles() 2424 { 2425 CopyData(); 2426 mxData->SetStandardStyles(); 2427 } 2428 2429 Color StyleSettings::GetFaceGradientColor() const 2430 { 2431 // compute a brighter face color that can be used in gradients 2432 // for a convex look (eg toolbars) 2433 2434 sal_uInt16 h, s, b; 2435 GetFaceColor().RGBtoHSB( h, s, b ); 2436 if( s > 1) s=1; 2437 if( b < 98) b=98; 2438 return Color::HSBtoRGB( h, s, b ); 2439 } 2440 2441 Color StyleSettings::GetSeparatorColor() const 2442 { 2443 // compute a brighter shadow color for separators (used in toolbars or between menubar and toolbars on Windows XP) 2444 sal_uInt16 h, s, b; 2445 GetShadowColor().RGBtoHSB( h, s, b ); 2446 b += b/4; 2447 s -= s/4; 2448 return Color::HSBtoRGB( h, s, b ); 2449 } 2450 2451 void StyleSettings::CopyData() 2452 { 2453 // copy if other references exist 2454 if (mxData.use_count() > 1) 2455 { 2456 mxData = std::make_shared<ImplStyleData>(*mxData); 2457 } 2458 } 2459 2460 bool StyleSettings::operator ==( const StyleSettings& rSet ) const 2461 { 2462 if ( mxData == rSet.mxData ) 2463 return true; 2464 2465 if (mxData->mIconTheme != rSet.mxData->mIconTheme) { 2466 return false; 2467 } 2468 2469 if (*mxData->mIconThemeSelector != *rSet.mxData->mIconThemeSelector) { 2470 return false; 2471 } 2472 2473 return (mxData->mnOptions == rSet.mxData->mnOptions) && 2474 (mxData->mbAutoMnemonic == rSet.mxData->mbAutoMnemonic) && 2475 (mxData->mnDragFullOptions == rSet.mxData->mnDragFullOptions) && 2476 (mxData->mnSelectionOptions == rSet.mxData->mnSelectionOptions) && 2477 (mxData->mnDisplayOptions == rSet.mxData->mnDisplayOptions) && 2478 (mxData->mnCursorSize == rSet.mxData->mnCursorSize) && 2479 (mxData->mnCursorBlinkTime == rSet.mxData->mnCursorBlinkTime) && 2480 (mxData->mnTitleHeight == rSet.mxData->mnTitleHeight) && 2481 (mxData->mnFloatTitleHeight == rSet.mxData->mnFloatTitleHeight) && 2482 (mxData->mnScrollBarSize == rSet.mxData->mnScrollBarSize) && 2483 (mxData->mnMinThumbSize == rSet.mxData->mnMinThumbSize) && 2484 (mxData->mnSpinSize == rSet.mxData->mnSpinSize) && 2485 (mxData->mnAntialiasedMin == rSet.mxData->mnAntialiasedMin) && 2486 (mxData->mbHighContrast == rSet.mxData->mbHighContrast) && 2487 (mxData->mbUseSystemUIFonts == rSet.mxData->mbUseSystemUIFonts) && 2488 (mxData->mbUseFontAAFromSystem == rSet.mxData->mbUseFontAAFromSystem) && 2489 (mxData->mnUseFlatBorders == rSet.mxData->mnUseFlatBorders) && 2490 (mxData->mnUseFlatMenus == rSet.mxData->mnUseFlatMenus) && 2491 (mxData->maFaceColor == rSet.mxData->maFaceColor) && 2492 (mxData->maCheckedColor == rSet.mxData->maCheckedColor) && 2493 (mxData->maLightColor == rSet.mxData->maLightColor) && 2494 (mxData->maLightBorderColor == rSet.mxData->maLightBorderColor) && 2495 (mxData->maShadowColor == rSet.mxData->maShadowColor) && 2496 (mxData->maDarkShadowColor == rSet.mxData->maDarkShadowColor) && 2497 (mxData->maWarningColor == rSet.mxData->maWarningColor) && 2498 (mxData->maButtonTextColor == rSet.mxData->maButtonTextColor) && 2499 (mxData->maDefaultActionButtonTextColor == rSet.mxData->maDefaultActionButtonTextColor) && 2500 (mxData->maActionButtonTextColor == rSet.mxData->maActionButtonTextColor) && 2501 (mxData->maButtonRolloverTextColor == rSet.mxData->maButtonRolloverTextColor) && 2502 (mxData->maActionButtonRolloverTextColor == rSet.mxData->maActionButtonRolloverTextColor) && 2503 (mxData->maRadioCheckTextColor == rSet.mxData->maRadioCheckTextColor) && 2504 (mxData->maGroupTextColor == rSet.mxData->maGroupTextColor) && 2505 (mxData->maLabelTextColor == rSet.mxData->maLabelTextColor) && 2506 (mxData->maWindowColor == rSet.mxData->maWindowColor) && 2507 (mxData->maWindowTextColor == rSet.mxData->maWindowTextColor) && 2508 (mxData->maDialogColor == rSet.mxData->maDialogColor) && 2509 (mxData->maDialogTextColor == rSet.mxData->maDialogTextColor) && 2510 (mxData->maWorkspaceColor == rSet.mxData->maWorkspaceColor) && 2511 (mxData->maMonoColor == rSet.mxData->maMonoColor) && 2512 (mxData->maFieldColor == rSet.mxData->maFieldColor) && 2513 (mxData->maFieldTextColor == rSet.mxData->maFieldTextColor) && 2514 (mxData->maActiveColor == rSet.mxData->maActiveColor) && 2515 (mxData->maActiveTextColor == rSet.mxData->maActiveTextColor) && 2516 (mxData->maActiveBorderColor == rSet.mxData->maActiveBorderColor) && 2517 (mxData->maDeactiveColor == rSet.mxData->maDeactiveColor) && 2518 (mxData->maDeactiveTextColor == rSet.mxData->maDeactiveTextColor) && 2519 (mxData->maDeactiveBorderColor == rSet.mxData->maDeactiveBorderColor) && 2520 (mxData->maMenuColor == rSet.mxData->maMenuColor) && 2521 (mxData->maMenuBarColor == rSet.mxData->maMenuBarColor) && 2522 (mxData->maMenuBarRolloverColor == rSet.mxData->maMenuBarRolloverColor) && 2523 (mxData->maMenuBorderColor == rSet.mxData->maMenuBorderColor) && 2524 (mxData->maMenuTextColor == rSet.mxData->maMenuTextColor) && 2525 (mxData->maListBoxWindowBackgroundColor == rSet.mxData->maListBoxWindowBackgroundColor) && 2526 (mxData->maListBoxWindowTextColor == rSet.mxData->maListBoxWindowTextColor) && 2527 (mxData->maListBoxWindowHighlightColor == rSet.mxData->maListBoxWindowHighlightColor) && 2528 (mxData->maListBoxWindowHighlightTextColor == rSet.mxData->maListBoxWindowHighlightTextColor) && 2529 (mxData->maMenuBarTextColor == rSet.mxData->maMenuBarTextColor) && 2530 (mxData->maMenuBarRolloverTextColor == rSet.mxData->maMenuBarRolloverTextColor) && 2531 (mxData->maMenuHighlightColor == rSet.mxData->maMenuHighlightColor) && 2532 (mxData->maMenuHighlightTextColor == rSet.mxData->maMenuHighlightTextColor) && 2533 (mxData->maHighlightColor == rSet.mxData->maHighlightColor) && 2534 (mxData->maHighlightTextColor == rSet.mxData->maHighlightTextColor) && 2535 (mxData->maTabTextColor == rSet.mxData->maTabTextColor) && 2536 (mxData->maTabRolloverTextColor == rSet.mxData->maTabRolloverTextColor) && 2537 (mxData->maTabHighlightTextColor == rSet.mxData->maTabHighlightTextColor) && 2538 (mxData->maActiveTabColor == rSet.mxData->maActiveTabColor) && 2539 (mxData->maInactiveTabColor == rSet.mxData->maInactiveTabColor) && 2540 (mxData->maDisableColor == rSet.mxData->maDisableColor) && 2541 (mxData->maHelpColor == rSet.mxData->maHelpColor) && 2542 (mxData->maHelpTextColor == rSet.mxData->maHelpTextColor) && 2543 (mxData->maLinkColor == rSet.mxData->maLinkColor) && 2544 (mxData->maVisitedLinkColor == rSet.mxData->maVisitedLinkColor) && 2545 (mxData->maToolTextColor == rSet.mxData->maToolTextColor) && 2546 (mxData->maAppFont == rSet.mxData->maAppFont) && 2547 (mxData->maHelpFont == rSet.mxData->maHelpFont) && 2548 (mxData->maTitleFont == rSet.mxData->maTitleFont) && 2549 (mxData->maFloatTitleFont == rSet.mxData->maFloatTitleFont) && 2550 (mxData->maMenuFont == rSet.mxData->maMenuFont) && 2551 (mxData->maToolFont == rSet.mxData->maToolFont) && 2552 (mxData->maGroupFont == rSet.mxData->maGroupFont) && 2553 (mxData->maLabelFont == rSet.mxData->maLabelFont) && 2554 (mxData->maRadioCheckFont == rSet.mxData->maRadioCheckFont) && 2555 (mxData->maPushButtonFont == rSet.mxData->maPushButtonFont) && 2556 (mxData->maFieldFont == rSet.mxData->maFieldFont) && 2557 (mxData->maIconFont == rSet.mxData->maIconFont) && 2558 (mxData->maTabFont == rSet.mxData->maTabFont) && 2559 (mxData->meUseImagesInMenus == rSet.mxData->meUseImagesInMenus) && 2560 (mxData->mbPreferredUseImagesInMenus == rSet.mxData->mbPreferredUseImagesInMenus) && 2561 (mxData->mbSkipDisabledInMenus == rSet.mxData->mbSkipDisabledInMenus) && 2562 (mxData->mbHideDisabledMenuItems == rSet.mxData->mbHideDisabledMenuItems) && 2563 (mxData->mbPreferredContextMenuShortcuts == rSet.mxData->mbPreferredContextMenuShortcuts)&& 2564 (mxData->meContextMenuShortcuts == rSet.mxData->meContextMenuShortcuts) && 2565 (mxData->mbPrimaryButtonWarpsSlider == rSet.mxData->mbPrimaryButtonWarpsSlider) && 2566 (mxData->mnEdgeBlending == rSet.mxData->mnEdgeBlending) && 2567 (mxData->maEdgeBlendingTopLeftColor == rSet.mxData->maEdgeBlendingTopLeftColor) && 2568 (mxData->maEdgeBlendingBottomRightColor == rSet.mxData->maEdgeBlendingBottomRightColor) && 2569 (mxData->mnListBoxMaximumLineCount == rSet.mxData->mnListBoxMaximumLineCount) && 2570 (mxData->mnColorValueSetColumnCount == rSet.mxData->mnColorValueSetColumnCount) && 2571 (mxData->maListBoxPreviewDefaultLogicSize == rSet.mxData->maListBoxPreviewDefaultLogicSize) && 2572 (mxData->maListBoxPreviewDefaultPixelSize == rSet.mxData->maListBoxPreviewDefaultPixelSize) && 2573 (mxData->mbPreviewUsesCheckeredBackground == rSet.mxData->mbPreviewUsesCheckeredBackground); 2574 } 2575 2576 ImplMiscData::ImplMiscData() : 2577 mnEnableATT(TRISTATE_INDET), 2578 mnDisablePrinting(TRISTATE_INDET) 2579 { 2580 static const char* pEnv = getenv("SAL_DECIMALSEP_ENABLED" ); // set default without UI 2581 mbEnableLocalizedDecimalSep = (pEnv != nullptr); 2582 } 2583 2584 MiscSettings::MiscSettings() 2585 : mxData(std::make_shared<ImplMiscData>()) 2586 { 2587 } 2588 2589 bool MiscSettings::operator ==( const MiscSettings& rSet ) const 2590 { 2591 if ( mxData == rSet.mxData ) 2592 return true; 2593 2594 return (mxData->mnEnableATT == rSet.mxData->mnEnableATT ) && 2595 (mxData->mnDisablePrinting == rSet.mxData->mnDisablePrinting ) && 2596 (mxData->mbEnableLocalizedDecimalSep == rSet.mxData->mbEnableLocalizedDecimalSep ); 2597 } 2598 2599 bool 2600 MiscSettings::operator !=( const MiscSettings& rSet ) const 2601 { 2602 return !(*this == rSet); 2603 } 2604 2605 bool MiscSettings::GetDisablePrinting() const 2606 { 2607 if( mxData->mnDisablePrinting == TRISTATE_INDET ) 2608 { 2609 OUString aEnable = 2610 vcl::SettingsConfigItem::get()-> 2611 getValue( "DesktopManagement", 2612 "DisablePrinting" ); 2613 mxData->mnDisablePrinting = aEnable.equalsIgnoreAsciiCase("true") ? TRISTATE_TRUE : TRISTATE_FALSE; 2614 } 2615 2616 return mxData->mnDisablePrinting != TRISTATE_FALSE; 2617 } 2618 2619 bool MiscSettings::GetEnableATToolSupport() const 2620 { 2621 2622 #ifdef _WIN32 2623 if( mxData->mnEnableATT == TRISTATE_INDET ) 2624 { 2625 // Check in the Windows registry if an AT tool wants Accessibility support to 2626 // be activated .. 2627 HKEY hkey; 2628 2629 if( ERROR_SUCCESS == RegOpenKeyW(HKEY_CURRENT_USER, 2630 L"Software\\LibreOffice\\Accessibility\\AtToolSupport", 2631 &hkey) ) 2632 { 2633 DWORD dwType; 2634 wchar_t Data[6]; // possible values: "true", "false", "1", "0", DWORD 2635 DWORD cbData = sizeof(Data); 2636 2637 if( ERROR_SUCCESS == RegQueryValueExW(hkey, L"SupportAssistiveTechnology", 2638 nullptr, &dwType, reinterpret_cast<LPBYTE>(Data), &cbData) ) 2639 { 2640 switch (dwType) 2641 { 2642 case REG_SZ: 2643 mxData->mnEnableATT = ((0 == wcsicmp(Data, L"1")) || (0 == wcsicmp(Data, L"true"))) ? TRISTATE_TRUE : TRISTATE_FALSE; 2644 break; 2645 case REG_DWORD: 2646 switch (reinterpret_cast<DWORD *>(Data)[0]) { 2647 case 0: 2648 mxData->mnEnableATT = TRISTATE_FALSE; 2649 break; 2650 case 1: 2651 mxData->mnEnableATT = TRISTATE_TRUE; 2652 break; 2653 default: 2654 mxData->mnEnableATT = TRISTATE_INDET; 2655 //TODO: or TRISTATE_TRUE? 2656 break; 2657 } 2658 break; 2659 default: 2660 // Unsupported registry type 2661 break; 2662 } 2663 } 2664 2665 RegCloseKey(hkey); 2666 } 2667 } 2668 #endif 2669 2670 if( mxData->mnEnableATT == TRISTATE_INDET ) 2671 { 2672 static const char* pEnv = getenv("SAL_ACCESSIBILITY_ENABLED" ); 2673 if( !pEnv || !*pEnv ) 2674 { 2675 OUString aEnable = 2676 vcl::SettingsConfigItem::get()-> 2677 getValue( "Accessibility", 2678 "EnableATToolSupport" ); 2679 mxData->mnEnableATT = aEnable.equalsIgnoreAsciiCase("true") ? TRISTATE_TRUE : TRISTATE_FALSE; 2680 } 2681 else 2682 { 2683 mxData->mnEnableATT = TRISTATE_TRUE; 2684 } 2685 } 2686 2687 return mxData->mnEnableATT != TRISTATE_FALSE; 2688 } 2689 2690 #ifdef _WIN32 2691 void MiscSettings::SetEnableATToolSupport( bool bEnable ) 2692 { 2693 if ( (bEnable ? TRISTATE_TRUE : TRISTATE_FALSE) != mxData->mnEnableATT ) 2694 { 2695 if( bEnable && !ImplInitAccessBridge() ) 2696 return; 2697 2698 HKEY hkey; 2699 2700 // If the accessibility key in the Windows registry exists, change it synchronously 2701 if( ERROR_SUCCESS == RegOpenKeyW(HKEY_CURRENT_USER, 2702 L"Software\\LibreOffice\\Accessibility\\AtToolSupport", 2703 &hkey) ) 2704 { 2705 DWORD dwType; 2706 wchar_t Data[6]; // possible values: "true", "false", 1, 0 2707 DWORD cbData = sizeof(Data); 2708 2709 if( ERROR_SUCCESS == RegQueryValueExW(hkey, L"SupportAssistiveTechnology", 2710 nullptr, &dwType, reinterpret_cast<LPBYTE>(Data), &cbData) ) 2711 { 2712 switch (dwType) 2713 { 2714 case REG_SZ: 2715 RegSetValueExW(hkey, L"SupportAssistiveTechnology", 2716 0, dwType, 2717 reinterpret_cast<const BYTE*>(bEnable ? L"true" : L"false"), 2718 bEnable ? sizeof(L"true") : sizeof(L"false")); 2719 break; 2720 case REG_DWORD: 2721 reinterpret_cast<DWORD *>(Data)[0] = bEnable ? 1 : 0; 2722 RegSetValueExW(hkey, L"SupportAssistiveTechnology", 2723 0, dwType, reinterpret_cast<const BYTE*>(Data), sizeof(DWORD)); 2724 break; 2725 default: 2726 // Unsupported registry type 2727 break; 2728 } 2729 } 2730 2731 RegCloseKey(hkey); 2732 } 2733 2734 vcl::SettingsConfigItem::get()-> 2735 setValue( "Accessibility", 2736 "EnableATToolSupport", 2737 bEnable ? OUString("true") : OUString("false" ) ); 2738 mxData->mnEnableATT = bEnable ? TRISTATE_TRUE : TRISTATE_FALSE; 2739 } 2740 } 2741 #endif 2742 2743 void MiscSettings::SetEnableLocalizedDecimalSep( bool bEnable ) 2744 { 2745 // copy if other references exist 2746 if (mxData.use_count() > 1) 2747 { 2748 mxData = std::make_shared<ImplMiscData>(*mxData); 2749 } 2750 mxData->mbEnableLocalizedDecimalSep = bEnable; 2751 } 2752 2753 bool MiscSettings::GetEnableLocalizedDecimalSep() const 2754 { 2755 return mxData->mbEnableLocalizedDecimalSep; 2756 } 2757 2758 HelpSettings::HelpSettings() 2759 : mxData(std::make_shared<ImplHelpData>()) 2760 { 2761 } 2762 2763 bool HelpSettings::operator ==( const HelpSettings& rSet ) const 2764 { 2765 if ( mxData == rSet.mxData ) 2766 return true; 2767 2768 return (mxData->mnTipTimeout == rSet.mxData->mnTipTimeout ); 2769 } 2770 2771 sal_Int32 2772 HelpSettings::GetTipDelay() 2773 { 2774 return 500; 2775 } 2776 2777 void 2778 HelpSettings::SetTipTimeout( sal_Int32 nTipTimeout ) 2779 { 2780 // copy if other references exist 2781 if (mxData.use_count() > 1) 2782 { 2783 mxData = std::make_shared<ImplHelpData>(*mxData); 2784 } 2785 mxData->mnTipTimeout = nTipTimeout; 2786 } 2787 2788 sal_Int32 2789 HelpSettings::GetTipTimeout() const 2790 { 2791 return mxData->mnTipTimeout; 2792 } 2793 2794 sal_Int32 2795 HelpSettings::GetBalloonDelay() 2796 { 2797 return 1500; 2798 } 2799 2800 bool 2801 HelpSettings::operator !=( const HelpSettings& rSet ) const 2802 { 2803 return !(*this == rSet); 2804 } 2805 2806 ImplAllSettingsData::ImplAllSettingsData() 2807 : 2808 maLocale( LANGUAGE_SYSTEM ), 2809 maUILocale( LANGUAGE_SYSTEM ) 2810 { 2811 if (!utl::ConfigManager::IsFuzzing()) 2812 maMiscSettings.SetEnableLocalizedDecimalSep( maSysLocale.GetOptions().IsDecimalSeparatorAsLocale() ); 2813 } 2814 2815 ImplAllSettingsData::ImplAllSettingsData( const ImplAllSettingsData& rData ) : 2816 maMouseSettings( rData.maMouseSettings ), 2817 maStyleSettings( rData.maStyleSettings ), 2818 maMiscSettings( rData.maMiscSettings ), 2819 maHelpSettings( rData.maHelpSettings ), 2820 maLocale( rData.maLocale ), 2821 maUILocale( rData.maUILocale ) 2822 { 2823 // Create the cache objects new when their getter is called. 2824 } 2825 2826 ImplAllSettingsData::~ImplAllSettingsData() 2827 { 2828 mpLocaleDataWrapper.reset(); 2829 mpUILocaleDataWrapper.reset(); 2830 mpNeutralLocaleDataWrapper.reset(); 2831 mpI18nHelper.reset(); 2832 mpUII18nHelper.reset(); 2833 } 2834 2835 AllSettings::AllSettings() 2836 : mxData(std::make_shared<ImplAllSettingsData>()) 2837 { 2838 } 2839 2840 void AllSettings::CopyData() 2841 { 2842 // copy if other references exist 2843 if (mxData.use_count() > 1) 2844 { 2845 mxData = std::make_shared<ImplAllSettingsData>(*mxData); 2846 } 2847 2848 } 2849 2850 AllSettingsFlags AllSettings::Update( AllSettingsFlags nFlags, const AllSettings& rSet ) 2851 { 2852 2853 AllSettingsFlags nChangeFlags = AllSettingsFlags::NONE; 2854 2855 if ( nFlags & AllSettingsFlags::MOUSE ) 2856 { 2857 if ( mxData->maMouseSettings != rSet.mxData->maMouseSettings ) 2858 { 2859 CopyData(); 2860 mxData->maMouseSettings = rSet.mxData->maMouseSettings; 2861 nChangeFlags |= AllSettingsFlags::MOUSE; 2862 } 2863 } 2864 2865 if ( nFlags & AllSettingsFlags::STYLE ) 2866 { 2867 if ( mxData->maStyleSettings != rSet.mxData->maStyleSettings ) 2868 { 2869 CopyData(); 2870 mxData->maStyleSettings = rSet.mxData->maStyleSettings; 2871 nChangeFlags |= AllSettingsFlags::STYLE; 2872 } 2873 } 2874 2875 if ( nFlags & AllSettingsFlags::MISC ) 2876 { 2877 if ( mxData->maMiscSettings != rSet.mxData->maMiscSettings ) 2878 { 2879 CopyData(); 2880 mxData->maMiscSettings = rSet.mxData->maMiscSettings; 2881 nChangeFlags |= AllSettingsFlags::MISC; 2882 } 2883 } 2884 2885 if ( nFlags & AllSettingsFlags::LOCALE ) 2886 { 2887 if ( mxData->maLocale != rSet.mxData->maLocale ) 2888 { 2889 SetLanguageTag( rSet.mxData->maLocale ); 2890 nChangeFlags |= AllSettingsFlags::LOCALE; 2891 } 2892 } 2893 2894 return nChangeFlags; 2895 } 2896 2897 AllSettingsFlags AllSettings::GetChangeFlags( const AllSettings& rSet ) const 2898 { 2899 2900 AllSettingsFlags nChangeFlags = AllSettingsFlags::NONE; 2901 2902 if ( mxData->maStyleSettings != rSet.mxData->maStyleSettings ) 2903 nChangeFlags |= AllSettingsFlags::STYLE; 2904 2905 if ( mxData->maMiscSettings != rSet.mxData->maMiscSettings ) 2906 nChangeFlags |= AllSettingsFlags::MISC; 2907 2908 if ( mxData->maLocale != rSet.mxData->maLocale ) 2909 nChangeFlags |= AllSettingsFlags::LOCALE; 2910 2911 return nChangeFlags; 2912 } 2913 2914 bool AllSettings::operator ==( const AllSettings& rSet ) const 2915 { 2916 if ( mxData == rSet.mxData ) 2917 return true; 2918 2919 if ( (mxData->maMouseSettings == rSet.mxData->maMouseSettings) && 2920 (mxData->maStyleSettings == rSet.mxData->maStyleSettings) && 2921 (mxData->maMiscSettings == rSet.mxData->maMiscSettings) && 2922 (mxData->maHelpSettings == rSet.mxData->maHelpSettings) && 2923 (mxData->maLocale == rSet.mxData->maLocale) ) 2924 { 2925 return true; 2926 } 2927 2928 return false; 2929 } 2930 2931 void AllSettings::SetLanguageTag(const OUString& rLanguage, bool bCanonicalize) 2932 { 2933 SetLanguageTag(LanguageTag(rLanguage, bCanonicalize)); 2934 } 2935 2936 void AllSettings::SetLanguageTag( const LanguageTag& rLanguageTag ) 2937 { 2938 if (mxData->maLocale == rLanguageTag) 2939 return; 2940 2941 CopyData(); 2942 2943 mxData->maLocale = rLanguageTag; 2944 2945 if ( mxData->mpLocaleDataWrapper ) 2946 { 2947 mxData->mpLocaleDataWrapper.reset(); 2948 } 2949 if ( mxData->mpI18nHelper ) 2950 { 2951 mxData->mpI18nHelper.reset(); 2952 } 2953 } 2954 2955 namespace 2956 { 2957 bool GetConfigLayoutRTL(bool bMath) 2958 { 2959 static const char* pEnv = getenv("SAL_RTL_ENABLED" ); 2960 static int nUIMirroring = -1; // -1: undef, 0: auto, 1: on 2: off 2961 2962 // environment always overrides 2963 if( pEnv ) 2964 return true; 2965 2966 bool bRTL = false; 2967 2968 if( nUIMirroring == -1 ) 2969 { 2970 nUIMirroring = 0; // ask configuration only once 2971 utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithComponentContext( 2972 comphelper::getProcessComponentContext(), 2973 "org.openoffice.Office.Common/I18N/CTL" ); // note: case sensitive ! 2974 if ( aNode.isValid() ) 2975 { 2976 bool bTmp = bool(); 2977 css::uno::Any aValue = aNode.getNodeValue( "UIMirroring" ); 2978 if( aValue >>= bTmp ) 2979 { 2980 // found true or false; if it was nil, nothing is changed 2981 nUIMirroring = bTmp ? 1 : 2; 2982 } 2983 } 2984 } 2985 2986 if( nUIMirroring == 0 ) // no config found (eg, setup) or default (nil) was set: check language 2987 { 2988 LanguageType aLang = SvtSysLocaleOptions().GetRealUILanguageTag().getLanguageType(); 2989 if (bMath) 2990 bRTL = MsLangId::isRightToLeftMath( aLang ); 2991 else 2992 bRTL = MsLangId::isRightToLeft( aLang ); 2993 } 2994 else 2995 bRTL = (nUIMirroring == 1); 2996 2997 return bRTL; 2998 } 2999 } 3000 3001 bool AllSettings::GetLayoutRTL() 3002 { 3003 if (utl::ConfigManager::IsFuzzing()) 3004 return false; 3005 return GetConfigLayoutRTL(false); 3006 } 3007 3008 bool AllSettings::GetMathLayoutRTL() 3009 { 3010 if (utl::ConfigManager::IsFuzzing()) 3011 return false; 3012 return GetConfigLayoutRTL(true); 3013 } 3014 3015 const LanguageTag& AllSettings::GetLanguageTag() const 3016 { 3017 if (utl::ConfigManager::IsFuzzing()) 3018 { 3019 static LanguageTag aRet("en-US"); 3020 return aRet; 3021 } 3022 3023 if (comphelper::LibreOfficeKit::isActive()) 3024 return comphelper::LibreOfficeKit::getLanguageTag(); 3025 3026 // SYSTEM locale means: use settings from SvtSysLocale that is resolved 3027 if ( mxData->maLocale.isSystemLocale() ) 3028 mxData->maLocale = mxData->maSysLocale.GetLanguageTag(); 3029 3030 return mxData->maLocale; 3031 } 3032 3033 const LanguageTag& AllSettings::GetUILanguageTag() const 3034 { 3035 if (utl::ConfigManager::IsFuzzing()) 3036 { 3037 static LanguageTag aRet("en-US"); 3038 return aRet; 3039 } 3040 3041 if (comphelper::LibreOfficeKit::isActive()) 3042 return comphelper::LibreOfficeKit::getLanguageTag(); 3043 3044 // the UILocale is never changed 3045 if ( mxData->maUILocale.isSystemLocale() ) 3046 mxData->maUILocale = mxData->maSysLocale.GetUILanguageTag(); 3047 3048 return mxData->maUILocale; 3049 } 3050 3051 const LocaleDataWrapper& AllSettings::GetLocaleDataWrapper() const 3052 { 3053 if ( !mxData->mpLocaleDataWrapper ) 3054 const_cast<AllSettings*>(this)->mxData->mpLocaleDataWrapper.reset( new LocaleDataWrapper( 3055 comphelper::getProcessComponentContext(), GetLanguageTag() ) ); 3056 return *mxData->mpLocaleDataWrapper; 3057 } 3058 3059 const LocaleDataWrapper& AllSettings::GetUILocaleDataWrapper() const 3060 { 3061 if ( !mxData->mpUILocaleDataWrapper ) 3062 const_cast<AllSettings*>(this)->mxData->mpUILocaleDataWrapper.reset( new LocaleDataWrapper( 3063 comphelper::getProcessComponentContext(), GetUILanguageTag() ) ); 3064 return *mxData->mpUILocaleDataWrapper; 3065 } 3066 3067 const LocaleDataWrapper& AllSettings::GetNeutralLocaleDataWrapper() const 3068 { 3069 if ( !mxData->mpNeutralLocaleDataWrapper ) 3070 const_cast<AllSettings*>(this)->mxData->mpNeutralLocaleDataWrapper.reset( new LocaleDataWrapper( 3071 comphelper::getProcessComponentContext(), LanguageTag("en-US") ) ); 3072 return *mxData->mpNeutralLocaleDataWrapper; 3073 } 3074 3075 const vcl::I18nHelper& AllSettings::GetLocaleI18nHelper() const 3076 { 3077 if ( !mxData->mpI18nHelper ) { 3078 const_cast<AllSettings*>(this)->mxData->mpI18nHelper.reset( new vcl::I18nHelper( 3079 comphelper::getProcessComponentContext(), GetLanguageTag() ) ); 3080 } 3081 return *mxData->mpI18nHelper; 3082 } 3083 3084 const vcl::I18nHelper& AllSettings::GetUILocaleI18nHelper() const 3085 { 3086 if ( !mxData->mpUII18nHelper ) { 3087 const_cast<AllSettings*>(this)->mxData->mpUII18nHelper.reset( new vcl::I18nHelper( 3088 comphelper::getProcessComponentContext(), GetUILanguageTag() ) ); 3089 } 3090 return *mxData->mpUII18nHelper; 3091 } 3092 3093 void AllSettings::LocaleSettingsChanged( ConfigurationHints nHint ) 3094 { 3095 AllSettings aAllSettings( Application::GetSettings() ); 3096 if ( nHint & ConfigurationHints::DecSep ) 3097 { 3098 MiscSettings aMiscSettings = aAllSettings.GetMiscSettings(); 3099 bool bIsDecSepAsLocale = aAllSettings.mxData->maSysLocale.GetOptions().IsDecimalSeparatorAsLocale(); 3100 if ( aMiscSettings.GetEnableLocalizedDecimalSep() != bIsDecSepAsLocale ) 3101 { 3102 aMiscSettings.SetEnableLocalizedDecimalSep( bIsDecSepAsLocale ); 3103 aAllSettings.SetMiscSettings( aMiscSettings ); 3104 } 3105 } 3106 3107 if ( nHint & ConfigurationHints::Locale ) 3108 aAllSettings.SetLanguageTag( aAllSettings.mxData->maSysLocale.GetOptions().GetLanguageTag() ); 3109 3110 Application::SetSettings( aAllSettings ); 3111 } 3112 3113 const StyleSettings& 3114 AllSettings::GetStyleSettings() const 3115 { 3116 return mxData->maStyleSettings; 3117 } 3118 3119 StyleSettingsOptions 3120 StyleSettings::GetOptions() const 3121 { 3122 return mxData->mnOptions; 3123 } 3124 3125 std::vector<vcl::IconThemeInfo> const & 3126 StyleSettings::GetInstalledIconThemes() const 3127 { 3128 if (!mxData->mIconThemeScanner) { 3129 const_cast<StyleSettings*>(this)->mxData->mIconThemeScanner = vcl::IconThemeScanner::Create(vcl::IconThemeScanner::GetStandardIconThemePath()); 3130 } 3131 return mxData->mIconThemeScanner->GetFoundIconThemes(); 3132 } 3133 3134 /*static*/ OUString 3135 StyleSettings::GetAutomaticallyChosenIconTheme() const 3136 { 3137 OUString desktopEnvironment = Application::GetDesktopEnvironment(); 3138 if (!mxData->mIconThemeScanner) { 3139 const_cast<StyleSettings*>(this)->mxData->mIconThemeScanner = vcl::IconThemeScanner::Create(vcl::IconThemeScanner::GetStandardIconThemePath()); 3140 } 3141 OUString themeName = mxData->mIconThemeSelector->SelectIconThemeForDesktopEnvironment( 3142 mxData->mIconThemeScanner->GetFoundIconThemes(), 3143 desktopEnvironment 3144 ); 3145 return themeName; 3146 } 3147 3148 void 3149 StyleSettings::SetIconTheme(const OUString& theme) 3150 { 3151 CopyData(); 3152 mxData->mIconTheme = theme; 3153 } 3154 3155 OUString 3156 StyleSettings::DetermineIconTheme() const 3157 { 3158 OUString sTheme(mxData->mIconTheme); 3159 if (sTheme.isEmpty()) 3160 { 3161 if (utl::ConfigManager::IsFuzzing()) 3162 sTheme = "colibre"; 3163 else 3164 { 3165 // read from the configuration, or fallback to what the desktop wants 3166 sTheme = officecfg::Office::Common::Misc::SymbolStyle::get(); 3167 3168 if (sTheme.isEmpty() || sTheme == "auto") 3169 sTheme = GetAutomaticallyChosenIconTheme(); 3170 } 3171 } 3172 3173 if (!mxData->mIconThemeScanner) { 3174 const_cast<StyleSettings*>(this)->mxData->mIconThemeScanner = vcl::IconThemeScanner::Create(vcl::IconThemeScanner::GetStandardIconThemePath()); 3175 } 3176 OUString r = mxData->mIconThemeSelector->SelectIconTheme( 3177 mxData->mIconThemeScanner->GetFoundIconThemes(), 3178 sTheme); 3179 return r; 3180 } 3181 3182 void 3183 StyleSettings::SetHighContrastMode(bool bHighContrast ) 3184 { 3185 if (mxData->mbHighContrast == bHighContrast) { 3186 return; 3187 } 3188 3189 CopyData(); 3190 mxData->mbHighContrast = bHighContrast; 3191 mxData->mIconThemeSelector->SetUseHighContrastTheme(bHighContrast); 3192 } 3193 3194 bool 3195 StyleSettings::GetHighContrastMode() const 3196 { 3197 return mxData->mbHighContrast; 3198 } 3199 3200 void 3201 StyleSettings::SetPreferredIconTheme(const OUString& theme, bool bDarkIconTheme) 3202 { 3203 const bool bChanged = mxData->mIconThemeSelector->SetPreferredIconTheme(theme, bDarkIconTheme); 3204 if (bChanged) 3205 { 3206 // clear this so it is recalculated if it was selected as the automatic theme 3207 mxData->mIconTheme.clear(); 3208 } 3209 } 3210 3211 void 3212 AllSettings::SetMouseSettings( const MouseSettings& rSet ) 3213 { 3214 CopyData(); 3215 mxData->maMouseSettings = rSet; 3216 } 3217 3218 const MouseSettings& 3219 AllSettings::GetMouseSettings() const 3220 { 3221 return mxData->maMouseSettings; 3222 } 3223 3224 void 3225 AllSettings::SetStyleSettings( const StyleSettings& rSet ) 3226 { 3227 CopyData(); 3228 mxData->maStyleSettings = rSet; 3229 } 3230 3231 void 3232 AllSettings::SetMiscSettings( const MiscSettings& rSet ) 3233 { 3234 CopyData(); 3235 mxData->maMiscSettings = rSet; 3236 } 3237 3238 const MiscSettings& 3239 AllSettings::GetMiscSettings() const 3240 { 3241 return mxData->maMiscSettings; 3242 } 3243 3244 void 3245 AllSettings::SetHelpSettings( const HelpSettings& rSet ) 3246 { 3247 CopyData(); 3248 mxData->maHelpSettings = rSet; 3249 } 3250 3251 const HelpSettings& 3252 AllSettings::GetHelpSettings() const 3253 { 3254 return mxData->maHelpSettings; 3255 } 3256 3257 bool 3258 AllSettings::operator !=( const AllSettings& rSet ) const 3259 { 3260 return !(*this == rSet); 3261 } 3262 3263 SvtSysLocale& 3264 AllSettings::GetSysLocale() 3265 { 3266 return mxData->maSysLocale; 3267 } 3268 3269 3270 void StyleSettings::BatchSetBackgrounds( const Color &aBackColor, 3271 bool bCheckedColorSpecialCase ) 3272 { 3273 Set3DColors( aBackColor ); 3274 SetFaceColor( aBackColor ); 3275 SetDialogColor( aBackColor ); 3276 SetWorkspaceColor( aBackColor ); 3277 3278 if (bCheckedColorSpecialCase) 3279 SetCheckedColorSpecialCase(); 3280 } 3281 3282 void StyleSettings::BatchSetFonts( const vcl::Font& aAppFont, 3283 const vcl::Font& aLabelFont ) 3284 { 3285 SetAppFont( aAppFont ); 3286 SetPushButtonFont( aAppFont ); 3287 SetToolFont( aAppFont ); 3288 SetHelpFont( aAppFont ); 3289 3290 SetMenuFont( aLabelFont ); 3291 SetTabFont( aLabelFont ); 3292 SetLabelFont( aLabelFont ); 3293 SetRadioCheckFont( aLabelFont ); 3294 SetFieldFont( aLabelFont ); 3295 SetGroupFont( aLabelFont ); 3296 SetIconFont( aLabelFont ); 3297 } 3298 3299 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 3300
