00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #include "precompiled_vcl.hxx"
00030 #include "tools/debug.hxx"
00031 #include "i18npool/mslangid.hxx"
00032 #include "vcl/svapp.hxx"
00033 #include "vcl/svdata.hxx"
00034 #include "vcl/event.hxx"
00035 #include "vcl/settings.hxx"
00036 #include "vcl/i18nhelp.hxx"
00037 #include "vcl/fontcfg.hxx"
00038 #include "vcl/configsettings.hxx"
00039 #include "vcl/gradient.hxx"
00040 #include "vcl/unohelp.hxx"
00041 #include "vcl/bitmapex.hxx"
00042 #include "vcl/impimagetree.hxx"
00043 #include "unotools/localedatawrapper.hxx"
00044 #include "unotools/collatorwrapper.hxx"
00045 #include "unotools/configmgr.hxx"
00046 #include "unotools/confignode.hxx"
00047
00048 #ifdef WNT
00049 #include "tools/prewin.h"
00050 #include <windows.h>
00051 #include "tools/postwin.h"
00052 #endif
00053
00054 using namespace rtl;
00055
00056
00057
00058 DBG_NAME( AllSettings )
00059
00060
00061
00062 #define STDSYS_STYLE (STYLE_OPTION_SCROLLARROW | \
00063 STYLE_OPTION_SPINARROW | \
00064 STYLE_OPTION_SPINUPDOWN | \
00065 STYLE_OPTION_NOMNEMONICS)
00066
00067
00068
00069 ImplMachineData::ImplMachineData()
00070 {
00071 mnRefCount = 1;
00072 mnOptions = 0;
00073 mnScreenOptions = 0;
00074 mnPrintOptions = 0;
00075 mnScreenRasterFontDeviation = 0;
00076 }
00077
00078
00079
00080 ImplMachineData::ImplMachineData( const ImplMachineData& rData )
00081 {
00082 mnRefCount = 1;
00083 mnOptions = rData.mnOptions;
00084 mnScreenOptions = rData.mnScreenOptions;
00085 mnPrintOptions = rData.mnPrintOptions;
00086 mnScreenRasterFontDeviation = rData.mnScreenRasterFontDeviation;
00087 }
00088
00089
00090
00091 MachineSettings::MachineSettings()
00092 {
00093 mpData = new ImplMachineData();
00094 }
00095
00096
00097
00098 MachineSettings::MachineSettings( const MachineSettings& rSet )
00099 {
00100 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MachineSettings: RefCount overflow" );
00101
00102
00103 mpData = rSet.mpData;
00104 mpData->mnRefCount++;
00105 }
00106
00107
00108
00109 MachineSettings::~MachineSettings()
00110 {
00111
00112 if ( mpData->mnRefCount == 1 )
00113 delete mpData;
00114 else
00115 mpData->mnRefCount--;
00116 }
00117
00118
00119
00120 const MachineSettings& MachineSettings::operator =( const MachineSettings& rSet )
00121 {
00122 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MachineSettings: RefCount overflow" );
00123
00124
00125 rSet.mpData->mnRefCount++;
00126
00127
00128 if ( mpData->mnRefCount == 1 )
00129 delete mpData;
00130 else
00131 mpData->mnRefCount--;
00132
00133 mpData = rSet.mpData;
00134
00135 return *this;
00136 }
00137
00138
00139
00140 void MachineSettings::CopyData()
00141 {
00142
00143 if ( mpData->mnRefCount != 1 )
00144 {
00145 mpData->mnRefCount--;
00146 mpData = new ImplMachineData( *mpData );
00147 }
00148 }
00149
00150
00151
00152 BOOL MachineSettings::operator ==( const MachineSettings& rSet ) const
00153 {
00154 if ( mpData == rSet.mpData )
00155 return TRUE;
00156
00157 if ( (mpData->mnOptions == rSet.mpData->mnOptions) &&
00158 (mpData->mnScreenOptions == rSet.mpData->mnScreenOptions) &&
00159 (mpData->mnPrintOptions == rSet.mpData->mnPrintOptions) &&
00160 (mpData->mnScreenRasterFontDeviation == rSet.mpData->mnScreenRasterFontDeviation) )
00161 return TRUE;
00162 else
00163 return FALSE;
00164 }
00165
00166
00167
00168 ImplMouseData::ImplMouseData()
00169 {
00170 mnRefCount = 1;
00171 mnOptions = 0;
00172 mnDoubleClkTime = 500;
00173 mnDoubleClkWidth = 2;
00174 mnDoubleClkHeight = 2;
00175 mnStartDragWidth = 2;
00176 mnStartDragHeight = 2;
00177 mnStartDragCode = MOUSE_LEFT;
00178 mnDragMoveCode = 0;
00179 mnDragCopyCode = KEY_MOD1;
00180 mnDragLinkCode = KEY_SHIFT | KEY_MOD1;
00181 mnContextMenuCode = MOUSE_RIGHT;
00182 mnContextMenuClicks = 1;
00183 mbContextMenuDown = TRUE;
00184 mnMiddleButtonAction = MOUSE_MIDDLE_AUTOSCROLL;
00185 mnScrollRepeat = 100;
00186 mnButtonStartRepeat = 370;
00187 mnButtonRepeat = 90;
00188 mnActionDelay = 250;
00189 mnMenuDelay = 150;
00190 mnFollow = MOUSE_FOLLOW_MENU | MOUSE_FOLLOW_DDLIST;
00191 mnWheelBehavior = MOUSE_WHEEL_ALWAYS;
00192 }
00193
00194
00195
00196 ImplMouseData::ImplMouseData( const ImplMouseData& rData )
00197 {
00198 mnRefCount = 1;
00199 mnOptions = rData.mnOptions;
00200 mnDoubleClkTime = rData.mnDoubleClkTime;
00201 mnDoubleClkWidth = rData.mnDoubleClkWidth;
00202 mnDoubleClkHeight = rData.mnDoubleClkHeight;
00203 mnStartDragWidth = rData.mnStartDragWidth;
00204 mnStartDragHeight = rData.mnStartDragHeight;
00205 mnStartDragCode = rData.mnStartDragCode;
00206 mnDragMoveCode = rData.mnDragMoveCode;
00207 mnDragCopyCode = rData.mnDragCopyCode;
00208 mnDragLinkCode = rData.mnDragLinkCode;
00209 mnContextMenuCode = rData.mnContextMenuCode;
00210 mnContextMenuClicks = rData.mnContextMenuClicks;
00211 mbContextMenuDown = rData.mbContextMenuDown;
00212 mnMiddleButtonAction = rData.mnMiddleButtonAction;
00213 mnScrollRepeat = rData.mnScrollRepeat;
00214 mnButtonStartRepeat = rData.mnButtonStartRepeat;
00215 mnButtonRepeat = rData.mnButtonRepeat;
00216 mnActionDelay = rData.mnActionDelay;
00217 mnMenuDelay = rData.mnMenuDelay;
00218 mnFollow = rData.mnFollow;
00219 mnWheelBehavior = rData.mnWheelBehavior;
00220 }
00221
00222
00223
00224 MouseSettings::MouseSettings()
00225 {
00226 mpData = new ImplMouseData();
00227 }
00228
00229
00230
00231 MouseSettings::MouseSettings( const MouseSettings& rSet )
00232 {
00233 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MouseSettings: RefCount overflow" );
00234
00235
00236 mpData = rSet.mpData;
00237 mpData->mnRefCount++;
00238 }
00239
00240
00241
00242 MouseSettings::~MouseSettings()
00243 {
00244
00245 if ( mpData->mnRefCount == 1 )
00246 delete mpData;
00247 else
00248 mpData->mnRefCount--;
00249 }
00250
00251
00252
00253 const MouseSettings& MouseSettings::operator =( const MouseSettings& rSet )
00254 {
00255 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MouseSettings: RefCount overflow" );
00256
00257
00258 rSet.mpData->mnRefCount++;
00259
00260
00261 if ( mpData->mnRefCount == 1 )
00262 delete mpData;
00263 else
00264 mpData->mnRefCount--;
00265
00266 mpData = rSet.mpData;
00267
00268 return *this;
00269 }
00270
00271
00272
00273 void MouseSettings::CopyData()
00274 {
00275
00276 if ( mpData->mnRefCount != 1 )
00277 {
00278 mpData->mnRefCount--;
00279 mpData = new ImplMouseData( *mpData );
00280 }
00281 }
00282
00283
00284
00285 BOOL MouseSettings::operator ==( const MouseSettings& rSet ) const
00286 {
00287 if ( mpData == rSet.mpData )
00288 return TRUE;
00289
00290 if ( (mpData->mnOptions == rSet.mpData->mnOptions) &&
00291 (mpData->mnDoubleClkTime == rSet.mpData->mnDoubleClkTime) &&
00292 (mpData->mnDoubleClkWidth == rSet.mpData->mnDoubleClkWidth) &&
00293 (mpData->mnDoubleClkHeight == rSet.mpData->mnDoubleClkHeight) &&
00294 (mpData->mnStartDragWidth == rSet.mpData->mnStartDragWidth) &&
00295 (mpData->mnStartDragHeight == rSet.mpData->mnStartDragHeight) &&
00296 (mpData->mnStartDragCode == rSet.mpData->mnStartDragCode) &&
00297 (mpData->mnDragMoveCode == rSet.mpData->mnDragMoveCode) &&
00298 (mpData->mnDragCopyCode == rSet.mpData->mnDragCopyCode) &&
00299 (mpData->mnDragLinkCode == rSet.mpData->mnDragLinkCode) &&
00300 (mpData->mnContextMenuCode == rSet.mpData->mnContextMenuCode) &&
00301 (mpData->mnContextMenuClicks == rSet.mpData->mnContextMenuClicks) &&
00302 (mpData->mbContextMenuDown == rSet.mpData->mbContextMenuDown) &&
00303 (mpData->mnMiddleButtonAction == rSet.mpData->mnMiddleButtonAction) &&
00304 (mpData->mnScrollRepeat == rSet.mpData->mnScrollRepeat) &&
00305 (mpData->mnButtonStartRepeat == rSet.mpData->mnButtonStartRepeat) &&
00306 (mpData->mnButtonRepeat == rSet.mpData->mnButtonRepeat) &&
00307 (mpData->mnActionDelay == rSet.mpData->mnActionDelay) &&
00308 (mpData->mnMenuDelay == rSet.mpData->mnMenuDelay) &&
00309 (mpData->mnFollow == rSet.mpData->mnFollow) &&
00310 (mpData->mnWheelBehavior == rSet.mpData->mnWheelBehavior ) )
00311 return TRUE;
00312 else
00313 return FALSE;
00314 }
00315
00316
00317
00318 ImplKeyboardData::ImplKeyboardData()
00319 {
00320 mnRefCount = 1;
00321 mnOptions = 0;
00322 }
00323
00324
00325
00326 ImplKeyboardData::ImplKeyboardData( const ImplKeyboardData& rData )
00327 {
00328 mnRefCount = 1;
00329 mnOptions = rData.mnOptions;
00330 }
00331
00332
00333
00334 KeyboardSettings::KeyboardSettings()
00335 {
00336 mpData = new ImplKeyboardData();
00337 }
00338
00339
00340
00341 KeyboardSettings::KeyboardSettings( const KeyboardSettings& rSet )
00342 {
00343 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "KeyboardSettings: RefCount overflow" );
00344
00345
00346 mpData = rSet.mpData;
00347 mpData->mnRefCount++;
00348 }
00349
00350
00351
00352 KeyboardSettings::~KeyboardSettings()
00353 {
00354
00355 if ( mpData->mnRefCount == 1 )
00356 delete mpData;
00357 else
00358 mpData->mnRefCount--;
00359 }
00360
00361
00362
00363 const KeyboardSettings& KeyboardSettings::operator =( const KeyboardSettings& rSet )
00364 {
00365 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "KeyboardSettings: RefCount overflow" );
00366
00367
00368 rSet.mpData->mnRefCount++;
00369
00370
00371 if ( mpData->mnRefCount == 1 )
00372 delete mpData;
00373 else
00374 mpData->mnRefCount--;
00375
00376 mpData = rSet.mpData;
00377
00378 return *this;
00379 }
00380
00381
00382
00383 void KeyboardSettings::CopyData()
00384 {
00385
00386 if ( mpData->mnRefCount != 1 )
00387 {
00388 mpData->mnRefCount--;
00389 mpData = new ImplKeyboardData( *mpData );
00390 }
00391 }
00392
00393
00394
00395 BOOL KeyboardSettings::operator ==( const KeyboardSettings& rSet ) const
00396 {
00397 if ( mpData == rSet.mpData )
00398 return TRUE;
00399
00400 if ( (mpData->mnOptions == rSet.mpData->mnOptions) )
00401 return TRUE;
00402 else
00403 return FALSE;
00404 }
00405
00406
00407
00408 ImplStyleData::ImplStyleData()
00409 {
00410 mnRefCount = 1;
00411 mnScrollBarSize = 16;
00412 mnMinThumbSize = 16;
00413 mnSplitSize = 3;
00414 mnSpinSize = 16;
00415 mnIconHorzSpace = 50;
00416 mnIconVertSpace = 40;
00417 mnAntialiasedMin = 0;
00418 mnCursorSize = 2;
00419 mnCursorBlinkTime = STYLE_CURSOR_NOBLINKTIME;
00420 mnScreenZoom = 100;
00421 mnScreenFontZoom = 100;
00422 mnRadioButtonStyle = 0;
00423 mnCheckBoxStyle = 0;
00424 mnPushButtonStyle = 0;
00425 mnTabControlStyle = 0;
00426 mnLogoDisplayTime = LOGO_DISPLAYTIME_STARTTIME;
00427 mnDragFullOptions = 0;
00428 mnAnimationOptions = 0;
00429 mnSelectionOptions = 0;
00430 mnDisplayOptions = 0;
00431 mnOptions = 0;
00432 mnAutoMnemonic = 1;
00433 mnToolbarIconSize = STYLE_TOOLBAR_ICONSIZE_UNKNOWN;
00434 mnSymbolsStyle = STYLE_SYMBOLS_AUTO;
00435 mnPreferredSymbolsStyle = STYLE_SYMBOLS_AUTO;
00436 mpFontOptions = NULL;
00437
00438 SetStandardStyles();
00439 }
00440
00441
00442
00443 ImplStyleData::ImplStyleData( const ImplStyleData& rData ) :
00444 maActiveBorderColor( rData.maActiveBorderColor ),
00445 maActiveColor( rData.maActiveColor ),
00446 maActiveColor2( rData.maActiveColor2 ),
00447 maActiveTextColor( rData.maActiveTextColor ),
00448 maButtonTextColor( rData.maButtonTextColor ),
00449 maButtonRolloverTextColor( rData.maButtonRolloverTextColor ),
00450 maCheckedColor( rData.maCheckedColor ),
00451 maDarkShadowColor( rData.maDarkShadowColor ),
00452 maDeactiveBorderColor( rData.maDeactiveBorderColor ),
00453 maDeactiveColor( rData.maDeactiveColor ),
00454 maDeactiveColor2( rData.maDeactiveColor2 ),
00455 maDeactiveTextColor( rData.maDeactiveTextColor ),
00456 maDialogColor( rData.maDialogColor ),
00457 maDialogTextColor( rData.maDialogTextColor ),
00458 maDisableColor( rData.maDisableColor ),
00459 maFaceColor( rData.maFaceColor ),
00460 maFieldColor( rData.maFieldColor ),
00461 maFieldTextColor( rData.maFieldTextColor ),
00462 maFieldRolloverTextColor( rData.maFieldRolloverTextColor ),
00463 maFontColor( rData.maFontColor ),
00464 maGroupTextColor( rData.maGroupTextColor ),
00465 maHelpColor( rData.maHelpColor ),
00466 maHelpTextColor( rData.maHelpTextColor ),
00467 maHighlightColor( rData.maHighlightColor ),
00468 maHighlightLinkColor( rData.maHighlightLinkColor ),
00469 maHighlightTextColor( rData.maHighlightTextColor ),
00470 maInfoTextColor( rData.maInfoTextColor ),
00471 maLabelTextColor( rData.maLabelTextColor ),
00472 maLightBorderColor( rData.maLightBorderColor ),
00473 maLightColor( rData.maLightColor ),
00474 maLinkColor( rData.maLinkColor ),
00475 maMenuBarColor( rData.maMenuBarColor ),
00476 maMenuBorderColor( rData.maMenuBorderColor ),
00477 maMenuColor( rData.maMenuColor ),
00478 maMenuHighlightColor( rData.maMenuHighlightColor ),
00479 maMenuHighlightTextColor( rData.maMenuHighlightTextColor ),
00480 maMenuTextColor( rData.maMenuTextColor ),
00481 maMenuBarTextColor( rData.maMenuBarTextColor ),
00482 maMonoColor( rData.maMonoColor ),
00483 maRadioCheckTextColor( rData.maRadioCheckTextColor ),
00484 maShadowColor( rData.maShadowColor ),
00485 maVisitedLinkColor( rData.maVisitedLinkColor ),
00486 maWindowColor( rData.maWindowColor ),
00487 maWindowTextColor( rData.maWindowTextColor ),
00488 maWorkspaceColor( rData.maWorkspaceColor ),
00489 maActiveTabColor( rData.maActiveTabColor ),
00490 maInactiveTabColor( rData.maInactiveTabColor ),
00491 maAppFont( rData.maAppFont ),
00492 maHelpFont( rData.maAppFont ),
00493 maTitleFont( rData.maTitleFont ),
00494 maFloatTitleFont( rData.maFloatTitleFont ),
00495 maMenuFont( rData.maMenuFont ),
00496 maToolFont( rData.maToolFont ),
00497 maLabelFont( rData.maLabelFont ),
00498 maInfoFont( rData.maInfoFont ),
00499 maRadioCheckFont( rData.maRadioCheckFont ),
00500 maPushButtonFont( rData.maPushButtonFont ),
00501 maFieldFont( rData.maFieldFont ),
00502 maIconFont( rData.maIconFont ),
00503 maGroupFont( rData.maGroupFont ),
00504 maWorkspaceGradient( rData.maWorkspaceGradient )
00505 {
00506 mnRefCount = 1;
00507 mnBorderSize = rData.mnBorderSize;
00508 mnTitleHeight = rData.mnTitleHeight;
00509 mnFloatTitleHeight = rData.mnFloatTitleHeight;
00510 mnTearOffTitleHeight = rData.mnTearOffTitleHeight;
00511 mnMenuBarHeight = rData.mnMenuBarHeight;
00512 mnScrollBarSize = rData.mnScrollBarSize;
00513 mnMinThumbSize = rData.mnMinThumbSize;
00514 mnSplitSize = rData.mnSplitSize;
00515 mnSpinSize = rData.mnSpinSize;
00516 mnIconHorzSpace = rData.mnIconHorzSpace;
00517 mnIconVertSpace = rData.mnIconVertSpace;
00518 mnAntialiasedMin = rData.mnAntialiasedMin;
00519 mnCursorSize = rData.mnCursorSize;
00520 mnCursorBlinkTime = rData.mnCursorBlinkTime;
00521 mnScreenZoom = rData.mnScreenZoom;
00522 mnScreenFontZoom = rData.mnScreenFontZoom;
00523 mnRadioButtonStyle = rData.mnRadioButtonStyle;
00524 mnCheckBoxStyle = rData.mnCheckBoxStyle;
00525 mnPushButtonStyle = rData.mnPushButtonStyle;
00526 mnTabControlStyle = rData.mnTabControlStyle;
00527 mnLogoDisplayTime = rData.mnLogoDisplayTime;
00528 mnDragFullOptions = rData.mnDragFullOptions;
00529 mnAnimationOptions = rData.mnAnimationOptions;
00530 mnSelectionOptions = rData.mnSelectionOptions;
00531 mnDisplayOptions = rData.mnDisplayOptions;
00532 mnOptions = rData.mnOptions;
00533 mnHighContrast = rData.mnHighContrast;
00534 mnUseSystemUIFonts = rData.mnUseSystemUIFonts;
00535 mnUseFlatBorders = rData.mnUseFlatBorders;
00536 mnUseFlatMenues = rData.mnUseFlatMenues;
00537 mnAutoMnemonic = rData.mnAutoMnemonic;
00538 mnUseImagesInMenus = rData.mnUseImagesInMenus;
00539 mnSkipDisabledInMenus = rData.mnSkipDisabledInMenus;
00540 mnToolbarIconSize = rData.mnToolbarIconSize;
00541 mnSymbolsStyle = rData.mnSymbolsStyle;
00542 mnPreferredSymbolsStyle = rData.mnPreferredSymbolsStyle;
00543 mpFontOptions = rData.mpFontOptions;
00544 }
00545
00546
00547
00548 void ImplStyleData::SetStandardStyles()
00549 {
00550 Font aStdFont( FAMILY_SWISS, Size( 0, 10 ) );
00551 aStdFont.SetCharSet( gsl_getSystemTextEncoding() );
00552 aStdFont.SetWeight( WEIGHT_NORMAL );
00553 aStdFont.SetName( vcl::DefaultFontConfiguration::get()->getUserInterfaceFont(com::sun::star::lang::Locale( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM("en") ), rtl::OUString(), rtl::OUString() ) ) );
00554 maAppFont = aStdFont;
00555 maHelpFont = aStdFont;
00556 maMenuFont = aStdFont;
00557 maToolFont = aStdFont;
00558 maGroupFont = aStdFont;
00559 maLabelFont = aStdFont;
00560 maInfoFont = aStdFont;
00561 maRadioCheckFont = aStdFont;
00562 maPushButtonFont = aStdFont;
00563 maFieldFont = aStdFont;
00564 maIconFont = aStdFont;
00565 maFloatTitleFont = aStdFont;
00566 aStdFont.SetWeight( WEIGHT_BOLD );
00567 maTitleFont = aStdFont;
00568
00569 maFaceColor = Color( COL_LIGHTGRAY );
00570 maCheckedColor = Color( 0xCC, 0xCC, 0xCC );
00571 maLightColor = Color( COL_WHITE );
00572 maLightBorderColor = Color( COL_LIGHTGRAY );
00573 maShadowColor = Color( COL_GRAY );
00574 maDarkShadowColor = Color( COL_BLACK );
00575 maButtonTextColor = Color( COL_BLACK );
00576 maButtonRolloverTextColor = Color( COL_BLACK );
00577 maRadioCheckTextColor = Color( COL_BLACK );
00578 maGroupTextColor = Color( COL_BLACK );
00579 maLabelTextColor = Color( COL_BLACK );
00580 maInfoTextColor = Color( COL_BLACK );
00581 maWindowColor = Color( COL_WHITE );
00582 maWindowTextColor = Color( COL_BLACK );
00583 maDialogColor = Color( COL_LIGHTGRAY );
00584 maDialogTextColor = Color( COL_BLACK );
00585 maWorkspaceColor = Color( COL_GRAY );
00586 maMonoColor = Color( COL_BLACK );
00587 maFieldColor = Color( COL_WHITE );
00588 maFieldTextColor = Color( COL_BLACK );
00589 maFieldRolloverTextColor = Color( COL_BLACK );
00590 maActiveColor = Color( COL_BLUE );
00591 maActiveColor2 = Color( COL_BLACK );
00592 maActiveTextColor = Color( COL_WHITE );
00593 maActiveBorderColor = Color( COL_LIGHTGRAY );
00594 maDeactiveColor = Color( COL_GRAY );
00595 maDeactiveColor2 = Color( COL_BLACK );
00596 maDeactiveTextColor = Color( COL_LIGHTGRAY );
00597 maDeactiveBorderColor = Color( COL_LIGHTGRAY );
00598 maMenuColor = Color( COL_LIGHTGRAY );
00599 maMenuBarColor = Color( COL_LIGHTGRAY );
00600 maMenuBorderColor = Color( COL_LIGHTGRAY );
00601 maMenuTextColor = Color( COL_BLACK );
00602 maMenuBarTextColor = Color( COL_BLACK );
00603 maMenuHighlightColor = Color( COL_BLUE );
00604 maMenuHighlightTextColor = Color( COL_WHITE );
00605 maHighlightColor = Color( COL_BLUE );
00606 maHighlightTextColor = Color( COL_WHITE );
00607 maActiveTabColor = Color( COL_WHITE );
00608 maInactiveTabColor = Color( COL_LIGHTGRAY );
00609 maDisableColor = Color( COL_GRAY );
00610 maHelpColor = Color( 0xFF, 0xFF, 0xE0 );
00611 maHelpTextColor = Color( COL_BLACK );
00612 maLinkColor = Color( COL_BLUE );
00613 maVisitedLinkColor = Color( 0x00, 0x00, 0xCC );
00614 maHighlightLinkColor = Color( COL_LIGHTBLUE );
00615 maFontColor = Color( COL_BLACK );
00616
00617 mnRadioButtonStyle &= ~STYLE_RADIOBUTTON_STYLE;
00618 mnCheckBoxStyle &= ~STYLE_CHECKBOX_STYLE;
00619 mnPushButtonStyle &= ~STYLE_PUSHBUTTON_STYLE;
00620 mnTabControlStyle = 0;
00621
00622 mnOptions &= ~(STYLE_OPTION_SYSTEMSTYLE | STDSYS_STYLE);
00623 mnBorderSize = 1;
00624 mnTitleHeight = 18;
00625 mnFloatTitleHeight = 13;
00626 mnTearOffTitleHeight = 8;
00627 mnMenuBarHeight = 14;
00628 mnHighContrast = 0;
00629 mnUseSystemUIFonts = 1;
00630 mnUseFlatBorders = 0;
00631 mnUseFlatMenues = 0;
00632 mnUseImagesInMenus = (USHORT)TRUE;
00633 mnSkipDisabledInMenus = (USHORT)FALSE;
00634
00635 Gradient aGrad( GRADIENT_LINEAR, DEFAULT_WORKSPACE_GRADIENT_START_COLOR, DEFAULT_WORKSPACE_GRADIENT_END_COLOR );
00636 maWorkspaceGradient = Wallpaper( aGrad );
00637 }
00638
00639
00640
00641 StyleSettings::StyleSettings()
00642 {
00643 mpData = new ImplStyleData();
00644 }
00645
00646
00647
00648 StyleSettings::StyleSettings( const StyleSettings& rSet )
00649 {
00650 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "StyleSettings: RefCount overflow" );
00651
00652
00653 mpData = rSet.mpData;
00654 mpData->mnRefCount++;
00655 }
00656
00657
00658
00659 StyleSettings::~StyleSettings()
00660 {
00661
00662 if ( mpData->mnRefCount == 1 )
00663 delete mpData;
00664 else
00665 mpData->mnRefCount--;
00666 }
00667
00668
00669
00670 void StyleSettings::Set3DColors( const Color& rColor )
00671 {
00672 CopyData();
00673 mpData->maFaceColor = rColor;
00674 mpData->maLightBorderColor = rColor;
00675 mpData->maMenuBorderColor = rColor;
00676 mpData->maDarkShadowColor = Color( COL_BLACK );
00677 if ( rColor != Color( COL_LIGHTGRAY ) )
00678 {
00679 mpData->maLightColor = rColor;
00680 mpData->maShadowColor = rColor;
00681 mpData->maLightColor.IncreaseLuminance( 64 );
00682 mpData->maShadowColor.DecreaseLuminance( 64 );
00683 ULONG nRed = mpData->maLightColor.GetRed();
00684 ULONG nGreen = mpData->maLightColor.GetGreen();
00685 ULONG nBlue = mpData->maLightColor.GetBlue();
00686 nRed += (ULONG)(mpData->maShadowColor.GetRed());
00687 nGreen += (ULONG)(mpData->maShadowColor.GetGreen());
00688 nBlue += (ULONG)(mpData->maShadowColor.GetBlue());
00689 mpData->maCheckedColor = Color( (BYTE)(nRed/2), (BYTE)(nGreen/2), (BYTE)(nBlue/2) );
00690 }
00691 else
00692 {
00693 mpData->maCheckedColor = Color( 0x99, 0x99, 0x99 );
00694 mpData->maLightColor = Color( COL_WHITE );
00695 mpData->maShadowColor = Color( COL_GRAY );
00696 }
00697 }
00698
00699
00700
00701 ::rtl::OUString StyleSettings::ImplSymbolsStyleToName( ULONG nStyle ) const
00702 {
00703 switch ( nStyle )
00704 {
00705 case STYLE_SYMBOLS_DEFAULT: return ::rtl::OUString::createFromAscii( "default" );
00706 case STYLE_SYMBOLS_HICONTRAST: return ::rtl::OUString::createFromAscii( "hicontrast" );
00707 case STYLE_SYMBOLS_INDUSTRIAL: return ::rtl::OUString::createFromAscii( "industrial" );
00708 case STYLE_SYMBOLS_CRYSTAL: return ::rtl::OUString::createFromAscii( "crystal" );
00709 case STYLE_SYMBOLS_TANGO: return ::rtl::OUString::createFromAscii( "tango" );
00710 case STYLE_SYMBOLS_CLASSIC: return ::rtl::OUString::createFromAscii( "classic" );
00711 case STYLE_SYMBOLS_OXYGEN: return ::rtl::OUString::createFromAscii( "oxygen" );
00712 }
00713
00714 return ::rtl::OUString::createFromAscii( "auto" );
00715 }
00716
00717
00718
00719 ULONG StyleSettings::ImplNameToSymbolsStyle( const ::rtl::OUString &rName ) const
00720 {
00721 if ( rName == ::rtl::OUString::createFromAscii( "default" ) )
00722 return STYLE_SYMBOLS_DEFAULT;
00723 else if ( rName == ::rtl::OUString::createFromAscii( "hicontrast" ) )
00724 return STYLE_SYMBOLS_HICONTRAST;
00725 else if ( rName == ::rtl::OUString::createFromAscii( "industrial" ) )
00726 return STYLE_SYMBOLS_INDUSTRIAL;
00727 else if ( rName == ::rtl::OUString::createFromAscii( "crystal" ) )
00728 return STYLE_SYMBOLS_CRYSTAL;
00729 else if ( rName == ::rtl::OUString::createFromAscii( "tango" ) )
00730 return STYLE_SYMBOLS_TANGO;
00731 else if ( rName == ::rtl::OUString::createFromAscii( "classic" ) )
00732 return STYLE_SYMBOLS_CLASSIC;
00733 else if ( rName == ::rtl::OUString::createFromAscii( "oxygen" ) )
00734 return STYLE_SYMBOLS_OXYGEN;
00735
00736 return STYLE_SYMBOLS_AUTO;
00737 }
00738
00739
00740
00747 void StyleSettings::SetPreferredSymbolsStyleName( const ::rtl::OUString &rName )
00748 {
00749 if ( rName.getLength() > 0 )
00750 {
00751 ::rtl::OUString rNameLowCase( rName.toAsciiLowerCase() );
00752
00753 for( sal_uInt32 n = 0; n <= STYLE_SYMBOLS_THEMES_MAX; n++ )
00754 if ( rNameLowCase.indexOf( ImplSymbolsStyleToName( n ) ) != -1 )
00755 {
00756 if (n == STYLE_SYMBOLS_INDUSTRIAL)
00757
00758
00759 SetPreferredSymbolsStyle( STYLE_SYMBOLS_TANGO );
00760 else
00761 SetPreferredSymbolsStyle( n );
00762 return;
00763 }
00764 }
00765 }
00766
00767
00768
00769 ULONG StyleSettings::GetCurrentSymbolsStyle() const
00770 {
00771
00772 ULONG nStyle = GetSymbolsStyle();
00773
00774 if ( nStyle == STYLE_SYMBOLS_AUTO || ( !CheckSymbolStyle (nStyle) ) )
00775 {
00776
00777 ULONG nPreferredStyle = GetPreferredSymbolsStyle();
00778
00779 if ( nPreferredStyle == STYLE_SYMBOLS_AUTO || ( !CheckSymbolStyle (nPreferredStyle) ) )
00780 {
00781
00782
00783 static bool sbFallbackDesktopChecked = false;
00784 static ULONG snFallbackDesktopStyle = STYLE_SYMBOLS_DEFAULT;
00785
00786 if ( !sbFallbackDesktopChecked )
00787 {
00788 snFallbackDesktopStyle = GetAutoSymbolsStyle();
00789 sbFallbackDesktopChecked = true;
00790 }
00791
00792 nPreferredStyle = snFallbackDesktopStyle;
00793 }
00794
00795 if (GetHighContrastMode() && CheckSymbolStyle (STYLE_SYMBOLS_HICONTRAST) )
00796 nStyle = STYLE_SYMBOLS_HICONTRAST;
00797 else
00798 nStyle = nPreferredStyle;
00799 }
00800
00801 return nStyle;
00802 }
00803
00804
00805
00806 ULONG StyleSettings::GetAutoSymbolsStyle() const
00807 {
00808 const ::rtl::OUString& rDesktopEnvironment = Application::GetDesktopEnvironment();
00809 ULONG nRet = STYLE_SYMBOLS_DEFAULT;
00810 bool bCont = true;
00811
00812 try
00813 {
00814 const ::com::sun::star::uno::Any aAny( ::utl::ConfigManager::GetDirectConfigProperty( ::utl::ConfigManager::OPENSOURCECONTEXT ) );
00815 sal_Int32 nValue( 0 );
00816
00817 aAny >>= nValue;
00818
00819 if( 0 == nValue )
00820 bCont = false;
00821 }
00822 catch ( ::com::sun::star::uno::Exception& )
00823 {
00824 }
00825
00826 if( bCont )
00827 {
00828 if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "gnome" ) ||
00829 rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "windows" ) )
00830 nRet = STYLE_SYMBOLS_TANGO;
00831 else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde" ) )
00832 nRet = STYLE_SYMBOLS_CRYSTAL;
00833 else if( rDesktopEnvironment.equalsIgnoreAsciiCaseAscii( "kde4" ) )
00834 nRet = STYLE_SYMBOLS_OXYGEN;
00835 }
00836
00837
00838 if ( ! CheckSymbolStyle (nRet) )
00839 {
00840 for ( ULONG n = 0 ; n <= STYLE_SYMBOLS_THEMES_MAX ; n++ )
00841 {
00842 ULONG nStyleToCheck = n;
00843
00844
00845 if ( nStyleToCheck == STYLE_SYMBOLS_AUTO )
00846 continue;
00847
00848
00849 if ( nStyleToCheck == STYLE_SYMBOLS_HICONTRAST )
00850 continue;
00851 if ( nStyleToCheck == STYLE_SYMBOLS_THEMES_MAX )
00852 nStyleToCheck = STYLE_SYMBOLS_HICONTRAST;
00853
00854 if ( CheckSymbolStyle ( nStyleToCheck ) )
00855 {
00856 nRet = nStyleToCheck;
00857 n = STYLE_SYMBOLS_THEMES_MAX;
00858 }
00859 }
00860 }
00861
00862 return nRet;
00863 }
00864
00865
00866
00867 bool StyleSettings::CheckSymbolStyle( ULONG nStyle ) const
00868 {
00869 static ImplImageTreeSingletonRef aImageTree;
00870 return aImageTree->checkStyle( ImplSymbolsStyleToName( nStyle ) );
00871 }
00872
00873
00874
00875 void StyleSettings::SetStandardStyles()
00876 {
00877 CopyData();
00878 mpData->SetStandardStyles();
00879 }
00880
00881
00882
00883 void StyleSettings::SetStandardWinStyles()
00884 {
00885 return;
00886 }
00887
00888
00889
00890 void StyleSettings::SetStandardOS2Styles()
00891 {
00892 return;
00893 }
00894
00895
00896
00897 void StyleSettings::SetStandardMacStyles()
00898 {
00899 return;
00900 }
00901
00902
00903
00904 void StyleSettings::SetStandardUnixStyles()
00905 {
00906 return;
00907 }
00908
00909
00910
00911 Color StyleSettings::GetFaceGradientColor() const
00912 {
00913
00914
00915
00916 USHORT h, s, b;
00917 GetFaceColor().RGBtoHSB( h, s, b );
00918 if( s > 1) s=1;
00919 if( b < 98) b=98;
00920 return Color( Color::HSBtoRGB( h, s, b ) );
00921 }
00922
00923
00924
00925 Color StyleSettings::GetSeparatorColor() const
00926 {
00927
00928 USHORT h, s, b;
00929 GetShadowColor().RGBtoHSB( h, s, b );
00930 b += b/4;
00931 s -= s/4;
00932 return Color( Color::HSBtoRGB( h, s, b ) );
00933 }
00934
00935
00936
00937 const StyleSettings& StyleSettings::operator =( const StyleSettings& rSet )
00938 {
00939 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "StyleSettings: RefCount overflow" );
00940
00941
00942 rSet.mpData->mnRefCount++;
00943
00944
00945 if ( mpData->mnRefCount == 1 )
00946 delete mpData;
00947 else
00948 mpData->mnRefCount--;
00949
00950 mpData = rSet.mpData;
00951
00952 return *this;
00953 }
00954
00955
00956
00957 void StyleSettings::CopyData()
00958 {
00959
00960 if ( mpData->mnRefCount != 1 )
00961 {
00962 mpData->mnRefCount--;
00963 mpData = new ImplStyleData( *mpData );
00964 }
00965 }
00966
00967
00968
00969 inline BOOL ImplIsBackOrWhite( const Color& rColor )
00970 {
00971 UINT8 nLuminance = rColor.GetLuminance();
00972 return ( nLuminance < 8 ) || ( nLuminance > 250 );
00973 }
00974
00975 BOOL StyleSettings::IsHighContrastBlackAndWhite() const
00976 {
00977 BOOL bBWOnly = TRUE;
00978
00979
00980
00981
00982
00983
00984
00985 if ( !ImplIsBackOrWhite( GetFaceColor() ) )
00986 bBWOnly = FALSE;
00987 else if ( !ImplIsBackOrWhite( GetHighlightTextColor() ) )
00988 bBWOnly = FALSE;
00989 else if ( !ImplIsBackOrWhite( GetWindowColor() ) )
00990 bBWOnly = FALSE;
00991 else if ( !ImplIsBackOrWhite( GetWindowTextColor() ) )
00992 bBWOnly = FALSE;
00993 else if ( !ImplIsBackOrWhite( GetButtonTextColor() ) )
00994 bBWOnly = FALSE;
00995 else if ( !ImplIsBackOrWhite( GetButtonTextColor() ) )
00996 bBWOnly = FALSE;
00997 else if ( !ImplIsBackOrWhite( GetGroupTextColor() ) )
00998 bBWOnly = FALSE;
00999 else if ( !ImplIsBackOrWhite( GetLabelTextColor() ) )
01000 bBWOnly = FALSE;
01001 else if ( !ImplIsBackOrWhite( GetDialogColor() ) )
01002 bBWOnly = FALSE;
01003 else if ( !ImplIsBackOrWhite( GetFieldColor() ) )
01004 bBWOnly = FALSE;
01005 else if ( !ImplIsBackOrWhite( GetMenuColor() ) )
01006 bBWOnly = FALSE;
01007 else if ( !ImplIsBackOrWhite( GetMenuBarColor() ) )
01008 bBWOnly = FALSE;
01009 else if ( !ImplIsBackOrWhite( GetMenuHighlightColor() ) )
01010 bBWOnly = FALSE;
01011
01012 return bBWOnly;
01013 }
01014
01015
01016
01017 BOOL StyleSettings::operator ==( const StyleSettings& rSet ) const
01018 {
01019 if ( mpData == rSet.mpData )
01020 return TRUE;
01021
01022 if ( (mpData->mnOptions == rSet.mpData->mnOptions) &&
01023 (mpData->mnAutoMnemonic == rSet.mpData->mnAutoMnemonic) &&
01024 (mpData->mnLogoDisplayTime == rSet.mpData->mnLogoDisplayTime) &&
01025 (mpData->mnDragFullOptions == rSet.mpData->mnDragFullOptions) &&
01026 (mpData->mnAnimationOptions == rSet.mpData->mnAnimationOptions) &&
01027 (mpData->mnSelectionOptions == rSet.mpData->mnSelectionOptions) &&
01028 (mpData->mnDisplayOptions == rSet.mpData->mnDisplayOptions) &&
01029 (mpData->mnCursorSize == rSet.mpData->mnCursorSize) &&
01030 (mpData->mnCursorBlinkTime == rSet.mpData->mnCursorBlinkTime) &&
01031 (mpData->mnBorderSize == rSet.mpData->mnBorderSize) &&
01032 (mpData->mnTitleHeight == rSet.mpData->mnTitleHeight) &&
01033 (mpData->mnFloatTitleHeight == rSet.mpData->mnFloatTitleHeight) &&
01034 (mpData->mnTearOffTitleHeight == rSet.mpData->mnTearOffTitleHeight) &&
01035 (mpData->mnMenuBarHeight == rSet.mpData->mnMenuBarHeight) &&
01036 (mpData->mnScrollBarSize == rSet.mpData->mnScrollBarSize) &&
01037 (mpData->mnMinThumbSize == rSet.mpData->mnMinThumbSize) &&
01038 (mpData->mnSplitSize == rSet.mpData->mnSplitSize) &&
01039 (mpData->mnSpinSize == rSet.mpData->mnSpinSize) &&
01040 (mpData->mnIconHorzSpace == rSet.mpData->mnIconHorzSpace) &&
01041 (mpData->mnIconVertSpace == rSet.mpData->mnIconVertSpace) &&
01042 (mpData->mnAntialiasedMin == rSet.mpData->mnAntialiasedMin) &&
01043 (mpData->mnScreenZoom == rSet.mpData->mnScreenZoom) &&
01044 (mpData->mnScreenFontZoom == rSet.mpData->mnScreenFontZoom) &&
01045 (mpData->mnRadioButtonStyle == rSet.mpData->mnRadioButtonStyle) &&
01046 (mpData->mnCheckBoxStyle == rSet.mpData->mnCheckBoxStyle) &&
01047 (mpData->mnPushButtonStyle == rSet.mpData->mnPushButtonStyle) &&
01048 (mpData->mnTabControlStyle == rSet.mpData->mnTabControlStyle) &&
01049 (mpData->mnHighContrast == rSet.mpData->mnHighContrast) &&
01050 (mpData->mnUseSystemUIFonts == rSet.mpData->mnUseSystemUIFonts) &&
01051 (mpData->mnUseFlatBorders == rSet.mpData->mnUseFlatBorders) &&
01052 (mpData->mnUseFlatMenues == rSet.mpData->mnUseFlatMenues) &&
01053 (mpData->maFaceColor == rSet.mpData->maFaceColor) &&
01054 (mpData->maCheckedColor == rSet.mpData->maCheckedColor) &&
01055 (mpData->maLightColor == rSet.mpData->maLightColor) &&
01056 (mpData->maLightBorderColor == rSet.mpData->maLightBorderColor) &&
01057 (mpData->maShadowColor == rSet.mpData->maShadowColor) &&
01058 (mpData->maDarkShadowColor == rSet.mpData->maDarkShadowColor) &&
01059 (mpData->maButtonTextColor == rSet.mpData->maButtonTextColor) &&
01060 (mpData->maRadioCheckTextColor == rSet.mpData->maRadioCheckTextColor) &&
01061 (mpData->maGroupTextColor == rSet.mpData->maGroupTextColor) &&
01062 (mpData->maLabelTextColor == rSet.mpData->maLabelTextColor) &&
01063 (mpData->maInfoTextColor == rSet.mpData->maInfoTextColor) &&
01064 (mpData->maWindowColor == rSet.mpData->maWindowColor) &&
01065 (mpData->maWindowTextColor == rSet.mpData->maWindowTextColor) &&
01066 (mpData->maDialogColor == rSet.mpData->maDialogColor) &&
01067 (mpData->maDialogTextColor == rSet.mpData->maDialogTextColor) &&
01068 (mpData->maWorkspaceColor == rSet.mpData->maWorkspaceColor) &&
01069 (mpData->maMonoColor == rSet.mpData->maMonoColor) &&
01070 (mpData->maFieldColor == rSet.mpData->maFieldColor) &&
01071 (mpData->maFieldTextColor == rSet.mpData->maFieldTextColor) &&
01072 (mpData->maActiveColor == rSet.mpData->maActiveColor) &&
01073 (mpData->maActiveColor2 == rSet.mpData->maActiveColor2) &&
01074 (mpData->maActiveTextColor == rSet.mpData->maActiveTextColor) &&
01075 (mpData->maActiveBorderColor == rSet.mpData->maActiveBorderColor) &&
01076 (mpData->maDeactiveColor == rSet.mpData->maDeactiveColor) &&
01077 (mpData->maDeactiveColor2 == rSet.mpData->maDeactiveColor2) &&
01078 (mpData->maDeactiveTextColor == rSet.mpData->maDeactiveTextColor) &&
01079 (mpData->maDeactiveBorderColor == rSet.mpData->maDeactiveBorderColor) &&
01080 (mpData->maMenuColor == rSet.mpData->maMenuColor) &&
01081 (mpData->maMenuBarColor == rSet.mpData->maMenuBarColor) &&
01082 (mpData->maMenuBorderColor == rSet.mpData->maMenuBorderColor) &&
01083 (mpData->maMenuTextColor == rSet.mpData->maMenuTextColor) &&
01084 (mpData->maMenuBarTextColor == rSet.mpData->maMenuBarTextColor) &&
01085 (mpData->maMenuHighlightColor == rSet.mpData->maMenuHighlightColor) &&
01086 (mpData->maMenuHighlightTextColor == rSet.mpData->maMenuHighlightTextColor) &&
01087 (mpData->maHighlightColor == rSet.mpData->maHighlightColor) &&
01088 (mpData->maHighlightTextColor == rSet.mpData->maHighlightTextColor) &&
01089 (mpData->maActiveTabColor == rSet.mpData->maActiveTabColor) &&
01090 (mpData->maInactiveTabColor == rSet.mpData->maInactiveTabColor) &&
01091 (mpData->maDisableColor == rSet.mpData->maDisableColor) &&
01092 (mpData->maHelpColor == rSet.mpData->maHelpColor) &&
01093 (mpData->maHelpTextColor == rSet.mpData->maHelpTextColor) &&
01094 (mpData->maLinkColor == rSet.mpData->maLinkColor) &&
01095 (mpData->maVisitedLinkColor == rSet.mpData->maVisitedLinkColor) &&
01096 (mpData->maHighlightLinkColor == rSet.mpData->maHighlightLinkColor) &&
01097 (mpData->maAppFont == rSet.mpData->maAppFont) &&
01098 (mpData->maHelpFont == rSet.mpData->maHelpFont) &&
01099 (mpData->maTitleFont == rSet.mpData->maTitleFont) &&
01100 (mpData->maFloatTitleFont == rSet.mpData->maFloatTitleFont) &&
01101 (mpData->maMenuFont == rSet.mpData->maMenuFont) &&
01102 (mpData->maToolFont == rSet.mpData->maToolFont) &&
01103 (mpData->maGroupFont == rSet.mpData->maGroupFont) &&
01104 (mpData->maLabelFont == rSet.mpData->maLabelFont) &&
01105 (mpData->maInfoFont == rSet.mpData->maInfoFont) &&
01106 (mpData->maRadioCheckFont == rSet.mpData->maRadioCheckFont) &&
01107 (mpData->maPushButtonFont == rSet.mpData->maPushButtonFont) &&
01108 (mpData->maFieldFont == rSet.mpData->maFieldFont) &&
01109 (mpData->maIconFont == rSet.mpData->maIconFont) &&
01110 (mpData->mnUseImagesInMenus == rSet.mpData->mnUseImagesInMenus) &&
01111 (mpData->mnSkipDisabledInMenus == rSet.mpData->mnSkipDisabledInMenus) &&
01112 (mpData->maFontColor == rSet.mpData->maFontColor ))
01113 return TRUE;
01114 else
01115 return FALSE;
01116 }
01117
01118
01119
01120 ImplMiscData::ImplMiscData()
01121 {
01122 mnRefCount = 1;
01123 mnTwoDigitYearStart = 1930;
01124 mnEnableATT = sal::static_int_cast<USHORT>(~0U);
01125 mnDisablePrinting = sal::static_int_cast<USHORT>(~0U);
01126 static const char* pEnv = getenv("SAL_DECIMALSEP_ENABLED" );
01127 mbEnableLocalizedDecimalSep = (pEnv != NULL) ? TRUE : FALSE;
01128 }
01129
01130
01131
01132 ImplMiscData::ImplMiscData( const ImplMiscData& rData )
01133 {
01134 mnRefCount = 1;
01135 mnTwoDigitYearStart = rData.mnTwoDigitYearStart;
01136 mnEnableATT = rData.mnEnableATT;
01137 mnDisablePrinting = rData.mnDisablePrinting;
01138 mbEnableLocalizedDecimalSep = rData.mbEnableLocalizedDecimalSep;
01139 }
01140
01141
01142
01143 MiscSettings::MiscSettings()
01144 {
01145 mpData = new ImplMiscData();
01146 }
01147
01148
01149
01150 MiscSettings::MiscSettings( const MiscSettings& rSet )
01151 {
01152 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MiscSettings: RefCount overflow" );
01153
01154
01155 mpData = rSet.mpData;
01156 mpData->mnRefCount++;
01157 }
01158
01159
01160
01161 MiscSettings::~MiscSettings()
01162 {
01163
01164 if ( mpData->mnRefCount == 1 )
01165 delete mpData;
01166 else
01167 mpData->mnRefCount--;
01168 }
01169
01170
01171
01172 const MiscSettings& MiscSettings::operator =( const MiscSettings& rSet )
01173 {
01174 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "MiscSettings: RefCount overflow" );
01175
01176
01177 rSet.mpData->mnRefCount++;
01178
01179
01180 if ( mpData->mnRefCount == 1 )
01181 delete mpData;
01182 else
01183 mpData->mnRefCount--;
01184
01185 mpData = rSet.mpData;
01186
01187 return *this;
01188 }
01189
01190
01191
01192 void MiscSettings::CopyData()
01193 {
01194
01195 if ( mpData->mnRefCount != 1 )
01196 {
01197 mpData->mnRefCount--;
01198 mpData = new ImplMiscData( *mpData );
01199 }
01200 }
01201
01202
01203
01204 BOOL MiscSettings::operator ==( const MiscSettings& rSet ) const
01205 {
01206 if ( mpData == rSet.mpData )
01207 return TRUE;
01208
01209 if ( (mpData->mnTwoDigitYearStart == rSet.mpData->mnTwoDigitYearStart ) &&
01210 (mpData->mnEnableATT == rSet.mpData->mnEnableATT ) &&
01211 (mpData->mnDisablePrinting == rSet.mpData->mnDisablePrinting ) &&
01212 (mpData->mbEnableLocalizedDecimalSep == rSet.mpData->mbEnableLocalizedDecimalSep ) )
01213 return TRUE;
01214 else
01215 return FALSE;
01216 }
01217
01218
01219
01220 BOOL MiscSettings::GetDisablePrinting() const
01221 {
01222 if( mpData->mnDisablePrinting == (USHORT)~0 )
01223 {
01224 rtl::OUString aEnable =
01225 vcl::SettingsConfigItem::get()->
01226 getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DesktopManagement" ) ),
01227 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisablePrinting" ) ) );
01228 mpData->mnDisablePrinting = aEnable.equalsIgnoreAsciiCaseAscii( "true" ) ? 1 : 0;
01229 }
01230
01231 return (BOOL)mpData->mnDisablePrinting;
01232 }
01233
01234
01235 BOOL MiscSettings::GetEnableATToolSupport() const
01236 {
01237
01238 #ifdef WNT
01239 if( mpData->mnEnableATT == (USHORT)~0 )
01240 {
01241
01242
01243 HKEY hkey;
01244
01245 if( ERROR_SUCCESS == RegOpenKey(HKEY_CURRENT_USER,
01246 "Software\\OpenOffice.org\\Accessibility\\AtToolSupport",
01247 &hkey) )
01248 {
01249 DWORD dwType;
01250 WIN_BYTE Data[6];
01251 DWORD cbData = sizeof(Data);
01252
01253 if( ERROR_SUCCESS == RegQueryValueEx(hkey, "SupportAssistiveTechnology",
01254 NULL, &dwType, Data, &cbData) )
01255 {
01256 switch (dwType)
01257 {
01258 case REG_SZ:
01259 mpData->mnEnableATT = ((0 == stricmp((const char *) Data, "1")) || (0 == stricmp((const char *) Data, "true")));
01260 break;
01261 case REG_DWORD:
01262 mpData->mnEnableATT = (USHORT) (((DWORD *) Data)[0]);
01263 break;
01264 default:
01265
01266 break;
01267 }
01268 }
01269
01270 RegCloseKey(hkey);
01271 }
01272 }
01273 #endif
01274
01275 if( mpData->mnEnableATT == (USHORT)~0 )
01276 {
01277 static const char* pEnv = getenv("SAL_ACCESSIBILITY_ENABLED" );
01278 if( !pEnv || !*pEnv )
01279 {
01280 rtl::OUString aEnable =
01281 vcl::SettingsConfigItem::get()->
01282 getValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Accessibility" ) ),
01283 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EnableATToolSupport" ) ) );
01284 mpData->mnEnableATT = aEnable.equalsIgnoreAsciiCaseAscii( "true" ) ? 1 : 0;
01285 }
01286 else
01287 {
01288 mpData->mnEnableATT = 1;
01289 }
01290 }
01291
01292 return (BOOL)mpData->mnEnableATT;
01293 }
01294
01295
01296
01297 void MiscSettings::SetDisablePrinting( BOOL bEnable )
01298 {
01299 if ( bEnable != mpData->mnDisablePrinting )
01300 {
01301 vcl::SettingsConfigItem::get()->
01302 setValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DesktopManagement" ) ),
01303 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "DisablePrinting" ) ),
01304 rtl::OUString::createFromAscii( bEnable ? "true" : "false" ) );
01305 mpData->mnDisablePrinting = bEnable ? 1 : 0;
01306 }
01307 }
01308
01309
01310
01311 void MiscSettings::SetEnableATToolSupport( BOOL bEnable )
01312 {
01313 if ( bEnable != mpData->mnEnableATT )
01314 {
01315 BOOL bDummy;
01316 if( bEnable && !ImplInitAccessBridge(false, bDummy) )
01317 return;
01318
01319 #ifdef WNT
01320 HKEY hkey;
01321
01322
01323 if( ERROR_SUCCESS == RegOpenKey(HKEY_CURRENT_USER,
01324 "Software\\OpenOffice.org\\Accessibility\\AtToolSupport",
01325 &hkey) )
01326 {
01327 DWORD dwType;
01328 WIN_BYTE Data[6];
01329 DWORD cbData = sizeof(Data);
01330
01331 if( ERROR_SUCCESS == RegQueryValueEx(hkey, "SupportAssistiveTechnology",
01332 NULL, &dwType, Data, &cbData) )
01333 {
01334 switch (dwType)
01335 {
01336 case REG_SZ:
01337 RegSetValueEx(hkey, "SupportAssistiveTechnology",
01338 NULL, dwType,
01339 bEnable ? (WIN_BYTE *) "true" : (WIN_BYTE *) "false",
01340 bEnable ? sizeof("true") : sizeof("false"));
01341 break;
01342 case REG_DWORD:
01343 ((DWORD *) Data)[0] = bEnable ? 1 : 0;
01344 RegSetValueEx(hkey, "SupportAssistiveTechnology",
01345 NULL, dwType, Data, sizeof(DWORD));
01346 break;
01347 default:
01348
01349 break;
01350 }
01351 }
01352
01353 RegCloseKey(hkey);
01354 }
01355
01356 #endif
01357 vcl::SettingsConfigItem::get()->
01358 setValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Accessibility" ) ),
01359 rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "EnableATToolSupport" ) ),
01360 rtl::OUString::createFromAscii( bEnable ? "true" : "false" ) );
01361 mpData->mnEnableATT = bEnable ? 1 : 0;
01362 }
01363 }
01364
01365 void MiscSettings::SetEnableLocalizedDecimalSep( BOOL bEnable )
01366 {
01367 CopyData();
01368 mpData->mbEnableLocalizedDecimalSep = bEnable;
01369 }
01370
01371 BOOL MiscSettings::GetEnableLocalizedDecimalSep() const
01372 {
01373 return mpData->mbEnableLocalizedDecimalSep;
01374 }
01375
01376
01377
01378 ImplNotificationData::ImplNotificationData()
01379 {
01380 mnRefCount = 1;
01381 mnOptions = 0;
01382 }
01383
01384
01385
01386 ImplNotificationData::ImplNotificationData( const ImplNotificationData& rData )
01387 {
01388 mnRefCount = 1;
01389 mnOptions = rData.mnOptions;
01390 }
01391
01392
01393
01394 NotificationSettings::NotificationSettings()
01395 {
01396 mpData = new ImplNotificationData();
01397 }
01398
01399
01400
01401 NotificationSettings::NotificationSettings( const NotificationSettings& rSet )
01402 {
01403 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "NotificationSettings: RefCount overflow" );
01404
01405
01406 mpData = rSet.mpData;
01407 mpData->mnRefCount++;
01408 }
01409
01410
01411
01412 NotificationSettings::~NotificationSettings()
01413 {
01414
01415 if ( mpData->mnRefCount == 1 )
01416 delete mpData;
01417 else
01418 mpData->mnRefCount--;
01419 }
01420
01421
01422
01423 const NotificationSettings& NotificationSettings::operator =( const NotificationSettings& rSet )
01424 {
01425 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "NotificationSettings: RefCount overflow" );
01426
01427
01428 rSet.mpData->mnRefCount++;
01429
01430
01431 if ( mpData->mnRefCount == 1 )
01432 delete mpData;
01433 else
01434 mpData->mnRefCount--;
01435
01436 mpData = rSet.mpData;
01437
01438 return *this;
01439 }
01440
01441
01442
01443 void NotificationSettings::CopyData()
01444 {
01445
01446 if ( mpData->mnRefCount != 1 )
01447 {
01448 mpData->mnRefCount--;
01449 mpData = new ImplNotificationData( *mpData );
01450 }
01451 }
01452
01453
01454
01455 BOOL NotificationSettings::operator ==( const NotificationSettings& rSet ) const
01456 {
01457 if ( mpData == rSet.mpData )
01458 return TRUE;
01459
01460 if ( (mpData->mnOptions == rSet.mpData->mnOptions) )
01461 return TRUE;
01462 else
01463 return FALSE;
01464 }
01465
01466
01467
01468 ImplHelpData::ImplHelpData()
01469 {
01470 mnRefCount = 1;
01471 mnOptions = 0;
01472 mnTipDelay = 500;
01473 mnTipTimeout = 3000;
01474 mnBalloonDelay = 1500;
01475 }
01476
01477
01478
01479 ImplHelpData::ImplHelpData( const ImplHelpData& rData )
01480 {
01481 mnRefCount = 1;
01482 mnOptions = rData.mnOptions;
01483 mnTipDelay = rData.mnTipDelay;
01484 mnTipTimeout = rData.mnTipTimeout;
01485 mnBalloonDelay = rData.mnBalloonDelay;
01486 }
01487
01488
01489
01490 HelpSettings::HelpSettings()
01491 {
01492 mpData = new ImplHelpData();
01493 }
01494
01495
01496
01497 HelpSettings::HelpSettings( const HelpSettings& rSet )
01498 {
01499 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "HelpSettings: RefCount overflow" );
01500
01501
01502 mpData = rSet.mpData;
01503 mpData->mnRefCount++;
01504 }
01505
01506
01507
01508 HelpSettings::~HelpSettings()
01509 {
01510
01511 if ( mpData->mnRefCount == 1 )
01512 delete mpData;
01513 else
01514 mpData->mnRefCount--;
01515 }
01516
01517
01518
01519 const HelpSettings& HelpSettings::operator =( const HelpSettings& rSet )
01520 {
01521 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "HelpSettings: RefCount overflow" );
01522
01523
01524 rSet.mpData->mnRefCount++;
01525
01526
01527 if ( mpData->mnRefCount == 1 )
01528 delete mpData;
01529 else
01530 mpData->mnRefCount--;
01531
01532 mpData = rSet.mpData;
01533
01534 return *this;
01535 }
01536
01537
01538
01539 void HelpSettings::CopyData()
01540 {
01541
01542 if ( mpData->mnRefCount != 1 )
01543 {
01544 mpData->mnRefCount--;
01545 mpData = new ImplHelpData( *mpData );
01546 }
01547 }
01548
01549
01550
01551 BOOL HelpSettings::operator ==( const HelpSettings& rSet ) const
01552 {
01553 if ( mpData == rSet.mpData )
01554 return TRUE;
01555
01556 if ( (mpData->mnOptions == rSet.mpData->mnOptions ) &&
01557 (mpData->mnTipDelay == rSet.mpData->mnTipDelay ) &&
01558 (mpData->mnTipTimeout == rSet.mpData->mnTipTimeout ) &&
01559 (mpData->mnBalloonDelay == rSet.mpData->mnBalloonDelay ) )
01560 return TRUE;
01561 else
01562 return FALSE;
01563 }
01564
01565
01566
01567 static BOOL ImplCompareLocales( const ::com::sun::star::lang::Locale& L1, const ::com::sun::star::lang::Locale& L2 )
01568 {
01569 return ( ( L1.Language == L2.Language ) &&
01570 ( L1.Country == L2.Country ) &&
01571 ( L1.Variant == L2.Variant ) );
01572 }
01573
01574
01575
01576 ImplAllSettingsData::ImplAllSettingsData()
01577 {
01578 mnRefCount = 1;
01579 mnSystemUpdate = SETTINGS_ALLSETTINGS;
01580 mnWindowUpdate = SETTINGS_ALLSETTINGS;
01581 meLanguage = LANGUAGE_SYSTEM;
01582 meUILanguage = LANGUAGE_SYSTEM;
01583 mpLocaleDataWrapper = NULL;
01584 mpUILocaleDataWrapper = NULL;
01585 mpCollatorWrapper = NULL;
01586 mpUICollatorWrapper = NULL;
01587 mpI18nHelper = NULL;
01588 mpUII18nHelper = NULL;
01589 }
01590
01591
01592
01593 ImplAllSettingsData::ImplAllSettingsData( const ImplAllSettingsData& rData ) :
01594 maMouseSettings( rData.maMouseSettings ),
01595 maKeyboardSettings( rData.maKeyboardSettings ),
01596 maStyleSettings( rData.maStyleSettings ),
01597 maMiscSettings( rData.maMiscSettings ),
01598 maNotificationSettings( rData.maNotificationSettings ),
01599 maHelpSettings( rData.maHelpSettings ),
01600 maLocale( rData.maLocale ),
01601 maUILocale( rData.maUILocale )
01602
01603 {
01604 mnRefCount = 1;
01605 mnSystemUpdate = rData.mnSystemUpdate;
01606 mnWindowUpdate = rData.mnWindowUpdate;
01607 meLanguage = rData.meLanguage;
01608 meUILanguage = rData.meUILanguage;
01609
01610
01611
01612 mpLocaleDataWrapper = NULL;
01613 mpUILocaleDataWrapper = NULL;
01614 mpCollatorWrapper = NULL;
01615 mpUICollatorWrapper = NULL;
01616 mpI18nHelper = NULL;
01617 mpUII18nHelper = NULL;
01618 }
01619
01620
01621
01622 ImplAllSettingsData::~ImplAllSettingsData()
01623 {
01624 if ( mpLocaleDataWrapper )
01625 delete mpLocaleDataWrapper;
01626 if ( mpUILocaleDataWrapper )
01627 delete mpUILocaleDataWrapper;
01628 if ( mpCollatorWrapper )
01629 delete mpCollatorWrapper;
01630 if ( mpUICollatorWrapper )
01631 delete mpUICollatorWrapper;
01632 if ( mpI18nHelper )
01633 delete mpI18nHelper;
01634 if ( mpUII18nHelper )
01635 delete mpUII18nHelper;
01636 }
01637
01638
01639
01640 AllSettings::AllSettings()
01641 {
01642 DBG_CTOR( AllSettings, NULL );
01643
01644 mpData = new ImplAllSettingsData();
01645 }
01646
01647
01648
01649 AllSettings::AllSettings( const AllSettings& rSet )
01650 {
01651 DBG_CTOR( AllSettings, NULL );
01652 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "Settings: RefCount overflow" );
01653
01654
01655 mpData = rSet.mpData;
01656 mpData->mnRefCount++;
01657 }
01658
01659
01660
01661 AllSettings::~AllSettings()
01662 {
01663 DBG_DTOR( AllSettings, NULL );
01664
01665
01666 if ( mpData->mnRefCount == 1 )
01667 delete mpData;
01668 else
01669 mpData->mnRefCount--;
01670 }
01671
01672
01673
01674 const AllSettings& AllSettings::operator =( const AllSettings& rSet )
01675 {
01676 DBG_ASSERT( rSet.mpData->mnRefCount < 0xFFFFFFFE, "AllSettings: RefCount overflow" );
01677 DBG_CHKTHIS( AllSettings, NULL );
01678 DBG_CHKOBJ( &rSet, AllSettings, NULL );
01679
01680
01681 rSet.mpData->mnRefCount++;
01682
01683
01684 if ( mpData->mnRefCount == 1 )
01685 delete mpData;
01686 else
01687 mpData->mnRefCount--;
01688
01689 mpData = rSet.mpData;
01690
01691 return *this;
01692 }
01693
01694
01695
01696 void AllSettings::CopyData()
01697 {
01698 DBG_CHKTHIS( AllSettings, NULL );
01699
01700
01701 if ( mpData->mnRefCount != 1 )
01702 {
01703 mpData->mnRefCount--;
01704 mpData = new ImplAllSettingsData( *mpData );
01705 }
01706 }
01707
01708
01709
01710 ULONG AllSettings::Update( ULONG nFlags, const AllSettings& rSet )
01711 {
01712 DBG_CHKTHIS( AllSettings, NULL );
01713 DBG_CHKOBJ( &rSet, AllSettings, NULL );
01714
01715 ULONG nChangeFlags = 0;
01716
01717 if ( nFlags & SETTINGS_MACHINE )
01718 {
01719 if ( mpData->maMachineSettings != rSet.mpData->maMachineSettings )
01720 {
01721 CopyData();
01722 mpData->maMachineSettings = rSet.mpData->maMachineSettings;
01723 nChangeFlags |= SETTINGS_MACHINE;
01724 }
01725 }
01726
01727 if ( nFlags & SETTINGS_MOUSE )
01728 {
01729 if ( mpData->maMouseSettings != rSet.mpData->maMouseSettings )
01730 {
01731 CopyData();
01732 mpData->maMouseSettings = rSet.mpData->maMouseSettings;
01733 nChangeFlags |= SETTINGS_MOUSE;
01734 }
01735 }
01736
01737 if ( nFlags & SETTINGS_KEYBOARD )
01738 {
01739 if ( mpData->maKeyboardSettings != rSet.mpData->maKeyboardSettings )
01740 {
01741 CopyData();
01742 mpData->maKeyboardSettings = rSet.mpData->maKeyboardSettings;
01743 nChangeFlags |= SETTINGS_KEYBOARD;
01744 }
01745 }
01746
01747 if ( nFlags & SETTINGS_STYLE )
01748 {
01749 if ( mpData->maStyleSettings != rSet.mpData->maStyleSettings )
01750 {
01751 CopyData();
01752 mpData->maStyleSettings = rSet.mpData->maStyleSettings;
01753 nChangeFlags |= SETTINGS_STYLE;
01754 }
01755 }
01756
01757 if ( nFlags & SETTINGS_MISC )
01758 {
01759 if ( mpData->maMiscSettings != rSet.mpData->maMiscSettings )
01760 {
01761 CopyData();
01762 mpData->maMiscSettings = rSet.mpData->maMiscSettings;
01763 nChangeFlags |= SETTINGS_MISC;
01764 }
01765 }
01766
01767 if ( nFlags & SETTINGS_NOTIFICATION )
01768 {
01769 if ( mpData->maNotificationSettings != rSet.mpData->maNotificationSettings )
01770 {
01771 CopyData();
01772 mpData->maNotificationSettings = rSet.mpData->maNotificationSettings;
01773 nChangeFlags |= SETTINGS_NOTIFICATION;
01774 }
01775 }
01776
01777 if ( nFlags & SETTINGS_HELP )
01778 {
01779 if ( mpData->maHelpSettings != rSet.mpData->maHelpSettings )
01780 {
01781 CopyData();
01782 mpData->maHelpSettings = rSet.mpData->maHelpSettings;
01783 nChangeFlags |= SETTINGS_HELP;
01784 }
01785 }
01786
01787 if ( nFlags & SETTINGS_INTERNATIONAL )
01788 {
01789
01790 DBG_ERRORFILE("AllSettings::Update: who calls with SETTINGS_INTERNATIONAL and why? You're flogging a dead horse.");
01791 }
01792
01793 if ( nFlags & SETTINGS_LOCALE )
01794 {
01795 if ( mpData->meLanguage || rSet.mpData->meLanguage )
01796 {
01797 SetLanguage( rSet.mpData->meLanguage );
01798 nChangeFlags |= SETTINGS_LOCALE;
01799 }
01800 }
01801
01802 if ( nFlags & SETTINGS_UILOCALE )
01803 {
01804 if ( mpData->meUILanguage || rSet.mpData->meUILanguage )
01805 {
01806 SetUILanguage( rSet.mpData->meUILanguage );
01807 nChangeFlags |= SETTINGS_UILOCALE;
01808 }
01809 }
01810
01811 return nChangeFlags;
01812 }
01813
01814
01815
01816 ULONG AllSettings::GetChangeFlags( const AllSettings& rSet ) const
01817 {
01818 DBG_CHKTHIS( AllSettings, NULL );
01819 DBG_CHKOBJ( &rSet, AllSettings, NULL );
01820
01821 ULONG nChangeFlags = 0;
01822
01823 if ( mpData->maMachineSettings != rSet.mpData->maMachineSettings )
01824 nChangeFlags |= SETTINGS_MACHINE;
01825
01826 if ( mpData->maMouseSettings != rSet.mpData->maMouseSettings )
01827 nChangeFlags |= SETTINGS_MOUSE;
01828
01829 if ( mpData->maKeyboardSettings != rSet.mpData->maKeyboardSettings )
01830 nChangeFlags |= SETTINGS_KEYBOARD;
01831
01832 if ( mpData->maStyleSettings != rSet.mpData->maStyleSettings )
01833 nChangeFlags |= SETTINGS_STYLE;
01834
01835 if ( mpData->maMiscSettings != rSet.mpData->maMiscSettings )
01836 nChangeFlags |= SETTINGS_MISC;
01837
01838 if ( mpData->maNotificationSettings != rSet.mpData->maNotificationSettings )
01839 nChangeFlags |= SETTINGS_NOTIFICATION;
01840
01841 if ( mpData->maHelpSettings != rSet.mpData->maHelpSettings )
01842 nChangeFlags |= SETTINGS_HELP;
01843
01844 if ( mpData->meLanguage || rSet.mpData->meLanguage )
01845 nChangeFlags |= SETTINGS_LOCALE;
01846
01847 if ( mpData->meUILanguage || rSet.mpData->meUILanguage )
01848 nChangeFlags |= SETTINGS_UILOCALE;
01849
01850 return nChangeFlags;
01851 }
01852
01853
01854
01855 BOOL AllSettings::operator ==( const AllSettings& rSet ) const
01856 {
01857 DBG_CHKTHIS( AllSettings, NULL );
01858 DBG_CHKOBJ( &rSet, AllSettings, NULL );
01859
01860 if ( mpData == rSet.mpData )
01861 return TRUE;
01862
01863 if ( (mpData->maMachineSettings == rSet.mpData->maMachineSettings) &&
01864 (mpData->maMouseSettings == rSet.mpData->maMouseSettings) &&
01865 (mpData->maKeyboardSettings == rSet.mpData->maKeyboardSettings) &&
01866 (mpData->maStyleSettings == rSet.mpData->maStyleSettings) &&
01867 (mpData->maMiscSettings == rSet.mpData->maMiscSettings) &&
01868 (mpData->maNotificationSettings == rSet.mpData->maNotificationSettings) &&
01869 (mpData->maHelpSettings == rSet.mpData->maHelpSettings) &&
01870 (mpData->mnSystemUpdate == rSet.mpData->mnSystemUpdate) &&
01871 (mpData->mnWindowUpdate == rSet.mpData->mnWindowUpdate) )
01872 {
01873
01874
01875 ::com::sun::star::lang::Locale aEmptyLocale;
01876 if ( ( ImplCompareLocales( mpData->maLocale, aEmptyLocale ) && ImplCompareLocales( rSet.mpData->maLocale, aEmptyLocale ) )
01877 || ImplCompareLocales( GetLocale(), rSet.GetLocale() ) )
01878 {
01879 return TRUE;
01880 }
01881 }
01882 return FALSE;
01883 }
01884
01885
01886
01887 void AllSettings::SetLocale( const ::com::sun::star::lang::Locale& rLocale )
01888 {
01889 CopyData();
01890
01891 mpData->maLocale = rLocale;
01892
01893 if ( !rLocale.Language.getLength() )
01894 mpData->meLanguage = LANGUAGE_SYSTEM;
01895 else
01896 mpData->meLanguage = MsLangId::convertLocaleToLanguage( rLocale );
01897 if ( mpData->mpLocaleDataWrapper )
01898 {
01899 delete mpData->mpLocaleDataWrapper;
01900 mpData->mpLocaleDataWrapper = NULL;
01901 }
01902 if ( mpData->mpI18nHelper )
01903 {
01904 delete mpData->mpI18nHelper;
01905 mpData->mpI18nHelper = NULL;
01906 }
01907 }
01908
01909
01910
01911 void AllSettings::SetUILocale( const ::com::sun::star::lang::Locale& rLocale )
01912 {
01913 CopyData();
01914
01915 mpData->maUILocale = rLocale;
01916
01917 if ( !rLocale.Language.getLength() )
01918 mpData->meUILanguage = LANGUAGE_SYSTEM;
01919 else
01920 mpData->meUILanguage = MsLangId::convertLocaleToLanguage( rLocale );
01921 if ( mpData->mpUILocaleDataWrapper )
01922 {
01923 delete mpData->mpUILocaleDataWrapper;
01924 mpData->mpUILocaleDataWrapper = NULL;
01925 }
01926 if ( mpData->mpUII18nHelper )
01927 {
01928 delete mpData->mpUII18nHelper;
01929 mpData->mpUII18nHelper = NULL;
01930 }
01931 }
01932
01933
01934
01935 void AllSettings::SetLanguage( LanguageType eLang )
01936 {
01937 CopyData();
01938
01939 mpData->meLanguage = eLang;
01940
01941
01942 mpData->maLocale = ::com::sun::star::lang::Locale();
01943 if ( mpData->mpLocaleDataWrapper )
01944 {
01945 delete mpData->mpLocaleDataWrapper;
01946 mpData->mpLocaleDataWrapper = NULL;
01947 }
01948 if ( mpData->mpI18nHelper )
01949 {
01950 delete mpData->mpI18nHelper;
01951 mpData->mpI18nHelper = NULL;
01952 }
01953 }
01954
01955
01956
01957 void AllSettings::SetUILanguage( LanguageType eLang )
01958 {
01959 CopyData();
01960
01961 mpData->meUILanguage = eLang;
01962
01963
01964 mpData->maUILocale = ::com::sun::star::lang::Locale();
01965 if ( mpData->mpUILocaleDataWrapper )
01966 {
01967 delete mpData->mpUILocaleDataWrapper;
01968 mpData->mpUILocaleDataWrapper = NULL;
01969 }
01970 if ( mpData->mpUII18nHelper )
01971 {
01972 delete mpData->mpUII18nHelper;
01973 mpData->mpUII18nHelper = NULL;
01974 }
01975 }
01976
01977
01978
01979 BOOL AllSettings::GetLayoutRTL() const
01980 {
01981 static const char* pEnv = getenv("SAL_RTL_ENABLED" );
01982 static int nUIMirroring = -1;
01983
01984
01985 if( pEnv )
01986 return true;
01987
01988 BOOL bRTL = FALSE;
01989
01990 if( nUIMirroring == -1 )
01991 {
01992 nUIMirroring = 0;
01993 utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithServiceFactory(
01994 vcl::unohelper::GetMultiServiceFactory(),
01995 OUString::createFromAscii( "org.openoffice.Office.Common/I18N/CTL" ) );
01996 if ( aNode.isValid() )
01997 {
01998 BOOL bTmp = BOOL();
01999 ::com::sun::star::uno::Any aValue = aNode.getNodeValue( OUString::createFromAscii( "UIMirroring" ) );
02000 if( aValue >>= bTmp )
02001 {
02002
02003 nUIMirroring = bTmp ? 1 : 2;
02004 }
02005 }
02006 }
02007
02008 if( nUIMirroring == 0 )
02009 {
02010 LanguageType aLang = LANGUAGE_DONTKNOW;
02011 ImplSVData* pSVData = ImplGetSVData();
02012 if ( pSVData->maAppData.mpSettings )
02013 aLang = pSVData->maAppData.mpSettings->GetUILanguage();
02014 bRTL = MsLangId::isRightToLeft( aLang );
02015 }
02016 else
02017 bRTL = (nUIMirroring == 1);
02018
02019 return bRTL;
02020 }
02021
02022
02023
02024 const ::com::sun::star::lang::Locale& AllSettings::GetLocale() const
02025 {
02026 if ( !mpData->maLocale.Language.getLength() )
02027 MsLangId::convertLanguageToLocale( GetLanguage(),
02028 ((AllSettings*)this)->mpData->maLocale );
02029
02030 return mpData->maLocale;
02031 }
02032
02033
02034
02035 const ::com::sun::star::lang::Locale& AllSettings::GetUILocale() const
02036 {
02037 if ( !mpData->maUILocale.Language.getLength() )
02038 MsLangId::convertLanguageToLocale( GetUILanguage(),
02039 ((AllSettings*)this)->mpData->maUILocale );
02040
02041 return mpData->maUILocale;
02042 }
02043
02044
02045
02046 LanguageType AllSettings::GetLanguage() const
02047 {
02048 if ( mpData->meLanguage == LANGUAGE_SYSTEM )
02049 return MsLangId::getSystemLanguage();
02050
02051 return mpData->meLanguage;
02052 }
02053
02054
02055
02056 LanguageType AllSettings::GetUILanguage() const
02057 {
02058 if ( mpData->meUILanguage == LANGUAGE_SYSTEM )
02059 return MsLangId::getSystemUILanguage();
02060
02061 return mpData->meUILanguage;
02062 }
02063
02064
02065
02066 const LocaleDataWrapper& AllSettings::GetLocaleDataWrapper() const
02067 {
02068 if ( !mpData->mpLocaleDataWrapper )
02069 ((AllSettings*)this)->mpData->mpLocaleDataWrapper = new LocaleDataWrapper( vcl::unohelper::GetMultiServiceFactory(), GetLocale() );
02070 return *mpData->mpLocaleDataWrapper;
02071 }
02072
02073
02074
02075 const LocaleDataWrapper& AllSettings::GetUILocaleDataWrapper() const
02076 {
02077 if ( !mpData->mpUILocaleDataWrapper )
02078 ((AllSettings*)this)->mpData->mpUILocaleDataWrapper = new LocaleDataWrapper( vcl::unohelper::GetMultiServiceFactory(), GetUILocale() );
02079 return *mpData->mpUILocaleDataWrapper;
02080 }
02081
02082
02083
02084 const vcl::I18nHelper& AllSettings::GetLocaleI18nHelper() const
02085 {
02086 if ( !mpData->mpI18nHelper ) {
02087 ::com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory> aFactory(vcl::unohelper::GetMultiServiceFactory());
02088 ((AllSettings*)this)->mpData->mpI18nHelper = new vcl::I18nHelper( aFactory, GetLocale() );
02089 }
02090 return *mpData->mpI18nHelper;
02091 }
02092
02093
02094
02095 const vcl::I18nHelper& AllSettings::GetUILocaleI18nHelper() const
02096 {
02097 if ( !mpData->mpUII18nHelper ) {
02098 ::com::sun::star::uno::Reference<com::sun::star::lang::XMultiServiceFactory> aFactory(vcl::unohelper::GetMultiServiceFactory());
02099 ((AllSettings*)this)->mpData->mpUII18nHelper = new vcl::I18nHelper( aFactory, GetUILocale() );
02100 }
02101 return *mpData->mpUII18nHelper;
02102 }
02103
02104
02105
02106
02107
02108
02109
02110
02111
02112
02113
02114
02115
02116
02117
02118
02119
02120
02121
02122
02123
02124
02125
02126
02127
02128
02129