diff options
Diffstat (limited to 'chart2/source/view/axes/VAxisProperties.cxx')
-rw-r--r-- | chart2/source/view/axes/VAxisProperties.cxx | 138 |
1 files changed, 91 insertions, 47 deletions
diff --git a/chart2/source/view/axes/VAxisProperties.cxx b/chart2/source/view/axes/VAxisProperties.cxx index cca264b093a4..27ca8d2188e3 100644 --- a/chart2/source/view/axes/VAxisProperties.cxx +++ b/chart2/source/view/axes/VAxisProperties.cxx @@ -37,9 +37,6 @@ #include "AxisHelper.hxx" #include "DiagramHelper.hxx" -#ifndef _COM_SUN_STAR_CHART2_XAXISPOSITION_HPP_ -#include <com/sun/star/chart2/AxisPosition.hpp> -#endif #include <tools/color.hxx> #include <com/sun/star/beans/XPropertySet.hpp> #include <com/sun/star/chart/ChartAxisArrangeOrderType.hpp> @@ -150,6 +147,17 @@ TickmarkProperties AxisProperties::makeTickmarkProperties( return aTickmarkProperties; } +//static +TickmarkProperties AxisProperties::getBiggestTickmarkProperties() +{ + TickmarkProperties aTickmarkProperties; + sal_Int32 nDepth = 0; + sal_Int32 nTickmarkStyle = 3;//inner and outer tickmarks + aTickmarkProperties.Length = lcl_calcTickLengthForDepth( nDepth,nTickmarkStyle ); + aTickmarkProperties.RelativePos = static_cast<sal_Int32>( lcl_getTickOffset( aTickmarkProperties.Length, nTickmarkStyle ) ); + return aTickmarkProperties; +} + //-------------------------------------------------------------------------- AxisProperties::AxisProperties( const uno::Reference< XAxis >& xAxisModel @@ -158,14 +166,20 @@ AxisProperties::AxisProperties( const uno::Reference< XAxis >& xAxisModel , m_nDimensionIndex(0) , m_bIsMainAxis(true) , m_bSwapXAndY(false) + , m_eCrossoverType( ::com::sun::star::chart::ChartAxisPosition_ZERO ) + , m_eLabelPos( ::com::sun::star::chart::ChartAxisLabelPosition_NEAR_AXIS ) + , m_eTickmarkPos( ::com::sun::star::chart::ChartAxisMarkPosition_AT_LABELS_AND_AXIS ) , m_pfMainLinePositionAtOtherAxis(NULL) , m_pfExrtaLinePositionAtOtherAxis(NULL) + , m_bCrossingAxisHasReverseDirection(false) + , m_bCrossingAxisIsCategoryAxes(false) + , m_bAxisBetweenCategories(false) + , m_fLabelDirectionSign(1.0) , m_fInnerDirectionSign(1.0) , m_bLabelsOutside(true) , m_aLabelAlignment(LABEL_ALIGN_RIGHT_TOP) , m_bDisplayLabels( true ) , m_nNumberFormatKey(0) -// , m_eRelativeLabelPosition(LEFTORBOTTOM_OF_AXIS) , m_nMajorTickmarks(1) , m_nMinorTickmarks(1) , m_aTickmarkPropertiesList() @@ -182,14 +196,20 @@ AxisProperties::AxisProperties( const AxisProperties& rAxisProperties ) , m_nDimensionIndex( m_nDimensionIndex ) , m_bIsMainAxis( rAxisProperties.m_bIsMainAxis ) , m_bSwapXAndY( rAxisProperties.m_bSwapXAndY ) + , m_eCrossoverType( rAxisProperties.m_eCrossoverType ) + , m_eLabelPos( rAxisProperties.m_eLabelPos ) + , m_eTickmarkPos( rAxisProperties.m_eTickmarkPos ) , m_pfMainLinePositionAtOtherAxis( NULL ) , m_pfExrtaLinePositionAtOtherAxis( NULL ) + , m_bCrossingAxisHasReverseDirection( rAxisProperties.m_bCrossingAxisHasReverseDirection ) + , m_bCrossingAxisIsCategoryAxes( rAxisProperties.m_bCrossingAxisIsCategoryAxes ) + , m_bAxisBetweenCategories( rAxisProperties.m_bAxisBetweenCategories ) + , m_fLabelDirectionSign( rAxisProperties.m_fLabelDirectionSign ) , m_fInnerDirectionSign( rAxisProperties.m_fInnerDirectionSign ) , m_bLabelsOutside( rAxisProperties.m_bLabelsOutside ) , m_aLabelAlignment( rAxisProperties.m_aLabelAlignment ) , m_bDisplayLabels( rAxisProperties.m_bDisplayLabels ) , m_nNumberFormatKey( rAxisProperties.m_nNumberFormatKey ) -// , m_eRelativeLabelPosition( rAxisProperties.m_eRelativeLabelPosition ) , m_nMajorTickmarks( rAxisProperties.m_nMajorTickmarks ) , m_nMinorTickmarks( rAxisProperties.m_nMinorTickmarks ) , m_aTickmarkPropertiesList( rAxisProperties.m_aTickmarkPropertiesList ) @@ -213,52 +233,69 @@ AxisProperties::~AxisProperties() LabelAlignment lcl_getLabelAlignmentForZAxis( const AxisProperties& rAxisProperties ) { - LabelAlignment aRet( LABEL_ALIGN_LEFT ); - if( rAxisProperties.m_bLabelsOutside ) - aRet = LABEL_ALIGN_RIGHT; - else + LabelAlignment aRet( LABEL_ALIGN_RIGHT ); + if( rAxisProperties.m_fLabelDirectionSign<0 ) aRet = LABEL_ALIGN_LEFT; return aRet; } LabelAlignment lcl_getLabelAlignmentForYAxis( const AxisProperties& rAxisProperties ) { - LabelAlignment aRet( LABEL_ALIGN_LEFT ); - if(rAxisProperties.m_bIsMainAxis) - { - if( rAxisProperties.m_bLabelsOutside ) - aRet = LABEL_ALIGN_LEFT; - else - aRet = LABEL_ALIGN_RIGHT; - } - else - { - if( !rAxisProperties.m_bLabelsOutside ) - aRet = LABEL_ALIGN_LEFT; - else - aRet = LABEL_ALIGN_RIGHT; - } + LabelAlignment aRet( LABEL_ALIGN_RIGHT ); + if( rAxisProperties.m_fLabelDirectionSign<0 ) + aRet = LABEL_ALIGN_LEFT; return aRet; } LabelAlignment lcl_getLabelAlignmentForXAxis( const AxisProperties& rAxisProperties ) { - LabelAlignment aRet( LABEL_ALIGN_LEFT ); - if(rAxisProperties.m_bIsMainAxis ) + LabelAlignment aRet( LABEL_ALIGN_BOTTOM ); + if( rAxisProperties.m_fLabelDirectionSign<0 ) + aRet = LABEL_ALIGN_TOP; + return aRet; +} + +void AxisProperties::initAxisPositioning( const uno::Reference< beans::XPropertySet >& xAxisProp ) +{ + if( !xAxisProp.is() ) + return; + try { - if(rAxisProperties.m_bLabelsOutside) - aRet = LABEL_ALIGN_BOTTOM; + if( AxisHelper::isAxisPositioningEnabled() ) + { + xAxisProp->getPropertyValue(C2U( "CrossoverPosition" )) >>= m_eCrossoverType; + if( ::com::sun::star::chart::ChartAxisPosition_VALUE == m_eCrossoverType ) + { + double fValue = 0.0; + xAxisProp->getPropertyValue(C2U( "CrossoverValue" )) >>= fValue; + + if( m_bCrossingAxisIsCategoryAxes ) + { + fValue = ::rtl::math::round(fValue); + if( m_bAxisBetweenCategories ) + fValue-=0.5; + } + m_pfMainLinePositionAtOtherAxis = new double(fValue); + } + else if( ::com::sun::star::chart::ChartAxisPosition_ZERO == m_eCrossoverType ) + m_pfMainLinePositionAtOtherAxis = new double(0.0); + + xAxisProp->getPropertyValue(C2U( "LabelPosition" )) >>= m_eLabelPos; + xAxisProp->getPropertyValue(C2U( "MarkPosition" )) >>= m_eTickmarkPos; + } else - aRet = LABEL_ALIGN_TOP; + { + m_eCrossoverType = ::com::sun::star::chart::ChartAxisPosition_START; + if( m_bIsMainAxis == m_bCrossingAxisHasReverseDirection ) + m_eCrossoverType = ::com::sun::star::chart::ChartAxisPosition_END; + m_eLabelPos = ::com::sun::star::chart::ChartAxisLabelPosition_NEAR_AXIS; + m_eTickmarkPos = ::com::sun::star::chart::ChartAxisMarkPosition_AT_LABELS; + } } - else + catch( uno::Exception& e ) { - if(!rAxisProperties.m_bLabelsOutside) - aRet = LABEL_ALIGN_BOTTOM; - else - aRet = LABEL_ALIGN_TOP; + ASSERT_EXCEPTION( e ); } - return aRet; } void AxisProperties::init( bool bCartesian ) @@ -267,21 +304,25 @@ void AxisProperties::init( bool bCartesian ) uno::Reference<beans::XPropertySet>::query( this->m_xAxisModel ); if( !xProp.is() ) return; + + if( m_nDimensionIndex<2 ) + initAxisPositioning( xProp ); + if( bCartesian ) { - try - { - //todo nAxisPosition and nAxisIndex are the same values so far and maybe need to be seperated in future - sal_Int32 nAxisPosition=AxisPosition::MAIN; - xProp->getPropertyValue( C2U( "AxisPosition" ) ) >>= nAxisPosition; - m_bIsMainAxis = nAxisPosition==AxisPosition::MAIN; - } - catch( uno::Exception& e ) - { - ASSERT_EXCEPTION( e ); - } + if( ::com::sun::star::chart::ChartAxisPosition_END == m_eCrossoverType ) + m_fInnerDirectionSign = m_bCrossingAxisHasReverseDirection ? 1 : -1; + else + m_fInnerDirectionSign = m_bCrossingAxisHasReverseDirection ? -1 : 1; - m_fInnerDirectionSign = m_bIsMainAxis ? 1 : -1; + if( ::com::sun::star::chart::ChartAxisLabelPosition_NEAR_AXIS == m_eLabelPos ) + m_fLabelDirectionSign = m_fInnerDirectionSign; + else if( ::com::sun::star::chart::ChartAxisLabelPosition_NEAR_AXIS_OTHER_SIDE == m_eLabelPos ) + m_fLabelDirectionSign = -m_fInnerDirectionSign; + else if( ::com::sun::star::chart::ChartAxisLabelPosition_OUTSIDE_START == m_eLabelPos ) + m_fLabelDirectionSign = m_bCrossingAxisHasReverseDirection ? -1 : 1; + else if( ::com::sun::star::chart::ChartAxisLabelPosition_OUTSIDE_END == m_eLabelPos ) + m_fLabelDirectionSign = m_bCrossingAxisHasReverseDirection ? 1 : -1; if( m_nDimensionIndex==2 ) m_aLabelAlignment = lcl_getLabelAlignmentForZAxis(*this); @@ -290,7 +331,10 @@ void AxisProperties::init( bool bCartesian ) bool bIsYAxisPosition = (m_nDimensionIndex==1 && !m_bSwapXAndY) || (m_nDimensionIndex==0 && m_bSwapXAndY); if( bIsYAxisPosition ) + { + m_fLabelDirectionSign*=-1; m_fInnerDirectionSign*=-1; + } if( bIsYAxisPosition ) m_aLabelAlignment = lcl_getLabelAlignmentForYAxis(*this); |