blob: 948340b5f956c165433d21a167a08f07a78cca97 [file] [log] [blame]
/**************************************************************
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*************************************************************/
// MARKER(update_precomp.py): autogen include statement, do not remove
#include "precompiled_svtools.hxx"
#include <svtools/extcolorcfg.hxx>
#include <com/sun/star/uno/Any.hxx>
#include <com/sun/star/uno/Sequence.hxx>
#include <com/sun/star/lang/Locale.hpp>
#include <com/sun/star/beans/PropertyValue.hpp>
#include <tools/color.hxx>
#include <tools/debug.hxx>
#include <unotools/configitem.hxx>
#include <unotools/configpathes.hxx>
#include <com/sun/star/uno/Sequence.h>
#include <svl/poolitem.hxx> //Any2Bool
#include <svl/smplhint.hxx>
#include <vos/mutex.hxx>
/* #100822# ----
#include <vcl/wrkwin.hxx>
------------- */
#include <vcl/svapp.hxx>
#include <vcl/event.hxx>
#include <rtl/instance.hxx>
#include <rtl/strbuf.hxx>
#include <comphelper/stl_types.hxx>
//-----------------------------------------------------------------------------
using namespace utl;
using namespace rtl;
using namespace com::sun::star;
namespace svtools
{
#define C2U(cChar) OUString::createFromAscii(cChar)
sal_Int32 nExtendedColorRefCount_Impl = 0;
namespace
{
struct ColorMutex_Impl
: public rtl::Static< ::osl::Mutex, ColorMutex_Impl > {};
}
ExtendedColorConfig_Impl* ExtendedColorConfig::m_pImpl = NULL;
/* -----------------------------16.01.01 15:36--------------------------------
---------------------------------------------------------------------------*/
class ExtendedColorConfig_Impl : public utl::ConfigItem, public SfxBroadcaster
{
DECLARE_STL_USTRINGACCESS_MAP( ::rtl::OUString, TDisplayNames);
DECLARE_STL_USTRINGACCESS_MAP(ExtendedColorConfigValue,TConfigValues);
typedef ::std::vector<TConfigValues::iterator> TMapPos;
typedef ::std::pair< TConfigValues, TMapPos > TComponentMapping;
DECLARE_STL_USTRINGACCESS_MAP(TComponentMapping,TComponents);
TComponents m_aConfigValues;
TDisplayNames m_aComponentDisplayNames;
::std::vector<TComponents::iterator> m_aConfigValuesPos;
sal_Bool m_bEditMode;
rtl::OUString m_sLoadedScheme;
sal_Bool m_bIsBroadcastEnabled;
static sal_Bool m_bLockBroadcast;
static sal_Bool m_bBroadcastWhenUnlocked;
uno::Sequence< ::rtl::OUString> GetPropertyNames(const rtl::OUString& rScheme);
void FillComponentColors(uno::Sequence < ::rtl::OUString >& _rComponents,const TDisplayNames& _rDisplayNames);
public:
ExtendedColorConfig_Impl(sal_Bool bEditMode = sal_False);
virtual ~ExtendedColorConfig_Impl();
void Load(const rtl::OUString& rScheme);
void CommitCurrentSchemeName();
//changes the name of the current scheme but doesn't load it!
void SetCurrentSchemeName(const rtl::OUString& rSchemeName) {m_sLoadedScheme = rSchemeName;}
sal_Bool ExistsScheme(const ::rtl::OUString& _sSchemeName);
virtual void Commit();
virtual void Notify( const uno::Sequence<rtl::OUString>& aPropertyNames);
sal_Int32 GetComponentCount() const;
::rtl::OUString GetComponentName(sal_uInt32 _nPos) const;
::rtl::OUString GetComponentDisplayName(const ::rtl::OUString& _sComponentName) const;
sal_Int32 GetComponentColorCount(const ::rtl::OUString& _sName) const;
ExtendedColorConfigValue GetComponentColorConfigValue(const ::rtl::OUString& _sName,sal_uInt32 _nPos) const;
ExtendedColorConfigValue GetColorConfigValue(const ::rtl::OUString& _sComponentName,const ::rtl::OUString& _sName)
{
TComponents::iterator aFind = m_aConfigValues.find(_sComponentName);
if ( aFind != m_aConfigValues.end() )
{
TConfigValues::iterator aFind2 = aFind->second.first.find(_sName);
if ( aFind2 != aFind->second.first.end() )
return aFind2->second;
}
#if OSL_DEBUG_LEVEL > 0
::rtl::OStringBuffer aMessage( "Could find the required config:\n" );
aMessage.append( "component: " );
aMessage.append( ::rtl::OUStringToOString( _sComponentName, RTL_TEXTENCODING_UTF8 ) );
aMessage.append( "\nname: " );
aMessage.append( ::rtl::OUStringToOString( _sName, RTL_TEXTENCODING_UTF8 ) );
OSL_ENSURE( 0, aMessage.makeStringAndClear().getStr() );
#endif
return ExtendedColorConfigValue();
}
void SetColorConfigValue(const ::rtl::OUString& _sName,
const ExtendedColorConfigValue& rValue );
const rtl::OUString& GetLoadedScheme() const {return m_sLoadedScheme;}
uno::Sequence< ::rtl::OUString> GetSchemeNames();
sal_Bool AddScheme(const rtl::OUString& rNode);
sal_Bool RemoveScheme(const rtl::OUString& rNode);
void SetModified(){ConfigItem::SetModified();}
void ClearModified(){ConfigItem::ClearModified();}
void SettingsChanged();
static void DisableBroadcast();
static void EnableBroadcast();
static sal_Bool IsEnableBroadcast();
static void LockBroadcast();
static void UnlockBroadcast();
// #100822#
DECL_LINK( DataChangedEventListener, VclWindowEvent* );
};
/* -----------------------------16.01.01 15:36--------------------------------
---------------------------------------------------------------------------*/
uno::Sequence< OUString> ExtendedColorConfig_Impl::GetPropertyNames(const rtl::OUString& rScheme)
{
uno::Sequence< OUString> aNames(GetNodeNames(rScheme));
::rtl::OUString* pIter = aNames.getArray();
::rtl::OUString* pEnd = pIter + aNames.getLength();
::rtl::OUString sSep(RTL_CONSTASCII_USTRINGPARAM("/"));
for(;pIter != pEnd;++pIter)
{
*pIter = rScheme + sSep + *pIter;
}
return aNames;
}
// -----------------------------------------------------------------------------
sal_Int32 ExtendedColorConfig_Impl::GetComponentCount() const
{
return m_aConfigValues.size();
}
// -----------------------------------------------------------------------------
sal_Int32 ExtendedColorConfig_Impl::GetComponentColorCount(const ::rtl::OUString& _sName) const
{
sal_Int32 nSize = 0;
TComponents::const_iterator aFind = m_aConfigValues.find(_sName);
if ( aFind != m_aConfigValues.end() )
{
nSize = aFind->second.first.size();
}
return nSize;
}
// -----------------------------------------------------------------------------
ExtendedColorConfigValue ExtendedColorConfig_Impl::GetComponentColorConfigValue(const ::rtl::OUString& _sName,sal_uInt32 _nPos) const
{
TComponents::const_iterator aFind = m_aConfigValues.find(_sName);
if ( aFind != m_aConfigValues.end() )
{
if ( _nPos < aFind->second.second.size() )
{
return aFind->second.second[_nPos]->second;
}
}
return ExtendedColorConfigValue();
}
// -----------------------------------------------------------------------------
::rtl::OUString ExtendedColorConfig_Impl::GetComponentDisplayName(const ::rtl::OUString& _sComponentName) const
{
::rtl::OUString sRet;
TDisplayNames::const_iterator aFind = m_aComponentDisplayNames.find(_sComponentName);
if ( aFind != m_aComponentDisplayNames.end() )
sRet = aFind->second;
return sRet;
}
// -----------------------------------------------------------------------------
::rtl::OUString ExtendedColorConfig_Impl::GetComponentName(sal_uInt32 _nPos) const
{
::rtl::OUString sRet;
if ( _nPos < m_aConfigValuesPos.size() )
sRet = m_aConfigValuesPos[_nPos]->first;
return sRet;
}
// -----------------------------------------------------------------------------
/* -----------------------------22.03.2002 14:37------------------------------
---------------------------------------------------------------------------*/
sal_Bool ExtendedColorConfig_Impl::m_bLockBroadcast = sal_False;
sal_Bool ExtendedColorConfig_Impl::m_bBroadcastWhenUnlocked = sal_False;
ExtendedColorConfig_Impl::ExtendedColorConfig_Impl(sal_Bool bEditMode) :
ConfigItem(C2U("Office.ExtendedColorScheme")),
m_bEditMode(bEditMode),
m_bIsBroadcastEnabled(sal_True)
{
if(!m_bEditMode)
{
//try to register on the root node - if possible
uno::Sequence < ::rtl::OUString > aNames(1);
EnableNotification( aNames );
}
Load(::rtl::OUString());
// #100822#
::Application::AddEventListener( LINK(this, ExtendedColorConfig_Impl, DataChangedEventListener) );
}
/* -----------------------------25.03.2002 12:28------------------------------
---------------------------------------------------------------------------*/
ExtendedColorConfig_Impl::~ExtendedColorConfig_Impl()
{
// #100822#
::Application::RemoveEventListener( LINK(this, ExtendedColorConfig_Impl, DataChangedEventListener) );
}
// -----------------------------------------------------------------------------
void ExtendedColorConfig_Impl::DisableBroadcast()
{
if ( ExtendedColorConfig::m_pImpl )
ExtendedColorConfig::m_pImpl->m_bIsBroadcastEnabled = sal_False;
}
// -----------------------------------------------------------------------------
void ExtendedColorConfig_Impl::EnableBroadcast()
{
if ( ExtendedColorConfig::m_pImpl )
ExtendedColorConfig::m_pImpl->m_bIsBroadcastEnabled = sal_True;
}
// -----------------------------------------------------------------------------
sal_Bool ExtendedColorConfig_Impl::IsEnableBroadcast()
{
return ExtendedColorConfig::m_pImpl ? ExtendedColorConfig::m_pImpl->m_bIsBroadcastEnabled : sal_False;
}
/* -----------------------------22.03.2002 14:38------------------------------
---------------------------------------------------------------------------*/
void lcl_addString(uno::Sequence < ::rtl::OUString >& _rSeq,const ::rtl::OUString& _sAdd)
{
::rtl::OUString* pIter = _rSeq.getArray();
::rtl::OUString* pEnd = pIter + _rSeq.getLength();
for(;pIter != pEnd;++pIter)
*pIter += _sAdd;
}
// -----------------------------------------------------------------------------
void ExtendedColorConfig_Impl::Load(const rtl::OUString& rScheme)
{
m_aComponentDisplayNames.clear();
m_aConfigValuesPos.clear();
m_aConfigValues.clear();
// fill display names
TDisplayNames aDisplayNameMap;
::rtl::OUString sEntryNames(RTL_CONSTASCII_USTRINGPARAM("EntryNames"));
uno::Sequence < ::rtl::OUString > aComponentNames = GetPropertyNames(sEntryNames);
::rtl::OUString sDisplayName(RTL_CONSTASCII_USTRINGPARAM("/DisplayName"));
::rtl::OUString* pIter = aComponentNames.getArray();
::rtl::OUString* pEnd = pIter + aComponentNames.getLength();
for(sal_Int32 i = 0;pIter != pEnd;++pIter,++i)
{
uno::Sequence < ::rtl::OUString > aComponentDisplayNames(1);
aComponentDisplayNames[0] = *pIter;
aComponentDisplayNames[0] += sDisplayName;
uno::Sequence< uno::Any > aComponentDisplayNamesValue = GetProperties( aComponentDisplayNames );
::rtl::OUString sComponentDisplayName;
if ( aComponentDisplayNamesValue.getLength() && (aComponentDisplayNamesValue[0] >>= sComponentDisplayName) )
{
sal_Int32 nIndex = 0;
m_aComponentDisplayNames.insert(TDisplayNames::value_type(pIter->getToken(1,'/',nIndex),sComponentDisplayName));
}
*pIter += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/Entries"));
uno::Sequence < ::rtl::OUString > aDisplayNames = GetPropertyNames(*pIter);
lcl_addString(aDisplayNames,sDisplayName);
uno::Sequence< uno::Any > aDisplayNamesValue = GetProperties( aDisplayNames );
const ::rtl::OUString* pDispIter = aDisplayNames.getConstArray();
const ::rtl::OUString* pDispEnd = pDispIter + aDisplayNames.getLength();
for(sal_Int32 j = 0;pDispIter != pDispEnd;++pDispIter,++j)
{
sal_Int32 nIndex = 0;
pDispIter->getToken(0,'/',nIndex);
::rtl::OUString sName = pDispIter->copy(nIndex);
sName = sName.copy(0,sName.lastIndexOf(sDisplayName));
::rtl::OUString sCurrentDisplayName;
aDisplayNamesValue[j] >>= sCurrentDisplayName;
aDisplayNameMap.insert(TDisplayNames::value_type(sName,sCurrentDisplayName));
}
}
// load color settings
rtl::OUString sScheme(rScheme);
if(!sScheme.getLength())
{
//detect current scheme name
uno::Sequence < ::rtl::OUString > aCurrent(1);
aCurrent.getArray()[0] = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("ExtendedColorScheme/CurrentColorScheme"));
uno::Sequence< uno::Any > aCurrentVal = GetProperties( aCurrent );
aCurrentVal.getConstArray()[0] >>= sScheme;
} // if(!sScheme.getLength())
m_sLoadedScheme = sScheme;
::rtl::OUString sBase(RTL_CONSTASCII_USTRINGPARAM("ExtendedColorScheme/ColorSchemes/"));
sBase += sScheme;
sal_Bool bFound = ExistsScheme(sScheme);
if ( bFound )
{
aComponentNames = GetPropertyNames(sBase);
FillComponentColors(aComponentNames,aDisplayNameMap);
} // if ( bFound )
if ( !m_sLoadedScheme.getLength() )
m_sLoadedScheme = ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("default"));
if ( !sScheme.equalsAscii("default") )
{
::rtl::OUString sDefault(RTL_CONSTASCII_USTRINGPARAM("default"));
if ( ExistsScheme(sDefault) )
{
::rtl::OUString sBaseDefault(RTL_CONSTASCII_USTRINGPARAM("ExtendedColorScheme/ColorSchemes/default"));
aComponentNames = GetPropertyNames(sBaseDefault);
FillComponentColors(aComponentNames,aDisplayNameMap);
}
} // if ( !sScheme.equalsAscii("default") )
if ( !bFound && sScheme.getLength() )
{
AddScheme(sScheme);
CommitCurrentSchemeName();
}
}
// -----------------------------------------------------------------------------
void ExtendedColorConfig_Impl::FillComponentColors(uno::Sequence < ::rtl::OUString >& _rComponents,const TDisplayNames& _rDisplayNames)
{
const ::rtl::OUString sColorEntries(RTL_CONSTASCII_USTRINGPARAM("/Entries"));
::rtl::OUString* pIter = _rComponents.getArray();
::rtl::OUString* pEnd = pIter + _rComponents.getLength();
for(;pIter != pEnd;++pIter)
{
::rtl::OUString sComponentName = pIter->copy(pIter->lastIndexOf('/')+1);
if ( m_aConfigValues.find(sComponentName) == m_aConfigValues.end() )
{
::rtl::OUString sEntry = *pIter;
sEntry += sColorEntries;
uno::Sequence < ::rtl::OUString > aColorNames = GetPropertyNames(sEntry);
uno::Sequence < ::rtl::OUString > aDefaultColorNames = aColorNames;
const ::rtl::OUString sColor(RTL_CONSTASCII_USTRINGPARAM("/Color"));
const ::rtl::OUString sDefaultColor(RTL_CONSTASCII_USTRINGPARAM("/DefaultColor"));
lcl_addString(aColorNames,sColor);
lcl_addString(aDefaultColorNames,sDefaultColor);
uno::Sequence< uno::Any > aColors = GetProperties( aColorNames );
const uno::Any* pColors = aColors.getConstArray();
uno::Sequence< uno::Any > aDefaultColors = GetProperties( aDefaultColorNames );
bool bDefaultColorFound = aDefaultColors.getLength() != 0;
const uno::Any* pDefaultColors = aDefaultColors.getConstArray();
::rtl::OUString* pColorIter = aColorNames.getArray();
::rtl::OUString* pColorEnd = pColorIter + aColorNames.getLength();
m_aConfigValuesPos.push_back(m_aConfigValues.insert(TComponents::value_type(sComponentName,TComponentMapping(TConfigValues(),TMapPos()))).first);
TConfigValues& aConfigValues = (*m_aConfigValuesPos.rbegin())->second.first;
TMapPos& aConfigValuesPos = (*m_aConfigValuesPos.rbegin())->second.second;
for(int i = 0; pColorIter != pColorEnd; ++pColorIter ,++i)
{
if ( aConfigValues.find(*pColorIter) == aConfigValues.end() )
{
sal_Int32 nIndex = 0;
pColorIter->getToken(2,'/',nIndex);
::rtl::OUString sName(pColorIter->copy(nIndex)),sDisplayName;
::rtl::OUString sTemp = sName.copy(0,sName.lastIndexOf(sColor));
TDisplayNames::const_iterator aFind = _rDisplayNames.find(sTemp);
nIndex = 0;
sName = sName.getToken(2,'/',nIndex);
OSL_ENSURE(aFind != _rDisplayNames.end(),"DisplayName is not in EntryNames config list!");
if ( aFind != _rDisplayNames.end() )
sDisplayName = aFind->second;
OSL_ENSURE(pColors[i].hasValue(),"Color config entry has NIL as color value set!");
OSL_ENSURE(pDefaultColors[i].hasValue(),"Color config entry has NIL as color value set!");
sal_Int32 nColor = 0,nDefaultColor = 0;
pColors[i] >>= nColor;
if ( bDefaultColorFound )
pDefaultColors[i] >>= nDefaultColor;
else
nDefaultColor = nColor;
ExtendedColorConfigValue aValue(sName,sDisplayName,nColor,nDefaultColor);
aConfigValuesPos.push_back(aConfigValues.insert(TConfigValues::value_type(sName,aValue)).first);
}
} // for(int i = 0; pColorIter != pColorEnd; ++pColorIter ,++i)
}
}
}
/* -----------------------------22.03.2002 14:38------------------------------
---------------------------------------------------------------------------*/
void ExtendedColorConfig_Impl::Notify( const uno::Sequence<OUString>& /*rPropertyNames*/)
{
//loading via notification always uses the default setting
Load(::rtl::OUString());
vos::OGuard aVclGuard( Application::GetSolarMutex() );
if(m_bLockBroadcast)
{
m_bBroadcastWhenUnlocked = sal_True;
}
else
Broadcast(SfxSimpleHint(SFX_HINT_COLORS_CHANGED));
}
/* -----------------------------22.03.2002 14:38------------------------------
---------------------------------------------------------------------------*/
void ExtendedColorConfig_Impl::Commit()
{
if ( !m_sLoadedScheme.getLength() )
return;
const ::rtl::OUString sColorEntries(RTL_CONSTASCII_USTRINGPARAM("Entries"));
const ::rtl::OUString sColor(RTL_CONSTASCII_USTRINGPARAM("/Color"));
const ::rtl::OUString sDefaultColor(RTL_CONSTASCII_USTRINGPARAM("/DefaultColor"));
::rtl::OUString sBase(RTL_CONSTASCII_USTRINGPARAM("ExtendedColorScheme/ColorSchemes/"));
const ::rtl::OUString s_sSep(RTL_CONSTASCII_USTRINGPARAM("/"));
sBase += m_sLoadedScheme;
TComponents::iterator aIter = m_aConfigValues.begin();
TComponents::iterator aEnd = m_aConfigValues.end();
for( ;aIter != aEnd;++aIter )
{
::rtl::OUString sEntry = aIter->first;
sEntry += sColorEntries;
if ( ConfigItem::AddNode(sBase, aIter->first) )
{
rtl::OUString sNode = sBase;
sNode += s_sSep;
sNode += aIter->first;
//ConfigItem::AddNode(sNode, sColorEntries);
sNode += s_sSep;
sNode += sColorEntries;
uno::Sequence < beans::PropertyValue > aPropValues(aIter->second.first.size());
beans::PropertyValue* pPropValues = aPropValues.getArray();
TConfigValues::iterator aConIter = aIter->second.first.begin();
TConfigValues::iterator aConEnd = aIter->second.first.end();
for (; aConIter != aConEnd; ++aConIter,++pPropValues)
{
pPropValues->Name = sNode + s_sSep + aConIter->first;
ConfigItem::AddNode(sNode, aConIter->first);
pPropValues->Name += sColor;
pPropValues->Value <<= aConIter->second.getColor();
// the default color will never be changed
}
::rtl::OUString s(RTL_CONSTASCII_USTRINGPARAM("ExtendedColorScheme/ColorSchemes"));
SetSetProperties(s, aPropValues);
}
}
CommitCurrentSchemeName();
}
/* -----------------11.12.2002 10:42-----------------
*
* --------------------------------------------------*/
void ExtendedColorConfig_Impl::CommitCurrentSchemeName()
{
//save current scheme name
uno::Sequence < ::rtl::OUString > aCurrent(1);
aCurrent.getArray()[0] = C2U("ExtendedColorScheme/CurrentColorScheme");
uno::Sequence< uno::Any > aCurrentVal(1);
aCurrentVal.getArray()[0] <<= m_sLoadedScheme;
PutProperties(aCurrent, aCurrentVal);
}
// -----------------------------------------------------------------------------
sal_Bool ExtendedColorConfig_Impl::ExistsScheme(const ::rtl::OUString& _sSchemeName)
{
::rtl::OUString sBase(RTL_CONSTASCII_USTRINGPARAM("ExtendedColorScheme/ColorSchemes"));
uno::Sequence < ::rtl::OUString > aComponentNames = GetPropertyNames(sBase);
sBase += ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM("/")) + _sSchemeName;
const ::rtl::OUString* pCompIter = aComponentNames.getConstArray();
const ::rtl::OUString* pCompEnd = pCompIter + aComponentNames.getLength();
for(;pCompIter != pCompEnd && *pCompIter != sBase;++pCompIter)
;
return pCompIter != pCompEnd;
}
// -----------------------------------------------------------------------------
/* -----------------------------25.03.2002 12:19------------------------------
---------------------------------------------------------------------------*/
void ExtendedColorConfig_Impl::SetColorConfigValue(const ::rtl::OUString& _sName, const ExtendedColorConfigValue& rValue )
{
TComponents::iterator aFind = m_aConfigValues.find(_sName);
if ( aFind != m_aConfigValues.end() )
{
TConfigValues::iterator aFind2 = aFind->second.first.find(rValue.getName());
if ( aFind2 != aFind->second.first.end() )
aFind2->second = rValue;
SetModified();
}
}
/* -----------------------------25.03.2002 15:22------------------------------
---------------------------------------------------------------------------*/
uno::Sequence< ::rtl::OUString> ExtendedColorConfig_Impl::GetSchemeNames()
{
return GetNodeNames(C2U("ExtendedColorScheme/ColorSchemes"));
}
/* -----------------------------09.04.2002 17:19------------------------------
---------------------------------------------------------------------------*/
sal_Bool ExtendedColorConfig_Impl::AddScheme(const rtl::OUString& rScheme)
{
if(ConfigItem::AddNode(C2U("ExtendedColorScheme/ColorSchemes"), rScheme))
{
m_sLoadedScheme = rScheme;
Commit();
return sal_True;
}
return sal_False;
}
/* -----------------------------09.04.2002 17:19------------------------------
---------------------------------------------------------------------------*/
sal_Bool ExtendedColorConfig_Impl::RemoveScheme(const rtl::OUString& rScheme)
{
uno::Sequence< rtl::OUString > aElements(1);
aElements.getArray()[0] = rScheme;
return ClearNodeElements(C2U("ExtendedColorScheme/ColorSchemes"), aElements);
}
/* -----------------------------2002/06/20 13:03------------------------------
---------------------------------------------------------------------------*/
void ExtendedColorConfig_Impl::SettingsChanged()
{
vos::OGuard aVclGuard( Application::GetSolarMutex() );
Broadcast( SfxSimpleHint( SFX_HINT_COLORS_CHANGED ) );
}
/* -----------------11.12.2002 09:21-----------------
*
* --------------------------------------------------*/
void ExtendedColorConfig_Impl::LockBroadcast()
{
m_bLockBroadcast = sal_True;
}
/* -----------------11.12.2002 09:21-----------------
*
* --------------------------------------------------*/
void ExtendedColorConfig_Impl::UnlockBroadcast()
{
if ( m_bBroadcastWhenUnlocked )
{
m_bBroadcastWhenUnlocked = ExtendedColorConfig::m_pImpl != NULL;
if ( m_bBroadcastWhenUnlocked )
{
if ( ExtendedColorConfig::m_pImpl->IsEnableBroadcast() )
{
m_bBroadcastWhenUnlocked = sal_False;
ExtendedColorConfig::m_pImpl->Broadcast(SfxSimpleHint(SFX_HINT_COLORS_CHANGED));
}
}
}
m_bLockBroadcast = sal_False;
}
/* -----------------------------2002/08/16 12:07 -----------------------------
#100822#
--------------------------------------------------------------------------- */
IMPL_LINK( ExtendedColorConfig_Impl, DataChangedEventListener, VclWindowEvent*, pEvent )
{
if ( pEvent->GetId() == VCLEVENT_APPLICATION_DATACHANGED )
{
DataChangedEvent* pData = (DataChangedEvent*)(pEvent->GetData());
if ( (pData->GetType() == DATACHANGED_SETTINGS) &&
(pData->GetFlags() & SETTINGS_STYLE) )
{
SettingsChanged();
return 1L;
} else
return 0L;
} else
return 0L;
}
// ---------------------------------------------------------------------------
// ---------------------------------------------------------------------------
ExtendedColorConfig::ExtendedColorConfig()
{
::osl::MutexGuard aGuard( ColorMutex_Impl::get() );
if ( !m_pImpl )
m_pImpl = new ExtendedColorConfig_Impl;
++nExtendedColorRefCount_Impl;
StartListening( *m_pImpl);
}
/* -----------------------------16.01.01 15:36--------------------------------
---------------------------------------------------------------------------*/
ExtendedColorConfig::~ExtendedColorConfig()
{
::osl::MutexGuard aGuard( ColorMutex_Impl::get() );
EndListening( *m_pImpl);
if(!--nExtendedColorRefCount_Impl)
{
delete m_pImpl;
m_pImpl = 0;
}
}
/* -----------------------------11.04.2002 11:49------------------------------
---------------------------------------------------------------------------*/
ExtendedColorConfigValue ExtendedColorConfig::GetColorValue(const ::rtl::OUString& _sComponentName,const ::rtl::OUString& _sName)const
{
return m_pImpl->GetColorConfigValue(_sComponentName,_sName);
}
// -----------------------------------------------------------------------------
sal_Int32 ExtendedColorConfig::GetComponentCount() const
{
return m_pImpl->GetComponentCount();
}
// -----------------------------------------------------------------------------
sal_Int32 ExtendedColorConfig::GetComponentColorCount(const ::rtl::OUString& _sName) const
{
return m_pImpl->GetComponentColorCount(_sName);
}
// -----------------------------------------------------------------------------
ExtendedColorConfigValue ExtendedColorConfig::GetComponentColorConfigValue(const ::rtl::OUString& _sName,sal_uInt32 _nPos) const
{
return m_pImpl->GetComponentColorConfigValue(_sName,_nPos);
}
// -----------------------------------------------------------------------------
::rtl::OUString ExtendedColorConfig::GetComponentName(sal_uInt32 _nPos) const
{
return m_pImpl->GetComponentName(_nPos);
}
// -----------------------------------------------------------------------------
::rtl::OUString ExtendedColorConfig::GetComponentDisplayName(const ::rtl::OUString& _sComponentName) const
{
return m_pImpl->GetComponentDisplayName(_sComponentName);
}
// -----------------------------------------------------------------------------
/* -----------------------------12.04.2002 09:25------------------------------
---------------------------------------------------------------------------*/
void ExtendedColorConfig::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
{
vos::OGuard aVclGuard( Application::GetSolarMutex() );
Broadcast( rHint );
}
/* -----------------------------25.03.2002 12:01------------------------------
---------------------------------------------------------------------------*/
EditableExtendedColorConfig::EditableExtendedColorConfig() :
m_pImpl(new ExtendedColorConfig_Impl),
m_bModified(sal_False)
{
m_pImpl->LockBroadcast();
}
/*-- 25.03.2002 12:03:08---------------------------------------------------
-----------------------------------------------------------------------*/
EditableExtendedColorConfig::~EditableExtendedColorConfig()
{
m_pImpl->UnlockBroadcast();
if(m_bModified)
m_pImpl->SetModified();
if(m_pImpl->IsModified())
m_pImpl->Commit();
delete m_pImpl;
}
/*-- 25.03.2002 12:03:15---------------------------------------------------
-----------------------------------------------------------------------*/
uno::Sequence< ::rtl::OUString > EditableExtendedColorConfig::GetSchemeNames() const
{
return m_pImpl->GetSchemeNames();
}
/*-- 25.03.2002 12:03:16---------------------------------------------------
-----------------------------------------------------------------------*/
void EditableExtendedColorConfig::DeleteScheme(const ::rtl::OUString& rScheme )
{
m_pImpl->RemoveScheme(rScheme);
}
/*-- 25.03.2002 12:03:16---------------------------------------------------
-----------------------------------------------------------------------*/
void EditableExtendedColorConfig::AddScheme(const ::rtl::OUString& rScheme )
{
m_pImpl->AddScheme(rScheme);
}
/*-- 25.03.2002 12:03:16---------------------------------------------------
-----------------------------------------------------------------------*/
sal_Bool EditableExtendedColorConfig::LoadScheme(const ::rtl::OUString& rScheme )
{
if(m_bModified)
m_pImpl->SetModified();
if(m_pImpl->IsModified())
m_pImpl->Commit();
m_bModified = sal_False;
m_pImpl->Load(rScheme);
//the name of the loaded scheme has to be committed separately
m_pImpl->CommitCurrentSchemeName();
return sal_True;
}
/*-- 25.03.2002 12:03:16---------------------------------------------------
-----------------------------------------------------------------------*/
const ::rtl::OUString& EditableExtendedColorConfig::GetCurrentSchemeName()const
{
return m_pImpl->GetLoadedScheme();
}
/* -----------------11.12.2002 10:56-----------------
* changes the name of the current scheme but doesn't load it!
* --------------------------------------------------*/
void EditableExtendedColorConfig::SetCurrentSchemeName(const ::rtl::OUString& rScheme)
{
m_pImpl->SetCurrentSchemeName(rScheme);
m_pImpl->CommitCurrentSchemeName();
}
/*-- 25.03.2002 12:03:17---------------------------------------------------
-----------------------------------------------------------------------*/
ExtendedColorConfigValue EditableExtendedColorConfig::GetColorValue(const ::rtl::OUString& _sComponentName,
const ::rtl::OUString& _sName)const
{
return m_pImpl->GetColorConfigValue(_sComponentName,_sName);
}
/*-- 25.03.2002 12:03:17---------------------------------------------------
-----------------------------------------------------------------------*/
void EditableExtendedColorConfig::SetColorValue(
const ::rtl::OUString& _sName, const ExtendedColorConfigValue& rValue)
{
m_pImpl->SetColorConfigValue(_sName, rValue);
m_pImpl->ClearModified();
m_bModified = sal_True;
}
/* -----------------------------10.04.2002 13:22------------------------------
---------------------------------------------------------------------------*/
void EditableExtendedColorConfig::SetModified()
{
m_bModified = sal_True;
}
/* -----------------15.10.2002 14:51-----------------
*
* --------------------------------------------------*/
void EditableExtendedColorConfig::Commit()
{
if(m_bModified)
m_pImpl->SetModified();
if(m_pImpl->IsModified())
m_pImpl->Commit();
m_bModified = sal_False;
}
// -----------------------------------------------------------------------------
void EditableExtendedColorConfig::DisableBroadcast()
{
m_pImpl->DisableBroadcast();
}
// -----------------------------------------------------------------------------
void EditableExtendedColorConfig::EnableBroadcast()
{
m_pImpl->EnableBroadcast();
}
// -----------------------------------------------------------------------------
sal_Int32 EditableExtendedColorConfig::GetComponentCount() const
{
return m_pImpl->GetComponentCount();
}
// -----------------------------------------------------------------------------
sal_Int32 EditableExtendedColorConfig::GetComponentColorCount(const ::rtl::OUString& _sName) const
{
return m_pImpl->GetComponentColorCount(_sName);
}
// -----------------------------------------------------------------------------
ExtendedColorConfigValue EditableExtendedColorConfig::GetComponentColorConfigValue(const ::rtl::OUString& _sName,sal_uInt32 _nPos) const
{
return m_pImpl->GetComponentColorConfigValue(_sName,_nPos);
}
// -----------------------------------------------------------------------------
::rtl::OUString EditableExtendedColorConfig::GetComponentName(sal_uInt32 _nPos) const
{
return m_pImpl->GetComponentName(_nPos);
}
// -----------------------------------------------------------------------------
::rtl::OUString EditableExtendedColorConfig::GetComponentDisplayName(const ::rtl::OUString& _sComponentName) const
{
return m_pImpl->GetComponentDisplayName(_sComponentName);
}
}//namespace svtools