xref: /trunk/main/chart2/source/tools/LabeledDataSequence.cxx (revision 91144cd0085a7583d2099b982122deb2184ab956)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_charttools.hxx"
26 
27 #include "LabeledDataSequence.hxx"
28 #include "ModifyListenerHelper.hxx"
29 #include "macros.hxx"
30 
31 using namespace ::com::sun::star;
32 
33 using ::com::sun::star::uno::Reference;
34 using ::com::sun::star::uno::Sequence;
35 using ::rtl::OUString;
36 
37 namespace chart
38 {
39 
LabeledDataSequence(const Reference<uno::XComponentContext> & xContext)40 LabeledDataSequence::LabeledDataSequence( const Reference< uno::XComponentContext > & xContext ) :
41         m_xContext( xContext ),
42         m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder())
43 {}
44 
LabeledDataSequence(const uno::Reference<chart2::data::XDataSequence> & rValues)45 LabeledDataSequence::LabeledDataSequence(
46     const uno::Reference< chart2::data::XDataSequence > & rValues ) :
47         m_xData( rValues ),
48         m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder())
49 {
50     ModifyListenerHelper::addListener( m_xData, m_xModifyEventForwarder );
51 }
52 
LabeledDataSequence(const uno::Reference<chart2::data::XDataSequence> & rValues,const uno::Reference<chart2::data::XDataSequence> & rLabel)53 LabeledDataSequence::LabeledDataSequence(
54     const uno::Reference< chart2::data::XDataSequence > & rValues,
55     const uno::Reference< chart2::data::XDataSequence > & rLabel ) :
56         m_xData( rValues ),
57         m_xLabel( rLabel ),
58         m_xModifyEventForwarder( ModifyListenerHelper::createModifyEventForwarder())
59 {
60     ModifyListenerHelper::addListener( m_xData, m_xModifyEventForwarder );
61     ModifyListenerHelper::addListener( m_xLabel, m_xModifyEventForwarder );
62 }
63 
~LabeledDataSequence()64 LabeledDataSequence::~LabeledDataSequence()
65 {
66     if( m_xModifyEventForwarder.is())
67     {
68         if( m_xData.is())
69             ModifyListenerHelper::removeListener( m_xData, m_xModifyEventForwarder );
70         if( m_xLabel.is())
71             ModifyListenerHelper::removeListener( m_xLabel, m_xModifyEventForwarder );
72     }
73 }
74 
75 // ____ XLabeledDataSequence ____
getValues()76 uno::Reference< chart2::data::XDataSequence > SAL_CALL LabeledDataSequence::getValues()
77 {
78     return m_xData;
79 }
80 
setValues(const uno::Reference<chart2::data::XDataSequence> & xSequence)81 void SAL_CALL LabeledDataSequence::setValues(
82     const uno::Reference< chart2::data::XDataSequence >& xSequence )
83 {
84     if( m_xData != xSequence )
85     {
86         ModifyListenerHelper::removeListener( m_xData, m_xModifyEventForwarder );
87         m_xData = xSequence;
88         ModifyListenerHelper::addListener( m_xData, m_xModifyEventForwarder );
89     }
90 }
91 
getLabel()92 uno::Reference< chart2::data::XDataSequence > SAL_CALL LabeledDataSequence::getLabel()
93 {
94     return m_xLabel;
95 }
96 
setLabel(const uno::Reference<chart2::data::XDataSequence> & xSequence)97 void SAL_CALL LabeledDataSequence::setLabel(
98     const uno::Reference< chart2::data::XDataSequence >& xSequence )
99 {
100     if( m_xLabel != xSequence )
101     {
102         ModifyListenerHelper::removeListener( m_xLabel, m_xModifyEventForwarder );
103         m_xLabel = xSequence;
104         ModifyListenerHelper::addListener( m_xLabel, m_xModifyEventForwarder );
105     }
106 }
107 
108 // ____ XCloneable ____
createClone()109 uno::Reference< util::XCloneable > SAL_CALL LabeledDataSequence::createClone()
110 {
111     uno::Reference< chart2::data::XDataSequence > xNewValues( m_xData );
112     uno::Reference< chart2::data::XDataSequence > xNewLabel( m_xLabel );
113 
114     uno::Reference< util::XCloneable > xLabelCloneable( m_xLabel, uno::UNO_QUERY );
115     if( xLabelCloneable.is())
116         xNewLabel.set( xLabelCloneable->createClone(), uno::UNO_QUERY );
117 
118     uno::Reference< util::XCloneable > xValuesCloneable( m_xData, uno::UNO_QUERY );
119     if( xValuesCloneable.is())
120         xNewValues.set( xValuesCloneable->createClone(), uno::UNO_QUERY );
121 
122     return uno::Reference< util::XCloneable >(
123         new LabeledDataSequence( xNewValues, xNewLabel ) );
124 }
125 
126 // ____ XModifyBroadcaster ____
addModifyListener(const Reference<util::XModifyListener> & aListener)127 void SAL_CALL LabeledDataSequence::addModifyListener( const Reference< util::XModifyListener >& aListener )
128 {
129     try
130     {
131         Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW );
132         xBroadcaster->addModifyListener( aListener );
133     }
134     catch( const uno::Exception & ex )
135     {
136         ASSERT_EXCEPTION( ex );
137     }
138 }
139 
removeModifyListener(const Reference<util::XModifyListener> & aListener)140 void SAL_CALL LabeledDataSequence::removeModifyListener( const Reference< util::XModifyListener >& aListener )
141 {
142     try
143     {
144         Reference< util::XModifyBroadcaster > xBroadcaster( m_xModifyEventForwarder, uno::UNO_QUERY_THROW );
145         xBroadcaster->removeModifyListener( aListener );
146     }
147     catch( const uno::Exception & ex )
148     {
149         ASSERT_EXCEPTION( ex );
150     }
151 }
152 
153 // ================================================================================
154 
getSupportedServiceNames_Static()155 Sequence< OUString > LabeledDataSequence::getSupportedServiceNames_Static()
156 {
157     Sequence< OUString > aServices( 1 );
158     aServices[ 0 ] = C2U( "com.sun.star.chart2.data.LabeledDataSequence" );
159     return aServices;
160 }
161 
162 // implement XServiceInfo methods basing upon getSupportedServiceNames_Static
163 APPHELPER_XSERVICEINFO_IMPL( LabeledDataSequence,
164                              C2U( "com.sun.star.comp.chart2.LabeledDataSequence" ))
165 
166 // ================================================================================
167 
168 } //  namespace chart
169