chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx | 5 chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx | 16 +- chart2/source/controller/dialogs/res_LegendPosition.cxx | 3 chart2/source/controller/main/ChartController_Insert.cxx | 1 chart2/source/controller/main/ChartController_Tools.cxx | 5 chart2/source/controller/sidebar/ChartElementsPanel.cxx | 11 - chart2/source/inc/Diagram.hxx | 9 - chart2/source/inc/Legend.hxx | 11 + chart2/source/inc/LegendHelper.hxx | 5 chart2/source/inc/ModifyListenerHelper.hxx | 17 ++ chart2/source/inc/ObjectIdentifier.hxx | 4 chart2/source/model/main/Diagram.cxx | 13 + chart2/source/model/main/Legend.cxx | 2 chart2/source/tools/LegendHelper.cxx | 33 ++--- chart2/source/tools/ObjectIdentifier.cxx | 21 +++ chart2/source/view/main/ChartView.cxx | 3 chart2/source/view/main/VLegend.cxx | 66 ++++++---- chart2/source/view/main/VLegend.hxx | 7 - solenv/clang-format/excludelist | 2 19 files changed, 157 insertions(+), 77 deletions(-)
New commits: commit 2781c7a50f3a9bcf48e84a8c5f450b16d576a8e6 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Jan 29 12:45:23 2022 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Sat Jan 29 15:51:30 2022 +0100 use more concrete types in chart2, Legend Change-Id: Ifbf8ddd92eacd4caaf6fdaa061821222e543a1a6 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/129133 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 4d85f5c0c493..fe29d1990c99 100644 --- a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx +++ b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx @@ -19,6 +19,7 @@ #include "Chart2ModelContact.hxx" #include <ChartModelHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <CommonConverters.hxx> #include <servicenames.hxx> @@ -229,7 +230,7 @@ awt::Size Chart2ModelContact::GetLegendSize() const ExplicitValueProvider* pProvider( getExplicitValueProvider() ); if( pProvider ) { - uno::Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( *m_xChartModel.get() ) ); + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( *m_xChartModel.get() ); OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel ) ); aSize = ToSize( pProvider->getRectangleOfObject( aCID ) ); } @@ -242,7 +243,7 @@ awt::Point Chart2ModelContact::GetLegendPosition() const ExplicitValueProvider* pProvider( getExplicitValueProvider() ); if( pProvider ) { - uno::Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( *m_xChartModel.get() ) ); + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( *m_xChartModel.get() ); OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xLegend, m_xChartModel ) ); aPoint = ToPoint( pProvider->getRectangleOfObject( aCID ) ); } diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx index e75bd16e8e24..d27c5ec6bb93 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx @@ -24,6 +24,7 @@ #include <servicenames.hxx> #include <PropertyHelper.hxx> #include <TitleHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <ControllerLockGuard.hxx> #include <DisposeHelper.hxx> @@ -464,15 +465,14 @@ void WrappedHasLegendProperty::setPropertyValue( const Any& rOuterValue, const R try { - Reference< chart2::XLegend > xLegend( LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel(), m_spChart2ModelContact->m_xContext,bNewValue )); + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel(), m_spChart2ModelContact->m_xContext,bNewValue ); if(xLegend.is()) { - Reference< beans::XPropertySet > xLegendProp( xLegend, uno::UNO_QUERY_THROW ); bool bOldValue = true; - Any aAOld = xLegendProp->getPropertyValue("Show"); + Any aAOld = xLegend->getPropertyValue("Show"); aAOld >>= bOldValue; if( bOldValue != bNewValue ) - xLegendProp->setPropertyValue("Show", uno::Any( bNewValue )); + xLegend->setPropertyValue("Show", uno::Any( bNewValue )); } } catch (const uno::Exception&) @@ -486,10 +486,10 @@ Any WrappedHasLegendProperty::getPropertyValue( const Reference< beans::XPropert Any aRet; try { - Reference< beans::XPropertySet > xLegendProp( - LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel() ), uno::UNO_QUERY ); - if( xLegendProp.is()) - aRet = xLegendProp->getPropertyValue("Show"); + rtl::Reference< Legend > xLegend = + LegendHelper::getLegend( *m_spChart2ModelContact->getDocumentModel() ); + if( xLegend.is()) + aRet = xLegend->getPropertyValue("Show"); else aRet <<= false; } diff --git a/chart2/source/controller/dialogs/res_LegendPosition.cxx b/chart2/source/controller/dialogs/res_LegendPosition.cxx index aac0a11368a1..1a890a20f30c 100644 --- a/chart2/source/controller/dialogs/res_LegendPosition.cxx +++ b/chart2/source/controller/dialogs/res_LegendPosition.cxx @@ -19,6 +19,7 @@ #include <res_LegendPosition.hxx> #include <ChartModelHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <ChartModel.hxx> #include <Diagram.hxx> @@ -121,7 +122,7 @@ void LegendPositionResources::writeToModel( const rtl::Reference<::chart::ChartM { bool bShowLegend = m_xCbxShow && m_xCbxShow->get_active(); ChartModel& rModel = *xChartModel; - uno::Reference< beans::XPropertySet > xProp(LegendHelper::getLegend(rModel, m_xCC, bShowLegend), uno::UNO_QUERY); + rtl::Reference< Legend > xProp = LegendHelper::getLegend(rModel, m_xCC, bShowLegend); if( xProp.is() ) { //show diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx index f84afc78a2e8..0298b1bed9da 100644 --- a/chart2/source/controller/main/ChartController_Insert.cxx +++ b/chart2/source/controller/main/ChartController_Insert.cxx @@ -50,6 +50,7 @@ #include <ErrorBarItemConverter.hxx> #include <DataSeriesHelper.hxx> #include <ObjectNameProvider.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <com/sun/star/chart2/XRegressionCurve.hpp> diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx index 850ed40b1d11..c44e9c32f62f 100644 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ b/chart2/source/controller/main/ChartController_Tools.cxx @@ -34,6 +34,7 @@ #include <chartview/DrawModelWrapper.hxx> #include "ChartTransferable.hxx" #include <DrawViewWrapper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <AxisHelper.hxx> #include <RegressionCurveHelper.hxx> @@ -824,7 +825,7 @@ void ChartController::executeDispatch_ToggleLegend() UndoGuard aUndoGuard( SchResId( STR_ACTION_TOGGLE_LEGEND ), m_xUndoManager ); ChartModel& rModel = dynamic_cast<ChartModel&>(*xModel); - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(rModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(rModel); bool bChanged = false; if( xLegendProp.is()) { @@ -844,7 +845,7 @@ void ChartController::executeDispatch_ToggleLegend() } else { - xLegendProp.set( LegendHelper::getLegend(rModel, m_xCC, true), uno::UNO_QUERY ); + xLegendProp = LegendHelper::getLegend(rModel, m_xCC, true); if( xLegendProp.is()) bChanged = true; } diff --git a/chart2/source/controller/sidebar/ChartElementsPanel.cxx b/chart2/source/controller/sidebar/ChartElementsPanel.cxx index 1d495dd209f5..cfa821d3bad8 100644 --- a/chart2/source/controller/sidebar/ChartElementsPanel.cxx +++ b/chart2/source/controller/sidebar/ChartElementsPanel.cxx @@ -28,6 +28,7 @@ #include <ChartController.hxx> #include <comphelper/processfactory.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include <ChartModelHelper.hxx> #include <AxisHelper.hxx> @@ -76,7 +77,7 @@ bool isLegendVisible(const css::uno::Reference<css::frame::XModel>& xModel) if (!pModel) return false; - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(*pModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if( xLegendProp.is()) { try @@ -113,7 +114,7 @@ bool isLegendOverlay(const css::uno::Reference<css::frame::XModel>& xModel) if (!pModel) return false; - Reference< beans::XPropertySet > xLegendProp(LegendHelper::getLegend(*pModel), uno::UNO_QUERY); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if( xLegendProp.is()) { try @@ -138,7 +139,7 @@ void setLegendOverlay(const css::uno::Reference<css::frame::XModel>& xModel, boo if (!pModel) return; - Reference<beans::XPropertySet> xLegendProp(LegendHelper::getLegend(*pModel), uno::UNO_QUERY); + rtl::Reference<Legend> xLegendProp = LegendHelper::getLegend(*pModel); if (!xLegendProp.is()) return; @@ -239,7 +240,7 @@ sal_Int32 getLegendPos(const css::uno::Reference<css::frame::XModel>& xModel) if (!pModel) return -1; - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(*pModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if (!xLegendProp.is()) return -1; @@ -266,7 +267,7 @@ void setLegendPos(const css::uno::Reference<css::frame::XModel>& xModel, sal_Int if (!pModel) return; - Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend(*pModel), uno::UNO_QUERY ); + rtl::Reference< Legend > xLegendProp = LegendHelper::getLegend(*pModel); if (!xLegendProp.is()) return; diff --git a/chart2/source/inc/Diagram.hxx b/chart2/source/inc/Diagram.hxx index 5d6dc79a1ee1..16beacd59894 100644 --- a/chart2/source/inc/Diagram.hxx +++ b/chart2/source/inc/Diagram.hxx @@ -39,8 +39,9 @@ namespace com::sun::star::uno { class XComponentContext; } namespace chart { -class Wall; class BaseCoordinateSystem; +class Legend; +class Wall; namespace impl { @@ -144,6 +145,9 @@ public: const tCoordinateSystemContainerType & getBaseCoordinateSystems() { return m_aCoordSystems; } + const rtl::Reference< ::chart::Legend > & getLegend2() const { return m_xLegend; } + void setLegend(const rtl::Reference< ::chart::Legend > &); + private: // ____ XModifyListener ____ @@ -171,8 +175,7 @@ private: css::uno::Reference< css::chart2::XTitle > m_xTitle; - css::uno::Reference< css::chart2::XLegend > - m_xLegend; + rtl::Reference< ::chart::Legend > m_xLegend; css::uno::Reference< css::chart2::XColorScheme > m_xColorScheme; diff --git a/chart2/source/model/main/Legend.hxx b/chart2/source/inc/Legend.hxx similarity index 95% rename from chart2/source/model/main/Legend.hxx rename to chart2/source/inc/Legend.hxx index 8748a4592393..728d60d8aa52 100644 --- a/chart2/source/model/main/Legend.hxx +++ b/chart2/source/inc/Legend.hxx @@ -18,14 +18,15 @@ */ #pragma once -#include <OPropertySet.hxx> +#include "OPropertySet.hxx" #include <cppuhelper/basemutex.hxx> #include <cppuhelper/implbase.hxx> #include <comphelper/uno3.hxx> #include <com/sun/star/chart2/XLegend.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/util/XCloneable.hpp> -#include <ModifyListenerHelper.hxx> +#include "ModifyListenerHelper.hxx" +#include "charttoolsdllapi.hxx" namespace chart { @@ -41,7 +42,7 @@ typedef ::cppu::WeakImplHelper< Legend_Base; } -class Legend final : +class OOO_DLLPUBLIC_CHARTTOOLS Legend final : public cppu::BaseMutex, public impl::Legend_Base, public ::property::OPropertySet @@ -60,15 +61,16 @@ public: /// merge XTypeProvider implementations DECLARE_XTYPEPROVIDER() -private: explicit Legend( const Legend & rOther ); +private: // ____ OPropertySet ____ virtual void GetDefaultValue( sal_Int32 nHandle, css::uno::Any& rAny ) const override; // ____ OPropertySet ____ virtual ::cppu::IPropertyArrayHelper & SAL_CALL getInfoHelper() override; +public: // ____ XPropertySet ____ virtual css::uno::Reference< css::beans::XPropertySetInfo > SAL_CALL getPropertySetInfo() override; @@ -82,6 +84,7 @@ private: virtual void SAL_CALL removeModifyListener( const css::uno::Reference< css::util::XModifyListener >& aListener ) override; +private: // ____ XModifyListener ____ virtual void SAL_CALL modified( const css::lang::EventObject& aEvent ) override; diff --git a/chart2/source/inc/LegendHelper.hxx b/chart2/source/inc/LegendHelper.hxx index ca2dc0ef8e16..f2bf2e55fefb 100644 --- a/chart2/source/inc/LegendHelper.hxx +++ b/chart2/source/inc/LegendHelper.hxx @@ -30,17 +30,18 @@ namespace com::sun::star::uno { class XComponentContext; } namespace chart { class Diagram; +class Legend; class OOO_DLLPUBLIC_CHARTTOOLS LegendHelper { public: - static css::uno::Reference< css::chart2::XLegend > + static rtl::Reference< ::chart::Legend > showLegend( ChartModel& rModel , const css::uno::Reference< css::uno::XComponentContext >& xContext ); static void hideLegend( ChartModel& rModel ); - static css::uno::Reference< css::chart2::XLegend > + static rtl::Reference< ::chart::Legend > getLegend( ChartModel& rModel , const css::uno::Reference< css::uno::XComponentContext >& xContext = nullptr , bool bCreate = false ); diff --git a/chart2/source/inc/ModifyListenerHelper.hxx b/chart2/source/inc/ModifyListenerHelper.hxx index b65530d9f229..abee24032bae 100644 --- a/chart2/source/inc/ModifyListenerHelper.hxx +++ b/chart2/source/inc/ModifyListenerHelper.hxx @@ -157,6 +157,14 @@ void addListener( aFunctor( xObject ); } } +template< class T > +void addListener( + const rtl::Reference<T> & xBroadcaster, + const css::uno::Reference< css::util::XModifyListener > & xListener ) +{ + if( xBroadcaster && xListener ) + xBroadcaster->addModifyListener( xListener ); +} template< class Container > void addListenerToAllElements( @@ -200,6 +208,15 @@ void removeListener( } } +template< class T > +void removeListener( + const rtl::Reference<T> & xBroadcaster, + const css::uno::Reference< css::util::XModifyListener > & xListener ) +{ + if( xBroadcaster && xListener ) + xBroadcaster->removeModifyListener( xListener ); +} + template< class Container > void removeListenerFromAllElements( const Container & rContainer, diff --git a/chart2/source/inc/ObjectIdentifier.hxx b/chart2/source/inc/ObjectIdentifier.hxx index 3410476083d9..94b00e1d5ea6 100644 --- a/chart2/source/inc/ObjectIdentifier.hxx +++ b/chart2/source/inc/ObjectIdentifier.hxx @@ -44,6 +44,7 @@ namespace chart { class BaseCoordinateSystem; class Diagram; +class Legend; enum ObjectType { @@ -107,6 +108,9 @@ public: static OUString createClassifiedIdentifierForObject( const css::uno::Reference< css::uno::XInterface >& xObject , const rtl::Reference<::chart::ChartModel>& xChartModel ); + static OUString createClassifiedIdentifierForObject( + const rtl::Reference< ::chart::Legend >& xObject + , const rtl::Reference<::chart::ChartModel>& xChartModel ); static OUString createClassifiedIdentifierForParticle( const OUString& rParticle ); diff --git a/chart2/source/model/main/Diagram.cxx b/chart2/source/model/main/Diagram.cxx index 91b4a6b31c7b..60bcbd5124f7 100644 --- a/chart2/source/model/main/Diagram.cxx +++ b/chart2/source/model/main/Diagram.cxx @@ -31,6 +31,7 @@ #include <SceneProperties.hxx> #include <unonames.hxx> #include <BaseCoordinateSystem.hxx> +#include <Legend.hxx> #include <basegfx/numeric/ftools.hxx> #include <com/sun/star/beans/PropertyAttribute.hpp> @@ -274,7 +275,8 @@ Diagram::Diagram( const Diagram & rOther ) : if ( rOther.m_xFloor ) m_xFloor = new Wall( *rOther.m_xFloor ); m_xTitle.set( CloneHelper::CreateRefClone< chart2::XTitle >()( rOther.m_xTitle )); - m_xLegend.set( CloneHelper::CreateRefClone< chart2::XLegend >()( rOther.m_xLegend )); + if (rOther.m_xLegend) + m_xLegend = new Legend(*rOther.m_xLegend); if ( m_xWall ) m_xWall->addModifyListener( m_xModifyEventForwarder ); @@ -349,7 +351,14 @@ uno::Reference< chart2::XLegend > SAL_CALL Diagram::getLegend() void SAL_CALL Diagram::setLegend( const uno::Reference< chart2::XLegend >& xNewLegend ) { - Reference< chart2::XLegend > xOldLegend; + auto pLegend = dynamic_cast<Legend*>(xNewLegend.get()); + assert(!xNewLegend || pLegend); + setLegend(rtl::Reference< Legend >(pLegend)); +} + +void Diagram::setLegend( const rtl::Reference< Legend >& xNewLegend ) +{ + rtl::Reference< Legend > xOldLegend; { MutexGuard aGuard( m_aMutex ); if( m_xLegend == xNewLegend ) diff --git a/chart2/source/model/main/Legend.cxx b/chart2/source/model/main/Legend.cxx index 27eae67764ed..741b90039370 100644 --- a/chart2/source/model/main/Legend.cxx +++ b/chart2/source/model/main/Legend.cxx @@ -17,7 +17,7 @@ * the License at http://www.apache.org/licenses/LICENSE-2.0 . */ -#include "Legend.hxx" +#include <Legend.hxx> #include <LinePropertiesHelper.hxx> #include <FillProperties.hxx> #include <CharacterProperties.hxx> diff --git a/chart2/source/tools/LegendHelper.cxx b/chart2/source/tools/LegendHelper.cxx index 7d040128959c..dddcf67d0c08 100644 --- a/chart2/source/tools/LegendHelper.cxx +++ b/chart2/source/tools/LegendHelper.cxx @@ -18,6 +18,7 @@ */ #include <LegendHelper.hxx> +#include <Legend.hxx> #include <ChartModel.hxx> #include <Diagram.hxx> #include <com/sun/star/chart/ChartLegendExpansion.hpp> @@ -32,31 +33,30 @@ using ::com::sun::star::uno::Reference; namespace chart { -Reference< chart2::XLegend > LegendHelper::showLegend( ChartModel& rModel +rtl::Reference< Legend > LegendHelper::showLegend( ChartModel& rModel , const uno::Reference< uno::XComponentContext >& xContext ) { - uno::Reference< chart2::XLegend > xLegend = LegendHelper::getLegend( rModel, xContext, true ); - uno::Reference< beans::XPropertySet > xProp( xLegend, uno::UNO_QUERY ); - if( xProp.is()) + rtl::Reference< Legend > xLegend = LegendHelper::getLegend( rModel, xContext, true ); + if( xLegend.is()) { - xProp->setPropertyValue( "Show", uno::Any(true) ); + xLegend->setPropertyValue( "Show", uno::Any(true) ); chart2::RelativePosition aRelativePosition; - if( !(xProp->getPropertyValue( "RelativePosition") >>= aRelativePosition) ) + if( !(xLegend->getPropertyValue( "RelativePosition") >>= aRelativePosition) ) { chart2::LegendPosition ePos = chart2::LegendPosition_LINE_END; - if( !(xProp->getPropertyValue( "AnchorPosition") >>= ePos ) ) - xProp->setPropertyValue( "AnchorPosition", uno::Any( ePos )); + if( !(xLegend->getPropertyValue( "AnchorPosition") >>= ePos ) ) + xLegend->setPropertyValue( "AnchorPosition", uno::Any( ePos )); css::chart::ChartLegendExpansion eExpansion = ( ePos == chart2::LegendPosition_LINE_END || ePos == chart2::LegendPosition_LINE_START ) ? css::chart::ChartLegendExpansion_HIGH : css::chart::ChartLegendExpansion_WIDE; - if( !(xProp->getPropertyValue( "Expansion") >>= eExpansion ) ) - xProp->setPropertyValue( "Expansion", uno::Any( eExpansion )); + if( !(xLegend->getPropertyValue( "Expansion") >>= eExpansion ) ) + xLegend->setPropertyValue( "Expansion", uno::Any( eExpansion )); - xProp->setPropertyValue( "RelativePosition", uno::Any()); + xLegend->setPropertyValue( "RelativePosition", uno::Any()); } } @@ -73,23 +73,22 @@ void LegendHelper::hideLegend( ChartModel& rModel ) } } -uno::Reference< chart2::XLegend > LegendHelper::getLegend( +rtl::Reference< Legend > LegendHelper::getLegend( ChartModel& rModel , const uno::Reference< uno::XComponentContext >& xContext , bool bCreate ) { - uno::Reference< chart2::XLegend > xResult; + rtl::Reference< Legend > xResult; try { - uno::Reference< chart2::XDiagram > xDia( rModel.getFirstDiagram()); + rtl::Reference< Diagram > xDia( rModel.getFirstChartDiagram()); if( xDia.is() ) { - xResult.set( xDia->getLegend() ); + xResult = xDia->getLegend2(); if( bCreate && !xResult.is() && xContext.is() ) { - xResult.set( xContext->getServiceManager()->createInstanceWithContext( - "com.sun.star.chart2.Legend", xContext ), uno::UNO_QUERY ); + xResult = new Legend(); xDia->setLegend( xResult ); } } diff --git a/chart2/source/tools/ObjectIdentifier.cxx b/chart2/source/tools/ObjectIdentifier.cxx index bfa4796f9598..2f940a06aad1 100644 --- a/chart2/source/tools/ObjectIdentifier.cxx +++ b/chart2/source/tools/ObjectIdentifier.cxx @@ -372,6 +372,27 @@ OUString ObjectIdentifier::createClassifiedIdentifierForObject( return aRet; } +OUString ObjectIdentifier::createClassifiedIdentifierForObject( + const rtl::Reference< Legend >& xLegend + , const rtl::Reference<::chart::ChartModel>& xChartModel ) +{ + try + { + if( xLegend.is() ) + { + return createClassifiedIdentifierForParticle( createParticleForLegend( xChartModel ) ); + } + } + catch(const uno::Exception&) + { + DBG_UNHANDLED_EXCEPTION("chart2"); + } + + OSL_FAIL("give object could not be identified in createClassifiedIdentifierForObject"); + + return OUString(); +} + OUString ObjectIdentifier::createClassifiedIdentifierForParticle( const OUString& rParticle ) { diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx index 245181f6a90a..2fee4c3059be 100644 --- a/chart2/source/view/main/ChartView.cxx +++ b/chart2/source/view/main/ChartView.cxx @@ -33,6 +33,7 @@ #include <VSeriesPlotter.hxx> #include <CommonConverters.hxx> #include <TitleHelper.hxx> +#include <Legend.hxx> #include <LegendHelper.hxx> #include "VLegend.hxx" #include <PropertyMapper.hxx> @@ -2176,7 +2177,7 @@ std::shared_ptr<VTitle> lcl_createTitle( TitleHelper::eTitleType eType return apVTitle; } -bool lcl_createLegend( const uno::Reference< XLegend > & xLegend +bool lcl_createLegend( const rtl::Reference< Legend > & xLegend , const rtl::Reference<SvxShapeGroupAnyD>& xPageShapes , const uno::Reference< uno::XComponentContext > & xContext , awt::Rectangle & rRemainingSpace diff --git a/chart2/source/view/main/VLegend.cxx b/chart2/source/view/main/VLegend.cxx index ce2bb99047a4..4d32fe04bc90 100644 --- a/chart2/source/view/main/VLegend.cxx +++ b/chart2/source/view/main/VLegend.cxx @@ -19,6 +19,7 @@ #include "VLegend.hxx" #include "VButton.hxx" +#include <Legend.hxx> #include <PropertyMapper.hxx> #include <ChartModel.hxx> #include <ObjectIdentifier.hxx> @@ -869,7 +870,7 @@ std::vector<std::shared_ptr<VButton>> lcl_createButtons( } // anonymous namespace VLegend::VLegend( - const Reference< XLegend > & xLegend, + const rtl::Reference< Legend > & xLegend, const Reference< uno::XComponentContext > & xContext, std::vector< LegendEntryProvider* >&& rLegendEntryProviderList, const rtl::Reference<SvxShapeGroupAnyD>& xTargetPage, @@ -907,6 +908,24 @@ bool VLegend::isVisible( const Reference< XLegend > & xLegend ) return bShow; } +bool VLegend::isVisible( const rtl::Reference< Legend > & xLegend ) +{ + if( ! xLegend.is()) + return false; + + bool bShow = false; + try + { + xLegend->getPropertyValue( "Show") >>= bShow; + } + catch( const uno::Exception & ) + { + DBG_UNHANDLED_EXCEPTION("chart2"); + } + + return bShow; +} + void VLegend::createShapes( const awt::Size & rAvailableSpace, const awt::Size & rPageSize, @@ -930,36 +949,32 @@ void VLegend::createShapes( tPropertyValues aLineFillProperties; tPropertyValues aTextProperties; - Reference< beans::XPropertySet > xLegendProp( m_xLegend, uno::UNO_QUERY ); css::chart::ChartLegendExpansion eExpansion = css::chart::ChartLegendExpansion_HIGH; awt::Size aLegendSize( rAvailableSpace ); bool bCustom = false; LegendPosition eLegendPosition = LegendPosition_LINE_END; - if (xLegendProp.is()) + // get Expansion property + m_xLegend->getPropertyValue("Expansion") >>= eExpansion; + if( eExpansion == css::chart::ChartLegendExpansion_CUSTOM ) { - // get Expansion property - xLegendProp->getPropertyValue("Expansion") >>= eExpansion; - if( eExpansion == css::chart::ChartLegendExpansion_CUSTOM ) + RelativeSize aRelativeSize; + if (m_xLegend->getPropertyValue("RelativeSize") >>= aRelativeSize) { - RelativeSize aRelativeSize; - if (xLegendProp->getPropertyValue("RelativeSize") >>= aRelativeSize) - { - aLegendSize.Width = static_cast<sal_Int32>(::rtl::math::approxCeil( aRelativeSize.Primary * rPageSize.Width )); - aLegendSize.Height = static_cast<sal_Int32>(::rtl::math::approxCeil( aRelativeSize.Secondary * rPageSize.Height )); - bCustom = true; - } - else - { - eExpansion = css::chart::ChartLegendExpansion_HIGH; - } + aLegendSize.Width = static_cast<sal_Int32>(::rtl::math::approxCeil( aRelativeSize.Primary * rPageSize.Width )); + aLegendSize.Height = static_cast<sal_Int32>(::rtl::math::approxCeil( aRelativeSize.Secondary * rPageSize.Height )); + bCustom = true; + } + else + { + eExpansion = css::chart::ChartLegendExpansion_HIGH; } - xLegendProp->getPropertyValue("AnchorPosition") >>= eLegendPosition; - lcl_getProperties( xLegendProp, aLineFillProperties, aTextProperties, rPageSize ); } + m_xLegend->getPropertyValue("AnchorPosition") >>= eLegendPosition; + lcl_getProperties( m_xLegend, aLineFillProperties, aTextProperties, rPageSize ); // create entries - double fViewFontSize = lcl_CalcViewFontSize( xLegendProp, rPageSize );//todo + double fViewFontSize = lcl_CalcViewFontSize( m_xLegend, rPageSize );//todo // #i109336# Improve auto positioning in chart sal_Int32 nSymbolHeight = static_cast< sal_Int32 >( fViewFontSize * 0.6 ); sal_Int32 nSymbolWidth = nSymbolHeight; @@ -985,13 +1000,13 @@ void VLegend::createShapes( if (pLegendEntryProvider) { std::vector<ViewLegendEntry> aNewEntries = pLegendEntryProvider->createLegendEntries( - aMaxSymbolExtent, eLegendPosition, xLegendProp, + aMaxSymbolExtent, eLegendPosition, m_xLegend, xLegendContainer, m_xContext, mrModel); aViewEntries.insert( aViewEntries.end(), aNewEntries.begin(), aNewEntries.end() ); } } - bool bSymbolsLeftSide = lcl_shouldSymbolsBePlacedOnTheLeftSide( xLegendProp, m_nDefaultWritingMode ); + bool bSymbolsLeftSide = lcl_shouldSymbolsBePlacedOnTheLeftSide( m_xLegend, m_nDefaultWritingMode ); uno::Reference<chart2::data::XPivotTableDataProvider> xPivotTableDataProvider( mrModel.getDataProvider(), uno::UNO_QUERY ); bool bIsPivotChart = xPivotTableDataProvider.is(); @@ -1055,18 +1070,17 @@ void VLegend::changePosition( { // determine position and alignment depending on default position awt::Size aLegendSize = m_xShape->getSize(); - Reference< beans::XPropertySet > xLegendProp( m_xLegend, uno::UNO_QUERY_THROW ); chart2::RelativePosition aRelativePosition; bool bDefaultLegendSize = rDefaultLegendSize.Width != 0 || rDefaultLegendSize.Height != 0; bool bAutoPosition = - ! (xLegendProp->getPropertyValue( "RelativePosition") >>= aRelativePosition); + ! (m_xLegend->getPropertyValue( "RelativePosition") >>= aRelativePosition); LegendPosition ePos = LegendPosition_LINE_END; - xLegendProp->getPropertyValue( "AnchorPosition") >>= ePos; + m_xLegend->getPropertyValue( "AnchorPosition") >>= ePos; bool bOverlay = false; - xLegendProp->getPropertyValue("Overlay") >>= bOverlay; + m_xLegend->getPropertyValue("Overlay") >>= bOverlay; //calculate position if( bAutoPosition ) { diff --git a/chart2/source/view/main/VLegend.hxx b/chart2/source/view/main/VLegend.hxx index c8931ce9f931..7e8435a7c297 100644 --- a/chart2/source/view/main/VLegend.hxx +++ b/chart2/source/view/main/VLegend.hxx @@ -35,12 +35,13 @@ namespace com::sun::star::uno { class XComponentContext; } namespace chart { +class Legend; class LegendEntryProvider; class VLegend { public: - VLegend( const css::uno::Reference< css::chart2::XLegend > & xLegend, + VLegend( const rtl::Reference< ::chart::Legend > & xLegend, const css::uno::Reference< css::uno::XComponentContext > & xContext, std::vector< LegendEntryProvider* >&& rLegendEntryProviderList, const rtl::Reference<SvxShapeGroupAnyD>& xTargetPage, @@ -68,10 +69,12 @@ public: static bool isVisible( const css::uno::Reference< css::chart2::XLegend > & xLegend ); + static bool isVisible( + const rtl::Reference< ::chart::Legend > & xLegend ); private: rtl::Reference<SvxShapeGroupAnyD> m_xTarget; - css::uno::Reference< css::chart2::XLegend > m_xLegend; + rtl::Reference<::chart::Legend> m_xLegend; rtl::Reference< SvxShapeGroup > m_xShape; ChartModel& mrModel; diff --git a/solenv/clang-format/excludelist b/solenv/clang-format/excludelist index 90ff78ab4dc9..1d2c635eed62 100644 --- a/solenv/clang-format/excludelist +++ b/solenv/clang-format/excludelist @@ -1036,6 +1036,7 @@ chart2/source/inc/FormattedStringHelper.hxx chart2/source/inc/InternalData.hxx chart2/source/inc/InternalDataProvider.hxx chart2/source/inc/LabeledDataSequence.hxx +chart2/source/inc/Legend.hxx chart2/source/inc/LegendHelper.hxx chart2/source/inc/LifeTime.hxx chart2/source/inc/LinePropertiesHelper.hxx @@ -1100,7 +1101,6 @@ chart2/source/model/main/FormattedString.hxx chart2/source/model/main/GridProperties.cxx chart2/source/model/main/GridProperties.hxx chart2/source/model/main/Legend.cxx -chart2/source/model/main/Legend.hxx chart2/source/model/main/PageBackground.cxx chart2/source/model/main/PageBackground.hxx chart2/source/model/main/PolarCoordinateSystem.cxx