1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
20 #include <officecfg/Office/Common.hxx>
23 #include "comphelper/processfactory.hxx"
24 #include <rtl/bootstrap.hxx>
25 #include "tools/debug.hxx"
26 #include <vcl/graphicfilter.hxx>
28 #include "i18nlangtag/mslangid.hxx"
29 #include "i18nlangtag/languagetag.hxx"
31 #include "vcl/svapp.hxx"
32 #include "vcl/event.hxx"
33 #include "vcl/settings.hxx"
34 #include "vcl/i18nhelp.hxx"
35 #include "vcl/configsettings.hxx"
36 #include "vcl/gradient.hxx"
37 #include "vcl/outdev.hxx"
39 #include "unotools/fontcfg.hxx"
40 #include "unotools/localedatawrapper.hxx"
41 #include "unotools/collatorwrapper.hxx"
42 #include "unotools/confignode.hxx"
43 #include "unotools/syslocaleoptions.hxx"
45 using namespace ::com::sun::star
;
48 #include "impimagetree.hxx"
49 // =======================================================================
51 DBG_NAME( AllSettings
)
53 // =======================================================================
55 ImplMouseData::ImplMouseData()
59 mnDoubleClkTime
= 500;
61 mnDoubleClkHeight
= 2;
63 mnStartDragHeight
= 2;
64 mnStartDragCode
= MOUSE_LEFT
;
66 mnDragCopyCode
= KEY_MOD1
;
67 mnDragLinkCode
= KEY_SHIFT
| KEY_MOD1
;
68 mnContextMenuCode
= MOUSE_RIGHT
;
69 mnContextMenuClicks
= 1;
70 mbContextMenuDown
= sal_True
;
71 mnMiddleButtonAction
= MOUSE_MIDDLE_AUTOSCROLL
;
73 mnButtonStartRepeat
= 370;
77 mnFollow
= MOUSE_FOLLOW_MENU
| MOUSE_FOLLOW_DDLIST
;
78 mnWheelBehavior
= MOUSE_WHEEL_ALWAYS
;
81 // -----------------------------------------------------------------------
83 ImplMouseData::ImplMouseData( const ImplMouseData
& rData
)
86 mnOptions
= rData
.mnOptions
;
87 mnDoubleClkTime
= rData
.mnDoubleClkTime
;
88 mnDoubleClkWidth
= rData
.mnDoubleClkWidth
;
89 mnDoubleClkHeight
= rData
.mnDoubleClkHeight
;
90 mnStartDragWidth
= rData
.mnStartDragWidth
;
91 mnStartDragHeight
= rData
.mnStartDragHeight
;
92 mnStartDragCode
= rData
.mnStartDragCode
;
93 mnDragMoveCode
= rData
.mnDragMoveCode
;
94 mnDragCopyCode
= rData
.mnDragCopyCode
;
95 mnDragLinkCode
= rData
.mnDragLinkCode
;
96 mnContextMenuCode
= rData
.mnContextMenuCode
;
97 mnContextMenuClicks
= rData
.mnContextMenuClicks
;
98 mbContextMenuDown
= rData
.mbContextMenuDown
;
99 mnMiddleButtonAction
= rData
.mnMiddleButtonAction
;
100 mnScrollRepeat
= rData
.mnScrollRepeat
;
101 mnButtonStartRepeat
= rData
.mnButtonStartRepeat
;
102 mnButtonRepeat
= rData
.mnButtonRepeat
;
103 mnActionDelay
= rData
.mnActionDelay
;
104 mnMenuDelay
= rData
.mnMenuDelay
;
105 mnFollow
= rData
.mnFollow
;
106 mnWheelBehavior
= rData
.mnWheelBehavior
;
109 // -----------------------------------------------------------------------
111 MouseSettings::MouseSettings()
113 mpData
= new ImplMouseData();
116 // -----------------------------------------------------------------------
118 MouseSettings::MouseSettings( const MouseSettings
& rSet
)
120 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "MouseSettings: RefCount overflow" );
122 // copy shared instance data and increment reference counter
123 mpData
= rSet
.mpData
;
124 mpData
->mnRefCount
++;
127 // -----------------------------------------------------------------------
129 MouseSettings::~MouseSettings()
131 // delete data if last reference
132 if ( mpData
->mnRefCount
== 1 )
135 mpData
->mnRefCount
--;
138 // -----------------------------------------------------------------------
140 const MouseSettings
& MouseSettings::operator =( const MouseSettings
& rSet
)
142 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "MouseSettings: RefCount overflow" );
144 // increment reference counter first, to be able to assign oneself
145 rSet
.mpData
->mnRefCount
++;
147 // delete data if last reference
148 if ( mpData
->mnRefCount
== 1 )
151 mpData
->mnRefCount
--;
153 mpData
= rSet
.mpData
;
158 // -----------------------------------------------------------------------
160 void MouseSettings::CopyData()
162 // copy if another references exist
163 if ( mpData
->mnRefCount
!= 1 )
165 mpData
->mnRefCount
--;
166 mpData
= new ImplMouseData( *mpData
);
170 // -----------------------------------------------------------------------
172 sal_Bool
MouseSettings::operator ==( const MouseSettings
& rSet
) const
174 if ( mpData
== rSet
.mpData
)
177 if ( (mpData
->mnOptions
== rSet
.mpData
->mnOptions
) &&
178 (mpData
->mnDoubleClkTime
== rSet
.mpData
->mnDoubleClkTime
) &&
179 (mpData
->mnDoubleClkWidth
== rSet
.mpData
->mnDoubleClkWidth
) &&
180 (mpData
->mnDoubleClkHeight
== rSet
.mpData
->mnDoubleClkHeight
) &&
181 (mpData
->mnStartDragWidth
== rSet
.mpData
->mnStartDragWidth
) &&
182 (mpData
->mnStartDragHeight
== rSet
.mpData
->mnStartDragHeight
) &&
183 (mpData
->mnStartDragCode
== rSet
.mpData
->mnStartDragCode
) &&
184 (mpData
->mnDragMoveCode
== rSet
.mpData
->mnDragMoveCode
) &&
185 (mpData
->mnDragCopyCode
== rSet
.mpData
->mnDragCopyCode
) &&
186 (mpData
->mnDragLinkCode
== rSet
.mpData
->mnDragLinkCode
) &&
187 (mpData
->mnContextMenuCode
== rSet
.mpData
->mnContextMenuCode
) &&
188 (mpData
->mnContextMenuClicks
== rSet
.mpData
->mnContextMenuClicks
) &&
189 (mpData
->mbContextMenuDown
== rSet
.mpData
->mbContextMenuDown
) &&
190 (mpData
->mnMiddleButtonAction
== rSet
.mpData
->mnMiddleButtonAction
) &&
191 (mpData
->mnScrollRepeat
== rSet
.mpData
->mnScrollRepeat
) &&
192 (mpData
->mnButtonStartRepeat
== rSet
.mpData
->mnButtonStartRepeat
) &&
193 (mpData
->mnButtonRepeat
== rSet
.mpData
->mnButtonRepeat
) &&
194 (mpData
->mnActionDelay
== rSet
.mpData
->mnActionDelay
) &&
195 (mpData
->mnMenuDelay
== rSet
.mpData
->mnMenuDelay
) &&
196 (mpData
->mnFollow
== rSet
.mpData
->mnFollow
) &&
197 (mpData
->mnWheelBehavior
== rSet
.mpData
->mnWheelBehavior
) )
203 // =======================================================================
205 ImplStyleData::ImplStyleData() :
206 maPersonaHeaderFooter(),
207 maPersonaHeaderBitmap(),
208 maPersonaFooterBitmap()
211 mnScrollBarSize
= 16;
215 mnIconHorzSpace
= 50;
216 mnIconVertSpace
= 40;
217 mnAntialiasedMin
= 0;
219 mnCursorBlinkTime
= STYLE_CURSOR_NOBLINKTIME
;
221 mnScreenFontZoom
= 100;
222 mnLogoDisplayTime
= LOGO_DISPLAYTIME_STARTTIME
;
223 mnDragFullOptions
= DRAGFULL_OPTION_WINDOWMOVE
| DRAGFULL_OPTION_WINDOWSIZE
|
224 DRAGFULL_OPTION_OBJECTMOVE
| DRAGFULL_OPTION_OBJECTSIZE
|
225 DRAGFULL_OPTION_DOCKING
| DRAGFULL_OPTION_SPLIT
|
226 DRAGFULL_OPTION_SCROLL
;
227 mnAnimationOptions
= 0;
228 mnSelectionOptions
= 0;
229 mnDisplayOptions
= 0;
232 mnToolbarIconSize
= STYLE_TOOLBAR_ICONSIZE_UNKNOWN
;
233 mnSymbolsStyle
= STYLE_SYMBOLS_AUTO
;
234 mnUseImagesInMenus
= STYLE_MENUIMAGES_AUTO
;
235 mnPreferredSymbolsStyle
= STYLE_SYMBOLS_AUTO
;
236 mpFontOptions
= NULL
;
238 maEdgeBlendingTopLeftColor
= RGB_COLORDATA(0xC0, 0xC0, 0xC0);
239 maEdgeBlendingBottomRightColor
= RGB_COLORDATA(0x40, 0x40, 0x40);
240 mnListBoxMaximumLineCount
= 25;
241 mnColorValueSetColumnCount
= 12;
242 mnColorValueSetMaximumRowCount
= 40;
243 maListBoxPreviewDefaultLogicSize
= Size(15, 7);
244 maListBoxPreviewDefaultPixelSize
= Size(0, 0); // on-demand calculated in GetListBoxPreviewDefaultPixelSize()
245 mnListBoxPreviewDefaultLineWidth
= 1;
250 // -----------------------------------------------------------------------
252 ImplStyleData::ImplStyleData( const ImplStyleData
& rData
) :
253 maActiveBorderColor( rData
.maActiveBorderColor
),
254 maActiveColor( rData
.maActiveColor
),
255 maActiveColor2( rData
.maActiveColor2
),
256 maActiveTextColor( rData
.maActiveTextColor
),
257 maButtonTextColor( rData
.maButtonTextColor
),
258 maButtonRolloverTextColor( rData
.maButtonRolloverTextColor
),
259 maCheckedColor( rData
.maCheckedColor
),
260 maDarkShadowColor( rData
.maDarkShadowColor
),
261 maDeactiveBorderColor( rData
.maDeactiveBorderColor
),
262 maDeactiveColor( rData
.maDeactiveColor
),
263 maDeactiveColor2( rData
.maDeactiveColor2
),
264 maDeactiveTextColor( rData
.maDeactiveTextColor
),
265 maDialogColor( rData
.maDialogColor
),
266 maDialogTextColor( rData
.maDialogTextColor
),
267 maDisableColor( rData
.maDisableColor
),
268 maFaceColor( rData
.maFaceColor
),
269 maFieldColor( rData
.maFieldColor
),
270 maFieldTextColor( rData
.maFieldTextColor
),
271 maFieldRolloverTextColor( rData
.maFieldRolloverTextColor
),
272 maFontColor( rData
.maFontColor
),
273 maGroupTextColor( rData
.maGroupTextColor
),
274 maHelpColor( rData
.maHelpColor
),
275 maHelpTextColor( rData
.maHelpTextColor
),
276 maHighlightColor( rData
.maHighlightColor
),
277 maHighlightLinkColor( rData
.maHighlightLinkColor
),
278 maHighlightTextColor( rData
.maHighlightTextColor
),
279 maInfoTextColor( rData
.maInfoTextColor
),
280 maLabelTextColor( rData
.maLabelTextColor
),
281 maLightBorderColor( rData
.maLightBorderColor
),
282 maLightColor( rData
.maLightColor
),
283 maLinkColor( rData
.maLinkColor
),
284 maMenuBarColor( rData
.maMenuBarColor
),
285 maMenuBarRolloverColor( rData
.maMenuBarRolloverColor
),
286 maMenuBorderColor( rData
.maMenuBorderColor
),
287 maMenuColor( rData
.maMenuColor
),
288 maMenuHighlightColor( rData
.maMenuHighlightColor
),
289 maMenuHighlightTextColor( rData
.maMenuHighlightTextColor
),
290 maMenuTextColor( rData
.maMenuTextColor
),
291 maMenuBarTextColor( rData
.maMenuBarTextColor
),
292 maMenuBarRolloverTextColor( rData
.maMenuBarRolloverTextColor
),
293 maMonoColor( rData
.maMonoColor
),
294 maRadioCheckTextColor( rData
.maRadioCheckTextColor
),
295 maShadowColor( rData
.maShadowColor
),
296 maVisitedLinkColor( rData
.maVisitedLinkColor
),
297 maWindowColor( rData
.maWindowColor
),
298 maWindowTextColor( rData
.maWindowTextColor
),
299 maWorkspaceColor( rData
.maWorkspaceColor
),
300 maActiveTabColor( rData
.maActiveTabColor
),
301 maInactiveTabColor( rData
.maInactiveTabColor
),
302 maAppFont( rData
.maAppFont
),
303 maHelpFont( rData
.maAppFont
),
304 maTitleFont( rData
.maTitleFont
),
305 maFloatTitleFont( rData
.maFloatTitleFont
),
306 maMenuFont( rData
.maMenuFont
),
307 maToolFont( rData
.maToolFont
),
308 maLabelFont( rData
.maLabelFont
),
309 maInfoFont( rData
.maInfoFont
),
310 maRadioCheckFont( rData
.maRadioCheckFont
),
311 maPushButtonFont( rData
.maPushButtonFont
),
312 maFieldFont( rData
.maFieldFont
),
313 maIconFont( rData
.maIconFont
),
314 maGroupFont( rData
.maGroupFont
),
315 maWorkspaceGradient( rData
.maWorkspaceGradient
),
316 maDialogStyle( rData
.maDialogStyle
),
317 maFrameStyle( rData
.maFrameStyle
),
318 maPersonaHeaderFooter( rData
.maPersonaHeaderFooter
),
319 maPersonaHeaderBitmap( rData
.maPersonaHeaderBitmap
),
320 maPersonaFooterBitmap( rData
.maPersonaFooterBitmap
)
323 mnBorderSize
= rData
.mnBorderSize
;
324 mnTitleHeight
= rData
.mnTitleHeight
;
325 mnFloatTitleHeight
= rData
.mnFloatTitleHeight
;
326 mnTearOffTitleHeight
= rData
.mnTearOffTitleHeight
;
327 mnMenuBarHeight
= rData
.mnMenuBarHeight
;
328 mnScrollBarSize
= rData
.mnScrollBarSize
;
329 mnMinThumbSize
= rData
.mnMinThumbSize
;
330 mnSplitSize
= rData
.mnSplitSize
;
331 mnSpinSize
= rData
.mnSpinSize
;
332 mnIconHorzSpace
= rData
.mnIconHorzSpace
;
333 mnIconVertSpace
= rData
.mnIconVertSpace
;
334 mnAntialiasedMin
= rData
.mnAntialiasedMin
;
335 mnCursorSize
= rData
.mnCursorSize
;
336 mnCursorBlinkTime
= rData
.mnCursorBlinkTime
;
337 mnScreenZoom
= rData
.mnScreenZoom
;
338 mnScreenFontZoom
= rData
.mnScreenFontZoom
;
339 mnLogoDisplayTime
= rData
.mnLogoDisplayTime
;
340 mnDragFullOptions
= rData
.mnDragFullOptions
;
341 mnAnimationOptions
= rData
.mnAnimationOptions
;
342 mnSelectionOptions
= rData
.mnSelectionOptions
;
343 mnDisplayOptions
= rData
.mnDisplayOptions
;
344 mnOptions
= rData
.mnOptions
;
345 mnHighContrast
= rData
.mnHighContrast
;
346 mnUseSystemUIFonts
= rData
.mnUseSystemUIFonts
;
347 mnUseFlatBorders
= rData
.mnUseFlatBorders
;
348 mnUseFlatMenus
= rData
.mnUseFlatMenus
;
349 mnAutoMnemonic
= rData
.mnAutoMnemonic
;
350 mnUseImagesInMenus
= rData
.mnUseImagesInMenus
;
351 mbPreferredUseImagesInMenus
= rData
.mbPreferredUseImagesInMenus
;
352 mnSkipDisabledInMenus
= rData
.mnSkipDisabledInMenus
;
353 mbHideDisabledMenuItems
= rData
.mbHideDisabledMenuItems
;
354 mbAcceleratorsInContextMenus
= rData
.mbAcceleratorsInContextMenus
;
355 mbPrimaryButtonWarpsSlider
= rData
.mbPrimaryButtonWarpsSlider
;
356 mnToolbarIconSize
= rData
.mnToolbarIconSize
;
357 mnSymbolsStyle
= rData
.mnSymbolsStyle
;
358 mnPreferredSymbolsStyle
= rData
.mnPreferredSymbolsStyle
;
359 mpFontOptions
= rData
.mpFontOptions
;
360 mnEdgeBlending
= rData
.mnEdgeBlending
;
361 maEdgeBlendingTopLeftColor
= rData
.maEdgeBlendingTopLeftColor
;
362 maEdgeBlendingBottomRightColor
= rData
.maEdgeBlendingBottomRightColor
;
363 mnListBoxMaximumLineCount
= rData
.mnListBoxMaximumLineCount
;
364 mnColorValueSetColumnCount
= rData
.mnColorValueSetColumnCount
;
365 mnColorValueSetMaximumRowCount
= rData
.mnColorValueSetMaximumRowCount
;
366 maListBoxPreviewDefaultLogicSize
= rData
.maListBoxPreviewDefaultLogicSize
;
367 maListBoxPreviewDefaultPixelSize
= rData
.maListBoxPreviewDefaultPixelSize
;
368 mnListBoxPreviewDefaultLineWidth
= rData
.mnListBoxPreviewDefaultLineWidth
;
371 // -----------------------------------------------------------------------
373 void ImplStyleData::SetStandardStyles()
375 Font
aStdFont( FAMILY_SWISS
, Size( 0, 8 ) );
376 aStdFont
.SetCharSet( osl_getThreadTextEncoding() );
377 aStdFont
.SetWeight( WEIGHT_NORMAL
);
378 aStdFont
.SetName( utl::DefaultFontConfiguration::get().getUserInterfaceFont(com::sun::star::lang::Locale( OUString( "en" ), OUString(), OUString() ) ) );
379 maAppFont
= aStdFont
;
380 maHelpFont
= aStdFont
;
381 maMenuFont
= aStdFont
;
382 maToolFont
= aStdFont
;
383 maGroupFont
= aStdFont
;
384 maLabelFont
= aStdFont
;
385 maInfoFont
= aStdFont
;
386 maRadioCheckFont
= aStdFont
;
387 maPushButtonFont
= aStdFont
;
388 maFieldFont
= aStdFont
;
389 maIconFont
= aStdFont
;
390 aStdFont
.SetWeight( WEIGHT_BOLD
);
391 maFloatTitleFont
= aStdFont
;
392 maTitleFont
= aStdFont
;
394 maFaceColor
= Color( COL_LIGHTGRAY
);
395 maCheckedColor
= Color( 0xCC, 0xCC, 0xCC );
396 maLightColor
= Color( COL_WHITE
);
397 maLightBorderColor
= Color( COL_LIGHTGRAY
);
398 maShadowColor
= Color( COL_GRAY
);
399 maDarkShadowColor
= Color( COL_BLACK
);
400 maButtonTextColor
= Color( COL_BLACK
);
401 maButtonRolloverTextColor
= Color( COL_BLACK
);
402 maRadioCheckTextColor
= Color( COL_BLACK
);
403 maGroupTextColor
= Color( COL_BLACK
);
404 maLabelTextColor
= Color( COL_BLACK
);
405 maInfoTextColor
= Color( COL_BLACK
);
406 maWindowColor
= Color( COL_WHITE
);
407 maWindowTextColor
= Color( COL_BLACK
);
408 maDialogColor
= Color( COL_LIGHTGRAY
);
409 maDialogTextColor
= Color( COL_BLACK
);
410 maWorkspaceColor
= Color( 0xF0, 0xF0, 0xF0 );
411 maMonoColor
= Color( COL_BLACK
);
412 maFieldColor
= Color( COL_WHITE
);
413 maFieldTextColor
= Color( COL_BLACK
);
414 maFieldRolloverTextColor
= Color( COL_BLACK
);
415 maActiveColor
= Color( COL_BLUE
);
416 maActiveColor2
= Color( COL_BLACK
);
417 maActiveTextColor
= Color( COL_WHITE
);
418 maActiveBorderColor
= Color( COL_LIGHTGRAY
);
419 maDeactiveColor
= Color( COL_GRAY
);
420 maDeactiveColor2
= Color( COL_BLACK
);
421 maDeactiveTextColor
= Color( COL_LIGHTGRAY
);
422 maDeactiveBorderColor
= Color( COL_LIGHTGRAY
);
423 maMenuColor
= Color( COL_LIGHTGRAY
);
424 maMenuBarColor
= Color( COL_LIGHTGRAY
);
425 maMenuBarRolloverColor
= Color( COL_BLUE
);
426 maMenuBorderColor
= Color( COL_LIGHTGRAY
);
427 maMenuTextColor
= Color( COL_BLACK
);
428 maMenuBarTextColor
= Color( COL_BLACK
);
429 maMenuBarRolloverTextColor
= Color( COL_WHITE
);
430 maMenuHighlightColor
= Color( COL_BLUE
);
431 maMenuHighlightTextColor
= Color( COL_WHITE
);
432 maHighlightColor
= Color( COL_BLUE
);
433 maHighlightTextColor
= Color( COL_WHITE
);
434 maActiveTabColor
= Color( COL_WHITE
);
435 maInactiveTabColor
= Color( COL_LIGHTGRAY
);
436 maDisableColor
= Color( COL_GRAY
);
437 maHelpColor
= Color( 0xFF, 0xFF, 0xE0 );
438 maHelpTextColor
= Color( COL_BLACK
);
439 maLinkColor
= Color( COL_BLUE
);
440 maVisitedLinkColor
= Color( 0x00, 0x00, 0xCC );
441 maHighlightLinkColor
= Color( COL_LIGHTBLUE
);
442 maFontColor
= Color( COL_BLACK
);
446 mnFloatTitleHeight
= 13;
447 mnTearOffTitleHeight
= 8;
448 mnMenuBarHeight
= 14;
450 mnUseSystemUIFonts
= 1;
451 mnUseFlatBorders
= 0;
453 mbPreferredUseImagesInMenus
= sal_True
;
454 mnSkipDisabledInMenus
= (sal_uInt16
)sal_False
;
455 mbHideDisabledMenuItems
= sal_False
;
456 mbAcceleratorsInContextMenus
= sal_True
;
457 mbPrimaryButtonWarpsSlider
= sal_False
;
459 Gradient
aGrad( GradientStyle_LINEAR
, DEFAULT_WORKSPACE_GRADIENT_START_COLOR
, DEFAULT_WORKSPACE_GRADIENT_END_COLOR
);
460 maWorkspaceGradient
= Wallpaper( aGrad
);
463 // -----------------------------------------------------------------------
465 StyleSettings::StyleSettings()
467 mpData
= new ImplStyleData();
470 // -----------------------------------------------------------------------
472 StyleSettings::StyleSettings( const StyleSettings
& rSet
)
474 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "StyleSettings: RefCount overflow" );
476 // copy shared instance data and increment reference counter
477 mpData
= rSet
.mpData
;
478 mpData
->mnRefCount
++;
481 // -----------------------------------------------------------------------
483 StyleSettings::~StyleSettings()
485 // if last reference then delete data
486 if ( mpData
->mnRefCount
== 1 )
489 mpData
->mnRefCount
--;
492 const Size
& StyleSettings::GetListBoxPreviewDefaultPixelSize() const
494 if(0 == mpData
->maListBoxPreviewDefaultPixelSize
.Width() || 0 == mpData
->maListBoxPreviewDefaultPixelSize
.Height())
496 const_cast< StyleSettings
* >(this)->mpData
->maListBoxPreviewDefaultPixelSize
=
497 Application::GetDefaultDevice()->LogicToPixel(mpData
->maListBoxPreviewDefaultLogicSize
, MAP_APPFONT
);
500 return mpData
->maListBoxPreviewDefaultPixelSize
;
503 // -----------------------------------------------------------------------
505 void StyleSettings::Set3DColors( const Color
& rColor
)
508 mpData
->maFaceColor
= rColor
;
509 mpData
->maLightBorderColor
= rColor
;
510 mpData
->maMenuBorderColor
= rColor
;
511 mpData
->maDarkShadowColor
= Color( COL_BLACK
);
512 if ( rColor
!= Color( COL_LIGHTGRAY
) )
514 mpData
->maLightColor
= rColor
;
515 mpData
->maShadowColor
= rColor
;
516 mpData
->maDarkShadowColor
=rColor
;
517 mpData
->maLightColor
.IncreaseLuminance( 64 );
518 mpData
->maShadowColor
.DecreaseLuminance( 64 );
519 mpData
->maDarkShadowColor
.DecreaseLuminance( 100 );
520 sal_uLong nRed
= mpData
->maLightColor
.GetRed();
521 sal_uLong nGreen
= mpData
->maLightColor
.GetGreen();
522 sal_uLong nBlue
= mpData
->maLightColor
.GetBlue();
523 nRed
+= (sal_uLong
)(mpData
->maShadowColor
.GetRed());
524 nGreen
+= (sal_uLong
)(mpData
->maShadowColor
.GetGreen());
525 nBlue
+= (sal_uLong
)(mpData
->maShadowColor
.GetBlue());
526 mpData
->maCheckedColor
= Color( (sal_uInt8
)(nRed
/2), (sal_uInt8
)(nGreen
/2), (sal_uInt8
)(nBlue
/2) );
530 mpData
->maCheckedColor
= Color( 0x99, 0x99, 0x99 );
531 mpData
->maLightColor
= Color( COL_WHITE
);
532 mpData
->maShadowColor
= Color( COL_GRAY
);
536 // -----------------------------------------------------------------------
538 OUString
StyleSettings::ImplSymbolsStyleToName( sal_uLong nStyle
) const
542 case STYLE_SYMBOLS_DEFAULT
: return OUString("default");
543 case STYLE_SYMBOLS_HICONTRAST
: return OUString("hicontrast");
544 case STYLE_SYMBOLS_INDUSTRIAL
: return OUString("tango"); // industrial is dead
545 case STYLE_SYMBOLS_CRYSTAL
: return OUString("crystal");
546 case STYLE_SYMBOLS_TANGO
: return OUString("tango");
547 case STYLE_SYMBOLS_OXYGEN
: return OUString("oxygen");
548 case STYLE_SYMBOLS_CLASSIC
: return OUString("classic");
549 case STYLE_SYMBOLS_HUMAN
: return OUString("human");
550 case STYLE_SYMBOLS_TANGO_TESTING
: return OUString("tango_testing");
553 return OUString("auto");
556 // -----------------------------------------------------------------------
558 sal_uLong
StyleSettings::ImplNameToSymbolsStyle( const OUString
&rName
) const
560 if ( rName
== OUString("default") )
561 return STYLE_SYMBOLS_DEFAULT
;
562 else if ( rName
== OUString("hicontrast") )
563 return STYLE_SYMBOLS_HICONTRAST
;
564 else if ( rName
== OUString("industrial") )
565 return STYLE_SYMBOLS_TANGO
; // industrial is dead
566 else if ( rName
== OUString("crystal") )
567 return STYLE_SYMBOLS_CRYSTAL
;
568 else if ( rName
== OUString("tango") )
569 return STYLE_SYMBOLS_TANGO
;
570 else if ( rName
== OUString("oxygen") )
571 return STYLE_SYMBOLS_OXYGEN
;
572 else if ( rName
== OUString("classic") )
573 return STYLE_SYMBOLS_CLASSIC
;
574 else if ( rName
== OUString("human") )
575 return STYLE_SYMBOLS_HUMAN
;
576 else if ( rName
== OUString("tango_testing") )
577 return STYLE_SYMBOLS_TANGO_TESTING
;
579 return STYLE_SYMBOLS_AUTO
;
582 // -----------------------------------------------------------------------
585 The preferred style name can be read from the desktop setting. We
586 need to find the closest theme name registered in OOo. Therefore
587 we check if any registered style name is a case-insensitive
588 substring of the preferred style name.
590 void StyleSettings::SetPreferredSymbolsStyleName( const OUString
&rName
)
592 if ( !rName
.isEmpty() )
594 OUString
rNameLowCase( rName
.toAsciiLowerCase() );
596 for( sal_uInt32 n
= 0; n
<= STYLE_SYMBOLS_THEMES_MAX
; n
++ )
597 if ( rNameLowCase
.indexOf( ImplSymbolsStyleToName( n
) ) != -1 )
598 SetPreferredSymbolsStyle( n
);
602 void StyleSettings::SetCheckedColorSpecialCase( )
605 // Light gray checked color special case
606 if ( GetFaceColor() == COL_LIGHTGRAY
)
607 mpData
->maCheckedColor
= Color( 0xCC, 0xCC, 0xCC );
610 sal_uInt8 nRed
= (sal_uInt8
)(((sal_uInt16
)mpData
->maFaceColor
.GetRed() + (sal_uInt16
)mpData
->maLightColor
.GetRed())/2);
611 sal_uInt8 nGreen
= (sal_uInt8
)(((sal_uInt16
)mpData
->maFaceColor
.GetGreen() + (sal_uInt16
)mpData
->maLightColor
.GetGreen())/2);
612 sal_uInt8 nBlue
= (sal_uInt8
)(((sal_uInt16
)mpData
->maFaceColor
.GetBlue() + (sal_uInt16
)mpData
->maLightColor
.GetBlue())/2);
613 mpData
->maCheckedColor
= Color( nRed
, nGreen
, nBlue
);
617 // -----------------------------------------------------------------------
619 sal_uLong
StyleSettings::GetCurrentSymbolsStyle() const
621 // style selected in Tools -> Options... -> OpenOffice.org -> View
622 sal_uLong nStyle
= GetSymbolsStyle();
624 if ( nStyle
== STYLE_SYMBOLS_AUTO
|| ( !CheckSymbolStyle (nStyle
) ) )
626 // the preferred style can be read from the desktop setting by the desktop native widgets modules
627 sal_uLong nPreferredStyle
= GetPreferredSymbolsStyle();
629 if ( nPreferredStyle
== STYLE_SYMBOLS_AUTO
|| ( !CheckSymbolStyle (nPreferredStyle
) ) )
632 // use a hardcoded desktop-specific fallback if no preferred style has been detected
633 static bool sbFallbackDesktopChecked
= false;
634 static sal_uLong snFallbackDesktopStyle
= STYLE_SYMBOLS_DEFAULT
;
636 if ( !sbFallbackDesktopChecked
)
638 snFallbackDesktopStyle
= GetAutoSymbolsStyle();
639 sbFallbackDesktopChecked
= true;
642 nPreferredStyle
= snFallbackDesktopStyle
;
645 if (GetHighContrastMode() && CheckSymbolStyle (STYLE_SYMBOLS_HICONTRAST
) )
646 nStyle
= STYLE_SYMBOLS_HICONTRAST
;
648 nStyle
= nPreferredStyle
;
654 // -----------------------------------------------------------------------
656 sal_uLong
StyleSettings::GetAutoSymbolsStyle() const
658 OUString
const & env
= Application::GetDesktopEnvironment();
661 if ( env
.equalsIgnoreAsciiCase("tde") ||
662 env
.equalsIgnoreAsciiCase("kde") )
663 nRet
= STYLE_SYMBOLS_CRYSTAL
;
664 else if ( env
.equalsIgnoreAsciiCase("kde4") )
665 nRet
= STYLE_SYMBOLS_OXYGEN
;
667 nRet
= STYLE_SYMBOLS_TANGO
;
669 // falback to any existing style
670 if ( ! CheckSymbolStyle (nRet
) )
672 for ( sal_uLong n
= 0 ; n
<= STYLE_SYMBOLS_THEMES_MAX
; n
++ )
674 sal_uLong nStyleToCheck
= n
;
676 // auto is not a real theme => can't be fallback
677 if ( nStyleToCheck
== STYLE_SYMBOLS_AUTO
)
680 // will check hicontrast in the end
681 if ( nStyleToCheck
== STYLE_SYMBOLS_HICONTRAST
)
683 if ( nStyleToCheck
== STYLE_SYMBOLS_THEMES_MAX
)
684 nStyleToCheck
= STYLE_SYMBOLS_HICONTRAST
;
686 if ( CheckSymbolStyle ( nStyleToCheck
) )
688 nRet
= nStyleToCheck
;
689 n
= STYLE_SYMBOLS_THEMES_MAX
;
697 // -----------------------------------------------------------------------
699 bool StyleSettings::CheckSymbolStyle( sal_uLong nStyle
) const
701 if ( nStyle
== STYLE_SYMBOLS_INDUSTRIAL
)
702 return false; // industrial is dead
704 static ImplImageTreeSingletonRef aImageTree
;
705 return aImageTree
->checkStyle( ImplSymbolsStyleToName( nStyle
) );
708 // -----------------------------------------------------------------------
710 sal_Bool
StyleSettings::GetUseImagesInMenus() const
712 // icon mode selected in Tools -> Options... -> OpenOffice.org -> View
713 sal_uInt16 nStyle
= mpData
->mnUseImagesInMenus
;
715 if ( nStyle
== STYLE_MENUIMAGES_AUTO
)
716 return GetPreferredUseImagesInMenus();
718 return (sal_Bool
)nStyle
;
721 // -----------------------------------------------------------------------
723 static BitmapEx
readBitmapEx( const OUString
& rPath
)
725 OUString
aPath( rPath
);
726 rtl::Bootstrap::expandMacros( aPath
);
730 if ( GraphicFilter::LoadGraphic( aPath
, String(), aGraphic
) != GRFILTER_OK
)
733 return aGraphic
.GetBitmapEx();
736 enum WhichPersona
{ PERSONA_HEADER
, PERSONA_FOOTER
};
738 /** Update the setting of the Persona header / footer in ImplStyleData */
739 static void setupPersonaHeaderFooter( WhichPersona eWhich
, OUString
& rHeaderFooter
, BitmapEx
& rHeaderFooterBitmap
, Color
& maMenuBarTextColor
)
741 uno::Reference
< uno::XComponentContext
> xContext( comphelper::getProcessComponentContext() );
742 if ( !xContext
.is() )
745 // read from the configuration
746 OUString
aPersona( officecfg::Office::Common::Misc::Persona::get( xContext
) );
747 OUString
aPersonaSettings( officecfg::Office::Common::Misc::PersonaSettings::get( xContext
) );
749 // have the settings changed?
750 OUString
aOldValue( aPersona
+ ";" + aPersonaSettings
);
751 if ( rHeaderFooter
== aOldValue
)
754 rHeaderFooter
= aOldValue
;
755 rHeaderFooterBitmap
= BitmapEx();
757 // now read the new values and setup bitmaps
758 OUString aHeader
, aFooter
;
759 if ( aPersona
== "own" )
761 sal_Int32 nIndex
= 0;
762 aHeader
= aPersonaSettings
.getToken( 0, ';', nIndex
);
764 aFooter
= aPersonaSettings
.getToken( 0, ';', nIndex
);
766 // change menu text color, advance nIndex to skip the '#'
769 OUString aColor
= aPersonaSettings
.getToken( 0, ';', ++nIndex
);
770 maMenuBarTextColor
= Color( aColor
.toInt64( 16 ) );
773 else if ( aPersona
== "default" )
775 aHeader
= "header.jpg";
776 aFooter
= "footer.jpg";
781 case PERSONA_HEADER
: aName
= aHeader
; break;
782 case PERSONA_FOOTER
: aName
= aFooter
; break;
785 if ( !aName
.isEmpty() )
787 // try the gallery first, then the program path:
788 OUString gallery
= "${$BRAND_BASE_DIR/program/" SAL_CONFIGFILE( "bootstrap") "::UserInstallation}";
789 rtl::Bootstrap::expandMacros( gallery
);
790 gallery
+= "/user/gallery/personas/";
792 if ( aPersona
== "own" )
793 rHeaderFooterBitmap
= readBitmapEx( gallery
+ aName
);
795 if ( rHeaderFooterBitmap
.IsEmpty() )
796 rHeaderFooterBitmap
= readBitmapEx( "$BRAND_BASE_DIR/program/" + aName
);
800 const BitmapEx
StyleSettings::GetPersonaHeader() const
802 setupPersonaHeaderFooter( PERSONA_HEADER
, mpData
->maPersonaHeaderFooter
, mpData
->maPersonaHeaderBitmap
, mpData
->maMenuBarTextColor
);
803 return mpData
->maPersonaHeaderBitmap
;
806 // -----------------------------------------------------------------------
808 void StyleSettings::SetStandardStyles()
811 mpData
->SetStandardStyles();
814 // -----------------------------------------------------------------------
816 Color
StyleSettings::GetFaceGradientColor() const
818 // compute a brighter face color that can be used in gradients
819 // for a convex look (eg toolbars)
822 GetFaceColor().RGBtoHSB( h
, s
, b
);
825 return Color( Color::HSBtoRGB( h
, s
, b
) );
828 // -----------------------------------------------------------------------
830 Color
StyleSettings::GetSeparatorColor() const
832 // compute a brighter shadow color for separators (used in toolbars or between menubar and toolbars on Windows XP)
834 GetShadowColor().RGBtoHSB( h
, s
, b
);
837 return Color( Color::HSBtoRGB( h
, s
, b
) );
840 // -----------------------------------------------------------------------
842 const StyleSettings
& StyleSettings::operator =( const StyleSettings
& rSet
)
844 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "StyleSettings: RefCount overflow" );
846 // increase reference counter first, to be able to assign oneself
847 rSet
.mpData
->mnRefCount
++;
849 // if last reference then delete data
850 if ( mpData
->mnRefCount
== 1 )
853 mpData
->mnRefCount
--;
855 mpData
= rSet
.mpData
;
860 // -----------------------------------------------------------------------
862 void StyleSettings::CopyData()
864 // copy if other references exist
865 if ( mpData
->mnRefCount
!= 1 )
867 mpData
->mnRefCount
--;
868 mpData
= new ImplStyleData( *mpData
);
872 // -----------------------------------------------------------------------
874 sal_Bool
StyleSettings::operator ==( const StyleSettings
& rSet
) const
876 if ( mpData
== rSet
.mpData
)
879 if ( (mpData
->mnOptions
== rSet
.mpData
->mnOptions
) &&
880 (mpData
->mnAutoMnemonic
== rSet
.mpData
->mnAutoMnemonic
) &&
881 (mpData
->mnLogoDisplayTime
== rSet
.mpData
->mnLogoDisplayTime
) &&
882 (mpData
->mnDragFullOptions
== rSet
.mpData
->mnDragFullOptions
) &&
883 (mpData
->mnAnimationOptions
== rSet
.mpData
->mnAnimationOptions
) &&
884 (mpData
->mnSelectionOptions
== rSet
.mpData
->mnSelectionOptions
) &&
885 (mpData
->mnDisplayOptions
== rSet
.mpData
->mnDisplayOptions
) &&
886 (mpData
->mnCursorSize
== rSet
.mpData
->mnCursorSize
) &&
887 (mpData
->mnCursorBlinkTime
== rSet
.mpData
->mnCursorBlinkTime
) &&
888 (mpData
->mnBorderSize
== rSet
.mpData
->mnBorderSize
) &&
889 (mpData
->mnTitleHeight
== rSet
.mpData
->mnTitleHeight
) &&
890 (mpData
->mnFloatTitleHeight
== rSet
.mpData
->mnFloatTitleHeight
) &&
891 (mpData
->mnTearOffTitleHeight
== rSet
.mpData
->mnTearOffTitleHeight
) &&
892 (mpData
->mnMenuBarHeight
== rSet
.mpData
->mnMenuBarHeight
) &&
893 (mpData
->mnScrollBarSize
== rSet
.mpData
->mnScrollBarSize
) &&
894 (mpData
->mnMinThumbSize
== rSet
.mpData
->mnMinThumbSize
) &&
895 (mpData
->mnSplitSize
== rSet
.mpData
->mnSplitSize
) &&
896 (mpData
->mnSpinSize
== rSet
.mpData
->mnSpinSize
) &&
897 (mpData
->mnIconHorzSpace
== rSet
.mpData
->mnIconHorzSpace
) &&
898 (mpData
->mnIconVertSpace
== rSet
.mpData
->mnIconVertSpace
) &&
899 (mpData
->mnAntialiasedMin
== rSet
.mpData
->mnAntialiasedMin
) &&
900 (mpData
->mnScreenZoom
== rSet
.mpData
->mnScreenZoom
) &&
901 (mpData
->mnScreenFontZoom
== rSet
.mpData
->mnScreenFontZoom
) &&
902 (mpData
->mnHighContrast
== rSet
.mpData
->mnHighContrast
) &&
903 (mpData
->mnUseSystemUIFonts
== rSet
.mpData
->mnUseSystemUIFonts
) &&
904 (mpData
->mnUseFlatBorders
== rSet
.mpData
->mnUseFlatBorders
) &&
905 (mpData
->mnUseFlatMenus
== rSet
.mpData
->mnUseFlatMenus
) &&
906 (mpData
->mnSymbolsStyle
== rSet
.mpData
->mnSymbolsStyle
) &&
907 (mpData
->mnPreferredSymbolsStyle
== rSet
.mpData
->mnPreferredSymbolsStyle
) &&
908 (mpData
->maFaceColor
== rSet
.mpData
->maFaceColor
) &&
909 (mpData
->maCheckedColor
== rSet
.mpData
->maCheckedColor
) &&
910 (mpData
->maLightColor
== rSet
.mpData
->maLightColor
) &&
911 (mpData
->maLightBorderColor
== rSet
.mpData
->maLightBorderColor
) &&
912 (mpData
->maShadowColor
== rSet
.mpData
->maShadowColor
) &&
913 (mpData
->maDarkShadowColor
== rSet
.mpData
->maDarkShadowColor
) &&
914 (mpData
->maButtonTextColor
== rSet
.mpData
->maButtonTextColor
) &&
915 (mpData
->maRadioCheckTextColor
== rSet
.mpData
->maRadioCheckTextColor
) &&
916 (mpData
->maGroupTextColor
== rSet
.mpData
->maGroupTextColor
) &&
917 (mpData
->maLabelTextColor
== rSet
.mpData
->maLabelTextColor
) &&
918 (mpData
->maInfoTextColor
== rSet
.mpData
->maInfoTextColor
) &&
919 (mpData
->maWindowColor
== rSet
.mpData
->maWindowColor
) &&
920 (mpData
->maWindowTextColor
== rSet
.mpData
->maWindowTextColor
) &&
921 (mpData
->maDialogColor
== rSet
.mpData
->maDialogColor
) &&
922 (mpData
->maDialogTextColor
== rSet
.mpData
->maDialogTextColor
) &&
923 (mpData
->maWorkspaceColor
== rSet
.mpData
->maWorkspaceColor
) &&
924 (mpData
->maMonoColor
== rSet
.mpData
->maMonoColor
) &&
925 (mpData
->maFieldColor
== rSet
.mpData
->maFieldColor
) &&
926 (mpData
->maFieldTextColor
== rSet
.mpData
->maFieldTextColor
) &&
927 (mpData
->maActiveColor
== rSet
.mpData
->maActiveColor
) &&
928 (mpData
->maActiveColor2
== rSet
.mpData
->maActiveColor2
) &&
929 (mpData
->maActiveTextColor
== rSet
.mpData
->maActiveTextColor
) &&
930 (mpData
->maActiveBorderColor
== rSet
.mpData
->maActiveBorderColor
) &&
931 (mpData
->maDeactiveColor
== rSet
.mpData
->maDeactiveColor
) &&
932 (mpData
->maDeactiveColor2
== rSet
.mpData
->maDeactiveColor2
) &&
933 (mpData
->maDeactiveTextColor
== rSet
.mpData
->maDeactiveTextColor
) &&
934 (mpData
->maDeactiveBorderColor
== rSet
.mpData
->maDeactiveBorderColor
) &&
935 (mpData
->maMenuColor
== rSet
.mpData
->maMenuColor
) &&
936 (mpData
->maMenuBarColor
== rSet
.mpData
->maMenuBarColor
) &&
937 (mpData
->maMenuBarRolloverColor
== rSet
.mpData
->maMenuBarRolloverColor
) &&
938 (mpData
->maMenuBorderColor
== rSet
.mpData
->maMenuBorderColor
) &&
939 (mpData
->maMenuTextColor
== rSet
.mpData
->maMenuTextColor
) &&
940 (mpData
->maMenuBarTextColor
== rSet
.mpData
->maMenuBarTextColor
) &&
941 (mpData
->maMenuBarRolloverTextColor
== rSet
.mpData
->maMenuBarRolloverTextColor
) &&
942 (mpData
->maMenuHighlightColor
== rSet
.mpData
->maMenuHighlightColor
) &&
943 (mpData
->maMenuHighlightTextColor
== rSet
.mpData
->maMenuHighlightTextColor
) &&
944 (mpData
->maHighlightColor
== rSet
.mpData
->maHighlightColor
) &&
945 (mpData
->maHighlightTextColor
== rSet
.mpData
->maHighlightTextColor
) &&
946 (mpData
->maActiveTabColor
== rSet
.mpData
->maActiveTabColor
) &&
947 (mpData
->maInactiveTabColor
== rSet
.mpData
->maInactiveTabColor
) &&
948 (mpData
->maDisableColor
== rSet
.mpData
->maDisableColor
) &&
949 (mpData
->maHelpColor
== rSet
.mpData
->maHelpColor
) &&
950 (mpData
->maHelpTextColor
== rSet
.mpData
->maHelpTextColor
) &&
951 (mpData
->maLinkColor
== rSet
.mpData
->maLinkColor
) &&
952 (mpData
->maVisitedLinkColor
== rSet
.mpData
->maVisitedLinkColor
) &&
953 (mpData
->maHighlightLinkColor
== rSet
.mpData
->maHighlightLinkColor
) &&
954 (mpData
->maAppFont
== rSet
.mpData
->maAppFont
) &&
955 (mpData
->maHelpFont
== rSet
.mpData
->maHelpFont
) &&
956 (mpData
->maTitleFont
== rSet
.mpData
->maTitleFont
) &&
957 (mpData
->maFloatTitleFont
== rSet
.mpData
->maFloatTitleFont
) &&
958 (mpData
->maMenuFont
== rSet
.mpData
->maMenuFont
) &&
959 (mpData
->maToolFont
== rSet
.mpData
->maToolFont
) &&
960 (mpData
->maGroupFont
== rSet
.mpData
->maGroupFont
) &&
961 (mpData
->maLabelFont
== rSet
.mpData
->maLabelFont
) &&
962 (mpData
->maInfoFont
== rSet
.mpData
->maInfoFont
) &&
963 (mpData
->maRadioCheckFont
== rSet
.mpData
->maRadioCheckFont
) &&
964 (mpData
->maPushButtonFont
== rSet
.mpData
->maPushButtonFont
) &&
965 (mpData
->maFieldFont
== rSet
.mpData
->maFieldFont
) &&
966 (mpData
->maIconFont
== rSet
.mpData
->maIconFont
) &&
967 (mpData
->mnUseImagesInMenus
== rSet
.mpData
->mnUseImagesInMenus
) &&
968 (mpData
->mbPreferredUseImagesInMenus
== rSet
.mpData
->mbPreferredUseImagesInMenus
) &&
969 (mpData
->mnSkipDisabledInMenus
== rSet
.mpData
->mnSkipDisabledInMenus
) &&
970 (mpData
->mbHideDisabledMenuItems
== rSet
.mpData
->mbHideDisabledMenuItems
) &&
971 (mpData
->mbAcceleratorsInContextMenus
== rSet
.mpData
->mbAcceleratorsInContextMenus
)&&
972 (mpData
->mbPrimaryButtonWarpsSlider
== rSet
.mpData
->mbPrimaryButtonWarpsSlider
) &&
973 (mpData
->maFontColor
== rSet
.mpData
->maFontColor
) &&
974 (mpData
->mnEdgeBlending
== rSet
.mpData
->mnEdgeBlending
) &&
975 (mpData
->maEdgeBlendingTopLeftColor
== rSet
.mpData
->maEdgeBlendingTopLeftColor
) &&
976 (mpData
->maEdgeBlendingBottomRightColor
== rSet
.mpData
->maEdgeBlendingBottomRightColor
) &&
977 (mpData
->mnListBoxMaximumLineCount
== rSet
.mpData
->mnListBoxMaximumLineCount
) &&
978 (mpData
->mnColorValueSetColumnCount
== rSet
.mpData
->mnColorValueSetColumnCount
) &&
979 (mpData
->mnColorValueSetMaximumRowCount
== rSet
.mpData
->mnColorValueSetMaximumRowCount
) &&
980 (mpData
->maListBoxPreviewDefaultLogicSize
== rSet
.mpData
->maListBoxPreviewDefaultLogicSize
) &&
981 (mpData
->maListBoxPreviewDefaultPixelSize
== rSet
.mpData
->maListBoxPreviewDefaultPixelSize
) &&
982 (mpData
->mnListBoxPreviewDefaultLineWidth
== rSet
.mpData
->mnListBoxPreviewDefaultLineWidth
))
988 // =======================================================================
990 ImplMiscData::ImplMiscData()
993 mnEnableATT
= sal::static_int_cast
<sal_uInt16
>(~0U);
994 mnDisablePrinting
= sal::static_int_cast
<sal_uInt16
>(~0U);
995 static const char* pEnv
= getenv("SAL_DECIMALSEP_ENABLED" ); // set default without UI
996 mbEnableLocalizedDecimalSep
= (pEnv
!= NULL
) ? sal_True
: sal_False
;
999 // -----------------------------------------------------------------------
1001 ImplMiscData::ImplMiscData( const ImplMiscData
& rData
)
1004 mnEnableATT
= rData
.mnEnableATT
;
1005 mnDisablePrinting
= rData
.mnDisablePrinting
;
1006 mbEnableLocalizedDecimalSep
= rData
.mbEnableLocalizedDecimalSep
;
1009 // -----------------------------------------------------------------------
1011 MiscSettings::MiscSettings()
1013 mpData
= new ImplMiscData();
1016 // -----------------------------------------------------------------------
1018 MiscSettings::MiscSettings( const MiscSettings
& rSet
)
1020 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "MiscSettings: RefCount overflow" );
1022 // copy shared instance data and increment reference counter
1023 mpData
= rSet
.mpData
;
1024 mpData
->mnRefCount
++;
1027 // -----------------------------------------------------------------------
1029 MiscSettings::~MiscSettings()
1031 // if last reference then delete data
1032 if ( mpData
->mnRefCount
== 1 )
1035 mpData
->mnRefCount
--;
1038 // -----------------------------------------------------------------------
1040 const MiscSettings
& MiscSettings::operator =( const MiscSettings
& rSet
)
1042 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "MiscSettings: RefCount overflow" );
1044 // increase reference counter first, to be able to assign oneself
1045 rSet
.mpData
->mnRefCount
++;
1047 // if last reference then delete data
1048 if ( mpData
->mnRefCount
== 1 )
1051 mpData
->mnRefCount
--;
1053 mpData
= rSet
.mpData
;
1058 // -----------------------------------------------------------------------
1060 void MiscSettings::CopyData()
1062 // copy if other references exist
1063 if ( mpData
->mnRefCount
!= 1 )
1065 mpData
->mnRefCount
--;
1066 mpData
= new ImplMiscData( *mpData
);
1070 // -----------------------------------------------------------------------
1072 sal_Bool
MiscSettings::operator ==( const MiscSettings
& rSet
) const
1074 if ( mpData
== rSet
.mpData
)
1077 if ( (mpData
->mnEnableATT
== rSet
.mpData
->mnEnableATT
) &&
1078 (mpData
->mnDisablePrinting
== rSet
.mpData
->mnDisablePrinting
) &&
1079 (mpData
->mbEnableLocalizedDecimalSep
== rSet
.mpData
->mbEnableLocalizedDecimalSep
) )
1085 // -----------------------------------------------------------------------
1087 sal_Bool
MiscSettings::GetDisablePrinting() const
1089 if( mpData
->mnDisablePrinting
== (sal_uInt16
)~0 )
1092 vcl::SettingsConfigItem::get()->
1093 getValue( OUString( "DesktopManagement" ),
1094 OUString( "DisablePrinting" ) );
1095 mpData
->mnDisablePrinting
= aEnable
.equalsIgnoreAsciiCase("true") ? 1 : 0;
1098 return (sal_Bool
)mpData
->mnDisablePrinting
;
1100 // -----------------------------------------------------------------------
1102 sal_Bool
MiscSettings::GetEnableATToolSupport() const
1106 if( mpData
->mnEnableATT
== (sal_uInt16
)~0 )
1108 // Check in the Windows registry if an AT tool wants Accessibility support to
1112 if( ERROR_SUCCESS
== RegOpenKey(HKEY_CURRENT_USER
,
1113 "Software\\LibreOffice\\Accessibility\\AtToolSupport",
1117 sal_uInt8 Data
[6]; // possible values: "true", "false", "1", "0", DWORD
1118 DWORD cbData
= sizeof(Data
);
1120 if( ERROR_SUCCESS
== RegQueryValueEx(hkey
, "SupportAssistiveTechnology",
1121 NULL
, &dwType
, Data
, &cbData
) )
1126 mpData
->mnEnableATT
= ((0 == stricmp((const char *) Data
, "1")) || (0 == stricmp((const char *) Data
, "true")));
1129 mpData
->mnEnableATT
= (sal_uInt16
) (((DWORD
*) Data
)[0]);
1132 // Unsupported registry type
1142 if( mpData
->mnEnableATT
== (sal_uInt16
)~0 )
1144 static const char* pEnv
= getenv("SAL_ACCESSIBILITY_ENABLED" );
1145 if( !pEnv
|| !*pEnv
)
1148 vcl::SettingsConfigItem::get()->
1149 getValue( OUString( "Accessibility" ),
1150 OUString( "EnableATToolSupport" ) );
1151 mpData
->mnEnableATT
= aEnable
.equalsIgnoreAsciiCase("true") ? 1 : 0;
1155 mpData
->mnEnableATT
= 1;
1159 return (sal_Bool
)mpData
->mnEnableATT
;
1163 void MiscSettings::SetEnableATToolSupport( sal_Bool bEnable
)
1165 if ( bEnable
!= mpData
->mnEnableATT
)
1168 if( bEnable
&& !ImplInitAccessBridge(false, bDummy
) )
1173 // If the accessibility key in the Windows registry exists, change it synchronously
1174 if( ERROR_SUCCESS
== RegOpenKey(HKEY_CURRENT_USER
,
1175 "Software\\LibreOffice\\Accessibility\\AtToolSupport",
1179 sal_uInt8 Data
[6]; // possible values: "true", "false", 1, 0
1180 DWORD cbData
= sizeof(Data
);
1182 if( ERROR_SUCCESS
== RegQueryValueEx(hkey
, "SupportAssistiveTechnology",
1183 NULL
, &dwType
, Data
, &cbData
) )
1188 RegSetValueEx(hkey
, "SupportAssistiveTechnology",
1190 bEnable
? (sal_uInt8
*) "true" : (sal_uInt8
*) "false",
1191 bEnable
? sizeof("true") : sizeof("false"));
1194 ((DWORD
*) Data
)[0] = bEnable
? 1 : 0;
1195 RegSetValueEx(hkey
, "SupportAssistiveTechnology",
1196 0, dwType
, Data
, sizeof(DWORD
));
1199 // Unsupported registry type
1207 vcl::SettingsConfigItem::get()->
1208 setValue( OUString( "Accessibility" ),
1209 OUString( "EnableATToolSupport" ),
1210 bEnable
? OUString("true") : OUString("false" ) );
1211 mpData
->mnEnableATT
= bEnable
? 1 : 0;
1216 void MiscSettings::SetEnableLocalizedDecimalSep( sal_Bool bEnable
)
1219 mpData
->mbEnableLocalizedDecimalSep
= bEnable
;
1222 sal_Bool
MiscSettings::GetEnableLocalizedDecimalSep() const
1224 return mpData
->mbEnableLocalizedDecimalSep
;
1227 // =======================================================================
1229 ImplHelpData::ImplHelpData()
1234 mnTipTimeout
= 3000;
1235 mnBalloonDelay
= 1500;
1238 // -----------------------------------------------------------------------
1240 ImplHelpData::ImplHelpData( const ImplHelpData
& rData
)
1243 mnOptions
= rData
.mnOptions
;
1244 mnTipDelay
= rData
.mnTipDelay
;
1245 mnTipTimeout
= rData
.mnTipTimeout
;
1246 mnBalloonDelay
= rData
.mnBalloonDelay
;
1249 // -----------------------------------------------------------------------
1251 HelpSettings::HelpSettings()
1253 mpData
= new ImplHelpData();
1256 // -----------------------------------------------------------------------
1258 HelpSettings::HelpSettings( const HelpSettings
& rSet
)
1260 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "HelpSettings: RefCount overflow" );
1262 // copy shared instance data and increment reference counter
1263 mpData
= rSet
.mpData
;
1264 mpData
->mnRefCount
++;
1267 // -----------------------------------------------------------------------
1269 HelpSettings::~HelpSettings()
1271 // if last reference then delete data
1272 if ( mpData
->mnRefCount
== 1 )
1275 mpData
->mnRefCount
--;
1278 // -----------------------------------------------------------------------
1280 const HelpSettings
& HelpSettings::operator =( const HelpSettings
& rSet
)
1282 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "HelpSettings: RefCount overflow" );
1284 // increase reference counter first, to be able to assign oneself
1285 rSet
.mpData
->mnRefCount
++;
1287 // delete data if last reference
1288 if ( mpData
->mnRefCount
== 1 )
1291 mpData
->mnRefCount
--;
1293 mpData
= rSet
.mpData
;
1298 // -----------------------------------------------------------------------
1300 void HelpSettings::CopyData()
1302 // copy of other references exist
1303 if ( mpData
->mnRefCount
!= 1 )
1305 mpData
->mnRefCount
--;
1306 mpData
= new ImplHelpData( *mpData
);
1310 // -----------------------------------------------------------------------
1312 sal_Bool
HelpSettings::operator ==( const HelpSettings
& rSet
) const
1314 if ( mpData
== rSet
.mpData
)
1317 if ( (mpData
->mnOptions
== rSet
.mpData
->mnOptions
) &&
1318 (mpData
->mnTipDelay
== rSet
.mpData
->mnTipDelay
) &&
1319 (mpData
->mnTipTimeout
== rSet
.mpData
->mnTipTimeout
) &&
1320 (mpData
->mnBalloonDelay
== rSet
.mpData
->mnBalloonDelay
) )
1326 // =======================================================================
1328 ImplAllSettingsData::ImplAllSettingsData()
1330 maLocale( LANGUAGE_SYSTEM
),
1331 maUILocale( LANGUAGE_SYSTEM
)
1334 mnSystemUpdate
= SETTINGS_ALLSETTINGS
;
1335 mnWindowUpdate
= SETTINGS_ALLSETTINGS
;
1336 mpLocaleDataWrapper
= NULL
;
1337 mpUILocaleDataWrapper
= NULL
;
1338 mpI18nHelper
= NULL
;
1339 mpUII18nHelper
= NULL
;
1340 maMiscSettings
.SetEnableLocalizedDecimalSep( maSysLocale
.GetOptions().IsDecimalSeparatorAsLocale() );
1343 // -----------------------------------------------------------------------
1345 ImplAllSettingsData::ImplAllSettingsData( const ImplAllSettingsData
& rData
) :
1346 maMouseSettings( rData
.maMouseSettings
),
1347 maStyleSettings( rData
.maStyleSettings
),
1348 maMiscSettings( rData
.maMiscSettings
),
1349 maHelpSettings( rData
.maHelpSettings
),
1350 maLocale( rData
.maLocale
),
1351 maUILocale( rData
.maUILocale
)
1354 mnSystemUpdate
= rData
.mnSystemUpdate
;
1355 mnWindowUpdate
= rData
.mnWindowUpdate
;
1356 // Pointer couldn't shared and objects haven't a copy ctor
1357 // So we create the cache objects new, if the GetFunction is
1359 mpLocaleDataWrapper
= NULL
;
1360 mpUILocaleDataWrapper
= NULL
;
1361 mpI18nHelper
= NULL
;
1362 mpUII18nHelper
= NULL
;
1365 // -----------------------------------------------------------------------
1367 ImplAllSettingsData::~ImplAllSettingsData()
1369 delete mpLocaleDataWrapper
;
1370 delete mpUILocaleDataWrapper
;
1372 delete mpI18nHelper
;
1373 if ( mpUII18nHelper
)
1374 delete mpUII18nHelper
;
1377 // -----------------------------------------------------------------------
1379 AllSettings::AllSettings()
1381 DBG_CTOR( AllSettings
, NULL
);
1383 mpData
= new ImplAllSettingsData();
1386 // -----------------------------------------------------------------------
1388 AllSettings::AllSettings( const AllSettings
& rSet
)
1390 DBG_CTOR( AllSettings
, NULL
);
1391 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "Settings: RefCount overflow" );
1393 // copy shared instance data and increse reference counter
1394 mpData
= rSet
.mpData
;
1395 mpData
->mnRefCount
++;
1398 // -----------------------------------------------------------------------
1400 AllSettings::~AllSettings()
1402 DBG_DTOR( AllSettings
, NULL
);
1404 // if last reference then delete data
1405 if ( mpData
->mnRefCount
== 1 )
1408 mpData
->mnRefCount
--;
1411 // -----------------------------------------------------------------------
1413 const AllSettings
& AllSettings::operator =( const AllSettings
& rSet
)
1415 DBG_ASSERT( rSet
.mpData
->mnRefCount
< 0xFFFFFFFE, "AllSettings: RefCount overflow" );
1416 DBG_CHKTHIS( AllSettings
, NULL
);
1417 DBG_CHKOBJ( &rSet
, AllSettings
, NULL
);
1419 // increase reference counter first, to be able to assign oneself
1420 rSet
.mpData
->mnRefCount
++;
1422 // if last reference then delete data
1423 if ( mpData
->mnRefCount
== 1 )
1426 mpData
->mnRefCount
--;
1428 mpData
= rSet
.mpData
;
1433 // -----------------------------------------------------------------------
1435 void AllSettings::CopyData()
1437 DBG_CHKTHIS( AllSettings
, NULL
);
1439 // copy if other references exist
1440 if ( mpData
->mnRefCount
!= 1 )
1442 mpData
->mnRefCount
--;
1443 mpData
= new ImplAllSettingsData( *mpData
);
1447 // -----------------------------------------------------------------------
1449 sal_uLong
AllSettings::Update( sal_uLong nFlags
, const AllSettings
& rSet
)
1451 DBG_CHKTHIS( AllSettings
, NULL
);
1452 DBG_CHKOBJ( &rSet
, AllSettings
, NULL
);
1454 sal_uLong nChangeFlags
= 0;
1456 if ( nFlags
& SETTINGS_MOUSE
)
1458 if ( mpData
->maMouseSettings
!= rSet
.mpData
->maMouseSettings
)
1461 mpData
->maMouseSettings
= rSet
.mpData
->maMouseSettings
;
1462 nChangeFlags
|= SETTINGS_MOUSE
;
1466 if ( nFlags
& SETTINGS_STYLE
)
1468 if ( mpData
->maStyleSettings
!= rSet
.mpData
->maStyleSettings
)
1471 mpData
->maStyleSettings
= rSet
.mpData
->maStyleSettings
;
1472 nChangeFlags
|= SETTINGS_STYLE
;
1476 if ( nFlags
& SETTINGS_MISC
)
1478 if ( mpData
->maMiscSettings
!= rSet
.mpData
->maMiscSettings
)
1481 mpData
->maMiscSettings
= rSet
.mpData
->maMiscSettings
;
1482 nChangeFlags
|= SETTINGS_MISC
;
1486 if ( nFlags
& SETTINGS_HELP
)
1488 if ( mpData
->maHelpSettings
!= rSet
.mpData
->maHelpSettings
)
1491 mpData
->maHelpSettings
= rSet
.mpData
->maHelpSettings
;
1492 nChangeFlags
|= SETTINGS_HELP
;
1496 if ( nFlags
& SETTINGS_LOCALE
)
1498 if ( mpData
->maLocale
!= rSet
.mpData
->maLocale
)
1500 SetLanguageTag( rSet
.mpData
->maLocale
);
1501 nChangeFlags
|= SETTINGS_LOCALE
;
1505 if ( nFlags
& SETTINGS_UILOCALE
)
1507 // UILocale can't be changed
1510 return nChangeFlags
;
1513 // -----------------------------------------------------------------------
1515 sal_uLong
AllSettings::GetChangeFlags( const AllSettings
& rSet
) const
1517 DBG_CHKTHIS( AllSettings
, NULL
);
1518 DBG_CHKOBJ( &rSet
, AllSettings
, NULL
);
1520 sal_uLong nChangeFlags
= 0;
1522 if ( mpData
->maMouseSettings
!= rSet
.mpData
->maMouseSettings
)
1523 nChangeFlags
|= SETTINGS_MOUSE
;
1525 if ( mpData
->maStyleSettings
!= rSet
.mpData
->maStyleSettings
)
1526 nChangeFlags
|= SETTINGS_STYLE
;
1528 if ( mpData
->maMiscSettings
!= rSet
.mpData
->maMiscSettings
)
1529 nChangeFlags
|= SETTINGS_MISC
;
1531 if ( mpData
->maHelpSettings
!= rSet
.mpData
->maHelpSettings
)
1532 nChangeFlags
|= SETTINGS_HELP
;
1534 if ( mpData
->maLocale
!= rSet
.mpData
->maLocale
)
1535 nChangeFlags
|= SETTINGS_LOCALE
;
1537 return nChangeFlags
;
1540 // -----------------------------------------------------------------------
1542 sal_Bool
AllSettings::operator ==( const AllSettings
& rSet
) const
1544 DBG_CHKTHIS( AllSettings
, NULL
);
1545 DBG_CHKOBJ( &rSet
, AllSettings
, NULL
);
1547 if ( mpData
== rSet
.mpData
)
1550 if ( (mpData
->maMouseSettings
== rSet
.mpData
->maMouseSettings
) &&
1551 (mpData
->maStyleSettings
== rSet
.mpData
->maStyleSettings
) &&
1552 (mpData
->maMiscSettings
== rSet
.mpData
->maMiscSettings
) &&
1553 (mpData
->maHelpSettings
== rSet
.mpData
->maHelpSettings
) &&
1554 (mpData
->mnSystemUpdate
== rSet
.mpData
->mnSystemUpdate
) &&
1555 (mpData
->maLocale
== rSet
.mpData
->maLocale
) &&
1556 (mpData
->mnWindowUpdate
== rSet
.mpData
->mnWindowUpdate
) )
1564 // -----------------------------------------------------------------------
1566 void AllSettings::SetLanguageTag( const LanguageTag
& rLanguageTag
)
1568 if (mpData
->maLocale
!= rLanguageTag
)
1572 mpData
->maLocale
= rLanguageTag
;
1574 if ( mpData
->mpLocaleDataWrapper
)
1576 delete mpData
->mpLocaleDataWrapper
;
1577 mpData
->mpLocaleDataWrapper
= NULL
;
1579 if ( mpData
->mpI18nHelper
)
1581 delete mpData
->mpI18nHelper
;
1582 mpData
->mpI18nHelper
= NULL
;
1587 // -----------------------------------------------------------------------
1589 void AllSettings::SetUILanguageTag( const LanguageTag
& )
1591 // there is only one UILocale per process
1594 // -----------------------------------------------------------------------
1596 bool AllSettings::GetLayoutRTL() const
1598 static const char* pEnv
= getenv("SAL_RTL_ENABLED" );
1599 static int nUIMirroring
= -1; // -1: undef, 0: auto, 1: on 2: off
1601 // environment always overrides
1607 if( nUIMirroring
== -1 )
1609 nUIMirroring
= 0; // ask configuration only once
1610 utl::OConfigurationNode aNode
= utl::OConfigurationTreeRoot::tryCreateWithComponentContext(
1611 comphelper::getProcessComponentContext(),
1612 OUString("org.openoffice.Office.Common/I18N/CTL") ); // note: case sensitive !
1613 if ( aNode
.isValid() )
1615 sal_Bool bTmp
= sal_Bool();
1616 ::com::sun::star::uno::Any aValue
= aNode
.getNodeValue( OUString("UIMirroring") );
1617 if( aValue
>>= bTmp
)
1619 // found true or false; if it was nil, nothing is changed
1620 nUIMirroring
= bTmp
? 1 : 2;
1625 if( nUIMirroring
== 0 ) // no config found (eg, setup) or default (nil) was set: check language
1627 LanguageType aLang
= LANGUAGE_DONTKNOW
;
1628 ImplSVData
* pSVData
= ImplGetSVData();
1629 if ( pSVData
->maAppData
.mpSettings
)
1630 aLang
= pSVData
->maAppData
.mpSettings
->GetUILanguageTag().getLanguageType();
1631 bRTL
= MsLangId::isRightToLeft( aLang
);
1634 bRTL
= (nUIMirroring
== 1);
1639 // -----------------------------------------------------------------------
1641 const LanguageTag
& AllSettings::GetLanguageTag() const
1643 // SYSTEM locale means: use settings from SvtSysLocale that is resolved
1644 if ( mpData
->maLocale
.isSystemLocale() )
1645 mpData
->maLocale
= mpData
->maSysLocale
.GetLanguageTag();
1647 return mpData
->maLocale
;
1650 // -----------------------------------------------------------------------
1652 const LanguageTag
& AllSettings::GetUILanguageTag() const
1654 // the UILocale is never changed
1655 if ( mpData
->maUILocale
.isSystemLocale() )
1656 mpData
->maUILocale
= mpData
->maSysLocale
.GetUILanguageTag();
1658 return mpData
->maUILocale
;
1661 // -----------------------------------------------------------------------
1663 const LocaleDataWrapper
& AllSettings::GetLocaleDataWrapper() const
1665 if ( !mpData
->mpLocaleDataWrapper
)
1666 ((AllSettings
*)this)->mpData
->mpLocaleDataWrapper
= new LocaleDataWrapper(
1667 comphelper::getProcessComponentContext(), GetLanguageTag() );
1668 return *mpData
->mpLocaleDataWrapper
;
1671 // -----------------------------------------------------------------------
1673 const LocaleDataWrapper
& AllSettings::GetUILocaleDataWrapper() const
1675 if ( !mpData
->mpUILocaleDataWrapper
)
1676 ((AllSettings
*)this)->mpData
->mpUILocaleDataWrapper
= new LocaleDataWrapper(
1677 comphelper::getProcessComponentContext(), GetUILanguageTag() );
1678 return *mpData
->mpUILocaleDataWrapper
;
1681 // -----------------------------------------------------------------------
1683 const vcl::I18nHelper
& AllSettings::GetLocaleI18nHelper() const
1685 if ( !mpData
->mpI18nHelper
) {
1686 ((AllSettings
*)this)->mpData
->mpI18nHelper
= new vcl::I18nHelper(
1687 comphelper::getProcessComponentContext(), GetLanguageTag() );
1689 return *mpData
->mpI18nHelper
;
1692 // -----------------------------------------------------------------------
1694 const vcl::I18nHelper
& AllSettings::GetUILocaleI18nHelper() const
1696 if ( !mpData
->mpUII18nHelper
) {
1697 ((AllSettings
*)this)->mpData
->mpUII18nHelper
= new vcl::I18nHelper(
1698 comphelper::getProcessComponentContext(), GetUILanguageTag() );
1700 return *mpData
->mpUII18nHelper
;
1703 void AllSettings::LocaleSettingsChanged( sal_uInt32 nHint
)
1705 AllSettings
aAllSettings( Application::GetSettings() );
1706 if ( nHint
& SYSLOCALEOPTIONS_HINT_DECSEP
)
1708 MiscSettings aMiscSettings
= aAllSettings
.GetMiscSettings();
1709 sal_Bool bIsDecSepAsLocale
= aAllSettings
.mpData
->maSysLocale
.GetOptions().IsDecimalSeparatorAsLocale();
1710 if ( aMiscSettings
.GetEnableLocalizedDecimalSep() != bIsDecSepAsLocale
)
1712 aMiscSettings
.SetEnableLocalizedDecimalSep( bIsDecSepAsLocale
);
1713 aAllSettings
.SetMiscSettings( aMiscSettings
);
1717 if ( (nHint
& SYSLOCALEOPTIONS_HINT_LOCALE
) )
1718 aAllSettings
.SetLanguageTag( aAllSettings
.mpData
->maSysLocale
.GetOptions().GetLanguageTag() );
1720 Application::SetSettings( aAllSettings
);
1723 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */