chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx  |    
5 
 chart2/source/controller/dialogs/ObjectNameProvider.cxx                  |   
31 -
 chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx |    
1 
 chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx      |    
5 
 chart2/source/controller/main/ChartController_Insert.cxx                 |    
9 
 chart2/source/controller/main/ChartController_Properties.cxx             |    
1 
 chart2/source/controller/main/ChartController_Tools.cxx                  |    
2 
 chart2/source/controller/main/ChartController_Window.cxx                 |    
5 
 chart2/source/controller/sidebar/ChartSeriesPanel.cxx                    |    
1 
 chart2/source/inc/RegressionCurveHelper.hxx                              |   
53 +
 chart2/source/tools/RegressionCurveHelper.cxx                            |  
307 +++++++---
 11 files changed, 310 insertions(+), 110 deletions(-)

New commits:
commit 9706ddb47c99e1508a1e169225e6dde7b2eb3d0d
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Mon Jan 31 19:20:10 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Tue Feb 1 08:28:02 2022 +0100

    use more concrete types in chart2, RegressionCurveModel
    
    Change-Id: I844238da0ce0ce4aea308c652c341efa540149a2
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129234
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git 
a/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx 
b/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx
index bc83ba60df87..b2a54ecac804 100644
--- a/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx
+++ b/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx
@@ -21,6 +21,7 @@
 #include "WrappedSeriesOrDiagramProperty.hxx"
 #include <FastPropertyIdRanges.hxx>
 #include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <ErrorBar.hxx>
 #include <StatisticsHelper.hxx>
 #include <unonames.hxx>
@@ -906,7 +907,7 @@ Reference< beans::XPropertySet > 
WrappedStatisticPropertySetProperty::getValueFr
     {
         case PROPERTY_SET_TYPE_REGRESSION:
             if( xRegCnt.is() )
-                xResult.set( 
RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCnt ), uno::UNO_QUERY 
);
+                xResult = 
RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCnt );
             break;
         case PROPERTY_SET_TYPE_ERROR_BAR:
             if( xSeriesPropertySet.is())
@@ -914,7 +915,7 @@ Reference< beans::XPropertySet > 
WrappedStatisticPropertySetProperty::getValueFr
             break;
         case PROPERTY_SET_TYPE_MEAN_VALUE:
             if( xRegCnt.is() )
-                xResult.set( RegressionCurveHelper::getMeanValueLine( xRegCnt 
), uno::UNO_QUERY );
+                xResult = RegressionCurveHelper::getMeanValueLine( xRegCnt );
             break;
     }
 
diff --git a/chart2/source/controller/dialogs/ObjectNameProvider.cxx 
b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
index e9d1a7a97692..12fdad6e874d 100644
--- a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
+++ b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
@@ -38,6 +38,7 @@
 #include <NumberFormatterWrapper.hxx>
 #include <RegressionCurveHelper.hxx>
 #include <BaseCoordinateSystem.hxx>
+#include <RegressionCurveModel.hxx>
 #include <rtl/math.hxx>
 #include <rtl/ustring.hxx>
 #include <vcl/settings.hxx>
@@ -559,7 +560,7 @@ OUString ObjectNameProvider::getHelpText( const OUString& 
rObjectCID, const rtl:
             if( xSeries.is())
             {
                 sal_Int32 nCurveIndex = 
ObjectIdentifier::getIndexFromParticleOrCID( rObjectCID );
-                Reference< chart2::XRegressionCurve > xCurve( 
RegressionCurveHelper::getRegressionCurveAtIndex(xSeries, nCurveIndex) );
+                rtl::Reference< RegressionCurveModel > xCurve = 
RegressionCurveHelper::getRegressionCurveAtIndex(xSeries, nCurveIndex);
                 if( xCurve.is())
                 {
                     try
@@ -575,23 +576,19 @@ OUString ObjectNameProvider::getHelpText( const OUString& 
rObjectCID, const rtl:
                         const OUString& aNumDecimalSep = 
rLocaleDataWrapper.getNumDecimalSep();
                         sal_Unicode cDecSeparator = aNumDecimalSep[0];
 
-                        uno::Reference< beans::XPropertySet > xProperties( 
xCurve, uno::UNO_QUERY );
-                        if ( xProperties.is())
+                        xCurve->getPropertyValue( "PolynomialDegree") >>= 
aDegree;
+                        xCurve->getPropertyValue( "MovingAveragePeriod") >>= 
aPeriod;
+                        xCurve->getPropertyValue( "MovingAverageType") >>= 
aMovingType;
+                        xCurve->getPropertyValue( "ForceIntercept") >>= 
bForceIntercept;
+                        if (bForceIntercept)
+                                xCurve->getPropertyValue( "InterceptValue") 
>>= aInterceptValue;
+                        uno::Reference< beans::XPropertySet > xEqProp( 
xCurve->getEquationProperties());
+                        if( xEqProp.is())
                         {
-                                xProperties->getPropertyValue( 
"PolynomialDegree") >>= aDegree;
-                                xProperties->getPropertyValue( 
"MovingAveragePeriod") >>= aPeriod;
-                                xProperties->getPropertyValue( 
"MovingAverageType") >>= aMovingType;
-                                xProperties->getPropertyValue( 
"ForceIntercept") >>= bForceIntercept;
-                                if (bForceIntercept)
-                                        xProperties->getPropertyValue( 
"InterceptValue") >>= aInterceptValue;
-                                uno::Reference< beans::XPropertySet > xEqProp( 
xCurve->getEquationProperties());
-                                if( xEqProp.is())
-                                {
-                                    if ( !(xEqProp->getPropertyValue( "XName") 
>>= aXName) )
-                                        aXName = "x";
-                                    if ( !(xEqProp->getPropertyValue( "YName") 
>>= aYName) )
-                                        aYName = "f(x)";
-                                }
+                            if ( !(xEqProp->getPropertyValue( "XName") >>= 
aXName) )
+                                aXName = "x";
+                            if ( !(xEqProp->getPropertyValue( "YName") >>= 
aYName) )
+                                aYName = "f(x)";
                         }
                         xCalculator->setRegressionProperties(aDegree, 
bForceIntercept, aInterceptValue, 2, aMovingType);
                         xCalculator->setXYNames ( aXName, aYName );
diff --git 
a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx
index c932278d5dfb..5683b468c588 100644
--- a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <RegressionCurveItemConverter.hxx>
 #include "SchWhichPairs.hxx"
 #include <GraphicPropertyItemConverter.hxx>
diff --git 
a/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx
index 681dd81ef56c..12cb196592d5 100644
--- a/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx
@@ -20,6 +20,7 @@
 #include <StatisticsItemConverter.hxx>
 #include "SchWhichPairs.hxx"
 #include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <ErrorBar.hxx>
 #include <StatisticsHelper.hxx>
 #include <ChartModel.hxx>
@@ -118,8 +119,8 @@ uno::Reference< beans::XPropertySet > 
lcl_getEquationProperties(
     if( bEquationExists )
     {
         uno::Reference< chart2::XRegressionCurveContainer > xRegCnt( 
xSeriesPropSet, uno::UNO_QUERY );
-        uno::Reference< chart2::XRegressionCurve > xCurve(
-            ::chart::RegressionCurveHelper::getFirstCurveNotMeanValueLine( 
xRegCnt ));
+        rtl::Reference< ::chart::RegressionCurveModel > xCurve =
+            ::chart::RegressionCurveHelper::getFirstCurveNotMeanValueLine( 
xRegCnt );
         if( xCurve.is())
         {
             return xCurve->getEquationProperties();
diff --git a/chart2/source/controller/main/ChartController_Insert.cxx 
b/chart2/source/controller/main/ChartController_Insert.cxx
index 51bc99bab708..00defbc33582 100644
--- a/chart2/source/controller/main/ChartController_Insert.cxx
+++ b/chart2/source/controller/main/ChartController_Insert.cxx
@@ -53,6 +53,7 @@
 #include <ObjectNameProvider.hxx>
 #include <Legend.hxx>
 #include <LegendHelper.hxx>
+#include <RegressionCurveModel.hxx>
 
 #include <com/sun/star/chart2/XRegressionCurve.hpp>
 #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
@@ -361,18 +362,16 @@ void ChartController::executeDispatch_InsertTrendline()
             ActionDescriptionProvider::ActionType::Insert, SchResId( 
STR_OBJECT_CURVE )),
         m_xUndoManager );
 
-    uno::Reference< chart2::XRegressionCurve > xCurve =
+    rtl::Reference< RegressionCurveModel > xCurve =
         RegressionCurveHelper::addRegressionCurve(
             SvxChartRegress::Linear,
             xRegressionCurveContainer );
 
-    uno::Reference< beans::XPropertySet > xProperties( xCurve, uno::UNO_QUERY 
);
-
-    if( !xProperties.is())
+    if( !xCurve.is())
         return;
 
     wrapper::RegressionCurveItemConverter aItemConverter(
-        xProperties, xRegressionCurveContainer, 
m_pDrawModelWrapper->getSdrModel().GetItemPool(),
+        xCurve, xRegressionCurveContainer, 
m_pDrawModelWrapper->getSdrModel().GetItemPool(),
         m_pDrawModelWrapper->getSdrModel(),
         getChartModel() );
 
diff --git a/chart2/source/controller/main/ChartController_Properties.cxx 
b/chart2/source/controller/main/ChartController_Properties.cxx
index c96abe74ce3e..b094833f317a 100644
--- a/chart2/source/controller/main/ChartController_Properties.cxx
+++ b/chart2/source/controller/main/ChartController_Properties.cxx
@@ -54,6 +54,7 @@
 #include <strings.hrc>
 #include <ReferenceSizeProvider.hxx>
 #include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <com/sun/star/chart2/XChartDocument.hpp>
 #include <com/sun/star/chart2/XDataSeries.hpp>
 #include <com/sun/star/chart2/XRegressionCurveContainer.hpp>
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx 
b/chart2/source/controller/main/ChartController_Tools.cxx
index 9859e816c7d3..dd04d61f0360 100644
--- a/chart2/source/controller/main/ChartController_Tools.cxx
+++ b/chart2/source/controller/main/ChartController_Tools.cxx
@@ -223,7 +223,7 @@ void ChartController::executeDispatch_NewArrangement()
             }
 
             // regression curve equations
-            std::vector< uno::Reference< chart2::XRegressionCurve > > 
aRegressionCurves =
+            std::vector< rtl::Reference< RegressionCurveModel > > 
aRegressionCurves =
                 RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine( 
xDiagram );
 
             // reset equation position
diff --git a/chart2/source/controller/main/ChartController_Window.cxx 
b/chart2/source/controller/main/ChartController_Window.cxx
index e489cf757f77..2e9e599e47e7 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -43,6 +43,7 @@
 #include <RelativePositionHelper.hxx>
 #include <chartview/DrawModelWrapper.hxx>
 #include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <StatisticsHelper.hxx>
 #include <DataSeries.hxx>
 #include <DataSeriesHelper.hxx>
@@ -1045,9 +1046,9 @@ void ChartController::execute_Command( const 
CommandEvent& rCEvt )
                 {
                     bool bIsPoint = ( eObjectType == OBJECTTYPE_DATA_POINT );
                     rtl::Reference< DataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), 
getChartModel() );
-                    Reference< XRegressionCurve > xTrendline = 
RegressionCurveHelper::getFirstCurveNotMeanValueLine( xSeries );
+                    rtl::Reference< RegressionCurveModel > xTrendline = 
RegressionCurveHelper::getFirstCurveNotMeanValueLine( xSeries );
                     bool bHasEquation = RegressionCurveHelper::hasEquation( 
xTrendline );
-                    Reference< XRegressionCurve > xMeanValue = 
RegressionCurveHelper::getMeanValueLine( xSeries );
+                    rtl::Reference< RegressionCurveModel > xMeanValue = 
RegressionCurveHelper::getMeanValueLine( xSeries );
                     bool bHasYErrorBars = StatisticsHelper::hasErrorBars( 
xSeries );
                     bool bHasXErrorBars = StatisticsHelper::hasErrorBars( 
xSeries, false );
                     bool bHasDataLabelsAtSeries = 
DataSeriesHelper::hasDataLabelsAtSeries( xSeries );
diff --git a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx 
b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
index 93e56145b05a..f6ce403a8bc8 100644
--- a/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartSeriesPanel.cxx
@@ -39,6 +39,7 @@
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
 #include <RegressionCurveHelper.hxx>
+#include <RegressionCurveModel.hxx>
 #include <StatisticsHelper.hxx>
 #include <BaseCoordinateSystem.hxx>
 
diff --git a/chart2/source/inc/RegressionCurveHelper.hxx 
b/chart2/source/inc/RegressionCurveHelper.hxx
index 00a70a5aece4..7d7631cbdfc8 100644
--- a/chart2/source/inc/RegressionCurveHelper.hxx
+++ b/chart2/source/inc/RegressionCurveHelper.hxx
@@ -33,26 +33,35 @@ namespace com::sun::star::chart2 { class 
XRegressionCurveContainer; }
 namespace com::sun::star::chart2::data { class XDataSource; }
 namespace com::sun::star::frame { class XModel; }
 namespace chart { class ChartModel; }
+namespace chart { class DataSeries; }
 namespace chart { class Diagram; }
+namespace chart { class RegressionCurveModel; }
 
 namespace chart::RegressionCurveHelper
 {
     /// returns a model mean-value line
-    css::uno::Reference<css::chart2::XRegressionCurve> createMeanValueLine();
+    rtl::Reference<::chart::RegressionCurveModel> createMeanValueLine();
 
     /// returns a model regression curve
-    css::uno::Reference<css::chart2::XRegressionCurve>
+    rtl::Reference<::chart::RegressionCurveModel>
         createRegressionCurveByServiceName( std::u16string_view aServiceName );
 
     OOO_DLLPUBLIC_CHARTTOOLS bool hasMeanValueLine(
         const css::uno::Reference<css::chart2::XRegressionCurveContainer> & 
xRegCnt );
+    OOO_DLLPUBLIC_CHARTTOOLS bool hasMeanValueLine(
+        const rtl::Reference<::chart::DataSeries> & xRegCnt );
 
     OOO_DLLPUBLIC_CHARTTOOLS bool isMeanValueLine(
         const css::uno::Reference<css::chart2::XRegressionCurve> & xRegCurve );
+    OOO_DLLPUBLIC_CHARTTOOLS bool isMeanValueLine(
+        const rtl::Reference<::chart::RegressionCurveModel> & xRegCurve );
 
-    OOO_DLLPUBLIC_CHARTTOOLS css::uno::Reference<css::chart2::XRegressionCurve>
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
         getMeanValueLine(
             const css::uno::Reference<css::chart2::XRegressionCurveContainer> 
& xRegCnt );
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
+        getMeanValueLine(
+            const rtl::Reference<::chart::DataSeries> & xRegCnt );
 
     /** creates a mean-value line and adds it to the container.
 
@@ -62,22 +71,30 @@ namespace chart::RegressionCurveHelper
     OOO_DLLPUBLIC_CHARTTOOLS void addMeanValueLine(
         css::uno::Reference<css::chart2::XRegressionCurveContainer> const & 
xRegCnt,
         const css::uno::Reference<css::beans::XPropertySet>& xSeriesProp );
+    OOO_DLLPUBLIC_CHARTTOOLS void addMeanValueLine(
+        rtl::Reference<::chart::DataSeries> const & xRegCnt,
+        const css::uno::Reference<css::beans::XPropertySet>& xSeriesProp );
 
     OOO_DLLPUBLIC_CHARTTOOLS void removeMeanValueLine(
         css::uno::Reference<css::chart2::XRegressionCurveContainer> const & 
xRegCnt );
+    OOO_DLLPUBLIC_CHARTTOOLS void removeMeanValueLine(
+        rtl::Reference<::chart::DataSeries> const & xRegCnt );
 
     /** Returns the first regression curve found that is not of type
         mean-value line
      */
-    OOO_DLLPUBLIC_CHARTTOOLS css::uno::Reference<css::chart2::XRegressionCurve>
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
         getFirstCurveNotMeanValueLine(
             const css::uno::Reference<css::chart2::XRegressionCurveContainer>& 
xCurveContainer );
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
+        getFirstCurveNotMeanValueLine(
+            const rtl::Reference<::chart::DataSeries>& xCurveContainer );
 
     /** Returns the regression curve found at the index provided.
      */
-    OOO_DLLPUBLIC_CHARTTOOLS css::uno::Reference<css::chart2::XRegressionCurve>
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
         getRegressionCurveAtIndex(
-            const css::uno::Reference<css::chart2::XRegressionCurveContainer>& 
xCurveContainer,
+            const rtl::Reference<::chart::DataSeries>& xCurveContainer,
             sal_Int32 aIndex);
 
     /** Returns the type of the first regression curve found that is not of 
type
@@ -85,6 +102,8 @@ namespace chart::RegressionCurveHelper
      */
     OOO_DLLPUBLIC_CHARTTOOLS SvxChartRegress 
getFirstRegressTypeNotMeanValueLine(
         const css::uno::Reference<css::chart2::XRegressionCurveContainer>& 
xCurveContainer );
+    OOO_DLLPUBLIC_CHARTTOOLS SvxChartRegress 
getFirstRegressTypeNotMeanValueLine(
+        const rtl::Reference<::chart::DataSeries>& xCurveContainer );
 
     OOO_DLLPUBLIC_CHARTTOOLS SvxChartRegress getRegressionType(
         const css::uno::Reference<css::chart2::XRegressionCurve>& xCurve );
@@ -94,7 +113,7 @@ namespace chart::RegressionCurveHelper
         @param xEquationProperties is set at the new regression curve as
                equation properties if not null
     */
-    OOO_DLLPUBLIC_CHARTTOOLS css::uno::Reference<css::chart2::XRegressionCurve>
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
         addRegressionCurve(
             SvxChartRegress eType,
             css::uno::Reference<css::chart2::XRegressionCurveContainer> const 
& xCurveContainer,
@@ -102,14 +121,22 @@ namespace chart::RegressionCurveHelper
                     css::uno::Reference<css::beans::XPropertySet>(),
             const css::uno::Reference<css::beans::XPropertySet>& 
xEquationProperties =
                     css::uno::Reference<css::beans::XPropertySet>() );
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
+        addRegressionCurve(
+            SvxChartRegress eType,
+            rtl::Reference<::chart::DataSeries> const & xCurveContainer,
+            const css::uno::Reference<css::beans::XPropertySet >& 
xPropertySource =
+                    css::uno::Reference<css::beans::XPropertySet>(),
+            const css::uno::Reference<css::beans::XPropertySet>& 
xEquationProperties =
+                    css::uno::Reference<css::beans::XPropertySet>() );
 
     OOO_DLLPUBLIC_CHARTTOOLS bool removeAllExceptMeanValueLine(
-        css::uno::Reference<css::chart2::XRegressionCurveContainer> const & 
xCurveContainer );
+        rtl::Reference<::chart::DataSeries> const & xCurveContainer );
 
     OOO_DLLPUBLIC_CHARTTOOLS void removeEquations(
-        css::uno::Reference<css::chart2::XRegressionCurveContainer> const & 
xCurveContainer );
+        rtl::Reference<::chart::DataSeries> const & xCurveContainer );
 
-    OOO_DLLPUBLIC_CHARTTOOLS css::uno::Reference<css::chart2::XRegressionCurve>
+    OOO_DLLPUBLIC_CHARTTOOLS rtl::Reference<::chart::RegressionCurveModel>
         changeRegressionCurveType(
             SvxChartRegress eType,
             css::uno::Reference<css::chart2::XRegressionCurveContainer> const 
& xRegressionCurveContainer,
@@ -161,7 +188,7 @@ namespace chart::RegressionCurveHelper
     OOO_DLLPUBLIC_CHARTTOOLS OUString getRegressionCurveSpecificName(
         const css::uno::Reference<css::chart2::XRegressionCurve>& xCurve );
 
-    OOO_DLLPUBLIC_CHARTTOOLS 
std::vector<css::uno::Reference<css::chart2::XRegressionCurve> >
+    OOO_DLLPUBLIC_CHARTTOOLS 
std::vector<rtl::Reference<::chart::RegressionCurveModel> >
         getAllRegressionCurvesNotMeanValueLine(
                 const rtl::Reference<::chart::Diagram>& xDiagram );
 
@@ -170,8 +197,8 @@ namespace chart::RegressionCurveHelper
 
     /// @return the index of the given curve in the given container. -1 if not 
contained
     OOO_DLLPUBLIC_CHARTTOOLS sal_Int32 getRegressionCurveIndex(
-        const css::uno::Reference<css::chart2::XRegressionCurveContainer>& 
xContainer,
-        const css::uno::Reference<css::chart2::XRegressionCurve>& xCurve );
+        const rtl::Reference<::chart::DataSeries>& xContainer,
+        const rtl::Reference<::chart::RegressionCurveModel>& xCurve );
 
     OOO_DLLPUBLIC_CHARTTOOLS bool hasEquation(const 
css::uno::Reference<css::chart2::XRegressionCurve>& xCurve );
 
diff --git a/chart2/source/tools/RegressionCurveHelper.cxx 
b/chart2/source/tools/RegressionCurveHelper.cxx
index f0d57f732092..ce4481ef8cfb 100644
--- a/chart2/source/tools/RegressionCurveHelper.cxx
+++ b/chart2/source/tools/RegressionCurveHelper.cxx
@@ -90,15 +90,15 @@ OUString lcl_getServiceNameForType(SvxChartRegress eType)
 namespace chart
 {
 
-Reference< XRegressionCurve > RegressionCurveHelper::createMeanValueLine()
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::createMeanValueLine()
 {
-    return Reference< XRegressionCurve >( new MeanValueRegressionCurve );
+    return new MeanValueRegressionCurve;
 }
 
-Reference< XRegressionCurve > 
RegressionCurveHelper::createRegressionCurveByServiceName(
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::createRegressionCurveByServiceName(
     std::u16string_view aServiceName )
 {
-    Reference< XRegressionCurve > xResult;
+    rtl::Reference< RegressionCurveModel > xResult;
 
     // todo: use factory methods with service name
     if( aServiceName == u"com.sun.star.chart2.LinearRegressionCurve" )
@@ -265,6 +265,28 @@ bool RegressionCurveHelper::hasMeanValueLine(
     return false;
 }
 
+bool RegressionCurveHelper::hasMeanValueLine(
+    const rtl::Reference< DataSeries > & xRegCnt )
+{
+    if( !xRegCnt.is())
+        return false;
+
+    try
+    {
+        for( rtl::Reference< RegressionCurveModel > const & curve : 
xRegCnt->getRegressionCurves2() )
+        {
+            if( isMeanValueLine( curve ))
+                return true;
+        }
+    }
+    catch( const Exception & )
+    {
+        DBG_UNHANDLED_EXCEPTION("chart2");
+    }
+
+    return false;
+}
+
 bool RegressionCurveHelper::isMeanValueLine(
     const uno::Reference< chart2::XRegressionCurve > & xRegCurve )
 {
@@ -274,7 +296,15 @@ bool RegressionCurveHelper::isMeanValueLine(
             "com.sun.star.chart2.MeanValueRegressionCurve";
 }
 
-uno::Reference< chart2::XRegressionCurve >
+bool RegressionCurveHelper::isMeanValueLine(
+    const rtl::Reference< RegressionCurveModel > & xRegCurve )
+{
+    return xRegCurve.is() &&
+        xRegCurve->getServiceName() ==
+            "com.sun.star.chart2.MeanValueRegressionCurve";
+}
+
+rtl::Reference< RegressionCurveModel >
     RegressionCurveHelper::getMeanValueLine(
         const uno::Reference< chart2::XRegressionCurveContainer > & xRegCnt )
 {
@@ -285,6 +315,29 @@ uno::Reference< chart2::XRegressionCurve >
             const uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
                 xRegCnt->getRegressionCurves());
             for( uno::Reference< XRegressionCurve > const & curve : aCurves )
+            {
+                if( isMeanValueLine( curve ))
+                    return dynamic_cast<RegressionCurveModel*>(curve.get());
+            }
+        }
+        catch( const Exception & )
+        {
+            DBG_UNHANDLED_EXCEPTION("chart2");
+        }
+    }
+
+    return nullptr;
+}
+
+rtl::Reference< RegressionCurveModel >
+    RegressionCurveHelper::getMeanValueLine(
+        const rtl::Reference< DataSeries > & xRegCnt )
+{
+    if( xRegCnt.is())
+    {
+        try
+        {
+            for( rtl::Reference< RegressionCurveModel > const & curve : 
xRegCnt->getRegressionCurves2() )
             {
                 if( isMeanValueLine( curve ))
                     return curve;
@@ -296,7 +349,7 @@ uno::Reference< chart2::XRegressionCurve >
         }
     }
 
-    return uno::Reference< chart2::XRegressionCurve >();
+    return nullptr;
 }
 
 void RegressionCurveHelper::addMeanValueLine(
@@ -322,6 +375,25 @@ void RegressionCurveHelper::addMeanValueLine(
     }
 }
 
+void RegressionCurveHelper::addMeanValueLine(
+    rtl::Reference< DataSeries > const & xRegCnt,
+    const uno::Reference< XPropertySet > & xSeriesProp )
+{
+    if( !xRegCnt.is() ||
+        ::chart::RegressionCurveHelper::hasMeanValueLine( xRegCnt ) )
+        return;
+
+    // todo: use a valid context
+    rtl::Reference< RegressionCurveModel > xCurve( createMeanValueLine() );
+    xRegCnt->addRegressionCurve( xCurve );
+
+    if( xSeriesProp.is())
+    {
+        xCurve->setPropertyValue( "LineColor",
+                                 xSeriesProp->getPropertyValue( "Color"));
+    }
+}
+
 void RegressionCurveHelper::removeMeanValueLine(
     Reference< XRegressionCurveContainer > const & xRegCnt )
 {
@@ -351,13 +423,40 @@ void RegressionCurveHelper::removeMeanValueLine(
     }
 }
 
-uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::addRegressionCurve(
+void RegressionCurveHelper::removeMeanValueLine(
+    rtl::Reference< DataSeries > const & xRegCnt )
+{
+    if( !xRegCnt.is())
+        return;
+
+    try
+    {
+        for( rtl::Reference< RegressionCurveModel > const & curve : 
xRegCnt->getRegressionCurves2() )
+        {
+            if( isMeanValueLine( curve ))
+            {
+                xRegCnt->removeRegressionCurve( curve );
+                // attention: the iterator i has become invalid now
+
+                // note: assume that there is only one mean-value curve
+                // to remove multiple mean-value curves remove the break
+                break;
+            }
+        }
+    }
+    catch( const Exception & )
+    {
+        DBG_UNHANDLED_EXCEPTION("chart2");
+    }
+}
+
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::addRegressionCurve(
     SvxChartRegress eType,
     uno::Reference< XRegressionCurveContainer > const & 
xRegressionCurveContainer,
     const uno::Reference< beans::XPropertySet >& xPropertySource,
     const uno::Reference< beans::XPropertySet >& xEquationProperties )
 {
-    uno::Reference< chart2::XRegressionCurve > xCurve;
+    rtl::Reference< RegressionCurveModel > xCurve;
 
     if( !xRegressionCurveContainer.is() )
         return xCurve;
@@ -372,24 +471,20 @@ uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::addRegressionC
     if( !aServiceName.isEmpty())
     {
         // todo: use a valid context
-        xCurve.set( createRegressionCurveByServiceName( aServiceName ) );
+        xCurve = createRegressionCurveByServiceName( aServiceName );
 
         if( xEquationProperties.is())
             xCurve->setEquationProperties( xEquationProperties );
 
-        uno::Reference< beans::XPropertySet > xProperties( xCurve, 
uno::UNO_QUERY );
-        if( xProperties.is())
+        if( xPropertySource.is())
+            comphelper::copyProperties( xPropertySource, xCurve );
+        else
         {
-            if( xPropertySource.is())
-                comphelper::copyProperties( xPropertySource, xProperties );
-            else
+            uno::Reference< XPropertySet > xSeriesProp( 
xRegressionCurveContainer, uno::UNO_QUERY );
+            if( xSeriesProp.is())
             {
-                uno::Reference< XPropertySet > xSeriesProp( 
xRegressionCurveContainer, uno::UNO_QUERY );
-                if( xSeriesProp.is())
-                {
-                    xProperties->setPropertyValue( "LineColor",
-                                             xSeriesProp->getPropertyValue( 
"Color"));
-                }
+                xCurve->setPropertyValue( "LineColor",
+                                         xSeriesProp->getPropertyValue( 
"Color"));
             }
         }
     }
@@ -398,67 +493,98 @@ uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::addRegressionC
     return xCurve;
 }
 
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::addRegressionCurve(
+    SvxChartRegress eType,
+    rtl::Reference< DataSeries > const & xRegressionCurveContainer,
+    const uno::Reference< beans::XPropertySet >& xPropertySource,
+    const uno::Reference< beans::XPropertySet >& xEquationProperties )
+{
+    rtl::Reference< RegressionCurveModel > xCurve;
+
+    if( !xRegressionCurveContainer.is() )
+        return xCurve;
+
+    if( eType == SvxChartRegress::NONE )
+    {
+        OSL_FAIL("don't create a regression curve of type none");
+        return xCurve;
+    }
+
+    OUString aServiceName( lcl_getServiceNameForType( eType ));
+    if( !aServiceName.isEmpty())
+    {
+        // todo: use a valid context
+        xCurve = createRegressionCurveByServiceName( aServiceName );
+
+        if( xEquationProperties.is())
+            xCurve->setEquationProperties( xEquationProperties );
+
+        if( xPropertySource.is())
+            comphelper::copyProperties( xPropertySource, xCurve );
+        else
+        {
+            xCurve->setPropertyValue( "LineColor",
+                                     
xRegressionCurveContainer->getPropertyValue( "Color"));
+        }
+    }
+    xRegressionCurveContainer->addRegressionCurve( xCurve );
+
+    return xCurve;
+}
+
 /** removes all regression curves that are not of type mean value
     and returns true, if anything was removed
  */
 bool RegressionCurveHelper::removeAllExceptMeanValueLine(
-    uno::Reference< chart2::XRegressionCurveContainer > const & xRegCnt )
+    rtl::Reference< DataSeries > const & xRegCnt )
 {
+    if( !xRegCnt.is())
+        return false;
+
     bool bRemovedSomething = false;
-    if( xRegCnt.is())
+    try
     {
-        try
+        std::vector< rtl::Reference< RegressionCurveModel > > aCurvesToDelete;
+        for( rtl::Reference< RegressionCurveModel > const & curve : 
xRegCnt->getRegressionCurves2() )
         {
-            const uno::Sequence< uno::Reference< chart2::XRegressionCurve > > 
aCurves(
-                xRegCnt->getRegressionCurves());
-            std::vector< uno::Reference< chart2::XRegressionCurve > > 
aCurvesToDelete;
-            for( uno::Reference< chart2::XRegressionCurve > const & curve : 
aCurves )
-            {
-                if( ! isMeanValueLine( curve ))
-                {
-                    aCurvesToDelete.push_back( curve );
-                }
-            }
-
-            for (auto const& curveToDelete : aCurvesToDelete)
+            if( ! isMeanValueLine( curve ))
             {
-                xRegCnt->removeRegressionCurve(curveToDelete);
-                bRemovedSomething = true;
+                aCurvesToDelete.push_back( curve );
             }
         }
-        catch( const uno::Exception & )
+
+        for (auto const& curveToDelete : aCurvesToDelete)
         {
-            DBG_UNHANDLED_EXCEPTION("chart2");
+            xRegCnt->removeRegressionCurve(curveToDelete);
+            bRemovedSomething = true;
         }
     }
+    catch( const uno::Exception & )
+    {
+        DBG_UNHANDLED_EXCEPTION("chart2");
+    }
     return bRemovedSomething;
 }
 
 void RegressionCurveHelper::removeEquations(
-        uno::Reference< chart2::XRegressionCurveContainer > const & xRegCnt )
+        rtl::Reference< DataSeries > const & xRegCnt )
 {
     if( !xRegCnt.is())
         return;
 
     try
     {
-        const uno::Sequence< uno::Reference< chart2::XRegressionCurve > > 
aCurves(
-            xRegCnt->getRegressionCurves());
-        for( uno::Reference< chart2::XRegressionCurve >  const & curve : 
aCurves )
+        for( rtl::Reference< RegressionCurveModel >  const & curve : 
xRegCnt->getRegressionCurves2() )
         {
             if( !isMeanValueLine( curve ) )
             {
-                uno::Reference< chart2::XRegressionCurve > xRegCurve( curve );
-                if( xRegCurve.is() )
+                uno::Reference< beans::XPropertySet > xEqProp( 
curve->getEquationProperties() ) ;
+                if( xEqProp.is())
                 {
-                    uno::Reference< beans::XPropertySet > xEqProp( 
xRegCurve->getEquationProperties() ) ;
-                    if( xEqProp.is())
-                    {
-                        xEqProp->setPropertyValue( "ShowEquation", uno::Any( 
false ));
-                        xEqProp->setPropertyValue( "XName", uno::Any( 
OUString("x") ));
-                        xEqProp->setPropertyValue( "YName", uno::Any( 
OUString("f(x) ") ));
-                        xEqProp->setPropertyValue( 
"ShowCorrelationCoefficient", uno::Any( false ));
-                    }
+                    xEqProp->setPropertyValue( "ShowEquation", uno::Any( false 
));
+                    xEqProp->setPropertyValue( "XName", uno::Any( 
OUString("x") ));
+                    xEqProp->setPropertyValue( "YName", uno::Any( 
OUString("f(x) ") ));
+                    xEqProp->setPropertyValue( "ShowCorrelationCoefficient", 
uno::Any( false ));
                 }
             }
         }
@@ -469,7 +595,7 @@ void RegressionCurveHelper::removeEquations(
     }
 }
 
-uno::Reference< XRegressionCurve > 
RegressionCurveHelper::changeRegressionCurveType(
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::changeRegressionCurveType(
     SvxChartRegress eType,
     uno::Reference< XRegressionCurveContainer > const & 
xRegressionCurveContainer,
     uno::Reference< XRegressionCurve > const & xRegressionCurve )
@@ -482,7 +608,7 @@ uno::Reference< XRegressionCurve > 
RegressionCurveHelper::changeRegressionCurveT
             xRegressionCurve->getEquationProperties());
 }
 
-uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::getFirstCurveNotMeanValueLine(
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::getFirstCurveNotMeanValueLine(
     const Reference< XRegressionCurveContainer > & xRegCnt )
 {
     if( !xRegCnt.is())
@@ -493,6 +619,30 @@ uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::getFirstCurveN
         const uno::Sequence< uno::Reference< chart2::XRegressionCurve > > 
aCurves(
             xRegCnt->getRegressionCurves());
         for( uno::Reference< chart2::XRegressionCurve > const & curve : 
aCurves )
+        {
+            if( ! isMeanValueLine( curve ))
+            {
+                return dynamic_cast<RegressionCurveModel*>(curve.get());
+            }
+        }
+    }
+    catch( const Exception & )
+    {
+        DBG_UNHANDLED_EXCEPTION("chart2");
+    }
+
+    return nullptr;
+}
+
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::getFirstCurveNotMeanValueLine(
+    const rtl::Reference< DataSeries > & xRegCnt )
+{
+    if( !xRegCnt.is())
+        return nullptr;
+
+    try
+    {
+        for( rtl::Reference< RegressionCurveModel > const & curve : 
xRegCnt->getRegressionCurves2() )
         {
             if( ! isMeanValueLine( curve ))
             {
@@ -508,8 +658,8 @@ uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::getFirstCurveN
     return nullptr;
 }
 
-uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::getRegressionCurveAtIndex(
-    const Reference< XRegressionCurveContainer >& xCurveContainer,
+rtl::Reference< RegressionCurveModel > 
RegressionCurveHelper::getRegressionCurveAtIndex(
+    const rtl::Reference< DataSeries >& xCurveContainer,
     sal_Int32 aIndex )
 {
     if( !xCurveContainer.is())
@@ -517,8 +667,8 @@ uno::Reference< chart2::XRegressionCurve > 
RegressionCurveHelper::getRegressionC
 
     try
     {
-        uno::Sequence< uno::Reference< chart2::XRegressionCurve > > 
aCurves(xCurveContainer->getRegressionCurves());
-        if(0 <= aIndex && aIndex < aCurves.getLength())
+        const std::vector< rtl::Reference< RegressionCurveModel > > 
aCurves(xCurveContainer->getRegressionCurves2());
+        if(0 <= aIndex && aIndex < static_cast<sal_Int32>(aCurves.size()))
         {
             if(!isMeanValueLine(aCurves[aIndex]))
                 return aCurves[aIndex];
@@ -606,6 +756,28 @@ SvxChartRegress 
RegressionCurveHelper::getFirstRegressTypeNotMeanValueLine(
     return eResult;
 }
 
+SvxChartRegress RegressionCurveHelper::getFirstRegressTypeNotMeanValueLine(
+    const rtl::Reference< DataSeries > & xRegCnt )
+{
+    SvxChartRegress eResult = SvxChartRegress::NONE;
+
+    if( xRegCnt.is())
+    {
+        for( rtl::Reference< RegressionCurveModel > const & curve : 
xRegCnt->getRegressionCurves2() )
+        {
+            SvxChartRegress eType = getRegressionType( curve );
+            if( eType != SvxChartRegress::MeanValue &&
+                eType != SvxChartRegress::Unknown )
+            {
+                eResult = eType;
+                break;
+            }
+        }
+    }
+
+    return eResult;
+}
+
 OUString RegressionCurveHelper::getUINameForRegressionCurve( const Reference< 
XRegressionCurve >& xRegressionCurve )
 {
     OUString aResult = getRegressionCurveSpecificName(xRegressionCurve);
@@ -687,16 +859,15 @@ OUString RegressionCurveHelper::getRegressionCurveName( 
const Reference< XRegres
     return aResult;
 }
 
-std::vector< Reference< chart2::XRegressionCurve > >
+std::vector< rtl::Reference< RegressionCurveModel > >
     RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine(
         const rtl::Reference< Diagram > & xDiagram )
 {
-    std::vector< Reference< chart2::XRegressionCurve > > aResult;
+    std::vector< rtl::Reference< RegressionCurveModel > > aResult;
     std::vector< rtl::Reference< DataSeries > > aSeries( 
DiagramHelper::getDataSeriesFromDiagram( xDiagram ));
     for (auto const& elem : aSeries)
     {
-        const uno::Sequence< uno::Reference< chart2::XRegressionCurve > > 
aCurves(elem->getRegressionCurves());
-        for( Reference< XRegressionCurve > const & curve : aCurves )
+        for( rtl::Reference< RegressionCurveModel > const & curve : 
elem->getRegressionCurves2() )
         {
             if( ! isMeanValueLine( curve ))
                 aResult.push_back( curve );
@@ -726,15 +897,15 @@ void RegressionCurveHelper::resetEquationPosition(
 }
 
 sal_Int32 RegressionCurveHelper::getRegressionCurveIndex(
-    const Reference< chart2::XRegressionCurveContainer >& xContainer,
-    const Reference< chart2::XRegressionCurve >& xCurve )
+    const rtl::Reference< DataSeries >& xContainer,
+    const rtl::Reference< RegressionCurveModel >& xCurve )
 {
     if( xContainer.is())
     {
-        uno::Sequence< uno::Reference< XRegressionCurve > > aCurves(
-            xContainer->getRegressionCurves());
+        const std::vector< rtl::Reference< RegressionCurveModel > > & aCurves(
+            xContainer->getRegressionCurves2());
 
-        for( sal_Int32 i = 0; i < aCurves.getLength(); ++i )
+        for( sal_Int32 i = 0; i < static_cast<sal_Int32>(aCurves.size()); ++i )
         {
             if( xCurve == aCurves[i] )
                 return i;

Reply via email to