xref: /trunk/main/chart2/source/model/inc/DataSeries.hxx (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 #ifndef _CHART_DATASERIES_HXX
24 #define _CHART_DATASERIES_HXX
25 
26 // UNO types
27 #include <com/sun/star/chart2/XDataSeries.hpp>
28 #include <com/sun/star/chart2/data/XDataSink.hpp>
29 #include <com/sun/star/chart2/data/XDataSource.hpp>
30 #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
31 #include <com/sun/star/util/XCloneable.hpp>
32 #include <com/sun/star/util/XModifyBroadcaster.hpp>
33 #include <com/sun/star/util/XModifyListener.hpp>
34 #include <com/sun/star/container/XIndexContainer.hpp>
35 #include <com/sun/star/lang/XServiceInfo.hpp>
36 #include <com/sun/star/beans/XPropertySet.hpp>
37 #include <com/sun/star/uno/XComponentContext.hpp>
38 
39 // helper classes
40 #include "ServiceMacros.hxx"
41 #include <cppuhelper/implbase8.hxx>
42 #include <comphelper/uno3.hxx>
43 #include <osl/mutex.hxx>
44 
45 // STL
46 #include <vector>
47 #include <map>
48 
49 #include "MutexContainer.hxx"
50 #include "OPropertySet.hxx"
51 
52 namespace com { namespace sun { namespace star { namespace style {
53     class XStyle;
54 }}}}
55 
56 namespace chart
57 {
58 
59 namespace impl
60 {
61 typedef ::cppu::WeakImplHelper8<
62         ::com::sun::star::chart2::XDataSeries,
63         ::com::sun::star::chart2::data::XDataSink,
64         ::com::sun::star::chart2::data::XDataSource,
65         ::com::sun::star::lang::XServiceInfo,
66         ::com::sun::star::chart2::XRegressionCurveContainer,
67         ::com::sun::star::util::XCloneable,
68         ::com::sun::star::util::XModifyBroadcaster,
69         ::com::sun::star::util::XModifyListener >
70     DataSeries_Base;
71 }
72 
73 class DataSeries :
74     public MutexContainer,
75     public impl::DataSeries_Base,
76     public ::property::OPropertySet
77 {
78 public:
79     explicit DataSeries(
80         const ::com::sun::star::uno::Reference<
81             ::com::sun::star::uno::XComponentContext > & xContext );
82     virtual ~DataSeries();
83 
84     /// establish methods for factory instantiation
85     APPHELPER_SERVICE_FACTORY_HELPER( DataSeries )
86     /// XServiceInfo declarations
87     APPHELPER_XSERVICEINFO_DECL()
88 
89     /// merge XInterface implementations
90     DECLARE_XINTERFACE()
91     /// merge XTypeProvider implementations
92     DECLARE_XTYPEPROVIDER()
93 
94 protected:
95     explicit DataSeries( const DataSeries & rOther );
96 
97     // late initialization to call after copy-constructing
98     void Init( const DataSeries & rOther );
99 
100     // ____ XDataSeries ____
101     // _____________________
102     /// @see ::com::sun::star::chart2::XDataSeries
103     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
104         SAL_CALL getDataPointByIndex( sal_Int32 nIndex );
105     virtual void SAL_CALL resetDataPoint( sal_Int32 nIndex );
106     virtual void SAL_CALL resetAllDataPoints();
107 
108     // ____ XDataSink ____
109     // ___________________
110     /// @see ::com::sun::star::chart2::data::XDataSink
111     virtual void SAL_CALL setData( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XLabeledDataSequence > >& aData );
112 
113     // ____ XDataSource ____
114     // _____________________
115     /// @see ::com::sun::star::chart2::data::XDataSource
116     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XLabeledDataSequence > > SAL_CALL getDataSequences();
117 
118     // ____ OPropertySet ____
119     // ______________________
120     virtual ::com::sun::star::uno::Any GetDefaultValue( sal_Int32 nHandle ) const;
121     virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
122     virtual void SAL_CALL setFastPropertyValue_NoBroadcast
123         ( sal_Int32 nHandle,
124           const ::com::sun::star::uno::Any& rValue );
125 
126     virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
127 
128     // ____ XPropertySet ____
129     // ______________________
130     /// @see ::com::sun::star::beans::XPropertySet
131     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL
132         getPropertySetInfo();
133 
134     /// make original interface function visible again
135     using ::com::sun::star::beans::XFastPropertySet::getFastPropertyValue;
136 
137     // ____ XRegressionCurveContainer ____
138     // ___________________________________
139     /// @see ::com::sun::star::chart2::XRegressionCurveContainer
140     virtual void SAL_CALL addRegressionCurve(
141         const ::com::sun::star::uno::Reference<
142             ::com::sun::star::chart2::XRegressionCurve >& aRegressionCurve );
143     virtual void SAL_CALL removeRegressionCurve(
144         const ::com::sun::star::uno::Reference<
145             ::com::sun::star::chart2::XRegressionCurve >& aRegressionCurve );
146     virtual ::com::sun::star::uno::Sequence<
147                 ::com::sun::star::uno::Reference<
148                     ::com::sun::star::chart2::XRegressionCurve > > SAL_CALL getRegressionCurves();
149     virtual void SAL_CALL setRegressionCurves(
150         const ::com::sun::star::uno::Sequence<
151             ::com::sun::star::uno::Reference<
152                 ::com::sun::star::chart2::XRegressionCurve > >& aRegressionCurves );
153 
154     // ____ XCloneable ____
155     virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone();
156 
157     // ____ XModifyBroadcaster ____
158     virtual void SAL_CALL addModifyListener(
159         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener );
160     virtual void SAL_CALL removeModifyListener(
161         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener );
162 
163     // ____ XModifyListener ____
164     virtual void SAL_CALL modified(
165         const ::com::sun::star::lang::EventObject& aEvent );
166 
167     // ____ XEventListener (base of XModifyListener) ____
168     virtual void SAL_CALL disposing(
169         const ::com::sun::star::lang::EventObject& Source );
170 
171     // ____ OPropertySet ____
172     virtual void firePropertyChangeEvent();
173     using OPropertySet::disposing;
174 
175     void fireModifyEvent();
176 
177 private:
178     ::com::sun::star::uno::Reference<
179         ::com::sun::star::uno::XComponentContext >
180                         m_xContext;
181     typedef ::std::vector< ::com::sun::star::uno::Reference<
182             ::com::sun::star::chart2::data::XLabeledDataSequence > > tDataSequenceContainer;
183     tDataSequenceContainer        m_aDataSequences;
184 
185     typedef ::std::map< sal_Int32,
186         ::com::sun::star::uno::Reference<
187         ::com::sun::star::beans::XPropertySet > > tDataPointAttributeContainer;
188     tDataPointAttributeContainer  m_aAttributedDataPoints;
189 
190     typedef
191         ::std::vector< ::com::sun::star::uno::Reference<
192             ::com::sun::star::chart2::XRegressionCurve > >
193         tRegressionCurveContainerType;
194     tRegressionCurveContainerType m_aRegressionCurves;
195 
196     ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener > m_xModifyEventForwarder;
197 };
198 
199 }  // namespace chart
200 
201 // _CHART_DATASERIES_HXX
202 #endif
203