1ff12d537SAndre Fischer /************************************************************** 2*9f759e1cSMatthias Seidel * 3ff12d537SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 4ff12d537SAndre Fischer * or more contributor license agreements. See the NOTICE file 5ff12d537SAndre Fischer * distributed with this work for additional information 6ff12d537SAndre Fischer * regarding copyright ownership. The ASF licenses this file 7ff12d537SAndre Fischer * to you under the Apache License, Version 2.0 (the 8ff12d537SAndre Fischer * "License"); you may not use this file except in compliance 9ff12d537SAndre Fischer * with the License. You may obtain a copy of the License at 10*9f759e1cSMatthias Seidel * 11ff12d537SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 12*9f759e1cSMatthias Seidel * 13ff12d537SAndre Fischer * Unless required by applicable law or agreed to in writing, 14ff12d537SAndre Fischer * software distributed under the License is distributed on an 15ff12d537SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16ff12d537SAndre Fischer * KIND, either express or implied. See the License for the 17ff12d537SAndre Fischer * specific language governing permissions and limitations 18ff12d537SAndre Fischer * under the License. 19*9f759e1cSMatthias Seidel * 20ff12d537SAndre Fischer *************************************************************/ 21ff12d537SAndre Fischer 22*9f759e1cSMatthias Seidel 23*9f759e1cSMatthias Seidel 24ff12d537SAndre Fischer #include "precompiled_sfx2.hxx" 25ff12d537SAndre Fischer 26b9e67834SAndre Fischer #include "sfx2/sidebar/Theme.hxx" 27ff12d537SAndre Fischer #include "Paint.hxx" 28ff12d537SAndre Fischer #include "SidebarResource.hxx" 29f35c6d02SAndre Fischer #include "sfx2/sidebar/Tools.hxx" 30ff12d537SAndre Fischer 31b9e67834SAndre Fischer #include <tools/svborder.hxx> 32ff12d537SAndre Fischer #include <tools/rc.hxx> 33ff12d537SAndre Fischer #include <vcl/svapp.hxx> 34ff12d537SAndre Fischer 35b9e67834SAndre Fischer using namespace css; 36b9e67834SAndre Fischer using namespace cssu; 37ff12d537SAndre Fischer 38ff12d537SAndre Fischer 39b9e67834SAndre Fischer namespace sfx2 { namespace sidebar { 40ff12d537SAndre Fischer 41b9e67834SAndre Fischer ::rtl::Reference<Theme> Theme::mpInstance; 42ff12d537SAndre Fischer 43ff12d537SAndre Fischer 44b9e67834SAndre Fischer Theme& Theme::GetCurrentTheme (void) 45b9e67834SAndre Fischer { 46*9f759e1cSMatthias Seidel if ( ! mpInstance.is()) 47*9f759e1cSMatthias Seidel { 48*9f759e1cSMatthias Seidel mpInstance.set(new Theme()); 49*9f759e1cSMatthias Seidel mpInstance->InitializeTheme(); 50*9f759e1cSMatthias Seidel } 51*9f759e1cSMatthias Seidel return *mpInstance; 52b9e67834SAndre Fischer } 53ff12d537SAndre Fischer 54ff12d537SAndre Fischer 55b9e67834SAndre Fischer Theme::Theme (void) 56*9f759e1cSMatthias Seidel : ThemeInterfaceBase(m_aMutex), 57*9f759e1cSMatthias Seidel maImages(), 58*9f759e1cSMatthias Seidel maColors(), 59*9f759e1cSMatthias Seidel maPaints(), 60*9f759e1cSMatthias Seidel maIntegers(), 61*9f759e1cSMatthias Seidel maBooleans(), 62*9f759e1cSMatthias Seidel mbIsHighContrastMode(Application::GetSettings().GetStyleSettings().GetHighContrastMode()), 63*9f759e1cSMatthias Seidel mbIsHighContrastModeSetManually(false), 64*9f759e1cSMatthias Seidel maPropertyNameToIdMap(), 65*9f759e1cSMatthias Seidel maPropertyIdToNameMap(), 66*9f759e1cSMatthias Seidel maRawValues(), 67*9f759e1cSMatthias Seidel maChangeListeners(), 68*9f759e1cSMatthias Seidel maVetoableListeners() 69ff12d537SAndre Fischer 70ff12d537SAndre Fischer { 71*9f759e1cSMatthias Seidel SetupPropertyMaps(); 72ff12d537SAndre Fischer } 73ff12d537SAndre Fischer 74ff12d537SAndre Fischer 75b9e67834SAndre Fischer Theme::~Theme (void) 76ff12d537SAndre Fischer { 77ff12d537SAndre Fischer } 78ff12d537SAndre Fischer 79ff12d537SAndre Fischer 80b9e67834SAndre Fischer Image Theme::GetImage (const ThemeItem eItem) 81ff12d537SAndre Fischer { 82*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 83*9f759e1cSMatthias Seidel OSL_ASSERT(eType==PT_Image); 84*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex(eItem, eType)); 85*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 86*9f759e1cSMatthias Seidel return rTheme.maImages[nIndex]; 87ff12d537SAndre Fischer } 88ff12d537SAndre Fischer 89ff12d537SAndre Fischer 90b9e67834SAndre Fischer Color Theme::GetColor (const ThemeItem eItem) 91ff12d537SAndre Fischer { 92*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 93*9f759e1cSMatthias Seidel OSL_ASSERT(eType==PT_Color || eType==PT_Paint); 94*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex(eItem, eType)); 95*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 96*9f759e1cSMatthias Seidel if (eType == PT_Color) 97*9f759e1cSMatthias Seidel return rTheme.maColors[nIndex]; 98*9f759e1cSMatthias Seidel else if (eType == PT_Paint) 99*9f759e1cSMatthias Seidel return rTheme.maPaints[nIndex].GetColor(); 100*9f759e1cSMatthias Seidel else 101*9f759e1cSMatthias Seidel return COL_WHITE; 102ff12d537SAndre Fischer } 103ff12d537SAndre Fischer 104ff12d537SAndre Fischer 105b9e67834SAndre Fischer const Paint& Theme::GetPaint (const ThemeItem eItem) 106ff12d537SAndre Fischer { 107*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 108*9f759e1cSMatthias Seidel OSL_ASSERT(eType==PT_Paint); 109*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex(eItem, eType)); 110*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 111*9f759e1cSMatthias Seidel return rTheme.maPaints[nIndex]; 112ff12d537SAndre Fischer } 113ff12d537SAndre Fischer 114ff12d537SAndre Fischer 1157a32b0c8SAndre Fischer const Wallpaper Theme::GetWallpaper (const ThemeItem eItem) 1167a32b0c8SAndre Fischer { 117*9f759e1cSMatthias Seidel return GetPaint(eItem).GetWallpaper(); 1187a32b0c8SAndre Fischer } 1197a32b0c8SAndre Fischer 1207a32b0c8SAndre Fischer 121b9e67834SAndre Fischer sal_Int32 Theme::GetInteger (const ThemeItem eItem) 122ff12d537SAndre Fischer { 123*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 124*9f759e1cSMatthias Seidel OSL_ASSERT(eType==PT_Integer); 125*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex(eItem, eType)); 126*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 127*9f759e1cSMatthias Seidel return rTheme.maIntegers[nIndex]; 128ff12d537SAndre Fischer } 129ff12d537SAndre Fischer 130ff12d537SAndre Fischer 131b9e67834SAndre Fischer bool Theme::GetBoolean (const ThemeItem eItem) 132ff12d537SAndre Fischer { 133*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 134*9f759e1cSMatthias Seidel OSL_ASSERT(eType==PT_Boolean); 135*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex(eItem, eType)); 136*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 137*9f759e1cSMatthias Seidel return rTheme.maBooleans[nIndex]; 138ff12d537SAndre Fischer } 139ff12d537SAndre Fischer 140ff12d537SAndre Fischer 14195a18594SAndre Fischer Rectangle Theme::GetRectangle (const ThemeItem eItem) 14295a18594SAndre Fischer { 143*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 144*9f759e1cSMatthias Seidel OSL_ASSERT(eType==PT_Rectangle); 145*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex(eItem, eType)); 146*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 147*9f759e1cSMatthias Seidel return rTheme.maRectangles[nIndex]; 14895a18594SAndre Fischer } 14995a18594SAndre Fischer 15095a18594SAndre Fischer 151b9e67834SAndre Fischer bool Theme::IsHighContrastMode (void) 152ff12d537SAndre Fischer { 153*9f759e1cSMatthias Seidel const Theme& rTheme (GetCurrentTheme()); 154*9f759e1cSMatthias Seidel return rTheme.mbIsHighContrastMode; 155ff12d537SAndre Fischer } 156ff12d537SAndre Fischer 157ff12d537SAndre Fischer 158b9e67834SAndre Fischer void Theme::HandleDataChange (void) 159ff12d537SAndre Fischer { 160*9f759e1cSMatthias Seidel Theme& rTheme (GetCurrentTheme()); 16195a18594SAndre Fischer 162*9f759e1cSMatthias Seidel if ( ! rTheme.mbIsHighContrastModeSetManually) 163*9f759e1cSMatthias Seidel { 164*9f759e1cSMatthias Seidel // Do not modify mbIsHighContrastMode when it was manually set. 165*9f759e1cSMatthias Seidel GetCurrentTheme().mbIsHighContrastMode = Application::GetSettings().GetStyleSettings().GetHighContrastMode(); 166*9f759e1cSMatthias Seidel rTheme.maRawValues[Bool_IsHighContrastModeActive] = Any(GetCurrentTheme().mbIsHighContrastMode); 167*9f759e1cSMatthias Seidel } 16895a18594SAndre Fischer 169*9f759e1cSMatthias Seidel GetCurrentTheme().UpdateTheme(); 170ff12d537SAndre Fischer } 171ff12d537SAndre Fischer 172ff12d537SAndre Fischer 173b9e67834SAndre Fischer void Theme::InitializeTheme (void) 17495a18594SAndre Fischer { 175*9f759e1cSMatthias Seidel setPropertyValue( 176*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Bool_UseSymphonyIcons], 177*9f759e1cSMatthias Seidel Any(false)); 178*9f759e1cSMatthias Seidel setPropertyValue( 179*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Bool_UseSystemColors], 180*9f759e1cSMatthias Seidel Any(false)); 18195a18594SAndre Fischer } 18295a18594SAndre Fischer 18395a18594SAndre Fischer 18495a18594SAndre Fischer void Theme::UpdateTheme (void) 185ff12d537SAndre Fischer { 186*9f759e1cSMatthias Seidel SidebarResource aLocalResource; 187b9e67834SAndre Fischer 188*9f759e1cSMatthias Seidel try 189*9f759e1cSMatthias Seidel { 190*9f759e1cSMatthias Seidel const StyleSettings& rStyle (Application::GetSettings().GetStyleSettings()); 191*9f759e1cSMatthias Seidel const bool bUseSystemColors (GetBoolean(Bool_UseSystemColors)); 19295a18594SAndre Fischer 19395a18594SAndre Fischer #define Alternatives(n,hc,sys) (mbIsHighContrastMode ? hc : (bUseSystemColors ? sys : n)) 19495a18594SAndre Fischer 195*9f759e1cSMatthias Seidel Color aBaseBackgroundColor (rStyle.GetDialogColor()); 196*9f759e1cSMatthias Seidel // UX says this should be a little brighter, but that looks off when compared to the other windows. 197*9f759e1cSMatthias Seidel //aBaseBackgroundColor.IncreaseLuminance(7); 198*9f759e1cSMatthias Seidel Color aBorderColor (aBaseBackgroundColor); 199*9f759e1cSMatthias Seidel aBorderColor.DecreaseLuminance(15); 200*9f759e1cSMatthias Seidel Color aSecondColor (aBaseBackgroundColor); 201*9f759e1cSMatthias Seidel aSecondColor.DecreaseLuminance(15); 202*9f759e1cSMatthias Seidel 203*9f759e1cSMatthias Seidel setPropertyValue( 204*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_DeckBackground], 205*9f759e1cSMatthias Seidel Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); 206*9f759e1cSMatthias Seidel 207*9f759e1cSMatthias Seidel setPropertyValue( 208*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_DeckTitleBarBackground], 209*9f759e1cSMatthias Seidel Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); 210*9f759e1cSMatthias Seidel setPropertyValue( 211*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckLeftPadding], 212*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 213*9f759e1cSMatthias Seidel setPropertyValue( 214*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckTopPadding], 215*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 216*9f759e1cSMatthias Seidel setPropertyValue( 217*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckRightPadding], 218*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 219*9f759e1cSMatthias Seidel setPropertyValue( 220*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckBottomPadding], 221*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 222*9f759e1cSMatthias Seidel setPropertyValue( 223*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckBorderSize], 224*9f759e1cSMatthias Seidel Any(sal_Int32(1))); 225*9f759e1cSMatthias Seidel setPropertyValue( 226*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckSeparatorHeight], 227*9f759e1cSMatthias Seidel Any(sal_Int32(1))); 228*9f759e1cSMatthias Seidel setPropertyValue( 229*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_ButtonCornerRadius], 230*9f759e1cSMatthias Seidel Any(sal_Int32(3))); 231*9f759e1cSMatthias Seidel setPropertyValue( 232*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_DeckTitleFont], 233*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetFontColor().GetRGBColor()))); 234*9f759e1cSMatthias Seidel setPropertyValue( 235*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_DeckTitleBarHeight], 236*9f759e1cSMatthias Seidel Any(sal_Int32(Alternatives( 237*9f759e1cSMatthias Seidel 26, 238*9f759e1cSMatthias Seidel 26, 239*9f759e1cSMatthias Seidel rStyle.GetFloatTitleHeight())))); 240*9f759e1cSMatthias Seidel setPropertyValue( 241*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_PanelBackground], 242*9f759e1cSMatthias Seidel Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); 243*9f759e1cSMatthias Seidel 244*9f759e1cSMatthias Seidel setPropertyValue( 245*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_PanelTitleBarBackground], 246*9f759e1cSMatthias Seidel Any(Tools::VclToAwtGradient(Gradient( 247*9f759e1cSMatthias Seidel GRADIENT_LINEAR, 248*9f759e1cSMatthias Seidel aSecondColor.GetRGBColor(), 249*9f759e1cSMatthias Seidel aBaseBackgroundColor.GetRGBColor() 250*9f759e1cSMatthias Seidel )))); 251*9f759e1cSMatthias Seidel setPropertyValue( 252*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_PanelTitleFont], 253*9f759e1cSMatthias Seidel Any(sal_Int32(mbIsHighContrastMode ? 0x00ff00 : 0x262626))); 254*9f759e1cSMatthias Seidel setPropertyValue( 255*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_PanelTitleBarHeight], 256*9f759e1cSMatthias Seidel Any(sal_Int32(Alternatives( 257*9f759e1cSMatthias Seidel 26, 258*9f759e1cSMatthias Seidel 26, 259*9f759e1cSMatthias Seidel rStyle.GetTitleHeight())))); 260*9f759e1cSMatthias Seidel setPropertyValue( 261*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_TabBarBackground], 262*9f759e1cSMatthias Seidel Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); 263*9f759e1cSMatthias Seidel setPropertyValue( 264*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabBarLeftPadding], 265*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 266*9f759e1cSMatthias Seidel setPropertyValue( 267*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabBarTopPadding], 268*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 269*9f759e1cSMatthias Seidel setPropertyValue( 270*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabBarRightPadding], 271*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 272*9f759e1cSMatthias Seidel setPropertyValue( 273*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabBarBottomPadding], 274*9f759e1cSMatthias Seidel Any(sal_Int32(2))); 275*9f759e1cSMatthias Seidel 276*9f759e1cSMatthias Seidel setPropertyValue( 277*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabMenuPadding], 278*9f759e1cSMatthias Seidel Any(sal_Int32(6))); 279*9f759e1cSMatthias Seidel setPropertyValue( 280*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_TabMenuSeparator], 281*9f759e1cSMatthias Seidel Any(sal_Int32(aBorderColor.GetRGBColor()))); 282*9f759e1cSMatthias Seidel setPropertyValue( 283*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabMenuSeparatorPadding], 284*9f759e1cSMatthias Seidel Any(sal_Int32(7))); 285*9f759e1cSMatthias Seidel 286*9f759e1cSMatthias Seidel setPropertyValue( 287*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabItemWidth], 288*9f759e1cSMatthias Seidel Any(sal_Int32(32))); 289*9f759e1cSMatthias Seidel setPropertyValue( 290*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Int_TabItemHeight], 291*9f759e1cSMatthias Seidel Any(sal_Int32(32))); 292*9f759e1cSMatthias Seidel setPropertyValue( 293*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_TabItemBorder], 294*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetActiveBorderColor().GetRGBColor()))); 295*9f759e1cSMatthias Seidel // mbIsHighContrastMode ? 0x00ff00 : 0xbfbfbf))); 296*9f759e1cSMatthias Seidel 297*9f759e1cSMatthias Seidel setPropertyValue( 298*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_DropDownBackground], 299*9f759e1cSMatthias Seidel Any(sal_Int32(aBaseBackgroundColor.GetRGBColor()))); 300*9f759e1cSMatthias Seidel setPropertyValue( 301*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_DropDownBorder], 302*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetActiveBorderColor().GetRGBColor()))); 303*9f759e1cSMatthias Seidel 304*9f759e1cSMatthias Seidel setPropertyValue( 305*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_Highlight], 306*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetHighlightColor().GetRGBColor()))); 307*9f759e1cSMatthias Seidel setPropertyValue( 308*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Color_HighlightText], 309*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetHighlightTextColor().GetRGBColor()))); 310*9f759e1cSMatthias Seidel 311*9f759e1cSMatthias Seidel setPropertyValue( 312*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_TabItemBackgroundNormal], 313*9f759e1cSMatthias Seidel Any()); 314*9f759e1cSMatthias Seidel setPropertyValue( 315*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_TabItemBackgroundHighlight], 316*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetActiveTabColor().GetRGBColor()))); 317*9f759e1cSMatthias Seidel // mbIsHighContrastMode ? 0x000000 : 0x00ffffff))); 318*9f759e1cSMatthias Seidel 319*9f759e1cSMatthias Seidel setPropertyValue( 320*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_HorizontalBorder], 321*9f759e1cSMatthias Seidel Any(sal_Int32(aBorderColor.GetRGBColor()))); 322*9f759e1cSMatthias Seidel // mbIsHighContrastMode ? 0x00ff00 : 0xe4e4e4))); 323*9f759e1cSMatthias Seidel setPropertyValue( 324*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_VerticalBorder], 325*9f759e1cSMatthias Seidel Any(sal_Int32(aBorderColor.GetRGBColor()))); 326*9f759e1cSMatthias Seidel // mbIsHighContrastMode ? 0x00ff00 : 0xe4e4e4))); 327*9f759e1cSMatthias Seidel 328*9f759e1cSMatthias Seidel setPropertyValue( 329*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_Grip], 330*9f759e1cSMatthias Seidel Any( 331*9f759e1cSMatthias Seidel mbIsHighContrastMode 332*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/sfx2/res/grip_hc.png") 333*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/sfx2/res/grip.png"))); 334*9f759e1cSMatthias Seidel setPropertyValue( 335*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_Expand], 336*9f759e1cSMatthias Seidel Any( 337*9f759e1cSMatthias Seidel mbIsHighContrastMode 338*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/res/plus_sch.png") 339*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/res/plus.png"))); 340*9f759e1cSMatthias Seidel setPropertyValue( 341*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_Collapse], 342*9f759e1cSMatthias Seidel Any( 343*9f759e1cSMatthias Seidel mbIsHighContrastMode 344*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/res/minus_sch.png") 345*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/res/minus.png"))); 346*9f759e1cSMatthias Seidel setPropertyValue( 347*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_TabBarMenu], 348*9f759e1cSMatthias Seidel Any( 349*9f759e1cSMatthias Seidel mbIsHighContrastMode 350*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/sfx2/res/symphony/open_more_hc.png") 351*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/sfx2/res/symphony/open_more.png"))); 352*9f759e1cSMatthias Seidel setPropertyValue( 353*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_PanelMenu], 354*9f759e1cSMatthias Seidel Any( 355*9f759e1cSMatthias Seidel mbIsHighContrastMode 356*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/sfx2/res/symphony/morebutton_h.png") 357*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/sfx2/res/symphony/morebutton.png"))); 358*9f759e1cSMatthias Seidel setPropertyValue( 359*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_Closer], 360*9f759e1cSMatthias Seidel Any( 361*9f759e1cSMatthias Seidel mbIsHighContrastMode 362*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/sfx2/res/closedochc.png") 363*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/sfx2/res/closedoc.png"))); 364*9f759e1cSMatthias Seidel setPropertyValue( 365*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_CloseIndicator], 366*9f759e1cSMatthias Seidel Any( 367*9f759e1cSMatthias Seidel mbIsHighContrastMode 368*9f759e1cSMatthias Seidel ? A2S("private:graphicrepository/res/commandimagelist/lch_decrementlevel.png") 369*9f759e1cSMatthias Seidel : A2S("private:graphicrepository/res/commandimagelist/lc_decrementlevel.png"))); 370*9f759e1cSMatthias Seidel setPropertyValue( 371*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Image_ToolBoxItemSeparator], 372*9f759e1cSMatthias Seidel Any( 373*9f759e1cSMatthias Seidel A2S("private:graphicrepository/sfx2/res/separator.png"))); 374*9f759e1cSMatthias Seidel 375*9f759e1cSMatthias Seidel // ToolBox 376*9f759e1cSMatthias Seidel 377*9f759e1cSMatthias Seidel /* 378*9f759e1cSMatthias Seidel // Separator style 379*9f759e1cSMatthias Seidel setPropertyValue( 380*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBackground], 381*9f759e1cSMatthias Seidel Any(sal_Int32(rStyle.GetMenuColor().GetRGBColor()))); 382*9f759e1cSMatthias Seidel setPropertyValue( 383*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBorderTopLeft], 384*9f759e1cSMatthias Seidel Any()); 385*9f759e1cSMatthias Seidel setPropertyValue( 386*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBorderCenterCorners], 387*9f759e1cSMatthias Seidel Any()); 388*9f759e1cSMatthias Seidel setPropertyValue( 389*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBorderBottomRight], 390*9f759e1cSMatthias Seidel Any()); 391*9f759e1cSMatthias Seidel setPropertyValue( 392*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Rect_ToolBoxPadding], 393*9f759e1cSMatthias Seidel Any(awt::Rectangle(2,2,2,2))); 394*9f759e1cSMatthias Seidel setPropertyValue( 395*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Rect_ToolBoxBorder], 396*9f759e1cSMatthias Seidel Any(awt::Rectangle(0,0,0,0))); 397*9f759e1cSMatthias Seidel setPropertyValue( 398*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Bool_UseToolBoxItemSeparator], 399*9f759e1cSMatthias Seidel Any(true)); 400*9f759e1cSMatthias Seidel 401*9f759e1cSMatthias Seidel */ 402*9f759e1cSMatthias Seidel 403*9f759e1cSMatthias Seidel // Gradient style 404*9f759e1cSMatthias Seidel Color aGradientStop2 (aBaseBackgroundColor); 405*9f759e1cSMatthias Seidel aGradientStop2.IncreaseLuminance(17); 406*9f759e1cSMatthias Seidel Color aToolBoxBorderColor (aBaseBackgroundColor); 407*9f759e1cSMatthias Seidel aToolBoxBorderColor.DecreaseLuminance(12); 408*9f759e1cSMatthias Seidel setPropertyValue( 409*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBackground], 410*9f759e1cSMatthias Seidel Any(Tools::VclToAwtGradient(Gradient( 411*9f759e1cSMatthias Seidel GRADIENT_LINEAR, 412*9f759e1cSMatthias Seidel aBaseBackgroundColor.GetRGBColor(), 413*9f759e1cSMatthias Seidel aGradientStop2.GetRGBColor() 414*9f759e1cSMatthias Seidel )))); 415*9f759e1cSMatthias Seidel setPropertyValue( 416*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBorderTopLeft], 417*9f759e1cSMatthias Seidel mbIsHighContrastMode 418*9f759e1cSMatthias Seidel ? Any(util::Color(sal_uInt32(0x00ff00))) 419*9f759e1cSMatthias Seidel : Any(util::Color(aToolBoxBorderColor.GetRGBColor()))); 420*9f759e1cSMatthias Seidel setPropertyValue( 421*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBorderCenterCorners], 422*9f759e1cSMatthias Seidel mbIsHighContrastMode 423*9f759e1cSMatthias Seidel ? Any(util::Color(sal_uInt32(0x00ff00))) 424*9f759e1cSMatthias Seidel : Any(util::Color(aToolBoxBorderColor.GetRGBColor()))); 425*9f759e1cSMatthias Seidel setPropertyValue( 426*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Paint_ToolBoxBorderBottomRight], 427*9f759e1cSMatthias Seidel mbIsHighContrastMode 428*9f759e1cSMatthias Seidel ? Any(util::Color(sal_uInt32(0x00ff00))) 429*9f759e1cSMatthias Seidel : Any(util::Color(aToolBoxBorderColor.GetRGBColor()))); 430*9f759e1cSMatthias Seidel setPropertyValue( 431*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Rect_ToolBoxPadding], 432*9f759e1cSMatthias Seidel Any(awt::Rectangle(2,2,2,2))); 433*9f759e1cSMatthias Seidel setPropertyValue( 434*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Rect_ToolBoxBorder], 435*9f759e1cSMatthias Seidel Any(awt::Rectangle(1,1,1,1))); 436*9f759e1cSMatthias Seidel setPropertyValue( 437*9f759e1cSMatthias Seidel maPropertyIdToNameMap[Bool_UseToolBoxItemSeparator], 438*9f759e1cSMatthias Seidel Any(false)); 439*9f759e1cSMatthias Seidel } 440*9f759e1cSMatthias Seidel catch(beans::UnknownPropertyException& rException) 441*9f759e1cSMatthias Seidel { 442*9f759e1cSMatthias Seidel OSL_TRACE("unknown property: %s", 443*9f759e1cSMatthias Seidel OUStringToOString( 444*9f759e1cSMatthias Seidel rException.Message, 445*9f759e1cSMatthias Seidel RTL_TEXTENCODING_ASCII_US).getStr()); 446*9f759e1cSMatthias Seidel OSL_ASSERT(false); 447*9f759e1cSMatthias Seidel } 448ff12d537SAndre Fischer } 449ff12d537SAndre Fischer 450ff12d537SAndre Fischer 451b9e67834SAndre Fischer void SAL_CALL Theme::disposing (void) 452ff12d537SAndre Fischer { 453*9f759e1cSMatthias Seidel ChangeListeners aListeners; 454*9f759e1cSMatthias Seidel maChangeListeners.swap(aListeners); 455*9f759e1cSMatthias Seidel 456*9f759e1cSMatthias Seidel const lang::EventObject aEvent (static_cast<XWeak*>(this)); 457*9f759e1cSMatthias Seidel 458*9f759e1cSMatthias Seidel for (ChangeListeners::const_iterator 459*9f759e1cSMatthias Seidel iContainer(maChangeListeners.begin()), 460*9f759e1cSMatthias Seidel iContainerEnd(maChangeListeners.end()); 461*9f759e1cSMatthias Seidel iContainerEnd!=iContainerEnd; 462*9f759e1cSMatthias Seidel ++iContainerEnd) 463*9f759e1cSMatthias Seidel { 464*9f759e1cSMatthias Seidel for (ChangeListenerContainer::const_iterator 465*9f759e1cSMatthias Seidel iListener(iContainer->second.begin()), 466*9f759e1cSMatthias Seidel iEnd(iContainer->second.end()); 467*9f759e1cSMatthias Seidel iListener!=iEnd; 468*9f759e1cSMatthias Seidel ++iListener) 469*9f759e1cSMatthias Seidel { 470*9f759e1cSMatthias Seidel try 471*9f759e1cSMatthias Seidel { 472*9f759e1cSMatthias Seidel (*iListener)->disposing(aEvent); 473*9f759e1cSMatthias Seidel } 474*9f759e1cSMatthias Seidel catch(const Exception&) 475*9f759e1cSMatthias Seidel { 476*9f759e1cSMatthias Seidel } 477*9f759e1cSMatthias Seidel } 478*9f759e1cSMatthias Seidel } 479ff12d537SAndre Fischer } 480ff12d537SAndre Fischer 481ff12d537SAndre Fischer 482b9e67834SAndre Fischer Reference<beans::XPropertySet> Theme::GetPropertySet (void) 483ff12d537SAndre Fischer { 484*9f759e1cSMatthias Seidel return Reference<beans::XPropertySet>(static_cast<XWeak*>(&GetCurrentTheme()), UNO_QUERY); 485ff12d537SAndre Fischer } 486ff12d537SAndre Fischer 487ff12d537SAndre Fischer 488b9e67834SAndre Fischer Reference<beans::XPropertySetInfo> SAL_CALL Theme::getPropertySetInfo (void) 489*9f759e1cSMatthias Seidel throw(cssu::RuntimeException) 490ff12d537SAndre Fischer { 491*9f759e1cSMatthias Seidel return Reference<beans::XPropertySetInfo>(this); 492ff12d537SAndre Fischer } 493ff12d537SAndre Fischer 494ff12d537SAndre Fischer 495b9e67834SAndre Fischer void SAL_CALL Theme::setPropertyValue ( 496*9f759e1cSMatthias Seidel const ::rtl::OUString& rsPropertyName, 497*9f759e1cSMatthias Seidel const cssu::Any& rValue) 498*9f759e1cSMatthias Seidel throw(cssu::RuntimeException) 499ff12d537SAndre Fischer { 500*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 501*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 502*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(rsPropertyName, NULL); 503*9f759e1cSMatthias Seidel 504*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 505*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 506*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(rsPropertyName, NULL); 507*9f759e1cSMatthias Seidel 508*9f759e1cSMatthias Seidel const ThemeItem eItem (iId->second); 509*9f759e1cSMatthias Seidel 510*9f759e1cSMatthias Seidel if (rValue == maRawValues[eItem]) 511*9f759e1cSMatthias Seidel { 512*9f759e1cSMatthias Seidel // Value is not different from the one in the property 513*9f759e1cSMatthias Seidel // set => nothing to do. 514*9f759e1cSMatthias Seidel return; 515*9f759e1cSMatthias Seidel } 516*9f759e1cSMatthias Seidel 517*9f759e1cSMatthias Seidel const Any aOldValue (maRawValues[eItem]); 518*9f759e1cSMatthias Seidel 519*9f759e1cSMatthias Seidel const beans::PropertyChangeEvent aEvent( 520*9f759e1cSMatthias Seidel static_cast<XWeak*>(this), 521*9f759e1cSMatthias Seidel rsPropertyName, 522*9f759e1cSMatthias Seidel sal_False, 523*9f759e1cSMatthias Seidel eItem, 524*9f759e1cSMatthias Seidel aOldValue, 525*9f759e1cSMatthias Seidel rValue); 526*9f759e1cSMatthias Seidel 527*9f759e1cSMatthias Seidel if (DoVetoableListenersVeto(GetVetoableListeners(__AnyItem, false), aEvent)) 528*9f759e1cSMatthias Seidel return; 529*9f759e1cSMatthias Seidel if (DoVetoableListenersVeto(GetVetoableListeners(eItem, false), aEvent)) 530*9f759e1cSMatthias Seidel return; 531*9f759e1cSMatthias Seidel 532*9f759e1cSMatthias Seidel maRawValues[eItem] = rValue; 533*9f759e1cSMatthias Seidel ProcessNewValue(rValue, eItem, eType); 534*9f759e1cSMatthias Seidel 535*9f759e1cSMatthias Seidel BroadcastPropertyChange(GetChangeListeners(__AnyItem, false), aEvent); 536*9f759e1cSMatthias Seidel BroadcastPropertyChange(GetChangeListeners(eItem, false), aEvent); 537ff12d537SAndre Fischer } 538ff12d537SAndre Fischer 539ff12d537SAndre Fischer 540b9e67834SAndre Fischer Any SAL_CALL Theme::getPropertyValue ( 541*9f759e1cSMatthias Seidel const ::rtl::OUString& rsPropertyName) 542*9f759e1cSMatthias Seidel throw(css::beans::UnknownPropertyException, 543*9f759e1cSMatthias Seidel css::lang::WrappedTargetException, 544*9f759e1cSMatthias Seidel cssu::RuntimeException) 545ff12d537SAndre Fischer { 546*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 547*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 548*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 549b9e67834SAndre Fischer 550*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 551*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 552*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 553b9e67834SAndre Fischer 554*9f759e1cSMatthias Seidel const ThemeItem eItem (iId->second); 555b9e67834SAndre Fischer 556*9f759e1cSMatthias Seidel return maRawValues[eItem]; 557ff12d537SAndre Fischer } 558ff12d537SAndre Fischer 559ff12d537SAndre Fischer 560b9e67834SAndre Fischer void SAL_CALL Theme::addPropertyChangeListener( 561*9f759e1cSMatthias Seidel const ::rtl::OUString& rsPropertyName, 562*9f759e1cSMatthias Seidel const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener) 563*9f759e1cSMatthias Seidel throw(css::beans::UnknownPropertyException, 564*9f759e1cSMatthias Seidel css::lang::WrappedTargetException, 565*9f759e1cSMatthias Seidel cssu::RuntimeException) 566ff12d537SAndre Fischer { 567*9f759e1cSMatthias Seidel ThemeItem eItem (__AnyItem); 568*9f759e1cSMatthias Seidel if (rsPropertyName.getLength() > 0) 569*9f759e1cSMatthias Seidel { 570*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 571*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 572*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 573*9f759e1cSMatthias Seidel 574*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 575*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 576*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 577*9f759e1cSMatthias Seidel 578*9f759e1cSMatthias Seidel eItem = iId->second; 579*9f759e1cSMatthias Seidel } 580*9f759e1cSMatthias Seidel ChangeListenerContainer* pListeners = GetChangeListeners(eItem, true); 581*9f759e1cSMatthias Seidel if (pListeners != NULL) 582*9f759e1cSMatthias Seidel pListeners->push_back(rxListener); 583ff12d537SAndre Fischer } 584ff12d537SAndre Fischer 585ff12d537SAndre Fischer 586b9e67834SAndre Fischer void SAL_CALL Theme::removePropertyChangeListener( 587*9f759e1cSMatthias Seidel const ::rtl::OUString& rsPropertyName, 588*9f759e1cSMatthias Seidel const cssu::Reference<css::beans::XPropertyChangeListener>& rxListener) 589*9f759e1cSMatthias Seidel throw(css::beans::UnknownPropertyException, 590*9f759e1cSMatthias Seidel css::lang::WrappedTargetException, 591*9f759e1cSMatthias Seidel cssu::RuntimeException) 592ff12d537SAndre Fischer { 593*9f759e1cSMatthias Seidel ThemeItem eItem (__AnyItem); 594*9f759e1cSMatthias Seidel if (rsPropertyName.getLength() > 0) 595*9f759e1cSMatthias Seidel { 596*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 597*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 598*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 599*9f759e1cSMatthias Seidel 600*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 601*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 602*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 603*9f759e1cSMatthias Seidel 604*9f759e1cSMatthias Seidel eItem = iId->second; 605*9f759e1cSMatthias Seidel } 606*9f759e1cSMatthias Seidel ChangeListenerContainer* pContainer = GetChangeListeners(eItem, false); 607*9f759e1cSMatthias Seidel if (pContainer != NULL) 608*9f759e1cSMatthias Seidel { 609*9f759e1cSMatthias Seidel ChangeListenerContainer::iterator iListener (::std::find(pContainer->begin(), pContainer->end(), rxListener)); 610*9f759e1cSMatthias Seidel if (iListener != pContainer->end()) 611*9f759e1cSMatthias Seidel { 612*9f759e1cSMatthias Seidel pContainer->erase(iListener); 613*9f759e1cSMatthias Seidel 614*9f759e1cSMatthias Seidel // Remove the listener container when empty. 615*9f759e1cSMatthias Seidel if (pContainer->empty()) 616*9f759e1cSMatthias Seidel maChangeListeners.erase(eItem); 617*9f759e1cSMatthias Seidel } 618*9f759e1cSMatthias Seidel } 619ff12d537SAndre Fischer } 620ff12d537SAndre Fischer 621ff12d537SAndre Fischer 622b9e67834SAndre Fischer void SAL_CALL Theme::addVetoableChangeListener( 623*9f759e1cSMatthias Seidel const ::rtl::OUString& rsPropertyName, 624*9f759e1cSMatthias Seidel const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener) 625*9f759e1cSMatthias Seidel throw(css::beans::UnknownPropertyException, 626*9f759e1cSMatthias Seidel css::lang::WrappedTargetException, 627*9f759e1cSMatthias Seidel cssu::RuntimeException) 628ff12d537SAndre Fischer { 629*9f759e1cSMatthias Seidel ThemeItem eItem (__AnyItem); 630*9f759e1cSMatthias Seidel if (rsPropertyName.getLength() > 0) 631*9f759e1cSMatthias Seidel { 632*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 633*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 634*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 635*9f759e1cSMatthias Seidel 636*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 637*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 638*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 639*9f759e1cSMatthias Seidel 640*9f759e1cSMatthias Seidel eItem = iId->second; 641*9f759e1cSMatthias Seidel } 642*9f759e1cSMatthias Seidel VetoableListenerContainer* pListeners = GetVetoableListeners(eItem, true); 643*9f759e1cSMatthias Seidel if (pListeners != NULL) 644*9f759e1cSMatthias Seidel pListeners->push_back(rxListener); 645ff12d537SAndre Fischer } 646ff12d537SAndre Fischer 647ff12d537SAndre Fischer 648b9e67834SAndre Fischer void SAL_CALL Theme::removeVetoableChangeListener( 649*9f759e1cSMatthias Seidel const ::rtl::OUString& rsPropertyName, 650*9f759e1cSMatthias Seidel const cssu::Reference<css::beans::XVetoableChangeListener>& rxListener) 651*9f759e1cSMatthias Seidel throw(css::beans::UnknownPropertyException, 652*9f759e1cSMatthias Seidel css::lang::WrappedTargetException, 653*9f759e1cSMatthias Seidel cssu::RuntimeException) 654ff12d537SAndre Fischer { 655*9f759e1cSMatthias Seidel ThemeItem eItem (__AnyItem); 656*9f759e1cSMatthias Seidel if (rsPropertyName.getLength() > 0) 657*9f759e1cSMatthias Seidel { 658*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 659*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 660*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 661*9f759e1cSMatthias Seidel 662*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 663*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 664*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 665*9f759e1cSMatthias Seidel 666*9f759e1cSMatthias Seidel eItem = iId->second; 667*9f759e1cSMatthias Seidel } 668*9f759e1cSMatthias Seidel VetoableListenerContainer* pContainer = GetVetoableListeners(eItem, false); 669*9f759e1cSMatthias Seidel if (pContainer != NULL) 670*9f759e1cSMatthias Seidel { 671*9f759e1cSMatthias Seidel VetoableListenerContainer::iterator iListener (::std::find(pContainer->begin(), pContainer->end(), rxListener)); 672*9f759e1cSMatthias Seidel if (iListener != pContainer->end()) 673*9f759e1cSMatthias Seidel { 674*9f759e1cSMatthias Seidel pContainer->erase(iListener); 675*9f759e1cSMatthias Seidel // Remove container when empty. 676*9f759e1cSMatthias Seidel if (pContainer->empty()) 677*9f759e1cSMatthias Seidel maVetoableListeners.erase(eItem); 678*9f759e1cSMatthias Seidel } 679*9f759e1cSMatthias Seidel } 680ff12d537SAndre Fischer } 681ff12d537SAndre Fischer 682ff12d537SAndre Fischer 68395a18594SAndre Fischer cssu::Sequence<css::beans::Property> SAL_CALL Theme::getProperties (void) 684*9f759e1cSMatthias Seidel throw(cssu::RuntimeException) 68595a18594SAndre Fischer { 686*9f759e1cSMatthias Seidel ::std::vector<beans::Property> aProperties; 687*9f759e1cSMatthias Seidel 688*9f759e1cSMatthias Seidel for (sal_Int32 nItem(__Begin),nEnd(__End); nItem!=nEnd; ++nItem) 689*9f759e1cSMatthias Seidel { 690*9f759e1cSMatthias Seidel const ThemeItem eItem (static_cast<ThemeItem>(nItem)); 691*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(eItem)); 692*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 693*9f759e1cSMatthias Seidel continue; 694*9f759e1cSMatthias Seidel 695*9f759e1cSMatthias Seidel const beans::Property aProperty( 696*9f759e1cSMatthias Seidel maPropertyIdToNameMap[eItem], 697*9f759e1cSMatthias Seidel eItem, 698*9f759e1cSMatthias Seidel GetCppuType(eType), 699*9f759e1cSMatthias Seidel 0); 700*9f759e1cSMatthias Seidel aProperties.push_back(aProperty); 701*9f759e1cSMatthias Seidel } 702*9f759e1cSMatthias Seidel 703*9f759e1cSMatthias Seidel return cssu::Sequence<css::beans::Property>( 704*9f759e1cSMatthias Seidel &aProperties.front(), 705*9f759e1cSMatthias Seidel aProperties.size()); 70695a18594SAndre Fischer } 70795a18594SAndre Fischer 70895a18594SAndre Fischer 70995a18594SAndre Fischer beans::Property SAL_CALL Theme::getPropertyByName (const ::rtl::OUString& rsPropertyName) 710*9f759e1cSMatthias Seidel throw(css::beans::UnknownPropertyException, 711*9f759e1cSMatthias Seidel cssu::RuntimeException) 71295a18594SAndre Fischer { 713*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 714*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 715*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 71695a18594SAndre Fischer 717*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 718*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 719*9f759e1cSMatthias Seidel throw beans::UnknownPropertyException(); 72095a18594SAndre Fischer 721*9f759e1cSMatthias Seidel const ThemeItem eItem (iId->second); 72295a18594SAndre Fischer 723*9f759e1cSMatthias Seidel return beans::Property( 724*9f759e1cSMatthias Seidel rsPropertyName, 725*9f759e1cSMatthias Seidel eItem, 726*9f759e1cSMatthias Seidel GetCppuType(eType), 727*9f759e1cSMatthias Seidel 0); 72895a18594SAndre Fischer } 72995a18594SAndre Fischer 73095a18594SAndre Fischer 73195a18594SAndre Fischer sal_Bool SAL_CALL Theme::hasPropertyByName (const ::rtl::OUString& rsPropertyName) 732*9f759e1cSMatthias Seidel throw(cssu::RuntimeException) 73395a18594SAndre Fischer { 734*9f759e1cSMatthias Seidel PropertyNameToIdMap::const_iterator iId (maPropertyNameToIdMap.find(rsPropertyName)); 735*9f759e1cSMatthias Seidel if (iId == maPropertyNameToIdMap.end()) 736*9f759e1cSMatthias Seidel return sal_False; 73795a18594SAndre Fischer 738*9f759e1cSMatthias Seidel const PropertyType eType (GetPropertyType(iId->second)); 739*9f759e1cSMatthias Seidel if (eType == PT_Invalid) 740*9f759e1cSMatthias Seidel return sal_False; 74195a18594SAndre Fischer 742*9f759e1cSMatthias Seidel return sal_True; 74395a18594SAndre Fischer } 74495a18594SAndre Fischer 74595a18594SAndre Fischer 746b9e67834SAndre Fischer void Theme::SetupPropertyMaps (void) 747ff12d537SAndre Fischer { 748*9f759e1cSMatthias Seidel maPropertyIdToNameMap.resize(__Post_Rect); 749*9f759e1cSMatthias Seidel maImages.resize(__Image_Color - __Pre_Image - 1); 750*9f759e1cSMatthias Seidel maColors.resize(__Color_Paint - __Image_Color - 1); 751*9f759e1cSMatthias Seidel maPaints.resize(__Paint_Int - __Color_Paint - 1); 752*9f759e1cSMatthias Seidel maIntegers.resize(__Int_Bool - __Paint_Int - 1); 753*9f759e1cSMatthias Seidel maBooleans.resize(__Bool_Rect - __Int_Bool - 1); 754*9f759e1cSMatthias Seidel maRectangles.resize(__Post_Rect - __Bool_Rect - 1); 755*9f759e1cSMatthias Seidel 756*9f759e1cSMatthias Seidel #define AddEntry(e) maPropertyNameToIdMap[A2S(#e)]=e; maPropertyIdToNameMap[e]=A2S(#e) 757*9f759e1cSMatthias Seidel 758*9f759e1cSMatthias Seidel AddEntry(Image_Grip); 759*9f759e1cSMatthias Seidel AddEntry(Image_Expand); 760*9f759e1cSMatthias Seidel AddEntry(Image_Collapse); 761*9f759e1cSMatthias Seidel AddEntry(Image_TabBarMenu); 762*9f759e1cSMatthias Seidel AddEntry(Image_PanelMenu); 763*9f759e1cSMatthias Seidel AddEntry(Image_ToolBoxItemSeparator); 764*9f759e1cSMatthias Seidel AddEntry(Image_Closer); 765*9f759e1cSMatthias Seidel AddEntry(Image_CloseIndicator); 766*9f759e1cSMatthias Seidel 767*9f759e1cSMatthias Seidel AddEntry(Color_DeckTitleFont); 768*9f759e1cSMatthias Seidel AddEntry(Color_PanelTitleFont); 769*9f759e1cSMatthias Seidel AddEntry(Color_TabMenuSeparator); 770*9f759e1cSMatthias Seidel AddEntry(Color_TabItemBorder); 771*9f759e1cSMatthias Seidel AddEntry(Color_DropDownBorder); 772*9f759e1cSMatthias Seidel AddEntry(Color_Highlight); 773*9f759e1cSMatthias Seidel AddEntry(Color_HighlightText); 774*9f759e1cSMatthias Seidel 775*9f759e1cSMatthias Seidel AddEntry(Paint_DeckBackground); 776*9f759e1cSMatthias Seidel AddEntry(Paint_DeckTitleBarBackground); 777*9f759e1cSMatthias Seidel AddEntry(Paint_PanelBackground); 778*9f759e1cSMatthias Seidel AddEntry(Paint_PanelTitleBarBackground); 779*9f759e1cSMatthias Seidel AddEntry(Paint_TabBarBackground); 780*9f759e1cSMatthias Seidel AddEntry(Paint_TabItemBackgroundNormal); 781*9f759e1cSMatthias Seidel AddEntry(Paint_TabItemBackgroundHighlight); 782*9f759e1cSMatthias Seidel AddEntry(Paint_HorizontalBorder); 783*9f759e1cSMatthias Seidel AddEntry(Paint_VerticalBorder); 784*9f759e1cSMatthias Seidel AddEntry(Paint_ToolBoxBackground); 785*9f759e1cSMatthias Seidel AddEntry(Paint_ToolBoxBorderTopLeft); 786*9f759e1cSMatthias Seidel AddEntry(Paint_ToolBoxBorderCenterCorners); 787*9f759e1cSMatthias Seidel AddEntry(Paint_ToolBoxBorderBottomRight); 788*9f759e1cSMatthias Seidel AddEntry(Paint_DropDownBackground); 789*9f759e1cSMatthias Seidel 790*9f759e1cSMatthias Seidel AddEntry(Int_DeckTitleBarHeight); 791*9f759e1cSMatthias Seidel AddEntry(Int_DeckBorderSize); 792*9f759e1cSMatthias Seidel AddEntry(Int_DeckSeparatorHeight); 793*9f759e1cSMatthias Seidel AddEntry(Int_PanelTitleBarHeight); 794*9f759e1cSMatthias Seidel AddEntry(Int_TabMenuPadding); 795*9f759e1cSMatthias Seidel AddEntry(Int_TabMenuSeparatorPadding); 796*9f759e1cSMatthias Seidel AddEntry(Int_TabItemWidth); 797*9f759e1cSMatthias Seidel AddEntry(Int_TabItemHeight); 798*9f759e1cSMatthias Seidel AddEntry(Int_DeckLeftPadding); 799*9f759e1cSMatthias Seidel AddEntry(Int_DeckTopPadding); 800*9f759e1cSMatthias Seidel AddEntry(Int_DeckRightPadding); 801*9f759e1cSMatthias Seidel AddEntry(Int_DeckBottomPadding); 802*9f759e1cSMatthias Seidel AddEntry(Int_TabBarLeftPadding); 803*9f759e1cSMatthias Seidel AddEntry(Int_TabBarTopPadding); 804*9f759e1cSMatthias Seidel AddEntry(Int_TabBarRightPadding); 805*9f759e1cSMatthias Seidel AddEntry(Int_TabBarBottomPadding); 806*9f759e1cSMatthias Seidel AddEntry(Int_ButtonCornerRadius); 807*9f759e1cSMatthias Seidel 808*9f759e1cSMatthias Seidel AddEntry(Bool_UseSymphonyIcons); 809*9f759e1cSMatthias Seidel AddEntry(Bool_UseSystemColors); 810*9f759e1cSMatthias Seidel AddEntry(Bool_UseToolBoxItemSeparator); 811*9f759e1cSMatthias Seidel AddEntry(Bool_IsHighContrastModeActive); 812*9f759e1cSMatthias Seidel 813*9f759e1cSMatthias Seidel AddEntry(Rect_ToolBoxPadding); 814*9f759e1cSMatthias Seidel AddEntry(Rect_ToolBoxBorder); 815*9f759e1cSMatthias Seidel 816*9f759e1cSMatthias Seidel #undef AddEntry 817*9f759e1cSMatthias Seidel 818*9f759e1cSMatthias Seidel maRawValues.resize(maPropertyIdToNameMap.size()); 819ff12d537SAndre Fischer } 820ff12d537SAndre Fischer 821ff12d537SAndre Fischer 822b9e67834SAndre Fischer Theme::PropertyType Theme::GetPropertyType (const ThemeItem eItem) 823ff12d537SAndre Fischer { 824*9f759e1cSMatthias Seidel switch(eItem) 825*9f759e1cSMatthias Seidel { 826*9f759e1cSMatthias Seidel case Image_Grip: 827*9f759e1cSMatthias Seidel case Image_Expand: 828*9f759e1cSMatthias Seidel case Image_Collapse: 829*9f759e1cSMatthias Seidel case Image_TabBarMenu: 830*9f759e1cSMatthias Seidel case Image_PanelMenu: 831*9f759e1cSMatthias Seidel case Image_ToolBoxItemSeparator: 832*9f759e1cSMatthias Seidel case Image_Closer: 833*9f759e1cSMatthias Seidel case Image_CloseIndicator: 834*9f759e1cSMatthias Seidel return PT_Image; 835*9f759e1cSMatthias Seidel 836*9f759e1cSMatthias Seidel case Color_DeckTitleFont: 837*9f759e1cSMatthias Seidel case Color_PanelTitleFont: 838*9f759e1cSMatthias Seidel case Color_TabMenuSeparator: 839*9f759e1cSMatthias Seidel case Color_TabItemBorder: 840*9f759e1cSMatthias Seidel case Color_DropDownBorder: 841*9f759e1cSMatthias Seidel case Color_Highlight: 842*9f759e1cSMatthias Seidel case Color_HighlightText: 843*9f759e1cSMatthias Seidel return PT_Color; 844*9f759e1cSMatthias Seidel 845*9f759e1cSMatthias Seidel case Paint_DeckBackground: 846*9f759e1cSMatthias Seidel case Paint_DeckTitleBarBackground: 847*9f759e1cSMatthias Seidel case Paint_PanelBackground: 848*9f759e1cSMatthias Seidel case Paint_PanelTitleBarBackground: 849*9f759e1cSMatthias Seidel case Paint_TabBarBackground: 850*9f759e1cSMatthias Seidel case Paint_TabItemBackgroundNormal: 851*9f759e1cSMatthias Seidel case Paint_TabItemBackgroundHighlight: 852*9f759e1cSMatthias Seidel case Paint_HorizontalBorder: 853*9f759e1cSMatthias Seidel case Paint_VerticalBorder: 854*9f759e1cSMatthias Seidel case Paint_ToolBoxBackground: 855*9f759e1cSMatthias Seidel case Paint_ToolBoxBorderTopLeft: 856*9f759e1cSMatthias Seidel case Paint_ToolBoxBorderCenterCorners: 857*9f759e1cSMatthias Seidel case Paint_ToolBoxBorderBottomRight: 858*9f759e1cSMatthias Seidel case Paint_DropDownBackground: 859*9f759e1cSMatthias Seidel return PT_Paint; 860*9f759e1cSMatthias Seidel 861*9f759e1cSMatthias Seidel case Int_DeckTitleBarHeight: 862*9f759e1cSMatthias Seidel case Int_DeckBorderSize: 863*9f759e1cSMatthias Seidel case Int_DeckSeparatorHeight: 864*9f759e1cSMatthias Seidel case Int_PanelTitleBarHeight: 865*9f759e1cSMatthias Seidel case Int_TabMenuPadding: 866*9f759e1cSMatthias Seidel case Int_TabMenuSeparatorPadding: 867*9f759e1cSMatthias Seidel case Int_TabItemWidth: 868*9f759e1cSMatthias Seidel case Int_TabItemHeight: 869*9f759e1cSMatthias Seidel case Int_DeckLeftPadding: 870*9f759e1cSMatthias Seidel case Int_DeckTopPadding: 871*9f759e1cSMatthias Seidel case Int_DeckRightPadding: 872*9f759e1cSMatthias Seidel case Int_DeckBottomPadding: 873*9f759e1cSMatthias Seidel case Int_TabBarLeftPadding: 874*9f759e1cSMatthias Seidel case Int_TabBarTopPadding: 875*9f759e1cSMatthias Seidel case Int_TabBarRightPadding: 876*9f759e1cSMatthias Seidel case Int_TabBarBottomPadding: 877*9f759e1cSMatthias Seidel case Int_ButtonCornerRadius: 878*9f759e1cSMatthias Seidel return PT_Integer; 879*9f759e1cSMatthias Seidel 880*9f759e1cSMatthias Seidel case Bool_UseSymphonyIcons: 881*9f759e1cSMatthias Seidel case Bool_UseSystemColors: 882*9f759e1cSMatthias Seidel case Bool_UseToolBoxItemSeparator: 883*9f759e1cSMatthias Seidel case Bool_IsHighContrastModeActive: 884*9f759e1cSMatthias Seidel return PT_Boolean; 885*9f759e1cSMatthias Seidel 886*9f759e1cSMatthias Seidel case Rect_ToolBoxBorder: 887*9f759e1cSMatthias Seidel case Rect_ToolBoxPadding: 888*9f759e1cSMatthias Seidel return PT_Rectangle; 889*9f759e1cSMatthias Seidel 890*9f759e1cSMatthias Seidel default: 891*9f759e1cSMatthias Seidel return PT_Invalid; 892*9f759e1cSMatthias Seidel } 893ff12d537SAndre Fischer } 894ff12d537SAndre Fischer 895ff12d537SAndre Fischer 89695a18594SAndre Fischer cssu::Type Theme::GetCppuType (const PropertyType eType) 89795a18594SAndre Fischer { 898*9f759e1cSMatthias Seidel switch(eType) 899*9f759e1cSMatthias Seidel { 900*9f759e1cSMatthias Seidel case PT_Image: 901*9f759e1cSMatthias Seidel return getCppuType((rtl::OUString*)NULL); 90295a18594SAndre Fischer 903*9f759e1cSMatthias Seidel case PT_Color: 904*9f759e1cSMatthias Seidel return getCppuType((sal_uInt32*)NULL); 90595a18594SAndre Fischer 906*9f759e1cSMatthias Seidel case PT_Paint: 907*9f759e1cSMatthias Seidel return getCppuVoidType(); 90895a18594SAndre Fischer 909*9f759e1cSMatthias Seidel case PT_Integer: 910*9f759e1cSMatthias Seidel return getCppuType((sal_Int32*)NULL); 91195a18594SAndre Fischer 912*9f759e1cSMatthias Seidel case PT_Boolean: 913*9f759e1cSMatthias Seidel return getCppuType((sal_Bool*)NULL); 91495a18594SAndre Fischer 915*9f759e1cSMatthias Seidel case PT_Rectangle: 916*9f759e1cSMatthias Seidel return getCppuType((awt::Rectangle*)NULL); 91795a18594SAndre Fischer 918*9f759e1cSMatthias Seidel case PT_Invalid: 919*9f759e1cSMatthias Seidel default: 920*9f759e1cSMatthias Seidel return getCppuVoidType(); 921*9f759e1cSMatthias Seidel } 92295a18594SAndre Fischer } 92395a18594SAndre Fischer 92495a18594SAndre Fischer 925b9e67834SAndre Fischer sal_Int32 Theme::GetIndex (const ThemeItem eItem, const PropertyType eType) 926ff12d537SAndre Fischer { 927*9f759e1cSMatthias Seidel switch(eType) 928*9f759e1cSMatthias Seidel { 929*9f759e1cSMatthias Seidel case PT_Image: 930*9f759e1cSMatthias Seidel return eItem - __Pre_Image-1; 931*9f759e1cSMatthias Seidel case PT_Color: 932*9f759e1cSMatthias Seidel return eItem - __Image_Color-1; 933*9f759e1cSMatthias Seidel case PT_Paint: 934*9f759e1cSMatthias Seidel return eItem - __Color_Paint-1; 935*9f759e1cSMatthias Seidel case PT_Integer: 936*9f759e1cSMatthias Seidel return eItem - __Paint_Int-1; 937*9f759e1cSMatthias Seidel case PT_Boolean: 938*9f759e1cSMatthias Seidel return eItem - __Int_Bool-1; 939*9f759e1cSMatthias Seidel case PT_Rectangle: 940*9f759e1cSMatthias Seidel return eItem - __Bool_Rect-1; 941*9f759e1cSMatthias Seidel 942*9f759e1cSMatthias Seidel default: 943*9f759e1cSMatthias Seidel OSL_ASSERT(false); 944*9f759e1cSMatthias Seidel return 0; 945*9f759e1cSMatthias Seidel } 946ff12d537SAndre Fischer } 947ff12d537SAndre Fischer 948ff12d537SAndre Fischer 949b9e67834SAndre Fischer Theme::VetoableListenerContainer* Theme::GetVetoableListeners ( 950*9f759e1cSMatthias Seidel const ThemeItem eItem, 951*9f759e1cSMatthias Seidel const bool bCreate) 952ff12d537SAndre Fischer { 953*9f759e1cSMatthias Seidel VetoableListeners::iterator iContainer (maVetoableListeners.find(eItem)); 954*9f759e1cSMatthias Seidel if (iContainer != maVetoableListeners.end()) 955*9f759e1cSMatthias Seidel return &iContainer->second; 956*9f759e1cSMatthias Seidel else if (bCreate) 957*9f759e1cSMatthias Seidel { 958*9f759e1cSMatthias Seidel maVetoableListeners[eItem] = VetoableListenerContainer(); 959*9f759e1cSMatthias Seidel return &maVetoableListeners[eItem]; 960*9f759e1cSMatthias Seidel } 961*9f759e1cSMatthias Seidel else 962*9f759e1cSMatthias Seidel return NULL; 963ff12d537SAndre Fischer } 964ff12d537SAndre Fischer 965ff12d537SAndre Fischer 966b9e67834SAndre Fischer Theme::ChangeListenerContainer* Theme::GetChangeListeners ( 967*9f759e1cSMatthias Seidel const ThemeItem eItem, 968*9f759e1cSMatthias Seidel const bool bCreate) 969ff12d537SAndre Fischer { 970*9f759e1cSMatthias Seidel ChangeListeners::iterator iContainer (maChangeListeners.find(eItem)); 971*9f759e1cSMatthias Seidel if (iContainer != maChangeListeners.end()) 972*9f759e1cSMatthias Seidel return &iContainer->second; 973*9f759e1cSMatthias Seidel else if (bCreate) 974*9f759e1cSMatthias Seidel { 975*9f759e1cSMatthias Seidel maChangeListeners[eItem] = ChangeListenerContainer(); 976*9f759e1cSMatthias Seidel return &maChangeListeners[eItem]; 977*9f759e1cSMatthias Seidel } 978*9f759e1cSMatthias Seidel else 979*9f759e1cSMatthias Seidel return NULL; 980ff12d537SAndre Fischer } 981ff12d537SAndre Fischer 982ff12d537SAndre Fischer 983b9e67834SAndre Fischer bool Theme::DoVetoableListenersVeto ( 984*9f759e1cSMatthias Seidel const VetoableListenerContainer* pListeners, 985*9f759e1cSMatthias Seidel const beans::PropertyChangeEvent& rEvent) const 986ff12d537SAndre Fischer { 987*9f759e1cSMatthias Seidel if (pListeners == NULL) 988*9f759e1cSMatthias Seidel return false; 989*9f759e1cSMatthias Seidel 990*9f759e1cSMatthias Seidel VetoableListenerContainer aListeners (*pListeners); 991*9f759e1cSMatthias Seidel try 992*9f759e1cSMatthias Seidel { 993*9f759e1cSMatthias Seidel for (VetoableListenerContainer::const_iterator 994*9f759e1cSMatthias Seidel iListener(aListeners.begin()), 995*9f759e1cSMatthias Seidel iEnd(aListeners.end()); 996*9f759e1cSMatthias Seidel iListener!=iEnd; 997*9f759e1cSMatthias Seidel ++iListener) 998*9f759e1cSMatthias Seidel { 999*9f759e1cSMatthias Seidel (*iListener)->vetoableChange(rEvent); 1000*9f759e1cSMatthias Seidel } 1001*9f759e1cSMatthias Seidel } 1002*9f759e1cSMatthias Seidel catch(const beans::PropertyVetoException&) 1003*9f759e1cSMatthias Seidel { 1004*9f759e1cSMatthias Seidel return true; 1005*9f759e1cSMatthias Seidel } 1006*9f759e1cSMatthias Seidel catch(const Exception&) 1007*9f759e1cSMatthias Seidel { 1008*9f759e1cSMatthias Seidel // Ignore any other errors (such as disposed listeners). 1009*9f759e1cSMatthias Seidel } 1010*9f759e1cSMatthias Seidel return false; 1011ff12d537SAndre Fischer } 1012ff12d537SAndre Fischer 1013ff12d537SAndre Fischer 1014b9e67834SAndre Fischer void Theme::BroadcastPropertyChange ( 1015*9f759e1cSMatthias Seidel const ChangeListenerContainer* pListeners, 1016*9f759e1cSMatthias Seidel const beans::PropertyChangeEvent& rEvent) const 1017ff12d537SAndre Fischer { 1018*9f759e1cSMatthias Seidel if (pListeners == NULL) 1019*9f759e1cSMatthias Seidel return; 1020*9f759e1cSMatthias Seidel 1021*9f759e1cSMatthias Seidel const ChangeListenerContainer aListeners (*pListeners); 1022*9f759e1cSMatthias Seidel try 1023*9f759e1cSMatthias Seidel { 1024*9f759e1cSMatthias Seidel for (ChangeListenerContainer::const_iterator 1025*9f759e1cSMatthias Seidel iListener(aListeners.begin()), 1026*9f759e1cSMatthias Seidel iEnd(aListeners.end()); 1027*9f759e1cSMatthias Seidel iListener!=iEnd; 1028*9f759e1cSMatthias Seidel ++iListener) 1029*9f759e1cSMatthias Seidel { 1030*9f759e1cSMatthias Seidel (*iListener)->propertyChange(rEvent); 1031*9f759e1cSMatthias Seidel } 1032*9f759e1cSMatthias Seidel } 1033*9f759e1cSMatthias Seidel catch(const Exception&) 1034*9f759e1cSMatthias Seidel { 1035*9f759e1cSMatthias Seidel // Ignore any errors (such as disposed listeners). 1036*9f759e1cSMatthias Seidel } 1037ff12d537SAndre Fischer } 1038ff12d537SAndre Fischer 1039ff12d537SAndre Fischer 1040b9e67834SAndre Fischer void Theme::ProcessNewValue ( 1041*9f759e1cSMatthias Seidel const Any& rValue, 1042*9f759e1cSMatthias Seidel const ThemeItem eItem, 1043*9f759e1cSMatthias Seidel const PropertyType eType) 1044ff12d537SAndre Fischer { 1045*9f759e1cSMatthias Seidel const sal_Int32 nIndex (GetIndex (eItem, eType)); 1046*9f759e1cSMatthias Seidel switch (eType) 1047*9f759e1cSMatthias Seidel { 1048*9f759e1cSMatthias Seidel case PT_Image: 1049*9f759e1cSMatthias Seidel { 1050*9f759e1cSMatthias Seidel ::rtl::OUString sURL; 1051*9f759e1cSMatthias Seidel if (rValue >>= sURL) 1052*9f759e1cSMatthias Seidel { 1053*9f759e1cSMatthias Seidel maImages[nIndex] = Tools::GetImage(sURL, NULL); 1054*9f759e1cSMatthias Seidel } 1055*9f759e1cSMatthias Seidel break; 1056*9f759e1cSMatthias Seidel } 1057*9f759e1cSMatthias Seidel case PT_Color: 1058*9f759e1cSMatthias Seidel { 1059*9f759e1cSMatthias Seidel sal_Int32 nColorValue (0); 1060*9f759e1cSMatthias Seidel if (rValue >>= nColorValue) 1061*9f759e1cSMatthias Seidel { 1062*9f759e1cSMatthias Seidel maColors[nIndex] = Color(nColorValue); 1063*9f759e1cSMatthias Seidel } 1064*9f759e1cSMatthias Seidel break; 1065*9f759e1cSMatthias Seidel } 1066*9f759e1cSMatthias Seidel case PT_Paint: 1067*9f759e1cSMatthias Seidel { 1068*9f759e1cSMatthias Seidel maPaints[nIndex] = Paint::Create(rValue); 1069*9f759e1cSMatthias Seidel break; 1070*9f759e1cSMatthias Seidel } 1071*9f759e1cSMatthias Seidel case PT_Integer: 1072*9f759e1cSMatthias Seidel { 1073*9f759e1cSMatthias Seidel sal_Int32 nValue (0); 1074*9f759e1cSMatthias Seidel if (rValue >>= nValue) 1075*9f759e1cSMatthias Seidel { 1076*9f759e1cSMatthias Seidel maIntegers[nIndex] = nValue; 1077*9f759e1cSMatthias Seidel } 1078*9f759e1cSMatthias Seidel break; 1079*9f759e1cSMatthias Seidel } 1080*9f759e1cSMatthias Seidel case PT_Boolean: 1081*9f759e1cSMatthias Seidel { 1082*9f759e1cSMatthias Seidel sal_Bool nValue (0); 1083*9f759e1cSMatthias Seidel if (rValue >>= nValue) 1084*9f759e1cSMatthias Seidel { 1085*9f759e1cSMatthias Seidel maBooleans[nIndex] = (nValue==sal_True); 1086*9f759e1cSMatthias Seidel if (eItem == Bool_IsHighContrastModeActive) 1087*9f759e1cSMatthias Seidel { 1088*9f759e1cSMatthias Seidel mbIsHighContrastModeSetManually = true; 1089*9f759e1cSMatthias Seidel mbIsHighContrastMode = maBooleans[nIndex]; 1090*9f759e1cSMatthias Seidel HandleDataChange(); 1091*9f759e1cSMatthias Seidel } 1092*9f759e1cSMatthias Seidel else if (eItem == Bool_UseSystemColors) 1093*9f759e1cSMatthias Seidel { 1094*9f759e1cSMatthias Seidel HandleDataChange(); 1095*9f759e1cSMatthias Seidel } 1096*9f759e1cSMatthias Seidel } 1097*9f759e1cSMatthias Seidel break; 1098*9f759e1cSMatthias Seidel } 1099*9f759e1cSMatthias Seidel case PT_Rectangle: 1100*9f759e1cSMatthias Seidel { 1101*9f759e1cSMatthias Seidel awt::Rectangle aBox; 1102*9f759e1cSMatthias Seidel if (rValue >>= aBox) 1103*9f759e1cSMatthias Seidel { 1104*9f759e1cSMatthias Seidel maRectangles[nIndex] = Rectangle( 1105*9f759e1cSMatthias Seidel aBox.X, 1106*9f759e1cSMatthias Seidel aBox.Y, 1107*9f759e1cSMatthias Seidel aBox.Width, 1108*9f759e1cSMatthias Seidel aBox.Height); 1109*9f759e1cSMatthias Seidel } 1110*9f759e1cSMatthias Seidel break; 1111*9f759e1cSMatthias Seidel } 1112*9f759e1cSMatthias Seidel case PT_Invalid: 1113*9f759e1cSMatthias Seidel OSL_ASSERT(eType != PT_Invalid); 1114*9f759e1cSMatthias Seidel throw RuntimeException(); 1115*9f759e1cSMatthias Seidel } 1116ff12d537SAndre Fischer } 1117ff12d537SAndre Fischer 1118ff12d537SAndre Fischer } } // end of namespace sfx2::sidebar 1119