1*cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*cde9e8dcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*cde9e8dcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*cde9e8dcSAndrew Rist  * distributed with this work for additional information
6*cde9e8dcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*cde9e8dcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*cde9e8dcSAndrew Rist  * "License"); you may not use this file except in compliance
9*cde9e8dcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*cde9e8dcSAndrew Rist  *
11*cde9e8dcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*cde9e8dcSAndrew Rist  *
13*cde9e8dcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*cde9e8dcSAndrew Rist  * software distributed under the License is distributed on an
15*cde9e8dcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*cde9e8dcSAndrew Rist  * KIND, either express or implied.  See the License for the
17*cde9e8dcSAndrew Rist  * specific language governing permissions and limitations
18*cde9e8dcSAndrew Rist  * under the License.
19*cde9e8dcSAndrew Rist  *
20*cde9e8dcSAndrew Rist  *************************************************************/
21*cde9e8dcSAndrew Rist 
22*cde9e8dcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir #include "TitleWrapper.hxx"
27cdf0e10cSrcweir #include "macros.hxx"
28cdf0e10cSrcweir #include "ContainerHelper.hxx"
29cdf0e10cSrcweir #include "ControllerLockGuard.hxx"
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <comphelper/InlineContainer.hxx>
32cdf0e10cSrcweir #include <com/sun/star/beans/PropertyAttribute.hpp>
33cdf0e10cSrcweir #include <com/sun/star/chart2/RelativePosition.hpp>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #include "CharacterProperties.hxx"
36cdf0e10cSrcweir #include "LineProperties.hxx"
37cdf0e10cSrcweir #include "FillProperties.hxx"
38cdf0e10cSrcweir #include "UserDefinedProperties.hxx"
39cdf0e10cSrcweir #include "WrappedCharacterHeightProperty.hxx"
40cdf0e10cSrcweir #include "WrappedTextRotationProperty.hxx"
41cdf0e10cSrcweir #include "WrappedAutomaticPositionProperties.hxx"
42cdf0e10cSrcweir #include "WrappedScaleTextProperties.hxx"
43cdf0e10cSrcweir 
44cdf0e10cSrcweir #include <algorithm>
45cdf0e10cSrcweir #include <rtl/ustrbuf.hxx>
46cdf0e10cSrcweir 
47cdf0e10cSrcweir using namespace ::com::sun::star;
48cdf0e10cSrcweir using ::com::sun::star::beans::Property;
49cdf0e10cSrcweir using ::osl::MutexGuard;
50cdf0e10cSrcweir using ::rtl::OUString;
51cdf0e10cSrcweir using ::com::sun::star::uno::Any;
52cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
53cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
54cdf0e10cSrcweir 
55cdf0e10cSrcweir 
56cdf0e10cSrcweir namespace chart
57cdf0e10cSrcweir {
58cdf0e10cSrcweir class WrappedTitleStringProperty : public WrappedProperty
59cdf0e10cSrcweir {
60cdf0e10cSrcweir public:
61cdf0e10cSrcweir     WrappedTitleStringProperty( const Reference< uno::XComponentContext >& xContext );
62cdf0e10cSrcweir     virtual ~WrappedTitleStringProperty();
63cdf0e10cSrcweir 
64cdf0e10cSrcweir     virtual void setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
65cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException);
66cdf0e10cSrcweir     virtual Any getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const
67cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
68cdf0e10cSrcweir     virtual Any getPropertyDefault( const Reference< beans::XPropertyState >& xInnerPropertyState ) const
69cdf0e10cSrcweir                         throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException);
70cdf0e10cSrcweir 
71cdf0e10cSrcweir protected:
72cdf0e10cSrcweir     Reference< uno::XComponentContext > m_xContext;
73cdf0e10cSrcweir };
74cdf0e10cSrcweir 
WrappedTitleStringProperty(const Reference<uno::XComponentContext> & xContext)75cdf0e10cSrcweir WrappedTitleStringProperty::WrappedTitleStringProperty( const Reference< uno::XComponentContext >& xContext )
76cdf0e10cSrcweir     : ::chart::WrappedProperty( C2U( "String" ), OUString() )
77cdf0e10cSrcweir     , m_xContext( xContext )
78cdf0e10cSrcweir {
79cdf0e10cSrcweir }
~WrappedTitleStringProperty()80cdf0e10cSrcweir WrappedTitleStringProperty::~WrappedTitleStringProperty()
81cdf0e10cSrcweir {
82cdf0e10cSrcweir }
83cdf0e10cSrcweir 
setPropertyValue(const Any & rOuterValue,const Reference<beans::XPropertySet> & xInnerPropertySet) const84cdf0e10cSrcweir void WrappedTitleStringProperty::setPropertyValue( const Any& rOuterValue, const Reference< beans::XPropertySet >& xInnerPropertySet ) const
85cdf0e10cSrcweir                 throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
86cdf0e10cSrcweir {
87cdf0e10cSrcweir     Reference< chart2::XTitle > xTitle(xInnerPropertySet,uno::UNO_QUERY);
88cdf0e10cSrcweir     if(xTitle.is())
89cdf0e10cSrcweir     {
90cdf0e10cSrcweir         OUString aString;
91cdf0e10cSrcweir         rOuterValue >>= aString;
92cdf0e10cSrcweir         TitleHelper::setCompleteString( aString, xTitle, m_xContext );
93cdf0e10cSrcweir     }
94cdf0e10cSrcweir }
getPropertyValue(const Reference<beans::XPropertySet> & xInnerPropertySet) const95cdf0e10cSrcweir Any WrappedTitleStringProperty::getPropertyValue( const Reference< beans::XPropertySet >& xInnerPropertySet ) const
96cdf0e10cSrcweir                         throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
97cdf0e10cSrcweir {
98cdf0e10cSrcweir     Any aRet( getPropertyDefault( Reference< beans::XPropertyState >( xInnerPropertySet, uno::UNO_QUERY ) ) );
99cdf0e10cSrcweir     Reference< chart2::XTitle > xTitle(xInnerPropertySet,uno::UNO_QUERY);
100cdf0e10cSrcweir     if(xTitle.is())
101cdf0e10cSrcweir     {
102cdf0e10cSrcweir         Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText());
103cdf0e10cSrcweir 
104cdf0e10cSrcweir         ::rtl::OUStringBuffer aBuf;
105cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aStrings.getLength(); ++i )
106cdf0e10cSrcweir         {
107cdf0e10cSrcweir             aBuf.append( aStrings[ i ]->getString());
108cdf0e10cSrcweir         }
109cdf0e10cSrcweir         aRet <<= aBuf.makeStringAndClear();
110cdf0e10cSrcweir     }
111cdf0e10cSrcweir     return aRet;
112cdf0e10cSrcweir }
getPropertyDefault(const Reference<beans::XPropertyState> &) const113cdf0e10cSrcweir Any WrappedTitleStringProperty::getPropertyDefault( const Reference< beans::XPropertyState >& /*xInnerPropertyState*/ ) const
114cdf0e10cSrcweir                         throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
115cdf0e10cSrcweir {
116cdf0e10cSrcweir     return uno::makeAny( rtl::OUString() );//default title is a empty String
117cdf0e10cSrcweir }
118cdf0e10cSrcweir 
119cdf0e10cSrcweir //-----------------------------------------------------------------------------
120cdf0e10cSrcweir //-----------------------------------------------------------------------------
121cdf0e10cSrcweir 
122cdf0e10cSrcweir class WrappedStackedTextProperty : public WrappedProperty
123cdf0e10cSrcweir {
124cdf0e10cSrcweir public:
125cdf0e10cSrcweir     WrappedStackedTextProperty();
126cdf0e10cSrcweir     virtual ~WrappedStackedTextProperty();
127cdf0e10cSrcweir };
128cdf0e10cSrcweir 
WrappedStackedTextProperty()129cdf0e10cSrcweir WrappedStackedTextProperty::WrappedStackedTextProperty()
130cdf0e10cSrcweir     : ::chart::WrappedProperty( C2U( "StackedText" ), C2U( "StackCharacters" ) )
131cdf0e10cSrcweir {
132cdf0e10cSrcweir }
~WrappedStackedTextProperty()133cdf0e10cSrcweir WrappedStackedTextProperty::~WrappedStackedTextProperty()
134cdf0e10cSrcweir {
135cdf0e10cSrcweir }
136cdf0e10cSrcweir 
137cdf0e10cSrcweir }// end namespace chart
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 
140cdf0e10cSrcweir //-----------------------------------------------------------------------------
141cdf0e10cSrcweir //-----------------------------------------------------------------------------
142cdf0e10cSrcweir //-----------------------------------------------------------------------------
143cdf0e10cSrcweir //-----------------------------------------------------------------------------
144cdf0e10cSrcweir 
145cdf0e10cSrcweir namespace
146cdf0e10cSrcweir {
147cdf0e10cSrcweir static const OUString lcl_aServiceName(
148cdf0e10cSrcweir     RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.comp.chart.Title" ));
149cdf0e10cSrcweir 
150cdf0e10cSrcweir enum
151cdf0e10cSrcweir {
152cdf0e10cSrcweir     PROP_TITLE_STRING,
153cdf0e10cSrcweir     PROP_TITLE_TEXT_ROTATION,
154cdf0e10cSrcweir     PROP_TITLE_TEXT_STACKED
155cdf0e10cSrcweir };
156cdf0e10cSrcweir 
lcl_AddPropertiesToVector(::std::vector<Property> & rOutProperties)157cdf0e10cSrcweir void lcl_AddPropertiesToVector(
158cdf0e10cSrcweir     ::std::vector< Property > & rOutProperties )
159cdf0e10cSrcweir {
160cdf0e10cSrcweir     rOutProperties.push_back(
161cdf0e10cSrcweir         Property( C2U( "String" ),
162cdf0e10cSrcweir                   PROP_TITLE_STRING,
163cdf0e10cSrcweir                   ::getCppuType( reinterpret_cast< const ::rtl::OUString * >(0)),
164cdf0e10cSrcweir                   beans::PropertyAttribute::BOUND
165cdf0e10cSrcweir                   | beans::PropertyAttribute::MAYBEVOID ));
166cdf0e10cSrcweir 
167cdf0e10cSrcweir     rOutProperties.push_back(
168cdf0e10cSrcweir         Property( C2U( "TextRotation" ),
169cdf0e10cSrcweir                   PROP_TITLE_TEXT_ROTATION,
170cdf0e10cSrcweir                   ::getCppuType( reinterpret_cast< const sal_Int32 * >(0)),
171cdf0e10cSrcweir                   beans::PropertyAttribute::BOUND
172cdf0e10cSrcweir                   | beans::PropertyAttribute::MAYBEDEFAULT ));
173cdf0e10cSrcweir     rOutProperties.push_back(
174cdf0e10cSrcweir         Property( C2U( "StackedText" ),
175cdf0e10cSrcweir                   PROP_TITLE_TEXT_STACKED,
176cdf0e10cSrcweir                   ::getBooleanCppuType(),
177cdf0e10cSrcweir                   beans::PropertyAttribute::BOUND
178cdf0e10cSrcweir                   | beans::PropertyAttribute::MAYBEDEFAULT ));
179cdf0e10cSrcweir }
180cdf0e10cSrcweir 
181cdf0e10cSrcweir struct StaticTitleWrapperPropertyArray_Initializer
182cdf0e10cSrcweir {
operator ()__anon37575abc0111::StaticTitleWrapperPropertyArray_Initializer183cdf0e10cSrcweir     Sequence< Property >* operator()()
184cdf0e10cSrcweir     {
185cdf0e10cSrcweir         static Sequence< Property > aPropSeq( lcl_GetPropertySequence() );
186cdf0e10cSrcweir         return &aPropSeq;
187cdf0e10cSrcweir     }
188cdf0e10cSrcweir 
189cdf0e10cSrcweir private:
lcl_GetPropertySequence__anon37575abc0111::StaticTitleWrapperPropertyArray_Initializer190cdf0e10cSrcweir     Sequence< Property > lcl_GetPropertySequence()
191cdf0e10cSrcweir     {
192cdf0e10cSrcweir         ::std::vector< beans::Property > aProperties;
193cdf0e10cSrcweir         lcl_AddPropertiesToVector( aProperties );
194cdf0e10cSrcweir         ::chart::CharacterProperties::AddPropertiesToVector( aProperties );
195cdf0e10cSrcweir         ::chart::LineProperties::AddPropertiesToVector( aProperties );
196cdf0e10cSrcweir         ::chart::FillProperties::AddPropertiesToVector( aProperties );
197cdf0e10cSrcweir         //::chart::NamedProperties::AddPropertiesToVector( aProperties );
198cdf0e10cSrcweir         ::chart::UserDefinedProperties::AddPropertiesToVector( aProperties );
199cdf0e10cSrcweir         ::chart::wrapper::WrappedAutomaticPositionProperties::addProperties( aProperties );
200cdf0e10cSrcweir         ::chart::wrapper::WrappedScaleTextProperties::addProperties( aProperties );
201cdf0e10cSrcweir 
202cdf0e10cSrcweir         ::std::sort( aProperties.begin(), aProperties.end(),
203cdf0e10cSrcweir                      ::chart::PropertyNameLess() );
204cdf0e10cSrcweir 
205cdf0e10cSrcweir         return ::chart::ContainerHelper::ContainerToSequence( aProperties );
206cdf0e10cSrcweir     }
207cdf0e10cSrcweir };
208cdf0e10cSrcweir 
209cdf0e10cSrcweir struct StaticTitleWrapperPropertyArray : public rtl::StaticAggregate< Sequence< Property >, StaticTitleWrapperPropertyArray_Initializer >
210cdf0e10cSrcweir {
211cdf0e10cSrcweir };
212cdf0e10cSrcweir 
213cdf0e10cSrcweir } // anonymous namespace
214cdf0e10cSrcweir 
215cdf0e10cSrcweir // --------------------------------------------------------------------------------
216cdf0e10cSrcweir 
217cdf0e10cSrcweir namespace chart
218cdf0e10cSrcweir {
219cdf0e10cSrcweir namespace wrapper
220cdf0e10cSrcweir {
221cdf0e10cSrcweir 
TitleWrapper(::chart::TitleHelper::eTitleType eTitleType,::boost::shared_ptr<Chart2ModelContact> spChart2ModelContact)222cdf0e10cSrcweir TitleWrapper::TitleWrapper( ::chart::TitleHelper::eTitleType eTitleType,
223cdf0e10cSrcweir     ::boost::shared_ptr< Chart2ModelContact > spChart2ModelContact ) :
224cdf0e10cSrcweir         m_spChart2ModelContact( spChart2ModelContact ),
225cdf0e10cSrcweir         m_aEventListenerContainer( m_aMutex ),
226cdf0e10cSrcweir         m_eTitleType(eTitleType)
227cdf0e10cSrcweir {
228cdf0e10cSrcweir     ControllerLockGuard aCtrlLockGuard( Reference< frame::XModel >( m_spChart2ModelContact->getChart2Document(), uno::UNO_QUERY ));
229cdf0e10cSrcweir     if( !getTitleObject().is() ) //#i83831# create an empty title at the model, thus references to properties can be mapped mapped correctly
230cdf0e10cSrcweir         TitleHelper::createTitle( m_eTitleType, OUString(), m_spChart2ModelContact->getChartModel(), m_spChart2ModelContact->m_xContext );
231cdf0e10cSrcweir }
232cdf0e10cSrcweir 
~TitleWrapper()233cdf0e10cSrcweir TitleWrapper::~TitleWrapper()
234cdf0e10cSrcweir {
235cdf0e10cSrcweir }
236cdf0e10cSrcweir 
237cdf0e10cSrcweir // ____ XShape ____
getPosition()238cdf0e10cSrcweir awt::Point SAL_CALL TitleWrapper::getPosition()
239cdf0e10cSrcweir     throw (uno::RuntimeException)
240cdf0e10cSrcweir {
241cdf0e10cSrcweir     return m_spChart2ModelContact->GetTitlePosition( this->getTitleObject() );
242cdf0e10cSrcweir }
243cdf0e10cSrcweir 
setPosition(const awt::Point & aPosition)244cdf0e10cSrcweir void SAL_CALL TitleWrapper::setPosition( const awt::Point& aPosition )
245cdf0e10cSrcweir     throw (uno::RuntimeException)
246cdf0e10cSrcweir {
247cdf0e10cSrcweir     Reference< beans::XPropertySet > xPropertySet( this->getInnerPropertySet() );
248cdf0e10cSrcweir     if(xPropertySet.is())
249cdf0e10cSrcweir     {
250cdf0e10cSrcweir         awt::Size aPageSize( m_spChart2ModelContact->GetPageSize() );
251cdf0e10cSrcweir 
252cdf0e10cSrcweir         chart2::RelativePosition aRelativePosition;
253cdf0e10cSrcweir         aRelativePosition.Anchor = drawing::Alignment_TOP_LEFT;
254cdf0e10cSrcweir         aRelativePosition.Primary = double(aPosition.X)/double(aPageSize.Width);
255cdf0e10cSrcweir         aRelativePosition.Secondary = double(aPosition.Y)/double(aPageSize.Height);
256cdf0e10cSrcweir         xPropertySet->setPropertyValue( C2U( "RelativePosition" ), uno::makeAny(aRelativePosition) );
257cdf0e10cSrcweir     }
258cdf0e10cSrcweir }
259cdf0e10cSrcweir 
getSize()260cdf0e10cSrcweir awt::Size SAL_CALL TitleWrapper::getSize()
261cdf0e10cSrcweir     throw (uno::RuntimeException)
262cdf0e10cSrcweir {
263cdf0e10cSrcweir     return m_spChart2ModelContact->GetTitleSize( this->getTitleObject() );
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
setSize(const awt::Size &)266cdf0e10cSrcweir void SAL_CALL TitleWrapper::setSize( const awt::Size& /*aSize*/ )
267cdf0e10cSrcweir     throw (beans::PropertyVetoException,
268cdf0e10cSrcweir            uno::RuntimeException)
269cdf0e10cSrcweir {
270cdf0e10cSrcweir     OSL_ENSURE( false, "trying to set size of title" );
271cdf0e10cSrcweir }
272cdf0e10cSrcweir 
273cdf0e10cSrcweir // ____ XShapeDescriptor (base of XShape) ____
getShapeType()274cdf0e10cSrcweir OUString SAL_CALL TitleWrapper::getShapeType()
275cdf0e10cSrcweir     throw (uno::RuntimeException)
276cdf0e10cSrcweir {
277cdf0e10cSrcweir     return C2U( "com.sun.star.chart.ChartTitle" );
278cdf0e10cSrcweir }
279cdf0e10cSrcweir 
280cdf0e10cSrcweir // ____ XComponent ____
dispose()281cdf0e10cSrcweir void SAL_CALL TitleWrapper::dispose()
282cdf0e10cSrcweir     throw (uno::RuntimeException)
283cdf0e10cSrcweir {
284cdf0e10cSrcweir     Reference< uno::XInterface > xSource( static_cast< ::cppu::OWeakObject* >( this ) );
285cdf0e10cSrcweir     m_aEventListenerContainer.disposeAndClear( lang::EventObject( xSource ) );
286cdf0e10cSrcweir 
287cdf0e10cSrcweir     // /--
288cdf0e10cSrcweir     MutexGuard aGuard( GetMutex());
289cdf0e10cSrcweir     clearWrappedPropertySet();
290cdf0e10cSrcweir     // \--
291cdf0e10cSrcweir }
292cdf0e10cSrcweir 
addEventListener(const Reference<lang::XEventListener> & xListener)293cdf0e10cSrcweir void SAL_CALL TitleWrapper::addEventListener(
294cdf0e10cSrcweir     const Reference< lang::XEventListener >& xListener )
295cdf0e10cSrcweir     throw (uno::RuntimeException)
296cdf0e10cSrcweir {
297cdf0e10cSrcweir 	m_aEventListenerContainer.addInterface( xListener );
298cdf0e10cSrcweir }
299cdf0e10cSrcweir 
removeEventListener(const Reference<lang::XEventListener> & aListener)300cdf0e10cSrcweir void SAL_CALL TitleWrapper::removeEventListener(
301cdf0e10cSrcweir     const Reference< lang::XEventListener >& aListener )
302cdf0e10cSrcweir     throw (uno::RuntimeException)
303cdf0e10cSrcweir {
304cdf0e10cSrcweir 	m_aEventListenerContainer.removeInterface( aListener );
305cdf0e10cSrcweir }
306cdf0e10cSrcweir 
307cdf0e10cSrcweir // ================================================================================
308cdf0e10cSrcweir 
getFirstCharacterPropertySet()309cdf0e10cSrcweir Reference< beans::XPropertySet > TitleWrapper::getFirstCharacterPropertySet()
310cdf0e10cSrcweir {
311cdf0e10cSrcweir     Reference< beans::XPropertySet > xProp;
312cdf0e10cSrcweir 
313cdf0e10cSrcweir     Reference< chart2::XTitle > xTitle( this->getTitleObject() );
314cdf0e10cSrcweir     if( xTitle.is())
315cdf0e10cSrcweir     {
316cdf0e10cSrcweir         Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText());
317cdf0e10cSrcweir         if( aStrings.getLength() > 0 )
318cdf0e10cSrcweir             xProp.set( aStrings[0], uno::UNO_QUERY );
319cdf0e10cSrcweir     }
320cdf0e10cSrcweir 
321cdf0e10cSrcweir     return xProp;
322cdf0e10cSrcweir }
323cdf0e10cSrcweir 
getFastCharacterPropertyValue(sal_Int32 nHandle,Any & rValue)324cdf0e10cSrcweir void TitleWrapper::getFastCharacterPropertyValue( sal_Int32 nHandle, Any& rValue )
325cdf0e10cSrcweir {
326cdf0e10cSrcweir     OSL_ASSERT( FAST_PROPERTY_ID_START_CHAR_PROP <= nHandle &&
327cdf0e10cSrcweir                 nHandle < CharacterProperties::FAST_PROPERTY_ID_END_CHAR_PROP );
328cdf0e10cSrcweir 
329cdf0e10cSrcweir     Reference< beans::XPropertySet > xProp( getFirstCharacterPropertySet(), uno::UNO_QUERY );
330cdf0e10cSrcweir     Reference< beans::XFastPropertySet > xFastProp( xProp, uno::UNO_QUERY );
331cdf0e10cSrcweir     if(xProp.is())
332cdf0e10cSrcweir     {
333cdf0e10cSrcweir         const WrappedProperty* pWrappedProperty = getWrappedProperty( nHandle );
334cdf0e10cSrcweir         if( pWrappedProperty )
335cdf0e10cSrcweir         {
336cdf0e10cSrcweir             rValue = pWrappedProperty->getPropertyValue( xProp );
337cdf0e10cSrcweir         }
338cdf0e10cSrcweir         else if( xFastProp.is() )
339cdf0e10cSrcweir         {
340cdf0e10cSrcweir             rValue = xFastProp->getFastPropertyValue( nHandle );
341cdf0e10cSrcweir         }
342cdf0e10cSrcweir     }
343cdf0e10cSrcweir 
344cdf0e10cSrcweir }
345cdf0e10cSrcweir 
setFastCharacterPropertyValue(sal_Int32 nHandle,const Any & rValue)346cdf0e10cSrcweir void TitleWrapper::setFastCharacterPropertyValue(
347cdf0e10cSrcweir     sal_Int32 nHandle, const Any& rValue ) throw (uno::Exception)
348cdf0e10cSrcweir {
349cdf0e10cSrcweir     OSL_ASSERT( FAST_PROPERTY_ID_START_CHAR_PROP <= nHandle &&
350cdf0e10cSrcweir                 nHandle < CharacterProperties::FAST_PROPERTY_ID_END_CHAR_PROP );
351cdf0e10cSrcweir 
352cdf0e10cSrcweir     Reference< chart2::XTitle > xTitle( this->getTitleObject() );
353cdf0e10cSrcweir     if( xTitle.is())
354cdf0e10cSrcweir     {
355cdf0e10cSrcweir         Sequence< Reference< chart2::XFormattedString > > aStrings( xTitle->getText());
356cdf0e10cSrcweir         const WrappedProperty* pWrappedProperty = getWrappedProperty( nHandle );
357cdf0e10cSrcweir 
358cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aStrings.getLength(); ++i )
359cdf0e10cSrcweir         {
360cdf0e10cSrcweir             Reference< beans::XFastPropertySet > xFastPropertySet( aStrings[ i ], uno::UNO_QUERY );
361cdf0e10cSrcweir             Reference< beans::XPropertySet > xPropSet( xFastPropertySet, uno::UNO_QUERY );
362cdf0e10cSrcweir 
363cdf0e10cSrcweir             if( pWrappedProperty )
364cdf0e10cSrcweir                 pWrappedProperty->setPropertyValue( rValue, xPropSet );
365cdf0e10cSrcweir             else if( xFastPropertySet.is() )
366cdf0e10cSrcweir                 xFastPropertySet->setFastPropertyValue( nHandle, rValue );
367cdf0e10cSrcweir         }
368cdf0e10cSrcweir     }
369cdf0e10cSrcweir }
370cdf0e10cSrcweir 
371cdf0e10cSrcweir // ================================================================================
372cdf0e10cSrcweir // WrappedPropertySet
373cdf0e10cSrcweir 
setPropertyValue(const OUString & rPropertyName,const Any & rValue)374cdf0e10cSrcweir void SAL_CALL TitleWrapper::setPropertyValue( const OUString& rPropertyName, const Any& rValue )
375cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, beans::PropertyVetoException, lang::IllegalArgumentException, lang::WrappedTargetException, uno::RuntimeException)
376cdf0e10cSrcweir {
377cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
378cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
379cdf0e10cSrcweir     {
380cdf0e10cSrcweir         setFastCharacterPropertyValue( nHandle, rValue );
381cdf0e10cSrcweir     }
382cdf0e10cSrcweir     else
383cdf0e10cSrcweir         WrappedPropertySet::setPropertyValue( rPropertyName, rValue );
384cdf0e10cSrcweir }
385cdf0e10cSrcweir 
getPropertyValue(const OUString & rPropertyName)386cdf0e10cSrcweir Any SAL_CALL TitleWrapper::getPropertyValue( const OUString& rPropertyName )
387cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
388cdf0e10cSrcweir {
389cdf0e10cSrcweir     Any aRet;
390cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
391cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
392cdf0e10cSrcweir         getFastCharacterPropertyValue( nHandle, aRet );
393cdf0e10cSrcweir     else
394cdf0e10cSrcweir         aRet = WrappedPropertySet::getPropertyValue( rPropertyName );
395cdf0e10cSrcweir     return aRet;
396cdf0e10cSrcweir }
397cdf0e10cSrcweir 
getPropertyState(const OUString & rPropertyName)398cdf0e10cSrcweir beans::PropertyState SAL_CALL TitleWrapper::getPropertyState( const OUString& rPropertyName )
399cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, uno::RuntimeException)
400cdf0e10cSrcweir {
401cdf0e10cSrcweir     beans::PropertyState aState( beans::PropertyState_DIRECT_VALUE );
402cdf0e10cSrcweir 
403cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
404cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
405cdf0e10cSrcweir     {
406cdf0e10cSrcweir         Reference< beans::XPropertyState > xPropState( getFirstCharacterPropertySet(), uno::UNO_QUERY );
407cdf0e10cSrcweir         if( xPropState.is() )
408cdf0e10cSrcweir         {
409cdf0e10cSrcweir             const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName );
410cdf0e10cSrcweir             if( pWrappedProperty )
411cdf0e10cSrcweir                 aState = pWrappedProperty->getPropertyState( xPropState );
412cdf0e10cSrcweir             else
413cdf0e10cSrcweir                 aState = xPropState->getPropertyState( rPropertyName );
414cdf0e10cSrcweir         }
415cdf0e10cSrcweir     }
416cdf0e10cSrcweir     else
417cdf0e10cSrcweir         aState = WrappedPropertySet::getPropertyState( rPropertyName );
418cdf0e10cSrcweir 
419cdf0e10cSrcweir     return aState;
420cdf0e10cSrcweir }
setPropertyToDefault(const OUString & rPropertyName)421cdf0e10cSrcweir void SAL_CALL TitleWrapper::setPropertyToDefault( const OUString& rPropertyName )
422cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, uno::RuntimeException)
423cdf0e10cSrcweir {
424cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
425cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
426cdf0e10cSrcweir     {
427cdf0e10cSrcweir         Any aDefault = getPropertyDefault( rPropertyName );
428cdf0e10cSrcweir         setFastCharacterPropertyValue( nHandle, aDefault );
429cdf0e10cSrcweir     }
430cdf0e10cSrcweir     else
431cdf0e10cSrcweir         WrappedPropertySet::setPropertyToDefault( rPropertyName );
432cdf0e10cSrcweir }
getPropertyDefault(const OUString & rPropertyName)433cdf0e10cSrcweir Any SAL_CALL TitleWrapper::getPropertyDefault( const OUString& rPropertyName )
434cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
435cdf0e10cSrcweir {
436cdf0e10cSrcweir     Any aRet;
437cdf0e10cSrcweir 
438cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
439cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
440cdf0e10cSrcweir     {
441cdf0e10cSrcweir         Reference< beans::XPropertyState > xPropState( getFirstCharacterPropertySet(), uno::UNO_QUERY );
442cdf0e10cSrcweir         if( xPropState.is() )
443cdf0e10cSrcweir         {
444cdf0e10cSrcweir             const WrappedProperty* pWrappedProperty = getWrappedProperty( rPropertyName );
445cdf0e10cSrcweir             if( pWrappedProperty )
446cdf0e10cSrcweir                 aRet = pWrappedProperty->getPropertyDefault(xPropState);
447cdf0e10cSrcweir             else
448cdf0e10cSrcweir                 aRet = xPropState->getPropertyDefault( rPropertyName );
449cdf0e10cSrcweir         }
450cdf0e10cSrcweir     }
451cdf0e10cSrcweir     else
452cdf0e10cSrcweir         aRet = WrappedPropertySet::getPropertyDefault( rPropertyName );
453cdf0e10cSrcweir 
454cdf0e10cSrcweir     return aRet;
455cdf0e10cSrcweir }
456cdf0e10cSrcweir 
addPropertyChangeListener(const OUString & rPropertyName,const Reference<beans::XPropertyChangeListener> & xListener)457cdf0e10cSrcweir void SAL_CALL TitleWrapper::addPropertyChangeListener( const OUString& rPropertyName, const Reference< beans::XPropertyChangeListener >& xListener )
458cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
459cdf0e10cSrcweir {
460cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
461cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
462cdf0e10cSrcweir     {
463cdf0e10cSrcweir         Reference< beans::XPropertySet > xPropSet( getFirstCharacterPropertySet(), uno::UNO_QUERY );
464cdf0e10cSrcweir         if( xPropSet.is() )
465cdf0e10cSrcweir             xPropSet->addPropertyChangeListener( rPropertyName, xListener );
466cdf0e10cSrcweir     }
467cdf0e10cSrcweir     else
468cdf0e10cSrcweir         WrappedPropertySet::addPropertyChangeListener( rPropertyName, xListener );
469cdf0e10cSrcweir }
removePropertyChangeListener(const OUString & rPropertyName,const Reference<beans::XPropertyChangeListener> & xListener)470cdf0e10cSrcweir void SAL_CALL TitleWrapper::removePropertyChangeListener( const OUString& rPropertyName, const Reference< beans::XPropertyChangeListener >& xListener )
471cdf0e10cSrcweir                                     throw (beans::UnknownPropertyException, lang::WrappedTargetException, uno::RuntimeException)
472cdf0e10cSrcweir {
473cdf0e10cSrcweir     sal_Int32 nHandle = getInfoHelper().getHandleByName( rPropertyName );
474cdf0e10cSrcweir     if( CharacterProperties::IsCharacterPropertyHandle( nHandle ) )
475cdf0e10cSrcweir     {
476cdf0e10cSrcweir         Reference< beans::XPropertySet > xPropSet( getFirstCharacterPropertySet(), uno::UNO_QUERY );
477cdf0e10cSrcweir         if( xPropSet.is() )
478cdf0e10cSrcweir             xPropSet->removePropertyChangeListener( rPropertyName, xListener );
479cdf0e10cSrcweir     }
480cdf0e10cSrcweir     else
481cdf0e10cSrcweir         WrappedPropertySet::removePropertyChangeListener( rPropertyName, xListener );
482cdf0e10cSrcweir }
483cdf0e10cSrcweir 
484cdf0e10cSrcweir // ================================================================================
485cdf0e10cSrcweir 
486cdf0e10cSrcweir //ReferenceSizePropertyProvider
updateReferenceSize()487cdf0e10cSrcweir void TitleWrapper::updateReferenceSize()
488cdf0e10cSrcweir {
489cdf0e10cSrcweir     Reference< beans::XPropertySet > xProp( this->getTitleObject(), uno::UNO_QUERY );
490cdf0e10cSrcweir     if( xProp.is() )
491cdf0e10cSrcweir     {
492cdf0e10cSrcweir         if( xProp->getPropertyValue( C2U("ReferencePageSize") ).hasValue() )
493cdf0e10cSrcweir             xProp->setPropertyValue( C2U("ReferencePageSize"), uno::makeAny(
494cdf0e10cSrcweir                             m_spChart2ModelContact->GetPageSize() ));
495cdf0e10cSrcweir     }
496cdf0e10cSrcweir }
getReferenceSize()497cdf0e10cSrcweir Any TitleWrapper::getReferenceSize()
498cdf0e10cSrcweir {
499cdf0e10cSrcweir     Any aRet;
500cdf0e10cSrcweir     Reference< beans::XPropertySet > xProp( this->getTitleObject(), uno::UNO_QUERY );
501cdf0e10cSrcweir     if( xProp.is() )
502cdf0e10cSrcweir         aRet = xProp->getPropertyValue( C2U("ReferencePageSize") );
503cdf0e10cSrcweir 
504cdf0e10cSrcweir     return aRet;
505cdf0e10cSrcweir }
getCurrentSizeForReference()506cdf0e10cSrcweir awt::Size TitleWrapper::getCurrentSizeForReference()
507cdf0e10cSrcweir {
508cdf0e10cSrcweir     return m_spChart2ModelContact->GetPageSize();
509cdf0e10cSrcweir }
510cdf0e10cSrcweir 
511cdf0e10cSrcweir // ================================================================================
512cdf0e10cSrcweir 
getTitleObject()513cdf0e10cSrcweir Reference< chart2::XTitle > TitleWrapper::getTitleObject()
514cdf0e10cSrcweir {
515cdf0e10cSrcweir     return TitleHelper::getTitle( m_eTitleType, m_spChart2ModelContact->getChartModel() );
516cdf0e10cSrcweir }
517cdf0e10cSrcweir 
518cdf0e10cSrcweir // WrappedPropertySet
519cdf0e10cSrcweir 
getInnerPropertySet()520cdf0e10cSrcweir Reference< beans::XPropertySet > TitleWrapper::getInnerPropertySet()
521cdf0e10cSrcweir {
522cdf0e10cSrcweir     return Reference< beans::XPropertySet >( this->getTitleObject(), uno::UNO_QUERY );
523cdf0e10cSrcweir }
524cdf0e10cSrcweir 
getPropertySequence()525cdf0e10cSrcweir const Sequence< beans::Property >& TitleWrapper::getPropertySequence()
526cdf0e10cSrcweir {
527cdf0e10cSrcweir     return *StaticTitleWrapperPropertyArray::get();
528cdf0e10cSrcweir }
529cdf0e10cSrcweir 
createWrappedProperties()530cdf0e10cSrcweir const std::vector< WrappedProperty* > TitleWrapper::createWrappedProperties()
531cdf0e10cSrcweir {
532cdf0e10cSrcweir     ::std::vector< ::chart::WrappedProperty* > aWrappedProperties;
533cdf0e10cSrcweir 
534cdf0e10cSrcweir     aWrappedProperties.push_back( new WrappedTitleStringProperty( m_spChart2ModelContact->m_xContext ) );
535cdf0e10cSrcweir     aWrappedProperties.push_back( new WrappedTextRotationProperty( m_eTitleType==TitleHelper::Y_AXIS_TITLE || m_eTitleType==TitleHelper::X_AXIS_TITLE ) );
536cdf0e10cSrcweir     aWrappedProperties.push_back( new WrappedStackedTextProperty() );
537cdf0e10cSrcweir     WrappedCharacterHeightProperty::addWrappedProperties( aWrappedProperties, this );
538cdf0e10cSrcweir     WrappedAutomaticPositionProperties::addWrappedProperties( aWrappedProperties );
539cdf0e10cSrcweir     WrappedScaleTextProperties::addWrappedProperties( aWrappedProperties, m_spChart2ModelContact );
540cdf0e10cSrcweir 
541cdf0e10cSrcweir     return aWrappedProperties;
542cdf0e10cSrcweir }
543cdf0e10cSrcweir 
544cdf0e10cSrcweir // ================================================================================
545cdf0e10cSrcweir 
getSupportedServiceNames_Static()546cdf0e10cSrcweir Sequence< OUString > TitleWrapper::getSupportedServiceNames_Static()
547cdf0e10cSrcweir {
548cdf0e10cSrcweir     Sequence< OUString > aServices( 4 );
549cdf0e10cSrcweir     aServices[ 0 ] = C2U( "com.sun.star.chart.ChartTitle" );
550cdf0e10cSrcweir     aServices[ 1 ] = C2U( "com.sun.star.drawing.Shape" );
551cdf0e10cSrcweir     aServices[ 2 ] = C2U( "com.sun.star.xml.UserDefinedAttributeSupplier" );
552cdf0e10cSrcweir     aServices[ 3 ] = C2U( "com.sun.star.style.CharacterProperties" );
553cdf0e10cSrcweir //     aServices[ 4 ] = C2U( "com.sun.star.beans.PropertySet" );
554cdf0e10cSrcweir //     aServices[ 5 ] = C2U( "com.sun.star.drawing.FillProperties" );
555cdf0e10cSrcweir //     aServices[ 6 ] = C2U( "com.sun.star.drawing.LineProperties" );
556cdf0e10cSrcweir 
557cdf0e10cSrcweir     return aServices;
558cdf0e10cSrcweir }
559cdf0e10cSrcweir 
560cdf0e10cSrcweir // implement XServiceInfo methods basing upon getSupportedServiceNames_Static
561cdf0e10cSrcweir APPHELPER_XSERVICEINFO_IMPL( TitleWrapper, lcl_aServiceName );
562cdf0e10cSrcweir 
563cdf0e10cSrcweir } //  namespace wrapper
564cdf0e10cSrcweir } //  namespace chart
565