| /************************************************************** |
| * |
| * 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. |
| * |
| *************************************************************/ |
| |
| #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 <hash_map> |
| #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_CloseIndicator, |
| |
| __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 ::std::hash_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 |