Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "GraphicPropertyItemConverter.hxx"
21 : #include "SchWhichPairs.hxx"
22 : #include "macros.hxx"
23 : #include "ItemPropertyMap.hxx"
24 : #include "PropertyHelper.hxx"
25 : #include "CommonConverters.hxx"
26 : #include <editeng/memberids.hrc>
27 : #include <svx/xflclit.hxx>
28 : #include <svx/xlnclit.hxx>
29 : #include <svx/xflbmtit.hxx>
30 : #include <svx/xflbstit.hxx>
31 : #include <svx/xbtmpit.hxx>
32 : #include <svx/xflftrit.hxx>
33 : #include <svx/xlndsit.hxx>
34 : #include <svx/xflhtit.hxx>
35 : #include <svx/xflgrit.hxx>
36 : #include <svx/xfltrit.hxx>
37 : #include <svx/xlntrit.hxx>
38 : #include <editeng/eeitem.hxx>
39 : // for SfxBoolItem
40 : #include <svl/eitem.hxx>
41 : // for XFillGradientStepCountItem
42 : #include <svx/xgrscit.hxx>
43 : #include <com/sun/star/beans/XPropertyState.hpp>
44 : #include <com/sun/star/chart2/FillBitmap.hpp>
45 : #include <com/sun/star/awt/Gradient.hpp>
46 : #include <com/sun/star/container/XNameAccess.hpp>
47 :
48 : using namespace ::com::sun::star;
49 :
50 : namespace
51 : {
52 0 : ::comphelper::ItemPropertyMapType & lcl_GetDataPointFilledPropertyMap()
53 : {
54 : static ::comphelper::ItemPropertyMapType aDataPointPropertyFilledMap(
55 : ::comphelper::MakeItemPropertyMap
56 : IPM_MAP_ENTRY( XATTR_FILLSTYLE, "FillStyle", 0 )
57 0 : IPM_MAP_ENTRY( XATTR_FILLCOLOR, "Color", 0 )
58 0 : IPM_MAP_ENTRY( XATTR_LINECOLOR, "BorderColor", 0 )
59 0 : IPM_MAP_ENTRY( XATTR_LINESTYLE, "BorderStyle", 0 )
60 0 : IPM_MAP_ENTRY( XATTR_LINEWIDTH, "BorderWidth", 0 )
61 0 : IPM_MAP_ENTRY( XATTR_FILLBACKGROUND, "FillBackground", 0 )
62 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_POS, "FillBitmapRectanglePoint", 0 )
63 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_SIZEX, "FillBitmapSizeX", 0 )
64 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_SIZEY, "FillBitmapSizeY", 0 )
65 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_SIZELOG, "FillBitmapLogicalSize", 0 )
66 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_TILEOFFSETX, "FillBitmapOffsetX", 0 )
67 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_TILEOFFSETY, "FillBitmapOffsetY", 0 )
68 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_POSOFFSETX, "FillBitmapPositionOffsetX", 0 )
69 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_POSOFFSETY, "FillBitmapPositionOffsetY", 0 )
70 0 : );
71 :
72 0 : return aDataPointPropertyFilledMap;
73 : }
74 0 : ::comphelper::ItemPropertyMapType & lcl_GetDataPointLinePropertyMap()
75 : {
76 : static ::comphelper::ItemPropertyMapType aDataPointPropertyLineMap(
77 : ::comphelper::MakeItemPropertyMap
78 : IPM_MAP_ENTRY( XATTR_LINECOLOR, "Color", 0 )
79 0 : IPM_MAP_ENTRY( XATTR_LINESTYLE, "LineStyle", 0 )
80 0 : IPM_MAP_ENTRY( XATTR_LINEWIDTH, "LineWidth", 0 )
81 0 : );
82 :
83 0 : return aDataPointPropertyLineMap;
84 : }
85 0 : ::comphelper::ItemPropertyMapType & lcl_GetLinePropertyMap()
86 : {
87 : static ::comphelper::ItemPropertyMapType aLinePropertyMap(
88 : ::comphelper::MakeItemPropertyMap
89 : IPM_MAP_ENTRY( XATTR_LINESTYLE, "LineStyle", 0 )
90 0 : IPM_MAP_ENTRY( XATTR_LINEWIDTH, "LineWidth", 0 )
91 0 : IPM_MAP_ENTRY( XATTR_LINECOLOR, "LineColor", 0 )
92 0 : IPM_MAP_ENTRY( XATTR_LINEJOINT, "LineJoint", 0 )
93 0 : );
94 :
95 0 : return aLinePropertyMap;
96 : }
97 0 : ::comphelper::ItemPropertyMapType & lcl_GetFillPropertyMap()
98 : {
99 : static ::comphelper::ItemPropertyMapType aFillPropertyMap(
100 : ::comphelper::MakeItemPropertyMap
101 : IPM_MAP_ENTRY( XATTR_FILLSTYLE, "FillStyle", 0 )
102 0 : IPM_MAP_ENTRY( XATTR_FILLCOLOR, "FillColor", 0 )
103 0 : IPM_MAP_ENTRY( XATTR_FILLBACKGROUND, "FillBackground", 0 )
104 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_POS, "FillBitmapRectanglePoint", 0 )
105 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_SIZEX, "FillBitmapSizeX", 0 )
106 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_SIZEY, "FillBitmapSizeY", 0 )
107 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_SIZELOG, "FillBitmapLogicalSize", 0 )
108 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_TILEOFFSETX, "FillBitmapOffsetX", 0 )
109 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_TILEOFFSETY, "FillBitmapOffsetY", 0 )
110 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_POSOFFSETX, "FillBitmapPositionOffsetX", 0 )
111 0 : IPM_MAP_ENTRY( XATTR_FILLBMP_POSOFFSETY, "FillBitmapPositionOffsetY", 0 )
112 0 : );
113 :
114 0 : return aFillPropertyMap;
115 : }
116 :
117 0 : bool lcl_supportsFillProperties( ::chart::wrapper::GraphicPropertyItemConverter::eGraphicObjectType eType )
118 : {
119 0 : return ( eType == ::chart::wrapper::GraphicPropertyItemConverter::FILLED_DATA_POINT ||
120 0 : eType == ::chart::wrapper::GraphicPropertyItemConverter::FILL_PROPERTIES ||
121 0 : eType == ::chart::wrapper::GraphicPropertyItemConverter::LINE_AND_FILL_PROPERTIES );
122 : }
123 :
124 0 : bool lcl_supportsLineProperties( ::chart::wrapper::GraphicPropertyItemConverter::eGraphicObjectType eType )
125 : {
126 0 : return ( eType != ::chart::wrapper::GraphicPropertyItemConverter::FILL_PROPERTIES );
127 : }
128 :
129 0 : bool lcl_SetContentForNamedProperty(
130 : const uno::Reference< lang::XMultiServiceFactory > & xFactory,
131 : const OUString & rTableName,
132 : NameOrIndex & rItem, sal_uInt8 nMemberId )
133 : {
134 0 : bool bResult = false;
135 0 : if( xFactory.is())
136 : {
137 0 : OUString aPropertyValue( rItem.GetName());
138 : uno::Reference< container::XNameAccess > xNameAcc(
139 0 : xFactory->createInstance( rTableName ),
140 0 : uno::UNO_QUERY );
141 0 : if( xNameAcc.is() &&
142 0 : xNameAcc->hasByName( aPropertyValue ))
143 : {
144 0 : rItem.PutValue( xNameAcc->getByName( aPropertyValue ), nMemberId );
145 0 : bResult = true;
146 0 : }
147 : }
148 0 : return bResult;
149 : }
150 :
151 : } // anonymous namespace
152 :
153 : namespace chart
154 : {
155 : namespace wrapper
156 : {
157 :
158 0 : GraphicPropertyItemConverter::GraphicPropertyItemConverter(
159 : const uno::Reference<
160 : beans::XPropertySet > & rPropertySet,
161 : SfxItemPool& rItemPool,
162 : SdrModel& rDrawModel,
163 : const uno::Reference< lang::XMultiServiceFactory > & xNamedPropertyContainerFactory,
164 : eGraphicObjectType eObjectType /* = FILL_PROPERTIES */ ) :
165 : ItemConverter( rPropertySet, rItemPool ),
166 : m_eGraphicObjectType( eObjectType ),
167 : m_rDrawModel( rDrawModel ),
168 0 : m_xNamedPropertyTableFactory( xNamedPropertyContainerFactory )
169 0 : {}
170 :
171 0 : GraphicPropertyItemConverter::~GraphicPropertyItemConverter()
172 0 : {}
173 :
174 0 : const sal_uInt16 * GraphicPropertyItemConverter::GetWhichPairs() const
175 : {
176 0 : const sal_uInt16 * pResult = NULL;
177 :
178 0 : switch( m_eGraphicObjectType )
179 : {
180 : case LINE_DATA_POINT:
181 : case FILLED_DATA_POINT:
182 0 : pResult = nRowWhichPairs; break;
183 : case LINE_PROPERTIES:
184 0 : pResult = nLinePropertyWhichPairs; break;
185 : case FILL_PROPERTIES:
186 0 : pResult = nFillPropertyWhichPairs; break;
187 : case LINE_AND_FILL_PROPERTIES:
188 0 : pResult = nLineAndFillPropertyWhichPairs; break;
189 : }
190 :
191 0 : return pResult;
192 : }
193 :
194 0 : bool GraphicPropertyItemConverter::GetItemProperty( tWhichIdType nWhichId, tPropertyNameWithMemberId & rOutProperty ) const
195 : {
196 0 : ::comphelper::ItemPropertyMapType::const_iterator aEndIt;
197 0 : ::comphelper::ItemPropertyMapType::const_iterator aIt;
198 :
199 0 : switch( m_eGraphicObjectType )
200 : {
201 : case LINE_DATA_POINT:
202 0 : aEndIt = lcl_GetDataPointLinePropertyMap().end();
203 0 : aIt = lcl_GetDataPointLinePropertyMap().find( nWhichId );
204 0 : break;
205 : case FILLED_DATA_POINT:
206 0 : aEndIt = lcl_GetDataPointFilledPropertyMap().end();
207 0 : aIt = lcl_GetDataPointFilledPropertyMap().find( nWhichId );
208 0 : break;
209 : case LINE_PROPERTIES:
210 0 : aEndIt = lcl_GetLinePropertyMap().end();
211 0 : aIt = lcl_GetLinePropertyMap().find( nWhichId );
212 0 : break;
213 :
214 : case FILL_PROPERTIES:
215 0 : aEndIt = lcl_GetFillPropertyMap().end();
216 0 : aIt = lcl_GetFillPropertyMap().find( nWhichId );
217 0 : break;
218 :
219 : case LINE_AND_FILL_PROPERTIES:
220 : // line
221 0 : aEndIt = lcl_GetLinePropertyMap().end();
222 0 : aIt = lcl_GetLinePropertyMap().find( nWhichId );
223 :
224 : // not found => try fill
225 0 : if( aIt == aEndIt )
226 : {
227 0 : aEndIt = lcl_GetFillPropertyMap().end();
228 0 : aIt = lcl_GetFillPropertyMap().find( nWhichId );
229 : }
230 0 : break;
231 : }
232 :
233 0 : if( aIt == aEndIt )
234 0 : return false;
235 :
236 0 : rOutProperty =(*aIt).second;
237 0 : return true;
238 : }
239 :
240 0 : void GraphicPropertyItemConverter::FillSpecialItem(
241 : sal_uInt16 nWhichId, SfxItemSet & rOutItemSet ) const
242 : throw( uno::Exception )
243 : {
244 0 : switch( nWhichId )
245 : {
246 : // bitmap property
247 : case XATTR_FILLBMP_TILE:
248 : case XATTR_FILLBMP_STRETCH:
249 : {
250 0 : drawing::BitmapMode aMode = drawing::BitmapMode_REPEAT;
251 0 : if( GetPropertySet()->getPropertyValue( "FillBitmapMode" ) >>= aMode )
252 : {
253 0 : rOutItemSet.Put( XFillBmpTileItem( aMode == drawing::BitmapMode_REPEAT ));
254 0 : rOutItemSet.Put( XFillBmpStretchItem( aMode == drawing::BitmapMode_STRETCH ));
255 : }
256 : }
257 0 : break;
258 :
259 : case XATTR_FILLFLOATTRANSPARENCE:
260 : try
261 : {
262 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
263 : {
264 : OUString aPropName =
265 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
266 : ? OUString( "TransparencyGradientName" )
267 0 : : OUString( "FillTransparenceGradientName" );
268 :
269 0 : uno::Any aValue( GetPropertySet()->getPropertyValue( aPropName ));
270 0 : if( aValue.hasValue())
271 : {
272 0 : XFillFloatTransparenceItem aItem;
273 0 : aItem.PutValue( aValue, MID_NAME );
274 :
275 : lcl_SetContentForNamedProperty(
276 : m_xNamedPropertyTableFactory, "com.sun.star.drawing.TransparencyGradientTable" ,
277 0 : aItem, MID_FILLGRADIENT );
278 :
279 : // this is important to enable the item
280 0 : OUString aName;
281 0 : if( (aValue >>= aName) &&
282 0 : !aName.isEmpty())
283 : {
284 0 : aItem.SetEnabled( true );
285 0 : rOutItemSet.Put( aItem );
286 0 : }
287 0 : }
288 : }
289 : }
290 0 : catch( const beans::UnknownPropertyException &ex )
291 : {
292 : ASSERT_EXCEPTION( ex );
293 : }
294 0 : break;
295 :
296 : case XATTR_GRADIENTSTEPCOUNT:
297 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
298 : {
299 : OUString aPropName =
300 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
301 : ? OUString( "GradientStepCount" )
302 0 : : OUString( "FillGradientStepCount" );
303 :
304 0 : uno::Any aValue( GetPropertySet()->getPropertyValue( aPropName ) );
305 0 : if( hasLongOrShortValue(aValue) )
306 : {
307 0 : sal_Int16 nStepCount = getShortForLongAlso(aValue);
308 0 : rOutItemSet.Put( XGradientStepCountItem( nStepCount ));
309 0 : }
310 : }
311 0 : break;
312 :
313 : case XATTR_LINEDASH:
314 0 : if( lcl_supportsLineProperties( m_eGraphicObjectType ))
315 : {
316 : OUString aPropName =
317 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
318 : ? OUString( "BorderDashName" )
319 0 : : OUString( "LineDashName" );
320 :
321 0 : XLineDashItem aItem;
322 0 : aItem.PutValue( GetPropertySet()->getPropertyValue( aPropName ), MID_NAME );
323 :
324 : lcl_SetContentForNamedProperty(
325 : m_xNamedPropertyTableFactory, "com.sun.star.drawing.DashTable" ,
326 0 : aItem, MID_LINEDASH );
327 :
328 : // translate model name to UI-name for predefined entries, so
329 : // that the correct entry is chosen in the list of UI-names
330 0 : XLineDashItem * pItemToPut = aItem.checkForUniqueItem( & m_rDrawModel );
331 :
332 0 : rOutItemSet.Put( * pItemToPut );
333 : }
334 0 : break;
335 :
336 : case XATTR_FILLGRADIENT:
337 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
338 : {
339 : OUString aPropName =
340 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
341 : ? OUString( "GradientName" )
342 0 : : OUString( "FillGradientName" );
343 :
344 0 : XFillGradientItem aItem;
345 0 : aItem.PutValue( GetPropertySet()->getPropertyValue( aPropName ), MID_NAME );
346 :
347 : lcl_SetContentForNamedProperty(
348 : m_xNamedPropertyTableFactory, "com.sun.star.drawing.GradientTable" ,
349 0 : aItem, MID_FILLGRADIENT );
350 :
351 : // translate model name to UI-name for predefined entries, so
352 : // that the correct entry is chosen in the list of UI-names
353 0 : XFillGradientItem * pItemToPut = aItem.checkForUniqueItem( & m_rDrawModel );
354 :
355 0 : rOutItemSet.Put( * pItemToPut );
356 : }
357 0 : break;
358 :
359 : case XATTR_FILLHATCH:
360 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
361 : {
362 : OUString aPropName =
363 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
364 : ? OUString( "HatchName" )
365 0 : : OUString( "FillHatchName" );
366 :
367 0 : XFillHatchItem aItem;
368 0 : aItem.PutValue( GetPropertySet()->getPropertyValue( aPropName ), MID_NAME );
369 :
370 : lcl_SetContentForNamedProperty(
371 : m_xNamedPropertyTableFactory, "com.sun.star.drawing.HatchTable" ,
372 0 : aItem, MID_FILLHATCH );
373 :
374 : // translate model name to UI-name for predefined entries, so
375 : // that the correct entry is chosen in the list of UI-names
376 0 : XFillHatchItem * pItemToPut = aItem.checkForUniqueItem( & m_rDrawModel );
377 :
378 0 : rOutItemSet.Put( * pItemToPut );
379 : }
380 0 : break;
381 :
382 : case XATTR_FILLBITMAP:
383 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
384 : {
385 0 : XFillBitmapItem aItem;
386 0 : aItem.PutValue( GetPropertySet()->getPropertyValue( "FillBitmapName" ), MID_NAME );
387 :
388 : lcl_SetContentForNamedProperty(
389 : m_xNamedPropertyTableFactory, "com.sun.star.drawing.BitmapTable" ,
390 0 : aItem, MID_GRAFURL );
391 :
392 : // translate model name to UI-name for predefined entries, so
393 : // that the correct entry is chosen in the list of UI-names
394 0 : XFillBitmapItem * pItemToPut = aItem.checkForUniqueItem( & m_rDrawModel );
395 :
396 0 : rOutItemSet.Put( * pItemToPut );
397 : }
398 0 : break;
399 :
400 : // hack, because QueryValue of XLineTransparenceItem returns sal_Int32
401 : // instead of sal_Int16
402 : case XATTR_LINETRANSPARENCE:
403 0 : if( lcl_supportsLineProperties( m_eGraphicObjectType ))
404 : {
405 : OUString aPropName =
406 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
407 : ? OUString( "BorderTransparency" )
408 0 : : (m_eGraphicObjectType == LINE_DATA_POINT)
409 : ? OUString( "Transparency" )
410 0 : : OUString( "LineTransparence" );
411 :
412 0 : XLineTransparenceItem aItem;
413 0 : aItem.PutValue( GetPropertySet()->getPropertyValue( aPropName ) );
414 :
415 0 : rOutItemSet.Put( aItem );
416 : }
417 0 : break;
418 :
419 : // hack, because QueryValue of XFillTransparenceItem returns sal_Int32
420 : // instead of sal_Int16
421 : case XATTR_FILLTRANSPARENCE:
422 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
423 : {
424 : OUString aPropName =
425 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
426 : ? OUString( "Transparency" )
427 0 : : OUString( "FillTransparence" );
428 :
429 0 : XFillTransparenceItem aItem;
430 0 : aItem.PutValue( GetPropertySet()->getPropertyValue( aPropName ) );
431 :
432 0 : rOutItemSet.Put( aItem );
433 : }
434 0 : break;
435 : }
436 0 : }
437 :
438 0 : bool GraphicPropertyItemConverter::ApplySpecialItem(
439 : sal_uInt16 nWhichId, const SfxItemSet & rItemSet )
440 : throw( uno::Exception )
441 : {
442 0 : bool bChanged = false;
443 0 : uno::Any aValue;
444 :
445 0 : switch( nWhichId )
446 : {
447 : // bitmap property
448 : case XATTR_FILLBMP_STRETCH:
449 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
450 : {
451 0 : const OUString aModePropName("FillBitmapMode");
452 : bool bStretched = static_cast< const XFillBmpStretchItem & >(
453 0 : rItemSet.Get( XATTR_FILLBMP_STRETCH )).GetValue();
454 : drawing::BitmapMode aMode =
455 0 : (bStretched ? drawing::BitmapMode_STRETCH : drawing::BitmapMode_NO_REPEAT);
456 :
457 0 : aValue <<= aMode;
458 0 : if( aValue != GetPropertySet()->getPropertyValue( aModePropName ))
459 : {
460 0 : GetPropertySet()->setPropertyValue( aModePropName, aValue );
461 0 : bChanged = true;
462 0 : }
463 : }
464 0 : break;
465 :
466 : case XATTR_FILLBMP_TILE:
467 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
468 : {
469 0 : const OUString aModePropName("FillBitmapMode");
470 : bool bTiled = static_cast< const XFillBmpTileItem & >(
471 0 : rItemSet.Get( XATTR_FILLBMP_TILE )).GetValue();
472 : drawing::BitmapMode aMode =
473 0 : (bTiled ? drawing::BitmapMode_REPEAT : drawing::BitmapMode_NO_REPEAT);
474 :
475 0 : aValue <<= aMode;
476 0 : if( aValue != GetPropertySet()->getPropertyValue( aModePropName ))
477 : {
478 0 : GetPropertySet()->setPropertyValue( aModePropName, aValue );
479 0 : bChanged = true;
480 0 : }
481 : }
482 0 : break;
483 :
484 : case XATTR_FILLFLOATTRANSPARENCE:
485 : try
486 : {
487 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
488 : {
489 : OUString aPropName =
490 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
491 : ? OUString( "TransparencyGradientName" )
492 0 : : OUString( "FillTransparenceGradientName" );
493 :
494 : const XFillFloatTransparenceItem & rItem =
495 : static_cast< const XFillFloatTransparenceItem & >(
496 0 : rItemSet.Get( nWhichId ));
497 :
498 0 : if( rItem.IsEnabled() &&
499 0 : rItem.QueryValue( aValue, MID_NAME ))
500 : {
501 0 : uno::Any aGradient;
502 0 : rItem.QueryValue( aGradient, MID_FILLGRADIENT );
503 :
504 : // add TransparencyGradient to list if it does not already exist
505 0 : OUString aPreferredName;
506 0 : aValue >>= aPreferredName;
507 0 : aValue <<= PropertyHelper::addTransparencyGradientUniqueNameToTable(
508 0 : aGradient, m_xNamedPropertyTableFactory, aPreferredName );
509 :
510 0 : if( aValue != GetPropertySet()->getPropertyValue( aPropName ))
511 : {
512 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
513 0 : bChanged = true;
514 0 : }
515 : }
516 : else
517 : {
518 0 : OUString aName;
519 0 : if( ( GetPropertySet()->getPropertyValue( aPropName ) >>= aName )
520 0 : && !aName.isEmpty() )
521 : {
522 0 : uno::Reference< beans::XPropertyState > xState( GetPropertySet(), uno::UNO_QUERY );
523 0 : if( xState.is())
524 0 : xState->setPropertyToDefault( aPropName );
525 0 : bChanged = true;
526 0 : }
527 0 : }
528 : }
529 : }
530 0 : catch( const beans::UnknownPropertyException &ex )
531 : {
532 : ASSERT_EXCEPTION( ex );
533 : }
534 0 : break;
535 :
536 : case XATTR_GRADIENTSTEPCOUNT:
537 : {
538 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
539 : {
540 : OUString aPropName =
541 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
542 : ? OUString( "GradientStepCount" )
543 0 : : OUString( "FillGradientStepCount" );
544 :
545 : sal_Int16 nStepCount = ( static_cast< const XGradientStepCountItem & >(
546 0 : rItemSet.Get( nWhichId ))).GetValue();
547 :
548 0 : aValue <<= nStepCount;
549 0 : if( aValue != GetPropertySet()->getPropertyValue( aPropName ))
550 : {
551 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
552 0 : bChanged = true;
553 0 : }
554 : }
555 : }
556 0 : break;
557 :
558 : case XATTR_LINEDASH:
559 : {
560 0 : if( lcl_supportsLineProperties( m_eGraphicObjectType ))
561 : {
562 :
563 : OUString aPropName =
564 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
565 : ? OUString( "BorderDashName" )
566 0 : : OUString( "LineDashName" );
567 :
568 : const XLineDashItem & rItem =
569 : static_cast< const XLineDashItem & >(
570 0 : rItemSet.Get( nWhichId ));
571 :
572 0 : if( rItem.QueryValue( aValue, MID_NAME ))
573 : {
574 0 : if( aValue != GetPropertySet()->getPropertyValue( aPropName ))
575 : {
576 : // add LineDash to list
577 0 : uno::Any aLineDash;
578 0 : rItem.QueryValue( aLineDash, MID_LINEDASH );
579 0 : OUString aPreferredName;
580 0 : aValue >>= aPreferredName;
581 0 : aValue <<= PropertyHelper::addLineDashUniqueNameToTable(
582 0 : aLineDash, m_xNamedPropertyTableFactory, aPreferredName );
583 :
584 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
585 0 : bChanged = true;
586 : }
587 0 : }
588 : }
589 : }
590 0 : break;
591 :
592 : case XATTR_FILLGRADIENT:
593 : {
594 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
595 : {
596 : OUString aPropName =
597 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
598 : ? OUString( "GradientName" )
599 0 : : OUString( "FillGradientName" );
600 :
601 : const XFillGradientItem & rItem =
602 : static_cast< const XFillGradientItem & >(
603 0 : rItemSet.Get( nWhichId ));
604 :
605 0 : if( rItem.QueryValue( aValue, MID_NAME ))
606 : {
607 0 : if( aValue != GetPropertySet()->getPropertyValue( aPropName ))
608 : {
609 : // add Gradient to list
610 0 : uno::Any aGradient;
611 0 : rItem.QueryValue( aGradient, MID_FILLGRADIENT );
612 0 : OUString aPreferredName;
613 0 : aValue >>= aPreferredName;
614 0 : aValue <<= PropertyHelper::addGradientUniqueNameToTable(
615 0 : aGradient, m_xNamedPropertyTableFactory, aPreferredName );
616 :
617 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
618 0 : bChanged = true;
619 : }
620 0 : }
621 : }
622 : }
623 0 : break;
624 :
625 : case XATTR_FILLHATCH:
626 : {
627 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
628 : {
629 : OUString aPropName =
630 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
631 : ? OUString( "HatchName" )
632 0 : : OUString( "FillHatchName" );
633 :
634 : const XFillHatchItem & rItem =
635 : static_cast< const XFillHatchItem & >(
636 0 : rItemSet.Get( nWhichId ));
637 :
638 0 : if( rItem.QueryValue( aValue, MID_NAME ))
639 : {
640 0 : if( aValue != GetPropertySet()->getPropertyValue( aPropName ))
641 : {
642 : // add Hatch to list
643 0 : uno::Any aHatch;
644 0 : rItem.QueryValue( aHatch, MID_FILLHATCH );
645 0 : OUString aPreferredName;
646 0 : aValue >>= aPreferredName;
647 0 : aValue <<= PropertyHelper::addHatchUniqueNameToTable(
648 0 : aHatch, m_xNamedPropertyTableFactory, aPreferredName );
649 :
650 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
651 0 : bChanged = true;
652 : }
653 0 : }
654 : }
655 : }
656 0 : break;
657 :
658 : case XATTR_FILLBITMAP:
659 : {
660 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
661 : {
662 : const XFillBitmapItem & rItem =
663 : static_cast< const XFillBitmapItem & >(
664 0 : rItemSet.Get( nWhichId ));
665 :
666 0 : if( rItem.QueryValue( aValue, MID_NAME ))
667 : {
668 0 : if( aValue != GetPropertySet()->getPropertyValue( "FillBitmapName" ))
669 : {
670 : // add Bitmap to list
671 0 : uno::Any aBitmap;
672 0 : rItem.QueryValue( aBitmap, MID_GRAFURL );
673 0 : OUString aPreferredName;
674 0 : aValue >>= aPreferredName;
675 0 : aValue <<= PropertyHelper::addBitmapUniqueNameToTable(
676 0 : aBitmap, m_xNamedPropertyTableFactory, aPreferredName );
677 :
678 0 : GetPropertySet()->setPropertyValue( "FillBitmapName" , aValue );
679 0 : bChanged = true;
680 : }
681 : }
682 : }
683 : }
684 0 : break;
685 :
686 : // hack, because QueryValue of XLineTransparenceItem returns sal_Int32
687 : // instead of sal_Int16
688 : case XATTR_LINETRANSPARENCE:
689 0 : if( lcl_supportsLineProperties( m_eGraphicObjectType ))
690 : {
691 : OUString aPropName =
692 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
693 : ? OUString( "BorderTransparency" )
694 0 : : (m_eGraphicObjectType == LINE_DATA_POINT)
695 : ? OUString( "Transparency" )
696 0 : : OUString( "LineTransparence" );
697 :
698 : const XLineTransparenceItem & rItem =
699 : static_cast< const XLineTransparenceItem & >(
700 0 : rItemSet.Get( nWhichId ));
701 :
702 0 : if( rItem.QueryValue( aValue ))
703 : {
704 : OSL_ENSURE( ! aValue.isExtractableTo(
705 : ::getCppuType( reinterpret_cast< const sal_Int16 * >(0))),
706 : "TransparenceItem QueryValue bug is fixed. Remove hack." );
707 0 : sal_Int32 nValue = 0;
708 0 : if( aValue >>= nValue )
709 : {
710 : OSL_ENSURE( nValue < SAL_MAX_INT16, "Transparency value too large" );
711 0 : sal_Int16 nValueToSet( static_cast< sal_Int16 >( nValue ));
712 0 : aValue <<= nValueToSet;
713 :
714 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
715 0 : bChanged = true;
716 : }
717 : else
718 : {
719 : OSL_FAIL( "Wrong type in Transparency Any" );
720 : }
721 0 : }
722 : }
723 0 : break;
724 :
725 : // hack, because QueryValue of XFillTransparenceItem returns sal_Int32
726 : // instead of sal_Int16
727 : case XATTR_FILLTRANSPARENCE:
728 0 : if( lcl_supportsFillProperties( m_eGraphicObjectType ))
729 : {
730 : OUString aPropName =
731 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
732 : ? OUString( "Transparency" )
733 0 : : OUString( "FillTransparence" );
734 :
735 : const XFillTransparenceItem & rItem =
736 : static_cast< const XFillTransparenceItem & >(
737 0 : rItemSet.Get( nWhichId ));
738 :
739 0 : if( rItem.QueryValue( aValue ))
740 : {
741 : OSL_ENSURE( ! aValue.isExtractableTo(
742 : ::getCppuType( reinterpret_cast< const sal_Int16 * >(0))),
743 : "TransparenceItem QueryValue bug is fixed. Remove hack." );
744 0 : sal_Int32 nValue = 0;
745 0 : if( aValue >>= nValue )
746 : {
747 : OSL_ENSURE( nValue < SAL_MAX_INT16, "Transparency value too large" );
748 0 : sal_Int16 nValueToSet( static_cast< sal_Int16 >( nValue ));
749 0 : aValue <<= nValueToSet;
750 :
751 0 : GetPropertySet()->setPropertyValue( aPropName, aValue );
752 : // if linear or no transparence is set, delete the gradient
753 : OUString aTransGradPropName =
754 0 : (m_eGraphicObjectType == FILLED_DATA_POINT)
755 : ? OUString( "TransparencyGradientName" )
756 0 : : OUString( "FillTransparenceGradientName" );
757 0 : GetPropertySet()->setPropertyValue(
758 0 : aTransGradPropName, uno::makeAny( OUString() ));
759 :
760 0 : bChanged = true;
761 : }
762 : else
763 : {
764 : OSL_FAIL( "Wrong type in Transparency Any" );
765 : }
766 0 : }
767 : }
768 0 : break;
769 : }
770 :
771 0 : return bChanged;
772 : }
773 :
774 : } // namespace wrapper
775 : } // namespace chart
776 :
777 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|