chart2/Library_chart2.mk | 1 chart2/inc/ChartView.hxx | 54 ++ chart2/inc/pch/precompiled_chart2.hxx | 1 chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx | 9 chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx | 1 chart2/source/controller/dialogs/DataBrowserModel.cxx | 4 chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx | 3 chart2/source/controller/inc/ObjectHierarchy.hxx | 10 chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx | 8 chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx | 6 chart2/source/controller/main/ChartController_Properties.cxx | 11 chart2/source/controller/main/ChartController_Window.cxx | 3 chart2/source/controller/main/ElementSelector.cxx | 2 chart2/source/controller/main/ObjectHierarchy.cxx | 6 chart2/source/controller/uitest/uiobject.cxx | 3 chart2/source/inc/chartview/ExplicitValueProvider.hxx | 92 ---- chart2/source/view/axes/VCoordinateSystem.cxx | 4 chart2/source/view/main/ChartView.cxx | 149 +++++++ chart2/source/view/main/ExplicitValueProvider.cxx | 190 ---------- 19 files changed, 221 insertions(+), 336 deletions(-)
New commits: commit 215500ea4d1f6f2d7630ab161d59c9a265425c56 Author: Noel Grandin <noelgran...@gmail.com> AuthorDate: Sat Mar 29 09:40:02 2025 +0200 Commit: Noel Grandin <noel.gran...@collabora.co.uk> CommitDate: Mon Mar 31 18:49:10 2025 +0200 merge ExplicitValueProvider interface into ChartView Change-Id: I4e5ef8c00b8e1b001d0f711c0c15814d316e2905 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/183479 Reviewed-by: Noel Grandin <noel.gran...@collabora.co.uk> Tested-by: Jenkins diff --git a/chart2/Library_chart2.mk b/chart2/Library_chart2.mk index 34e6f39fd31d..64eff3eb021a 100644 --- a/chart2/Library_chart2.mk +++ b/chart2/Library_chart2.mk @@ -260,7 +260,6 @@ $(eval $(call gb_Library_add_exception_objects,chart2,\ chart2/source/view/main/DataPointSymbolSupplier \ chart2/source/view/main/DataTableView \ chart2/source/view/main/DrawModelWrapper \ - chart2/source/view/main/ExplicitValueProvider \ chart2/source/view/main/LabelPositionHelper \ chart2/source/view/main/Linear3DTransformation \ chart2/source/view/main/PlotterBase \ diff --git a/chart2/inc/ChartView.hxx b/chart2/inc/ChartView.hxx index 7c9cd0ceb78a..05147f669d1f 100644 --- a/chart2/inc/ChartView.hxx +++ b/chart2/inc/ChartView.hxx @@ -18,7 +18,6 @@ */ #pragma once -#include <chartview/ExplicitValueProvider.hxx> #include <cppuhelper/implbase.hxx> #include <comphelper/interfacecontainer4.hxx> @@ -49,15 +48,21 @@ namespace com::sun::star::drawing { class XShapes; } namespace com::sun::star::io { class XOutputStream; } namespace com::sun::star::uno { class XComponentContext; } namespace com::sun::star::util { class XUpdatable2; } +namespace com::sun::star::util { class XNumberFormatsSupplier; } class SdrPage; namespace chart { -class VCoordinateSystem; +class Axis; +class BaseCoordinateSystem; +class ChartModel; +struct CreateShapeParam2D; class DrawModelWrapper; +struct ExplicitIncrementData; +struct ExplicitScaleData; +class VCoordinateSystem; class VDataSeries; -struct CreateShapeParam2D; struct TimeBasedInfo { @@ -93,7 +98,6 @@ class ChartView final : public ::cppu::WeakImplHelper< ,css::lang::XMultiServiceFactory ,css::qa::XDumper > - , public ExplicitValueProvider , private SfxListener { private: @@ -113,19 +117,25 @@ public: // ___lang::XInitialization___ virtual void SAL_CALL initialize( const css::uno::Sequence< css::uno::Any >& aArguments ) override; - // ___ExplicitValueProvider___ - virtual bool getExplicitValuesForAxis( - rtl::Reference< Axis > xAxis + /** Gives calculated scale and increment values for a given xAxis in the current view. + In contrast to the model data these explicit values are always complete as missing auto properties are calculated. + If the given Axis could not be found or for another reason no correct output can be given false is returned. + */ + bool getExplicitValuesForAxis( + const rtl::Reference< Axis > & xAxis , ExplicitScaleData& rExplicitScale - , ExplicitIncrementData& rExplicitIncrement ) override; - virtual rtl::Reference< SvxShape > - getShapeForCID( const OUString& rObjectCID ) override; + , ExplicitIncrementData& rExplicitIncrement ); + rtl::Reference< SvxShape > + getShapeForCID( const OUString& rObjectCID ); - virtual css::awt::Rectangle getRectangleOfObject( const OUString& rObjectCID, bool bSnapRect=false ) override; + /** for rotated objects the shape size and position differs from the visible rectangle + if bSnapRect is set to true you get the resulting visible position (left-top) and size + */ + css::awt::Rectangle getRectangleOfObject( const OUString& rObjectCID, bool bSnapRect=false ); - virtual css::awt::Rectangle getDiagramRectangleExcludingAxes() override; + css::awt::Rectangle getDiagramRectangleExcludingAxes(); - std::shared_ptr< DrawModelWrapper > getDrawModelWrapper() override; + std::shared_ptr< DrawModelWrapper > getDrawModelWrapper(); // ___XTransferable___ virtual css::uno::Any SAL_CALL getTransferData( const css::datatransfer::DataFlavor& aFlavor ) override; @@ -181,6 +191,24 @@ public: void dumpAsXml(xmlTextWriterPtr pWriter) const; + static css::awt::Rectangle + AddSubtractAxisTitleSizes( + ChartModel& rModel + , ChartView* pChartView + , const css::awt::Rectangle& rPositionAndSize, bool bSubtract ); + + static sal_Int32 getExplicitNumberFormatKeyForAxis( + const rtl::Reference< ::chart::Axis >& xAxis + , const rtl::Reference< ::chart::BaseCoordinateSystem > & xCorrespondingCoordinateSystem + , const rtl::Reference<::chart::ChartModel>& xChartDoc); + + static sal_Int32 getExplicitNumberFormatKeyForDataLabel( + const css::uno::Reference< css::beans::XPropertySet >& xSeriesOrPointProp ); + + static sal_Int32 getExplicitPercentageNumberFormatKeyForDataLabel( + const css::uno::Reference< css::beans::XPropertySet >& xSeriesOrPointProp + , const css::uno::Reference< css::util::XNumberFormatsSupplier >& xNumberFormatsSupplier ); + private: //methods void createShapes(); void createShapes2D( const css::awt::Size& rPageSize ); diff --git a/chart2/inc/pch/precompiled_chart2.hxx b/chart2/inc/pch/precompiled_chart2.hxx index 53c4fc617a59..650f30948bec 100644 --- a/chart2/inc/pch/precompiled_chart2.hxx +++ b/chart2/inc/pch/precompiled_chart2.hxx @@ -204,7 +204,6 @@ #include <basegfx/vector/b3dvector.hxx> #include <chartview/ChartSfxItemIds.hxx> #include <chartview/DrawModelWrapper.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <com/sun/star/awt/DeviceInfo.hpp> #include <com/sun/star/awt/FontDescriptor.hpp> #include <com/sun/star/awt/FontSlant.hpp> diff --git a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx index f2b2d3c0a685..7c8aaf08f11b 100644 --- a/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx +++ b/chart2/source/controller/chartapiwrapper/Chart2ModelContact.cxx @@ -24,7 +24,6 @@ #include <CommonConverters.hxx> #include <servicenames.hxx> #include <ObjectIdentifier.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <chartview/DrawModelWrapper.hxx> #include <Axis.hxx> #include <AxisHelper.hxx> @@ -145,14 +144,14 @@ sal_Int32 Chart2ModelContact::getExplicitNumberFormatKeyForAxis( AxisHelper::getCoordinateSystemOfAxis( xAxis, m_xChartModel.get()->getFirstChartDiagram() ) ); - return ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( xAxis, xCooSys + return ChartView::getExplicitNumberFormatKeyForAxis( xAxis, xCooSys , m_xChartModel.get() ); } sal_Int32 Chart2ModelContact::getExplicitNumberFormatKeyForSeries( const Reference< chart2::XDataSeries >& xSeries ) { - return ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( + return ChartView::getExplicitNumberFormatKeyForDataLabel( uno::Reference< beans::XPropertySet >( xSeries, uno::UNO_QUERY )); } @@ -163,7 +162,7 @@ awt::Size Chart2ModelContact::GetPageSize() const awt::Rectangle Chart2ModelContact::SubstractAxisTitleSizes( const awt::Rectangle& rPositionRect ) { - awt::Rectangle aRect = ExplicitValueProvider::AddSubtractAxisTitleSizes( + awt::Rectangle aRect = ChartView::AddSubtractAxisTitleSizes( *m_xChartModel.get(), getChartView().get(), rPositionRect, true ); return aRect; } @@ -173,7 +172,7 @@ awt::Rectangle Chart2ModelContact::GetDiagramRectangleIncludingTitle() const awt::Rectangle aRect( GetDiagramRectangleIncludingAxes() ); //add axis title sizes to the diagram size - aRect = ExplicitValueProvider::AddSubtractAxisTitleSizes( + aRect = ChartView::AddSubtractAxisTitleSizes( *m_xChartModel.get(), getChartView().get(), aRect, false ); return aRect; diff --git a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx index ab6de48e0fe1..0450207e3255 100644 --- a/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx +++ b/chart2/source/controller/chartapiwrapper/ChartDocumentWrapper.cxx @@ -30,7 +30,6 @@ #include <ControllerLockGuard.hxx> #include <DisposeHelper.hxx> #include "DataSeriesPointWrapper.hxx" -#include <chartview/ExplicitValueProvider.hxx> #include <chartview/DrawModelWrapper.hxx> #include "Chart2ModelContact.hxx" #include <BaseCoordinateSystem.hxx> diff --git a/chart2/source/controller/dialogs/DataBrowserModel.cxx b/chart2/source/controller/dialogs/DataBrowserModel.cxx index dd333023a64c..4b2a8ecc9776 100644 --- a/chart2/source/controller/dialogs/DataBrowserModel.cxx +++ b/chart2/source/controller/dialogs/DataBrowserModel.cxx @@ -22,13 +22,13 @@ #include <ChartModelHelper.hxx> #include <ChartType.hxx> #include <ChartTypeManager.hxx> +#include <ChartView.hxx> #include <Diagram.hxx> #include <DataSeries.hxx> #include <DataSeriesHelper.hxx> #include <ControllerLockGuard.hxx> #include <StatisticsHelper.hxx> #include <ChartTypeHelper.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <ExplicitCategoriesProvider.hxx> #include <BaseCoordinateSystem.hxx> #include <ChartModel.hxx> @@ -836,7 +836,7 @@ void DataBrowserModel::updateFromModel() if( aRole == aRoleForDataLabelNumberFormat ) { - nSequenceNumberFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( + nSequenceNumberFormatKey = ChartView::getExplicitNumberFormatKeyForDataLabel( xSeries); } else if( aRole == "values-x" ) diff --git a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx index 693af9b5caae..9b098feb1b09 100644 --- a/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx +++ b/chart2/source/controller/dialogs/dlg_InsertErrorBars.cxx @@ -20,7 +20,6 @@ #include <dlg_InsertErrorBars.hxx> #include <res_ErrorBar.hxx> #include <chartview/ExplicitScaleValues.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <ChartModel.hxx> #include <ChartView.hxx> #include <ObjectIdentifier.hxx> @@ -69,7 +68,7 @@ double InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( { double fStepWidth = 0.001; - ExplicitValueProvider* pExplicitValueProvider( xChartView.get() ); + ChartView* pExplicitValueProvider( xChartView.get() ); if( pExplicitValueProvider ) { rtl::Reference< Diagram > xDiagram( xChartModel->getFirstChartDiagram() ); diff --git a/chart2/source/controller/inc/ObjectHierarchy.hxx b/chart2/source/controller/inc/ObjectHierarchy.hxx index b0b303fbf770..e034d218fb27 100644 --- a/chart2/source/controller/inc/ObjectHierarchy.hxx +++ b/chart2/source/controller/inc/ObjectHierarchy.hxx @@ -28,7 +28,7 @@ namespace com::sun::star::awt { struct KeyEvent; } namespace chart { -class ExplicitValueProvider; +class ChartView; class ObjectHierarchy { @@ -42,7 +42,7 @@ public: */ explicit ObjectHierarchy( const rtl::Reference<::chart::ChartModel> & xChartDocument, - ExplicitValueProvider * pExplicitValueProvider, + ChartView * pExplicitValueProvider, bool bFlattenDiagram = false, bool bOrderingForElementSelector = false ); ~ObjectHierarchy(); @@ -88,7 +88,7 @@ private: typedef std::map<ObjectIdentifier, tChildContainer> tChildMap; tChildMap m_aChildMap; - ExplicitValueProvider* m_pExplicitValueProvider; + ChartView* m_pExplicitValueProvider; bool m_bFlattenDiagram; bool m_bOrderingForElementSelector; }; @@ -98,7 +98,7 @@ class ObjectKeyNavigation public: explicit ObjectKeyNavigation( ObjectIdentifier aCurrentOID, rtl::Reference<::chart::ChartModel> xChartDocument, - ExplicitValueProvider * pExplicitValueProvider ); + ChartView * pExplicitValueProvider ); bool handleKeyEvent( const css::awt::KeyEvent & rEvent ); const ObjectIdentifier& getCurrentSelection() const { return m_aCurrentOID;} @@ -116,7 +116,7 @@ private: ObjectIdentifier m_aCurrentOID; rtl::Reference<::chart::ChartModel> m_xChartDocument; - ExplicitValueProvider * m_pExplicitValueProvider; + ChartView * m_pExplicitValueProvider; }; } // namespace chart diff --git a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx index 9f490e42fb2e..01c7971b15d6 100644 --- a/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/AxisItemConverter.cxx @@ -23,7 +23,6 @@ #include <GraphicPropertyItemConverter.hxx> #include <chartview/ChartSfxItemIds.hxx> #include <chartview/ExplicitScaleValues.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include "SchWhichPairs.hxx" #include <ChartModel.hxx> #include <Axis.hxx> @@ -34,6 +33,7 @@ #include <Diagram.hxx> #include <unonames.hxx> #include <BaseCoordinateSystem.hxx> +#include <ChartView.hxx> #include <memory> #include <com/sun/star/chart/ChartAxisLabelPosition.hpp> @@ -358,7 +358,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI rtl::Reference< Axis > xCrossingMainAxis = AxisHelper::getCrossingMainAxis( m_xAxis, xCooSys ); - sal_Int32 nFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( + sal_Int32 nFormatKey = ChartView::getExplicitNumberFormatKeyForAxis( xCrossingMainAxis, xCooSys, m_xChartDoc); rOutItemSet.Put( SfxUInt32Item( nWhichId, nFormatKey )); @@ -406,7 +406,7 @@ void AxisItemConverter::FillSpecialItem( sal_uInt16 nWhichId, SfxItemSet & rOutI AxisHelper::getCoordinateSystemOfAxis( m_xAxis, m_xChartDoc->getFirstChartDiagram() ) ); - sal_Int32 nFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( + sal_Int32 nFormatKey = ChartView::getExplicitNumberFormatKeyForAxis( m_xAxis, xCooSys, m_xChartDoc); rOutItemSet.Put( SfxUInt32Item( nWhichId, nFormatKey )); @@ -944,7 +944,7 @@ bool AxisItemConverter::ApplySpecialItem( sal_uInt16 nWhichId, const SfxItemSet AxisHelper::getCoordinateSystemOfAxis( m_xAxis, m_xChartDoc->getFirstChartDiagram() ); - sal_Int32 nFormatKey = ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( + sal_Int32 nFormatKey = ChartView::getExplicitNumberFormatKeyForAxis( m_xAxis, xCooSys, m_xChartDoc); aValue <<= nFormatKey; diff --git a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx index 1cc120e8fec2..fe6a3a07e5a4 100644 --- a/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx +++ b/chart2/source/controller/itemsetwrapper/MultipleChartConverters.cxx @@ -33,7 +33,7 @@ #include <TitleItemConverter.hxx> #include <Axis.hxx> #include <AxisHelper.hxx> -#include <chartview/ExplicitValueProvider.hxx> +#include <ChartView.hxx> using namespace ::com::sun::star; using namespace ::com::sun::star::chart2; @@ -111,8 +111,8 @@ AllDataLabelItemConverter::AllDataLabelItemConverter( { uno::Reference< uno::XComponentContext> xContext;//do not need Context for label properties - sal_Int32 nNumberFormat=ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( series ); - sal_Int32 nPercentNumberFormat=ExplicitValueProvider::getExplicitPercentageNumberFormatKeyForDataLabel( + sal_Int32 nNumberFormat=ChartView::getExplicitNumberFormatKeyForDataLabel( series ); + sal_Int32 nPercentNumberFormat=ChartView::getExplicitPercentageNumberFormatKeyForDataLabel( series,xChartModel); m_aConverters.emplace_back( diff --git a/chart2/source/controller/main/ChartController_Properties.cxx b/chart2/source/controller/main/ChartController_Properties.cxx index 304af1d07dc6..8722da51ec51 100644 --- a/chart2/source/controller/main/ChartController_Properties.cxx +++ b/chart2/source/controller/main/ChartController_Properties.cxx @@ -23,7 +23,6 @@ #include <chartview/ChartSfxItemIds.hxx> #include <ObjectIdentifier.hxx> #include <chartview/ExplicitScaleValues.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <dlg_ObjectProperties.hxx> #include <dlg_View3D.hxx> #include <dlg_InsertErrorBars.hxx> @@ -79,7 +78,7 @@ namespace wrapper::ItemConverter* createItemConverter( std::u16string_view aObjectCID, const rtl::Reference<::chart::ChartModel>& xChartModel, const uno::Reference<uno::XComponentContext>& xContext, SdrModel& rDrawModel, - ExplicitValueProvider* pExplicitValueProvider, ReferenceSizeProvider const * pRefSizeProvider ) + ChartView* pExplicitValueProvider, ReferenceSizeProvider const * pRefSizeProvider ) { wrapper::ItemConverter* pItemConverter=nullptr; @@ -178,8 +177,8 @@ wrapper::ItemConverter* createItemConverter( bool bDataSeries = eObjectType == OBJECTTYPE_DATA_LABELS; - sal_Int32 nNumberFormat = ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( xObjectProperties ); - sal_Int32 nPercentNumberFormat = ExplicitValueProvider::getExplicitPercentageNumberFormatKeyForDataLabel( + sal_Int32 nNumberFormat = ChartView::getExplicitNumberFormatKeyForDataLabel( xObjectProperties ); + sal_Int32 nPercentNumberFormat = ChartView::getExplicitPercentageNumberFormatKeyForDataLabel( xObjectProperties, xChartModel); pItemConverter = new wrapper::TextLabelItemConverter( @@ -231,8 +230,8 @@ wrapper::ItemConverter* createItemConverter( } } } - sal_Int32 nNumberFormat=ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( xObjectProperties ); - sal_Int32 nPercentNumberFormat=ExplicitValueProvider::getExplicitPercentageNumberFormatKeyForDataLabel( + sal_Int32 nNumberFormat=ChartView::getExplicitNumberFormatKeyForDataLabel( xObjectProperties ); + sal_Int32 nPercentNumberFormat=ChartView::getExplicitPercentageNumberFormatKeyForDataLabel( xObjectProperties, xChartModel); pItemConverter = new wrapper::DataPointItemConverter( xChartModel, xContext, diff --git a/chart2/source/controller/main/ChartController_Window.cxx b/chart2/source/controller/main/ChartController_Window.cxx index b0fbf6a25cb4..c14e97d532a7 100644 --- a/chart2/source/controller/main/ChartController_Window.cxx +++ b/chart2/source/controller/main/ChartController_Window.cxx @@ -40,7 +40,6 @@ #include "DragMethod_PieSegment.hxx" #include "DragMethod_RotateDiagram.hxx" #include <ObjectHierarchy.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <RelativePositionHelper.hxx> #include <chartview/DrawModelWrapper.hxx> #include <RegressionCurveHelper.hxx> @@ -1778,7 +1777,7 @@ bool ChartController::impl_moveOrResizeObject( if( ( bDeterminePos || bDetermineSize ) && ( aRefSize.Width > 0 && aRefSize.Height > 0 ) ) { - ExplicitValueProvider * pValueProvider( m_xChartView.get() ); + ChartView * pValueProvider( m_xChartView.get() ); if( pValueProvider ) { awt::Rectangle aRect( pValueProvider->getRectangleOfObject( rCID )); diff --git a/chart2/source/controller/main/ElementSelector.cxx b/chart2/source/controller/main/ElementSelector.cxx index ee49f261299a..143fa3886039 100644 --- a/chart2/source/controller/main/ElementSelector.cxx +++ b/chart2/source/controller/main/ElementSelector.cxx @@ -119,7 +119,7 @@ void SelectorListBox::UpdateChartElementsListAndSelection() rtl::Reference< ChartModel > xFact = xChartController->getChartModel(); if( xFact.is() ) xChartView = xFact->createInstance( CHART_VIEW_SERVICE_NAME ); - ExplicitValueProvider* pExplicitValueProvider = nullptr; //ExplicitValueProvider::getExplicitValueProvider(xChartView); this creates all visible data points, that's too much + ChartView* pExplicitValueProvider = nullptr; //ExplicitValueProvider::getExplicitValueProvider(xChartView); this creates all visible data points, that's too much ObjectHierarchy aHierarchy( xChartDoc, pExplicitValueProvider, true /*bFlattenDiagram*/, true /*bOrderingForElementSelector*/ ); lcl_addObjectsToList( aHierarchy, ::chart::ObjectHierarchy::getRootNodeOID(), m_aEntries, 0, xChartDoc ); diff --git a/chart2/source/controller/main/ObjectHierarchy.cxx b/chart2/source/controller/main/ObjectHierarchy.cxx index e5603394b5af..7b1674acc673 100644 --- a/chart2/source/controller/main/ObjectHierarchy.cxx +++ b/chart2/source/controller/main/ObjectHierarchy.cxx @@ -19,12 +19,12 @@ #include <ObjectHierarchy.hxx> #include <ObjectIdentifier.hxx> +#include <ChartView.hxx> #include <Diagram.hxx> #include <RegressionCurveHelper.hxx> #include <RegressionCurveModel.hxx> #include <Axis.hxx> #include <AxisHelper.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <ChartType.hxx> #include <ChartTypeHelper.hxx> #include <ChartModel.hxx> @@ -513,7 +513,7 @@ ObjectIdentifier ObjectHierarchy::getParent( ObjectHierarchy::ObjectHierarchy( const rtl::Reference<::chart::ChartModel> & xChartDocument, - ExplicitValueProvider * pExplicitValueProvider /* = 0 */, + ChartView * pExplicitValueProvider /* = 0 */, bool bFlattenDiagram /* = false */, bool bOrderingForElementSelector /* = false */) : m_pExplicitValueProvider( pExplicitValueProvider ), @@ -561,7 +561,7 @@ sal_Int32 ObjectHierarchy::getIndexInParent( ObjectKeyNavigation::ObjectKeyNavigation( ObjectIdentifier aCurrentOID, rtl::Reference<::chart::ChartModel> xChartDocument, - ExplicitValueProvider * pExplicitValueProvider /* = 0 */ ) : + ChartView * pExplicitValueProvider /* = 0 */ ) : m_aCurrentOID(std::move( aCurrentOID )), m_xChartDocument(std::move( xChartDocument )), m_pExplicitValueProvider( pExplicitValueProvider ) diff --git a/chart2/source/controller/uitest/uiobject.cxx b/chart2/source/controller/uitest/uiobject.cxx index 2f10a38412f7..edc93d370f0a 100644 --- a/chart2/source/controller/uitest/uiobject.cxx +++ b/chart2/source/controller/uitest/uiobject.cxx @@ -15,7 +15,6 @@ #include <ChartController.hxx> #include <ChartModel.hxx> #include <ObjectHierarchy.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <utility> #include <vcl/svapp.hxx> @@ -182,7 +181,7 @@ std::set<OUString> ChartWindowUIObject::get_children() const rtl::Reference<::chart::ChartModel> xChartDoc = pController->getChartModel(); rtl::Reference<::chart::ChartView> xChartView = pController->getChartView(); - chart::ExplicitValueProvider* pValueProvider = xChartView.get(); + chart::ChartView* pValueProvider = xChartView.get(); chart::ObjectHierarchy aHierarchy(xChartDoc, pValueProvider); chart::ObjectIdentifier aIdentifier = chart::ObjectHierarchy::getRootNodeOID(); aChildren.insert(aIdentifier.getObjectCID()); diff --git a/chart2/source/inc/chartview/ExplicitValueProvider.hxx b/chart2/source/inc/chartview/ExplicitValueProvider.hxx deleted file mode 100644 index 6c526382410f..000000000000 --- a/chart2/source/inc/chartview/ExplicitValueProvider.hxx +++ /dev/null @@ -1,92 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ -#pragma once - -#include <config_options.h> -#include <sal/types.h> -#include <rtl/ref.hxx> -#include <rtl/ustring.hxx> - -#include <memory> - -namespace com::sun::star::beans { class XPropertySet; } -namespace com::sun::star::uno { template <typename > class Reference; } -namespace com::sun::star::util { class XNumberFormatsSupplier; } -namespace com::sun::star::awt { struct Rectangle; } -class SvxShape; - -namespace chart -{ -class Axis; -class BaseCoordinateSystem; -class DrawModelWrapper; -class ChartModel; -struct ExplicitIncrementData; -struct ExplicitScaleData; - -class SAL_LOPLUGIN_ANNOTATE("crosscast") ExplicitValueProvider -{ -public: - /** Gives calculated scale and increment values for a given xAxis in the current view. - In contrast to the model data these explicit values are always complete as missing auto properties are calculated. - If the given Axis could not be found or for another reason no correct output can be given false is returned. - */ - virtual bool getExplicitValuesForAxis( - rtl::Reference< ::chart::Axis > xAxis - , ExplicitScaleData& rExplicitScale - , ExplicitIncrementData& rExplicitIncrement )=0; - - /** for rotated objects the shape size and position differs from the visible rectangle - if bSnapRect is set to true you get the resulting visible position (left-top) and size - */ - virtual css::awt::Rectangle - getRectangleOfObject( const OUString& rObjectCID, bool bSnapRect=false )=0; - - virtual css::awt::Rectangle getDiagramRectangleExcludingAxes()=0; - - virtual rtl::Reference< SvxShape > - getShapeForCID( const OUString& rObjectCID )=0; - - virtual std::shared_ptr< DrawModelWrapper > getDrawModelWrapper() = 0; - - static css::awt::Rectangle - AddSubtractAxisTitleSizes( - ChartModel& rModel - , ExplicitValueProvider* pChartView - , const css::awt::Rectangle& rPositionAndSize, bool bSubtract ); - - static sal_Int32 getExplicitNumberFormatKeyForAxis( - const rtl::Reference< ::chart::Axis >& xAxis - , const rtl::Reference< ::chart::BaseCoordinateSystem > & xCorrespondingCoordinateSystem - , const rtl::Reference<::chart::ChartModel>& xChartDoc); - - static sal_Int32 getExplicitNumberFormatKeyForDataLabel( - const css::uno::Reference< css::beans::XPropertySet >& xSeriesOrPointProp ); - - static sal_Int32 getExplicitPercentageNumberFormatKeyForDataLabel( - const css::uno::Reference< css::beans::XPropertySet >& xSeriesOrPointProp - , const css::uno::Reference< css::util::XNumberFormatsSupplier >& xNumberFormatsSupplier ); - -protected: - ~ExplicitValueProvider() = default; -}; - -} //namespace chart - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/chart2/source/view/axes/VCoordinateSystem.cxx b/chart2/source/view/axes/VCoordinateSystem.cxx index 86d9c485fec7..90bc5ed6bb7e 100644 --- a/chart2/source/view/axes/VCoordinateSystem.cxx +++ b/chart2/source/view/axes/VCoordinateSystem.cxx @@ -18,6 +18,7 @@ */ #include <BaseGFXHelper.hxx> +#include <ChartView.hxx> #include <DateHelper.hxx> #include <VCoordinateSystem.hxx> #include "VCartesianCoordinateSystem.hxx" @@ -33,7 +34,6 @@ #include <Axis.hxx> #include "VAxisBase.hxx" #include <defines.hxx> -#include <chartview/ExplicitValueProvider.hxx> #include <com/sun/star/chart/TimeUnit.hpp> #include <com/sun/star/chart2/AxisType.hpp> #include <rtl/math.hxx> @@ -569,7 +569,7 @@ sal_Int32 VCoordinateSystem::getNumberFormatKeyForAxis( const rtl::Reference< Axis >& xAxis , const rtl::Reference<::chart::ChartModel>& xChartDoc) { - return ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( + return ChartView::getExplicitNumberFormatKeyForAxis( xAxis, m_xCooSysModel, xChartDoc); } diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx index 35482b061b67..ebd04fecbebb 100644 --- a/chart2/source/view/main/ChartView.cxx +++ b/chart2/source/view/main/ChartView.cxx @@ -778,7 +778,7 @@ awt::Rectangle ChartView::impl_createDiagramAndContent( const CreateShapeParam2D } bool ChartView::getExplicitValuesForAxis( - rtl::Reference< Axis > xAxis + const rtl::Reference< Axis >& xAxis , ExplicitScaleData& rExplicitScale , ExplicitIncrementData& rExplicitIncrement ) { @@ -2076,6 +2076,153 @@ bool ChartView::createAxisTitleShapes2D( CreateShapeParam2D& rParam, const css:: return true; } +namespace +{ +constexpr sal_Int32 constDiagramTitleSpace = 200; //=0,2 cm spacing + +bool lcl_getPropertySwapXAndYAxis(const rtl::Reference<Diagram>& xDiagram) +{ + bool bSwapXAndY = false; + + if (xDiagram.is()) + { + const std::vector<rtl::Reference<BaseCoordinateSystem>> aCooSysList( + xDiagram->getBaseCoordinateSystems()); + if (!aCooSysList.empty()) + { + try + { + aCooSysList[0]->getPropertyValue(u"SwapXAndYAxis"_ustr) >>= bSwapXAndY; + } + catch (const uno::Exception&) + { + TOOLS_WARN_EXCEPTION("chart2", ""); + } + } + } + return bSwapXAndY; +} + +} // end anonymous namespace + +sal_Int32 ChartView::getExplicitNumberFormatKeyForAxis( + const rtl::Reference<::chart::Axis>& xAxis, + const rtl::Reference<::chart::BaseCoordinateSystem>& xCorrespondingCoordinateSystem, + const rtl::Reference<::chart::ChartModel>& xChartDoc) +{ + return AxisHelper::getExplicitNumberFormatKeyForAxis( + xAxis, xCorrespondingCoordinateSystem, xChartDoc, + true /*bSearchForParallelAxisIfNothingIsFound*/); +} + +sal_Int32 ChartView::getExplicitNumberFormatKeyForDataLabel( + const uno::Reference<beans::XPropertySet>& xSeriesOrPointProp) +{ + return DataSeriesHelper::getExplicitNumberFormatKeyForDataLabel(xSeriesOrPointProp); +} + +sal_Int32 ChartView::getExplicitPercentageNumberFormatKeyForDataLabel( + const uno::Reference<beans::XPropertySet>& xSeriesOrPointProp, + const uno::Reference<util::XNumberFormatsSupplier>& xNumberFormatsSupplier) +{ + sal_Int32 nFormat = 0; + if (!xSeriesOrPointProp.is()) + return nFormat; + if (!(xSeriesOrPointProp->getPropertyValue(u"PercentageNumberFormat"_ustr) >>= nFormat)) + { + nFormat = DiagramHelper::getPercentNumberFormat(xNumberFormatsSupplier); + } + if (nFormat < 0) + nFormat = 0; + return nFormat; +} + +awt::Rectangle ChartView::AddSubtractAxisTitleSizes( + ChartModel& rModel, ChartView* pChartView, const awt::Rectangle& rPositionAndSize, + bool bSubtract) +{ + awt::Rectangle aRet(rPositionAndSize); + + //add axis title sizes to the diagram size + rtl::Reference<::chart::Title> xTitle_Height( + TitleHelper::getTitle(TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION, rModel)); + rtl::Reference<::chart::Title> xTitle_Width( + TitleHelper::getTitle(TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION, rModel)); + rtl::Reference<::chart::Title> xSecondTitle_Height( + TitleHelper::getTitle(TitleHelper::SECONDARY_X_AXIS_TITLE, rModel)); + rtl::Reference<::chart::Title> xSecondTitle_Width( + TitleHelper::getTitle(TitleHelper::SECONDARY_Y_AXIS_TITLE, rModel)); + if (xTitle_Height.is() || xTitle_Width.is() || xSecondTitle_Height.is() + || xSecondTitle_Width.is()) + { + if (pChartView) + { + //detect whether x axis points into x direction or not + if (lcl_getPropertySwapXAndYAxis(rModel.getFirstChartDiagram())) + { + std::swap(xTitle_Height, xTitle_Width); + std::swap(xSecondTitle_Height, xSecondTitle_Width); + } + + sal_Int32 nTitleSpaceWidth = 0; + sal_Int32 nTitleSpaceHeight = 0; + sal_Int32 nSecondTitleSpaceWidth = 0; + sal_Int32 nSecondTitleSpaceHeight = 0; + + if (xTitle_Height.is()) + { + OUString aCID_X( + ObjectIdentifier::createClassifiedIdentifierForObject(xTitle_Height, &rModel)); + nTitleSpaceHeight + = pChartView->getRectangleOfObject(aCID_X, true).Height; + if (nTitleSpaceHeight) + nTitleSpaceHeight += constDiagramTitleSpace; + } + if (xTitle_Width.is()) + { + OUString aCID_Y( + ObjectIdentifier::createClassifiedIdentifierForObject(xTitle_Width, &rModel)); + nTitleSpaceWidth = pChartView->getRectangleOfObject(aCID_Y, true).Width; + if (nTitleSpaceWidth) + nTitleSpaceWidth += constDiagramTitleSpace; + } + if (xSecondTitle_Height.is()) + { + OUString aCID_X(ObjectIdentifier::createClassifiedIdentifierForObject( + xSecondTitle_Height, &rModel)); + nSecondTitleSpaceHeight + = pChartView->getRectangleOfObject(aCID_X, true).Height; + if (nSecondTitleSpaceHeight) + nSecondTitleSpaceHeight += constDiagramTitleSpace; + } + if (xSecondTitle_Width.is()) + { + OUString aCID_Y(ObjectIdentifier::createClassifiedIdentifierForObject( + xSecondTitle_Width, &rModel)); + nSecondTitleSpaceWidth + += pChartView->getRectangleOfObject(aCID_Y, true).Width; + if (nSecondTitleSpaceWidth) + nSecondTitleSpaceWidth += constDiagramTitleSpace; + } + if (bSubtract) + { + aRet.X += nTitleSpaceWidth; + aRet.Y += nSecondTitleSpaceHeight; + aRet.Width -= (nTitleSpaceWidth + nSecondTitleSpaceWidth); + aRet.Height -= (nTitleSpaceHeight + nSecondTitleSpaceHeight); + } + else + { + aRet.X -= nTitleSpaceWidth; + aRet.Y -= nSecondTitleSpaceHeight; + aRet.Width += nTitleSpaceWidth + nSecondTitleSpaceWidth; + aRet.Height += nTitleSpaceHeight + nSecondTitleSpaceHeight; + } + } + } + return aRet; +} + } //namespace chart extern "C" SAL_DLLPUBLIC_EXPORT css::uno::XInterface * diff --git a/chart2/source/view/main/ExplicitValueProvider.cxx b/chart2/source/view/main/ExplicitValueProvider.cxx deleted file mode 100644 index c34fe64cce65..000000000000 --- a/chart2/source/view/main/ExplicitValueProvider.cxx +++ /dev/null @@ -1,190 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/* - * This file is part of the LibreOffice project. - * - * This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. - * - * This file incorporates work covered by the following license notice: - * - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed - * with this work for additional information regarding copyright - * ownership. The ASF licenses this file to you under the Apache - * License, Version 2.0 (the "License"); you may not use this file - * except in compliance with the License. You may obtain a copy of - * the License at http://www.apache.org/licenses/LICENSE-2.0 . - */ - -#include <chartview/ExplicitValueProvider.hxx> -#include <AxisHelper.hxx> -#include <ChartModel.hxx> -#include <Diagram.hxx> -#include <DiagramHelper.hxx> -#include <unonames.hxx> -#include <BaseCoordinateSystem.hxx> -#include <TitleHelper.hxx> -#include <ObjectIdentifier.hxx> -#include <DataSeriesHelper.hxx> - -#include <comphelper/servicehelper.hxx> -#include <comphelper/diagnose_ex.hxx> - -namespace chart -{ -using namespace ::com::sun::star; -using namespace ::com::sun::star::chart2; -using ::com::sun::star::uno::Reference; - -namespace -{ -constexpr sal_Int32 constDiagramTitleSpace = 200; //=0,2 cm spacing - -bool lcl_getPropertySwapXAndYAxis(const rtl::Reference<Diagram>& xDiagram) -{ - bool bSwapXAndY = false; - - if (xDiagram.is()) - { - const std::vector<rtl::Reference<BaseCoordinateSystem>> aCooSysList( - xDiagram->getBaseCoordinateSystems()); - if (!aCooSysList.empty()) - { - try - { - aCooSysList[0]->getPropertyValue(u"SwapXAndYAxis"_ustr) >>= bSwapXAndY; - } - catch (const uno::Exception&) - { - TOOLS_WARN_EXCEPTION("chart2", ""); - } - } - } - return bSwapXAndY; -} - -} // end anonymous namespace - -sal_Int32 ExplicitValueProvider::getExplicitNumberFormatKeyForAxis( - const rtl::Reference<::chart::Axis>& xAxis, - const rtl::Reference<::chart::BaseCoordinateSystem>& xCorrespondingCoordinateSystem, - const rtl::Reference<::chart::ChartModel>& xChartDoc) -{ - return AxisHelper::getExplicitNumberFormatKeyForAxis( - xAxis, xCorrespondingCoordinateSystem, xChartDoc, - true /*bSearchForParallelAxisIfNothingIsFound*/); -} - -sal_Int32 ExplicitValueProvider::getExplicitNumberFormatKeyForDataLabel( - const uno::Reference<beans::XPropertySet>& xSeriesOrPointProp) -{ - return DataSeriesHelper::getExplicitNumberFormatKeyForDataLabel(xSeriesOrPointProp); -} - -sal_Int32 ExplicitValueProvider::getExplicitPercentageNumberFormatKeyForDataLabel( - const uno::Reference<beans::XPropertySet>& xSeriesOrPointProp, - const uno::Reference<util::XNumberFormatsSupplier>& xNumberFormatsSupplier) -{ - sal_Int32 nFormat = 0; - if (!xSeriesOrPointProp.is()) - return nFormat; - if (!(xSeriesOrPointProp->getPropertyValue(u"PercentageNumberFormat"_ustr) >>= nFormat)) - { - nFormat = DiagramHelper::getPercentNumberFormat(xNumberFormatsSupplier); - } - if (nFormat < 0) - nFormat = 0; - return nFormat; -} - -awt::Rectangle ExplicitValueProvider::AddSubtractAxisTitleSizes( - ChartModel& rModel, ExplicitValueProvider* pChartView, const awt::Rectangle& rPositionAndSize, - bool bSubtract) -{ - awt::Rectangle aRet(rPositionAndSize); - - //add axis title sizes to the diagram size - rtl::Reference<::chart::Title> xTitle_Height( - TitleHelper::getTitle(TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION, rModel)); - rtl::Reference<::chart::Title> xTitle_Width( - TitleHelper::getTitle(TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION, rModel)); - rtl::Reference<::chart::Title> xSecondTitle_Height( - TitleHelper::getTitle(TitleHelper::SECONDARY_X_AXIS_TITLE, rModel)); - rtl::Reference<::chart::Title> xSecondTitle_Width( - TitleHelper::getTitle(TitleHelper::SECONDARY_Y_AXIS_TITLE, rModel)); - if (xTitle_Height.is() || xTitle_Width.is() || xSecondTitle_Height.is() - || xSecondTitle_Width.is()) - { - ExplicitValueProvider* pExplicitValueProvider = pChartView; - if (pExplicitValueProvider) - { - //detect whether x axis points into x direction or not - if (lcl_getPropertySwapXAndYAxis(rModel.getFirstChartDiagram())) - { - std::swap(xTitle_Height, xTitle_Width); - std::swap(xSecondTitle_Height, xSecondTitle_Width); - } - - sal_Int32 nTitleSpaceWidth = 0; - sal_Int32 nTitleSpaceHeight = 0; - sal_Int32 nSecondTitleSpaceWidth = 0; - sal_Int32 nSecondTitleSpaceHeight = 0; - - if (xTitle_Height.is()) - { - OUString aCID_X( - ObjectIdentifier::createClassifiedIdentifierForObject(xTitle_Height, &rModel)); - nTitleSpaceHeight - = pExplicitValueProvider->getRectangleOfObject(aCID_X, true).Height; - if (nTitleSpaceHeight) - nTitleSpaceHeight += constDiagramTitleSpace; - } - if (xTitle_Width.is()) - { - OUString aCID_Y( - ObjectIdentifier::createClassifiedIdentifierForObject(xTitle_Width, &rModel)); - nTitleSpaceWidth = pExplicitValueProvider->getRectangleOfObject(aCID_Y, true).Width; - if (nTitleSpaceWidth) - nTitleSpaceWidth += constDiagramTitleSpace; - } - if (xSecondTitle_Height.is()) - { - OUString aCID_X(ObjectIdentifier::createClassifiedIdentifierForObject( - xSecondTitle_Height, &rModel)); - nSecondTitleSpaceHeight - = pExplicitValueProvider->getRectangleOfObject(aCID_X, true).Height; - if (nSecondTitleSpaceHeight) - nSecondTitleSpaceHeight += constDiagramTitleSpace; - } - if (xSecondTitle_Width.is()) - { - OUString aCID_Y(ObjectIdentifier::createClassifiedIdentifierForObject( - xSecondTitle_Width, &rModel)); - nSecondTitleSpaceWidth - += pExplicitValueProvider->getRectangleOfObject(aCID_Y, true).Width; - if (nSecondTitleSpaceWidth) - nSecondTitleSpaceWidth += constDiagramTitleSpace; - } - if (bSubtract) - { - aRet.X += nTitleSpaceWidth; - aRet.Y += nSecondTitleSpaceHeight; - aRet.Width -= (nTitleSpaceWidth + nSecondTitleSpaceWidth); - aRet.Height -= (nTitleSpaceHeight + nSecondTitleSpaceHeight); - } - else - { - aRet.X -= nTitleSpaceWidth; - aRet.Y -= nSecondTitleSpaceHeight; - aRet.Width += nTitleSpaceWidth + nSecondTitleSpaceWidth; - aRet.Height += nTitleSpaceHeight + nSecondTitleSpaceHeight; - } - } - } - return aRet; -} - -} //namespace chart - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */