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