LibreOffice Module sfx2 (master) 1
Theme.cxx
Go to the documentation of this file.
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
21#include <sfx2/app.hxx>
22
23#include <vcl/svapp.hxx>
24#include <vcl/settings.hxx>
26
27using namespace css;
28using namespace css::uno;
29
30namespace sfx2::sidebar {
31
33{
34 OSL_ASSERT(SfxGetpApp());
35 return SfxGetpApp()->GetSidebarTheme();
36}
37
39 : mbIsHighContrastMode(Application::GetSettings().GetStyleSettings().GetHighContrastMode()),
40 mbIsHighContrastModeSetManually(false)
41{
43}
44
46{
47}
48
50{
51 const PropertyType eType (GetPropertyType(eItem));
52 OSL_ASSERT(eType==PT_Color);
53 const sal_Int32 nIndex (GetIndex(eItem, eType));
54 const Theme& rTheme (GetCurrentTheme());
55 if (eType == PT_Color)
56 return rTheme.maColors[nIndex];
57 else
58 return COL_WHITE;
59}
60
61sal_Int32 Theme::GetInteger (const ThemeItem eItem)
62{
63 const PropertyType eType (GetPropertyType(eItem));
64 OSL_ASSERT(eType==PT_Integer);
65 const sal_Int32 nIndex (GetIndex(eItem, eType));
66 const Theme& rTheme (GetCurrentTheme());
67 return rTheme.maIntegers[nIndex];
68}
69
71{
72 const Theme& rTheme (GetCurrentTheme());
73 return rTheme.mbIsHighContrastMode;
74}
75
77{
78 Theme& rTheme (GetCurrentTheme());
79
81 {
82 // Do not modify mbIsHighContrastMode when it was manually set.
85 }
86
88}
89
91{
94 Any(false));
95}
96
98{
99 try
100 {
101 const StyleSettings& rStyle (Application::GetSettings().GetStyleSettings());
102
103 Color aBaseBackgroundColor (rStyle.GetDialogColor());
104 // UX says this should be a little brighter, but that looks off when compared to the other windows.
105 //aBaseBackgroundColor.IncreaseLuminance(7);
106 Color aSecondColor (aBaseBackgroundColor);
107 aSecondColor.DecreaseLuminance(15);
108
111 Any(sal_Int32(aBaseBackgroundColor.GetRGBColor())));
112
115 Any(sal_Int32(aBaseBackgroundColor.GetRGBColor())));
118 Any(sal_Int32(1)));
121 Any(sal_Int32(aBaseBackgroundColor.GetRGBColor())));
122
125 Any(sal_Int32(aSecondColor.GetRGBColor())));
128 Any(sal_Int32(aBaseBackgroundColor.GetRGBColor())));
129
132 Any(sal_Int32(rStyle.GetHighlightColor().GetRGBColor())));
135 Any(sal_Int32(rStyle.GetHighlightTextColor().GetRGBColor())));
136 }
137 catch(beans::UnknownPropertyException const &)
138 {
139 DBG_UNHANDLED_EXCEPTION("sfx", "unknown property");
140 OSL_ASSERT(false);
141 }
142}
143
144void Theme::disposing(std::unique_lock<std::mutex>&)
145{
146 SolarMutexGuard aGuard;
147
150
151 const lang::EventObject aEvent (getXWeak());
152
153 for (const auto& rContainer : aListeners)
154 {
155 for (const auto& rxListener : rContainer.second)
156 {
157 try
158 {
159 rxListener->disposing(aEvent);
160 }
161 catch(const Exception&)
162 {
163 }
164 }
165 }
166}
167
168Reference<beans::XPropertySet> Theme::GetPropertySet()
169{
170 if (SfxGetpApp())
171 return Reference<beans::XPropertySet>(&GetCurrentTheme());
172 else
173 return Reference<beans::XPropertySet>();
174}
175
176Reference<beans::XPropertySetInfo> SAL_CALL Theme::getPropertySetInfo()
177{
178 return Reference<beans::XPropertySetInfo>(this);
179}
180
182 const OUString& rsPropertyName,
183 const css::uno::Any& rValue)
184{
185 SolarMutexGuard aGuard;
186
187 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
188 if (iId == maPropertyNameToIdMap.end())
189 throw beans::UnknownPropertyException(rsPropertyName);
190
191 const PropertyType eType (GetPropertyType(iId->second));
192 if (eType == PT_Invalid)
193 throw beans::UnknownPropertyException(rsPropertyName);
194
195 const ThemeItem eItem (iId->second);
196
197 if (rValue == maRawValues[eItem])
198 {
199 // Value is not different from the one in the property
200 // set => nothing to do.
201 return;
202 }
203
204 const Any aOldValue (maRawValues[eItem]);
205
206 const beans::PropertyChangeEvent aEvent(
207 getXWeak(),
208 rsPropertyName,
209 false,
210 eItem,
211 aOldValue,
212 rValue);
213
215 return;
217 return;
218
219 maRawValues[eItem] = rValue;
220 ProcessNewValue(rValue, eItem, eType);
221
224}
225
227 const OUString& rsPropertyName)
228{
229 SolarMutexGuard aGuard;
230
231 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
232 if (iId == maPropertyNameToIdMap.end())
233 throw beans::UnknownPropertyException(rsPropertyName);
234
235 const PropertyType eType (GetPropertyType(iId->second));
236 if (eType == PT_Invalid)
237 throw beans::UnknownPropertyException(rsPropertyName);
238
239 const ThemeItem eItem (iId->second);
240
241 return maRawValues[eItem];
242}
243
245 const OUString& rsPropertyName,
246 const css::uno::Reference<css::beans::XPropertyChangeListener>& rxListener)
247{
248 SolarMutexGuard aGuard;
249
250 ThemeItem eItem (AnyItem_);
251 if (rsPropertyName.getLength() > 0)
252 {
253 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
254 if (iId == maPropertyNameToIdMap.end())
255 throw beans::UnknownPropertyException(rsPropertyName);
256
257 const PropertyType eType (GetPropertyType(iId->second));
258 if (eType == PT_Invalid)
259 throw beans::UnknownPropertyException(rsPropertyName);
260
261 eItem = iId->second;
262 }
263 ChangeListenerContainer* pListeners = GetChangeListeners(eItem, true);
264 if (pListeners != nullptr)
265 pListeners->push_back(rxListener);
266}
267
269 const OUString& rsPropertyName,
270 const css::uno::Reference<css::beans::XPropertyChangeListener>& rxListener)
271{
272 SolarMutexGuard aGuard;
273
274 ThemeItem eItem (AnyItem_);
275 if (rsPropertyName.getLength() > 0)
276 {
277 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
278 if (iId == maPropertyNameToIdMap.end())
279 throw beans::UnknownPropertyException(rsPropertyName);
280
281 const PropertyType eType (GetPropertyType(iId->second));
282 if (eType == PT_Invalid)
283 throw beans::UnknownPropertyException(rsPropertyName);
284
285 eItem = iId->second;
286 }
287 ChangeListenerContainer* pContainer = GetChangeListeners(eItem, false);
288 if (pContainer != nullptr)
289 {
290 ChangeListenerContainer::iterator iListener (::std::find(pContainer->begin(), pContainer->end(), rxListener));
291 if (iListener != pContainer->end())
292 {
293 pContainer->erase(iListener);
294
295 // Remove the listener container when empty.
296 if (pContainer->empty())
297 maChangeListeners.erase(eItem);
298 }
299 }
300}
301
303 const OUString& rsPropertyName,
304 const css::uno::Reference<css::beans::XVetoableChangeListener>& rxListener)
305{
306 SolarMutexGuard aGuard;
307
308 ThemeItem eItem (AnyItem_);
309 if (rsPropertyName.getLength() > 0)
310 {
311 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
312 if (iId == maPropertyNameToIdMap.end())
313 throw beans::UnknownPropertyException(rsPropertyName);
314
315 const PropertyType eType (GetPropertyType(iId->second));
316 if (eType == PT_Invalid)
317 throw beans::UnknownPropertyException(rsPropertyName);
318
319 eItem = iId->second;
320 }
321 VetoableListenerContainer* pListeners = GetVetoableListeners(eItem, true);
322 if (pListeners != nullptr)
323 pListeners->push_back(rxListener);
324}
325
327 const OUString& rsPropertyName,
328 const css::uno::Reference<css::beans::XVetoableChangeListener>& rxListener)
329{
330 SolarMutexGuard aGuard;
331
332 ThemeItem eItem (AnyItem_);
333 if (rsPropertyName.getLength() > 0)
334 {
335 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
336 if (iId == maPropertyNameToIdMap.end())
337 throw beans::UnknownPropertyException(rsPropertyName);
338
339 const PropertyType eType (GetPropertyType(iId->second));
340 if (eType == PT_Invalid)
341 throw beans::UnknownPropertyException(rsPropertyName);
342
343 eItem = iId->second;
344 }
345 VetoableListenerContainer* pContainer = GetVetoableListeners(eItem, false);
346 if (pContainer != nullptr)
347 {
348 VetoableListenerContainer::iterator iListener (::std::find(pContainer->begin(), pContainer->end(), rxListener));
349 if (iListener != pContainer->end())
350 {
351 pContainer->erase(iListener);
352 // Remove container when empty.
353 if (pContainer->empty())
354 maVetoableListeners.erase(eItem);
355 }
356 }
357}
358
359css::uno::Sequence<css::beans::Property> SAL_CALL Theme::getProperties()
360{
361 SolarMutexGuard aGuard;
362
363 ::std::vector<beans::Property> aProperties;
364
365 sal_Int32 const nEnd(End_);
366 for (sal_Int32 nItem(Begin_); nItem!=nEnd; ++nItem)
367 {
368 const ThemeItem eItem (static_cast<ThemeItem>(nItem));
369 const PropertyType eType (GetPropertyType(eItem));
370 if (eType == PT_Invalid)
371 continue;
372
373 const beans::Property aProperty(
375 eItem,
377 0);
378 aProperties.push_back(aProperty);
379 }
380
381 return css::uno::Sequence<css::beans::Property>(
382 aProperties.data(),
383 aProperties.size());
384}
385
386beans::Property SAL_CALL Theme::getPropertyByName (const OUString& rsPropertyName)
387{
388 SolarMutexGuard aGuard;
389
390 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
391 if (iId == maPropertyNameToIdMap.end())
392 throw beans::UnknownPropertyException(rsPropertyName);
393
394 const PropertyType eType (GetPropertyType(iId->second));
395 if (eType == PT_Invalid)
396 throw beans::UnknownPropertyException(rsPropertyName);
397
398 const ThemeItem eItem (iId->second);
399
400 return beans::Property(
401 rsPropertyName,
402 eItem,
404 0);
405}
406
407sal_Bool SAL_CALL Theme::hasPropertyByName (const OUString& rsPropertyName)
408{
409 SolarMutexGuard aGuard;
410
411 PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName));
412 if (iId == maPropertyNameToIdMap.end())
413 return false;
414
415 const PropertyType eType (GetPropertyType(iId->second));
416 if (eType == PT_Invalid)
417 return false;
418
419 return true;
420}
421
423{
425 maColors.resize(Color_Int_ - Pre_Color_ - 1);
426 maIntegers.resize(Int_Bool_ - Color_Int_ - 1);
427 maBooleans.resize(Post_Bool_ - Int_Bool_ - 1);
428
429 maPropertyNameToIdMap["Color_Highlight"]=Color_Highlight;
430 maPropertyIdToNameMap[Color_Highlight]="Color_Highlight";
431
432 maPropertyNameToIdMap["Color_HighlightText"]=Color_HighlightText;
433 maPropertyIdToNameMap[Color_HighlightText]="Color_HighlightText";
434
435
436 maPropertyNameToIdMap["Color_DeckBackground"]=Color_DeckBackground;
437 maPropertyIdToNameMap[Color_DeckBackground]="Color_DeckBackground";
438
439 maPropertyNameToIdMap["Color_DeckTitleBarBackground"]=Color_DeckTitleBarBackground;
440 maPropertyIdToNameMap[Color_DeckTitleBarBackground]="Color_DeckTitleBarBackground";
441
442 maPropertyNameToIdMap["Color_PanelBackground"]=Color_PanelBackground;
443 maPropertyIdToNameMap[Color_PanelBackground]="Color_PanelBackground";
444
445 maPropertyNameToIdMap["Color_PanelTitleBarBackground"]=Color_PanelTitleBarBackground;
446 maPropertyIdToNameMap[Color_PanelTitleBarBackground]="Color_PanelTitleBarBackground";
447
448 maPropertyNameToIdMap["Color_TabBarBackground"]=Color_TabBarBackground;
449 maPropertyIdToNameMap[Color_TabBarBackground]="Color_TabBarBackground";
450
451
452 maPropertyNameToIdMap["Int_DeckBorderSize"]=Int_DeckBorderSize;
453 maPropertyIdToNameMap[Int_DeckBorderSize]="Int_DeckBorderSize";
454
455 maPropertyNameToIdMap["Int_DeckSeparatorHeight"]=Int_DeckSeparatorHeight;
456 maPropertyIdToNameMap[Int_DeckSeparatorHeight]="Int_DeckSeparatorHeight";
457
458 maPropertyNameToIdMap["Int_DeckLeftPadding"]=Int_DeckLeftPadding;
459 maPropertyIdToNameMap[Int_DeckLeftPadding]="Int_DeckLeftPadding";
460
461 maPropertyNameToIdMap["Int_DeckTopPadding"]=Int_DeckTopPadding;
462 maPropertyIdToNameMap[Int_DeckTopPadding]="Int_DeckTopPadding";
463
464 maPropertyNameToIdMap["Int_DeckRightPadding"]=Int_DeckRightPadding;
465 maPropertyIdToNameMap[Int_DeckRightPadding]="Int_DeckRightPadding";
466
467 maPropertyNameToIdMap["Int_DeckBottomPadding"]=Int_DeckBottomPadding;
468 maPropertyIdToNameMap[Int_DeckBottomPadding]="Int_DeckBottomPadding";
469
470
471 maPropertyNameToIdMap["Bool_UseSystemColors"]=Bool_UseSystemColors;
472 maPropertyIdToNameMap[Bool_UseSystemColors]="Bool_UseSystemColors";
473
474 maPropertyNameToIdMap["Bool_IsHighContrastModeActive"]=Bool_IsHighContrastModeActive;
475 maPropertyIdToNameMap[Bool_IsHighContrastModeActive]="Bool_IsHighContrastModeActive";
476
477 maRawValues.resize(maPropertyIdToNameMap.size());
478}
479
481{
482 switch(eItem)
483 {
484 case Color_Highlight:
491 return PT_Color;
492
499 return PT_Integer;
500
503 return PT_Boolean;
504
505 default:
506 return PT_Invalid;
507 }
508}
509
510css::uno::Type const & Theme::GetCppuType (const PropertyType eType)
511{
512 switch(eType)
513 {
514 case PT_Color:
516
517 case PT_Integer:
519
520 case PT_Boolean:
522
523 case PT_Invalid:
524 default:
526 }
527}
528
529sal_Int32 Theme::GetIndex (const ThemeItem eItem, const PropertyType eType)
530{
531 switch(eType)
532 {
533 case PT_Color:
534 return eItem - Pre_Color_-1;
535 case PT_Integer:
536 return eItem - Color_Int_-1;
537 case PT_Boolean:
538 return eItem - Int_Bool_-1;
539 default:
540 OSL_ASSERT(false);
541 return 0;
542 }
543}
544
546 const ThemeItem eItem,
547 const bool bCreate)
548{
549 VetoableListeners::iterator iContainer (maVetoableListeners.find(eItem));
550 if (iContainer != maVetoableListeners.end())
551 return &iContainer->second;
552 else if (bCreate)
553 {
555 return &maVetoableListeners[eItem];
556 }
557 else
558 return nullptr;
559}
560
562 const ThemeItem eItem,
563 const bool bCreate)
564{
565 ChangeListeners::iterator iContainer (maChangeListeners.find(eItem));
566 if (iContainer != maChangeListeners.end())
567 return &iContainer->second;
568 else if (bCreate)
569 {
571 return &maChangeListeners[eItem];
572 }
573 else
574 return nullptr;
575}
576
578 const VetoableListenerContainer* pListeners,
579 const beans::PropertyChangeEvent& rEvent)
580{
581 if (pListeners == nullptr)
582 return false;
583
585 try
586 {
587 for (const auto& rxListener : aListeners)
588 {
589 rxListener->vetoableChange(rEvent);
590 }
591 }
592 catch(const beans::PropertyVetoException&)
593 {
594 return true;
595 }
596 catch(const Exception&)
597 {
598 // Ignore any other errors (such as disposed listeners).
599 }
600 return false;
601}
602
604 const ChangeListenerContainer* pListeners,
605 const beans::PropertyChangeEvent& rEvent)
606{
607 if (pListeners == nullptr)
608 return;
609
610 const ChangeListenerContainer aListeners (*pListeners);
611 try
612 {
613 for (const auto& rxListener : aListeners)
614 {
615 rxListener->propertyChange(rEvent);
616 }
617 }
618 catch(const Exception&)
619 {
620 // Ignore any errors (such as disposed listeners).
621 }
622}
623
625 const Any& rValue,
626 const ThemeItem eItem,
627 const PropertyType eType)
628{
629 const sal_Int32 nIndex (GetIndex (eItem, eType));
630 switch (eType)
631 {
632 case PT_Color:
633 {
634 Color nColorValue;
635 if (rValue >>= nColorValue)
636 maColors[nIndex] = nColorValue;
637 break;
638 }
639 case PT_Integer:
640 {
641 sal_Int32 nValue (0);
642 if (rValue >>= nValue)
643 {
645 }
646 break;
647 }
648 case PT_Boolean:
649 {
650 bool bValue (false);
651 if (rValue >>= bValue)
652 {
653 maBooleans[nIndex] = bValue;
655 {
659 }
660 else if (eItem == Bool_UseSystemColors)
661 {
663 }
664 }
665 break;
666 }
667 case PT_Invalid:
668 OSL_ASSERT(eType != PT_Invalid);
669 throw RuntimeException();
670 }
671}
672
673} // end of namespace sfx2::sidebar
674
675/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
PropertiesInfo aProperties
SfxApplication * SfxGetpApp()
Definition: app.hxx:231
AnyEventRef aEvent
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
Color GetRGBColor() const
void DecreaseLuminance(sal_uInt8 cLumDec)
sfx2::sidebar::Theme & GetSidebarTheme()
this Theme contains Images so must be deleted before DeInitVCL
Definition: app.cxx:544
bool GetHighContrastMode() const
const Color & GetDialogColor() const
const Color & GetHighlightColor() const
const Color & GetHighlightTextColor() const
css::uno::Type const & get()
Simple collection of colors, gradients, fonts that define the look of the sidebar and its controls.
Definition: Theme.hxx:44
virtual void SAL_CALL setPropertyValue(const OUString &rsPropertyName, const css::uno::Any &rValue) override
Definition: Theme.cxx:181
void InitializeTheme()
Definition: Theme.cxx:90
void SetupPropertyMaps()
Definition: Theme.cxx:422
virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override
Definition: Theme.cxx:176
static PropertyType GetPropertyType(const ThemeItem eItem)
Definition: Theme.cxx:480
bool mbIsHighContrastMode
Definition: Theme.hxx:130
std::vector< sal_Int32 > maIntegers
Definition: Theme.hxx:128
static Color GetColor(const ThemeItem eItem)
Definition: Theme.cxx:49
static css::uno::Type const & GetCppuType(const PropertyType eType)
Definition: Theme.cxx:510
std::vector< Color > maColors
Definition: Theme.hxx:127
ChangeListeners maChangeListeners
Definition: Theme.hxx:142
virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() override
Definition: Theme.cxx:359
PropertyIdToNameMap maPropertyIdToNameMap
Definition: Theme.hxx:136
std::vector< css::uno::Reference< css::beans::XVetoableChangeListener > > VetoableListenerContainer
Definition: Theme.hxx:143
void UpdateTheme()
Definition: Theme.cxx:97
virtual ~Theme() override
Definition: Theme.cxx:45
virtual void SAL_CALL addVetoableChangeListener(const OUString &rsPropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &rxListener) override
Definition: Theme.cxx:302
@ Color_DeckTitleBarBackground
Definition: Theme.hxx:58
@ Color_PanelTitleBarBackground
Definition: Theme.hxx:60
@ Bool_IsHighContrastModeActive
Definition: Theme.hxx:75
VetoableListenerContainer * GetVetoableListeners(const ThemeItem eItem, const bool bCreate)
Definition: Theme.cxx:545
virtual void SAL_CALL addPropertyChangeListener(const OUString &rsPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &rxListener) override
Definition: Theme.cxx:244
std::vector< bool > maBooleans
Definition: Theme.hxx:129
static void BroadcastPropertyChange(const ChangeListenerContainer *pListeners, const css::beans::PropertyChangeEvent &rEvent)
Definition: Theme.cxx:603
static css::uno::Reference< css::beans::XPropertySet > GetPropertySet()
Definition: Theme.cxx:168
void ProcessNewValue(const css::uno::Any &rValue, const ThemeItem eItem, const PropertyType eType)
Definition: Theme.cxx:624
virtual void SAL_CALL removeVetoableChangeListener(const OUString &rsPropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &rxListener) override
Definition: Theme.cxx:326
VetoableListeners maVetoableListeners
Definition: Theme.hxx:145
static void HandleDataChange()
Definition: Theme.cxx:76
static Theme & GetCurrentTheme()
Definition: Theme.cxx:32
virtual css::uno::Any SAL_CALL getPropertyValue(const OUString &rsPropertyName) override
Definition: Theme.cxx:226
virtual void SAL_CALL removePropertyChangeListener(const OUString &rsPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &rxListener) override
Definition: Theme.cxx:268
std::map< ThemeItem, ChangeListenerContainer > ChangeListeners
Definition: Theme.hxx:141
PropertyNameToIdMap maPropertyNameToIdMap
Definition: Theme.hxx:134
static sal_Int32 GetInteger(const ThemeItem eItem)
Definition: Theme.cxx:61
std::vector< css::uno::Reference< css::beans::XPropertyChangeListener > > ChangeListenerContainer
Definition: Theme.hxx:140
static bool IsHighContrastMode()
Definition: Theme.cxx:70
static sal_Int32 GetIndex(const ThemeItem eItem, const PropertyType eType)
Definition: Theme.cxx:529
static bool DoVetoableListenersVeto(const VetoableListenerContainer *pListeners, const css::beans::PropertyChangeEvent &rEvent)
Definition: Theme.cxx:577
virtual css::beans::Property SAL_CALL getPropertyByName(const OUString &rsName) override
Definition: Theme.cxx:386
virtual sal_Bool SAL_CALL hasPropertyByName(const OUString &rsName) override
Definition: Theme.cxx:407
ChangeListenerContainer * GetChangeListeners(const ThemeItem eItem, const bool bCreate)
Definition: Theme.cxx:561
bool mbIsHighContrastModeSetManually
Definition: Theme.hxx:131
virtual void disposing(std::unique_lock< std::mutex > &) override
Definition: Theme.cxx:144
RawValueContainer maRawValues
Definition: Theme.hxx:138
constexpr ::Color COL_WHITE(0xFF, 0xFF, 0xFF)
Listeners aListeners
#define DBG_UNHANDLED_EXCEPTION(...)
DocumentType eType
sal_Int16 nValue
sal_Int32 nIndex
@ Exception
unsigned char sal_Bool