/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*
* This file is part of the LibreOffice project.
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*
* This file incorporates work covered by the following license notice:
*
* 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 .
*/
#pragma once
#include <sfx2/dllapi.h>
#include <tools/color.hxx>
#include <comphelper/compbase.hxx>
#include <com/sun/star/beans/XPropertySet.hpp>
#include <map>
#include <unordered_map>
namespace sfx2::sidebar {
typedef comphelper::WeakComponentImplHelper <
css::beans::XPropertySet,
css::beans::XPropertySetInfo
> ThemeInterfaceBase;
/** Simple collection of colors, gradients, fonts that define the
look of the sidebar and its controls.
*/
class SFX2_DLLPUBLIC Theme final
:
public ThemeInterfaceBase
{
public :
enum ThemeItem
{
Begin_,
Pre_Color_ = Begin_,
AnyItem_ = Pre_Color_,
Image_Color_,
Color_Highlight,
Color_HighlightText,
Color_DeckBackground,
Color_DeckTitleBarBackground,
Color_PanelBackground,
Color_PanelTitleBarBackground,
Color_TabBarBackground,
Color_Int_,
Int_DeckBorderSize,
Int_DeckSeparatorHeight,
Int_DeckLeftPadding,
Int_DeckTopPadding,
Int_DeckRightPadding,
Int_DeckBottomPadding,
Int_Bool_,
Bool_UseSystemColors,
Bool_IsHighContrastModeActive,
Post_Bool_,
End_=Post_Bool_
};
static Color GetColor (
const ThemeItem eItem);
static sal_Int32 GetInteger (
const ThemeItem eItem);
static bool IsHighContrastMode();
static void HandleDataChange();
void InitializeTheme();
Theme();
virtual ~Theme() override;
Theme(
const Theme&) =
delete ;
Theme&
operator =(
const Theme& ) =
delete ;
virtual void disposing(std::unique_lock<std::mutex>&) override;
static css::uno::Reference<css::beans::XPropertySet> GetPropertySet();
// beans::XPropertySet
virtual css::uno::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo
() override;
virtual void SAL_CALL setPropertyValue (
const OUString& rsPropertyName,
const css::uno::Any& rValue) override;
virtual css::uno::Any SAL_CALL getPropertyValue (
const OUString& rsPropertyName) override;
virtual void SAL_CALL addPropertyChangeListener(
const OUString& rsPropertyName,
const css::uno::Reference<css::beans::XPropertyChangeListener>& rxListener) override;
virtual void SAL_CALL removePropertyChangeListener(
const OUString& rsPropertyName,
const css::uno::Reference<css::beans::XPropertyChangeListener>& rxListener) override;
virtual void SAL_CALL addVetoableChangeListener(
const OUString& rsPropertyName,
const css::uno::Reference<css::beans::XVetoableChangeListener>& rxListener) override;
virtual void SAL_CALL removeVetoableChangeListener(
const OUString& rsPropertyName,
const css::uno::Reference<css::beans::XVetoableChangeListener>& rxListener) override;
// beans::XPropertySetInfo
virtual css::uno::Sequence<css::beans::Property> SAL_CALL getProperties() override;
virtual css::beans::Property SAL_CALL getPropertyByName (const OUString& rsName) override;
virtual sal_Bool SAL_CALL hasPropertyByName (const OUString& rsName) override;
private :
static Theme& GetCurrentTheme();
std::vector<Color> maColors;
std::vector<sal_Int32> maIntegers;
std::vector<bool > maBooleans;
bool mbIsHighContrastMode;
bool mbIsHighContrastModeSetManually;
typedef std::unordered_map<OUString,ThemeItem> PropertyNameToIdMap;
PropertyNameToIdMap maPropertyNameToIdMap;
typedef std::vector<OUString> PropertyIdToNameMap;
PropertyIdToNameMap maPropertyIdToNameMap;
typedef ::std::vector<css::uno::Any> RawValueContainer;
RawValueContainer maRawValues;
typedef std::vector<css::uno::Reference<css::beans::XPropertyChangeListener> > ChangeListenerContainer;
typedef std::map<ThemeItem,ChangeListenerContainer> ChangeListeners;
ChangeListeners maChangeListeners;
typedef std::vector<css::uno::Reference<css::beans::XVetoableChangeListener> > VetoableListenerContainer;
typedef std::map<ThemeItem,VetoableListenerContainer> VetoableListeners;
VetoableListeners maVetoableListeners;
enum PropertyType
{
PT_Color,
PT_Integer,
PT_Boolean,
PT_Invalid
};
void SetupPropertyMaps();
void UpdateTheme();
static PropertyType GetPropertyType (const ThemeItem eItem);
static css::uno::Type const & GetCppuType (const PropertyType eType);
static sal_Int32 GetIndex (
const ThemeItem eItem,
const PropertyType eType);
VetoableListenerContainer* GetVetoableListeners (
const ThemeItem eItem,
const bool bCreate);
ChangeListenerContainer* GetChangeListeners (
const ThemeItem eItem,
const bool bCreate);
static bool DoVetoableListenersVeto (
const VetoableListenerContainer* pListeners,
const css::beans::PropertyChangeEvent& rEvent);
static void BroadcastPropertyChange (
const ChangeListenerContainer* pListeners,
const css::beans::PropertyChangeEvent& rEvent);
void ProcessNewValue (
const css::uno::Any& rValue,
const ThemeItem eItem,
const PropertyType eType);
};
} // end of namespace sfx2::sidebar
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Messung V0.5 in Prozent C=97 H=100 G=98
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-05-04)
¤
*© Formatika GbR, Deutschland