1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_svtools.hxx" 26 27 #include <svtools/colorcfg.hxx> 28 #include <com/sun/star/uno/Any.hxx> 29 #include <com/sun/star/uno/Sequence.hxx> 30 #include <com/sun/star/lang/Locale.hpp> 31 #include <com/sun/star/beans/PropertyValue.hpp> 32 #include <tools/color.hxx> 33 #include <tools/debug.hxx> 34 #include <unotools/configitem.hxx> 35 #include <unotools/configpathes.hxx> 36 #include <com/sun/star/uno/Sequence.h> 37 #include <svl/poolitem.hxx> //Any2Bool 38 #include <svl/smplhint.hxx> 39 #include <vos/mutex.hxx> 40 41 #include <itemholder2.hxx> 42 43 /* #100822# ---- 44 #include <vcl/wrkwin.hxx> 45 ------------- */ 46 #include <vcl/svapp.hxx> 47 #include <vcl/event.hxx> 48 #include <rtl/instance.hxx> 49 50 //----------------------------------------------------------------------------- 51 using namespace utl; 52 using namespace rtl; 53 using namespace com::sun::star; 54 55 namespace svtools 56 { 57 58 #define C2U(cChar) OUString::createFromAscii(cChar) 59 static const sal_Char cColor[] = "/Color"; 60 static const sal_Char cColorSchemes[] = "ColorSchemes/"; 61 sal_Int32 nColorRefCount_Impl = 0; 62 namespace 63 { 64 struct ColorMutex_Impl 65 : public rtl::Static< ::osl::Mutex, ColorMutex_Impl > {}; 66 } 67 68 ColorConfig_Impl* ColorConfig::m_pImpl = NULL; 69 70 /* -----------------------------16.01.01 15:36-------------------------------- 71 ---------------------------------------------------------------------------*/ 72 class ColorConfig_Impl : public utl::ConfigItem 73 { 74 ColorConfigValue m_aConfigValues[ColorConfigEntryCount]; 75 sal_Bool m_bEditMode; 76 rtl::OUString m_sIsVisible; 77 rtl::OUString m_sLoadedScheme; 78 79 uno::Sequence< ::rtl::OUString> GetPropertyNames(const rtl::OUString& rScheme); 80 public: 81 ColorConfig_Impl(sal_Bool bEditMode = sal_False); 82 virtual ~ColorConfig_Impl(); 83 84 void Load(const rtl::OUString& rScheme); 85 void CommitCurrentSchemeName(); 86 //changes the name of the current scheme but doesn't load it! 87 void SetCurrentSchemeName(const rtl::OUString& rSchemeName) {m_sLoadedScheme = rSchemeName;} 88 virtual void Commit(); 89 virtual void Notify( const uno::Sequence<rtl::OUString>& aPropertyNames); 90 91 const ColorConfigValue& GetColorConfigValue(ColorConfigEntry eValue) 92 {return m_aConfigValues[eValue];} 93 void SetColorConfigValue(ColorConfigEntry eValue, 94 const ColorConfigValue& rValue ); 95 96 const rtl::OUString& GetLoadedScheme() const {return m_sLoadedScheme;} 97 98 uno::Sequence< ::rtl::OUString> GetSchemeNames(); 99 100 sal_Bool AddScheme(const rtl::OUString& rNode); 101 sal_Bool RemoveScheme(const rtl::OUString& rNode); 102 void SetModified(){ConfigItem::SetModified();} 103 void ClearModified(){ConfigItem::ClearModified();} 104 void SettingsChanged(); 105 106 // #100822# 107 DECL_LINK( DataChangedEventListener, VclWindowEvent* ); 108 109 void ImplUpdateApplicationSettings(); 110 }; 111 112 /* -----------------------------16.01.01 15:36-------------------------------- 113 114 ---------------------------------------------------------------------------*/ 115 uno::Sequence< OUString> ColorConfig_Impl::GetPropertyNames(const rtl::OUString& rScheme) 116 { 117 uno::Sequence<OUString> aNames(2 * ColorConfigEntryCount); 118 OUString* pNames = aNames.getArray(); 119 struct ColorConfigEntryData_Impl 120 { 121 const sal_Char* cName; 122 sal_Int32 nLength; 123 rtl_TextEncoding eEncoding; 124 sal_Bool bCanBeVisible; 125 }; 126 static const ColorConfigEntryData_Impl cNames[] = 127 { 128 { RTL_CONSTASCII_USTRINGPARAM("/DocColor") ,sal_False }, 129 { RTL_CONSTASCII_USTRINGPARAM("/DocBoundaries") ,sal_True }, 130 { RTL_CONSTASCII_USTRINGPARAM("/AppBackground") ,sal_False }, 131 { RTL_CONSTASCII_USTRINGPARAM("/ObjectBoundaries"),sal_True }, 132 { RTL_CONSTASCII_USTRINGPARAM("/TableBoundaries") ,sal_True }, 133 { RTL_CONSTASCII_USTRINGPARAM("/FontColor") ,sal_False }, 134 { RTL_CONSTASCII_USTRINGPARAM("/Links") ,sal_True }, 135 { RTL_CONSTASCII_USTRINGPARAM("/LinksVisited") ,sal_True }, 136 { RTL_CONSTASCII_USTRINGPARAM("/Anchor") ,sal_False }, 137 { RTL_CONSTASCII_USTRINGPARAM("/Spell") ,sal_False }, 138 { RTL_CONSTASCII_USTRINGPARAM("/SmartTags") ,sal_False }, 139 { RTL_CONSTASCII_USTRINGPARAM("/WriterTextGrid") ,sal_False }, 140 { RTL_CONSTASCII_USTRINGPARAM("/WriterFieldShadings"),sal_True }, 141 { RTL_CONSTASCII_USTRINGPARAM("/WriterIdxShadings") ,sal_True }, 142 { RTL_CONSTASCII_USTRINGPARAM("/WriterDirectCursor") ,sal_True }, 143 { RTL_CONSTASCII_USTRINGPARAM("/WriterScriptIndicator") ,sal_False }, 144 { RTL_CONSTASCII_USTRINGPARAM("/WriterSectionBoundaries") ,sal_True }, 145 { RTL_CONSTASCII_USTRINGPARAM("/WriterPageBreaks") ,sal_False }, 146 { RTL_CONSTASCII_USTRINGPARAM("/HTMLSGML") ,sal_False }, 147 { RTL_CONSTASCII_USTRINGPARAM("/HTMLComment") ,sal_False }, 148 { RTL_CONSTASCII_USTRINGPARAM("/HTMLKeyword") ,sal_False }, 149 { RTL_CONSTASCII_USTRINGPARAM("/HTMLUnknown") ,sal_False }, 150 { RTL_CONSTASCII_USTRINGPARAM("/CalcGrid") ,sal_False }, 151 { RTL_CONSTASCII_USTRINGPARAM("/CalcPageBreak"), sal_False }, 152 { RTL_CONSTASCII_USTRINGPARAM("/CalcPageBreakManual"), sal_False }, 153 { RTL_CONSTASCII_USTRINGPARAM("/CalcPageBreakAutomatic"), sal_False }, 154 { RTL_CONSTASCII_USTRINGPARAM("/CalcDetective") ,sal_False }, 155 { RTL_CONSTASCII_USTRINGPARAM("/CalcDetectiveError") ,sal_False }, 156 { RTL_CONSTASCII_USTRINGPARAM("/CalcReference") ,sal_False }, 157 { RTL_CONSTASCII_USTRINGPARAM("/CalcNotesBackground") ,sal_False }, 158 { RTL_CONSTASCII_USTRINGPARAM("/DrawGrid") ,sal_True }, 159 { RTL_CONSTASCII_USTRINGPARAM("/DrawDrawing") ,sal_False }, 160 { RTL_CONSTASCII_USTRINGPARAM("/DrawFill") ,sal_False }, 161 { RTL_CONSTASCII_USTRINGPARAM("/BASICIdentifier"), sal_False }, 162 { RTL_CONSTASCII_USTRINGPARAM("/BASICComment") , sal_False }, 163 { RTL_CONSTASCII_USTRINGPARAM("/BASICNumber") , sal_False }, 164 { RTL_CONSTASCII_USTRINGPARAM("/BASICString") , sal_False }, 165 { RTL_CONSTASCII_USTRINGPARAM("/BASICOperator") , sal_False }, 166 { RTL_CONSTASCII_USTRINGPARAM("/BASICKeyword") , sal_False }, 167 { RTL_CONSTASCII_USTRINGPARAM("/BASICError"), sal_False }, 168 { RTL_CONSTASCII_USTRINGPARAM("/SQLIdentifier"), sal_False }, 169 { RTL_CONSTASCII_USTRINGPARAM("/SQLNumber"), sal_False }, 170 { RTL_CONSTASCII_USTRINGPARAM("/SQLString"), sal_False }, 171 { RTL_CONSTASCII_USTRINGPARAM("/SQLOperator"), sal_False }, 172 { RTL_CONSTASCII_USTRINGPARAM("/SQLKeyword"), sal_False }, 173 { RTL_CONSTASCII_USTRINGPARAM("/SQLParameter"), sal_False }, 174 { RTL_CONSTASCII_USTRINGPARAM("/SQLComment"), sal_False } 175 }; 176 int nIndex = 0; 177 OUString sColor = C2U(cColor); 178 OUString sBase(C2U(cColorSchemes)); 179 sBase += utl::wrapConfigurationElementName(rScheme); 180 const int nCount = ColorConfigEntryCount; 181 for(sal_Int32 i = 0; i < 4 * nCount; i+= 4) 182 { 183 rtl::OUString sBaseName(sBase); 184 sal_Int32 nPos = i / 4; 185 sBaseName += OUString(cNames[nPos].cName, cNames[nPos].nLength, cNames[nPos].eEncoding); 186 pNames[nIndex] += sBaseName; 187 pNames[nIndex++] += sColor; 188 if(cNames[nPos].bCanBeVisible) 189 { 190 pNames[nIndex] += sBaseName; 191 pNames[nIndex++] += m_sIsVisible; 192 } 193 } 194 aNames.realloc(nIndex); 195 return aNames; 196 } 197 /* -----------------------------22.03.2002 14:37------------------------------ 198 199 ---------------------------------------------------------------------------*/ 200 ColorConfig_Impl::ColorConfig_Impl(sal_Bool bEditMode) : 201 ConfigItem(C2U("Office.UI/ColorScheme")), 202 m_bEditMode(bEditMode), 203 m_sIsVisible(C2U("/IsVisible")) 204 { 205 if(!m_bEditMode) 206 { 207 //try to register on the root node - if possible 208 uno::Sequence < ::rtl::OUString > aNames(1); 209 EnableNotification( aNames ); 210 } 211 Load(::rtl::OUString()); 212 213 ImplUpdateApplicationSettings(); 214 215 // #100822# 216 ::Application::AddEventListener( LINK(this, ColorConfig_Impl, DataChangedEventListener) ); 217 218 } 219 /* -----------------------------25.03.2002 12:28------------------------------ 220 221 ---------------------------------------------------------------------------*/ 222 ColorConfig_Impl::~ColorConfig_Impl() 223 { 224 // #100822# 225 ::Application::RemoveEventListener( LINK(this, ColorConfig_Impl, DataChangedEventListener) ); 226 } 227 /* -----------------------------22.03.2002 14:38------------------------------ 228 229 ---------------------------------------------------------------------------*/ 230 void ColorConfig_Impl::Load(const rtl::OUString& rScheme) 231 { 232 rtl::OUString sScheme(rScheme); 233 if(!sScheme.getLength()) 234 { 235 //detect current scheme name 236 uno::Sequence < ::rtl::OUString > aCurrent(1); 237 aCurrent.getArray()[0] = C2U("CurrentColorScheme"); 238 uno::Sequence< uno::Any > aCurrentVal = GetProperties( aCurrent ); 239 aCurrentVal.getConstArray()[0] >>= sScheme; 240 } 241 m_sLoadedScheme = sScheme; 242 // 243 uno::Sequence < ::rtl::OUString > aColorNames = GetPropertyNames(sScheme); 244 uno::Sequence< uno::Any > aColors = GetProperties( aColorNames ); 245 const uno::Any* pColors = aColors.getConstArray(); 246 const ::rtl::OUString* pColorNames = aColorNames.getConstArray(); 247 sal_Int32 nIndex = 0; 248 for(int i = 0; i < 2 * ColorConfigEntryCount && aColors.getLength() > nIndex; i+= 2) 249 { 250 if(pColors[nIndex].hasValue()) 251 pColors[nIndex] >>= m_aConfigValues[i / 2].nColor; 252 else 253 m_aConfigValues[i/2].nColor = COL_AUTO; 254 nIndex++; 255 if(nIndex >= aColors.getLength()) 256 break; 257 //test for visibility property 258 if(pColorNames[nIndex].match(m_sIsVisible, pColorNames[nIndex].getLength() - m_sIsVisible.getLength())) 259 m_aConfigValues[i / 2].bIsVisible = Any2Bool(pColors[nIndex++]); 260 } 261 } 262 /* -----------------------------22.03.2002 14:38------------------------------ 263 264 ---------------------------------------------------------------------------*/ 265 void ColorConfig_Impl::Notify( const uno::Sequence<OUString>& ) 266 { 267 //loading via notification always uses the default setting 268 Load(::rtl::OUString()); 269 NotifyListeners(0); 270 } 271 /* -----------------------------22.03.2002 14:38------------------------------ 272 273 ---------------------------------------------------------------------------*/ 274 void ColorConfig_Impl::Commit() 275 { 276 uno::Sequence < ::rtl::OUString > aColorNames = GetPropertyNames(m_sLoadedScheme); 277 uno::Sequence < beans::PropertyValue > aPropValues(aColorNames.getLength()); 278 beans::PropertyValue* pPropValues = aPropValues.getArray(); 279 const ::rtl::OUString* pColorNames = aColorNames.getConstArray(); 280 sal_Int32 nIndex = 0; 281 const uno::Type& rBoolType = ::getBooleanCppuType(); 282 for(int i = 0; i < 2 * ColorConfigEntryCount && aColorNames.getLength() > nIndex; i+= 2) 283 { 284 pPropValues[nIndex].Name = pColorNames[nIndex]; 285 //save automatic colors as void value 286 if(COL_AUTO != sal::static_int_cast<ColorData>(m_aConfigValues[i/2].nColor)) 287 pPropValues[nIndex].Value <<= m_aConfigValues[i/2].nColor; 288 289 nIndex++; 290 if(nIndex >= aColorNames.getLength()) 291 break; 292 //test for visibility property 293 if(pColorNames[nIndex].match(m_sIsVisible, pColorNames[nIndex].getLength() - m_sIsVisible.getLength())) 294 { 295 pPropValues[nIndex].Name = pColorNames[nIndex]; 296 pPropValues[nIndex].Value.setValue(&m_aConfigValues[i/2].bIsVisible, rBoolType); 297 nIndex++; 298 } 299 } 300 rtl::OUString sNode(C2U("ColorSchemes")); 301 SetSetProperties(sNode, aPropValues); 302 303 CommitCurrentSchemeName(); 304 } 305 /* -----------------11.12.2002 10:42----------------- 306 * 307 * --------------------------------------------------*/ 308 void ColorConfig_Impl::CommitCurrentSchemeName() 309 { 310 //save current scheme name 311 uno::Sequence < ::rtl::OUString > aCurrent(1); 312 aCurrent.getArray()[0] = C2U("CurrentColorScheme"); 313 uno::Sequence< uno::Any > aCurrentVal(1); 314 aCurrentVal.getArray()[0] <<= m_sLoadedScheme; 315 PutProperties(aCurrent, aCurrentVal); 316 } 317 /* -----------------------------25.03.2002 12:19------------------------------ 318 319 ---------------------------------------------------------------------------*/ 320 void ColorConfig_Impl::SetColorConfigValue(ColorConfigEntry eValue, const ColorConfigValue& rValue ) 321 { 322 if(rValue != m_aConfigValues[eValue]) 323 { 324 m_aConfigValues[eValue] = rValue; 325 SetModified(); 326 } 327 } 328 /* -----------------------------25.03.2002 15:22------------------------------ 329 330 ---------------------------------------------------------------------------*/ 331 uno::Sequence< ::rtl::OUString> ColorConfig_Impl::GetSchemeNames() 332 { 333 return GetNodeNames(C2U("ColorSchemes")); 334 } 335 /* -----------------------------09.04.2002 17:19------------------------------ 336 337 ---------------------------------------------------------------------------*/ 338 sal_Bool ColorConfig_Impl::AddScheme(const rtl::OUString& rScheme) 339 { 340 if(ConfigItem::AddNode(C2U("ColorSchemes"), rScheme)) 341 { 342 m_sLoadedScheme = rScheme; 343 Commit(); 344 return sal_True; 345 } 346 return sal_False; 347 } 348 /* -----------------------------09.04.2002 17:19------------------------------ 349 350 ---------------------------------------------------------------------------*/ 351 sal_Bool ColorConfig_Impl::RemoveScheme(const rtl::OUString& rScheme) 352 { 353 uno::Sequence< rtl::OUString > aElements(1); 354 aElements.getArray()[0] = rScheme; 355 return ClearNodeElements(C2U("ColorSchemes"), aElements); 356 } 357 /* -----------------------------2002/06/20 13:03------------------------------ 358 359 ---------------------------------------------------------------------------*/ 360 void ColorConfig_Impl::SettingsChanged() 361 { 362 vos::OGuard aVclGuard( Application::GetSolarMutex() ); 363 364 ImplUpdateApplicationSettings(); 365 366 NotifyListeners(0); 367 } 368 /* -----------------------------2002/08/16 12:07 ----------------------------- 369 #100822# 370 --------------------------------------------------------------------------- */ 371 IMPL_LINK( ColorConfig_Impl, DataChangedEventListener, VclWindowEvent*, pEvent ) 372 { 373 if ( pEvent->GetId() == VCLEVENT_APPLICATION_DATACHANGED ) 374 { 375 DataChangedEvent* pData = (DataChangedEvent*)(pEvent->GetData()); 376 if ( (pData->GetType() == DATACHANGED_SETTINGS) && 377 (pData->GetFlags() & SETTINGS_STYLE) ) 378 { 379 SettingsChanged(); 380 return 1L; 381 } else 382 return 0L; 383 } else 384 return 0L; 385 } 386 387 // --------------------------------------------------------------------------- 388 389 /** updates the font color in the vcl window settings */ 390 void ColorConfig_Impl::ImplUpdateApplicationSettings() 391 { 392 Application* pApp = GetpApp(); 393 if( pApp ) 394 { 395 AllSettings aSettings = pApp->GetSettings(); 396 StyleSettings aStyleSettings( aSettings.GetStyleSettings() ); 397 398 ColorConfigValue aRet = GetColorConfigValue(svtools::FONTCOLOR); 399 if(COL_AUTO == sal::static_int_cast<ColorData>(aRet.nColor)) 400 aRet.nColor = ColorConfig::GetDefaultColor(svtools::FONTCOLOR).GetColor(); 401 402 Color aFontColor(aRet.nColor); 403 404 if( aStyleSettings.GetFontColor() != aFontColor ) 405 { 406 aStyleSettings.SetFontColor( aFontColor ); 407 408 aSettings.SetStyleSettings( aStyleSettings ); 409 pApp->SetSettings( aSettings ); 410 } 411 } 412 } 413 414 // --------------------------------------------------------------------------- 415 416 ColorConfig::ColorConfig() 417 { 418 ::osl::MutexGuard aGuard( ColorMutex_Impl::get() ); 419 if ( !m_pImpl ) 420 { 421 m_pImpl = new ColorConfig_Impl; 422 ItemHolder2::holdConfigItem(E_COLORCFG); 423 } 424 ++nColorRefCount_Impl; 425 m_pImpl->AddListener(this); 426 } 427 /* -----------------------------16.01.01 15:36-------------------------------- 428 429 ---------------------------------------------------------------------------*/ 430 ColorConfig::~ColorConfig() 431 { 432 ::osl::MutexGuard aGuard( ColorMutex_Impl::get() ); 433 m_pImpl->RemoveListener(this); 434 if(!--nColorRefCount_Impl) 435 { 436 delete m_pImpl; 437 m_pImpl = 0; 438 } 439 } 440 /* -----------------------------11.04.2002 11:49------------------------------ 441 442 ---------------------------------------------------------------------------*/ 443 Color ColorConfig::GetDefaultColor(ColorConfigEntry eEntry) 444 { 445 static const sal_Int32 aAutoColors[] = 446 { 447 0, // DOCCOLOR 448 0xc0c0c0, // DOCBOUNDARIES 449 0x808080, // APPBACKGROUND 450 0xc0c0c0, // OBJECTBOUNDARIES 451 0xc0c0c0, // TABLEBOUNDARIES 452 0, // FONTCOLOR 453 0xcc, // LINKS 454 0x80, // LINKSVISITED 455 0, // ANCHOR 456 0xff0000, // SPELL 457 COL_LIGHTMAGENTA,// SMARTTAGS 458 0xc0c0c0, // WRITERTEXTGRID 459 0xc0c0c0, // WRITERFIELDSHADIN 460 0xc0c0c0, // WRITERIDXSHADINGS 461 0, // WRITERDIRECTCURSOR 462 COL_GREEN, //WRITERSCRIPTINDICATOR 463 0xc0c0c0, //WRITERSECTIONBOUNDARIES 464 COL_BLUE, //WRITERPAGEBREAKS, 465 COL_LIGHTBLUE, // HTMLSGML 466 COL_LIGHTGREEN, // HTMLCOMMENT 467 COL_LIGHTRED, // HTMLKEYWORD 468 COL_GRAY, // HTMLUNKNOWN 469 COL_LIGHTGRAY, // CALCGRID 470 COL_BLUE, //CALCPAGEBREAK 471 0x2300dc, //CALCPAGEBREAKMANUAL 472 COL_GRAY, //CALCPAGEBREAKAUTOMATIC 473 COL_LIGHTBLUE, // CALCDETECTIVE 474 COL_LIGHTRED, // CALCDETECTIVEERROR 475 COL_LIGHTRED, // CALCREFERENCE 476 0xffffc0, // CALCNOTESBACKGROUND 477 0xc0c0c0, // DRAWGRID 478 0, // DRAWDRAWING 479 0xb8ff, // DRAWFILL 480 COL_GREEN, // BASICIDENTIFIER, 481 COL_GRAY,// BASICCOMMENT , 482 COL_LIGHTRED,// BASICNUMBER , 483 COL_LIGHTRED,// BASICSTRING , 484 COL_BLUE, // BASICOPERATOR , 485 COL_BLUE, // BASICKEYWORD , 486 COL_RED, //BASICERROR 487 0x009900, // SQLIDENTIFIER 488 0x000000, // SQLNUMBER 489 0xCE7B00, // SQLSTRING 490 0x000000, // SQLOPERATOR 491 0x0000E6, // SQLKEYWORD 492 0x259D9D, // SQLPARAMTER 493 0x969696,// SQLCOMMENT 494 }; 495 Color aRet; 496 switch(eEntry) 497 { 498 case DOCCOLOR : 499 aRet = Application::GetSettings().GetStyleSettings().GetWindowColor(); 500 break; 501 502 case APPBACKGROUND : 503 aRet = Application::GetSettings().GetStyleSettings().GetWorkspaceColor(); 504 break; 505 506 case SPELL : 507 case DRAWDRAWING : 508 case SMARTTAGS : 509 { 510 const StyleSettings& rStyleSettings = Application::GetSettings().GetStyleSettings(); 511 aRet = rStyleSettings.GetHighContrastMode() ? 512 rStyleSettings.GetDialogTextColor().GetColor() : aAutoColors[eEntry]; 513 } 514 break; 515 516 case DRAWFILL : 517 aRet = /*rStyleSettings.GetHighContrastMode() ? 518 rStyleSettings.OutlineMode??? : */ aAutoColors[eEntry]; 519 break; 520 521 case FONTCOLOR : 522 aRet = Application::GetSettings().GetStyleSettings().GetWindowTextColor(); 523 break; 524 525 case LINKS : 526 aRet = Application::GetSettings().GetStyleSettings().GetLinkColor(); 527 break; 528 529 case LINKSVISITED : 530 aRet = Application::GetSettings().GetStyleSettings().GetVisitedLinkColor(); 531 break; 532 533 default: 534 aRet = aAutoColors[eEntry]; 535 } 536 return aRet; 537 } 538 /* -----------------------------11.04.2002 11:49------------------------------ 539 540 ---------------------------------------------------------------------------*/ 541 ColorConfigValue ColorConfig::GetColorValue(ColorConfigEntry eEntry, sal_Bool bSmart)const 542 { 543 ColorConfigValue aRet = m_pImpl->GetColorConfigValue(eEntry); 544 if(bSmart) 545 { 546 if(COL_AUTO == sal::static_int_cast<ColorData>(aRet.nColor)) 547 aRet.nColor = ColorConfig::GetDefaultColor(eEntry).GetColor(); 548 //#103495# don't allow grey between 40% and 60% as application background 549 const sal_uInt8 nRed = COLORDATA_RED( aRet.nColor); 550 if(eEntry == APPBACKGROUND && 551 (nRed == COLORDATA_GREEN( aRet.nColor)) && 552 (nRed == COLORDATA_BLUE( aRet.nColor)) && 553 nRed > 102 && nRed < 153 ) 554 { 555 aRet.nColor = RGB_COLORDATA(153, 153, 153); 556 } 557 } 558 559 return aRet; 560 } 561 /* -----------------------------25.03.2002 12:01------------------------------ 562 563 ---------------------------------------------------------------------------*/ 564 EditableColorConfig::EditableColorConfig() : 565 m_pImpl(new ColorConfig_Impl), 566 m_bModified(sal_False) 567 { 568 m_pImpl->BlockBroadcasts(sal_True); 569 } 570 /*-- 25.03.2002 12:03:08--------------------------------------------------- 571 572 -----------------------------------------------------------------------*/ 573 EditableColorConfig::~EditableColorConfig() 574 { 575 m_pImpl->BlockBroadcasts(sal_False); 576 if(m_bModified) 577 m_pImpl->SetModified(); 578 if(m_pImpl->IsModified()) 579 m_pImpl->Commit(); 580 delete m_pImpl; 581 } 582 583 /*-- 25.03.2002 12:03:15--------------------------------------------------- 584 585 -----------------------------------------------------------------------*/ 586 uno::Sequence< ::rtl::OUString > EditableColorConfig::GetSchemeNames() const 587 { 588 return m_pImpl->GetSchemeNames(); 589 } 590 /*-- 25.03.2002 12:03:16--------------------------------------------------- 591 592 -----------------------------------------------------------------------*/ 593 void EditableColorConfig::DeleteScheme(const ::rtl::OUString& rScheme ) 594 { 595 m_pImpl->RemoveScheme(rScheme); 596 } 597 /*-- 25.03.2002 12:03:16--------------------------------------------------- 598 599 -----------------------------------------------------------------------*/ 600 void EditableColorConfig::AddScheme(const ::rtl::OUString& rScheme ) 601 { 602 m_pImpl->AddScheme(rScheme); 603 } 604 /*-- 25.03.2002 12:03:16--------------------------------------------------- 605 606 -----------------------------------------------------------------------*/ 607 sal_Bool EditableColorConfig::LoadScheme(const ::rtl::OUString& rScheme ) 608 { 609 if(m_bModified) 610 m_pImpl->SetModified(); 611 if(m_pImpl->IsModified()) 612 m_pImpl->Commit(); 613 m_bModified = sal_False; 614 m_pImpl->Load(rScheme); 615 //the name of the loaded scheme has to be committed separately 616 m_pImpl->CommitCurrentSchemeName(); 617 return sal_True; 618 } 619 /*-- 25.03.2002 12:03:16--------------------------------------------------- 620 621 -----------------------------------------------------------------------*/ 622 const ::rtl::OUString& EditableColorConfig::GetCurrentSchemeName()const 623 { 624 return m_pImpl->GetLoadedScheme(); 625 } 626 /* -----------------11.12.2002 10:56----------------- 627 * changes the name of the current scheme but doesn't load it! 628 * --------------------------------------------------*/ 629 void EditableColorConfig::SetCurrentSchemeName(const ::rtl::OUString& rScheme) 630 { 631 m_pImpl->SetCurrentSchemeName(rScheme); 632 m_pImpl->CommitCurrentSchemeName(); 633 } 634 /*-- 25.03.2002 12:03:17--------------------------------------------------- 635 636 -----------------------------------------------------------------------*/ 637 const ColorConfigValue& EditableColorConfig::GetColorValue( 638 ColorConfigEntry eEntry)const 639 { 640 return m_pImpl->GetColorConfigValue(eEntry); 641 } 642 /*-- 25.03.2002 12:03:17--------------------------------------------------- 643 644 -----------------------------------------------------------------------*/ 645 void EditableColorConfig::SetColorValue( 646 ColorConfigEntry eEntry, const ColorConfigValue& rValue) 647 { 648 m_pImpl->SetColorConfigValue(eEntry, rValue); 649 m_pImpl->ClearModified(); 650 m_bModified = sal_True; 651 } 652 /* -----------------------------10.04.2002 13:22------------------------------ 653 654 ---------------------------------------------------------------------------*/ 655 void EditableColorConfig::SetModified() 656 { 657 m_bModified = sal_True; 658 } 659 /* -----------------15.10.2002 14:51----------------- 660 * 661 * --------------------------------------------------*/ 662 void EditableColorConfig::Commit() 663 { 664 if(m_bModified) 665 m_pImpl->SetModified(); 666 if(m_pImpl->IsModified()) 667 m_pImpl->Commit(); 668 m_bModified = sal_False; 669 } 670 // ----------------------------------------------------------------------------- 671 void EditableColorConfig::DisableBroadcast() 672 { 673 m_pImpl->BlockBroadcasts(sal_True); 674 } 675 // ----------------------------------------------------------------------------- 676 void EditableColorConfig::EnableBroadcast() 677 { 678 m_pImpl->BlockBroadcasts(sal_False); 679 } 680 // ----------------------------------------------------------------------------- 681 682 }//namespace svtools 683