xref: /aoo42x/main/sfx2/source/sidebar/Theme.cxx (revision 9f759e1c)
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