summaryrefslogtreecommitdiff
path: root/chart2/source/tools/AxisHelper.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'chart2/source/tools/AxisHelper.cxx')
-rw-r--r--chart2/source/tools/AxisHelper.cxx91
1 files changed, 88 insertions, 3 deletions
diff --git a/chart2/source/tools/AxisHelper.cxx b/chart2/source/tools/AxisHelper.cxx
index c433292fe6ee..86fee326497b 100644
--- a/chart2/source/tools/AxisHelper.cxx
+++ b/chart2/source/tools/AxisHelper.cxx
@@ -38,6 +38,11 @@
#include "AxisIndexDefines.hxx"
#include "LineProperties.hxx"
#include "ContainerHelper.hxx"
+#include "DataSeriesHelper.hxx"
+
+#include <svtools/saveopt.hxx>
+
+#include <com/sun/star/chart/ChartAxisPosition.hpp>
#include <com/sun/star/chart2/XCoordinateSystemContainer.hpp>
#include <com/sun/star/chart2/XChartTypeContainer.hpp>
#include <com/sun/star/chart2/XDataSeriesContainer.hpp>
@@ -112,6 +117,8 @@ Reference< XAxis > AxisHelper::createAxis(
if( nAxisIndex>0 )//when inserting secondary axes copy some things from the main axis
{
+ ::com::sun::star::chart::ChartAxisPosition eNewAxisPos( ::com::sun::star::chart::ChartAxisPosition_END );
+
Reference< XAxis > xMainAxis( xCooSys->getAxisByDimension( nDimensionIndex, 0 ) );
if( xMainAxis.is() )
{
@@ -123,15 +130,26 @@ Reference< XAxis > AxisHelper::createAxis(
aScale.Orientation = aMainScale.Orientation;
xAxis->setScaleData( aScale );
+
+ //ensure that the second axis is not placed on the main axis
+ Reference< beans::XPropertySet > xMainProp( xMainAxis, uno::UNO_QUERY );
+ if( xMainProp.is() )
+ {
+ ::com::sun::star::chart::ChartAxisPosition eMainAxisPos( ::com::sun::star::chart::ChartAxisPosition_ZERO );
+ xMainProp->getPropertyValue(C2U( "CrossoverPosition" )) >>= eMainAxisPos;
+ if( ::com::sun::star::chart::ChartAxisPosition_END == eMainAxisPos )
+ eNewAxisPos = ::com::sun::star::chart::ChartAxisPosition_START;
+ }
}
+
+ Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
+ if( xProp.is() )
+ xProp->setPropertyValue(C2U( "CrossoverPosition" ), uno::makeAny(eNewAxisPos) );
}
Reference< beans::XPropertySet > xProp( xAxis, uno::UNO_QUERY );
if( xProp.is() ) try
{
- //todo nAxisPosition and nAxisIndex are the same values so far and maybe need to be seperated in future
- xProp->setPropertyValue( C2U( "AxisPosition" ), uno::makeAny( nAxisIndex ) );
-
// set correct initial AutoScale
if( pRefSizeProvider )
pRefSizeProvider->setValuesAtPropertySet( xProp );
@@ -358,6 +376,49 @@ Reference< XAxis > AxisHelper::getAxis( sal_Int32 nDimensionIndex, sal_Int32 nAx
return xRet;
}
+//static
+Reference< XAxis > AxisHelper::getCrossingMainAxis( const Reference< XAxis >& xAxis
+ , const Reference< XCoordinateSystem >& xCooSys )
+{
+ sal_Int32 nDimensionIndex = 0;
+ sal_Int32 nAxisIndex = 0;
+ AxisHelper::getIndicesForAxis( xAxis, xCooSys, nDimensionIndex, nAxisIndex );
+ if( 2==nDimensionIndex )
+ {
+ nDimensionIndex=1;
+ bool bSwapXY = false;
+ Reference< beans::XPropertySet > xCooSysProp( xCooSys, uno::UNO_QUERY );
+ if( xCooSysProp.is() && (xCooSysProp->getPropertyValue( C2U("SwapXAndYAxis") ) >>= bSwapXY) && bSwapXY )
+ nDimensionIndex=0;
+ }
+ else if( 1==nDimensionIndex )
+ nDimensionIndex=0;
+ else
+ nDimensionIndex=1;
+ return AxisHelper::getAxis( nDimensionIndex, 0, xCooSys );
+}
+
+//static
+Reference< XAxis > AxisHelper::getParallelAxis( const Reference< XAxis >& xAxis
+ , const Reference< XDiagram >& xDiagram )
+{
+ try
+ {
+ sal_Int32 nCooSysIndex=-1;
+ sal_Int32 nDimensionIndex=-1;
+ sal_Int32 nAxisIndex=-1;
+ if( getIndicesForAxis( xAxis, xDiagram, nCooSysIndex, nDimensionIndex, nAxisIndex ) )
+ {
+ sal_Int32 nParallelAxisIndex = (nAxisIndex==1) ?0 :1;
+ return getAxis( nDimensionIndex, nParallelAxisIndex, getCoordinateSystemByIndex( xDiagram, nCooSysIndex ) );
+ }
+ }
+ catch( uno::RuntimeException& )
+ {
+ }
+ return 0;
+}
+
sal_Bool AxisHelper::isAxisShown( sal_Int32 nDimensionIndex, bool bMainAxis
, const Reference< XDiagram >& xDiagram )
{
@@ -787,6 +848,30 @@ Reference< XChartType > AxisHelper::getChartTypeByIndex( const Reference< XCoord
return xChartType;
}
+Reference< XChartType > AxisHelper::getFirstChartTypeWithSeriesAttachedToAxisIndex( const Reference< chart2::XDiagram >& xDiagram, const sal_Int32 nAttachedAxisIndex )
+{
+ Reference< XChartType > xChartType;
+ ::std::vector< Reference< XDataSeries > > aSeriesVector( DiagramHelper::getDataSeriesFromDiagram( xDiagram ) );
+ ::std::vector< Reference< XDataSeries > >::const_iterator aIter = aSeriesVector.begin();
+ for( ; aIter != aSeriesVector.end(); aIter++ )
+ {
+ sal_Int32 nCurrentIndex = DataSeriesHelper::getAttachedAxisIndex( *aIter );
+ if( nAttachedAxisIndex == nCurrentIndex )
+ {
+ xChartType = DiagramHelper::getChartTypeOfSeries( xDiagram, *aIter );
+ if(xChartType.is())
+ break;
+ }
+ }
+ return xChartType;
+}
+
+bool AxisHelper::isAxisPositioningEnabled()
+{
+ const SvtSaveOptions::ODFDefaultVersion nCurrentVersion( SvtSaveOptions().GetODFDefaultVersion() );
+ return nCurrentVersion >= SvtSaveOptions::ODFVER_012;
+}
+
//.............................................................................
} //namespace chart
//.............................................................................