office-gobmx/chart2/source/view/inc/VDataSeries.hxx

264 lines
11 KiB
C++

/*************************************************************************
*
* 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
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef _CHART2_VIEW_DATASERIES_HXX
#define _CHART2_VIEW_DATASERIES_HXX
#include "PropertyMapper.hxx"
#include <vector>
//for auto_ptr
#include <memory>
#include <com/sun/star/chart2/DataPointLabel.hpp>
#include <com/sun/star/chart2/Symbol.hpp>
#include <com/sun/star/chart2/StackingDirection.hpp>
#include <com/sun/star/chart2/data/XLabeledDataSequence.hpp>
#include <com/sun/star/chart2/XChartType.hpp>
#include <com/sun/star/chart2/XDataSeries.hpp>
#include <com/sun/star/drawing/HomogenMatrix.hpp>
#include <com/sun/star/drawing/PolyPolygonShape3D.hpp>
#include <com/sun/star/drawing/XShape.hpp>
#include <com/sun/star/drawing/XShapes.hpp>
#include <cppuhelper/weakref.hxx>
//.............................................................................
namespace chart
{
//.............................................................................
//-----------------------------------------------------------------------------
/**
*/
class VDataSequence
{
public:
void init( const ::com::sun::star::uno::Reference<
::com::sun::star::chart2::data::XDataSequence >& xModel );
bool is() const;
void clear();
double getValue( sal_Int32 index ) const;
sal_Int32 detectNumberFormatKey( sal_Int32 index ) const;
sal_Int32 getLength() const;
::com::sun::star::uno::Reference<
::com::sun::star::chart2::data::XDataSequence > Model;
mutable ::com::sun::star::uno::Sequence< double > Doubles;
};
class VDataSeries
{
public:
VDataSeries( const ::com::sun::star::uno::Reference<
::com::sun::star::chart2::XDataSeries >& xDataSeries );
virtual ~VDataSeries();
::com::sun::star::uno::Reference< ::com::sun::star::chart2::XDataSeries >
getModel() const;
void setCategoryXAxis();
void setParticle( const rtl::OUString& rSeriesParticle );
void setGlobalSeriesIndex( sal_Int32 nGlobalSeriesIndex );
void setPageReferenceSize( const ::com::sun::star::awt::Size & rPageRefSize );
sal_Int32 getTotalPointCount() const;
double getXValue( sal_Int32 index ) const;
double getYValue( sal_Int32 index ) const;
double getY_Min( sal_Int32 index ) const;
double getY_Max( sal_Int32 index ) const;
double getY_First( sal_Int32 index ) const;
double getY_Last( sal_Int32 index ) const;
double getBubble_Size( sal_Int32 index ) const;
double getMinimumofAllDifferentYValues( sal_Int32 index ) const;
double getMaximumofAllDifferentYValues( sal_Int32 index ) const;
::com::sun::star::uno::Sequence< double > getAllX() const;
::com::sun::star::uno::Sequence< double > getAllY() const;
double getYMeanValue() const;
bool hasExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPercentage ) const;
sal_Int32 getExplicitNumberFormat( sal_Int32 nPointIndex, bool bForPercentage ) const;
sal_Int32 detectNumberFormatKey( sal_Int32 nPointIndex ) const;
bool shouldLabelNumberFormatKeyBeDetectedFromYAxis() const;
sal_Int32 getLabelPlacement( sal_Int32 nPointIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::chart2::XChartType >& xChartType
, sal_Int32 nDimensionCount, sal_Bool bSwapXAndY ) const;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
getPropertiesOfPoint( sal_Int32 index ) const;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
getPropertiesOfSeries() const;
::com::sun::star::chart2::Symbol*
getSymbolProperties( sal_Int32 index ) const;
::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >
getYErrorBarProperties( sal_Int32 index ) const;
bool hasPointOwnColor( sal_Int32 index ) const;
::com::sun::star::chart2::StackingDirection getStackingDirection() const;
sal_Int32 getAttachedAxisIndex() const;
void setAttachedAxisIndex( sal_Int32 nAttachedAxisIndex );
void doSortByXValues();
void setConnectBars( sal_Bool bConnectBars );
sal_Bool getConnectBars() const;
void setGroupBarsPerAxis( sal_Bool bGroupBarsPerAxis );
sal_Bool getGroupBarsPerAxis() const;
void setStartingAngle( sal_Int32 nStartingAngle );
sal_Int32 getStartingAngle() const;
void setRoleOfSequenceForDataLabelNumberFormatDetection( const rtl::OUString& rRole );
//this is only temporarily here for area chart:
::com::sun::star::drawing::PolyPolygonShape3D m_aPolyPolygonShape3D;
sal_Int32 m_nPolygonIndex;
double m_fLogicMinX;
double m_fLogicMaxX;
//
//this is here for deep stacking:
double m_fLogicZPos;//from 0 to series count -1
//
rtl::OUString getCID() const;
rtl::OUString getSeriesParticle() const;
rtl::OUString getPointCID_Stub() const;
rtl::OUString getErrorBarsCID() const;
rtl::OUString getLabelsCID() const;
rtl::OUString getLabelCID_Stub() const;
rtl::OUString getDataCurveCID( sal_Int32 nCurveIndex, bool bAverageLine ) const;
::com::sun::star::chart2::DataPointLabel*
getDataPointLabelIfLabel( sal_Int32 index ) const;
bool getTextLabelMultiPropertyLists( sal_Int32 index, tNameSequence*& pPropNames, tAnySequence*& pPropValues ) const;
rtl::OUString getDataCurveEquationCID( sal_Int32 nCurveIndex ) const;
bool isAttributedDataPoint( sal_Int32 index ) const;
bool isVaryColorsByPoint() const;
void releaseShapes();
void setMissingValueTreatment( sal_Int32 nMissingValueTreatment );
sal_Int32 getMissingValueTreatment() const;
private: //methods
::com::sun::star::chart2::DataPointLabel*
getDataPointLabel( sal_Int32 index ) const;
void adaptPointCache( sal_Int32 nNewPointIndex ) const;
public: //member
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xGroupShape;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xLabelsGroupShape;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xErrorBarsGroupShape;
//the following group shapes will be created as children of m_xGroupShape on demand
//they can be used to assure that some parts of a series shape are always in front of others (e.g. symbols in front of lines)
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xFrontSubGroupShape;
::com::sun::star::uno::Reference< ::com::sun::star::drawing::XShapes > m_xBackSubGroupShape;
private: //member
::com::sun::star::uno::Reference<
::com::sun::star::chart2::XDataSeries > m_xDataSeries;
::com::sun::star::uno::Sequence<
::com::sun::star::uno::Reference<
::com::sun::star::chart2::data::XLabeledDataSequence > > m_aDataSequences;
//all points given by the model data (here are not only the visible points meant)
sal_Int32 m_nPointCount;
VDataSequence m_aValues_X;
VDataSequence m_aValues_Y;
VDataSequence m_aValues_Z;
VDataSequence m_aValues_Y_Min;
VDataSequence m_aValues_Y_Max;
VDataSequence m_aValues_Y_First;
VDataSequence m_aValues_Y_Last;
VDataSequence m_aValues_Bubble_Size;
VDataSequence* m_pValueSequenceForDataLabelNumberFormatDetection;
mutable double m_fYMeanValue;
::com::sun::star::uno::Sequence< sal_Int32 > m_aAttributedDataPointIndexList;
::com::sun::star::chart2::StackingDirection m_eStackingDirection;
sal_Int32 m_nAxisIndex;//indicates wether this is attached to a main or secondary axis
sal_Bool m_bConnectBars;
sal_Bool m_bGroupBarsPerAxis;
sal_Int32 m_nStartingAngle;
rtl::OUString m_aSeriesParticle;
rtl::OUString m_aCID;
rtl::OUString m_aPointCID_Stub;
rtl::OUString m_aLabelCID_Stub;
sal_Int32 m_nGlobalSeriesIndex;
//some cached values for data labels as they are very expensive
mutable ::std::auto_ptr< ::com::sun::star::chart2::DataPointLabel >
m_apLabel_Series;
mutable ::std::auto_ptr< tNameSequence > m_apLabelPropNames_Series;
mutable ::std::auto_ptr< tAnySequence > m_apLabelPropValues_Series;
mutable ::std::auto_ptr< ::com::sun::star::chart2::Symbol >
m_apSymbolProperties_Series;
mutable ::std::auto_ptr< ::com::sun::star::chart2::DataPointLabel >
m_apLabel_AttributedPoint;
mutable ::std::auto_ptr< tNameSequence > m_apLabelPropNames_AttributedPoint;
mutable ::std::auto_ptr< tAnySequence > m_apLabelPropValues_AttributedPoint;
mutable ::std::auto_ptr< ::com::sun::star::chart2::Symbol >
m_apSymbolProperties_AttributedPoint;
mutable ::std::auto_ptr< ::com::sun::star::chart2::Symbol >
m_apSymbolProperties_InvisibleSymbolForSelection;
mutable sal_Int32 m_nCurrentAttributedPoint;
::com::sun::star::awt::Size m_aReferenceSize;
//
sal_Int32 m_nMissingValueTreatment;
bool m_bAllowPercentValueInDataLabel;
};
//.............................................................................
} //namespace chart
//.............................................................................
#endif