LCOV - code coverage report
Current view: top level - svtools/source/config - colorcfg.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 182 249 73.1 %
Date: 2015-06-13 12:38:46 Functions: 26 42 61.9 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : 
      21             : #include <svtools/colorcfg.hxx>
      22             : #include <com/sun/star/uno/Any.hxx>
      23             : #include <com/sun/star/uno/Sequence.hxx>
      24             : #include <com/sun/star/lang/Locale.hpp>
      25             : #include <com/sun/star/beans/PropertyValue.hpp>
      26             : #include <comphelper/processfactory.hxx>
      27             : #include <unotools/configitem.hxx>
      28             : #include <unotools/confignode.hxx>
      29             : #include <unotools/configpaths.hxx>
      30             : #include <com/sun/star/uno/Sequence.h>
      31             : #include <svl/poolitem.hxx>
      32             : #include <svl/smplhint.hxx>
      33             : #include <osl/mutex.hxx>
      34             : 
      35             : #include "itemholder2.hxx"
      36             : 
      37             :  /* #100822# ----
      38             : #include <vcl/wrkwin.hxx>
      39             :  ------------- */
      40             : #include <vcl/svapp.hxx>
      41             : #include <vcl/event.hxx>
      42             : #include <vcl/settings.hxx>
      43             : #include <rtl/instance.hxx>
      44             : 
      45             : 
      46             : using namespace utl;
      47             : using namespace com::sun::star;
      48             : 
      49             : 
      50             : namespace svtools
      51             : {
      52             : 
      53             : static const sal_Char cColor[] = "/Color";
      54             : static const sal_Char cColorSchemes[] = "ColorSchemes/";
      55             : sal_Int32            nColorRefCount_Impl = 0;
      56             : namespace
      57             : {
      58             :     struct ColorMutex_Impl
      59             :         : public rtl::Static< ::osl::Mutex, ColorMutex_Impl > {};
      60             : }
      61             : 
      62             : ColorConfig_Impl*    ColorConfig::m_pImpl = NULL;
      63             : 
      64             : class ColorConfig_Impl : public utl::ConfigItem
      65             : {
      66             :     ColorConfigValue m_aConfigValues[ColorConfigEntryCount];
      67             :     bool             m_bEditMode;
      68             :     OUString         m_sIsVisible;
      69             :     OUString         m_sLoadedScheme;
      70             :     bool             m_bAutoDetectSystemHC;
      71             : 
      72             :     uno::Sequence< OUString> GetPropertyNames(const OUString& rScheme);
      73             : 
      74             :     virtual void                    ImplCommit() SAL_OVERRIDE;
      75             : 
      76             : public:
      77             :     explicit ColorConfig_Impl(bool bEditMode = false);
      78             :     virtual ~ColorConfig_Impl();
      79             : 
      80             :     void                            Load(const OUString& rScheme);
      81             :     void                            CommitCurrentSchemeName();
      82             :     //changes the name of the current scheme but doesn't load it!
      83           0 :     void                            SetCurrentSchemeName(const OUString& rSchemeName) {m_sLoadedScheme = rSchemeName;}
      84             :     virtual void                    Notify( const uno::Sequence<OUString>& aPropertyNames) SAL_OVERRIDE;
      85             : 
      86      133383 :     const ColorConfigValue&         GetColorConfigValue(ColorConfigEntry eValue)
      87      133383 :                                                             {return m_aConfigValues[eValue];}
      88             :     void                            SetColorConfigValue(ColorConfigEntry eValue,
      89             :                                                             const ColorConfigValue& rValue );
      90             : 
      91           0 :     const OUString&            GetLoadedScheme() const {return m_sLoadedScheme;}
      92             : 
      93             :     uno::Sequence< OUString> GetSchemeNames();
      94             : 
      95             :     bool                            AddScheme(const OUString& rNode);
      96             :     bool                            RemoveScheme(const OUString& rNode);
      97          24 :     void                            SetModified(){ConfigItem::SetModified();}
      98          12 :     void                            ClearModified(){ConfigItem::ClearModified();}
      99             :     void                            SettingsChanged();
     100      130595 :     bool GetAutoDetectSystemHC() {return m_bAutoDetectSystemHC;}
     101             : 
     102             :     // #100822#
     103             :     DECL_LINK( DataChangedEventListener, VclWindowEvent* );
     104             : 
     105             :     void ImplUpdateApplicationSettings();
     106             : };
     107             : 
     108         170 : uno::Sequence< OUString> ColorConfig_Impl::GetPropertyNames(const OUString& rScheme)
     109             : {
     110         170 :     uno::Sequence<OUString> aNames(2 * ColorConfigEntryCount);
     111         170 :     OUString* pNames = aNames.getArray();
     112             :     struct ColorConfigEntryData_Impl
     113             :     {
     114             :         const sal_Char* cName;
     115             :         sal_Int32       nLength;
     116             :         rtl_TextEncoding eEncoding;
     117             :         bool            bCanBeVisible;
     118             :     };
     119             :     static const ColorConfigEntryData_Impl cNames[] =
     120             :     {
     121             :         { RTL_CONSTASCII_USTRINGPARAM("/DocColor")        ,false },
     122             :         { RTL_CONSTASCII_USTRINGPARAM("/DocBoundaries")   ,true },
     123             :         { RTL_CONSTASCII_USTRINGPARAM("/AppBackground")   ,false },
     124             :         { RTL_CONSTASCII_USTRINGPARAM("/ObjectBoundaries"),true },
     125             :         { RTL_CONSTASCII_USTRINGPARAM("/TableBoundaries") ,true },
     126             :         { RTL_CONSTASCII_USTRINGPARAM("/FontColor")     ,false },
     127             :         { RTL_CONSTASCII_USTRINGPARAM("/Links")           ,true },
     128             :         { RTL_CONSTASCII_USTRINGPARAM("/LinksVisited")    ,true },
     129             :         { RTL_CONSTASCII_USTRINGPARAM("/Spell")     ,false },
     130             :         { RTL_CONSTASCII_USTRINGPARAM("/SmartTags")     ,false },
     131             :         { RTL_CONSTASCII_USTRINGPARAM("/Shadow")        , true },
     132             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterTextGrid")  ,false },
     133             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterFieldShadings"),true },
     134             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterIdxShadings")     ,true },
     135             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterDirectCursor")    ,true },
     136             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterScriptIndicator")    ,false },
     137             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterSectionBoundaries")    ,true },
     138             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterHeaderFooterMark")    ,false },
     139             :         { RTL_CONSTASCII_USTRINGPARAM("/WriterPageBreaks")    ,false },
     140             :         { RTL_CONSTASCII_USTRINGPARAM("/HTMLSGML")        ,false },
     141             :         { RTL_CONSTASCII_USTRINGPARAM("/HTMLComment")     ,false },
     142             :         { RTL_CONSTASCII_USTRINGPARAM("/HTMLKeyword")     ,false },
     143             :         { RTL_CONSTASCII_USTRINGPARAM("/HTMLUnknown")     ,false },
     144             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcGrid")        ,false },
     145             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcPageBreak"), false },
     146             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcPageBreakManual"), false },
     147             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcPageBreakAutomatic"), false },
     148             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcDetective")   ,false },
     149             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcDetectiveError")   ,false },
     150             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcReference")   ,false },
     151             :         { RTL_CONSTASCII_USTRINGPARAM("/CalcNotesBackground") ,false },
     152             :         { RTL_CONSTASCII_USTRINGPARAM("/DrawGrid")        ,true },
     153             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICIdentifier"),  false },
     154             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICComment")   ,  false },
     155             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICNumber")    ,  false },
     156             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICString")    ,  false },
     157             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICOperator")  ,  false },
     158             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICKeyword")   ,  false },
     159             :         { RTL_CONSTASCII_USTRINGPARAM("/BASICError"),  false },
     160             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLIdentifier"),  false },
     161             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLNumber"),  false },
     162             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLString"),  false },
     163             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLOperator"),  false },
     164             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLKeyword"),  false },
     165             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLParameter"),  false },
     166             :         { RTL_CONSTASCII_USTRINGPARAM("/SQLComment"),  false }
     167             :     };
     168         170 :     int nIndex = 0;
     169         340 :     OUString sColor = cColor;
     170         340 :     OUString sBase(cColorSchemes);
     171         170 :     sBase += utl::wrapConfigurationElementName(rScheme);
     172         170 :     const int nCount = ColorConfigEntryCount;
     173        7990 :     for(sal_Int32 i = 0; i < 4 * nCount; i+= 4)
     174             :     {
     175        7820 :         OUString sBaseName(sBase);
     176        7820 :         sal_Int32 nPos = i / 4;
     177        7820 :         sBaseName += OUString(cNames[nPos].cName, cNames[nPos].nLength, cNames[nPos].eEncoding);
     178        7820 :         pNames[nIndex] += sBaseName;
     179        7820 :         pNames[nIndex++] += sColor;
     180        7820 :         if(cNames[nPos].bCanBeVisible)
     181             :         {
     182        1870 :             pNames[nIndex] += sBaseName;
     183        1870 :             pNames[nIndex++] += m_sIsVisible;
     184             :         }
     185        7820 :     }
     186         170 :     aNames.realloc(nIndex);
     187         340 :     return aNames;
     188             : }
     189             : 
     190         134 : ColorConfig_Impl::ColorConfig_Impl(bool bEditMode) :
     191             :     ConfigItem("Office.UI/ColorScheme"),
     192             :     m_bEditMode(bEditMode),
     193             :     m_sIsVisible("/IsVisible"),
     194         134 :     m_bAutoDetectSystemHC(true)
     195             : {
     196         134 :     if(!m_bEditMode)
     197             :     {
     198             :         //try to register on the root node - if possible
     199         134 :         uno::Sequence < OUString > aNames(1);
     200         134 :         EnableNotification( aNames );
     201             :     }
     202         134 :     Load(OUString());
     203             : 
     204         134 :     ImplUpdateApplicationSettings();
     205             : 
     206             :     // #100822#
     207         134 :     ::Application::AddEventListener( LINK(this, ColorConfig_Impl, DataChangedEventListener) );
     208             : 
     209         134 : }
     210             : 
     211         204 : ColorConfig_Impl::~ColorConfig_Impl()
     212             : {
     213             :     // #100822#
     214          68 :     ::Application::RemoveEventListener( LINK(this, ColorConfig_Impl, DataChangedEventListener) );
     215         136 : }
     216             : 
     217         158 : void ColorConfig_Impl::Load(const OUString& rScheme)
     218             : {
     219         158 :     OUString sScheme(rScheme);
     220         158 :     if(sScheme.isEmpty())
     221             :     {
     222             :         //detect current scheme name
     223         158 :         uno::Sequence < OUString > aCurrent(1);
     224         158 :         aCurrent.getArray()[0] = "CurrentColorScheme";
     225         316 :         uno::Sequence< uno::Any > aCurrentVal = GetProperties( aCurrent );
     226         316 :         aCurrentVal.getConstArray()[0] >>= sScheme;
     227             :     }
     228         158 :     m_sLoadedScheme = sScheme;
     229             : 
     230         316 :     uno::Sequence < OUString > aColorNames = GetPropertyNames(sScheme);
     231         316 :     uno::Sequence< uno::Any > aColors = GetProperties( aColorNames );
     232         158 :     const uno::Any* pColors = aColors.getConstArray();
     233         158 :     const OUString* pColorNames = aColorNames.getConstArray();
     234         158 :     sal_Int32 nIndex = 0;
     235        7268 :     for(int i = 0; i < 2 * ColorConfigEntryCount && aColors.getLength() > nIndex; i+= 2)
     236             :     {
     237        7268 :         if(pColors[nIndex].hasValue())
     238           0 :             pColors[nIndex] >>= m_aConfigValues[i / 2].nColor;
     239             :         else
     240        7268 :             m_aConfigValues[i/2].nColor = COL_AUTO;
     241        7268 :         nIndex++;
     242        7268 :         if(nIndex >= aColors.getLength())
     243         158 :             break;
     244             :         //test for visibility property
     245        7110 :         if(pColorNames[nIndex].endsWith(m_sIsVisible))
     246        1738 :              m_aConfigValues[i / 2].bIsVisible = Any2Bool(pColors[nIndex++]);
     247             :     }
     248             :     // fdo#71511: check if we are running in a11y autodetect
     249             :     {
     250         158 :         utl::OConfigurationNode aNode = utl::OConfigurationTreeRoot::tryCreateWithComponentContext(comphelper::getProcessComponentContext(),OUString("org.openoffice.Office.Common/Accessibility") );
     251         158 :         if(aNode.isValid())
     252             :         {
     253         158 :             uno::Any aValue = aNode.getNodeValue(OUString("AutoDetectSystemHC"));
     254         158 :             aValue >>= m_bAutoDetectSystemHC;
     255         158 :         }
     256         158 :     }
     257         158 : }
     258             : 
     259          24 : void    ColorConfig_Impl::Notify( const uno::Sequence<OUString>& )
     260             : {
     261             :     //loading via notification always uses the default setting
     262          24 :     Load(OUString());
     263          24 :     NotifyListeners(0);
     264          24 : }
     265             : 
     266          12 : void ColorConfig_Impl::ImplCommit()
     267             : {
     268          12 :     uno::Sequence < OUString > aColorNames = GetPropertyNames(m_sLoadedScheme);
     269          24 :     uno::Sequence < beans::PropertyValue > aPropValues(aColorNames.getLength());
     270          12 :     beans::PropertyValue* pPropValues = aPropValues.getArray();
     271          12 :     const OUString* pColorNames = aColorNames.getConstArray();
     272          12 :     sal_Int32 nIndex = 0;
     273          12 :     const uno::Type& rBoolType = cppu::UnoType<bool>::get();
     274         552 :     for(int i = 0; i < 2 * ColorConfigEntryCount && aColorNames.getLength() > nIndex; i+= 2)
     275             :     {
     276         552 :         pPropValues[nIndex].Name = pColorNames[nIndex];
     277             :         //save automatic colors as void value
     278         552 :         if(COL_AUTO != sal::static_int_cast<ColorData>(m_aConfigValues[i/2].nColor))
     279           0 :             pPropValues[nIndex].Value <<= m_aConfigValues[i/2].nColor;
     280             : 
     281         552 :         nIndex++;
     282         552 :         if(nIndex >= aColorNames.getLength())
     283          12 :             break;
     284             :         //test for visibility property
     285         540 :         if(pColorNames[nIndex].endsWith(m_sIsVisible))
     286             :         {
     287         132 :              pPropValues[nIndex].Name = pColorNames[nIndex];
     288         132 :              pPropValues[nIndex].Value.setValue(&m_aConfigValues[i/2].bIsVisible, rBoolType);
     289         132 :              nIndex++;
     290             :         }
     291             :     }
     292          24 :     OUString sNode("ColorSchemes");
     293          12 :     SetSetProperties(sNode, aPropValues);
     294             : 
     295          24 :     CommitCurrentSchemeName();
     296          12 : }
     297             : 
     298          12 : void ColorConfig_Impl::CommitCurrentSchemeName()
     299             : {
     300             :     //save current scheme name
     301          12 :     uno::Sequence < OUString > aCurrent(1);
     302          12 :     aCurrent.getArray()[0] = "CurrentColorScheme";
     303          24 :     uno::Sequence< uno::Any > aCurrentVal(1);
     304          12 :     aCurrentVal.getArray()[0] <<= m_sLoadedScheme;
     305          24 :     PutProperties(aCurrent, aCurrentVal);
     306          12 : }
     307             : 
     308          12 : void ColorConfig_Impl::SetColorConfigValue(ColorConfigEntry eValue, const ColorConfigValue& rValue )
     309             : {
     310          12 :     if(rValue != m_aConfigValues[eValue])
     311             :     {
     312          12 :         m_aConfigValues[eValue] = rValue;
     313          12 :         SetModified();
     314             :     }
     315          12 : }
     316             : 
     317           0 : uno::Sequence< OUString> ColorConfig_Impl::GetSchemeNames()
     318             : {
     319           0 :     return GetNodeNames("ColorSchemes");
     320             : }
     321             : 
     322           0 : bool ColorConfig_Impl::AddScheme(const OUString& rScheme)
     323             : {
     324           0 :     if(ConfigItem::AddNode("ColorSchemes", rScheme))
     325             :     {
     326           0 :         m_sLoadedScheme = rScheme;
     327           0 :         Commit();
     328           0 :         return true;
     329             :     }
     330           0 :     return false;
     331             : }
     332             : 
     333           0 : bool ColorConfig_Impl::RemoveScheme(const OUString& rScheme)
     334             : {
     335           0 :     uno::Sequence< OUString > aElements(1);
     336           0 :     aElements.getArray()[0] = rScheme;
     337           0 :     return ClearNodeElements("ColorSchemes", aElements);
     338             : }
     339             : 
     340          69 : void ColorConfig_Impl::SettingsChanged()
     341             : {
     342          69 :     SolarMutexGuard aVclGuard;
     343             : 
     344          69 :     ImplUpdateApplicationSettings();
     345             : 
     346          69 :     NotifyListeners(0);
     347          69 : }
     348             : 
     349     6104482 : IMPL_LINK( ColorConfig_Impl, DataChangedEventListener, VclWindowEvent*, pEvent )
     350             : {
     351     3052241 :     if ( pEvent->GetId() == VCLEVENT_APPLICATION_DATACHANGED )
     352             :     {
     353          75 :         DataChangedEvent* pData = static_cast<DataChangedEvent*>(pEvent->GetData());
     354         300 :         if ( (pData->GetType() == DataChangedEventType::SETTINGS) &&
     355         300 :              (pData->GetFlags() & AllSettingsFlags::STYLE) )
     356             :         {
     357          69 :             SettingsChanged();
     358          69 :             return 1L;
     359             :         } else
     360           6 :             return 0L;
     361             :     } else
     362     3052166 :         return 0L;
     363             : }
     364             : 
     365             : 
     366             : 
     367             : /** updates the font color in the vcl window settings */
     368         203 : void ColorConfig_Impl::ImplUpdateApplicationSettings()
     369             : {
     370         203 :     Application* pApp = GetpApp();
     371         203 :     if( pApp )
     372             :     {
     373         203 :         AllSettings aSettings = Application::GetSettings();
     374         406 :         StyleSettings aStyleSettings( aSettings.GetStyleSettings() );
     375             : 
     376         203 :         ColorConfigValue aRet = GetColorConfigValue(svtools::FONTCOLOR);
     377         203 :         if(COL_AUTO == sal::static_int_cast<ColorData>(aRet.nColor))
     378         203 :             aRet.nColor = ColorConfig::GetDefaultColor(svtools::FONTCOLOR).GetColor();
     379             : 
     380         203 :         Color aFontColor(aRet.nColor);
     381             : 
     382         203 :         if( aStyleSettings.GetFontColor() != aFontColor )
     383             :         {
     384           0 :             aStyleSettings.SetFontColor( aFontColor );
     385             : 
     386           0 :             aSettings.SetStyleSettings( aStyleSettings );
     387           0 :             Application::SetSettings( aSettings );
     388         203 :         }
     389             :     }
     390         203 : }
     391             : 
     392             : 
     393             : 
     394       39232 : ColorConfig::ColorConfig()
     395             : {
     396       39232 :     ::osl::MutexGuard aGuard( ColorMutex_Impl::get() );
     397       39232 :     if ( !m_pImpl )
     398             :     {
     399         122 :         m_pImpl = new ColorConfig_Impl;
     400         122 :         svtools::ItemHolder2::holdConfigItem(E_COLORCFG);
     401             :     }
     402       39232 :     ++nColorRefCount_Impl;
     403       39232 :     m_pImpl->AddListener(this);
     404       39232 : }
     405             : 
     406       79085 : ColorConfig::~ColorConfig()
     407             : {
     408       39063 :     ::osl::MutexGuard aGuard( ColorMutex_Impl::get() );
     409       39063 :     m_pImpl->RemoveListener(this);
     410       39063 :     if(!--nColorRefCount_Impl)
     411             :     {
     412          56 :         delete m_pImpl;
     413          56 :         m_pImpl = 0;
     414       39063 :     }
     415       40022 : }
     416             : 
     417      130719 : Color ColorConfig::GetDefaultColor(ColorConfigEntry eEntry)
     418             : {
     419             :     static const sal_Int32 aAutoColors[] =
     420             :     {
     421             :         COL_WHITE, // DOCCOLOR
     422             :         0xc0c0c0, // DOCBOUNDARIES
     423             :         0xDFDFDE, // APPBACKGROUND
     424             :         COL_LIGHTGRAY, // OBJECTBOUNDARIES
     425             :         COL_LIGHTGRAY, // TABLEBOUNDARIES
     426             :         COL_BLACK, // FONTCOLOR
     427             :         COL_BLUE, // LINKS
     428             :         0x0000cc, // LINKSVISITED
     429             :         COL_LIGHTRED, // SPELL
     430             :         COL_LIGHTMAGENTA,// SMARTTAGS
     431             :         COL_GRAY, // SHADOWCOLOR
     432             :         COL_LIGHTGRAY, // WRITERTEXTGRID
     433             :         COL_LIGHTGRAY, // WRITERFIELDSHADIN
     434             :         COL_LIGHTGRAY, // WRITERIDXSHADINGS
     435             :         0, // WRITERDIRECTCURSOR
     436             :         COL_GREEN,  //WRITERSCRIPTINDICATOR
     437             :         COL_LIGHTGRAY, //WRITERSECTIONBOUNDARIES
     438             :         0x0369a3, //WRITERHEADERFOOTERMARK,
     439             :         COL_BLUE, //WRITERPAGEBREAKS,
     440             :         COL_LIGHTBLUE, // HTMLSGML
     441             :         COL_LIGHTGREEN, // HTMLCOMMENT
     442             :         COL_LIGHTRED, // HTMLKEYWORD
     443             :         COL_GRAY, // HTMLUNKNOWN
     444             :         COL_LIGHTGRAY, // CALCGRID
     445             :         COL_BLUE, //CALCPAGEBREAK
     446             :         0x2300dc, //CALCPAGEBREAKMANUAL
     447             :         COL_GRAY, //CALCPAGEBREAKAUTOMATIC
     448             :         COL_LIGHTBLUE, // CALCDETECTIVE
     449             :         COL_LIGHTRED, // CALCDETECTIVEERROR
     450             :         0xef0fff, // CALCREFERENCE
     451             :         0xffffc0, // CALCNOTESBACKGROUND
     452             :         COL_LIGHTGRAY, // DRAWGRID
     453             :         COL_GREEN, // BASICIDENTIFIER,
     454             :         COL_GRAY,// BASICCOMMENT   ,
     455             :         COL_LIGHTRED,// BASICNUMBER    ,
     456             :         COL_LIGHTRED,// BASICSTRING    ,
     457             :         COL_BLUE, // BASICOPERATOR  ,
     458             :         COL_BLUE, // BASICKEYWORD   ,
     459             :         COL_RED, //BASICERROR
     460             :         0x009900, // SQLIDENTIFIER
     461             :         0x000000, // SQLNUMBER
     462             :         0xCE7B00, // SQLSTRING
     463             :         0x000000, // SQLOPERATOR
     464             :         0x0000E6, // SQLKEYWORD
     465             :         0x259D9D, // SQLPARAMTER
     466             :         0x969696,// SQLCOMMENT
     467             :     };
     468      130719 :     Color aRet;
     469      130719 :     switch(eEntry)
     470             :     {
     471             :         case APPBACKGROUND :
     472       20933 :             aRet = Application::GetSettings().GetStyleSettings().GetWorkspaceColor();
     473       20933 :             break;
     474             : 
     475             :         case LINKS :
     476         155 :             aRet = Application::GetSettings().GetStyleSettings().GetLinkColor();
     477         155 :             break;
     478             : 
     479             :         case LINKSVISITED :
     480         112 :             aRet = Application::GetSettings().GetStyleSettings().GetVisitedLinkColor();
     481         112 :             break;
     482             : 
     483             :         default:
     484      109519 :             aRet = aAutoColors[eEntry];
     485             :     }
     486             :     // fdo#71511: if in autodetected a11y HC mode, do pull background color from theme
     487      130719 :     if(m_pImpl &&  m_pImpl->GetAutoDetectSystemHC())
     488             :     {
     489           0 :         switch(eEntry)
     490             :         {
     491             :             case DOCCOLOR :
     492           0 :                 aRet = Application::GetSettings().GetStyleSettings().GetWindowColor();
     493           0 :                 break;
     494             :             case FONTCOLOR :
     495           0 :                 aRet = Application::GetSettings().GetStyleSettings().GetWindowTextColor();
     496           0 :                 break;
     497             :             default:
     498           0 :                 break;
     499             :         }
     500             :     }
     501      130719 :     return aRet;
     502             : }
     503             : 
     504      133168 : ColorConfigValue ColorConfig::GetColorValue(ColorConfigEntry eEntry, bool bSmart) const
     505             : {
     506      133168 :     ColorConfigValue aRet = m_pImpl->GetColorConfigValue(eEntry);
     507      133168 :     if(bSmart)
     508             :     {
     509      130204 :         if(COL_AUTO == sal::static_int_cast<ColorData>(aRet.nColor))
     510      130204 :             aRet.nColor = ColorConfig::GetDefaultColor(eEntry).GetColor();
     511             :     }
     512             : 
     513      133168 :     return aRet;
     514             : }
     515             : 
     516           0 : void ColorConfig::Reload()
     517             : {
     518           0 :     m_pImpl->Load(OUString());
     519           0 : }
     520             : 
     521          12 : EditableColorConfig::EditableColorConfig() :
     522          12 :     m_pImpl(new ColorConfig_Impl),
     523          24 :     m_bModified(false)
     524             : {
     525          12 :     m_pImpl->BlockBroadcasts(true);
     526          12 : }
     527             : 
     528          12 : EditableColorConfig::~EditableColorConfig()
     529             : {
     530          12 :     m_pImpl->BlockBroadcasts(false);
     531          12 :     if(m_bModified)
     532          12 :         m_pImpl->SetModified();
     533          12 :     if(m_pImpl->IsModified())
     534          12 :         m_pImpl->Commit();
     535          12 :     delete m_pImpl;
     536          12 : }
     537             : 
     538           0 : uno::Sequence< OUString >  EditableColorConfig::GetSchemeNames() const
     539             : {
     540           0 :     return m_pImpl->GetSchemeNames();
     541             : }
     542             : 
     543           0 : void EditableColorConfig::DeleteScheme(const OUString& rScheme )
     544             : {
     545           0 :     m_pImpl->RemoveScheme(rScheme);
     546           0 : }
     547             : 
     548           0 : void EditableColorConfig::AddScheme(const OUString& rScheme )
     549             : {
     550           0 :     m_pImpl->AddScheme(rScheme);
     551           0 : }
     552             : 
     553           0 : bool EditableColorConfig::LoadScheme(const OUString& rScheme )
     554             : {
     555           0 :     if(m_bModified)
     556           0 :         m_pImpl->SetModified();
     557           0 :     if(m_pImpl->IsModified())
     558           0 :         m_pImpl->Commit();
     559           0 :     m_bModified = false;
     560           0 :     m_pImpl->Load(rScheme);
     561             :     //the name of the loaded scheme has to be committed separately
     562           0 :     m_pImpl->CommitCurrentSchemeName();
     563           0 :     return true;
     564             : }
     565             : 
     566           0 : const OUString& EditableColorConfig::GetCurrentSchemeName()const
     567             : {
     568           0 :     return m_pImpl->GetLoadedScheme();
     569             : }
     570             : 
     571             : // Changes the name of the current scheme but doesn't load it!
     572           0 : void EditableColorConfig::SetCurrentSchemeName(const OUString& rScheme)
     573             : {
     574           0 :     m_pImpl->SetCurrentSchemeName(rScheme);
     575           0 :     m_pImpl->CommitCurrentSchemeName();
     576           0 : }
     577             : 
     578          12 : const ColorConfigValue& EditableColorConfig::GetColorValue(
     579             :     ColorConfigEntry eEntry)const
     580             : {
     581          12 :     return m_pImpl->GetColorConfigValue(eEntry);
     582             : }
     583             : 
     584          12 : void EditableColorConfig::SetColorValue(
     585             :     ColorConfigEntry eEntry, const ColorConfigValue& rValue)
     586             : {
     587          12 :     m_pImpl->SetColorConfigValue(eEntry, rValue);
     588          12 :     m_pImpl->ClearModified();
     589          12 :     m_bModified = true;
     590          12 : }
     591             : 
     592           0 : void EditableColorConfig::SetModified()
     593             : {
     594           0 :     m_bModified = true;
     595           0 : }
     596             : 
     597           0 : void EditableColorConfig::Commit()
     598             : {
     599           0 :     if(m_bModified)
     600           0 :         m_pImpl->SetModified();
     601           0 :     if(m_pImpl->IsModified())
     602           0 :         m_pImpl->Commit();
     603           0 :     m_bModified = false;
     604           0 : }
     605             : 
     606           0 : void EditableColorConfig::DisableBroadcast()
     607             : {
     608           0 :     m_pImpl->BlockBroadcasts(true);
     609           0 : }
     610             : 
     611           0 : void EditableColorConfig::EnableBroadcast()
     612             : {
     613           0 :     m_pImpl->BlockBroadcasts(false);
     614           0 : }
     615             : 
     616             : 
     617             : }//namespace svtools
     618             : 
     619             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11