25#include <com/sun/star/uno/Any.hxx>
26#include <com/sun/star/uno/Sequence.hxx>
27#include <com/sun/star/beans/PropertyValue.hpp>
33#include <com/sun/star/uno/Sequence.h>
43#include <officecfg/Office/UI.hxx>
57 std::mutex& ColorMutex_Impl()
59 static std::mutex SINGLETON;
77 void Load(
const OUString& rScheme);
81 virtual void Notify(
const uno::Sequence<OUString>& aPropertyNames)
override;
94 using ConfigItem::SetModified;
95 using ConfigItem::ClearModified;
103uno::Sequence< OUString> GetPropertyNames(std::u16string_view rScheme)
105 struct ColorConfigEntryData_Impl
107 std::u16string_view cName;
110 static const ColorConfigEntryData_Impl cNames[] =
112 { std::u16string_view(u
"/DocColor") ,
false },
113 { std::u16string_view(u
"/DocBoundaries") ,
true },
114 { std::u16string_view(u
"/AppBackground") ,
false },
115 { std::u16string_view(u
"/ObjectBoundaries"),
true },
116 { std::u16string_view(u
"/TableBoundaries") ,
true },
117 { std::u16string_view(u
"/FontColor") ,
false },
118 { std::u16string_view(u
"/Links") ,
true },
119 { std::u16string_view(u
"/LinksVisited") ,
true },
120 { std::u16string_view(u
"/Spell") ,
false },
121 { std::u16string_view(u
"/Grammar") ,
false },
122 { std::u16string_view(u
"/SmartTags") ,
false },
123 { std::u16string_view(u
"/Shadow") ,
true },
124 { std::u16string_view(u
"/WriterTextGrid") ,
false },
125 { std::u16string_view(u
"/WriterFieldShadings"),
true },
126 { std::u16string_view(u
"/WriterIdxShadings") ,
true },
127 { std::u16string_view(u
"/WriterDirectCursor") ,
true },
128 { std::u16string_view(u
"/WriterScriptIndicator") ,
false },
129 { std::u16string_view(u
"/WriterSectionBoundaries") ,
true },
130 { std::u16string_view(u
"/WriterHeaderFooterMark") ,
false },
131 { std::u16string_view(u
"/WriterPageBreaks") ,
false },
132 { std::u16string_view(u
"/HTMLSGML") ,
false },
133 { std::u16string_view(u
"/HTMLComment") ,
false },
134 { std::u16string_view(u
"/HTMLKeyword") ,
false },
135 { std::u16string_view(u
"/HTMLUnknown") ,
false },
136 { std::u16string_view(u
"/CalcGrid") ,
false },
137 { std::u16string_view(u
"/CalcPageBreak"),
false },
138 { std::u16string_view(u
"/CalcPageBreakManual"),
false },
139 { std::u16string_view(u
"/CalcPageBreakAutomatic"),
false },
140 { std::u16string_view(u
"/CalcHiddenColRow"),
true },
141 { std::u16string_view(u
"/CalcTextOverflow"),
true },
142 { std::u16string_view(u
"/CalcComments"),
false },
143 { std::u16string_view(u
"/CalcDetective") ,
false },
144 { std::u16string_view(u
"/CalcDetectiveError") ,
false },
145 { std::u16string_view(u
"/CalcReference") ,
false },
146 { std::u16string_view(u
"/CalcNotesBackground") ,
false },
147 { std::u16string_view(u
"/CalcValue") ,
false },
148 { std::u16string_view(u
"/CalcFormula") ,
false },
149 { std::u16string_view(u
"/CalcText") ,
false },
150 { std::u16string_view(u
"/CalcProtectedBackground") ,
false },
151 { std::u16string_view(u
"/DrawGrid") ,
true },
152 { std::u16string_view(u
"/BASICEditor"),
false },
153 { std::u16string_view(u
"/BASICIdentifier"),
false },
154 { std::u16string_view(u
"/BASICComment") ,
false },
155 { std::u16string_view(u
"/BASICNumber") ,
false },
156 { std::u16string_view(u
"/BASICString") ,
false },
157 { std::u16string_view(u
"/BASICOperator") ,
false },
158 { std::u16string_view(u
"/BASICKeyword") ,
false },
159 { std::u16string_view(u
"/BASICError"),
false },
160 { std::u16string_view(u
"/SQLIdentifier"),
false },
161 { std::u16string_view(u
"/SQLNumber"),
false },
162 { std::u16string_view(u
"/SQLString"),
false },
163 { std::u16string_view(u
"/SQLOperator"),
false },
164 { std::u16string_view(u
"/SQLKeyword"),
false },
165 { std::u16string_view(u
"/SQLParameter"),
false },
166 { std::u16string_view(u
"/SQLComment"),
false }
170 OUString* pNames = aNames.getArray();
172 OUString sBase =
"ColorSchemes/"
176 OUString sBaseName = sBase + cNames[
i].cName;
177 pNames[
nIndex++] = sBaseName +
"/Color";
178 if(cNames[i].bCanBeVisible)
183 aNames.realloc(nIndex);
193 uno::Sequence < OUString > aNames(1);
210 OUString sScheme(rScheme);
211 if(sScheme.isEmpty())
214 uno::Sequence < OUString > aCurrent {
"CurrentColorScheme" };
215 uno::Sequence< uno::Any > aCurrentVal =
GetProperties( aCurrent );
216 aCurrentVal.getConstArray()[0] >>= sScheme;
220 uno::Sequence < OUString > aColorNames = GetPropertyNames(sScheme);
221 uno::Sequence< uno::Any > aColors =
GetProperties( aColorNames );
222 const uno::Any* pColors = aColors.getConstArray();
223 const OUString* pColorNames = aColorNames.getConstArray();
227 if(pColors[
nIndex].hasValue())
236 if(
nIndex >= aColors.getLength())
253 uno::Sequence < OUString > aColorNames = GetPropertyNames(
m_sLoadedScheme);
254 uno::Sequence < beans::PropertyValue > aPropValues(aColorNames.getLength());
255 beans::PropertyValue* pPropValues = aPropValues.getArray();
256 const OUString* pColorNames = aColorNames.getConstArray();
266 if(
nIndex >= aColorNames.getLength())
284 uno::Sequence < OUString > aCurrent {
"CurrentColorScheme" };
285 uno::Sequence< uno::Any > aCurrentVal(1);
306 if(ConfigItem::AddNode(
"ColorSchemes", rScheme))
315 uno::Sequence< OUString > aElements { rScheme };
328 if ( rEvent.GetId() == VclEventId::ApplicationDataChanged )
331 if ( (
pData->GetType() == DataChangedEventType::SETTINGS) &&
332 (
pData->GetFlags() & AllSettingsFlags::STYLE) )
343 std::unique_lock aGuard( ColorMutex_Impl() );
358 std::unique_lock aGuard( ColorMutex_Impl() );
373 static const Color cAutoColors[][nColorTypes] =
455 case 1: nAppMod = clLight;
break;
456 case 2: nAppMod = clDark;
break;
458 aRet = cAutoColors[eEntry][nAppMod];
493 officecfg::Office::UI::ColorScheme::CurrentColorScheme::get();
501 m_pImpl->BlockBroadcasts(
true);
506 m_pImpl->BlockBroadcasts(
false);
515 return m_pImpl->GetSchemeNames();
520 m_pImpl->RemoveScheme(rScheme);
537 m_pImpl->CommitCurrentSchemeName();
542 return m_pImpl->GetLoadedScheme();
548 m_pImpl->SetCurrentSchemeName(rScheme);
549 m_pImpl->CommitCurrentSchemeName();
555 return m_pImpl->GetColorConfigValue(eEntry);
561 m_pImpl->SetColorConfigValue(eEntry, rValue);
582 m_pImpl->BlockBroadcasts(
true);
587 m_pImpl->BlockBroadcasts(
false);
const StyleSettings & GetStyleSettings() const
static void AddEventListener(const Link< VclSimpleEvent &, void > &rEventListener)
static const AllSettings & GetSettings()
static void RemoveEventListener(const Link< VclSimpleEvent &, void > &rEventListener)
static int GetAppColorMode()
static bool GetUseDarkMode()
const Color & GetWindowColor() const
const Color & GetWorkspaceColor() const
const Color & GetWindowTextColor() const
const Color & GetLinkColor() const
const Color & GetVisitedLinkColor() const
static bool PutProperties(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const css::uno::Sequence< OUString > &rNames, const css::uno::Sequence< css::uno::Any > &rValues, bool bAllLocales)
static bool SetSetProperties(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const OUString &rNode, const css::uno::Sequence< css::beans::PropertyValue > &rValues)
bool EnableNotification(const css::uno::Sequence< OUString > &rNames, bool bEnableInternalNotification=false)
static css::uno::Sequence< css::uno::Any > GetProperties(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const css::uno::Sequence< OUString > &rNames, bool bAllLocales)
bool ClearNodeElements(const OUString &rNode, css::uno::Sequence< OUString > const &rElements)
static css::uno::Sequence< OUString > GetNodeNames(css::uno::Reference< css::container::XHierarchicalNameAccess > const &xHierarchyAccess, const OUString &rNode, ConfigNameFormat eFormat)
void AddListener(utl::ConfigurationListener *pListener)
void RemoveListener(utl::ConfigurationListener const *pListener)
void NotifyListeners(ConfigurationHints nHint)
constexpr ::Color COL_LIGHTRED(0xFF, 0x00, 0x00)
constexpr ::Color COL_GRAY(0x80, 0x80, 0x80)
constexpr ::Color COL_GRAY3(0xCC, 0xCC, 0xCC)
constexpr ::Color COL_GREEN(0x00, 0x80, 0x00)
constexpr ::Color COL_WHITE(0xFF, 0xFF, 0xFF)
constexpr ::Color COL_GRAY7(0x66, 0x66, 0x66)
constexpr ::Color COL_LIGHTMAGENTA(0xFF, 0x00, 0xFF)
constexpr ::Color COL_RED(0x80, 0x00, 0x00)
constexpr ::Color COL_AUTO(ColorTransparency, 0xFF, 0xFF, 0xFF, 0xFF)
constexpr ::Color COL_LIGHTGRAY(0xC0, 0xC0, 0xC0)
constexpr ::Color COL_LIGHTBLUE(0x00, 0x00, 0xFF)
constexpr ::Color COL_LIGHTGREEN(0x00, 0xFF, 0x00)
constexpr ::Color COL_BLUE(0x00, 0x00, 0x80)
constexpr ::Color COL_BLACK(0x00, 0x00, 0x00)
const char g_sIsVisible[]
#define LINK(Instance, Class, Member)
std::unique_ptr< sal_Int32[]> pData
OUString wrapConfigurationElementName(std::u16string_view _sElementName)
bool Any2Bool(const css::uno::Any &rValue)