chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx        |    4 -
 chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx      |    2 
 chart2/source/controller/dialogs/ChartTypeDialogController.cxx         |   10 
+--
 chart2/source/controller/dialogs/DataBrowserModel.cxx                  |   10 
+--
 chart2/source/controller/dialogs/ObjectNameProvider.cxx                |    7 
+-
 chart2/source/controller/dialogs/TitleDialogData.cxx                   |    3 -
 chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx               |    3 -
 chart2/source/controller/dialogs/dlg_ObjectProperties.cxx              |    3 -
 chart2/source/controller/dialogs/dlg_View3D.cxx                        |    3 -
 chart2/source/controller/dialogs/res_LegendPosition.cxx                |    3 -
 chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx             |   12 
++--
 chart2/source/controller/dialogs/tp_ChartType.cxx                      |   16 
++----
 chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx        |    5 +
 chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx          |    1 
 chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx     |    3 -
 chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx    |    5 +
 chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx |   26 
+++++-----
 chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx     |    3 -
 chart2/source/controller/main/ChartController.cxx                      |    1 
 chart2/source/controller/main/ChartController_Insert.cxx               |    5 +
 chart2/source/controller/main/ChartController_Properties.cxx           |   10 
+--
 chart2/source/controller/main/ChartController_Tools.cxx                |   18 
+++---
 chart2/source/controller/main/ChartController_Window.cxx               |    3 -
 chart2/source/controller/main/ControllerCommandDispatch.cxx            |    5 +
 chart2/source/controller/main/DragMethod_RotateDiagram.cxx             |   16 
+++---
 chart2/source/controller/main/ObjectHierarchy.cxx                      |   15 
++---
 chart2/source/controller/main/SelectionHelper.cxx                      |    1 
 chart2/source/controller/sidebar/ChartElementsPanel.cxx                |   11 
++--
 chart2/source/controller/sidebar/ChartTypePanel.cxx                    |   18 
+++---
 chart2/source/inc/ChartModelHelper.hxx                                 |    6 
+-
 chart2/source/inc/OPropertySet.hxx                                     |    3 +
 chart2/source/tools/ChartModelHelper.cxx                               |   25 
+++++----
 chart2/source/tools/DataSourceHelper.cxx                               |    7 
+-
 chart2/source/tools/DiagramHelper.cxx                                  |   21 
++++----
 chart2/source/tools/InternalDataProvider.cxx                           |    3 -
 chart2/source/tools/ObjectIdentifier.cxx                               |    1 
 chart2/source/tools/ReferenceSizeProvider.cxx                          |    1 
 chart2/source/tools/TitleHelper.cxx                                    |    1 
 38 files changed, 155 insertions(+), 135 deletions(-)

New commits:
commit f0f87108ab1560558c5b11185acc2bdfde150b8a
Author:     Noel Grandin <noel.gran...@collabora.co.uk>
AuthorDate: Wed Jan 19 12:39:26 2022 +0200
Commit:     Noel Grandin <noel.gran...@collabora.co.uk>
CommitDate: Wed Jan 19 13:46:01 2022 +0100

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

diff --git a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx 
b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx
index cb91fc02ebe9..f00c812678b4 100644
--- a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx
+++ b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx
@@ -187,7 +187,7 @@ awt::Rectangle 
Chart2ModelContact::GetDiagramRectangleIncludingTitle() const
 awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingAxes() const
 {
     awt::Rectangle aRect(0,0,0,0);
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<XChartDocument>(m_xChartModel.get()) ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<XChartDocument>(m_xChartModel.get()) ) );
 
     if( DiagramHelper::getDiagramPositioningMode( xDiagram ) == 
DiagramPositioningMode_INCLUDING )
         aRect = 
DiagramHelper::getDiagramRectangleFromModel(m_xChartModel.get());
@@ -203,7 +203,7 @@ awt::Rectangle 
Chart2ModelContact::GetDiagramRectangleIncludingAxes() const
 awt::Rectangle Chart2ModelContact::GetDiagramRectangleExcludingAxes() const
 {
     awt::Rectangle aRect(0,0,0,0);
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<XChartDocument>(m_xChartModel.get()) ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<XChartDocument>(m_xChartModel.get()) ) );
 
     if( DiagramHelper::getDiagramPositioningMode( xDiagram ) == 
DiagramPositioningMode_EXCLUDING )
         aRect = 
DiagramHelper::getDiagramRectangleFromModel(m_xChartModel.get());
diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx 
b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
index fc97499a30a5..c3245ea30a2f 100644
--- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
+++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx
@@ -1188,7 +1188,7 @@ uno::Reference< uno::XInterface > SAL_CALL 
ChartDocumentWrapper::createInstance(
                 {
                     // locked controllers
                     ControllerLockGuardUNO aCtrlLockGuard( xChartDoc );
-                    Reference< chart2::XDiagram > xDiagram = 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartDoc) );
+                    rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartDoc) );
                     ThreeDLookScheme e3DScheme = ThreeDHelper::detectScheme( 
xDiagram );
                     rtl::Reference< ::chart::ChartTypeManager > 
xTemplateManager = xChartDoc->getTypeManager();
                     DiagramHelper::tTemplateWithServiceName 
aTemplateWithService(
diff --git a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx 
b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
index 861bf1d99692..3bfc11cb2bd9 100644
--- a/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
+++ b/chart2/source/controller/dialogs/ChartTypeDialogController.cxx
@@ -24,6 +24,7 @@
 #include <bitmaps.hlst>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ControllerLockGuard.hxx>
 #include <AxisHelper.hxx>
 #include <unonames.hxx>
@@ -311,7 +312,7 @@ void ChartTypeDialogController::commitToModel( const 
ChartTypeParameter& rParame
 
     // locked controllers
     ControllerLockGuardUNO aCtrlLockGuard( xChartModel );
-    uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
+    rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
     DiagramHelper::tTemplateWithServiceName aTemplateWithService(
         DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager ));
     if( aTemplateWithService.first.is())
@@ -322,10 +323,9 @@ void ChartTypeDialogController::commitToModel( const 
ChartTypeParameter& rParame
     if( rParameter.b3DLook )
         ThreeDHelper::setScheme( xDiagram, rParameter.eThreeDLookScheme );
 
-    uno::Reference<beans::XPropertySet> xDiaProp(xDiagram, uno::UNO_QUERY);
-    if (xDiaProp.is())
+    if (xDiagram.is())
     {
-        xDiaProp->setPropertyValue(CHART_UNONAME_SORT_BY_XVALUES, 
uno::Any(rParameter.bSortByXValues));
+        xDiagram->setPropertyValue(CHART_UNONAME_SORT_BY_XVALUES, 
uno::Any(rParameter.bSortByXValues));
     }
 }
 void ChartTypeDialogController::fillSubTypeList( ValueSet& rSubTypeList, const 
ChartTypeParameter& /*rParameter*/ )
@@ -1155,7 +1155,7 @@ void 
CombiColumnLineChartDialogController::fillExtraControls(
 
     uno::Reference< frame::XModel > xModel = xChartModel;
 
-    uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( 
xModel );
+    rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( xModel 
);
     if(!xDiagram.is())
         return;
 
diff --git a/chart2/source/controller/dialogs/DataBrowserModel.cxx 
b/chart2/source/controller/dialogs/DataBrowserModel.cxx
index 6f40dac1b5a1..e3687df5d1dc 100644
--- a/chart2/source/controller/dialogs/DataBrowserModel.cxx
+++ b/chart2/source/controller/dialogs/DataBrowserModel.cxx
@@ -21,6 +21,7 @@
 #include "DialogModel.hxx"
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <DataSeriesHelper.hxx>
 #include <ControllerLockGuard.hxx>
 #include <StatisticsHelper.hxx>
@@ -289,7 +290,7 @@ void DataBrowserModel::insertDataSeries( sal_Int32 
nAfterColumnIndex )
         nAfterColumnIndex = getCategoryColumnCount()-1;
 
     sal_Int32 nStartCol = 0;
-    Reference<chart2::XDiagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartDocument);
+    rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram(m_xChartDocument);
     Reference<chart2::XChartType> xChartType;
     Reference<chart2::XDataSeries> xSeries;
     if (o3tl::make_unsigned(nAfterColumnIndex) < m_aColumns.size())
@@ -763,7 +764,7 @@ void DataBrowserModel::updateFromModel()
     m_aColumns.clear();
     m_aHeaders.clear();
 
-    Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( 
m_xChartDocument ));
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
m_xChartDocument ));
     if( !xDiagram.is())
         return;
 
@@ -803,10 +804,9 @@ void DataBrowserModel::updateFromModel()
         }
     }
 
-    Reference< chart2::XCoordinateSystemContainer > xCooSysCnt( xDiagram, 
uno::UNO_QUERY );
-    if( !xCooSysCnt.is())
+    if( !xDiagram.is())
         return;
-    const Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( 
xCooSysCnt->getCoordinateSystems());
+    const Sequence< Reference< chart2::XCoordinateSystem > > aCooSysSeq( 
xDiagram->getCoordinateSystems());
     for( Reference< chart2::XCoordinateSystem > const & coords : aCooSysSeq )
     {
         Reference< chart2::XChartTypeContainer > xCTCnt( coords, 
uno::UNO_QUERY_THROW );
diff --git a/chart2/source/controller/dialogs/ObjectNameProvider.cxx 
b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
index 5eae3853add8..4ee9c92d6f93 100644
--- a/chart2/source/controller/dialogs/ObjectNameProvider.cxx
+++ b/chart2/source/controller/dialogs/ObjectNameProvider.cxx
@@ -28,6 +28,7 @@
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <DataSeriesHelper.hxx>
 #include <TitleHelper.hxx>
 #include <ExplicitCategoriesProvider.hxx>
@@ -60,7 +61,7 @@ OUString lcl_getDataSeriesName( const OUString& rObjectCID, 
const Reference< fra
 {
     OUString aRet;
 
-    Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel 
) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     Reference< XDataSeries > xSeries = ObjectIdentifier::getDataSeriesForCID( 
rObjectCID , xChartModel );
     if( xDiagram.is() && xSeries.is() )
     {
@@ -501,7 +502,7 @@ OUString ObjectNameProvider::getHelpText( const OUString& 
rObjectCID, const Refe
         else
             aRet=SchResId(STR_TIP_DATAPOINT);
 
-        Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+        rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
         Reference< XDataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel );
         if( xDiagram.is() && xSeries.is() )
         {
@@ -731,7 +732,7 @@ OUString ObjectNameProvider::getSelectedObjectText( const 
OUString & rObjectCID,
     {
         aRet = SchResId( STR_STATUS_DATAPOINT_MARKED );
 
-        Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+        rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
         Reference< XDataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( rObjectCID , xChartModel );
         if( xDiagram.is() && xSeries.is() )
         {
diff --git a/chart2/source/controller/dialogs/TitleDialogData.cxx 
b/chart2/source/controller/dialogs/TitleDialogData.cxx
index eb4b1443aa1f..63997be2e0c7 100644
--- a/chart2/source/controller/dialogs/TitleDialogData.cxx
+++ b/chart2/source/controller/dialogs/TitleDialogData.cxx
@@ -24,6 +24,7 @@
 #include <TitleDialogData.hxx>
 #include <TitleHelper.hxx>
 #include <ChartModelHelper.hxx>
+#include <Diagram.hxx>
 #include <AxisHelper.hxx>
 
 namespace chart
@@ -41,7 +42,7 @@ TitleDialogData::TitleDialogData( 
std::unique_ptr<ReferenceSizeProvider> pRefSiz
 
 void TitleDialogData::readFromModel( const uno::Reference< frame::XModel>& 
xChartModel )
 {
-    uno::Reference< XDiagram > xDiagram = 
ChartModelHelper::findDiagram(xChartModel);
+    rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram(xChartModel);
 
     //get possibilities
     uno::Sequence< sal_Bool > aAxisPossibilityList;
diff --git a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx 
b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx
index f06ff56559fa..13cfa0cd36b6 100644
--- a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx
+++ b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx
@@ -24,6 +24,7 @@
 #include <ChartModelHelper.hxx>
 #include <ObjectIdentifier.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <AxisHelper.hxx>
 #include <ObjectNameProvider.hxx>
 
@@ -74,7 +75,7 @@ double 
InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals(
     if( pExplicitValueProvider )
     {
         Reference< XAxis > xAxis;
-        Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+        rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
         Reference< XDataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( rSelectedObjectCID, xChartModel );
         xAxis = DiagramHelper::getAttachedAxis( xSeries, xDiagram );
         if(!xAxis.is())
diff --git a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx 
b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
index 5751cc15b69b..feaa93330308 100644
--- a/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
+++ b/chart2/source/controller/dialogs/dlg_ObjectProperties.cxx
@@ -37,6 +37,7 @@
 #include <ChartTypeHelper.hxx>
 #include <ObjectNameProvider.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <NumberFormatterWrapper.hxx>
 #include <AxisHelper.hxx>
 #include <ExplicitCategoriesProvider.hxx>
@@ -111,7 +112,7 @@ 
ObjectPropertiesDialogParameter::~ObjectPropertiesDialogParameter()
 void ObjectPropertiesDialogParameter::init( const uno::Reference< 
frame::XModel >& xChartModel )
 {
     m_xChartDocument.set( xChartModel, uno::UNO_QUERY );
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     uno::Reference< XDataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( m_aObjectCID, xChartModel );
     uno::Reference< XChartType > xChartType = 
ChartModelHelper::getChartTypeOfSeries( xChartModel, xSeries );
     sal_Int32 nDimensionCount = DiagramHelper::getDimension( xDiagram );
diff --git a/chart2/source/controller/dialogs/dlg_View3D.cxx 
b/chart2/source/controller/dialogs/dlg_View3D.cxx
index b81b7ecacbf1..857a630be26f 100644
--- a/chart2/source/controller/dialogs/dlg_View3D.cxx
+++ b/chart2/source/controller/dialogs/dlg_View3D.cxx
@@ -24,6 +24,7 @@
 #include "tp_3D_SceneAppearance.hxx"
 #include "tp_3D_SceneIllumination.hxx"
 #include <ChartModelHelper.hxx>
+#include <Diagram.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/chart2/XDiagram.hpp>
 #include <com/sun/star/frame/XModel.hpp>
@@ -41,7 +42,7 @@ View3DDialog::View3DDialog(weld::Window* pParent, const 
uno::Reference< frame::X
     , m_aControllerLocker(xChartModel)
     , m_xTabControl(m_xBuilder->weld_notebook("tabcontrol"))
 {
-    uno::Reference< beans::XPropertySet > xSceneProperties( 
ChartModelHelper::findDiagram( xChartModel ), uno::UNO_QUERY );
+    rtl::Reference< Diagram > xSceneProperties( ChartModelHelper::findDiagram( 
xChartModel ), uno::UNO_QUERY );
 
     m_xTabControl->append_page("geometry", SchResId(STR_PAGE_PERSPECTIVE));
     m_xGeometry.reset(new 
ThreeD_SceneGeometry_TabPage(m_xTabControl->get_page("geometry"), 
xSceneProperties, m_aControllerLocker));
diff --git a/chart2/source/controller/dialogs/res_LegendPosition.cxx 
b/chart2/source/controller/dialogs/res_LegendPosition.cxx
index 5ad9fe1ac63d..a7104093fc9d 100644
--- a/chart2/source/controller/dialogs/res_LegendPosition.cxx
+++ b/chart2/source/controller/dialogs/res_LegendPosition.cxx
@@ -21,6 +21,7 @@
 #include <ChartModelHelper.hxx>
 #include <LegendHelper.hxx>
 #include <ChartModel.hxx>
+#include <Diagram.hxx>
 
 #include <com/sun/star/chart2/LegendPosition.hpp>
 #include <com/sun/star/chart/ChartLegendExpansion.hpp>
@@ -76,7 +77,7 @@ void LegendPositionResources::writeToResources( const 
uno::Reference< frame::XMo
 {
     try
     {
-        uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
+        rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
         uno::Reference< beans::XPropertySet > xProp( xDiagram->getLegend(), 
uno::UNO_QUERY );
         if( xProp.is() )
         {
diff --git a/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx 
b/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx
index 707c0eff3617..389d1b1fe89e 100644
--- a/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx
+++ b/chart2/source/controller/dialogs/tp_3D_SceneAppearance.cxx
@@ -21,6 +21,7 @@
 #include <ChartModelHelper.hxx>
 #include <ThreeDHelper.hxx>
 #include <ControllerLockGuard.hxx>
+#include <Diagram.hxx>
 #include <com/sun/star/beans/XPropertySet.hpp>
 #include <com/sun/star/chart2/XDiagram.hpp>
 #include <com/sun/star/drawing/ShadeMode.hpp>
@@ -53,9 +54,8 @@ lcl_ModelProperties lcl_getPropertiesFromModel( 
uno::Reference< frame::XModel >
     lcl_ModelProperties aProps;
     try
     {
-        uno::Reference< chart2::XDiagram > xDiagram( 
::chart::ChartModelHelper::findDiagram( xModel ) );
-        uno::Reference< beans::XPropertySet > xDiaProp( xDiagram, 
uno::UNO_QUERY_THROW );
-        xDiaProp->getPropertyValue( "D3DSceneShadeMode" ) >>= 
aProps.m_aShadeMode;
+        rtl::Reference< ::chart::Diagram > xDiagram( 
::chart::ChartModelHelper::findDiagram( xModel ) );
+        xDiagram->getPropertyValue( "D3DSceneShadeMode" ) >>= 
aProps.m_aShadeMode;
         ::chart::ThreeDHelper::getRoundedEdgesAndObjectLines( xDiagram, 
aProps.m_nRoundedEdges, aProps.m_nObjectLines );
         aProps.m_eScheme = ::chart::ThreeDHelper::detectScheme( xDiagram );
     }
@@ -70,8 +70,8 @@ void lcl_setShadeModeAtModel( uno::Reference< frame::XModel > 
const & xModel, dr
 {
     try
     {
-        uno::Reference< beans::XPropertySet > xDiaProp(
-            ::chart::ChartModelHelper::findDiagram( xModel ), 
uno::UNO_QUERY_THROW );
+        rtl::Reference< ::chart::Diagram > xDiaProp =
+            ::chart::ChartModelHelper::findDiagram( xModel );
         xDiaProp->setPropertyValue( "D3DSceneShadeMode" , uno::Any( aShadeMode 
));
     }
     catch( const uno::Exception & )
@@ -272,7 +272,7 @@ IMPL_LINK_NOARG(ThreeD_SceneAppearance_TabPage, 
SelectSchemeHdl, weld::ComboBox&
         // locked controllers
         ControllerLockHelperGuard aGuard( m_rControllerLockHelper );
 
-        uno::Reference< chart2::XDiagram > xDiagram( 
::chart::ChartModelHelper::findDiagram( m_xChartModel ) );
+        rtl::Reference< Diagram > xDiagram( 
::chart::ChartModelHelper::findDiagram( m_xChartModel ) );
 
         if( m_xLB_Scheme->get_active() == POS_3DSCHEME_REALISTIC )
             ThreeDHelper::setScheme( xDiagram, 
ThreeDLookScheme::ThreeDLookScheme_Realistic );
diff --git a/chart2/source/controller/dialogs/tp_ChartType.cxx 
b/chart2/source/controller/dialogs/tp_ChartType.cxx
index 7a18bf19d295..fb03e1151f57 100644
--- a/chart2/source/controller/dialogs/tp_ChartType.cxx
+++ b/chart2/source/controller/dialogs/tp_ChartType.cxx
@@ -24,6 +24,7 @@
 #include <ChartModelHelper.hxx>
 #include <ChartTypeManager.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <unonames.hxx>
 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
 #include <com/sun/star/chart2/XChartDocument.hpp>
@@ -178,7 +179,7 @@ void ChartTypeTabPage::stateChanged()
     commitToModel( aParameter );
 
     //detect the new ThreeDLookScheme
-    uno::Reference<XDiagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
+    rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
     // tdf#124295 - select always a 3D scheme
     if (ThreeDLookScheme aThreeDLookScheme = 
ThreeDHelper::detectScheme(xDiagram);
         aThreeDLookScheme != ThreeDLookScheme::ThreeDLookScheme_Unknown)
@@ -186,8 +187,7 @@ void ChartTypeTabPage::stateChanged()
 
     try
     {
-        uno::Reference<beans::XPropertySet> xPropSet(xDiagram, 
uno::UNO_QUERY_THROW);
-        xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
+        xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
     }
     catch ( const uno::Exception& )
     {
@@ -249,11 +249,10 @@ void ChartTypeTabPage::selectMainType()
         && aParameter.eThreeDLookScheme != 
ThreeDLookScheme::ThreeDLookScheme_Realistic)
         aParameter.eThreeDLookScheme = 
ThreeDLookScheme::ThreeDLookScheme_Realistic;
 
-    uno::Reference<XDiagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
+    rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
     try
     {
-        uno::Reference<beans::XPropertySet> xPropSet(xDiagram, 
uno::UNO_QUERY_THROW);
-        xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
+        xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
     }
     catch ( const uno::Exception& )
     {
@@ -304,7 +303,7 @@ void ChartTypeTabPage::initializePage()
     if( !m_xChartModel.is() )
         return;
     rtl::Reference< ::chart::ChartTypeManager > xTemplateManager = 
dynamic_cast<::chart::ChartTypeManager*>( 
m_xChartModel->getChartTypeManager().get() );
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
m_xChartModel ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
m_xChartModel ) );
     DiagramHelper::tTemplateWithServiceName aTemplate =
         DiagramHelper::getTemplateForDiagram( xDiagram, xTemplateManager );
     OUString aServiceName( aTemplate.second );
@@ -332,8 +331,7 @@ void ChartTypeTabPage::initializePage()
 
             try
             {
-                uno::Reference<beans::XPropertySet> xPropSet(xDiagram, 
uno::UNO_QUERY_THROW);
-                xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
+                xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
             }
             catch (const uno::Exception&)
             {
diff --git a/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx 
b/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx
index ac350d420459..17a444f4b481 100644
--- a/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx
+++ b/chart2/source/controller/dialogs/tp_Wizard_TitlesAndObjects.cxx
@@ -21,6 +21,7 @@
 #include <res_Titles.hxx>
 #include <res_LegendPosition.hxx>
 #include <ChartModelHelper.hxx>
+#include <Diagram.hxx>
 #include <AxisHelper.hxx>
 #include <ControllerLockGuard.hxx>
 #include <com/sun/star/frame/XModel.hpp>
@@ -75,7 +76,7 @@ void TitlesAndObjectsTabPage::initializePage()
 
     //init grid checkboxes
     {
-        uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( 
m_xChartModel );
+        rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
m_xChartModel );
         uno::Sequence< sal_Bool > aPossibilityList;
         uno::Sequence< sal_Bool > aExistenceList;
         AxisHelper::getAxisOrGridPossibilities( aPossibilityList, xDiagram, 
false );
@@ -120,7 +121,7 @@ void TitlesAndObjectsTabPage::commitToModel()
 
     //commit grid changes to model
     {
-        uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( 
xModel );
+        rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xModel );
         uno::Sequence< sal_Bool > aOldExistenceList;
         AxisHelper::getAxisOrGridExistence( aOldExistenceList, xDiagram, false 
);
         uno::Sequence< sal_Bool > aNewExistenceList(aOldExistenceList);
diff --git a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx
index 0dd0e5b6b6fe..70836e572c4a 100644
--- a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx
@@ -29,6 +29,7 @@
 #include <AxisHelper.hxx>
 #include <CommonConverters.hxx>
 #include <ChartTypeHelper.hxx>
+#include <Diagram.hxx>
 #include <unonames.hxx>
 #include <memory>
 
diff --git a/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx
index 85f2768a33d6..dccfc6f2c562 100644
--- a/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/DataPointItemConverter.cxx
@@ -27,6 +27,7 @@
 #include <SeriesOptionsItemConverter.hxx>
 #include <DataSeriesHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ChartModelHelper.hxx>
 #include <ChartTypeHelper.hxx>
 #include <unonames.hxx>
@@ -234,7 +235,7 @@ DataPointItemConverter::DataPointItemConverter(
         m_aConverters.emplace_back( new SeriesOptionsItemConverter( 
xChartModel, xContext, rPropertySet, rItemPool ));
     }
 
-    uno::Reference< XDiagram > xDiagram( 
ChartModelHelper::findDiagram(xChartModel) );
+    rtl::Reference< Diagram > xDiagram( 
ChartModelHelper::findDiagram(xChartModel) );
     uno::Reference< XChartType > xChartType( 
DiagramHelper::getChartTypeOfSeries( xDiagram , xSeries ) );
     bool bFound = false;
     bool bAmbiguous = false;
diff --git 
a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx 
b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx
index 25b2623f82a2..13c1a933b8a2 100644
--- a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx
+++ b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx
@@ -25,6 +25,7 @@
 #include <GraphicPropertyItemConverter.hxx>
 #include <DataPointItemConverter.hxx>
 #include <ChartModelHelper.hxx>
+#include <Diagram.hxx>
 #include <TitleHelper.hxx>
 #include <TitleItemConverter.hxx>
 #include <AxisHelper.hxx>
@@ -49,7 +50,7 @@ AllAxisItemConverter::AllAxisItemConverter(
     const awt::Size* pRefSize )
         : MultipleItemConverter( rItemPool )
 {
-    Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel 
) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     const Sequence< Reference< XAxis > > aElementList( 
AxisHelper::getAllAxesOfDiagram( xDiagram ) );
     for( Reference< XAxis > const & axis : aElementList )
     {
@@ -78,7 +79,7 @@ AllGridItemConverter::AllGridItemConverter(
     const uno::Reference< lang::XMultiServiceFactory > & 
xNamedPropertyContainerFactory )
         : MultipleItemConverter( rItemPool )
 {
-    Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( xChartModel 
) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     const Sequence< Reference< beans::XPropertySet > > aElementList( 
AxisHelper::getAllGrids( xDiagram ) );
     for( Reference< beans::XPropertySet > const & xObjectProperties : 
aElementList )
     {
diff --git 
a/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx
index c531e7e2c76e..f4a1014743b0 100644
--- a/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/SeriesOptionsItemConverter.cxx
@@ -23,6 +23,7 @@
 #include <ChartModelHelper.hxx>
 #include <AxisHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ChartTypeHelper.hxx>
 #include <DataSeriesHelper.hxx>
 #include <ChartModel.hxx>
@@ -71,8 +72,7 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter(
 
         m_bAttachToMainAxis = DiagramHelper::isSeriesAttachedToMainAxis( 
xDataSeries );
 
-        uno::Reference< XDiagram > xDiagram( 
ChartModelHelper::findDiagram(xChartModel) );
-        uno::Reference< beans::XPropertySet > xDiagramProperties( xDiagram, 
uno::UNO_QUERY );
+        rtl::Reference< Diagram > xDiagram( 
ChartModelHelper::findDiagram(xChartModel) );
         uno::Reference< XChartType > xChartType( 
DiagramHelper::getChartTypeOfSeries( xDiagram , xDataSeries ) );
 
         m_xCooSys = DataSeriesHelper::getCoordinateSystemOfSeries( 
xDataSeries, xDiagram );
@@ -109,21 +109,21 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter(
         }
 
         m_bSupportingBarConnectors = 
ChartTypeHelper::isSupportingBarConnectors( xChartType, nDimensionCount );
-        if( m_bSupportingBarConnectors && xDiagramProperties.is() )
+        if( m_bSupportingBarConnectors && xDiagram.is() )
         {
-            xDiagramProperties->getPropertyValue( "ConnectBars" ) >>= 
m_bConnectBars;
+            xDiagram->getPropertyValue( "ConnectBars" ) >>= m_bConnectBars;
         }
 
         m_bSupportingAxisSideBySide = 
ChartTypeHelper::isSupportingAxisSideBySide( xChartType, nDimensionCount );
-        if( m_bSupportingAxisSideBySide && xDiagramProperties.is() )
+        if( m_bSupportingAxisSideBySide && xDiagram.is() )
         {
-            xDiagramProperties->getPropertyValue( "GroupBarsPerAxis" ) >>= 
m_bGroupBarsPerAxis;
+            xDiagram->getPropertyValue( "GroupBarsPerAxis" ) >>= 
m_bGroupBarsPerAxis;
         }
 
         m_bSupportingStartingAngle = 
ChartTypeHelper::isSupportingStartingAngle( xChartType );
         if( m_bSupportingStartingAngle )
         {
-            xDiagramProperties->getPropertyValue( "StartingAngle" ) >>= 
m_nStartingAngle;
+            xDiagram->getPropertyValue( "StartingAngle" ) >>= m_nStartingAngle;
         }
 
         m_aSupportedMissingValueTreatments = 
ChartTypeHelper::getSupportedMissingValueTreatments( xChartType );
@@ -140,7 +140,7 @@ SeriesOptionsItemConverter::SeriesOptionsItemConverter(
                 xProp->getPropertyValue( "IncludeHiddenCells" );
                 //if not exception is thrown the property is offered
                 m_bSupportingPlottingOfHiddenCells = true;
-                xDiagramProperties->getPropertyValue( "IncludeHiddenCells" ) 
>>= m_bIncludeHiddenCells;
+                xDiagram->getPropertyValue( "IncludeHiddenCells" ) >>= 
m_bIncludeHiddenCells;
             }
             catch( const beans::UnknownPropertyException& )
             {
@@ -205,7 +205,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( 
sal_uInt16 nWhichId, const Sf
                     aPropName = "OverlapSequence";
 
                 uno::Reference< XDataSeries > xDataSeries( GetPropertySet(), 
uno::UNO_QUERY );
-                uno::Reference< XDiagram > xDiagram( 
ChartModelHelper::findDiagram(m_xChartModel) );
+                rtl::Reference< Diagram > xDiagram( 
ChartModelHelper::findDiagram(m_xChartModel) );
                 uno::Reference< beans::XPropertySet > xChartTypeProps( 
DiagramHelper::getChartTypeOfSeries( xDiagram , xDataSeries ), uno::UNO_QUERY );
                 if( xChartTypeProps.is() )
                 {
@@ -241,7 +241,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( 
sal_uInt16 nWhichId, const Sf
             if( m_bSupportingBarConnectors )
             {
                 bool bOldConnectBars = false;
-                uno::Reference< beans::XPropertySet > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
+                rtl::Reference< Diagram > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
                 if( xDiagramProperties.is() &&
                     (xDiagramProperties->getPropertyValue( "ConnectBars" ) >>= 
bOldConnectBars) &&
                     bOldConnectBars != m_bConnectBars )
@@ -260,7 +260,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( 
sal_uInt16 nWhichId, const Sf
             if( m_bSupportingAxisSideBySide )
             {
                 bool bOldGroupBarsPerAxis = true;
-                uno::Reference< beans::XPropertySet > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
+                rtl::Reference< Diagram > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
                 if( xDiagramProperties.is() &&
                     (xDiagramProperties->getPropertyValue( "GroupBarsPerAxis" 
) >>= bOldGroupBarsPerAxis) &&
                     bOldGroupBarsPerAxis != m_bGroupBarsPerAxis )
@@ -277,7 +277,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( 
sal_uInt16 nWhichId, const Sf
             if( m_bSupportingStartingAngle )
             {
                 m_nStartingAngle = static_cast< const SdrAngleItem & >( 
rItemSet.Get( nWhichId )).GetValue().get() / 100;
-                uno::Reference< beans::XPropertySet > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
+                rtl::Reference< Diagram > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
                 if( xDiagramProperties.is() )
                 {
                     xDiagramProperties->setPropertyValue( "StartingAngle" , 
uno::Any(m_nStartingAngle) );
@@ -314,7 +314,7 @@ bool SeriesOptionsItemConverter::ApplySpecialItem( 
sal_uInt16 nWhichId, const Sf
                 {
                     try
                     {
-                        uno::Reference< beans::XPropertySet > 
xDiagramProperties( ChartModelHelper::findDiagram(m_xChartModel), 
uno::UNO_QUERY );
+                        rtl::Reference< Diagram > xDiagramProperties( 
ChartModelHelper::findDiagram(m_xChartModel), uno::UNO_QUERY );
                         if( xDiagramProperties.is() )
                         {
                             xDiagramProperties->setPropertyValue( 
"MissingValueTreatment" , uno::Any( nNew ));
diff --git a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx 
b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx
index 58780f44537e..4291acd02442 100644
--- a/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx
+++ b/chart2/source/controller/itemsetwrapper/TextLabelItemConverter.cxx
@@ -23,6 +23,7 @@
 #include <ChartTypeHelper.hxx>
 #include <DataSeriesHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ItemPropertyMap.hxx>
 #include "SchWhichPairs.hxx"
 #include <unonames.hxx>
@@ -207,7 +208,7 @@ TextLabelItemConverter::TextLabelItemConverter(
 {
     maConverters.emplace_back(new CharacterPropertyItemConverter(rPropertySet, 
rItemPool, pRefSize, "ReferencePageSize"));
 
-    uno::Reference<XDiagram> 
xDiagram(ChartModelHelper::findDiagram(xChartModel));
+    rtl::Reference< Diagram > 
xDiagram(ChartModelHelper::findDiagram(xChartModel));
     uno::Reference<XChartType> 
xChartType(DiagramHelper::getChartTypeOfSeries(xDiagram, xSeries));
     bool bFound = false;
     bool bAmbiguous = false;
diff --git a/chart2/source/controller/main/ChartController.cxx 
b/chart2/source/controller/main/ChartController.cxx
index 751afe7f30ee..a55e07149290 100644
--- a/chart2/source/controller/main/ChartController.cxx
+++ b/chart2/source/controller/main/ChartController.cxx
@@ -27,6 +27,7 @@
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include "ControllerCommandDispatch.hxx"
+#include <Diagram.hxx>
 #include <strings.hrc>
 #include <chartview/ExplicitValueProvider.hxx>
 #include <ChartViewHelper.hxx>
diff --git a/chart2/source/controller/main/ChartController_Insert.cxx 
b/chart2/source/controller/main/ChartController_Insert.cxx
index 1620c1ec5c1f..c44431d8e71f 100644
--- a/chart2/source/controller/main/ChartController_Insert.cxx
+++ b/chart2/source/controller/main/ChartController_Insert.cxx
@@ -32,6 +32,7 @@
 #include <AxisHelper.hxx>
 #include <TitleHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <chartview/DrawModelWrapper.hxx>
 #include <chartview/ChartSfxItemIds.hxx>
 #include <NumberFormatterWrapper.hxx>
@@ -94,7 +95,7 @@ void ChartController::executeDispatch_InsertAxes()
     try
     {
         InsertAxisOrGridDialogData aDialogInput;
-        uno::Reference< XDiagram > xDiagram = 
ChartModelHelper::findDiagram(uno::Reference<chart2::XChartDocument>(getChartModel()));
+        rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram(uno::Reference<chart2::XChartDocument>(getChartModel()));
         AxisHelper::getAxisOrGridExistence( aDialogInput.aExistenceList, 
xDiagram );
         AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, 
xDiagram );
 
@@ -132,7 +133,7 @@ void ChartController::executeDispatch_InsertGrid()
     try
     {
         InsertAxisOrGridDialogData aDialogInput;
-        uno::Reference< XDiagram > xDiagram = 
ChartModelHelper::findDiagram(uno::Reference<chart2::XChartDocument>(getChartModel()));
+        rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram(uno::Reference<chart2::XChartDocument>(getChartModel()));
         AxisHelper::getAxisOrGridExistence( aDialogInput.aExistenceList, 
xDiagram, false );
         AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, 
xDiagram, false );
 
diff --git a/chart2/source/controller/main/ChartController_Properties.cxx 
b/chart2/source/controller/main/ChartController_Properties.cxx
index f3a0d309cce7..0f8e4f1dfa43 100644
--- a/chart2/source/controller/main/ChartController_Properties.cxx
+++ b/chart2/source/controller/main/ChartController_Properties.cxx
@@ -44,6 +44,7 @@
 #include <ChartModel.hxx>
 #include <ColorPerPointHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ControllerLockGuard.hxx>
 #include "UndoGuard.hxx"
 #include <ObjectNameProvider.hxx>
@@ -144,9 +145,6 @@ wrapper::ItemConverter* createItemConverter(
                 if (pRefSizeProvider)
                     pRefSize.reset( new awt::Size( 
pRefSizeProvider->getPageSize()));
 
-                uno::Reference< beans::XPropertySet > xDiaProp;
-                xDiaProp.set( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ), uno::UNO_QUERY );
-
                 // the second property set contains the property 
CoordinateOrigin
                 // nOriginIndex is the index of the corresponding index of the
                 // origin (x=0, y=1, z=2)
@@ -202,7 +200,7 @@ wrapper::ItemConverter* createItemConverter(
                 uno::Reference< XDataSeries > xSeries = 
ObjectIdentifier::getDataSeriesForCID( aObjectCID, xChartModel );
                 uno::Reference< XChartType > xChartType = 
ChartModelHelper::getChartTypeOfSeries( xChartModel, xSeries );
 
-                uno::Reference< XDiagram > xDiagram( 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ) );
+                rtl::Reference< Diagram > xDiagram( 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ) );
                 sal_Int32 nDimensionCount = DiagramHelper::getDimension( 
xDiagram );
                 if( !ChartTypeHelper::isSupportingAreaProperties( xChartType, 
nDimensionCount ) )
                     eMapTo = wrapper::GraphicObjectType::LineDataPoint;
@@ -376,14 +374,14 @@ OUString lcl_getAxisCIDForCommand( std::string_view 
rDispatchCommand, const rtl:
         nDimensionIndex=1; bMainAxis=false;
     }
 
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ) );
     uno::Reference< XAxis > xAxis( AxisHelper::getAxis( nDimensionIndex, 
bMainAxis, xDiagram ) );
     return ObjectIdentifier::createClassifiedIdentifierForObject( xAxis, 
xChartModel );
 }
 
 OUString lcl_getGridCIDForCommand( std::string_view rDispatchCommand, const 
rtl::Reference<::chart::ChartModel>& xChartModel )
 {
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xChartModel) ) );
 
     if( rDispatchCommand == "DiagramGridAll")
         return ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_GRID, 
u"ALLELEMENTS" );
diff --git a/chart2/source/controller/main/ChartController_Tools.cxx 
b/chart2/source/controller/main/ChartController_Tools.cxx
index 2ba1c61bda3d..835492594db3 100644
--- a/chart2/source/controller/main/ChartController_Tools.cxx
+++ b/chart2/source/controller/main/ChartController_Tools.cxx
@@ -38,6 +38,7 @@
 #include <RegressionCurveHelper.hxx>
 #include "ShapeController.hxx"
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ObjectNameProvider.hxx>
 #include <unonames.hxx>
 
@@ -108,7 +109,7 @@ bool lcl_deleteDataSeries(
                     ActionDescriptionProvider::ActionType::Delete, SchResId( 
STR_OBJECT_DATASERIES )),
                 xUndoManager );
 
-            Reference< chart2::XDiagram > xDiagram( 
ChartModelHelper::findDiagram( uno::Reference<chart2::XChartDocument>(xModel) ) 
);
+            rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xModel) ) );
             uno::Reference< chart2::XAxis > xAxis( 
DiagramHelper::getAttachedAxis( xSeries, xDiagram ) );
 
             DataSeriesHelper::deleteSeries( xSeries, xChartType );
@@ -180,7 +181,7 @@ void ChartController::executeDispatch_NewArrangement()
     try
     {
         rtl::Reference<::chart::ChartModel> xModel( getChartModel() );
-        Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xModel) ));
+        rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xModel) ));
         if( xDiagram.is())
         {
             UndoGuard aUndoGuard(
@@ -189,13 +190,12 @@ void ChartController::executeDispatch_NewArrangement()
             ControllerLockGuardUNO aCtlLockGuard( xModel );
 
             // diagram
-            Reference< beans::XPropertyState > xState( xDiagram, 
uno::UNO_QUERY_THROW );
-            xState->setPropertyToDefault( "RelativeSize");
-            xState->setPropertyToDefault( "RelativePosition");
-            xState->setPropertyToDefault( "PosSizeExcludeAxes");
+            xDiagram->setPropertyToDefault( "RelativeSize");
+            xDiagram->setPropertyToDefault( "RelativePosition");
+            xDiagram->setPropertyToDefault( "PosSizeExcludeAxes");
 
             // 3d rotation
-            ThreeDHelper::set3DSettingsToDefault( uno::Reference< 
beans::XPropertySet >( xDiagram, uno::UNO_QUERY ) );
+            ThreeDHelper::set3DSettingsToDefault( xDiagram );
 
             // legend
             Reference< beans::XPropertyState > xLegendState( 
xDiagram->getLegend(), uno::UNO_QUERY );
@@ -856,7 +856,7 @@ void ChartController::executeDispatch_ToggleGridHorizontal()
 {
     UndoGuard aUndoGuard(
         SchResId( STR_ACTION_TOGGLE_GRID_HORZ ), m_xUndoManager );
-    Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) ));
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) ));
     if( !xDiagram.is())
         return;
 
@@ -889,7 +889,7 @@ void ChartController::executeDispatch_ToggleGridVertical()
 {
     UndoGuard aUndoGuard(
         SchResId( STR_ACTION_TOGGLE_GRID_VERTICAL ), m_xUndoManager );
-    Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) ));
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) ));
     if( !xDiagram.is())
         return;
 
diff --git a/chart2/source/controller/main/ChartController_Window.cxx 
b/chart2/source/controller/main/ChartController_Window.cxx
index 24f5255ad380..ffd6b044076d 100644
--- a/chart2/source/controller/main/ChartController_Window.cxx
+++ b/chart2/source/controller/main/ChartController_Window.cxx
@@ -29,6 +29,7 @@
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <TitleHelper.hxx>
 #include "UndoGuard.hxx"
 #include <ControllerLockGuard.hxx>
@@ -1031,7 +1032,7 @@ void ChartController::execute_Command( const 
CommandEvent& rCEvt )
                 xPopupMenu->insertSeparator( -1 );
 
                 ObjectType eObjectType = ObjectIdentifier::getObjectType( 
m_aSelection.getSelectedCID() );
-                Reference< XDiagram > xDiagram = 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) );
+                rtl::Reference< Diagram > xDiagram = 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) );
 
                 OUString aFormatCommand( lcl_getFormatCommandForObjectCID( 
m_aSelection.getSelectedCID() ) );
                 lcl_insertMenuCommand( xPopupMenu, nUniqueId++, aFormatCommand 
);
diff --git a/chart2/source/controller/main/ControllerCommandDispatch.cxx 
b/chart2/source/controller/main/ControllerCommandDispatch.cxx
index 2f125e020b7e..cc62ddbe2d32 100644
--- a/chart2/source/controller/main/ControllerCommandDispatch.cxx
+++ b/chart2/source/controller/main/ControllerCommandDispatch.cxx
@@ -21,6 +21,7 @@
 #include <ChartModelHelper.hxx>
 #include <ChartModel.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <AxisHelper.hxx>
 #include <TitleHelper.hxx>
 #include <LegendHelper.hxx>
@@ -193,7 +194,7 @@ void ControllerState::update(
     bIsPositionableObject = (aObjectType != OBJECTTYPE_DATA_POINT) && 
aSelOID.isDragableObject();
     bIsTextObject = aObjectType == OBJECTTYPE_TITLE;
 
-    uno::Reference< chart2::XDiagram > xDiagram( 
ChartModelHelper::findDiagram( uno::Reference<chart2::XChartDocument>(xModel) 
));
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xModel) ));
     bIsFormateableObjectSelected = bHasSelectedObject && 
aSelOID.isAutoGeneratedObject();
     if( aObjectType==OBJECTTYPE_DIAGRAM || 
aObjectType==OBJECTTYPE_DIAGRAM_WALL || aObjectType==OBJECTTYPE_DIAGRAM_FLOOR )
         bIsFormateableObjectSelected = 
DiagramHelper::isSupportingFloorAndWall( xDiagram );
@@ -399,7 +400,7 @@ ModelState::ModelState() :
 
 void ModelState::update( const rtl::Reference<::chart::ChartModel> & xModel )
 {
-    Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xModel) ));
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(xModel) ));
 
     bIsReadOnly = xModel->isReadonly();
 
diff --git a/chart2/source/controller/main/DragMethod_RotateDiagram.cxx 
b/chart2/source/controller/main/DragMethod_RotateDiagram.cxx
index 63e111d84be7..e5d266fbc5f0 100644
--- a/chart2/source/controller/main/DragMethod_RotateDiagram.cxx
+++ b/chart2/source/controller/main/DragMethod_RotateDiagram.cxx
@@ -24,6 +24,7 @@
 #include <ChartModelHelper.hxx>
 #include <ChartModel.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ChartTypeHelper.hxx>
 #include <ThreeDHelper.hxx>
 #include <defines.hxx>
@@ -73,20 +74,19 @@ DragMethod_RotateDiagram::DragMethod_RotateDiagram( 
DrawViewWrapper& rDrawViewWr
 
     m_aWireframePolyPolygon = m_pScene->CreateWireframe();
 
-    uno::Reference< chart2::XDiagram > xDiagram( 
ChartModelHelper::findDiagram(uno::Reference<chart2::XChartDocument>(getChartModel()))
 );
-    uno::Reference< beans::XPropertySet > xDiagramProperties( xDiagram, 
uno::UNO_QUERY );
-    if( !xDiagramProperties.is() )
+    rtl::Reference< Diagram > xDiagram( 
ChartModelHelper::findDiagram(uno::Reference<chart2::XChartDocument>(getChartModel()))
 );
+    if( !xDiagram.is() )
         return;
 
-    ThreeDHelper::getRotationFromDiagram( xDiagramProperties
+    ThreeDHelper::getRotationFromDiagram( xDiagram
         , m_nInitialHorizontalAngleDegree, m_nInitialVerticalAngleDegree );
 
-    ThreeDHelper::getRotationAngleFromDiagram( xDiagramProperties
+    ThreeDHelper::getRotationAngleFromDiagram( xDiagram
         , m_fInitialXAngleRad, m_fInitialYAngleRad, m_fInitialZAngleRad );
 
     if( ChartTypeHelper::isSupportingRightAngledAxes(
         DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) ) )
-        xDiagramProperties->getPropertyValue("RightAngledAxes") >>= 
m_bRightAngledAxes;
+        xDiagram->getPropertyValue("RightAngledAxes") >>= m_bRightAngledAxes;
     if(m_bRightAngledAxes)
     {
         if( m_eRotationDirection==ROTATIONDIRECTION_Z )
@@ -161,12 +161,12 @@ bool DragMethod_RotateDiagram::EndSdrDrag(bool /*bCopy*/)
         if(m_bRightAngledAxes)
             ThreeDHelper::adaptRadAnglesForRightAngledAxes( fResultX, fResultY 
);
 
-        ThreeDHelper::setRotationAngleToDiagram( uno::Reference< 
beans::XPropertySet >( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) ), uno::UNO_QUERY )
+        ThreeDHelper::setRotationAngleToDiagram( 
ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) )
             , fResultX, fResultY, fResultZ );
     }
     else
     {
-        ThreeDHelper::setRotationToDiagram( ( uno::Reference< 
beans::XPropertySet >( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) ), uno::UNO_QUERY ) )
+        ThreeDHelper::setRotationToDiagram( ChartModelHelper::findDiagram( 
uno::Reference<chart2::XChartDocument>(getChartModel()) )
             , 
m_nInitialHorizontalAngleDegree+m_nAdditionalHorizontalAngleDegree, 
m_nInitialVerticalAngleDegree+m_nAdditionalVerticalAngleDegree );
     }
 
diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx 
b/chart2/source/controller/main/ObjectHierarchy.cxx
index a287c0f608ef..cefad37c72a8 100644
--- a/chart2/source/controller/main/ObjectHierarchy.cxx
+++ b/chart2/source/controller/main/ObjectHierarchy.cxx
@@ -21,6 +21,7 @@
 #include <ObjectIdentifier.hxx>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <RegressionCurveHelper.hxx>
 #include <AxisHelper.hxx>
 #include <chartview/ExplicitValueProvider.hxx>
@@ -129,10 +130,10 @@ void ObjectHierarchy::createTree( const Reference< 
XChartDocument >& xChartDocum
 
     //@todo: change ObjectIdentifier to take an XChartDocument rather than 
XModel
     Reference< frame::XModel > xModel = xChartDocument;
-    Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartDocument ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartDocument ) );
     ObjectIdentifier aDiaOID;
     if( xDiagram.is() )
-        aDiaOID = ObjectIdentifier( 
ObjectIdentifier::createClassifiedIdentifierForObject( xDiagram, xModel ) );
+        aDiaOID = ObjectIdentifier( 
ObjectIdentifier::createClassifiedIdentifierForObject( 
uno::Reference<XDiagram>(xDiagram), xModel ) );
     ObjectHierarchy::tChildContainer aTopLevelContainer;
 
     // First Level
@@ -161,13 +162,9 @@ void ObjectHierarchy::createTree( const Reference< 
XChartDocument >& xChartDocum
     if( xDiagram.is())
     {
         // Sub Title.  Note: This is interpreted of being top level
-        Reference< XTitled > xDiaTitled( xDiagram, uno::UNO_QUERY );
-        if( xDiaTitled.is())
-        {
-            Reference< XTitle > xSubTitle( xDiaTitled->getTitleObject());
-            if( xSubTitle.is())
-                aTopLevelContainer.emplace_back( 
ObjectIdentifier::createClassifiedIdentifierForObject( xSubTitle, xModel ) );
-        }
+        Reference< XTitle > xSubTitle( xDiagram->getTitleObject());
+        if( xSubTitle.is())
+            aTopLevelContainer.emplace_back( 
ObjectIdentifier::createClassifiedIdentifierForObject( xSubTitle, xModel ) );
 
         if( !m_bOrderingForElementSelector )
         {
diff --git a/chart2/source/controller/main/SelectionHelper.cxx 
b/chart2/source/controller/main/SelectionHelper.cxx
index 51ec5ab91da5..bf9ec005bd76 100644
--- a/chart2/source/controller/main/SelectionHelper.cxx
+++ b/chart2/source/controller/main/SelectionHelper.cxx
@@ -20,6 +20,7 @@
 #include <SelectionHelper.hxx>
 #include <ObjectIdentifier.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ChartModelHelper.hxx>
 
 #include <com/sun/star/frame/XModel.hpp>
diff --git a/chart2/source/controller/sidebar/ChartElementsPanel.cxx 
b/chart2/source/controller/sidebar/ChartElementsPanel.cxx
index 95f6f09ac00c..75d291d0cdc4 100644
--- a/chart2/source/controller/sidebar/ChartElementsPanel.cxx
+++ b/chart2/source/controller/sidebar/ChartElementsPanel.cxx
@@ -32,6 +32,7 @@
 #include <ChartModelHelper.hxx>
 #include <AxisHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ChartTypeHelper.hxx>
 
 #include <ChartModel.hxx>
@@ -157,7 +158,7 @@ bool isTitleVisible(const 
css::uno::Reference<css::frame::XModel>& xModel, Title
 
 bool isGridVisible(const css::uno::Reference<css::frame::XModel>& xModel, 
GridType eType)
 {
-    Reference< chart2::XDiagram > 
xDiagram(ChartModelHelper::findDiagram(xModel));
+    rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel));
     if(xDiagram.is())
     {
         sal_Int32 nDimensionIndex = 0;
@@ -174,7 +175,7 @@ bool isGridVisible(const 
css::uno::Reference<css::frame::XModel>& xModel, GridTy
 
 void setGridVisible(const css::uno::Reference<css::frame::XModel>& xModel, 
GridType eType, bool bVisible)
 {
-    Reference< chart2::XDiagram > 
xDiagram(ChartModelHelper::findDiagram(xModel));
+    rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel));
     if(!xDiagram.is())
         return;
 
@@ -194,7 +195,7 @@ void setGridVisible(const 
css::uno::Reference<css::frame::XModel>& xModel, GridT
 
 bool isAxisVisible(const css::uno::Reference<css::frame::XModel>& xModel, 
AxisType eType)
 {
-    Reference< chart2::XDiagram > 
xDiagram(ChartModelHelper::findDiagram(xModel));
+    rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel));
     if(xDiagram.is())
     {
         sal_Int32 nDimensionIndex = 0;
@@ -213,7 +214,7 @@ bool isAxisVisible(const 
css::uno::Reference<css::frame::XModel>& xModel, AxisTy
 
 void setAxisVisible(const css::uno::Reference<css::frame::XModel>& xModel, 
AxisType eType, bool bVisible)
 {
-    Reference< chart2::XDiagram > 
xDiagram(ChartModelHelper::findDiagram(xModel));
+    rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(xModel));
     if(!xDiagram.is())
         return;
 
@@ -438,7 +439,7 @@ void ChartElementsPanel::updateData()
     if (!mbModelValid)
         return;
 
-    Reference< chart2::XDiagram > 
xDiagram(ChartModelHelper::findDiagram(mxModel));
+    rtl::Reference< Diagram > xDiagram(ChartModelHelper::findDiagram(mxModel));
     sal_Int32 nDimension = DiagramHelper::getDimension(xDiagram);
     SolarMutexGuard aGuard;
 
diff --git a/chart2/source/controller/sidebar/ChartTypePanel.cxx 
b/chart2/source/controller/sidebar/ChartTypePanel.cxx
index 38306c349c44..ed2eb2a49583 100644
--- a/chart2/source/controller/sidebar/ChartTypePanel.cxx
+++ b/chart2/source/controller/sidebar/ChartTypePanel.cxx
@@ -26,6 +26,7 @@
 #include <ChartTypeDialogController.hxx>
 #include <ChartTypeManager.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <unonames.hxx>
 
 #include <com/sun/star/chart2/XChartDocument.hpp>
@@ -159,7 +160,7 @@ void ChartTypePanel::Initialize()
         return;
     rtl::Reference<::chart::ChartTypeManager> xTemplateManager
         = 
dynamic_cast<::chart::ChartTypeManager*>(m_xChartModel->getChartTypeManager().get());
-    uno::Reference<css::chart2::XDiagram> 
xDiagram(ChartModelHelper::findDiagram(m_xChartModel));
+    rtl::Reference<Diagram> 
xDiagram(ChartModelHelper::findDiagram(m_xChartModel));
     DiagramHelper::tTemplateWithServiceName aTemplate
         = DiagramHelper::getTemplateForDiagram(xDiagram, xTemplateManager);
     OUString aServiceName(aTemplate.second);
@@ -188,8 +189,7 @@ void ChartTypePanel::Initialize()
 
             try
             {
-                uno::Reference<beans::XPropertySet> xPropSet(xDiagram, 
uno::UNO_QUERY_THROW);
-                xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES)
+                xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES)
                     >>= aParameter.bSortByXValues;
             }
             catch (const uno::Exception&)
@@ -224,7 +224,7 @@ void ChartTypePanel::updateData()
     rtl::Reference<::chart::ChartTypeManager> xTemplateManager
         = 
dynamic_cast<::chart::ChartTypeManager*>(m_xChartModel->getChartTypeManager().get());
     uno::Reference<frame::XModel> xModel(m_xChartModel);
-    uno::Reference<css::chart2::XDiagram> 
xDiagram(ChartModelHelper::findDiagram(xModel));
+    rtl::Reference<Diagram> xDiagram(ChartModelHelper::findDiagram(xModel));
     DiagramHelper::tTemplateWithServiceName aTemplate
         = DiagramHelper::getTemplateForDiagram(xDiagram, xTemplateManager);
     OUString aServiceName(aTemplate.second);
@@ -372,12 +372,11 @@ void ChartTypePanel::stateChanged()
     commitToModel(aParameter);
 
     //detect the new ThreeDLookScheme
-    uno::Reference<css::chart2::XDiagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
+    rtl::Reference<Diagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
     aParameter.eThreeDLookScheme = ThreeDHelper::detectScheme(xDiagram);
     try
     {
-        uno::Reference<beans::XPropertySet> xPropSet(xDiagram, 
uno::UNO_QUERY_THROW);
-        xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
+        xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
     }
     catch (const uno::Exception&)
     {
@@ -423,11 +422,10 @@ void ChartTypePanel::selectMainType()
         && aParameter.eThreeDLookScheme != 
ThreeDLookScheme::ThreeDLookScheme_Realistic)
         aParameter.eThreeDLookScheme = 
ThreeDLookScheme::ThreeDLookScheme_Realistic;
 
-    uno::Reference<css::chart2::XDiagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
+    rtl::Reference<Diagram> xDiagram = 
ChartModelHelper::findDiagram(m_xChartModel);
     try
     {
-        uno::Reference<beans::XPropertySet> xPropSet(xDiagram, 
uno::UNO_QUERY_THROW);
-        xPropSet->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
+        xDiagram->getPropertyValue(CHART_UNONAME_SORT_BY_XVALUES) >>= 
aParameter.bSortByXValues;
     }
     catch (const uno::Exception&)
     {
diff --git a/chart2/source/inc/ChartModelHelper.hxx 
b/chart2/source/inc/ChartModelHelper.hxx
index e6b966c3fefa..ee443a5def25 100644
--- a/chart2/source/inc/ChartModelHelper.hxx
+++ b/chart2/source/inc/ChartModelHelper.hxx
@@ -20,6 +20,7 @@
 
 #include <com/sun/star/awt/Size.hpp>
 #include "charttoolsdllapi.hxx"
+#include <rtl/ref.hxx>
 
 #include <vector>
 
@@ -36,6 +37,7 @@ namespace com::sun::star::view { class XSelectionSupplier; }
 
 namespace chart
 {
+class Diagram;
 
 class OOO_DLLPUBLIC_CHARTTOOLS ChartModelHelper
 {
@@ -46,10 +48,10 @@ public:
     static css::uno::Reference< css::chart2::data::XDataProvider > 
createInternalDataProvider(
             const css::uno::Reference< css::chart2::XChartDocument >& 
xChartDoc, bool bConnectToModel );
 
-    static css::uno::Reference< css::chart2::XDiagram >
+    static rtl::Reference< Diagram >
         findDiagram( const css::uno::Reference< css::frame::XModel >& xModel );
 
-    static css::uno::Reference< css::chart2::XDiagram >
+    static rtl::Reference< Diagram >
         findDiagram( const css::uno::Reference< css::chart2::XChartDocument >& 
xChartDoc );
 
     static css::uno::Reference< css::chart2::XCoordinateSystem >
diff --git a/chart2/source/inc/OPropertySet.hxx 
b/chart2/source/inc/OPropertySet.hxx
index 346e89b99c94..2676b444dc37 100644
--- a/chart2/source/inc/OPropertySet.hxx
+++ b/chart2/source/inc/OPropertySet.hxx
@@ -26,6 +26,7 @@
 #include <com/sun/star/beans/XPropertyState.hpp>
 #include <com/sun/star/beans/XMultiPropertyStates.hpp>
 #include <com/sun/star/style/XStyleSupplier.hpp>
+#include "charttoolsdllapi.hxx"
 
 #include <map>
 
@@ -143,6 +144,7 @@ protected:
      */
     virtual void firePropertyChangeEvent();
 
+public:
     // Interfaces
 
     // ____ XInterface ____
@@ -159,6 +161,7 @@ protected:
         getPropertyState( const OUString& PropertyName ) override;
     virtual css::uno::Sequence< css::beans::PropertyState > SAL_CALL
         getPropertyStates( const css::uno::Sequence< OUString >& aPropertyName 
) override;
+    OOO_DLLPUBLIC_CHARTTOOLS
     virtual void SAL_CALL
         setPropertyToDefault( const OUString& PropertyName ) override;
     virtual css::uno::Any SAL_CALL
diff --git a/chart2/source/tools/ChartModelHelper.cxx 
b/chart2/source/tools/ChartModelHelper.cxx
index 2d684b059355..71f35969e5d0 100644
--- a/chart2/source/tools/ChartModelHelper.cxx
+++ b/chart2/source/tools/ChartModelHelper.cxx
@@ -19,6 +19,7 @@
 
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <DataSourceHelper.hxx>
 #include <ControllerLockGuard.hxx>
 #include <RangeHighlighter.hxx>
@@ -80,7 +81,7 @@ uno::Reference< chart2::data::XDataProvider > 
ChartModelHelper::createInternalDa
     return new InternalDataProvider( xChartDoc, bConnectToModel, 
bDefaultDataInColumns );
 }
 
-uno::Reference< XDiagram > ChartModelHelper::findDiagram( const 
uno::Reference< frame::XModel >& xModel )
+rtl::Reference< Diagram > ChartModelHelper::findDiagram( const uno::Reference< 
frame::XModel >& xModel )
 {
     uno::Reference< XChartDocument > xChartDoc( xModel, uno::UNO_QUERY );
     if( xChartDoc.is())
@@ -88,12 +89,16 @@ uno::Reference< XDiagram > ChartModelHelper::findDiagram( 
const uno::Reference<
     return nullptr;
 }
 
-uno::Reference< XDiagram > ChartModelHelper::findDiagram( const 
uno::Reference< chart2::XChartDocument >& xChartDoc )
+rtl::Reference< Diagram > ChartModelHelper::findDiagram( const uno::Reference< 
chart2::XChartDocument >& xChartDoc )
 {
     try
     {
-        if( xChartDoc.is())
-            return xChartDoc->getFirstDiagram();
+        if( !xChartDoc )
+            return nullptr;
+        uno::Reference<chart2::XDiagram> xDiagram = 
xChartDoc->getFirstDiagram();
+        ::chart::Diagram* pDiagram = 
dynamic_cast<::chart::Diagram*>(xDiagram.get());
+        assert(!xDiagram || pDiagram);
+        return pDiagram;
     }
     catch( const uno::Exception & )
     {
@@ -118,7 +123,7 @@ uno::Reference< XCoordinateSystem > 
ChartModelHelper::getFirstCoordinateSystem(
 uno::Reference< XCoordinateSystem > 
ChartModelHelper::getFirstCoordinateSystem( const uno::Reference< frame::XModel 
>& xModel )
 {
     uno::Reference< XCoordinateSystem > XCooSys;
-    uno::Reference< XCoordinateSystemContainer > xCooSysCnt( 
ChartModelHelper::findDiagram( xModel ), uno::UNO_QUERY );
+    rtl::Reference< Diagram > xCooSysCnt( ChartModelHelper::findDiagram( 
xModel ), uno::UNO_QUERY );
     if( xCooSysCnt.is() )
     {
         uno::Sequence< uno::Reference< XCoordinateSystem > > aCooSysSeq( 
xCooSysCnt->getCoordinateSystems() );
@@ -145,7 +150,7 @@ std::vector< uno::Reference< XDataSeries > > 
ChartModelHelper::getDataSeries(
 {
     std::vector< uno::Reference< XDataSeries > > aResult;
 
-    uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram( 
xChartDoc );
+    rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartDoc );
     if( xDiagram.is())
         aResult = DiagramHelper::getDataSeriesFromDiagram( xDiagram );
 
@@ -199,17 +204,13 @@ bool ChartModelHelper::isIncludeHiddenCells( const 
uno::Reference< frame::XModel
 {
     bool bIncluded = true;  // hidden cells are included by default.
 
-    uno::Reference< chart2::XDiagram > xDiagram( 
ChartModelHelper::findDiagram(xChartModel) );
+    rtl::Reference< Diagram > xDiagram( 
ChartModelHelper::findDiagram(xChartModel) );
     if (!xDiagram.is())
         return bIncluded;
 
-    uno::Reference< beans::XPropertySet > xProp( xDiagram, uno::UNO_QUERY );
-    if (!xProp.is())
-        return bIncluded;
-
     try
     {
-        xProp->getPropertyValue("IncludeHiddenCells") >>= bIncluded;
+        xDiagram->getPropertyValue("IncludeHiddenCells") >>= bIncluded;
     }
     catch( const beans::UnknownPropertyException& )
     {
diff --git a/chart2/source/tools/DataSourceHelper.cxx 
b/chart2/source/tools/DataSourceHelper.cxx
index cbb3976e5e90..1881df79097e 100644
--- a/chart2/source/tools/DataSourceHelper.cxx
+++ b/chart2/source/tools/DataSourceHelper.cxx
@@ -21,6 +21,7 @@
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <DataSeriesHelper.hxx>
 #include <DataSource.hxx>
 #include <ControllerLockGuard.hxx>
@@ -275,7 +276,7 @@ uno::Sequence< OUString > 
DataSourceHelper::getUsedDataRanges(
 
 uno::Sequence< OUString > DataSourceHelper::getUsedDataRanges( const 
uno::Reference< frame::XModel > & xChartModel )
 {
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     return getUsedDataRanges( xDiagram );
 }
 
@@ -290,7 +291,7 @@ uno::Reference< chart2::data::XDataSource > 
DataSourceHelper::getUsedData(
 {
     std::vector< uno::Reference< chart2::data::XLabeledDataSequence > > 
aResult;
 
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     uno::Reference< data::XLabeledDataSequence > xCategories( 
DiagramHelper::getCategoriesFromDiagram( xDiagram ) );
     if( xCategories.is() )
         aResult.push_back( xCategories );
@@ -424,7 +425,7 @@ void DataSourceHelper::setRangeSegmentation(
     uno::Reference< data::XDataProvider > xDataProvider( 
xChartDocument->getDataProvider() );
     if( !xDataProvider.is() )
         return;
-    uno::Reference< XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
+    rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartModel ) );
     if( !xDiagram.is() )
         return;
     uno::Reference< chart2::XChartTypeManager > xChartTypeManager( 
xChartDocument->getChartTypeManager() );
diff --git a/chart2/source/tools/DiagramHelper.cxx 
b/chart2/source/tools/DiagramHelper.cxx
index 2b2b3c6e18da..531e1c07ac72 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -18,6 +18,7 @@
  */
 
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <DataSeriesHelper.hxx>
 #include <AxisHelper.hxx>
 #include <ChartTypeHelper.hxx>
@@ -1592,14 +1593,14 @@ bool DiagramHelper::setDiagramPositioning( const 
uno::Reference< frame::XModel >
 
     bool bChanged = false;
     awt::Size aPageSize( ChartModelHelper::getPageSize(xChartModel) );
-    uno::Reference< beans::XPropertySet > xDiaProps( 
ChartModelHelper::findDiagram( xChartModel ), uno::UNO_QUERY );
-    if( !xDiaProps.is() )
+    rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
+    if( !xDiagram.is() )
         return bChanged;
 
     RelativePosition aOldPos;
     RelativeSize aOldSize;
-    xDiaProps->getPropertyValue("RelativePosition" ) >>= aOldPos;
-    xDiaProps->getPropertyValue("RelativeSize" ) >>= aOldSize;
+    xDiagram->getPropertyValue("RelativePosition" ) >>= aOldPos;
+    xDiagram->getPropertyValue("RelativeSize" ) >>= aOldSize;
 
     RelativePosition aNewPos;
     aNewPos.Anchor = drawing::Alignment_TOP_LEFT;
@@ -1619,8 +1620,8 @@ bool DiagramHelper::setDiagramPositioning( const 
uno::Reference< frame::XModel >
     if( (aNewPos.Secondary + aNewSize.Secondary) > 1.0 )
         aNewPos.Secondary = 1.0 - aNewSize.Secondary;
 
-    xDiaProps->setPropertyValue( "RelativePosition", uno::Any(aNewPos) );
-    xDiaProps->setPropertyValue( "RelativeSize", uno::Any(aNewSize) );
+    xDiagram->setPropertyValue( "RelativePosition", uno::Any(aNewPos) );
+    xDiagram->setPropertyValue( "RelativeSize", uno::Any(aNewSize) );
 
     bChanged = (aOldPos.Anchor!=aNewPos.Anchor) ||
         (aOldPos.Primary!=aNewPos.Primary) ||
@@ -1634,16 +1635,16 @@ awt::Rectangle 
DiagramHelper::getDiagramRectangleFromModel( const uno::Reference
 {
     awt::Rectangle aRet(-1,-1,-1,-1);
 
-    uno::Reference< beans::XPropertySet > xDiaProps( 
ChartModelHelper::findDiagram( xChartModel ), uno::UNO_QUERY );
-    if( !xDiaProps.is() )
+    rtl::Reference< Diagram > xDiagram = ChartModelHelper::findDiagram( 
xChartModel );
+    if( !xDiagram.is() )
         return aRet;
 
     awt::Size aPageSize( ChartModelHelper::getPageSize(xChartModel) );
 
     RelativePosition aRelPos;
     RelativeSize aRelSize;
-    xDiaProps->getPropertyValue("RelativePosition" ) >>= aRelPos;
-    xDiaProps->getPropertyValue("RelativeSize" ) >>= aRelSize;
+    xDiagram->getPropertyValue("RelativePosition" ) >>= aRelPos;
+    xDiagram->getPropertyValue("RelativeSize" ) >>= aRelSize;
 
     awt::Size aAbsSize(
         static_cast< sal_Int32 >( aRelSize.Primary * aPageSize.Width ),
diff --git a/chart2/source/tools/InternalDataProvider.cxx 
b/chart2/source/tools/InternalDataProvider.cxx
index 794a780d5a86..c020313c6e35 100644
--- a/chart2/source/tools/InternalDataProvider.cxx
+++ b/chart2/source/tools/InternalDataProvider.cxx
@@ -29,6 +29,7 @@
 #include <ChartModel.hxx>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ExplicitCategoriesProvider.hxx>
 
 #include <com/sun/star/chart2/data/XDataSequence.hpp>
@@ -313,7 +314,7 @@ InternalDataProvider::InternalDataProvider(
 {
     try
     {
-        Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( 
xChartDoc ) );
+        rtl::Reference< Diagram > xDiagram( ChartModelHelper::findDiagram( 
xChartDoc ) );
         if( xDiagram.is())
         {
             Reference< frame::XModel > xChartModel = xChartDoc;
diff --git a/chart2/source/tools/ObjectIdentifier.cxx 
b/chart2/source/tools/ObjectIdentifier.cxx
index beca934f5752..65a6581da2c2 100644
--- a/chart2/source/tools/ObjectIdentifier.cxx
+++ b/chart2/source/tools/ObjectIdentifier.cxx
@@ -28,6 +28,7 @@
 #include <AxisHelper.hxx>
 #include <servicenames_charttypes.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <unonames.hxx>
 
 #include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
diff --git a/chart2/source/tools/ReferenceSizeProvider.cxx 
b/chart2/source/tools/ReferenceSizeProvider.cxx
index b409c1730e39..ba9b497dac20 100644
--- a/chart2/source/tools/ReferenceSizeProvider.cxx
+++ b/chart2/source/tools/ReferenceSizeProvider.cxx
@@ -21,6 +21,7 @@
 #include <RelativeSizeHelper.hxx>
 #include <ChartModelHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <AxisHelper.hxx>
 #include <com/sun/star/chart2/XChartDocument.hpp>
 #include <com/sun/star/chart2/XTitled.hpp>
diff --git a/chart2/source/tools/TitleHelper.cxx 
b/chart2/source/tools/TitleHelper.cxx
index 83a409984c66..0078e0a29a6c 100644
--- a/chart2/source/tools/TitleHelper.cxx
+++ b/chart2/source/tools/TitleHelper.cxx
@@ -22,6 +22,7 @@
 #include <ChartModelHelper.hxx>
 #include <AxisHelper.hxx>
 #include <DiagramHelper.hxx>
+#include <Diagram.hxx>
 #include <ReferenceSizeProvider.hxx>
 #include <com/sun/star/chart2/FormattedString.hpp>
 #include <com/sun/star/chart2/XChartDocument.hpp>

Reply via email to