summaryrefslogtreecommitdiff
path: root/include/sfx2/sidebar/Theme.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/sfx2/sidebar/Theme.hxx')
-rw-r--r--include/sfx2/sidebar/Theme.hxx278
1 files changed, 278 insertions, 0 deletions
diff --git a/include/sfx2/sidebar/Theme.hxx b/include/sfx2/sidebar/Theme.hxx
new file mode 100644
index 000000000000..d34866b7b179
--- /dev/null
+++ b/include/sfx2/sidebar/Theme.hxx
@@ -0,0 +1,278 @@
+/*
+ * 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 .
+ */
+#ifndef SFX_SIDEBAR_THEME_HXX
+#define SFX_SIDEBAR_THEME_HXX
+
+#include "sfx2/dllapi.h"
+
+#include <tools/color.hxx>
+#include <vcl/image.hxx>
+#include <cppuhelper/compbase2.hxx>
+#include <cppuhelper/basemutex.hxx>
+#include <tools/gen.hxx>
+#include <rtl/ref.hxx>
+#include <vcl/wall.hxx>
+
+#include <com/sun/star/beans/XPropertySet.hpp>
+
+#include <boost/unordered_map.hpp>
+#include <map>
+#include <boost/optional.hpp>
+
+
+class SvBorder;
+
+namespace css = ::com::sun::star;
+namespace cssu = ::com::sun::star::uno;
+
+
+namespace sfx2 { namespace sidebar {
+
+
+namespace
+{
+ typedef ::cppu::WeakComponentImplHelper2 <
+ css::beans::XPropertySet,
+ css::beans::XPropertySetInfo
+ > ThemeInterfaceBase;
+}
+
+class Paint;
+
+/** Simple collection of colors, gradients, fonts that define the
+ look of the sidebar and its controls.
+*/
+class SFX2_DLLPUBLIC Theme
+ : private ::boost::noncopyable,
+ private ::cppu::BaseMutex,
+ public ThemeInterfaceBase
+{
+public:
+ enum ThemeItem
+ {
+ __Begin,
+ __Pre_Image = __Begin,
+
+ __AnyItem = __Pre_Image,
+
+ Image_Grip,
+ Image_Expand,
+ Image_Collapse,
+ Image_TabBarMenu,
+ Image_PanelMenu,
+ Image_ToolBoxItemSeparator,
+ Image_Closer,
+
+ __Image_Color,
+
+ Color_DeckTitleFont,
+ Color_PanelTitleFont,
+ Color_TabMenuSeparator,
+ Color_TabItemBorder,
+ Color_DropDownBorder,
+ Color_Highlight,
+ Color_HighlightText,
+
+ __Color_Paint,
+
+ Paint_DeckBackground,
+ Paint_DeckTitleBarBackground,
+ Paint_PanelBackground,
+ Paint_PanelTitleBarBackground,
+ Paint_TabBarBackground,
+ Paint_TabItemBackgroundNormal,
+ Paint_TabItemBackgroundHighlight,
+ Paint_HorizontalBorder,
+ Paint_VerticalBorder,
+ Paint_ToolBoxBackground,
+ Paint_ToolBoxBorderTopLeft,
+ Paint_ToolBoxBorderCenterCorners,
+ Paint_ToolBoxBorderBottomRight,
+ Paint_DropDownBackground,
+
+ __Paint_Int,
+
+ Int_DeckTitleBarHeight,
+ Int_DeckBorderSize,
+ Int_DeckSeparatorHeight,
+ Int_PanelTitleBarHeight,
+ Int_TabMenuPadding,
+ Int_TabMenuSeparatorPadding,
+ Int_TabItemWidth,
+ Int_TabItemHeight,
+ Int_DeckLeftPadding,
+ Int_DeckTopPadding,
+ Int_DeckRightPadding,
+ Int_DeckBottomPadding,
+ Int_TabBarLeftPadding,
+ Int_TabBarTopPadding,
+ Int_TabBarRightPadding,
+ Int_TabBarBottomPadding,
+ Int_ButtonCornerRadius,
+
+ __Int_Bool,
+
+ Bool_UseSymphonyIcons,
+ Bool_UseSystemColors,
+ Bool_UseToolBoxItemSeparator,
+ Bool_IsHighContrastModeActive,
+
+ __Bool_Rect,
+
+ Rect_ToolBoxPadding,
+ Rect_ToolBoxBorder,
+
+ __Post_Rect,
+ __End=__Post_Rect
+ };
+
+ static Image GetImage (const ThemeItem eItem);
+ static Color GetColor (const ThemeItem eItem);
+ static const Paint& GetPaint (const ThemeItem eItem);
+ static const Wallpaper GetWallpaper (const ThemeItem eItem);
+ static sal_Int32 GetInteger (const ThemeItem eItem);
+ static bool GetBoolean (const ThemeItem eItem);
+ static Rectangle GetRectangle (const ThemeItem eItem);
+
+ static bool IsHighContrastMode (void);
+
+ static void HandleDataChange (void);
+
+ Theme (void);
+ virtual ~Theme (void);
+
+ virtual void SAL_CALL disposing (void);
+
+ static cssu::Reference<css::beans::XPropertySet> GetPropertySet (void);
+
+ // beans::XPropertySet
+ virtual cssu::Reference<css::beans::XPropertySetInfo> SAL_CALL getPropertySetInfo (void)
+ throw(cssu::RuntimeException);
+ virtual void SAL_CALL setPropertyValue (
+ const ::rtl::OUString& rsPropertyName,
+ const cssu::Any& rValue)
+ throw(cssu::RuntimeException);
+ virtual cssu::Any SAL_CALL getPropertyValue (
+ const ::rtl::OUString& rsPropertyName)
+ throw(css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException,
+ cssu::RuntimeException);
+ virtual void SAL_CALL addPropertyChangeListener(
+ const ::rtl::OUString& rsPropertyName,
+ const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener)
+ throw(css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException,
+ cssu::RuntimeException);
+ virtual void SAL_CALL removePropertyChangeListener(
+ const ::rtl::OUString& rsPropertyName,
+ const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener)
+ throw(css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException,
+ cssu::RuntimeException);
+ virtual void SAL_CALL addVetoableChangeListener(
+ const ::rtl::OUString& rsPropertyName,
+ const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener)
+ throw(css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException,
+ cssu::RuntimeException);
+ virtual void SAL_CALL removeVetoableChangeListener(
+ const ::rtl::OUString& rsPropertyName,
+ const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener)
+ throw(css::beans::UnknownPropertyException,
+ css::lang::WrappedTargetException,
+ cssu::RuntimeException);
+
+ // beans::XPropertySetInfo
+ virtual cssu::Sequence<css::beans::Property> SAL_CALL getProperties (void)
+ throw(cssu::RuntimeException);
+ virtual css::beans::Property SAL_CALL getPropertyByName (const ::rtl::OUString& rsName)
+ throw(css::beans::UnknownPropertyException,
+ cssu::RuntimeException);
+ virtual sal_Bool SAL_CALL hasPropertyByName (const ::rtl::OUString& rsName)
+ throw(cssu::RuntimeException);
+
+private:
+ static ::rtl::Reference<Theme> mpInstance;
+ static Theme& GetCurrentTheme (void);
+
+ ::std::vector<Image> maImages;
+ ::std::vector<Color> maColors;
+ ::std::vector<Paint> maPaints;
+ ::std::vector<sal_Int32> maIntegers;
+ ::std::vector<bool> maBooleans;
+ ::std::vector<Rectangle> maRectangles;
+ bool mbIsHighContrastMode;
+ bool mbIsHighContrastModeSetManually;
+
+ typedef ::boost::unordered_map<rtl::OUString,ThemeItem, rtl::OUStringHash> PropertyNameToIdMap;
+ PropertyNameToIdMap maPropertyNameToIdMap;
+ typedef ::std::vector<rtl::OUString> PropertyIdToNameMap;
+ PropertyIdToNameMap maPropertyIdToNameMap;
+ typedef ::std::vector<cssu::Any> RawValueContainer;
+ RawValueContainer maRawValues;
+
+ typedef ::std::vector<cssu::Reference<css::beans::XPropertyChangeListener> > ChangeListenerContainer;
+ typedef ::std::map<ThemeItem,ChangeListenerContainer> ChangeListeners;
+ ChangeListeners maChangeListeners;
+ typedef ::std::vector<cssu::Reference<css::beans::XVetoableChangeListener> > VetoableListenerContainer;
+ typedef ::std::map<ThemeItem,VetoableListenerContainer> VetoableListeners;
+ VetoableListeners maVetoableListeners;
+
+ enum PropertyType
+ {
+ PT_Image,
+ PT_Color,
+ PT_Paint,
+ PT_Integer,
+ PT_Boolean,
+ PT_Rectangle,
+ PT_Invalid
+ };
+
+ void SetupPropertyMaps (void);
+ void InitializeTheme (void);
+ void UpdateTheme (void);
+ static PropertyType GetPropertyType (const ThemeItem eItem);
+ static cssu::Type 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);
+ bool DoVetoableListenersVeto (
+ const VetoableListenerContainer* pListeners,
+ const css::beans::PropertyChangeEvent& rEvent) const;
+ void BroadcastPropertyChange (
+ const ChangeListenerContainer* pListeners,
+ const css::beans::PropertyChangeEvent& rEvent) const;
+ void ProcessNewValue (
+ const cssu::Any& rValue,
+ const ThemeItem eItem,
+ const PropertyType eType);
+};
+
+
+
+} } // end of namespace sfx2::sidebar
+
+#endif