1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir #ifndef CHART2_REGRESSIONCURVEHELPER_HXX
28*cdf0e10cSrcweir #define CHART2_REGRESSIONCURVEHELPER_HXX
29*cdf0e10cSrcweir 
30*cdf0e10cSrcweir #include <com/sun/star/chart2/XRegressionCurve.hpp>
31*cdf0e10cSrcweir #include <com/sun/star/chart2/XRegressionCurveCalculator.hpp>
32*cdf0e10cSrcweir #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
33*cdf0e10cSrcweir #include <com/sun/star/chart2/data/XDataSource.hpp>
34*cdf0e10cSrcweir #include <com/sun/star/chart2/XDataSeries.hpp>
35*cdf0e10cSrcweir #include <com/sun/star/chart2/XDiagram.hpp>
36*cdf0e10cSrcweir #include <com/sun/star/uno/XComponentContext.hpp>
37*cdf0e10cSrcweir #include <com/sun/star/frame/XModel.hpp>
38*cdf0e10cSrcweir #include "charttoolsdllapi.hxx"
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #include <vector>
41*cdf0e10cSrcweir 
42*cdf0e10cSrcweir namespace chart
43*cdf0e10cSrcweir {
44*cdf0e10cSrcweir 
45*cdf0e10cSrcweir class OOO_DLLPUBLIC_CHARTTOOLS RegressionCurveHelper
46*cdf0e10cSrcweir {
47*cdf0e10cSrcweir public:
48*cdf0e10cSrcweir     /// returns a model mean-value line
49*cdf0e10cSrcweir     SAL_DLLPRIVATE static ::com::sun::star::uno::Reference<
50*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve >
51*cdf0e10cSrcweir         createMeanValueLine(
52*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
53*cdf0e10cSrcweir                 ::com::sun::star::uno::XComponentContext > & xContext );
54*cdf0e10cSrcweir 
55*cdf0e10cSrcweir     /// returns a model regression curve
56*cdf0e10cSrcweir     SAL_DLLPRIVATE static ::com::sun::star::uno::Reference<
57*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve >
58*cdf0e10cSrcweir         createRegressionCurveByServiceName(
59*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
60*cdf0e10cSrcweir                 ::com::sun::star::uno::XComponentContext > & xContext,
61*cdf0e10cSrcweir             ::rtl::OUString aServiceName );
62*cdf0e10cSrcweir 
63*cdf0e10cSrcweir     // ------------------------------------------------------------
64*cdf0e10cSrcweir 
65*cdf0e10cSrcweir     static bool hasMeanValueLine(
66*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
67*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
68*cdf0e10cSrcweir 
69*cdf0e10cSrcweir     static bool isMeanValueLine(
70*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
71*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve > & xRegCurve );
72*cdf0e10cSrcweir 
73*cdf0e10cSrcweir     static ::com::sun::star::uno::Reference<
74*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve >
75*cdf0e10cSrcweir         getMeanValueLine(
76*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
77*cdf0e10cSrcweir                 ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
78*cdf0e10cSrcweir 
79*cdf0e10cSrcweir     /** creates a mean-value line and adds it to the container.
80*cdf0e10cSrcweir 
81*cdf0e10cSrcweir          @param xSeriesProp
82*cdf0e10cSrcweir              If set, this property-set will be used to apply a line color
83*cdf0e10cSrcweir      */
84*cdf0e10cSrcweir     static void addMeanValueLine(
85*cdf0e10cSrcweir         ::com::sun::star::uno::Reference<
86*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt,
87*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
88*cdf0e10cSrcweir             ::com::sun::star::uno::XComponentContext > & xContext,
89*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
90*cdf0e10cSrcweir             ::com::sun::star::beans::XPropertySet > & xSeriesProp );
91*cdf0e10cSrcweir 
92*cdf0e10cSrcweir     static void removeMeanValueLine(
93*cdf0e10cSrcweir         ::com::sun::star::uno::Reference<
94*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
95*cdf0e10cSrcweir 
96*cdf0e10cSrcweir     enum tRegressionType
97*cdf0e10cSrcweir     {
98*cdf0e10cSrcweir         REGRESSION_TYPE_NONE,
99*cdf0e10cSrcweir         REGRESSION_TYPE_LINEAR,
100*cdf0e10cSrcweir         REGRESSION_TYPE_LOG,
101*cdf0e10cSrcweir         REGRESSION_TYPE_EXP,
102*cdf0e10cSrcweir         REGRESSION_TYPE_POWER,
103*cdf0e10cSrcweir         REGRESSION_TYPE_MEAN_VALUE,
104*cdf0e10cSrcweir         REGRESSION_TYPE_UNKNOWN
105*cdf0e10cSrcweir     };
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir     /** Returns the first regression curve found that is not of type
108*cdf0e10cSrcweir         mean-value line
109*cdf0e10cSrcweir      */
110*cdf0e10cSrcweir     static ::com::sun::star::uno::Reference<
111*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve >
112*cdf0e10cSrcweir         getFirstCurveNotMeanValueLine(
113*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
114*cdf0e10cSrcweir                 ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
115*cdf0e10cSrcweir 
116*cdf0e10cSrcweir     /** Returns the type of the first regression curve found that is not of type
117*cdf0e10cSrcweir         mean-value line
118*cdf0e10cSrcweir      */
119*cdf0e10cSrcweir     static tRegressionType getFirstRegressTypeNotMeanValueLine(
120*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
121*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
122*cdf0e10cSrcweir 
123*cdf0e10cSrcweir     static tRegressionType getRegressionType(
124*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
125*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve > & xCurve );
126*cdf0e10cSrcweir 
127*cdf0e10cSrcweir     /** @param xPropertySource is taken as source to copy all properties from if
128*cdf0e10cSrcweir                not null
129*cdf0e10cSrcweir         @param xEquationProperties is set at the new regression curve as
130*cdf0e10cSrcweir                equation properties if not null
131*cdf0e10cSrcweir     */
132*cdf0e10cSrcweir     static void addRegressionCurve( tRegressionType eType,
133*cdf0e10cSrcweir             ::com::sun::star::uno::Reference<
134*cdf0e10cSrcweir                 ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt,
135*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
136*cdf0e10cSrcweir                 ::com::sun::star::uno::XComponentContext > & xContext,
137*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
138*cdf0e10cSrcweir                 ::com::sun::star::beans::XPropertySet >& xPropertySource =
139*cdf0e10cSrcweir                                 ::com::sun::star::uno::Reference<
140*cdf0e10cSrcweir                                     ::com::sun::star::beans::XPropertySet >(),
141*cdf0e10cSrcweir             const ::com::sun::star::uno::Reference<
142*cdf0e10cSrcweir                 ::com::sun::star::beans::XPropertySet >& xEquationProperties =
143*cdf0e10cSrcweir                                 ::com::sun::star::uno::Reference<
144*cdf0e10cSrcweir                                     ::com::sun::star::beans::XPropertySet >()
145*cdf0e10cSrcweir         );
146*cdf0e10cSrcweir 
147*cdf0e10cSrcweir     static bool removeAllExceptMeanValueLine(
148*cdf0e10cSrcweir         ::com::sun::star::uno::Reference<
149*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
150*cdf0e10cSrcweir 
151*cdf0e10cSrcweir     static void removeEquations(
152*cdf0e10cSrcweir         ::com::sun::star::uno::Reference<
153*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt );
154*cdf0e10cSrcweir 
155*cdf0e10cSrcweir     /** adds the given regression curve if there was none before. If there are
156*cdf0e10cSrcweir         regression curves, the first one is replaced by the one given by the
157*cdf0e10cSrcweir         type. All remaining curves are remnoved.
158*cdf0e10cSrcweir 
159*cdf0e10cSrcweir         <p>This fuction ignores mean-value lines.</p>
160*cdf0e10cSrcweir      */
161*cdf0e10cSrcweir     static void replaceOrAddCurveAndReduceToOne(
162*cdf0e10cSrcweir         tRegressionType eType,
163*cdf0e10cSrcweir         ::com::sun::star::uno::Reference<
164*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt,
165*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
166*cdf0e10cSrcweir             ::com::sun::star::uno::XComponentContext > & xContext );
167*cdf0e10cSrcweir 
168*cdf0e10cSrcweir     // ------------------------------------------------------------
169*cdf0e10cSrcweir 
170*cdf0e10cSrcweir     /// returns a calculator object for regression curves (used by the view)
171*cdf0e10cSrcweir     static ::com::sun::star::uno::Reference<
172*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveCalculator >
173*cdf0e10cSrcweir         createRegressionCurveCalculatorByServiceName(
174*cdf0e10cSrcweir             ::rtl::OUString aServiceName );
175*cdf0e10cSrcweir 
176*cdf0e10cSrcweir     /** recalculates the regression parameters according to the data given in
177*cdf0e10cSrcweir         the data source.
178*cdf0e10cSrcweir 
179*cdf0e10cSrcweir         A sequence having the role "values-x" will be used as x-values for the
180*cdf0e10cSrcweir         calculation if found.  Otherwise a sequence (1, 2, 3, ...) of category
181*cdf0e10cSrcweir         indexes will be used for the recalculateRegression() method of the
182*cdf0e10cSrcweir         regression curve.
183*cdf0e10cSrcweir 
184*cdf0e10cSrcweir         The first sequence having the role "values-y" will be used as y-values
185*cdf0e10cSrcweir         for the recalculateRegression() method of the regression curve.
186*cdf0e10cSrcweir 
187*cdf0e10cSrcweir         @param bUseXValuesIfAvailable
188*cdf0e10cSrcweir             If false, the sequence (1, 2, 3, ...) will always be used, even if
189*cdf0e10cSrcweir             there is a data-sequence with role "values-x"
190*cdf0e10cSrcweir      */
191*cdf0e10cSrcweir     SAL_DLLPRIVATE static void initializeCurveCalculator(
192*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
193*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveCalculator > & xOutCurveCalculator,
194*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
195*cdf0e10cSrcweir             ::com::sun::star::chart2::data::XDataSource > & xSource,
196*cdf0e10cSrcweir         bool bUseXValuesIfAvailable = true );
197*cdf0e10cSrcweir 
198*cdf0e10cSrcweir     /** Same method as above, but uses the given XModel to determine the
199*cdf0e10cSrcweir         parameter bUseXValuesIfAvailable in the above function.  It is also
200*cdf0e10cSrcweir         necessary that the data::XDataSource is an XDataSeries, thus this parameter
201*cdf0e10cSrcweir         also changed.
202*cdf0e10cSrcweir      */
203*cdf0e10cSrcweir     static void initializeCurveCalculator(
204*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
205*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveCalculator > & xOutCurveCalculator,
206*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
207*cdf0e10cSrcweir             ::com::sun::star::chart2::XDataSeries > & xSeries,
208*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
209*cdf0e10cSrcweir             ::com::sun::star::frame::XModel > & xModel );
210*cdf0e10cSrcweir 
211*cdf0e10cSrcweir     static ::rtl::OUString getUINameForRegressionCurve( const ::com::sun::star::uno::Reference<
212*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve >& xCurve );
213*cdf0e10cSrcweir 
214*cdf0e10cSrcweir     static ::std::vector< ::com::sun::star::uno::Reference<
215*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve > > getAllRegressionCurvesNotMeanValueLine(
216*cdf0e10cSrcweir                 const ::com::sun::star::uno::Reference<
217*cdf0e10cSrcweir                     ::com::sun::star::chart2::XDiagram > & xDiagram );
218*cdf0e10cSrcweir 
219*cdf0e10cSrcweir     static void resetEquationPosition( const ::com::sun::star::uno::Reference<
220*cdf0e10cSrcweir                                        ::com::sun::star::chart2::XRegressionCurve > & xCurve );
221*cdf0e10cSrcweir 
222*cdf0e10cSrcweir     /// @return the index of the given curve in the given container. -1 if not contained
223*cdf0e10cSrcweir     static sal_Int32 getRegressionCurveIndex(
224*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
225*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurveContainer > & xContainer,
226*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
227*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve > & xCurve );
228*cdf0e10cSrcweir 
229*cdf0e10cSrcweir     static bool hasEquation(
230*cdf0e10cSrcweir         const ::com::sun::star::uno::Reference<
231*cdf0e10cSrcweir             ::com::sun::star::chart2::XRegressionCurve > & xCurve );
232*cdf0e10cSrcweir 
233*cdf0e10cSrcweir private:
234*cdf0e10cSrcweir     // not implemented
235*cdf0e10cSrcweir 	RegressionCurveHelper();
236*cdf0e10cSrcweir };
237*cdf0e10cSrcweir 
238*cdf0e10cSrcweir } //  namespace chart
239*cdf0e10cSrcweir 
240*cdf0e10cSrcweir // CHART2_REGRESSIONCURVEHELPER_HXX
241*cdf0e10cSrcweir #endif
242