Branch data Line data Source code
1 : : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : : /*************************************************************************
3 : : *
4 : : * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 : : *
6 : : * Copyright 2000, 2010 Oracle and/or its affiliates.
7 : : *
8 : : * OpenOffice.org - a multi-platform office productivity suite
9 : : *
10 : : * This file is part of OpenOffice.org.
11 : : *
12 : : * OpenOffice.org is free software: you can redistribute it and/or modify
13 : : * it under the terms of the GNU Lesser General Public License version 3
14 : : * only, as published by the Free Software Foundation.
15 : : *
16 : : * OpenOffice.org is distributed in the hope that it will be useful,
17 : : * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 : : * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 : : * GNU Lesser General Public License version 3 for more details
20 : : * (a copy is included in the LICENSE file that accompanied this code).
21 : : *
22 : : * You should have received a copy of the GNU Lesser General Public License
23 : : * version 3 along with OpenOffice.org. If not, see
24 : : * <http://www.openoffice.org/license.html>
25 : : * for a copy of the LGPLv3 License.
26 : : *
27 : : ************************************************************************/
28 : :
29 : : #include "PresenterBitmapContainer.hxx"
30 : : #include "PresenterComponent.hxx"
31 : : #include "PresenterConfigurationAccess.hxx"
32 : :
33 : : #include <com/sun/star/deployment/XPackageInformationProvider.hpp>
34 : : #include <com/sun/star/drawing/XPresenterHelper.hpp>
35 : : #include <com/sun/star/lang/XMultiComponentFactory.hpp>
36 : : #include <com/sun/star/rendering/CompositeOperation.hpp>
37 : : #include <com/sun/star/rendering/XIntegerBitmap.hpp>
38 : : #include <boost/bind.hpp>
39 : : #include <map>
40 : :
41 : : using namespace ::com::sun::star;
42 : : using namespace ::com::sun::star::uno;
43 : : using namespace ::std;
44 : : using ::rtl::OUString;
45 : :
46 : : #define A2S(pString) (::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(pString)))
47 : :
48 : : namespace sdext { namespace presenter {
49 : :
50 : : //===== PresenterBitmapContainer ==============================================
51 : :
52 : 0 : PresenterBitmapContainer::PresenterBitmapContainer (
53 : : const ::rtl::OUString& rsConfigurationBase,
54 : : const ::boost::shared_ptr<PresenterBitmapContainer>& rpParentContainer,
55 : : const css::uno::Reference<css::uno::XComponentContext>& rxComponentContext,
56 : : const css::uno::Reference<css::rendering::XCanvas>& rxCanvas,
57 : : const OUString& rsBasePath,
58 : : const css::uno::Reference<css::drawing::XPresenterHelper>& rxPresenterHelper)
59 : : : mpParentContainer(rpParentContainer),
60 : : maIconContainer(),
61 : : msBasePath(rsBasePath),
62 : : mxCanvas(rxCanvas),
63 [ # # ][ # # ]: 0 : mxPresenterHelper(rxPresenterHelper)
64 : : {
65 [ # # ]: 0 : Initialize(rxComponentContext);
66 : :
67 : : // Get access to the configuration.
68 : : PresenterConfigurationAccess aConfiguration (
69 : : rxComponentContext,
70 : : A2S("org.openoffice.Office.extension.PresenterScreen"),
71 [ # # ][ # # ]: 0 : PresenterConfigurationAccess::READ_ONLY);
72 : : Reference<container::XNameAccess> xBitmapList (
73 : : aConfiguration.GetConfigurationNode(rsConfigurationBase),
74 [ # # ][ # # ]: 0 : UNO_QUERY_THROW);
75 : :
76 [ # # ][ # # ]: 0 : LoadBitmaps(xBitmapList);
77 : 0 : }
78 : :
79 : 0 : PresenterBitmapContainer::PresenterBitmapContainer (
80 : : const css::uno::Reference<css::container::XNameAccess>& rxRootNode,
81 : : const ::boost::shared_ptr<PresenterBitmapContainer>& rpParentContainer,
82 : : const css::uno::Reference<css::uno::XComponentContext>& rxComponentContext,
83 : : const css::uno::Reference<css::rendering::XCanvas>& rxCanvas,
84 : : const OUString& rsBasePath,
85 : : const css::uno::Reference<css::drawing::XPresenterHelper>& rxPresenterHelper)
86 : : : mpParentContainer(rpParentContainer),
87 : : maIconContainer(),
88 : : msBasePath(rsBasePath),
89 : : mxCanvas(rxCanvas),
90 [ # # ][ # # ]: 0 : mxPresenterHelper(rxPresenterHelper)
91 : : {
92 [ # # ]: 0 : Initialize(rxComponentContext);
93 : :
94 [ # # ]: 0 : LoadBitmaps(rxRootNode);
95 : 0 : }
96 : :
97 : 0 : void PresenterBitmapContainer::Initialize (
98 : : const css::uno::Reference<css::uno::XComponentContext>& rxComponentContext)
99 : : {
100 [ # # ]: 0 : if ( ! mxPresenterHelper.is())
101 : : {
102 : : // Create an object that is able to load the bitmaps in a format that is
103 : : // supported by the canvas.
104 : : Reference<lang::XMultiComponentFactory> xFactory (
105 [ # # ][ # # ]: 0 : rxComponentContext->getServiceManager(), UNO_QUERY);
[ # # ]
106 [ # # ]: 0 : if ( ! xFactory.is())
107 : 0 : return;
108 : : mxPresenterHelper = Reference<drawing::XPresenterHelper>(
109 [ # # ]: 0 : xFactory->createInstanceWithContext(
110 : : A2S("com.sun.star.drawing.PresenterHelper"),
111 : 0 : rxComponentContext),
112 [ # # ][ # # ]: 0 : UNO_QUERY_THROW);
[ # # ][ # # ]
[ # # ]
113 : : }
114 : : }
115 : :
116 [ # # ]: 0 : PresenterBitmapContainer::~PresenterBitmapContainer (void)
117 : : {
118 : 0 : maIconContainer.clear();
119 : 0 : }
120 : :
121 : 0 : SharedBitmapDescriptor PresenterBitmapContainer::GetBitmap (
122 : : const OUString& rsName) const
123 : : {
124 [ # # ]: 0 : BitmapContainer::const_iterator iSet (maIconContainer.find(rsName));
125 [ # # ]: 0 : if (iSet != maIconContainer.end())
126 [ # # ]: 0 : return iSet->second;
127 [ # # ]: 0 : else if (mpParentContainer.get() != NULL)
128 [ # # ]: 0 : return mpParentContainer->GetBitmap(rsName);
129 : : else
130 [ # # ]: 0 : return SharedBitmapDescriptor();
131 : : }
132 : :
133 : 0 : void PresenterBitmapContainer::LoadBitmaps (
134 : : const css::uno::Reference<css::container::XNameAccess>& rxBitmapList)
135 : : {
136 [ # # ]: 0 : if ( ! mxCanvas.is())
137 : 0 : return;
138 : :
139 [ # # ]: 0 : if ( ! rxBitmapList.is())
140 : 0 : return;
141 : :
142 : : try
143 : : {
144 : : // Load all button bitmaps.
145 [ # # ]: 0 : if (rxBitmapList.is())
146 : : {
147 : : PresenterConfigurationAccess::ForAll(
148 : : rxBitmapList,
149 [ # # ][ # # ]: 0 : ::boost::bind(&PresenterBitmapContainer::ProcessBitmap, this, _1, _2));
[ # # ][ # # ]
[ # # ]
150 : : }
151 : : }
152 : 0 : catch (Exception&)
153 : : {
154 : : OSL_ASSERT(false);
155 : : }
156 : : }
157 : :
158 : 0 : SharedBitmapDescriptor PresenterBitmapContainer::LoadBitmap (
159 : : const css::uno::Reference<css::container::XHierarchicalNameAccess>& rxNode,
160 : : const ::rtl::OUString& rsPath,
161 : : const css::uno::Reference<css::drawing::XPresenterHelper>& rxPresenterHelper,
162 : : const OUString& rsBasePath,
163 : : const css::uno::Reference<css::rendering::XCanvas>& rxCanvas,
164 : : const SharedBitmapDescriptor& rpDefault)
165 : : {
166 : 0 : SharedBitmapDescriptor pBitmap;
167 : :
168 [ # # ]: 0 : if (rxNode.is())
169 : : {
170 : : try
171 : : {
172 : : Reference<beans::XPropertySet> xBitmapProperties (
173 : : PresenterConfigurationAccess::GetConfigurationNode(rxNode, rsPath),
174 [ # # ][ # # ]: 0 : UNO_QUERY);
175 [ # # ]: 0 : if (xBitmapProperties.is())
176 : : pBitmap = LoadBitmap(
177 : : xBitmapProperties,
178 : : rxPresenterHelper,
179 : : rsBasePath,
180 : : rxCanvas,
181 [ # # ][ # # ]: 0 : rpDefault);
[ # # ][ # # ]
182 : : }
183 [ # # ]: 0 : catch (Exception&)
184 : : {
185 : : OSL_ASSERT(false);
186 : : }
187 : : }
188 : :
189 : 0 : return pBitmap;
190 : : }
191 : :
192 : 0 : void PresenterBitmapContainer::ProcessBitmap (
193 : : const OUString& rsKey,
194 : : const Reference<beans::XPropertySet>& rxProperties)
195 : : {
196 : 0 : OUString sName;
197 [ # # ][ # # ]: 0 : if ( ! (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("Name")) >>= sName))
[ # # ]
198 : 0 : sName = rsKey;
199 : :
200 [ # # ]: 0 : maIconContainer[sName] = LoadBitmap(
201 : : rxProperties,
202 : : mxPresenterHelper,
203 : : msBasePath,
204 : : mxCanvas,
205 [ # # ][ # # ]: 0 : SharedBitmapDescriptor());
[ # # ][ # # ]
[ # # ]
206 : 0 : }
207 : :
208 : 0 : SharedBitmapDescriptor PresenterBitmapContainer::LoadBitmap (
209 : : const Reference<beans::XPropertySet>& rxProperties,
210 : : const css::uno::Reference<css::drawing::XPresenterHelper>& rxPresenterHelper,
211 : : const OUString& rsBasePath,
212 : : const css::uno::Reference<css::rendering::XCanvas>& rxCanvas,
213 : : const SharedBitmapDescriptor& rpDefault)
214 : : {
215 : : OSL_ASSERT(rxCanvas.is());
216 : : OSL_ASSERT(rxPresenterHelper.is());
217 : :
218 [ # # ][ # # ]: 0 : SharedBitmapDescriptor pBitmap (new BitmapDescriptor(rpDefault));
[ # # ]
219 : :
220 [ # # ]: 0 : if ( ! rxProperties.is())
221 : : return pBitmap;
222 : :
223 : 0 : OUString sFileName;
224 : :
225 : : // Load bitmaps.
226 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("NormalFileName")) >>= sFileName)
[ # # ]
227 : : try
228 : : {
229 : : pBitmap->SetBitmap(
230 : : BitmapDescriptor::Normal,
231 [ # # ][ # # ]: 0 : rxPresenterHelper->loadBitmap(rsBasePath + sFileName, rxCanvas));
[ # # ][ # # ]
232 : : }
233 [ # # ]: 0 : catch (Exception&)
234 : : {}
235 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("MouseOverFileName")) >>= sFileName)
[ # # ]
236 : : try
237 : : {
238 : : pBitmap->SetBitmap(
239 : : BitmapDescriptor::MouseOver,
240 [ # # ][ # # ]: 0 : rxPresenterHelper->loadBitmap(rsBasePath + sFileName, rxCanvas));
[ # # ][ # # ]
241 : : }
242 [ # # ]: 0 : catch (Exception&)
243 : : {}
244 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("ButtonDownFileName")) >>= sFileName)
[ # # ]
245 : : try
246 : : {
247 : : pBitmap->SetBitmap(
248 : : BitmapDescriptor::ButtonDown,
249 [ # # ][ # # ]: 0 : rxPresenterHelper->loadBitmap(rsBasePath + sFileName, rxCanvas));
[ # # ][ # # ]
250 : : }
251 [ # # ]: 0 : catch (Exception&)
252 : : {}
253 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("DisabledFileName")) >>= sFileName)
[ # # ]
254 : : try
255 : : {
256 : : pBitmap->SetBitmap(
257 : : BitmapDescriptor::Disabled,
258 [ # # ][ # # ]: 0 : rxPresenterHelper->loadBitmap(rsBasePath + sFileName, rxCanvas));
[ # # ][ # # ]
259 : : }
260 [ # # ]: 0 : catch (Exception&)
261 : : {}
262 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("MaskFileName")) >>= sFileName)
[ # # ]
263 : : try
264 : : {
265 : : pBitmap->SetBitmap(
266 : : BitmapDescriptor::Mask,
267 [ # # ][ # # ]: 0 : rxPresenterHelper->loadBitmap(rsBasePath + sFileName, rxCanvas));
[ # # ][ # # ]
268 : : }
269 [ # # ]: 0 : catch (Exception&)
270 : : {}
271 : :
272 [ # # ][ # # ]: 0 : PresenterConfigurationAccess::GetProperty(rxProperties, A2S("XOffset")) >>= pBitmap->mnXOffset;
273 [ # # ][ # # ]: 0 : PresenterConfigurationAccess::GetProperty(rxProperties, A2S("YOffset")) >>= pBitmap->mnYOffset;
274 : :
275 [ # # ][ # # ]: 0 : PresenterConfigurationAccess::GetProperty(rxProperties, A2S("XHotSpot")) >>= pBitmap->mnXHotSpot;
276 [ # # ][ # # ]: 0 : PresenterConfigurationAccess::GetProperty(rxProperties, A2S("YHotSpot")) >>= pBitmap->mnYHotSpot;
277 : :
278 [ # # ][ # # ]: 0 : PresenterConfigurationAccess::GetProperty(rxProperties, A2S("ReplacementColor")) >>= pBitmap->maReplacementColor;
279 : :
280 : 0 : OUString sTexturingMode;
281 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("HorizontalTexturingMode")) >>= sTexturingMode)
[ # # ]
282 [ # # ]: 0 : pBitmap->meHorizontalTexturingMode = StringToTexturingMode(sTexturingMode);
283 [ # # ][ # # ]: 0 : if (PresenterConfigurationAccess::GetProperty(rxProperties, A2S("VerticalTexturingMode")) >>= sTexturingMode)
[ # # ]
284 [ # # ]: 0 : pBitmap->meVerticalTexturingMode = StringToTexturingMode(sTexturingMode);
285 : :
286 : 0 : return pBitmap;
287 : : }
288 : :
289 : : PresenterBitmapContainer::BitmapDescriptor::TexturingMode
290 : 0 : PresenterBitmapContainer::StringToTexturingMode (const OUString& rsTexturingMode)
291 : : {
292 [ # # ]: 0 : if (rsTexturingMode == A2S("Once"))
293 : 0 : return PresenterBitmapContainer::BitmapDescriptor::Once;
294 [ # # ]: 0 : else if (rsTexturingMode == A2S("Repeat"))
295 : 0 : return PresenterBitmapContainer::BitmapDescriptor::Repeat;
296 [ # # ]: 0 : else if (rsTexturingMode == A2S("Stretch"))
297 : 0 : return PresenterBitmapContainer::BitmapDescriptor::Stretch;
298 : : else
299 : 0 : return PresenterBitmapContainer::BitmapDescriptor::Once;
300 : : }
301 : :
302 : : //===== PresenterBitmapContainer::BitmapSet ===================================
303 : :
304 : 0 : PresenterBitmapContainer::BitmapDescriptor::BitmapDescriptor (void)
305 : : : mnWidth(0),
306 : : mnHeight(0),
307 : : mnXOffset(0),
308 : : mnYOffset(0),
309 : : mnXHotSpot(0),
310 : : mnYHotSpot(0),
311 : : maReplacementColor(0x00000000),
312 : : meHorizontalTexturingMode(Once),
313 : : meVerticalTexturingMode(Once),
314 : : mxNormalBitmap(),
315 : : mxMouseOverBitmap(),
316 : : mxButtonDownBitmap(),
317 : : mxDisabledBitmap(),
318 : 0 : mxMaskBitmap()
319 : : {
320 : 0 : }
321 : :
322 : 0 : PresenterBitmapContainer::BitmapDescriptor::BitmapDescriptor (
323 : : const ::boost::shared_ptr<PresenterBitmapContainer::BitmapDescriptor>& rpDefault)
324 : : : mnWidth(0),
325 : : mnHeight(0),
326 : : mnXOffset(0),
327 : : mnYOffset(0),
328 : : mnXHotSpot(0),
329 : : mnYHotSpot(0),
330 : : maReplacementColor(0x00000000),
331 : : meHorizontalTexturingMode(Once),
332 : : meVerticalTexturingMode(Once),
333 : : mxNormalBitmap(),
334 : : mxMouseOverBitmap(),
335 : : mxButtonDownBitmap(),
336 : : mxDisabledBitmap(),
337 : 0 : mxMaskBitmap()
338 : : {
339 [ # # ]: 0 : if (rpDefault.get() != NULL)
340 : : {
341 : 0 : mnWidth = rpDefault->mnWidth;
342 : 0 : mnHeight = rpDefault->mnHeight;
343 : 0 : mnXOffset = rpDefault->mnXOffset;
344 : 0 : mnYOffset = rpDefault->mnYOffset;
345 : 0 : mnXHotSpot = rpDefault->mnXHotSpot;
346 : 0 : mnYHotSpot = rpDefault->mnYHotSpot;
347 : 0 : maReplacementColor = rpDefault->maReplacementColor;
348 : 0 : meHorizontalTexturingMode = rpDefault->meHorizontalTexturingMode;
349 : 0 : meVerticalTexturingMode = rpDefault->meVerticalTexturingMode;
350 [ # # ]: 0 : mxNormalBitmap = rpDefault->mxNormalBitmap;
351 [ # # ]: 0 : mxMouseOverBitmap = rpDefault->mxMouseOverBitmap;
352 [ # # ]: 0 : mxButtonDownBitmap = rpDefault->mxButtonDownBitmap;
353 [ # # ]: 0 : mxDisabledBitmap = rpDefault->mxDisabledBitmap;
354 [ # # ]: 0 : mxMaskBitmap = rpDefault->mxMaskBitmap;
355 : : }
356 : 0 : }
357 : :
358 : : css::uno::Reference<css::rendering::XBitmap>
359 : 0 : PresenterBitmapContainer::BitmapDescriptor::GetNormalBitmap (void) const
360 : : {
361 : 0 : return mxNormalBitmap;
362 : : }
363 : :
364 : : css::uno::Reference<css::rendering::XBitmap>
365 : 0 : PresenterBitmapContainer::BitmapDescriptor::GetBitmap (
366 : : const Mode eMode,
367 : : const bool bMissingDefaultsToNormal) const
368 : : {
369 [ # # # # : 0 : switch (eMode)
# ]
370 : : {
371 : : case Normal:
372 : : default:
373 : 0 : return mxNormalBitmap;
374 : :
375 : : case MouseOver:
376 [ # # ]: 0 : if (mxMouseOverBitmap.is())
377 : 0 : return mxMouseOverBitmap;
378 [ # # ]: 0 : else if (bMissingDefaultsToNormal)
379 : 0 : return mxNormalBitmap;
380 : :
381 : : case ButtonDown:
382 [ # # ]: 0 : if (mxButtonDownBitmap.is())
383 : 0 : return mxButtonDownBitmap;
384 [ # # ]: 0 : else if (bMissingDefaultsToNormal)
385 : 0 : return mxNormalBitmap;
386 : :
387 : : case Disabled:
388 [ # # ]: 0 : if (mxDisabledBitmap.is())
389 : 0 : return mxDisabledBitmap;
390 [ # # ]: 0 : else if (bMissingDefaultsToNormal)
391 : 0 : return mxNormalBitmap;
392 : :
393 : : case Mask:
394 : 0 : return mxMaskBitmap;
395 : : }
396 : : }
397 : :
398 : 0 : void PresenterBitmapContainer::BitmapDescriptor::SetBitmap (
399 : : const Mode eMode,
400 : : const css::uno::Reference<css::rendering::XBitmap>& rxBitmap)
401 : : {
402 [ # # # # : 0 : switch (eMode)
# ]
403 : : {
404 : : case Normal:
405 : : default:
406 : 0 : mxNormalBitmap = rxBitmap;
407 [ # # ]: 0 : if (mxNormalBitmap.is())
408 : : {
409 [ # # ][ # # ]: 0 : const geometry::IntegerSize2D aSize (mxNormalBitmap->getSize());
410 : 0 : mnWidth = aSize.Width;
411 : 0 : mnHeight = aSize.Height;
412 : : }
413 : 0 : break;
414 : :
415 : : case MouseOver:
416 : 0 : mxMouseOverBitmap = rxBitmap;
417 : 0 : break;
418 : :
419 : : case ButtonDown:
420 : 0 : mxButtonDownBitmap = rxBitmap;
421 : 0 : break;
422 : :
423 : : case Disabled:
424 : 0 : mxDisabledBitmap = rxBitmap;
425 : 0 : break;
426 : :
427 : : case Mask:
428 : 0 : mxMaskBitmap = rxBitmap;
429 : 0 : break;
430 : : }
431 : 0 : }
432 : :
433 [ + - ][ + - ]: 24 : } } // end of namespace ::sdext::presenter
434 : :
435 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|