1cde9e8dcSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3cde9e8dcSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4cde9e8dcSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5cde9e8dcSAndrew Rist  * distributed with this work for additional information
6cde9e8dcSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7cde9e8dcSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8cde9e8dcSAndrew Rist  * "License"); you may not use this file except in compliance
9cde9e8dcSAndrew Rist  * with the License.  You may obtain a copy of the License at
10cde9e8dcSAndrew Rist  *
11cde9e8dcSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cde9e8dcSAndrew Rist  *
13cde9e8dcSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14cde9e8dcSAndrew Rist  * software distributed under the License is distributed on an
15cde9e8dcSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16cde9e8dcSAndrew Rist  * KIND, either express or implied.  See the License for the
17cde9e8dcSAndrew Rist  * specific language governing permissions and limitations
18cde9e8dcSAndrew Rist  * under the License.
19cde9e8dcSAndrew Rist  *
20cde9e8dcSAndrew Rist  *************************************************************/
21cde9e8dcSAndrew Rist 
22cde9e8dcSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_chart2.hxx"
26cdf0e10cSrcweir #include "RegressionCurveHelper.hxx"
27cdf0e10cSrcweir #include "MeanValueRegressionCurveCalculator.hxx"
28cdf0e10cSrcweir #include "LinearRegressionCurveCalculator.hxx"
29cdf0e10cSrcweir #include "LogarithmicRegressionCurveCalculator.hxx"
30cdf0e10cSrcweir #include "ExponentialRegressionCurveCalculator.hxx"
31cdf0e10cSrcweir #include "PotentialRegressionCurveCalculator.hxx"
32cdf0e10cSrcweir #include "CommonConverters.hxx"
33cdf0e10cSrcweir #include "RegressionCurveModel.hxx"
34cdf0e10cSrcweir #include "ChartTypeHelper.hxx"
35cdf0e10cSrcweir #include "ChartModelHelper.hxx"
36cdf0e10cSrcweir #include "macros.hxx"
37cdf0e10cSrcweir #include "PropertyHelper.hxx"
38cdf0e10cSrcweir #include "ResId.hxx"
39cdf0e10cSrcweir #include "Strings.hrc"
40cdf0e10cSrcweir #include "DiagramHelper.hxx"
41cdf0e10cSrcweir #include <com/sun/star/chart2/XChartDocument.hpp>
42cdf0e10cSrcweir 
43cdf0e10cSrcweir using namespace ::com::sun::star;
44cdf0e10cSrcweir using namespace ::com::sun::star::chart2;
45cdf0e10cSrcweir 
46cdf0e10cSrcweir using ::com::sun::star::uno::Reference;
47cdf0e10cSrcweir using ::com::sun::star::uno::Sequence;
48cdf0e10cSrcweir using ::com::sun::star::uno::XComponentContext;
49cdf0e10cSrcweir using ::com::sun::star::lang::XServiceName;
50cdf0e10cSrcweir using ::com::sun::star::beans::XPropertySet;
51cdf0e10cSrcweir using ::com::sun::star::uno::Exception;
52cdf0e10cSrcweir using ::rtl::OUString;
53cdf0e10cSrcweir 
54cdf0e10cSrcweir namespace
55cdf0e10cSrcweir {
lcl_getServiceNameForType(::chart::RegressionCurveHelper::tRegressionType eType)56cdf0e10cSrcweir OUString lcl_getServiceNameForType( ::chart::RegressionCurveHelper::tRegressionType eType )
57cdf0e10cSrcweir {
58cdf0e10cSrcweir     OUString aServiceName;
59cdf0e10cSrcweir     switch( eType )
60cdf0e10cSrcweir     {
61cdf0e10cSrcweir         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_LINEAR:
62cdf0e10cSrcweir             aServiceName = C2U( "com.sun.star.chart2.LinearRegressionCurve" );
63cdf0e10cSrcweir             break;
64cdf0e10cSrcweir         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_LOG:
65cdf0e10cSrcweir             aServiceName = C2U( "com.sun.star.chart2.LogarithmicRegressionCurve" );
66cdf0e10cSrcweir             break;
67cdf0e10cSrcweir         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_EXP:
68cdf0e10cSrcweir             aServiceName = C2U( "com.sun.star.chart2.ExponentialRegressionCurve" );
69cdf0e10cSrcweir             break;
70cdf0e10cSrcweir         case ::chart::RegressionCurveHelper::REGRESSION_TYPE_POWER:
71cdf0e10cSrcweir             aServiceName = C2U( "com.sun.star.chart2.PotentialRegressionCurve" );
72cdf0e10cSrcweir             break;
73cdf0e10cSrcweir         default:
74cdf0e10cSrcweir             OSL_ENSURE(false,"unknown regression curve type - use linear instead");
75cdf0e10cSrcweir             aServiceName = C2U( "com.sun.star.chart2.LinearRegressionCurve" );
76cdf0e10cSrcweir             break;
77cdf0e10cSrcweir     }
78cdf0e10cSrcweir     return aServiceName;
79cdf0e10cSrcweir }
80cdf0e10cSrcweir } // anonymous namespace
81cdf0e10cSrcweir 
82cdf0e10cSrcweir //.............................................................................
83cdf0e10cSrcweir namespace chart
84cdf0e10cSrcweir {
85cdf0e10cSrcweir //.............................................................................
86cdf0e10cSrcweir 
createMeanValueLine(const Reference<XComponentContext> & xContext)87cdf0e10cSrcweir Reference< XRegressionCurve > RegressionCurveHelper::createMeanValueLine(
88cdf0e10cSrcweir     const Reference< XComponentContext > & xContext )
89cdf0e10cSrcweir {
90cdf0e10cSrcweir     return Reference< XRegressionCurve >(
91cdf0e10cSrcweir         new MeanValueRegressionCurve( xContext ));
92cdf0e10cSrcweir }
93cdf0e10cSrcweir 
createRegressionCurveByServiceName(const Reference<XComponentContext> & xContext,::rtl::OUString aServiceName)94cdf0e10cSrcweir Reference< XRegressionCurve > RegressionCurveHelper::createRegressionCurveByServiceName(
95cdf0e10cSrcweir     const Reference< XComponentContext > & xContext,
96cdf0e10cSrcweir     ::rtl::OUString aServiceName )
97cdf0e10cSrcweir {
98cdf0e10cSrcweir     Reference< XRegressionCurve > xResult;
99cdf0e10cSrcweir 
100cdf0e10cSrcweir     // todo: use factory methods with service name
101cdf0e10cSrcweir     if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
102cdf0e10cSrcweir                 "com.sun.star.chart2.LinearRegressionCurve" )))
103cdf0e10cSrcweir     {
104cdf0e10cSrcweir         xResult.set(
105cdf0e10cSrcweir             new LinearRegressionCurve( xContext ));
106cdf0e10cSrcweir     }
107cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
108cdf0e10cSrcweir                      "com.sun.star.chart2.LogarithmicRegressionCurve" )))
109cdf0e10cSrcweir     {
110cdf0e10cSrcweir         xResult.set(
111cdf0e10cSrcweir             new LogarithmicRegressionCurve( xContext ));
112cdf0e10cSrcweir     }
113cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
114cdf0e10cSrcweir                      "com.sun.star.chart2.ExponentialRegressionCurve" )))
115cdf0e10cSrcweir     {
116cdf0e10cSrcweir         xResult.set(
117cdf0e10cSrcweir             new ExponentialRegressionCurve( xContext ));
118cdf0e10cSrcweir     }
119cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
120cdf0e10cSrcweir                      "com.sun.star.chart2.PotentialRegressionCurve" )))
121cdf0e10cSrcweir     {
122cdf0e10cSrcweir         xResult.set(
123cdf0e10cSrcweir             new PotentialRegressionCurve( xContext ));
124cdf0e10cSrcweir     }
125cdf0e10cSrcweir 
126cdf0e10cSrcweir     return xResult;
127cdf0e10cSrcweir }
128cdf0e10cSrcweir 
129cdf0e10cSrcweir // ------------------------------------------------------------
130cdf0e10cSrcweir 
createRegressionCurveCalculatorByServiceName(::rtl::OUString aServiceName)131cdf0e10cSrcweir Reference< XRegressionCurveCalculator > RegressionCurveHelper::createRegressionCurveCalculatorByServiceName(
132cdf0e10cSrcweir     ::rtl::OUString aServiceName )
133cdf0e10cSrcweir {
134cdf0e10cSrcweir     Reference< XRegressionCurveCalculator > xResult;
135cdf0e10cSrcweir 
136cdf0e10cSrcweir     // todo: use factory methods with service name
137cdf0e10cSrcweir     if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
138cdf0e10cSrcweir                      "com.sun.star.chart2.MeanValueRegressionCurve" )))
139cdf0e10cSrcweir     {
140cdf0e10cSrcweir         xResult.set( new MeanValueRegressionCurveCalculator());
141cdf0e10cSrcweir     }
142cdf0e10cSrcweir     if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
143cdf0e10cSrcweir                      "com.sun.star.chart2.LinearRegressionCurve" )))
144cdf0e10cSrcweir     {
145cdf0e10cSrcweir         xResult.set( new LinearRegressionCurveCalculator());
146cdf0e10cSrcweir     }
147cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
148cdf0e10cSrcweir                      "com.sun.star.chart2.LogarithmicRegressionCurve" )))
149cdf0e10cSrcweir     {
150cdf0e10cSrcweir         xResult.set( new LogarithmicRegressionCurveCalculator());
151cdf0e10cSrcweir     }
152cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
153cdf0e10cSrcweir                      "com.sun.star.chart2.ExponentialRegressionCurve" )))
154cdf0e10cSrcweir     {
155cdf0e10cSrcweir         xResult.set( new ExponentialRegressionCurveCalculator());
156cdf0e10cSrcweir     }
157cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM(
158cdf0e10cSrcweir                      "com.sun.star.chart2.PotentialRegressionCurve" )))
159cdf0e10cSrcweir     {
160cdf0e10cSrcweir         xResult.set( new PotentialRegressionCurveCalculator());
161cdf0e10cSrcweir     }
162cdf0e10cSrcweir 
163cdf0e10cSrcweir     return xResult;
164cdf0e10cSrcweir }
165cdf0e10cSrcweir 
initializeCurveCalculator(const Reference<XRegressionCurveCalculator> & xOutCurveCalculator,const Reference<data::XDataSource> & xSource,bool bUseXValuesIfAvailable)166cdf0e10cSrcweir void RegressionCurveHelper::initializeCurveCalculator(
167cdf0e10cSrcweir     const Reference< XRegressionCurveCalculator > & xOutCurveCalculator,
168cdf0e10cSrcweir     const Reference< data::XDataSource > & xSource,
169cdf0e10cSrcweir     bool bUseXValuesIfAvailable /* = true */ )
170cdf0e10cSrcweir {
171cdf0e10cSrcweir     if( ! (xOutCurveCalculator.is() &&
172cdf0e10cSrcweir            xSource.is() ))
173cdf0e10cSrcweir         return;
174cdf0e10cSrcweir 
175cdf0e10cSrcweir     Sequence< double > aXValues, aYValues;
176cdf0e10cSrcweir     bool bXValuesFound = false, bYValuesFound = false;
177cdf0e10cSrcweir 
178cdf0e10cSrcweir     Sequence< Reference< data::XLabeledDataSequence > > aDataSeqs( xSource->getDataSequences());
179cdf0e10cSrcweir     sal_Int32 i = 0;
180cdf0e10cSrcweir     for( i=0;
181cdf0e10cSrcweir          ! (bXValuesFound && bYValuesFound) && i<aDataSeqs.getLength();
182cdf0e10cSrcweir          ++i )
183cdf0e10cSrcweir     {
184cdf0e10cSrcweir         try
185cdf0e10cSrcweir         {
186cdf0e10cSrcweir             Reference< data::XDataSequence > xSeq( aDataSeqs[i]->getValues());
187cdf0e10cSrcweir             Reference< XPropertySet > xProp( xSeq, uno::UNO_QUERY_THROW );
188cdf0e10cSrcweir             ::rtl::OUString aRole;
189cdf0e10cSrcweir             if( xProp->getPropertyValue(
190cdf0e10cSrcweir                     ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "Role" ))) >>= aRole )
191cdf0e10cSrcweir             {
192cdf0e10cSrcweir                 if( bUseXValuesIfAvailable &&
193cdf0e10cSrcweir                     ! bXValuesFound &&
194cdf0e10cSrcweir                     aRole.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "values-x" )))
195cdf0e10cSrcweir                 {
196cdf0e10cSrcweir                     aXValues = DataSequenceToDoubleSequence( xSeq );
197cdf0e10cSrcweir                     bXValuesFound = true;
198cdf0e10cSrcweir                 }
199cdf0e10cSrcweir                 else if( ! bYValuesFound &&
200cdf0e10cSrcweir                          aRole.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "values-y" )))
201cdf0e10cSrcweir                 {
202cdf0e10cSrcweir                     aYValues = DataSequenceToDoubleSequence( xSeq );
203cdf0e10cSrcweir                     bYValuesFound = true;
204cdf0e10cSrcweir                 }
205cdf0e10cSrcweir             }
206cdf0e10cSrcweir         }
207cdf0e10cSrcweir         catch( Exception & ex )
208cdf0e10cSrcweir         {
209cdf0e10cSrcweir             ASSERT_EXCEPTION( ex );
210cdf0e10cSrcweir         }
211cdf0e10cSrcweir     }
212cdf0e10cSrcweir 
213cdf0e10cSrcweir     if( ! bXValuesFound &&
214cdf0e10cSrcweir         bYValuesFound )
215cdf0e10cSrcweir     {
216cdf0e10cSrcweir         // initialize with 1, 2, ...
217cdf0e10cSrcweir         //first category (index 0) matches with real number 1.0
218cdf0e10cSrcweir         aXValues.realloc( aYValues.getLength());
219cdf0e10cSrcweir         for( i=0; i<aXValues.getLength(); ++i )
220cdf0e10cSrcweir             aXValues[i] = i+1;
221cdf0e10cSrcweir         bXValuesFound = true;
222cdf0e10cSrcweir     }
223cdf0e10cSrcweir 
224cdf0e10cSrcweir     if( bXValuesFound && bYValuesFound &&
225cdf0e10cSrcweir         aXValues.getLength() > 0 &&
226cdf0e10cSrcweir         aYValues.getLength() > 0 )
227cdf0e10cSrcweir         xOutCurveCalculator->recalculateRegression( aXValues, aYValues );
228cdf0e10cSrcweir }
229cdf0e10cSrcweir 
initializeCurveCalculator(const Reference<XRegressionCurveCalculator> & xOutCurveCalculator,const Reference<XDataSeries> & xSeries,const Reference<frame::XModel> & xModel)230cdf0e10cSrcweir void RegressionCurveHelper::initializeCurveCalculator(
231cdf0e10cSrcweir     const Reference< XRegressionCurveCalculator > & xOutCurveCalculator,
232cdf0e10cSrcweir     const Reference< XDataSeries > & xSeries,
233cdf0e10cSrcweir     const Reference< frame::XModel > & xModel )
234cdf0e10cSrcweir {
235cdf0e10cSrcweir     sal_Int32 nAxisType = ChartTypeHelper::getAxisType(
236cdf0e10cSrcweir         ChartModelHelper::getChartTypeOfSeries( xModel, xSeries ), 0 ); // x-axis
237cdf0e10cSrcweir 
238cdf0e10cSrcweir     initializeCurveCalculator( xOutCurveCalculator,
239cdf0e10cSrcweir                                uno::Reference< data::XDataSource >( xSeries, uno::UNO_QUERY ),
240cdf0e10cSrcweir                                (nAxisType == AxisType::REALNUMBER) );
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir // ----------------------------------------
244cdf0e10cSrcweir 
hasMeanValueLine(const uno::Reference<XRegressionCurveContainer> & xRegCnt)245cdf0e10cSrcweir bool RegressionCurveHelper::hasMeanValueLine(
246cdf0e10cSrcweir     const uno::Reference< XRegressionCurveContainer > & xRegCnt )
247cdf0e10cSrcweir {
248cdf0e10cSrcweir     if( !xRegCnt.is())
249cdf0e10cSrcweir         return false;
250cdf0e10cSrcweir 
251cdf0e10cSrcweir     try
252cdf0e10cSrcweir     {
253cdf0e10cSrcweir         uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
254cdf0e10cSrcweir             xRegCnt->getRegressionCurves());
255cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
256cdf0e10cSrcweir         {
257cdf0e10cSrcweir             if( isMeanValueLine( aCurves[i] ))
258cdf0e10cSrcweir                 return true;
259cdf0e10cSrcweir         }
260cdf0e10cSrcweir     }
261cdf0e10cSrcweir     catch( Exception & ex )
262cdf0e10cSrcweir     {
263cdf0e10cSrcweir         ASSERT_EXCEPTION( ex );
264cdf0e10cSrcweir     }
265cdf0e10cSrcweir 
266cdf0e10cSrcweir     return false;
267cdf0e10cSrcweir }
268cdf0e10cSrcweir 
isMeanValueLine(const uno::Reference<chart2::XRegressionCurve> & xRegCurve)269cdf0e10cSrcweir bool RegressionCurveHelper::isMeanValueLine(
270cdf0e10cSrcweir     const uno::Reference< chart2::XRegressionCurve > & xRegCurve )
271cdf0e10cSrcweir {
272cdf0e10cSrcweir     uno::Reference< XServiceName > xServName( xRegCurve, uno::UNO_QUERY );
273cdf0e10cSrcweir     if( xServName.is() &&
274cdf0e10cSrcweir         xServName->getServiceName().equals(
275cdf0e10cSrcweir             C2U( "com.sun.star.chart2.MeanValueRegressionCurve" )))
276cdf0e10cSrcweir         return true;
277cdf0e10cSrcweir     return false;
278cdf0e10cSrcweir }
279cdf0e10cSrcweir 
280cdf0e10cSrcweir uno::Reference< chart2::XRegressionCurve >
getMeanValueLine(const uno::Reference<chart2::XRegressionCurveContainer> & xRegCnt)281cdf0e10cSrcweir     RegressionCurveHelper::getMeanValueLine(
282cdf0e10cSrcweir         const uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
283cdf0e10cSrcweir {
284cdf0e10cSrcweir     if( xRegCnt.is())
285cdf0e10cSrcweir     {
286cdf0e10cSrcweir         try
287cdf0e10cSrcweir         {
288cdf0e10cSrcweir             uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
289cdf0e10cSrcweir                 xRegCnt->getRegressionCurves());
290cdf0e10cSrcweir             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
291cdf0e10cSrcweir             {
292cdf0e10cSrcweir                 if( isMeanValueLine( aCurves[i] ))
293cdf0e10cSrcweir                     return aCurves[i];
294cdf0e10cSrcweir             }
295cdf0e10cSrcweir         }
296cdf0e10cSrcweir         catch( Exception & ex )
297cdf0e10cSrcweir         {
298cdf0e10cSrcweir             ASSERT_EXCEPTION( ex );
299cdf0e10cSrcweir         }
300cdf0e10cSrcweir     }
301cdf0e10cSrcweir 
302cdf0e10cSrcweir     return uno::Reference< chart2::XRegressionCurve >();
303cdf0e10cSrcweir }
304cdf0e10cSrcweir 
addMeanValueLine(uno::Reference<XRegressionCurveContainer> & xRegCnt,const uno::Reference<XComponentContext> & xContext,const uno::Reference<XPropertySet> & xSeriesProp)305cdf0e10cSrcweir void RegressionCurveHelper::addMeanValueLine(
306cdf0e10cSrcweir     uno::Reference< XRegressionCurveContainer > & xRegCnt,
307cdf0e10cSrcweir     const uno::Reference< XComponentContext > & xContext,
308cdf0e10cSrcweir     const uno::Reference< XPropertySet > & xSeriesProp )
309cdf0e10cSrcweir {
310cdf0e10cSrcweir     if( !xRegCnt.is() ||
311cdf0e10cSrcweir         ::chart::RegressionCurveHelper::hasMeanValueLine( xRegCnt ) )
312cdf0e10cSrcweir         return;
313cdf0e10cSrcweir 
314cdf0e10cSrcweir     // todo: use a valid context
315cdf0e10cSrcweir     uno::Reference< XRegressionCurve > xCurve( createMeanValueLine( xContext ));
316cdf0e10cSrcweir     xRegCnt->addRegressionCurve( xCurve );
317cdf0e10cSrcweir 
318cdf0e10cSrcweir     if( xSeriesProp.is())
319cdf0e10cSrcweir     {
320cdf0e10cSrcweir         uno::Reference< XPropertySet > xProp( xCurve, uno::UNO_QUERY );
321cdf0e10cSrcweir         if( xProp.is())
322cdf0e10cSrcweir         {
323cdf0e10cSrcweir             xProp->setPropertyValue( C2U( "LineColor" ),
324cdf0e10cSrcweir                                      xSeriesProp->getPropertyValue( C2U( "Color" )));
325cdf0e10cSrcweir         }
326cdf0e10cSrcweir     }
327cdf0e10cSrcweir }
328cdf0e10cSrcweir 
removeMeanValueLine(Reference<XRegressionCurveContainer> & xRegCnt)329cdf0e10cSrcweir void RegressionCurveHelper::removeMeanValueLine(
330cdf0e10cSrcweir     Reference< XRegressionCurveContainer > & xRegCnt )
331cdf0e10cSrcweir {
332cdf0e10cSrcweir     if( !xRegCnt.is())
333cdf0e10cSrcweir         return;
334cdf0e10cSrcweir 
335cdf0e10cSrcweir     try
336cdf0e10cSrcweir     {
337cdf0e10cSrcweir         Sequence< Reference< XRegressionCurve > > aCurves(
338cdf0e10cSrcweir             xRegCnt->getRegressionCurves());
339cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
340cdf0e10cSrcweir         {
341cdf0e10cSrcweir             if( isMeanValueLine( aCurves[i] ))
342cdf0e10cSrcweir             {
343cdf0e10cSrcweir                 xRegCnt->removeRegressionCurve( aCurves[i] );
344cdf0e10cSrcweir                 // attention: the iterator i has become invalid now
345cdf0e10cSrcweir 
346cdf0e10cSrcweir                 // note: assume that there is only one mean-value curve
347cdf0e10cSrcweir                 // to remove multiple mean-value curves remove the break
348cdf0e10cSrcweir                 break;
349cdf0e10cSrcweir             }
350cdf0e10cSrcweir         }
351cdf0e10cSrcweir     }
352cdf0e10cSrcweir     catch( Exception & ex )
353cdf0e10cSrcweir     {
354cdf0e10cSrcweir         ASSERT_EXCEPTION( ex );
355cdf0e10cSrcweir     }
356cdf0e10cSrcweir }
357cdf0e10cSrcweir 
addRegressionCurve(tRegressionType eType,uno::Reference<XRegressionCurveContainer> & xRegCnt,const uno::Reference<XComponentContext> &,const uno::Reference<beans::XPropertySet> & xPropertySource,const uno::Reference<beans::XPropertySet> & xEquationProperties)358cdf0e10cSrcweir void RegressionCurveHelper::addRegressionCurve(
359cdf0e10cSrcweir     tRegressionType eType,
360cdf0e10cSrcweir     uno::Reference< XRegressionCurveContainer > & xRegCnt,
361cdf0e10cSrcweir     const uno::Reference< XComponentContext > & /* xContext */,
362cdf0e10cSrcweir     const uno::Reference< beans::XPropertySet >& xPropertySource,
363cdf0e10cSrcweir     const uno::Reference< beans::XPropertySet >& xEquationProperties )
364cdf0e10cSrcweir {
365cdf0e10cSrcweir     if( !xRegCnt.is() )
366cdf0e10cSrcweir         return;
367cdf0e10cSrcweir 
368cdf0e10cSrcweir     if( eType == REGRESSION_TYPE_NONE )
369cdf0e10cSrcweir     {
370cdf0e10cSrcweir         OSL_ENSURE(false,"don't create a regression curve of type none");
371cdf0e10cSrcweir         return;
372cdf0e10cSrcweir     }
373cdf0e10cSrcweir 
374cdf0e10cSrcweir     uno::Reference< chart2::XRegressionCurve > xCurve;
375cdf0e10cSrcweir     ::rtl::OUString aServiceName( lcl_getServiceNameForType( eType ));
376cdf0e10cSrcweir 
377*9ec58d04SHerbert Dürr     if( !aServiceName.isEmpty() )
378cdf0e10cSrcweir     {
379cdf0e10cSrcweir         // todo: use a valid context
380cdf0e10cSrcweir         xCurve.set( createRegressionCurveByServiceName(
381cdf0e10cSrcweir                          uno::Reference< uno::XComponentContext >(), aServiceName ));
382cdf0e10cSrcweir 
383cdf0e10cSrcweir         if( xEquationProperties.is())
384cdf0e10cSrcweir             xCurve->setEquationProperties( xEquationProperties );
385cdf0e10cSrcweir 
386cdf0e10cSrcweir         uno::Reference< beans::XPropertySet > xProp( xCurve, uno::UNO_QUERY );
387cdf0e10cSrcweir         if( xProp.is())
388cdf0e10cSrcweir         {
389cdf0e10cSrcweir             if( xPropertySource.is())
390cdf0e10cSrcweir                 comphelper::copyProperties( xPropertySource, xProp );
391cdf0e10cSrcweir             else
392cdf0e10cSrcweir             {
393cdf0e10cSrcweir                 uno::Reference< XPropertySet > xSeriesProp( xRegCnt, uno::UNO_QUERY );
394cdf0e10cSrcweir                 if( xSeriesProp.is())
395cdf0e10cSrcweir                 {
396cdf0e10cSrcweir                     xProp->setPropertyValue( C2U( "LineColor" ),
397cdf0e10cSrcweir                                              xSeriesProp->getPropertyValue( C2U( "Color" )));
398cdf0e10cSrcweir                 }
399cdf0e10cSrcweir //                 xProp->setPropertyValue( C2U( "LineWidth" ), uno::makeAny( sal_Int32( 100 )));
400cdf0e10cSrcweir             }
401cdf0e10cSrcweir         }
402cdf0e10cSrcweir     }
403cdf0e10cSrcweir     xRegCnt->addRegressionCurve( xCurve );
404cdf0e10cSrcweir }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir /** removes all regression curves that are not of type mean value
407cdf0e10cSrcweir     and returns true, if anything was removed
408cdf0e10cSrcweir  */
removeAllExceptMeanValueLine(uno::Reference<chart2::XRegressionCurveContainer> & xRegCnt)409cdf0e10cSrcweir bool RegressionCurveHelper::removeAllExceptMeanValueLine(
410cdf0e10cSrcweir     uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
411cdf0e10cSrcweir {
412cdf0e10cSrcweir     bool bRemovedSomething = false;
413cdf0e10cSrcweir     if( xRegCnt.is())
414cdf0e10cSrcweir     {
415cdf0e10cSrcweir         try
416cdf0e10cSrcweir         {
417cdf0e10cSrcweir             uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
418cdf0e10cSrcweir                 xRegCnt->getRegressionCurves());
419cdf0e10cSrcweir             ::std::vector< uno::Reference< chart2::XRegressionCurve > > aCurvesToDelete;
420cdf0e10cSrcweir             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
421cdf0e10cSrcweir             {
422cdf0e10cSrcweir                 if( ! isMeanValueLine( aCurves[i] ))
423cdf0e10cSrcweir                 {
424cdf0e10cSrcweir                     aCurvesToDelete.push_back( aCurves[ i ] );
425cdf0e10cSrcweir                 }
426cdf0e10cSrcweir             }
427cdf0e10cSrcweir 
428cdf0e10cSrcweir             for( ::std::vector< uno::Reference< chart2::XRegressionCurve > >::const_iterator aIt = aCurvesToDelete.begin();
429cdf0e10cSrcweir                      aIt != aCurvesToDelete.end(); ++aIt )
430cdf0e10cSrcweir             {
431cdf0e10cSrcweir                 xRegCnt->removeRegressionCurve( *aIt );
432cdf0e10cSrcweir                 bRemovedSomething = true;
433cdf0e10cSrcweir             }
434cdf0e10cSrcweir         }
435cdf0e10cSrcweir         catch( uno::Exception & ex )
436cdf0e10cSrcweir         {
437cdf0e10cSrcweir             ASSERT_EXCEPTION( ex );
438cdf0e10cSrcweir         }
439cdf0e10cSrcweir     }
440cdf0e10cSrcweir     return bRemovedSomething;
441cdf0e10cSrcweir }
442cdf0e10cSrcweir 
removeEquations(uno::Reference<chart2::XRegressionCurveContainer> & xRegCnt)443cdf0e10cSrcweir void RegressionCurveHelper::removeEquations(
444cdf0e10cSrcweir         uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
445cdf0e10cSrcweir {
446cdf0e10cSrcweir     if( xRegCnt.is())
447cdf0e10cSrcweir     {
448cdf0e10cSrcweir         try
449cdf0e10cSrcweir         {
450cdf0e10cSrcweir             uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
451cdf0e10cSrcweir                 xRegCnt->getRegressionCurves());
452cdf0e10cSrcweir             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
453cdf0e10cSrcweir             {
454cdf0e10cSrcweir                 if( !isMeanValueLine( aCurves[i] ) )
455cdf0e10cSrcweir                 {
456cdf0e10cSrcweir                     uno::Reference< chart2::XRegressionCurve > xRegCurve( aCurves[ i ] );
457cdf0e10cSrcweir                     if( xRegCurve.is() )
458cdf0e10cSrcweir                     {
459cdf0e10cSrcweir                         uno::Reference< beans::XPropertySet > xEqProp( xRegCurve->getEquationProperties() ) ;
460cdf0e10cSrcweir                         if( xEqProp.is())
461cdf0e10cSrcweir                         {
462cdf0e10cSrcweir                             xEqProp->setPropertyValue( C2U("ShowEquation"), uno::makeAny( false ));
463cdf0e10cSrcweir                             xEqProp->setPropertyValue( C2U("ShowCorrelationCoefficient"), uno::makeAny( false ));
464cdf0e10cSrcweir                         }
465cdf0e10cSrcweir                     }
466cdf0e10cSrcweir                 }
467cdf0e10cSrcweir             }
468cdf0e10cSrcweir         }
469cdf0e10cSrcweir         catch( uno::Exception & ex )
470cdf0e10cSrcweir         {
471cdf0e10cSrcweir             ASSERT_EXCEPTION( ex );
472cdf0e10cSrcweir         }
473cdf0e10cSrcweir     }
474cdf0e10cSrcweir }
475cdf0e10cSrcweir 
replaceOrAddCurveAndReduceToOne(tRegressionType eType,uno::Reference<XRegressionCurveContainer> & xRegCnt,const uno::Reference<XComponentContext> & xContext)476cdf0e10cSrcweir void RegressionCurveHelper::replaceOrAddCurveAndReduceToOne(
477cdf0e10cSrcweir     tRegressionType eType,
478cdf0e10cSrcweir     uno::Reference< XRegressionCurveContainer > & xRegCnt,
479cdf0e10cSrcweir     const uno::Reference< XComponentContext > & xContext )
480cdf0e10cSrcweir {
481cdf0e10cSrcweir     uno::Reference< chart2::XRegressionCurve > xRegressionCurve( getFirstCurveNotMeanValueLine( xRegCnt ));
482cdf0e10cSrcweir     if( ! xRegressionCurve.is())
483cdf0e10cSrcweir         RegressionCurveHelper::addRegressionCurve( eType, xRegCnt, xContext );
484cdf0e10cSrcweir     else
485cdf0e10cSrcweir     {
486cdf0e10cSrcweir         OUString aServiceName( lcl_getServiceNameForType( eType ));
487*9ec58d04SHerbert Dürr         if( !aServiceName.isEmpty() )
488cdf0e10cSrcweir         {
489cdf0e10cSrcweir             RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCnt );
490cdf0e10cSrcweir             RegressionCurveHelper::addRegressionCurve(
491cdf0e10cSrcweir                 eType, xRegCnt, xContext,
492cdf0e10cSrcweir                 Reference< beans::XPropertySet >( xRegressionCurve, uno::UNO_QUERY ),
493cdf0e10cSrcweir                 xRegressionCurve->getEquationProperties());
494cdf0e10cSrcweir         }
495cdf0e10cSrcweir     }
496cdf0e10cSrcweir }
497cdf0e10cSrcweir 
getFirstCurveNotMeanValueLine(const Reference<XRegressionCurveContainer> & xRegCnt)498cdf0e10cSrcweir uno::Reference< chart2::XRegressionCurve > RegressionCurveHelper::getFirstCurveNotMeanValueLine(
499cdf0e10cSrcweir     const Reference< XRegressionCurveContainer > & xRegCnt )
500cdf0e10cSrcweir {
501cdf0e10cSrcweir     if( !xRegCnt.is())
502cdf0e10cSrcweir         return NULL;
503cdf0e10cSrcweir 
504cdf0e10cSrcweir     try
505cdf0e10cSrcweir     {
506cdf0e10cSrcweir         uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
507cdf0e10cSrcweir             xRegCnt->getRegressionCurves());
508cdf0e10cSrcweir         ::std::vector< uno::Reference< chart2::XRegressionCurve > > aCurvesToDelete;
509cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
510cdf0e10cSrcweir         {
511cdf0e10cSrcweir             if( ! isMeanValueLine( aCurves[i] ))
512cdf0e10cSrcweir             {
513cdf0e10cSrcweir                 return aCurves[ i ];
514cdf0e10cSrcweir             }
515cdf0e10cSrcweir         }
516cdf0e10cSrcweir     }
517cdf0e10cSrcweir     catch( Exception & ex )
518cdf0e10cSrcweir     {
519cdf0e10cSrcweir         ASSERT_EXCEPTION( ex );
520cdf0e10cSrcweir     }
521cdf0e10cSrcweir 
522cdf0e10cSrcweir     return NULL;
523cdf0e10cSrcweir }
524cdf0e10cSrcweir 
getRegressionType(const Reference<XRegressionCurve> & xCurve)525cdf0e10cSrcweir RegressionCurveHelper::tRegressionType RegressionCurveHelper::getRegressionType(
526cdf0e10cSrcweir     const Reference< XRegressionCurve > & xCurve )
527cdf0e10cSrcweir {
528cdf0e10cSrcweir     tRegressionType eResult = REGRESSION_TYPE_UNKNOWN;
529cdf0e10cSrcweir 
530cdf0e10cSrcweir     try
531cdf0e10cSrcweir     {
532cdf0e10cSrcweir         Reference< lang::XServiceName > xServName( xCurve, uno::UNO_QUERY );
533cdf0e10cSrcweir         if( xServName.is())
534cdf0e10cSrcweir         {
535cdf0e10cSrcweir             ::rtl::OUString aServiceName( xServName->getServiceName() );
536cdf0e10cSrcweir 
537cdf0e10cSrcweir             if( aServiceName.equalsAsciiL(
538cdf0e10cSrcweir                     RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.LinearRegressionCurve" )))
539cdf0e10cSrcweir             {
540cdf0e10cSrcweir                 eResult = REGRESSION_TYPE_LINEAR;
541cdf0e10cSrcweir             }
542cdf0e10cSrcweir             else if( aServiceName.equalsAsciiL(
543cdf0e10cSrcweir                          RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.LogarithmicRegressionCurve" )))
544cdf0e10cSrcweir             {
545cdf0e10cSrcweir                 eResult = REGRESSION_TYPE_LOG;
546cdf0e10cSrcweir             }
547cdf0e10cSrcweir             else if( aServiceName.equalsAsciiL(
548cdf0e10cSrcweir                          RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.ExponentialRegressionCurve" )))
549cdf0e10cSrcweir             {
550cdf0e10cSrcweir                 eResult = REGRESSION_TYPE_EXP;
551cdf0e10cSrcweir             }
552cdf0e10cSrcweir             else if( aServiceName.equalsAsciiL(
553cdf0e10cSrcweir                          RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.PotentialRegressionCurve" )))
554cdf0e10cSrcweir             {
555cdf0e10cSrcweir                 eResult = REGRESSION_TYPE_POWER;
556cdf0e10cSrcweir             }
557cdf0e10cSrcweir             else if( aServiceName.equalsAsciiL(
558cdf0e10cSrcweir                          RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.MeanValueRegressionCurve" )))
559cdf0e10cSrcweir             {
560cdf0e10cSrcweir                 eResult = REGRESSION_TYPE_MEAN_VALUE;
561cdf0e10cSrcweir             }
562cdf0e10cSrcweir         }
563cdf0e10cSrcweir     }
564cdf0e10cSrcweir     catch( Exception & ex )
565cdf0e10cSrcweir     {
566cdf0e10cSrcweir         ASSERT_EXCEPTION( ex );
567cdf0e10cSrcweir     }
568cdf0e10cSrcweir 
569cdf0e10cSrcweir     return eResult;
570cdf0e10cSrcweir }
571cdf0e10cSrcweir 
getFirstRegressTypeNotMeanValueLine(const Reference<XRegressionCurveContainer> & xRegCnt)572cdf0e10cSrcweir RegressionCurveHelper::tRegressionType RegressionCurveHelper::getFirstRegressTypeNotMeanValueLine(
573cdf0e10cSrcweir     const Reference< XRegressionCurveContainer > & xRegCnt )
574cdf0e10cSrcweir {
575cdf0e10cSrcweir     tRegressionType eResult = REGRESSION_TYPE_NONE;
576cdf0e10cSrcweir 
577cdf0e10cSrcweir     if( xRegCnt.is())
578cdf0e10cSrcweir     {
579cdf0e10cSrcweir         Sequence< Reference< XRegressionCurve > > aCurves(
580cdf0e10cSrcweir             xRegCnt->getRegressionCurves());
581cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
582cdf0e10cSrcweir         {
583cdf0e10cSrcweir             tRegressionType eType = getRegressionType( aCurves[i] );
584cdf0e10cSrcweir             if( eType != REGRESSION_TYPE_MEAN_VALUE &&
585cdf0e10cSrcweir                 eType != REGRESSION_TYPE_UNKNOWN )
586cdf0e10cSrcweir             {
587cdf0e10cSrcweir                 eResult = eType;
588cdf0e10cSrcweir                 break;
589cdf0e10cSrcweir             }
590cdf0e10cSrcweir         }
591cdf0e10cSrcweir     }
592cdf0e10cSrcweir 
593cdf0e10cSrcweir     return eResult;
594cdf0e10cSrcweir }
595cdf0e10cSrcweir 
getUINameForRegressionCurve(const Reference<XRegressionCurve> & xRegressionCurve)596cdf0e10cSrcweir OUString RegressionCurveHelper::getUINameForRegressionCurve( const Reference< XRegressionCurve >& xRegressionCurve )
597cdf0e10cSrcweir {
598cdf0e10cSrcweir     OUString aResult;
599cdf0e10cSrcweir     Reference< lang::XServiceName > xServiceName( xRegressionCurve, uno::UNO_QUERY );
600cdf0e10cSrcweir     if( ! xServiceName.is())
601cdf0e10cSrcweir         return aResult;
602cdf0e10cSrcweir 
603cdf0e10cSrcweir     OUString aServiceName( xServiceName->getServiceName());
604cdf0e10cSrcweir     if( aServiceName.equalsAsciiL(
605cdf0e10cSrcweir             RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.MeanValueRegressionCurve" )))
606cdf0e10cSrcweir     {
607cdf0e10cSrcweir         aResult = ::chart::SchResId::getResString( STR_REGRESSION_MEAN );
608cdf0e10cSrcweir     }
609cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL(
610cdf0e10cSrcweir                  RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.LinearRegressionCurve" )))
611cdf0e10cSrcweir     {
612cdf0e10cSrcweir         aResult = ::chart::SchResId::getResString( STR_REGRESSION_LINEAR );
613cdf0e10cSrcweir     }
614cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL(
615cdf0e10cSrcweir                  RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.LogarithmicRegressionCurve" )))
616cdf0e10cSrcweir     {
617cdf0e10cSrcweir         aResult = ::chart::SchResId::getResString( STR_REGRESSION_LOG );
618cdf0e10cSrcweir     }
619cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL(
620cdf0e10cSrcweir                  RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.ExponentialRegressionCurve" )))
621cdf0e10cSrcweir     {
622cdf0e10cSrcweir         aResult = ::chart::SchResId::getResString( STR_REGRESSION_EXP );
623cdf0e10cSrcweir     }
624cdf0e10cSrcweir     else if( aServiceName.equalsAsciiL(
625cdf0e10cSrcweir                  RTL_CONSTASCII_STRINGPARAM( "com.sun.star.chart2.PotentialRegressionCurve" )))
626cdf0e10cSrcweir     {
627cdf0e10cSrcweir         aResult = ::chart::SchResId::getResString( STR_REGRESSION_POWER );
628cdf0e10cSrcweir     }
629cdf0e10cSrcweir 
630cdf0e10cSrcweir     return aResult;
631cdf0e10cSrcweir }
632cdf0e10cSrcweir 
633cdf0e10cSrcweir ::std::vector< Reference< chart2::XRegressionCurve > >
getAllRegressionCurvesNotMeanValueLine(const Reference<chart2::XDiagram> & xDiagram)634cdf0e10cSrcweir     RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine(
635cdf0e10cSrcweir         const Reference< chart2::XDiagram > & xDiagram )
636cdf0e10cSrcweir {
637cdf0e10cSrcweir     ::std::vector< Reference< chart2::XRegressionCurve > > aResult;
638cdf0e10cSrcweir     ::std::vector< Reference< chart2::XDataSeries > > aSeries( DiagramHelper::getDataSeriesFromDiagram( xDiagram ));
639cdf0e10cSrcweir     for( ::std::vector< Reference< chart2::XDataSeries > >::iterator aIt( aSeries.begin());
640cdf0e10cSrcweir          aIt != aSeries.end(); ++aIt )
641cdf0e10cSrcweir     {
642cdf0e10cSrcweir         Reference< chart2::XRegressionCurveContainer > xCurveCnt( *aIt, uno::UNO_QUERY );
643cdf0e10cSrcweir         if( xCurveCnt.is())
644cdf0e10cSrcweir         {
645cdf0e10cSrcweir             uno::Sequence< uno::Reference< chart2::XRegressionCurve > > aCurves(
646cdf0e10cSrcweir                 xCurveCnt->getRegressionCurves());
647cdf0e10cSrcweir             for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
648cdf0e10cSrcweir             {
649cdf0e10cSrcweir                 if( ! isMeanValueLine( aCurves[i] ))
650cdf0e10cSrcweir                     aResult.push_back( aCurves[i] );
651cdf0e10cSrcweir             }
652cdf0e10cSrcweir         }
653cdf0e10cSrcweir     }
654cdf0e10cSrcweir 
655cdf0e10cSrcweir     return aResult;
656cdf0e10cSrcweir }
657cdf0e10cSrcweir 
resetEquationPosition(const Reference<chart2::XRegressionCurve> & xCurve)658cdf0e10cSrcweir void RegressionCurveHelper::resetEquationPosition(
659cdf0e10cSrcweir     const Reference< chart2::XRegressionCurve > & xCurve )
660cdf0e10cSrcweir {
661cdf0e10cSrcweir     if( xCurve.is())
662cdf0e10cSrcweir     {
663cdf0e10cSrcweir         try
664cdf0e10cSrcweir         {
665cdf0e10cSrcweir             const OUString aPosPropertyName( RTL_CONSTASCII_USTRINGPARAM( "RelativePosition" ));
666cdf0e10cSrcweir             Reference< beans::XPropertySet > xEqProp( xCurve->getEquationProperties()); // since m233: , uno::UNO_SET_THROW );
667cdf0e10cSrcweir             if( xEqProp->getPropertyValue( aPosPropertyName ).hasValue())
668cdf0e10cSrcweir                 xEqProp->setPropertyValue( aPosPropertyName, uno::Any());
669cdf0e10cSrcweir         }
670cdf0e10cSrcweir         catch( const uno::Exception & ex )
671cdf0e10cSrcweir         {
672cdf0e10cSrcweir             ASSERT_EXCEPTION( ex );
673cdf0e10cSrcweir         }
674cdf0e10cSrcweir     }
675cdf0e10cSrcweir }
676cdf0e10cSrcweir 
getRegressionCurveIndex(const Reference<chart2::XRegressionCurveContainer> & xContainer,const Reference<chart2::XRegressionCurve> & xCurve)677cdf0e10cSrcweir sal_Int32 RegressionCurveHelper::getRegressionCurveIndex(
678cdf0e10cSrcweir     const Reference< chart2::XRegressionCurveContainer > & xContainer,
679cdf0e10cSrcweir     const Reference< chart2::XRegressionCurve > & xCurve )
680cdf0e10cSrcweir {
681cdf0e10cSrcweir     if( xContainer.is())
682cdf0e10cSrcweir     {
683cdf0e10cSrcweir         uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
684cdf0e10cSrcweir             xContainer->getRegressionCurves());
685cdf0e10cSrcweir         for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
686cdf0e10cSrcweir         {
687cdf0e10cSrcweir             if( xCurve == aCurves[i] )
688cdf0e10cSrcweir                 return i;
689cdf0e10cSrcweir         }
690cdf0e10cSrcweir     }
691cdf0e10cSrcweir     return -1;
692cdf0e10cSrcweir }
693cdf0e10cSrcweir 
hasEquation(const Reference<chart2::XRegressionCurve> & xCurve)694cdf0e10cSrcweir bool RegressionCurveHelper::hasEquation( const Reference< chart2::XRegressionCurve > & xCurve )
695cdf0e10cSrcweir {
696cdf0e10cSrcweir     bool bHasEquation = false;
697cdf0e10cSrcweir     if( xCurve.is())
698cdf0e10cSrcweir     {
699cdf0e10cSrcweir         uno::Reference< beans::XPropertySet > xEquationProp( xCurve->getEquationProperties());
700cdf0e10cSrcweir         if( xEquationProp.is())
701cdf0e10cSrcweir         {
702cdf0e10cSrcweir             bool bShowEquation = false;
703cdf0e10cSrcweir             bool bShowCoefficient = false;
704cdf0e10cSrcweir             xEquationProp->getPropertyValue( C2U("ShowEquation")) >>= bShowEquation;
705cdf0e10cSrcweir             xEquationProp->getPropertyValue( C2U("ShowCorrelationCoefficient")) >>= bShowCoefficient;
706cdf0e10cSrcweir             bHasEquation = bShowEquation || bShowCoefficient;
707cdf0e10cSrcweir         }
708cdf0e10cSrcweir     }
709cdf0e10cSrcweir     return bHasEquation;
710cdf0e10cSrcweir }
711cdf0e10cSrcweir 
712cdf0e10cSrcweir //.............................................................................
713cdf0e10cSrcweir } //namespace chart
714cdf0e10cSrcweir //.............................................................................
715