1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: TitleItemConverter.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_chart2.hxx"
33 #include "TitleItemConverter.hxx"
34 #include "SchWhichPairs.hxx"
36 #include "ItemPropertyMap.hxx"
37 #include "GraphicPropertyItemConverter.hxx"
38 #include "CharacterPropertyItemConverter.hxx"
39 #include "MultipleItemConverter.hxx"
40 #include <svtools/intitem.hxx>
41 #include <rtl/math.hxx>
43 #include <com/sun/star/chart2/XTitled.hpp>
48 using namespace ::com::sun::star
;
52 ::comphelper::ItemPropertyMapType
& lcl_GetTitlePropertyMap()
54 static ::comphelper::ItemPropertyMapType
aTitlePropertyMap(
55 ::comphelper::MakeItemPropertyMap
56 IPM_MAP_ENTRY( SCHATTR_TEXT_STACKED
, "StackCharacters", 0 )
59 return aTitlePropertyMap
;
61 } // anonymous namespace
68 // ========================================
70 class FormattedStringsConverter
: public ::comphelper::MultipleItemConverter
73 FormattedStringsConverter(
74 const uno::Sequence
< uno::Reference
< chart2::XFormattedString
> > & aStrings
,
75 SfxItemPool
& rItemPool
,
76 ::std::auto_ptr
< awt::Size
> pRefSize
,
77 const uno::Reference
< beans::XPropertySet
> & xParentProp
);
78 virtual ~FormattedStringsConverter();
81 virtual const USHORT
* GetWhichPairs() const;
84 // ----------------------------------------
86 FormattedStringsConverter::FormattedStringsConverter(
87 const uno::Sequence
< uno::Reference
< chart2::XFormattedString
> > & aStrings
,
88 SfxItemPool
& rItemPool
,
89 ::std::auto_ptr
< ::com::sun::star::awt::Size
> pRefSize
,
90 const uno::Reference
< beans::XPropertySet
> & xParentProp
) :
91 MultipleItemConverter( rItemPool
)
93 bool bHasRefSize
= (pRefSize
.get() && xParentProp
.is());
94 for( sal_Int32 i
= 0; i
< aStrings
.getLength(); ++i
)
96 uno::Reference
< beans::XPropertySet
> xProp( aStrings
[ i
], uno::UNO_QUERY
);
100 m_aConverters
.push_back( new CharacterPropertyItemConverter(
102 ::std::auto_ptr
< awt::Size
>( new awt::Size( *pRefSize
)),
103 C2U( "ReferencePageSize" ),
106 m_aConverters
.push_back( new CharacterPropertyItemConverter( xProp
, rItemPool
));
111 FormattedStringsConverter::~FormattedStringsConverter()
115 const USHORT
* FormattedStringsConverter::GetWhichPairs() const
117 return nCharacterPropertyWhichPairs
;
120 // ========================================
122 TitleItemConverter::TitleItemConverter(
123 const ::com::sun::star::uno::Reference
<
124 ::com::sun::star::beans::XPropertySet
> & rPropertySet
,
125 SfxItemPool
& rItemPool
,
126 SdrModel
& rDrawModel
,
127 const uno::Reference
< lang::XMultiServiceFactory
> & xNamedPropertyContainerFactory
,
128 ::std::auto_ptr
< ::com::sun::star::awt::Size
> pRefSize
) :
129 ItemConverter( rPropertySet
, rItemPool
)
131 m_aConverters
.push_back( new GraphicPropertyItemConverter(
132 rPropertySet
, rItemPool
, rDrawModel
,
133 xNamedPropertyContainerFactory
,
134 GraphicPropertyItemConverter::LINE_AND_FILL_PROPERTIES
));
136 // CharacterProperties are not at the title but at its contained XFormattedString objects
137 // take the first formatted string in the sequence
138 uno::Reference
< chart2::XTitle
> xTitle( rPropertySet
, uno::UNO_QUERY
);
141 uno::Sequence
< uno::Reference
< chart2::XFormattedString
> > aStringSeq( xTitle
->getText());
142 if( aStringSeq
.getLength() > 0 )
144 m_aConverters
.push_back(
145 new FormattedStringsConverter( aStringSeq
, rItemPool
, pRefSize
, rPropertySet
));
150 TitleItemConverter::~TitleItemConverter()
152 ::std::for_each( m_aConverters
.begin(), m_aConverters
.end(),
153 ::comphelper::DeleteItemConverterPtr() );
156 void TitleItemConverter::FillItemSet( SfxItemSet
& rOutItemSet
) const
158 ::std::for_each( m_aConverters
.begin(), m_aConverters
.end(),
159 ::comphelper::FillItemSetFunc( rOutItemSet
));
162 ItemConverter::FillItemSet( rOutItemSet
);
165 bool TitleItemConverter::ApplyItemSet( const SfxItemSet
& rItemSet
)
167 bool bResult
= false;
169 ::std::for_each( m_aConverters
.begin(), m_aConverters
.end(),
170 ::comphelper::ApplyItemSetFunc( rItemSet
, bResult
));
173 return ItemConverter::ApplyItemSet( rItemSet
) || bResult
;
176 const USHORT
* TitleItemConverter::GetWhichPairs() const
178 // must span all used items!
179 return nTitleWhichPairs
;
182 bool TitleItemConverter::GetItemProperty( tWhichIdType nWhichId
, tPropertyNameWithMemberId
& rOutProperty
) const
184 ::comphelper::ItemPropertyMapType
& rMap( lcl_GetTitlePropertyMap());
185 ::comphelper::ItemPropertyMapType::const_iterator
aIt( rMap
.find( nWhichId
));
187 if( aIt
== rMap
.end())
190 rOutProperty
=(*aIt
).second
;
195 bool TitleItemConverter::ApplySpecialItem(
196 USHORT nWhichId
, const SfxItemSet
& rItemSet
)
197 throw( uno::Exception
)
199 bool bChanged
= false;
203 case SCHATTR_TEXT_DEGREES
:
205 // convert int to double (divided by 100)
206 double fVal
= static_cast< double >(
207 static_cast< const SfxInt32Item
& >(
208 rItemSet
.Get( nWhichId
)).GetValue()) / 100.0;
209 double fOldVal
= 0.0;
211 ( GetPropertySet()->getPropertyValue( C2U( "TextRotation" )) >>= fOldVal
);
213 if( ! bPropExisted
||
214 ( bPropExisted
&& fOldVal
!= fVal
))
216 GetPropertySet()->setPropertyValue( C2U( "TextRotation" ), uno::makeAny( fVal
));
226 void TitleItemConverter::FillSpecialItem(
227 USHORT nWhichId
, SfxItemSet
& rOutItemSet
) const
228 throw( uno::Exception
)
232 case SCHATTR_TEXT_DEGREES
:
234 // convert double to int (times 100)
237 if( GetPropertySet()->getPropertyValue( C2U( "TextRotation" )) >>= fVal
)
239 rOutItemSet
.Put( SfxInt32Item( nWhichId
, static_cast< sal_Int32
>(
240 ::rtl::math::round( fVal
* 100.0 ) ) ));
247 } // namespace wrapper