chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx   |    4 -
 chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx         |   23 
+++++-----
 chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx |   15 
+++---
 chart2/source/controller/dialogs/ChartTypeDialogController.cxx      |   15 
+++---
 chart2/source/controller/dialogs/DataBrowserModel.cxx               |    5 +-
 chart2/source/controller/dialogs/DialogModel.cxx                    |    3 -
 chart2/source/controller/dialogs/DialogModel.hxx                    |    4 +
 chart2/source/controller/dialogs/dlg_CreationWizard.cxx             |    1 
 chart2/source/controller/dialogs/dlg_DataSource.cxx                 |    9 ++-
 chart2/source/controller/dialogs/tp_ChartType.cxx                   |   11 ++--
 chart2/source/controller/dialogs/tp_ChartType.hxx                   |    2 
 chart2/source/controller/dialogs/tp_DataSource.cxx                  |    1 
 chart2/source/controller/dialogs/tp_RangeChooser.cxx                |    3 -
 chart2/source/controller/dialogs/tp_RangeChooser.hxx                |    4 -
 chart2/source/controller/sidebar/ChartTypePanel.cxx                 |   18 
++++---
 chart2/source/controller/sidebar/ChartTypePanel.hxx                 |    3 -
 chart2/source/inc/ChartTypeDialogController.hxx                     |    9 ++-
 chart2/source/inc/ChartTypeTemplateProvider.hxx                     |   11 +---
 chart2/source/inc/DiagramHelper.hxx                                 |    9 ++-
 chart2/source/model/main/ChartModel_Persistence.cxx                 |    4 -
 chart2/source/model/main/Diagram.cxx                                |    5 +-
 chart2/source/tools/DiagramHelper.cxx                               |    9 ++-
 22 files changed, 93 insertions(+), 75 deletions(-)

New commits:
commit 4683eaa6f92db03bd0a6ecd401ded51131db7ae6
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Jan 19 14:07:35 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Jan 19 17:09:21 2022 +0100

    use more concrete types in chart2, ChartTypeTemplate
    
    and return data using a little struct rather than std::pair, to
    make the call sites read a little better.
    
    Change-Id: Ieb6fc24e053f50823789167ed0112aa04a083725
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/128613
    Tested-by: Jenkins
    Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk>

diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx 
b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
index c3245ea30a2f..bc5557b61a17 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
@@ -1193,8 +1193,8 @@ uno::Reference< uno::XInterface > SAL_CALL 
ChartDocumentWrapper::createInstance(
                     rtl::Reference< ::chart::ChartTypeManager > 
xTemplateManager = xChartDoc->getTypeManager();
                     DiagramHelper::tTemplateWithServiceName 
aTemplateWithService(
                         DiagramHelper::getTemplateForDiagram( xDiagram, 
xTemplateManager ));
-                    if( aTemplateWithService.first.is())
-                        aTemplateWithService.first->resetStyles( xDiagram 
);//#i109371#
+                    if( aTemplateWithService.xChartTypeTemplate.is())
+                        aTemplateWithService.xChartTypeTemplate->resetStyles( 
xDiagram );//#i109371#
                     xTemplate->changeDiagram( xDiagram );
                     if( AllSettings::GetMathLayoutRTL() )
                         AxisHelper::setRTLAxisLayout( 
AxisHelper::getCoordinateSystemByIndex( xDiagram, 0 ) );
diff --git a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx 
b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
index c977301a78ac..d9deba9857d4 100644
--- a/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/DiagramWrapper.cxx
@@ -44,6 +44,7 @@
 #include <comphelper/sequence.hxx>
 #include <cppuhelper/supportsservice.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 
 #include <com/sun/star/beans/PropertyAttribute.hpp>
 #include <com/sun/star/chart/ChartDataRowSource.hpp>
@@ -605,7 +606,7 @@ OUString SAL_CALL DiagramWrapper::getDiagramType()
         DiagramHelper::tTemplateWithServiceName aTemplateAndService =
             DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager 
);
 
-        aRet = lcl_getDiagramType( aTemplateAndService.second );
+        aRet = lcl_getDiagramType( aTemplateAndService.sServiceName );
     }
 
     if( aRet.isEmpty())
@@ -1467,11 +1468,11 @@ bool WrappedNumberOfLinesProperty::detectInnerValue( 
uno::Any& rInnerValue ) con
             rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = 
xChartDoc->getTypeManager();
             DiagramHelper::tTemplateWithServiceName aTemplateAndService =
                     DiagramHelper::getTemplateForDiagram( xDiagram, 
xChartTypeManager );
-            if( aTemplateAndService.second == 
"com.sun.star.chart2.template.ColumnWithLine" )
+            if( aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.ColumnWithLine" )
             {
                 try
                 {
-                    uno::Reference< beans::XPropertySet > xProp( 
aTemplateAndService.first, uno::UNO_QUERY );
+                    uno::Reference< beans::XPropertySet > xProp( 
static_cast<cppu::OWeakObject*>(aTemplateAndService.xChartTypeTemplate.get()), 
uno::UNO_QUERY );
                     xProp->getPropertyValue( m_aOuterName ) >>= nNumberOfLines;
                     bHasDetectableInnerValue = true;
                 }
@@ -1505,16 +1506,16 @@ void WrappedNumberOfLinesProperty::setPropertyValue( 
const Any& rOuterValue, con
     DiagramHelper::tTemplateWithServiceName aTemplateAndService =
             DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager 
);
 
-    uno::Reference< chart2::XChartTypeTemplate > xTemplate;
-    if( aTemplateAndService.second == 
"com.sun.star.chart2.template.ColumnWithLine" )
+    rtl::Reference< ChartTypeTemplate > xTemplate;
+    if( aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.ColumnWithLine" )
     {
         if( nNewValue != 0 )
         {
-            xTemplate.set( aTemplateAndService.first );
+            xTemplate = aTemplateAndService.xChartTypeTemplate;
             try
             {
                 sal_Int32 nOldValue = 0;
-                uno::Reference< beans::XPropertySet > xProp( xTemplate, 
uno::UNO_QUERY );
+                uno::Reference< beans::XPropertySet > xProp( 
static_cast<cppu::OWeakObject*>(xTemplate.get()), uno::UNO_QUERY );
                 xProp->getPropertyValue( m_aOuterName ) >>= nOldValue;
                 if( nOldValue == nNewValue )
                     return;
@@ -1526,14 +1527,14 @@ void WrappedNumberOfLinesProperty::setPropertyValue( 
const Any& rOuterValue, con
         }
         else
         {
-            xTemplate.set( 
xChartTypeManager->createInstance("com.sun.star.chart2.template.Column"), 
uno::UNO_QUERY );
+            xTemplate = 
xChartTypeManager->createTemplate("com.sun.star.chart2.template.Column");
         }
     }
-    else if( aTemplateAndService.second == 
"com.sun.star.chart2.template.Column" )
+    else if( aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.Column" )
     {
         if( nNewValue == 0 )
             return;
-        xTemplate.set( xChartTypeManager->createInstance( 
"com.sun.star.chart2.template.ColumnWithLine" ), uno::UNO_QUERY );
+        xTemplate = xChartTypeManager->createTemplate( 
"com.sun.star.chart2.template.ColumnWithLine" );
     }
 
     if(!xTemplate.is())
@@ -1543,7 +1544,7 @@ void WrappedNumberOfLinesProperty::setPropertyValue( 
const Any& rOuterValue, con
     {
         // locked controllers
         ControllerLockGuardUNO aCtrlLockGuard( 
m_spChart2ModelContact->getDocumentModel() );
-        uno::Reference< beans::XPropertySet > xProp( xTemplate, uno::UNO_QUERY 
);
+        uno::Reference< beans::XPropertySet > xProp( 
static_cast<cppu::OWeakObject*>(xTemplate.get()), uno::UNO_QUERY );
         xProp->setPropertyValue( "NumberOfLines", uno::Any(nNewValue) );
         xTemplate->changeDiagram( xDiagram );
     }
diff --git 
a/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx 
b/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx
index 9074ec92a6c4..3a8068ec984a 100644
--- a/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx
+++ b/chart2/source/controller/chartapiwrapper/WrappedStockProperties.cxx
@@ -28,6 +28,7 @@
 #include <com/sun/star/beans/PropertyAttribute.hpp>
 #include <tools/diagnose_ex.h>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 
 using namespace ::com::sun::star;
 using ::com::sun::star::uno::Reference;
@@ -87,7 +88,7 @@ void WrappedStockProperty::setPropertyValue( const 
css::uno::Any& rOuterValue, c
             DiagramHelper::getTemplateForDiagram( xDiagram, xChartTypeManager 
);
 
     uno::Reference< chart2::XChartTypeTemplate > xTemplate =
-            getNewTemplate( bNewValue, aTemplateAndService.second, 
xChartTypeManager );
+            getNewTemplate( bNewValue, aTemplateAndService.sServiceName, 
xChartTypeManager );
 
     if(!xTemplate.is())
         return;
@@ -142,10 +143,10 @@ css::uno::Any WrappedVolumeProperty::getPropertyValue( 
const css::uno::Reference
             DiagramHelper::tTemplateWithServiceName aTemplateAndService =
                     DiagramHelper::getTemplateForDiagram( xDiagram, 
xChartTypeManager );
 
-            if(    aTemplateAndService.second == 
"com.sun.star.chart2.template.StockVolumeLowHighClose"
-                || aTemplateAndService.second == 
"com.sun.star.chart2.template.StockVolumeOpenLowHighClose" )
+            if(    aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.StockVolumeLowHighClose"
+                || aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.StockVolumeOpenLowHighClose" )
                 m_aOuterValue <<= true;
-            else if( !aTemplateAndService.second.isEmpty() || 
!m_aOuterValue.hasValue() )
+            else if( !aTemplateAndService.sServiceName.isEmpty() || 
!m_aOuterValue.hasValue() )
                 m_aOuterValue <<= false;
         }
         else if(!m_aOuterValue.hasValue())
@@ -211,10 +212,10 @@ css::uno::Any WrappedUpDownProperty::getPropertyValue( 
const css::uno::Reference
             DiagramHelper::tTemplateWithServiceName aTemplateAndService =
                     DiagramHelper::getTemplateForDiagram( xDiagram, 
xChartTypeManager );
 
-            if(    aTemplateAndService.second == 
"com.sun.star.chart2.template.StockOpenLowHighClose"
-                || aTemplateAndService.second == 
"com.sun.star.chart2.template.StockVolumeOpenLowHighClose" )
+            if(    aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.StockOpenLowHighClose"
+                || aTemplateAndService.sServiceName == 
"com.sun.star.chart2.template.StockVolumeOpenLowHighClose" )
                 m_aOuterValue <<= true;
-            else if( !aTemplateAndService.second.isEmpty() || 
!m_aOuterValue.hasValue() )
+            else if( !aTemplateAndService.sServiceName.isEmpty() || 
!m_aOuterValue.hasValue() )
                 m_aOuterValue <<= false;
         }
         else if(!m_aOuterValue.hasValue())
diff --git a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx 
b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
index 3bfc11cb2bd9..4e73b52bd2b7 100644
--- a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
+++ b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
@@ -19,6 +19,7 @@
 
 #include <ChartTypeDialogController.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <ResId.hxx>
 #include <strings.hrc>
 #include <bitmaps.hlst>
@@ -252,19 +253,19 @@ OUString 
ChartTypeDialogController::getServiceNameForParameter( const ChartTypeP
     }
     return OUString();
 }
-uno::Reference< XChartTypeTemplate > 
ChartTypeDialogController::getCurrentTemplate(
+rtl::Reference< ChartTypeTemplate > 
ChartTypeDialogController::getCurrentTemplate(
     const ChartTypeParameter& rParameter
-    , const uno::Reference< lang::XMultiServiceFactory >& xTemplateManager ) 
const
+    , const rtl::Reference< ChartTypeManager >& xTemplateManager ) const
 {
-    uno::Reference< XChartTypeTemplate > xTemplate;
+    rtl::Reference< ChartTypeTemplate > xTemplate;
 
     OUString aServiceName( getServiceNameForParameter( rParameter ) );
     if(!aServiceName.isEmpty())
     {
-        xTemplate.set( xTemplateManager->createInstance( aServiceName ), 
uno::UNO_QUERY );
+        xTemplate = xTemplateManager->createTemplate( aServiceName );
         if(xTemplate.is())
         {
-            uno::Reference< beans::XPropertySet > xTemplateProps( xTemplate, 
uno::UNO_QUERY );
+            uno::Reference< beans::XPropertySet > xTemplateProps( 
static_cast<cppu::OWeakObject*>(xTemplate.get()), uno::UNO_QUERY );
             if(xTemplateProps.is())
             {
                 try
@@ -315,8 +316,8 @@ void ChartTypeDialogController::commitToModel( const 
ChartTypeParameter& rParame
     rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
     DiagramHelper::tTemplateWithServiceName aTemplateWithService(
         DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager ));
-    if( aTemplateWithService.first.is())
-        aTemplateWithService.first->resetStyles( xDiagram );
+    if( aTemplateWithService.xChartTypeTemplate.is())
+        aTemplateWithService.xChartTypeTemplate->resetStyles( xDiagram );
     xTemplate->changeDiagram( xDiagram );
     if( AllSettings::GetMathLayoutRTL() )
         AxisHelper::setRTLAxisLayout( AxisHelper::getCoordinateSystemByIndex( 
xDiagram, 0 ) );
diff --git a/chart2/source/controller/dialogs/DataBrowserModel.cxx 
b/chart2/source/controller/dialogs/DataBrowserModel.cxx
index e3687df5d1dc..f11d2cf856da 100644
--- a/chart2/source/controller/dialogs/DataBrowserModel.cxx
+++ b/chart2/source/controller/dialogs/DataBrowserModel.cxx
@@ -27,6 +27,7 @@
 #include <StatisticsHelper.hxx>
 #include <ChartTypeHelper.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <chartview/ExplicitValueProvider.hxx>
 #include <ExplicitCategoriesProvider.hxx>
 
@@ -772,8 +773,8 @@ void DataBrowserModel::updateFromModel()
     rtl::Reference< ::chart::ChartTypeManager > xTemplateManager = 
dynamic_cast<::chart::ChartTypeManager*>( 
m_xChartDocument->getChartTypeManager().get() );
     DiagramHelper::tTemplateWithServiceName aTemplateAndService =
         DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
-    if( aTemplateAndService.first.is())
-        m_apDialogModel->setTemplate( aTemplateAndService.first );
+    if( aTemplateAndService.xChartTypeTemplate.is())
+        m_apDialogModel->setTemplate( aTemplateAndService.xChartTypeTemplate );
 
     sal_Int32 nHeaderStart = 0;
     sal_Int32 nHeaderEnd   = 0;
diff --git a/chart2/source/controller/dialogs/DialogModel.cxx 
b/chart2/source/controller/dialogs/DialogModel.cxx
index 9c735a489b5e..efb2244c98c9 100644
--- a/chart2/source/controller/dialogs/DialogModel.cxx
+++ b/chart2/source/controller/dialogs/DialogModel.cxx
@@ -26,6 +26,7 @@
 #include <ResId.hxx>
 #include <ControllerLockGuard.hxx>
 #include <ChartTypeHelper.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <ThreeDHelper.hxx>
 #include <ChartModel.hxx>
 
@@ -430,7 +431,7 @@ DialogModel::~DialogModel()
 }
 
 void DialogModel::setTemplate(
-    const Reference< XChartTypeTemplate > & xTemplate )
+    const rtl::Reference< ChartTypeTemplate > & xTemplate )
 {
     m_xTemplate = xTemplate;
 }
diff --git a/chart2/source/controller/dialogs/DialogModel.hxx 
b/chart2/source/controller/dialogs/DialogModel.hxx
index 99ce73949cd0..be7f78a59e78 100644
--- a/chart2/source/controller/dialogs/DialogModel.hxx
+++ b/chart2/source/controller/dialogs/DialogModel.hxx
@@ -20,6 +20,7 @@
 
 #include <TimerTriggeredControllerLock.hxx>
 #include <rtl/ustring.hxx>
+#include <rtl/ref.hxx>
 
 #include <map>
 #include <memory>
@@ -48,6 +49,7 @@ namespace chart
 {
 
 class RangeSelectionHelper;
+class ChartTypeTemplate;
 
 struct DialogModelTimeBasedInfo
 {
@@ -76,7 +78,7 @@ public:
         tRolesWithRanges;
 
     void setTemplate(
-        const css::uno::Reference< css::chart2::XChartTypeTemplate > & 
xTemplate );
+        const rtl::Reference< ::chart::ChartTypeTemplate > & xTemplate );
 
     std::shared_ptr< RangeSelectionHelper > const &
         getRangeSelectionHelper() const;
diff --git a/chart2/source/controller/dialogs/dlg_CreationWizard.cxx 
b/chart2/source/controller/dialogs/dlg_CreationWizard.cxx
index e35dfb8a166e..66701c4b8ab6 100644
--- a/chart2/source/controller/dialogs/dlg_CreationWizard.cxx
+++ b/chart2/source/controller/dialogs/dlg_CreationWizard.cxx
@@ -28,6 +28,7 @@
 #include "tp_Wizard_TitlesAndObjects.hxx"
 #include "tp_DataSource.hxx"
 #include <ChartTypeTemplateProvider.hxx>
+#include <ChartTypeTemplate.hxx>
 #include "DialogModel.hxx"
 
 using namespace css;
diff --git a/chart2/source/controller/dialogs/dlg_DataSource.cxx 
b/chart2/source/controller/dialogs/dlg_DataSource.cxx
index 224e16261046..2f375ae1be5b 100644
--- a/chart2/source/controller/dialogs/dlg_DataSource.cxx
+++ b/chart2/source/controller/dialogs/dlg_DataSource.cxx
@@ -23,6 +23,7 @@
 #include <dlg_DataSource.hxx>
 #include <ChartTypeTemplateProvider.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <DiagramHelper.hxx>
 #include "DialogModel.hxx"
 
@@ -47,10 +48,10 @@ public:
         const Reference< chart2::XChartDocument > & xDoc );
 
     // ____ ChartTypeTemplateProvider ____
-    virtual Reference< chart2::XChartTypeTemplate > getCurrentTemplate() const 
override;
+    virtual rtl::Reference< ::chart::ChartTypeTemplate > getCurrentTemplate() 
const override;
 
 private:
-    Reference< chart2::XChartTypeTemplate > m_xTemplate;
+    rtl::Reference< ::chart::ChartTypeTemplate > m_xTemplate;
 };
 
 }
@@ -68,11 +69,11 @@ 
DocumentChartTypeTemplateProvider::DocumentChartTypeTemplateProvider(
             DiagramHelper::getTemplateForDiagram(
                 xDia,
                 
dynamic_cast<::chart::ChartTypeManager*>(xDoc->getChartTypeManager().get()) ));
-        m_xTemplate.set( aResult.first );
+        m_xTemplate = aResult.xChartTypeTemplate;
     }
 }
 
-Reference< chart2::XChartTypeTemplate > 
DocumentChartTypeTemplateProvider::getCurrentTemplate() const
+rtl::Reference< ::chart::ChartTypeTemplate > 
DocumentChartTypeTemplateProvider::getCurrentTemplate() const
 {
     return m_xTemplate;
 }
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx 
b/chart2/source/controller/dialogs/tp_ChartType.cxx
index fb03e1151f57..bc381e4514bc 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -23,6 +23,7 @@
 #include <ResId.hxx>
 #include <ChartModelHelper.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
 #include <unonames.hxx>
@@ -260,7 +261,7 @@ void ChartTypeTabPage::selectMainType()
     }
 
     fillAllControls( aParameter );
-    uno::Reference< beans::XPropertySet > xTemplateProps( 
getCurrentTemplate(), uno::UNO_QUERY );
+    uno::Reference< beans::XPropertySet > xTemplateProps( 
static_cast<cppu::OWeakObject*>(getCurrentTemplate().get()), uno::UNO_QUERY );
     m_pCurrentMainType->fillExtraControls(m_xChartModel,xTemplateProps);
 }
 
@@ -306,7 +307,7 @@ void ChartTypeTabPage::initializePage()
     rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
m_xChartModel ) );
     DiagramHelper::tTemplateWithServiceName aTemplate =
         DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
-    OUString aServiceName( aTemplate.second );
+    OUString aServiceName( aTemplate.sServiceName );
 
     bool bFound = false;
 
@@ -319,7 +320,7 @@ void ChartTypeTabPage::initializePage()
 
             m_xMainTypeList->select(nM);
             showAllControls(*elem);
-            uno::Reference< beans::XPropertySet > xTemplateProps( 
aTemplate.first, uno::UNO_QUERY );
+            uno::Reference< beans::XPropertySet > xTemplateProps( 
static_cast<cppu::OWeakObject*>(aTemplate.xChartTypeTemplate.get()), 
uno::UNO_QUERY );
             ChartTypeParameter aParameter = 
elem->getChartTypeParameterForService( aServiceName, xTemplateProps );
             m_pCurrentMainType = getSelectedMainType();
 
@@ -363,13 +364,13 @@ bool ChartTypeTabPage::commitPage( 
::vcl::WizardTypes::CommitPageReason /*eReaso
     return true; // return false if this page should not be left
 }
 
-uno::Reference< XChartTypeTemplate > ChartTypeTabPage::getCurrentTemplate() 
const
+rtl::Reference< ChartTypeTemplate > ChartTypeTabPage::getCurrentTemplate() 
const
 {
     if( m_pCurrentMainType && m_xChartModel.is() )
     {
         ChartTypeParameter aParameter( getCurrentParamter() );
         m_pCurrentMainType->adjustParameterToSubType( aParameter );
-        uno::Reference< lang::XMultiServiceFactory > xTemplateManager( 
m_xChartModel->getChartTypeManager(), uno::UNO_QUERY );
+        rtl::Reference< ChartTypeManager > xTemplateManager = 
dynamic_cast<ChartTypeManager*>(m_xChartModel->getChartTypeManager().get());
         return m_pCurrentMainType->getCurrentTemplate( aParameter, 
xTemplateManager );
     }
     return nullptr;
diff --git a/chart2/source/controller/dialogs/tp_ChartType.hxx 
b/chart2/source/controller/dialogs/tp_ChartType.hxx
index e7f8e1980bd8..7982a473f489 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.hxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.hxx
@@ -52,7 +52,7 @@ public:
     virtual void        initializePage() override;
     virtual bool        commitPage( ::vcl::WizardTypes::CommitPageReason 
eReason ) override;
 
-    virtual css::uno::Reference< css::chart2::XChartTypeTemplate > 
getCurrentTemplate() const override;
+    virtual rtl::Reference< ::chart::ChartTypeTemplate > getCurrentTemplate() 
const override;
 
 private:
     ChartTypeDialogController* getSelectedMainType();
diff --git a/chart2/source/controller/dialogs/tp_DataSource.cxx 
b/chart2/source/controller/dialogs/tp_DataSource.cxx
index bcd48c2590df..c22e169d520d 100644
--- a/chart2/source/controller/dialogs/tp_DataSource.cxx
+++ b/chart2/source/controller/dialogs/tp_DataSource.cxx
@@ -21,6 +21,7 @@
 #include <strings.hrc>
 #include <ResId.hxx>
 #include <ChartTypeTemplateProvider.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <RangeSelectionHelper.hxx>
 #include <DataSeriesHelper.hxx>
 #include <ControllerLockGuard.hxx>
diff --git a/chart2/source/controller/dialogs/tp_RangeChooser.cxx 
b/chart2/source/controller/dialogs/tp_RangeChooser.cxx
index bfb214c71593..05f137f5a7be 100644
--- a/chart2/source/controller/dialogs/tp_RangeChooser.cxx
+++ b/chart2/source/controller/dialogs/tp_RangeChooser.cxx
@@ -20,6 +20,7 @@
 #include "tp_RangeChooser.hxx"
 #include <DataSourceHelper.hxx>
 #include <ChartTypeTemplateProvider.hxx>
+#include <ChartTypeTemplate.hxx>
 #include "DialogModel.hxx"
 #include <RangeSelectionHelper.hxx>
 #include <TabPageNotifiable.hxx>
@@ -191,7 +192,7 @@ void 
RangeChooserTabPage::changeDialogModelAccordingToControls()
     if( !m_xCurrentChartTypeTemplate.is() )
     {
         if(m_pTemplateProvider)
-            m_xCurrentChartTypeTemplate.set( 
m_pTemplateProvider->getCurrentTemplate());
+            m_xCurrentChartTypeTemplate = 
m_pTemplateProvider->getCurrentTemplate();
         if( !m_xCurrentChartTypeTemplate.is())
         {
             OSL_FAIL( "Need a template to change data source" );
diff --git a/chart2/source/controller/dialogs/tp_RangeChooser.hxx 
b/chart2/source/controller/dialogs/tp_RangeChooser.hxx
index 7d4e1a4183c2..e372b3f159b1 100644
--- a/chart2/source/controller/dialogs/tp_RangeChooser.hxx
+++ b/chart2/source/controller/dialogs/tp_RangeChooser.hxx
@@ -28,7 +28,7 @@ namespace com::sun::star::chart2 { class XChartTypeTemplate; }
 
 namespace chart
 {
-
+class ChartTypeTemplate;
 class ChartTypeTemplateProvider;
 class DialogModel;
 
@@ -72,7 +72,7 @@ private:
     bool            m_bIsDirty;
 
     OUString                                                
m_aLastValidRangeString;
-    css::uno::Reference< css::chart2::XChartTypeTemplate >  
m_xCurrentChartTypeTemplate;
+    rtl::Reference< ::chart::ChartTypeTemplate >            
m_xCurrentChartTypeTemplate;
     ChartTypeTemplateProvider*                              
m_pTemplateProvider;
 
     DialogModel &                                           m_rDialogModel;
diff --git a/chart2/source/controller/sidebar/ChartTypePanel.cxx 
b/chart2/source/controller/sidebar/ChartTypePanel.cxx
index ed2eb2a49583..7309c17f5a21 100644
--- a/chart2/source/controller/sidebar/ChartTypePanel.cxx
+++ b/chart2/source/controller/sidebar/ChartTypePanel.cxx
@@ -25,6 +25,7 @@
 #include <ChartResourceGroups.hxx>
 #include <ChartTypeDialogController.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <DiagramHelper.hxx>
 #include <Diagram.hxx>
 #include <unonames.hxx>
@@ -163,7 +164,7 @@ void ChartTypePanel::Initialize()
     rtl::Reference<Diagram> 
xDiagram(ChartModelHelper::findDiagram(m_xChartModel));
     DiagramHelper::tTemplateWithServiceName aTemplate
         = DiagramHelper::getTemplateForDiagram(xDiagram, xTemplateManager);
-    OUString aServiceName(aTemplate.second);
+    OUString aServiceName(aTemplate.sServiceName);
 
     bool bFound = false;
 
@@ -176,7 +177,9 @@ void ChartTypePanel::Initialize()
 
             m_xMainTypeList->set_active(nM);
             showAllControls(*elem);
-            uno::Reference<beans::XPropertySet> 
xTemplateProps(aTemplate.first, uno::UNO_QUERY);
+            uno::Reference<beans::XPropertySet> xTemplateProps(
+                
static_cast<cppu::OWeakObject*>(aTemplate.xChartTypeTemplate.get()),
+                uno::UNO_QUERY);
             ChartTypeParameter aParameter
                 = elem->getChartTypeParameterForService(aServiceName, 
xTemplateProps);
             m_pCurrentMainType = getSelectedMainType();
@@ -227,7 +230,7 @@ void ChartTypePanel::updateData()
     rtl::Reference<Diagram> xDiagram(ChartModelHelper::findDiagram(xModel));
     DiagramHelper::tTemplateWithServiceName aTemplate
         = DiagramHelper::getTemplateForDiagram(xDiagram, xTemplateManager);
-    OUString aServiceName(aTemplate.second);
+    OUString aServiceName(aTemplate.sServiceName);
 
     sal_uInt16 nM = 0;
     for (auto const& elem : m_aChartTypeDialogControllerList)
@@ -287,14 +290,14 @@ void 
ChartTypePanel::updateModel(css::uno::Reference<css::frame::XModel> xModel)
     doUpdateModel(xModel);
 }
 
-uno::Reference<css::chart2::XChartTypeTemplate> 
ChartTypePanel::getCurrentTemplate() const
+rtl::Reference<::chart::ChartTypeTemplate> 
ChartTypePanel::getCurrentTemplate() const
 {
     if (m_pCurrentMainType && m_xChartModel.is())
     {
         ChartTypeParameter aParameter(getCurrentParameter());
         m_pCurrentMainType->adjustParameterToSubType(aParameter);
-        uno::Reference<lang::XMultiServiceFactory> xTemplateManager(
-            m_xChartModel->getChartTypeManager(), uno::UNO_QUERY);
+        rtl::Reference<ChartTypeManager> xTemplateManager
+            = 
dynamic_cast<ChartTypeManager*>(m_xChartModel->getChartTypeManager().get());
         return m_pCurrentMainType->getCurrentTemplate(aParameter, 
xTemplateManager);
     }
     return nullptr;
@@ -433,7 +436,8 @@ void ChartTypePanel::selectMainType()
     }
 
     fillAllControls(aParameter);
-    uno::Reference<beans::XPropertySet> xTemplateProps(getCurrentTemplate(), 
uno::UNO_QUERY);
+    uno::Reference<beans::XPropertySet> xTemplateProps(
+        static_cast<cppu::OWeakObject*>(getCurrentTemplate().get()), 
uno::UNO_QUERY);
     m_pCurrentMainType->fillExtraControls(m_xChartModel, xTemplateProps);
 }
 } // end of namespace ::chart::sidebar
diff --git a/chart2/source/controller/sidebar/ChartTypePanel.hxx 
b/chart2/source/controller/sidebar/ChartTypePanel.hxx
index 9610ce3520e9..c5e1df11dab8 100644
--- a/chart2/source/controller/sidebar/ChartTypePanel.hxx
+++ b/chart2/source/controller/sidebar/ChartTypePanel.hxx
@@ -71,8 +71,7 @@ public:
 
     virtual void updateModel(css::uno::Reference<css::frame::XModel> xModel) 
override;
 
-    virtual css::uno::Reference<css::chart2::XChartTypeTemplate>
-    getCurrentTemplate() const override;
+    virtual rtl::Reference<::chart::ChartTypeTemplate> getCurrentTemplate() 
const override;
 
 private:
     ChartTypeDialogController* getSelectedMainType();
diff --git a/chart2/source/inc/ChartTypeDialogController.hxx 
b/chart2/source/inc/ChartTypeDialogController.hxx
index 432401ec1ca3..a91e664d224e 100644
--- a/chart2/source/inc/ChartTypeDialogController.hxx
+++ b/chart2/source/inc/ChartTypeDialogController.hxx
@@ -50,6 +50,9 @@ class ValueSet;
 
 namespace chart
 {
+class ChartTypeTemplate;
+class ChartTypeManager;
+
 enum GlobalStackMode
 {
     GlobalStackMode_NONE,
@@ -132,9 +135,9 @@ public:
     OUString getServiceNameForParameter(const ChartTypeParameter& rParameter) 
const;
     void commitToModel(const ChartTypeParameter& rParameter,
                        const css::uno::Reference<css::chart2::XChartDocument>& 
xChartModel);
-    css::uno::Reference<css::chart2::XChartTypeTemplate> getCurrentTemplate(
-        const ChartTypeParameter& rParameter,
-        const css::uno::Reference<css::lang::XMultiServiceFactory>& 
xTemplateManager) const;
+    rtl::Reference<::chart::ChartTypeTemplate>
+    getCurrentTemplate(const ChartTypeParameter& rParameter,
+                       const rtl::Reference<::chart::ChartTypeManager>& 
xTemplateManager) const;
 
 protected:
     bool bSupportsXAxisWithValues;
diff --git a/chart2/source/inc/ChartTypeTemplateProvider.hxx 
b/chart2/source/inc/ChartTypeTemplateProvider.hxx
index 95881b6c70e5..400b1c8e2819 100644
--- a/chart2/source/inc/ChartTypeTemplateProvider.hxx
+++ b/chart2/source/inc/ChartTypeTemplateProvider.hxx
@@ -19,19 +19,16 @@
 
 #pragma once
 
-#include <com/sun/star/uno/Reference.hxx>
-
-namespace com::sun::star::chart2
-{
-class XChartTypeTemplate;
-}
+#include <rtl/ref.hxx>
 
 namespace chart
 {
+class ChartTypeTemplate;
+
 class ChartTypeTemplateProvider
 {
 public:
-    virtual css::uno::Reference<css::chart2::XChartTypeTemplate> 
getCurrentTemplate() const = 0;
+    virtual rtl::Reference<::chart::ChartTypeTemplate> getCurrentTemplate() 
const = 0;
     virtual ~ChartTypeTemplateProvider() {}
 };
 
diff --git a/chart2/source/inc/DiagramHelper.hxx 
b/chart2/source/inc/DiagramHelper.hxx
index e1a0fcdfa978..57372a1c072e 100644
--- a/chart2/source/inc/DiagramHelper.hxx
+++ b/chart2/source/inc/DiagramHelper.hxx
@@ -41,6 +41,7 @@ namespace com::sun::star::util { class 
XNumberFormatsSupplier; }
 namespace chart
 {
 class ChartTypeManager;
+class ChartTypeTemplate;
 
 enum DiagramPositioningMode
 {
@@ -52,10 +53,10 @@ enum DiagramPositioningMode
 class OOO_DLLPUBLIC_CHARTTOOLS DiagramHelper
 {
 public:
-    typedef std::pair<
-            css::uno::Reference< css::chart2::XChartTypeTemplate >,
-            OUString >
-        tTemplateWithServiceName;
+    struct tTemplateWithServiceName {
+        rtl::Reference< ::chart::ChartTypeTemplate > xChartTypeTemplate;
+        OUString sServiceName;
+    };
 
     /** tries to find a template in the chart-type manager that matches the
         given diagram.
diff --git a/chart2/source/model/main/ChartModel_Persistence.cxx 
b/chart2/source/model/main/ChartModel_Persistence.cxx
index 2bd9327babe5..cffa42b1aa43 100644
--- a/chart2/source/model/main/ChartModel_Persistence.cxx
+++ b/chart2/source/model/main/ChartModel_Persistence.cxx
@@ -23,6 +23,7 @@
 #include <ChartViewHelper.hxx>
 #include <ChartModelHelper.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <DataSourceHelper.hxx>
 #include <AxisHelper.hxx>
 #include <ThreeDHelper.hxx>
@@ -729,8 +730,7 @@ void SAL_CALL ChartModel::modified( const 
lang::EventObject& rEvenObject)
             Reference<chart2::XDiagram> xDiagram(getFirstDiagram());
 
             DiagramHelper::tTemplateWithServiceName aTemplateAndService = 
DiagramHelper::getTemplateForDiagram(xDiagram, xChartTypeManager);
-            css::uno::Reference<css::chart2::XChartTypeTemplate> 
xChartTypeTemplate(aTemplateAndService.first);
-            xChartTypeTemplate->changeDiagramData(xDiagram, xDataSource, 
aArguments);
+            
aTemplateAndService.xChartTypeTemplate->changeDiagramData(xDiagram, 
xDataSource, aArguments);
         }
         catch (const uno::Exception &)
         {
diff --git a/chart2/source/model/main/Diagram.cxx 
b/chart2/source/model/main/Diagram.cxx
index 15082ccf42c2..43886428c62f 100644
--- a/chart2/source/model/main/Diagram.cxx
+++ b/chart2/source/model/main/Diagram.cxx
@@ -19,6 +19,7 @@
 
 #include <Diagram.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <PropertyHelper.hxx>
 #include "Wall.hxx"
 #include <ModifyListenerHelper.hxx>
@@ -403,9 +404,9 @@ void SAL_CALL Diagram::setDiagramData(
 {
     rtl::Reference< ::chart::ChartTypeManager > xChartTypeManager = new 
::chart::ChartTypeManager( m_xContext );
     DiagramHelper::tTemplateWithServiceName aTemplateAndService = 
DiagramHelper::getTemplateForDiagram( this, xChartTypeManager );
-    uno::Reference< chart2::XChartTypeTemplate > xTemplate( 
aTemplateAndService.first );
+    rtl::Reference< ::chart::ChartTypeTemplate > xTemplate( 
aTemplateAndService.xChartTypeTemplate );
     if( !xTemplate.is() )
-        xTemplate.set( xChartTypeManager->createInstance( 
"com.sun.star.chart2.template.Column" ), uno::UNO_QUERY );
+        xTemplate = xChartTypeManager->createTemplate( 
"com.sun.star.chart2.template.Column" );
     if(!xTemplate.is())
         return;
     xTemplate->changeDiagramData( this, xDataSource, aArguments );
diff --git a/chart2/source/tools/DiagramHelper.cxx 
b/chart2/source/tools/DiagramHelper.cxx
index 531e1c07ac72..d985df9dc3af 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -23,6 +23,7 @@
 #include <AxisHelper.hxx>
 #include <ChartTypeHelper.hxx>
 #include <ChartTypeManager.hxx>
+#include <ChartTypeTemplate.hxx>
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include <ExplicitCategoriesProvider.hxx>
@@ -93,13 +94,13 @@ DiagramHelper::tTemplateWithServiceName
     {
         try
         {
-            Reference< XChartTypeTemplate > xTempl(
-                xChartTypeManager->createInstance( aServiceNames[ i ] ), 
uno::UNO_QUERY_THROW );
+            rtl::Reference< ::chart::ChartTypeTemplate > xTempl =
+                xChartTypeManager->createTemplate( aServiceNames[ i ] );
 
             if (xTempl.is() && xTempl->matchesTemplate(xDiagram, true))
             {
-                aResult.first = xTempl;
-                aResult.second = aServiceNames[ i ];
+                aResult.xChartTypeTemplate = xTempl;
+                aResult.sServiceName = aServiceNames[ i ];
                 bTemplateFound = true;
             }
         }

Reply via email to