/************************************************************************* * * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * Copyright 2000, 2010 Oracle and/or its affiliates. * * OpenOffice.org - a multi-platform office productivity suite * * This file is part of OpenOffice.org. * * OpenOffice.org is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License version 3 * only, as published by the Free Software Foundation. * * OpenOffice.org is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License version 3 for more details * (a copy is included in the LICENSE file that accompanied this code). * * You should have received a copy of the GNU Lesser General Public License * version 3 along with OpenOffice.org. If not, see * * for a copy of the LGPLv3 License. * ************************************************************************/ #ifndef _CHART2_PIECHART_HXX #define _CHART2_PIECHART_HXX #include "VSeriesPlotter.hxx" #include #include //............................................................................. namespace chart { //............................................................................. class PiePositionHelper; class PieChart : public VSeriesPlotter { //------------------------------------------------------------------------- // public methods //------------------------------------------------------------------------- public: PieChart( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartType >& xChartTypeModel , sal_Int32 nDimensionCount, bool bExcludingPositioning ); virtual ~PieChart(); //------------------------------------------------------------------------- // chart2::XPlotter //------------------------------------------------------------------------- virtual void SAL_CALL createShapes(); virtual void rearrangeLabelToAvoidOverlapIfRequested( const ::com::sun::star::awt::Size& rPageSize ); virtual void SAL_CALL setScales( const ::com::sun::star::uno::Sequence< ::com::sun::star::chart2::ExplicitScaleData >& rScales , sal_Bool bSwapXAndYAxis ) throw (::com::sun::star::uno::RuntimeException); /* virtual ::rtl::OUString SAL_CALL getCoordinateSystemTypeID( ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setScales( const ::com::sun::star::uno::Sequence< ::com::sun::star::chart2::ExplicitScaleData >& rScales ) throw (::com::sun::star::uno::RuntimeException); virtual void SAL_CALL setTransformation( const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XTransformation >& xTransformationToLogicTarget, const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XTransformation >& xTransformationToFinalPage ) throw (::com::sun::star::uno::RuntimeException); */ virtual void addSeries( VDataSeries* pSeries, sal_Int32 zSlot = -1, sal_Int32 xSlot = -1,sal_Int32 ySlot = -1 ); //------------------- virtual ::com::sun::star::drawing::Direction3D getPreferredDiagramAspectRatio() const; virtual bool keepAspectRatio() const; virtual bool shouldSnapRectToUsedArea(); //MinimumAndMaximumSupplier virtual double getMinimumX(); virtual double getMaximumX(); virtual double getMinimumYInRange( double fMinimumX, double fMaximumX, sal_Int32 nAxisIndex ); virtual double getMaximumYInRange( double fMinimumX, double fMaximumX, sal_Int32 nAxisIndex ); virtual bool isExpandBorderToIncrementRhythm( sal_Int32 nDimensionIndex ); virtual bool isExpandIfValuesCloseToBorder( sal_Int32 nDimensionIndex ); virtual bool isExpandWideValuesToZero( sal_Int32 nDimensionIndex ); virtual bool isExpandNarrowValuesTowardZero( sal_Int32 nDimensionIndex ); virtual bool isSeperateStackingForDifferentSigns( sal_Int32 nDimensionIndex ); //------------------------------------------------------------------------- //------------------------------------------------------------------------- //------------------------------------------------------------------------- private: //methods //no default constructor PieChart(); ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > createDataPoint( const ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes >& xTarget , const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& xObjectProperties , double fUnitCircleStartAngleDegree, double fWidthAngleDegree , double fUnitCircleInnerRadius, double fUnitCircleOuterRadius , double fLogicZ, double fDepth, double fExplodePercentage , tPropertyNameValueMap* pOverWritePropertiesMap ); double getMaxOffset(); bool detectLabelOverlapsAndMove(const ::com::sun::star::awt::Size& rPageSize);//returns true when there might be more to do void resetLabelPositionsToPreviousState(); struct PieLabelInfo; bool tryMoveLabels( PieLabelInfo* pFirstBorder, PieLabelInfo* pSecondBorder , PieLabelInfo* pCenter, bool bSingleCenter, bool& rbAlternativeMoveDirection , const ::com::sun::star::awt::Size& rPageSize ); private: //member PiePositionHelper* m_pPosHelper; bool m_bUseRings; bool m_bSizeExcludesLabelsAndExplodedSegments; struct PieLabelInfo { PieLabelInfo(); bool moveAwayFrom( const PieLabelInfo* pFix, const ::com::sun::star::awt::Size& rPageSize , bool bMoveHalfWay, bool bMoveClockwise, bool bAlternativeMoveDirection ); ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xTextShape; ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShape > xLabelGroupShape; ::basegfx::B2IVector aFirstPosition; ::basegfx::B2IVector aOrigin; double fValue; bool bMovementAllowed; bool bMoved; ::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > xTextTarget; PieLabelInfo* pPrevious; PieLabelInfo* pNext; ::com::sun::star::awt::Point aPreviousPosition; }; ::std::vector< PieLabelInfo > m_aLabelInfoList; double m_fMaxOffset; /// cached max offset value (init'ed to NaN) }; //............................................................................. } //namespace chart //............................................................................. #endif