chart2/source/inc/ChartTypeTemplate.hxx                 |    5 
 chart2/source/model/template/AreaChartTypeTemplate.cxx  |    3 
 chart2/source/model/template/AreaChartTypeTemplate.hxx  |    2 
 chart2/source/model/template/BarChartTypeTemplate.cxx   |    2 
 chart2/source/model/template/BarChartTypeTemplate.hxx   |    2 
 chart2/source/model/template/ChartTypeTemplate.cxx      |   88 +++++++++-------
 chart2/source/model/template/PieChartTypeTemplate.cxx   |   12 +-
 chart2/source/model/template/PieChartTypeTemplate.hxx   |    2 
 chart2/source/model/template/StockChartTypeTemplate.cxx |    2 
 chart2/source/model/template/StockChartTypeTemplate.hxx |    2 
 10 files changed, 70 insertions(+), 50 deletions(-)

New commits:
commit ea6cbf9e42c772e0cb8814142dc8a0eeae14e2fa
Author:     Noel Grandin <noelgran...@gmail.com>
AuthorDate: Sun Jan 23 16:45:27 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Sun Jan 23 20:20:12 2022 +0100

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

diff --git a/chart2/source/inc/ChartTypeTemplate.hxx 
b/chart2/source/inc/ChartTypeTemplate.hxx
index 2bcd1f256515..e4484981895a 100644
--- a/chart2/source/inc/ChartTypeTemplate.hxx
+++ b/chart2/source/inc/ChartTypeTemplate.hxx
@@ -37,6 +37,7 @@ namespace com::sun::star::uno { class XComponentContext; }
 
 namespace chart
 {
+class BaseCoordinateSystem;
 class ChartType;
 class Diagram;
 class DataInterpreter;
@@ -111,7 +112,7 @@ public:
         ::sal_Int32 nSeriesIndex,
         ::sal_Int32 nSeriesCount );
     virtual void resetStyles(
-        const css::uno::Reference< css::chart2::XDiagram >& xDiagram );
+        const rtl::Reference< ::chart::Diagram >& xDiagram );
 
     /// @throws css::uno::RuntimeException
     void applyStyles(
@@ -215,6 +216,8 @@ public:
      */
     void createAxes(
         const css::uno::Sequence< css::uno::Reference< 
css::chart2::XCoordinateSystem > > & rCoordSys );
+    void createAxes(
+        const std::vector< rtl::Reference< ::chart::BaseCoordinateSystem > > & 
rCoordSys );
 
     /** Give the number of requested axis per dimension here.  Default is one
         axis for each dimension
diff --git a/chart2/source/model/template/AreaChartTypeTemplate.cxx 
b/chart2/source/model/template/AreaChartTypeTemplate.cxx
index f72f610f24ae..5b6ef6c4d0d2 100644
--- a/chart2/source/model/template/AreaChartTypeTemplate.cxx
+++ b/chart2/source/model/template/AreaChartTypeTemplate.cxx
@@ -20,6 +20,7 @@
 #include "AreaChartTypeTemplate.hxx"
 #include "AreaChartType.hxx"
 #include <servicenames_charttypes.hxx>
+#include <Diagram.hxx>
 #include <DiagramHelper.hxx>
 #include <DataSeriesHelper.hxx>
 #include <PropertyHelper.hxx>
@@ -187,7 +188,7 @@ void AreaChartTypeTemplate::applyStyle(
     DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, 
"BorderStyle", uno::Any( drawing::LineStyle_NONE ) );
 }
 
-void AreaChartTypeTemplate::resetStyles( const Reference< chart2::XDiagram >& 
xDiagram )
+void AreaChartTypeTemplate::resetStyles( const rtl::Reference< 
::chart::Diagram >& xDiagram )
 {
     ChartTypeTemplate::resetStyles( xDiagram );
     std::vector< Reference< chart2::XDataSeries > > aSeriesVec(
diff --git a/chart2/source/model/template/AreaChartTypeTemplate.hxx 
b/chart2/source/model/template/AreaChartTypeTemplate.hxx
index e288fd234340..fe2d679ec81c 100644
--- a/chart2/source/model/template/AreaChartTypeTemplate.hxx
+++ b/chart2/source/model/template/AreaChartTypeTemplate.hxx
@@ -65,7 +65,7 @@ protected:
         ::sal_Int32 nSeriesIndex,
         ::sal_Int32 nSeriesCount ) override;
     virtual void resetStyles(
-        const css::uno::Reference< css::chart2::XDiagram >& xDiagram ) 
override;
+        const rtl::Reference< ::chart::Diagram >& xDiagram ) override;
 
     // ____ ChartTypeTemplate ____
     virtual rtl::Reference< ::chart::ChartType >
diff --git a/chart2/source/model/template/BarChartTypeTemplate.cxx 
b/chart2/source/model/template/BarChartTypeTemplate.cxx
index 266c07434319..947df608c78b 100644
--- a/chart2/source/model/template/BarChartTypeTemplate.cxx
+++ b/chart2/source/model/template/BarChartTypeTemplate.cxx
@@ -262,7 +262,7 @@ void BarChartTypeTemplate::applyStyle(
 }
 
 void BarChartTypeTemplate::resetStyles(
-    const Reference< chart2::XDiagram >& xDiagram )
+    const rtl::Reference< ::chart::Diagram >& xDiagram )
 {
     ChartTypeTemplate::resetStyles( xDiagram );
     std::vector< Reference< chart2::XDataSeries > > aSeriesVec(
diff --git a/chart2/source/model/template/BarChartTypeTemplate.hxx 
b/chart2/source/model/template/BarChartTypeTemplate.hxx
index 4364743082fe..af6e1096a7f1 100644
--- a/chart2/source/model/template/BarChartTypeTemplate.hxx
+++ b/chart2/source/model/template/BarChartTypeTemplate.hxx
@@ -75,7 +75,7 @@ protected:
         ::sal_Int32 nSeriesIndex,
         ::sal_Int32 nSeriesCount ) override;
     virtual void resetStyles(
-        const css::uno::Reference< css::chart2::XDiagram >& xDiagram ) 
override;
+        const rtl::Reference< ::chart::Diagram >& xDiagram ) override;
 
     // ____ ChartTypeTemplate ____
     virtual rtl::Reference< ::chart::ChartType >
diff --git a/chart2/source/model/template/ChartTypeTemplate.cxx 
b/chart2/source/model/template/ChartTypeTemplate.cxx
index a2451a430b3d..c1d91453016b 100644
--- a/chart2/source/model/template/ChartTypeTemplate.cxx
+++ b/chart2/source/model/template/ChartTypeTemplate.cxx
@@ -412,7 +412,7 @@ void ChartTypeTemplate::applyStyles( const Reference< 
chart2::XDiagram >& xDiagr
     lcl_ensureCorrectMissingValueTreatment( xDiagram, getChartTypeForIndex( 0 
) );
 }
 
-void ChartTypeTemplate::resetStyles( const Reference< chart2::XDiagram >& 
xDiagram )
+void ChartTypeTemplate::resetStyles( const rtl::Reference< ::chart::Diagram >& 
xDiagram )
 {
     // reset number format if we had percent stacking on
     bool bPercent = (getStackMode(0) == StackMode::YStackedPercent);
@@ -435,49 +435,32 @@ void ChartTypeTemplate::resetStyles( const Reference< 
chart2::XDiagram >& xDiagr
     }
 
     //reset label placement if default
+    for( rtl::Reference< BaseCoordinateSystem > const & xCooSys : 
xDiagram->getBaseCoordinateSystems() )
     {
-        uno::Reference< XCoordinateSystemContainer > xCooSysContainer( 
xDiagram, uno::UNO_QUERY );
-        if( xCooSysContainer.is() )
+        //iterate through all chart types in the current coordinate system
+        for( rtl::Reference< ChartType > const & xChartType : 
xCooSys->getChartTypes2() )
         {
-            const uno::Sequence< uno::Reference< XCoordinateSystem > > 
aCooSysList( xCooSysContainer->getCoordinateSystems() );
-            for( uno::Reference< XCoordinateSystem > const & xCooSys : 
aCooSysList )
+            //iterate through all series in this chart type
+            const uno::Sequence< uno::Reference< XDataSeries > > aSeriesList( 
xChartType->getDataSeries() );
+            for( Reference< XDataSeries > const & xSeries : aSeriesList )
             {
-                //iterate through all chart types in the current coordinate 
system
-                uno::Reference< XChartTypeContainer > xChartTypeContainer( 
xCooSys, uno::UNO_QUERY );
-                OSL_ASSERT( xChartTypeContainer.is());
-                if( !xChartTypeContainer.is() )
+                Reference< beans::XPropertySet > xSeriesProp( xSeries, 
uno::UNO_QUERY );
+                if(!xSeries.is() || !xSeriesProp.is() )
                     continue;
-                const uno::Sequence< uno::Reference< XChartType > > 
aChartTypeList( xChartTypeContainer->getChartTypes() );
-                for( uno::Reference< XChartType > const & xChartType : 
aChartTypeList )
-                {
-                    //iterate through all series in this chart type
-                    uno::Reference< XDataSeriesContainer > 
xDataSeriesContainer( xChartType, uno::UNO_QUERY );
-                    OSL_ASSERT( xDataSeriesContainer.is());
-                    if( !xDataSeriesContainer.is() )
-                        continue;
-
-                    const uno::Sequence< uno::Reference< XDataSeries > > 
aSeriesList( xDataSeriesContainer->getDataSeries() );
-                    for( Reference< XDataSeries > const & xSeries : 
aSeriesList )
-                    {
-                        Reference< beans::XPropertySet > xSeriesProp( xSeries, 
uno::UNO_QUERY );
-                        if(!xSeries.is() || !xSeriesProp.is() )
-                            continue;
 
-                        uno::Sequence < sal_Int32 > aAvailablePlacements( 
ChartTypeHelper::getSupportedLabelPlacements(
-                            xChartType, isSwapXAndY(), xSeries ) );
-                        if(!aAvailablePlacements.hasElements())
-                            continue;
+                uno::Sequence < sal_Int32 > aAvailablePlacements( 
ChartTypeHelper::getSupportedLabelPlacements(
+                    xChartType, isSwapXAndY(), xSeries ) );
+                if(!aAvailablePlacements.hasElements())
+                    continue;
 
-                        sal_Int32 nDefaultPlacement = aAvailablePlacements[0];
+                sal_Int32 nDefaultPlacement = aAvailablePlacements[0];
 
-                        lcl_resetLabelPlacementIfDefault( xSeriesProp, 
nDefaultPlacement );
+                lcl_resetLabelPlacementIfDefault( xSeriesProp, 
nDefaultPlacement );
 
-                        uno::Sequence< sal_Int32 > 
aAttributedDataPointIndexList;
-                        if( xSeriesProp->getPropertyValue( 
"AttributedDataPoints" ) >>= aAttributedDataPointIndexList )
-                            for(sal_Int32 
nN=aAttributedDataPointIndexList.getLength();nN--;)
-                                lcl_resetLabelPlacementIfDefault( 
xSeries->getDataPointByIndex(aAttributedDataPointIndexList[nN]), 
nDefaultPlacement );
-                    }
-                }
+                uno::Sequence< sal_Int32 > aAttributedDataPointIndexList;
+                if( xSeriesProp->getPropertyValue( "AttributedDataPoints" ) 
>>= aAttributedDataPointIndexList )
+                    for(sal_Int32 
nN=aAttributedDataPointIndexList.getLength();nN--;)
+                        lcl_resetLabelPlacementIfDefault( 
xSeries->getDataPointByIndex(aAttributedDataPointIndexList[nN]), 
nDefaultPlacement );
             }
         }
     }
@@ -686,6 +669,39 @@ void ChartTypeTemplate::createAxes(
     }
 }
 
+void ChartTypeTemplate::createAxes(
+    const std::vector< rtl::Reference< BaseCoordinateSystem > > & rCoordSys )
+{
+    //create missing axes
+    if( rCoordSys.empty() )
+        return;
+
+    rtl::Reference< BaseCoordinateSystem > xCooSys( rCoordSys[0] );
+    if(!xCooSys.is())
+        return;
+
+    //create main axis in first coordinate system
+    sal_Int32 nDimCount = xCooSys->getDimension();
+    sal_Int32 nDim=0;
+    for( nDim=0; nDim<nDimCount; ++nDim )
+    {
+        sal_Int32 nAxisCount = getAxisCountByDimension( nDim );
+        if( nDim == 1 &&
+            nAxisCount < 2 && AxisHelper::isSecondaryYAxisNeeded( xCooSys ))
+            nAxisCount = 2;
+        for( sal_Int32 nAxisIndex = 0; nAxisIndex < nAxisCount; ++nAxisIndex )
+        {
+            Reference< XAxis > xAxis = AxisHelper::getAxis( nDim, nAxisIndex, 
xCooSys );
+            if( !xAxis.is())
+            {
+                // create and add axis
+                xAxis.set( AxisHelper::createAxis(
+                               nDim, nAxisIndex, xCooSys, 
GetComponentContext() ));
+            }
+        }
+    }
+}
+
 void ChartTypeTemplate::adaptAxes(
     const Sequence< Reference< XCoordinateSystem > > & rCoordSys )
 {
diff --git a/chart2/source/model/template/PieChartTypeTemplate.cxx 
b/chart2/source/model/template/PieChartTypeTemplate.cxx
index 320d41f9227a..5d8eef9da195 100644
--- a/chart2/source/model/template/PieChartTypeTemplate.cxx
+++ b/chart2/source/model/template/PieChartTypeTemplate.cxx
@@ -19,6 +19,7 @@
 
 #include "PieChartTypeTemplate.hxx"
 #include "PieChartType.hxx"
+#include <BaseCoordinateSystem.hxx>
 #include <CommonConverters.hxx>
 #include <ChartType.hxx>
 #include <Diagram.hxx>
@@ -540,17 +541,16 @@ void PieChartTypeTemplate::applyStyle(
     }
 }
 
-void PieChartTypeTemplate::resetStyles( const Reference< chart2::XDiagram >& 
xDiagram )
+void PieChartTypeTemplate::resetStyles( const rtl::Reference< ::chart::Diagram 
>& xDiagram )
 {
     // reset axes and grids
-    Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xDiagram, 
uno::UNO_QUERY );
-    if( xCooSysCnt.is())
+    if( xDiagram.is())
     {
-        const Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( 
xCooSysCnt->getCoordinateSystems());
+        const std::vector< rtl::Reference< BaseCoordinateSystem > > 
aCooSysSeq( xDiagram->getBaseCoordinateSystems());
         ChartTypeTemplate::createAxes( aCooSysSeq );
 
         //reset scale orientation
-        for( Reference< chart2::XCoordinateSystem > const & coords : 
aCooSysSeq )
+        for( rtl::Reference< BaseCoordinateSystem > const & coords : 
aCooSysSeq )
         {
             try
             {
@@ -601,7 +601,7 @@ void PieChartTypeTemplate::resetStyles( const Reference< 
chart2::XDiagram >& xDi
     }
 
     //reset scene properties
-    ThreeDHelper::setDefaultRotation( uno::Reference< beans::XPropertySet >( 
xDiagram, uno::UNO_QUERY ), false );
+    ThreeDHelper::setDefaultRotation( xDiagram, false );
 }
 
 // ____ XChartTypeTemplate ____
diff --git a/chart2/source/model/template/PieChartTypeTemplate.hxx 
b/chart2/source/model/template/PieChartTypeTemplate.hxx
index 307b0ee23f1d..022acfaed2e9 100644
--- a/chart2/source/model/template/PieChartTypeTemplate.hxx
+++ b/chart2/source/model/template/PieChartTypeTemplate.hxx
@@ -69,7 +69,7 @@ protected:
         ::sal_Int32 nSeriesIndex,
         ::sal_Int32 nSeriesCount ) override;
     virtual void resetStyles(
-        const css::uno::Reference< css::chart2::XDiagram >& xDiagram ) 
override;
+        const rtl::Reference< ::chart::Diagram >& xDiagram ) override;
 
     // ____ ChartTypeTemplate ____
     virtual sal_Int32 getDimension() const override;
diff --git a/chart2/source/model/template/StockChartTypeTemplate.cxx 
b/chart2/source/model/template/StockChartTypeTemplate.cxx
index afacb1c3b633..2daad8200977 100644
--- a/chart2/source/model/template/StockChartTypeTemplate.cxx
+++ b/chart2/source/model/template/StockChartTypeTemplate.cxx
@@ -234,7 +234,7 @@ void StockChartTypeTemplate::applyStyle(
 }
 
 void StockChartTypeTemplate::resetStyles(
-    const Reference< chart2::XDiagram >& xDiagram )
+    const rtl::Reference< ::chart::Diagram >& xDiagram )
 {
     ChartTypeTemplate::resetStyles( xDiagram );
     if( getDimension() == 3 )
diff --git a/chart2/source/model/template/StockChartTypeTemplate.hxx 
b/chart2/source/model/template/StockChartTypeTemplate.hxx
index 5ea72f65fb8d..fe7ba2272680 100644
--- a/chart2/source/model/template/StockChartTypeTemplate.hxx
+++ b/chart2/source/model/template/StockChartTypeTemplate.hxx
@@ -83,7 +83,7 @@ protected:
         ::sal_Int32 nSeriesIndex,
         ::sal_Int32 nSeriesCount ) override;
     virtual void resetStyles(
-        const css::uno::Reference< css::chart2::XDiagram >& xDiagram ) 
override;
+        const rtl::Reference< ::chart::Diagram >& xDiagram ) override;
 
     // ChartTypeTemplate
     virtual sal_Int32 getAxisCountByDimension( sal_Int32 nDimension ) override;

Reply via email to