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