1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 #ifndef _CHART_DATASERIES_HXX
28 #define _CHART_DATASERIES_HXX
29 
30 // UNO types
31 #include <com/sun/star/chart2/XDataSeries.hpp>
32 #include <com/sun/star/chart2/data/XDataSink.hpp>
33 #include <com/sun/star/chart2/data/XDataSource.hpp>
34 #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
35 #include <com/sun/star/util/XCloneable.hpp>
36 #include <com/sun/star/util/XModifyBroadcaster.hpp>
37 #include <com/sun/star/util/XModifyListener.hpp>
38 #include <com/sun/star/container/XIndexContainer.hpp>
39 #include <com/sun/star/lang/XServiceInfo.hpp>
40 #include <com/sun/star/beans/XPropertySet.hpp>
41 #include <com/sun/star/uno/XComponentContext.hpp>
42 
43 // helper classes
44 #include "ServiceMacros.hxx"
45 #include <cppuhelper/implbase8.hxx>
46 #include <comphelper/uno3.hxx>
47 #include <osl/mutex.hxx>
48 
49 // STL
50 #include <vector>
51 #include <map>
52 
53 #include "MutexContainer.hxx"
54 #include "OPropertySet.hxx"
55 
56 namespace com { namespace sun { namespace star { namespace style {
57     class XStyle;
58 }}}}
59 
60 namespace chart
61 {
62 
63 namespace impl
64 {
65 typedef ::cppu::WeakImplHelper8<
66         ::com::sun::star::chart2::XDataSeries,
67         ::com::sun::star::chart2::data::XDataSink,
68         ::com::sun::star::chart2::data::XDataSource,
69         ::com::sun::star::lang::XServiceInfo,
70         ::com::sun::star::chart2::XRegressionCurveContainer,
71         ::com::sun::star::util::XCloneable,
72         ::com::sun::star::util::XModifyBroadcaster,
73         ::com::sun::star::util::XModifyListener >
74     DataSeries_Base;
75 }
76 
77 class DataSeries :
78     public MutexContainer,
79     public impl::DataSeries_Base,
80     public ::property::OPropertySet
81 {
82 public:
83     explicit DataSeries(
84         const ::com::sun::star::uno::Reference<
85             ::com::sun::star::uno::XComponentContext > & xContext );
86 	virtual ~DataSeries();
87 
88     /// establish methods for factory instatiation
89     APPHELPER_SERVICE_FACTORY_HELPER( DataSeries )
90     /// XServiceInfo declarations
91     APPHELPER_XSERVICEINFO_DECL()
92 
93     /// merge XInterface implementations
94     DECLARE_XINTERFACE()
95     /// merge XTypeProvider implementations
96     DECLARE_XTYPEPROVIDER()
97 
98 protected:
99     explicit DataSeries( const DataSeries & rOther );
100 
101     // late initialization to call after copy-constructing
102     void Init( const DataSeries & rOther );
103 
104     // ____ XDataSeries ____
105     // _____________________
106     /// @see ::com::sun::star::chart2::XDataSeries
107     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
108         SAL_CALL getDataPointByIndex( sal_Int32 nIndex )
109         throw (::com::sun::star::lang::IndexOutOfBoundsException,
110                ::com::sun::star::uno::RuntimeException);
111     virtual void SAL_CALL resetDataPoint( sal_Int32 nIndex )
112         throw (::com::sun::star::uno::RuntimeException);
113     virtual void SAL_CALL resetAllDataPoints()
114         throw (::com::sun::star::uno::RuntimeException);
115 
116     // ____ XDataSink ____
117     // ___________________
118     /// @see ::com::sun::star::chart2::data::XDataSink
119     virtual void SAL_CALL setData( const ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XLabeledDataSequence > >& aData )
120         throw (::com::sun::star::uno::RuntimeException);
121 
122     // ____ XDataSource ____
123     // _____________________
124     /// @see ::com::sun::star::chart2::data::XDataSource
125     virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Reference< ::com::sun::star::chart2::data::XLabeledDataSequence > > SAL_CALL getDataSequences()
126         throw (::com::sun::star::uno::RuntimeException);
127 
128     // ____ OPropertySet ____
129     // ______________________
130     virtual ::com::sun::star::uno::Any GetDefaultValue( sal_Int32 nHandle ) const
131         throw(::com::sun::star::beans::UnknownPropertyException);
132 	virtual void SAL_CALL getFastPropertyValue( ::com::sun::star::uno::Any& rValue, sal_Int32 nHandle ) const;
133 	virtual void SAL_CALL setFastPropertyValue_NoBroadcast
134         ( sal_Int32 nHandle,
135           const ::com::sun::star::uno::Any& rValue )
136 		throw (::com::sun::star::uno::Exception);
137 
138 	virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper();
139 
140     // ____ XPropertySet ____
141     // ______________________
142     /// @see ::com::sun::star::beans::XPropertySet
143     virtual ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySetInfo > SAL_CALL
144         getPropertySetInfo()
145         throw (::com::sun::star::uno::RuntimeException);
146 
147     /// make original interface function visible again
148     using ::com::sun::star::beans::XFastPropertySet::getFastPropertyValue;
149 
150     // ____ XRegressionCurveContainer ____
151     // ___________________________________
152     /// @see ::com::sun::star::chart2::XRegressionCurveContainer
153     virtual void SAL_CALL addRegressionCurve(
154         const ::com::sun::star::uno::Reference<
155             ::com::sun::star::chart2::XRegressionCurve >& aRegressionCurve )
156         throw (::com::sun::star::lang::IllegalArgumentException,
157                ::com::sun::star::uno::RuntimeException);
158     virtual void SAL_CALL removeRegressionCurve(
159         const ::com::sun::star::uno::Reference<
160             ::com::sun::star::chart2::XRegressionCurve >& aRegressionCurve )
161         throw (::com::sun::star::container::NoSuchElementException,
162                ::com::sun::star::uno::RuntimeException);
163     virtual ::com::sun::star::uno::Sequence<
164                 ::com::sun::star::uno::Reference<
165                     ::com::sun::star::chart2::XRegressionCurve > > SAL_CALL getRegressionCurves()
166         throw (::com::sun::star::uno::RuntimeException);
167     virtual void SAL_CALL setRegressionCurves(
168         const ::com::sun::star::uno::Sequence<
169             ::com::sun::star::uno::Reference<
170                 ::com::sun::star::chart2::XRegressionCurve > >& aRegressionCurves )
171         throw (::com::sun::star::uno::RuntimeException);
172 
173     // ____ XCloneable ____
174     virtual ::com::sun::star::uno::Reference< ::com::sun::star::util::XCloneable > SAL_CALL createClone()
175         throw (::com::sun::star::uno::RuntimeException);
176 
177     // ____ XModifyBroadcaster ____
178     virtual void SAL_CALL addModifyListener(
179         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
180         throw (::com::sun::star::uno::RuntimeException);
181     virtual void SAL_CALL removeModifyListener(
182         const ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener >& aListener )
183         throw (::com::sun::star::uno::RuntimeException);
184 
185     // ____ XModifyListener ____
186     virtual void SAL_CALL modified(
187         const ::com::sun::star::lang::EventObject& aEvent )
188         throw (::com::sun::star::uno::RuntimeException);
189 
190     // ____ XEventListener (base of XModifyListener) ____
191     virtual void SAL_CALL disposing(
192         const ::com::sun::star::lang::EventObject& Source )
193         throw (::com::sun::star::uno::RuntimeException);
194 
195     // ____ OPropertySet ____
196     virtual void firePropertyChangeEvent();
197 	using OPropertySet::disposing;
198 
199     void fireModifyEvent();
200 
201 private:
202     ::com::sun::star::uno::Reference<
203         ::com::sun::star::uno::XComponentContext >
204                         m_xContext;
205     typedef ::std::vector< ::com::sun::star::uno::Reference<
206             ::com::sun::star::chart2::data::XLabeledDataSequence > > tDataSequenceContainer;
207     tDataSequenceContainer        m_aDataSequences;
208 
209     typedef ::std::map< sal_Int32,
210         ::com::sun::star::uno::Reference<
211         ::com::sun::star::beans::XPropertySet > > tDataPointAttributeContainer;
212     tDataPointAttributeContainer  m_aAttributedDataPoints;
213 
214     typedef
215         ::std::vector< ::com::sun::star::uno::Reference<
216             ::com::sun::star::chart2::XRegressionCurve > >
217         tRegressionCurveContainerType;
218     tRegressionCurveContainerType m_aRegressionCurves;
219 
220     ::com::sun::star::uno::Reference< ::com::sun::star::util::XModifyListener > m_xModifyEventForwarder;
221 };
222 
223 }  // namespace chart
224 
225 // _CHART_DATASERIES_HXX
226 #endif
227