[Libreoffice-commits] core.git: 5 commits - chart2/inc chart2/source
Kohei Yoshida
kohei.yoshida at collabora.com
Fri Sep 19 10:47:08 PDT 2014
chart2/inc/ChartView.hxx | 3
chart2/source/tools/DiagramHelper.cxx | 153 ++++----
chart2/source/view/main/ChartView.cxx | 589 ++++++++++++++++++----------------
3 files changed, 396 insertions(+), 349 deletions(-)
New commits:
commit be775a1ab40ccedfbc9659120b82867d6c128e6a
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Sep 19 13:14:25 2014 -0400
Move the code that creates shapes for axis titles to own method.
This change also creates a struct that keeps track of states during
shape creation, to make it easier to extract methods as necessary.
Change-Id: I0d84dbee9dba5b9c59d22e4a1be318c5e8c6c6c3
diff --git a/chart2/inc/ChartView.hxx b/chart2/inc/ChartView.hxx
index cf217b7..51b6a48 100644
--- a/chart2/inc/ChartView.hxx
+++ b/chart2/inc/ChartView.hxx
@@ -56,6 +56,7 @@ class SeriesPlotterContainer;
class VDataSeries;
class GL3DPlotterBase;
class GL2DRenderer;
+struct CreateShapeParam2D;
enum TimeBasedMode
{
@@ -204,6 +205,7 @@ private: //methods
void createShapes();
void createShapes2D( const css::awt::Size& rPageSize );
+ bool createAxisTitleShapes2D( const css::awt::Size& rPageSize, CreateShapeParam2D& rParam );
void createShapes3D();
bool isReal3DChart();
void getMetaFile( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutStream
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 7194c3c..34f0ee1 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -130,6 +130,32 @@ class theExplicitValueProviderUnoTunnelId : public rtl::Static<UnoTunnelIdInit,
}
+struct CreateShapeParam2D
+{
+ css::awt::Rectangle maRemainingSpace;
+
+ boost::shared_ptr<VTitle> mpVTitleX;
+ boost::shared_ptr<VTitle> mpVTitleY;
+ boost::shared_ptr<VTitle> mpVTitleZ;
+
+ boost::shared_ptr<VTitle> mpVTitleSecondX;
+ boost::shared_ptr<VTitle> mpVTitleSecondY;
+
+ bool mbAutoPosTitleX;
+ bool mbAutoPosTitleY;
+ bool mbAutoPosTitleZ;
+
+ bool mbAutoPosSecondTitleX;
+ bool mbAutoPosSecondTitleY;
+
+ CreateShapeParam2D() :
+ mbAutoPosTitleX(true),
+ mbAutoPosTitleY(true),
+ mbAutoPosTitleZ(true),
+ mbAutoPosSecondTitleX(true),
+ mbAutoPosSecondTitleY(true) {}
+};
+
class GL2DRenderer : public IRenderer
{
public:
@@ -2992,8 +3018,11 @@ void ChartView::createShapes2D( const awt::Size& rPageSize )
// but the draw page does not support XPropertySet
formatPage( mrChartModel, rPageSize, mxRootShape, m_xShapeFactory );
- //sal_Int32 nYDistance = static_cast<sal_Int32>(aPageSize.Height*lcl_getPageLayoutDistancePercentage());
- awt::Rectangle aRemainingSpace( 0, 0, rPageSize.Width, rPageSize.Height );
+ CreateShapeParam2D aParam;
+ aParam.maRemainingSpace.X = 0;
+ aParam.maRemainingSpace.Y = 0;
+ aParam.maRemainingSpace.Width = rPageSize.Width;
+ aParam.maRemainingSpace.Height = rPageSize.Height;
//create the group shape for diagram and axes first to have title and legends on top of it
uno::Reference< XDiagram > xDiagram( mrChartModel.getFirstDiagram() );
@@ -3013,14 +3042,16 @@ void ChartView::createShapes2D( const awt::Size& rPageSize )
bool bAutoPositionDummy = true;
- lcl_createTitle( TitleHelper::MAIN_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, ALIGN_TOP, bAutoPositionDummy );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ lcl_createTitle(
+ TitleHelper::MAIN_TITLE, mxRootShape, m_xShapeFactory, mrChartModel,
+ aParam.maRemainingSpace, rPageSize, ALIGN_TOP, bAutoPositionDummy);
+ if (aParam.maRemainingSpace.Width <= 0 || aParam.maRemainingSpace.Height <= 0)
return;
- lcl_createTitle( TitleHelper::SUB_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, ALIGN_TOP, bAutoPositionDummy );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ lcl_createTitle(
+ TitleHelper::SUB_TITLE, mxRootShape, m_xShapeFactory, mrChartModel,
+ aParam.maRemainingSpace, rPageSize, ALIGN_TOP, bAutoPositionDummy );
+ if (aParam.maRemainingSpace.Width <= 0|| aParam.maRemainingSpace.Height <= 0)
return;
SeriesPlotterContainer aSeriesPlotterContainer( m_aVCooSysList );
@@ -3045,63 +3076,24 @@ void ChartView::createShapes2D( const awt::Size& rPageSize )
}
}
- lcl_createLegend( LegendHelper::getLegend( mrChartModel ), mxRootShape, m_xShapeFactory, m_xCC
- , aRemainingSpace, rPageSize, mrChartModel, aSeriesPlotterContainer.getLegendEntryProviderList()
- , lcl_getDefaultWritingModeFromPool( m_pDrawModelWrapper ) );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) );
- sal_Int32 nDimension = DiagramHelper::getDimension( xDiagram );
-
- bool bAutoPosition_XTitle = true;
- boost::shared_ptr<VTitle> apVTitle_X;
- if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 0 ) )
- apVTitle_X = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, ALIGN_BOTTOM, bAutoPosition_XTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bAutoPosition_YTitle = true;
- boost::shared_ptr<VTitle> apVTitle_Y;
- if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 1 ) )
- apVTitle_Y = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, ALIGN_LEFT, bAutoPosition_YTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bAutoPosition_ZTitle = true;
- boost::shared_ptr<VTitle> apVTitle_Z;
- if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 2 ) )
- apVTitle_Z = lcl_createTitle( TitleHelper::Z_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, ALIGN_RIGHT, bAutoPosition_ZTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bDummy = false;
- bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy );
-
- bool bAutoPosition_SecondXTitle = true;
- boost::shared_ptr<VTitle> apVTitle_SecondX;
- if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 0 ) )
- apVTitle_SecondX = lcl_createTitle( TitleHelper::SECONDARY_X_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, bIsVertical? ALIGN_RIGHT : ALIGN_TOP, bAutoPosition_SecondXTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ lcl_createLegend(
+ LegendHelper::getLegend( mrChartModel ), mxRootShape, m_xShapeFactory, m_xCC,
+ aParam.maRemainingSpace, rPageSize, mrChartModel, aSeriesPlotterContainer.getLegendEntryProviderList(),
+ lcl_getDefaultWritingModeFromPool( m_pDrawModelWrapper ) );
+ if (aParam.maRemainingSpace.Width <= 0 || aParam.maRemainingSpace.Height <= 0)
return;
- bool bAutoPosition_SecondYTitle = true;
- boost::shared_ptr<VTitle> apVTitle_SecondY;
- if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 1 ) )
- apVTitle_SecondY = lcl_createTitle( TitleHelper::SECONDARY_Y_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, rPageSize, bIsVertical? ALIGN_TOP : ALIGN_RIGHT, bAutoPosition_SecondYTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ if (!createAxisTitleShapes2D(rPageSize, aParam))
return;
awt::Point aAvailablePosDia;
awt::Size aAvailableSizeForDiagram;
bool bUseFixedInnerSize = false;
- if( getAvailablePosAndSizeForDiagram( aAvailablePosDia, aAvailableSizeForDiagram, aRemainingSpace, rPageSize
- , mrChartModel.getFirstDiagram(), bUseFixedInnerSize ) )
+ bool bDummy = false;
+ bool bIsVertical = DiagramHelper::getVertical(xDiagram, bDummy, bDummy);
+
+ if (getAvailablePosAndSizeForDiagram(
+ aAvailablePosDia, aAvailableSizeForDiagram, aParam.maRemainingSpace, rPageSize, mrChartModel.getFirstDiagram(), bUseFixedInnerSize))
{
awt::Rectangle aUsedOuterRect = impl_createDiagramAndContent( aSeriesPlotterContainer
, xDiagramPlusAxes_Shapes
@@ -3115,16 +3107,16 @@ void ChartView::createShapes2D( const awt::Size& rPageSize )
//correct axis title position
awt::Rectangle aDiagramPlusAxesRect( aUsedOuterRect );
- if(bAutoPosition_XTitle)
- changePositionOfAxisTitle( apVTitle_X.get(), ALIGN_BOTTOM, aDiagramPlusAxesRect, rPageSize );
- if(bAutoPosition_YTitle)
- changePositionOfAxisTitle( apVTitle_Y.get(), ALIGN_LEFT, aDiagramPlusAxesRect, rPageSize );
- if(bAutoPosition_ZTitle)
- changePositionOfAxisTitle( apVTitle_Z.get(), ALIGN_Z, aDiagramPlusAxesRect, rPageSize );
- if(bAutoPosition_SecondXTitle)
- changePositionOfAxisTitle( apVTitle_SecondX.get(), bIsVertical? ALIGN_RIGHT : ALIGN_TOP, aDiagramPlusAxesRect, rPageSize );
- if(bAutoPosition_SecondYTitle)
- changePositionOfAxisTitle( apVTitle_SecondY.get(), bIsVertical? ALIGN_TOP : ALIGN_RIGHT, aDiagramPlusAxesRect, rPageSize );
+ if (aParam.mbAutoPosTitleX)
+ changePositionOfAxisTitle(aParam.mpVTitleX.get(), ALIGN_BOTTOM, aDiagramPlusAxesRect, rPageSize);
+ if (aParam.mbAutoPosTitleY)
+ changePositionOfAxisTitle(aParam.mpVTitleY.get(), ALIGN_LEFT, aDiagramPlusAxesRect, rPageSize);
+ if (aParam.mbAutoPosTitleZ)
+ changePositionOfAxisTitle(aParam.mpVTitleZ.get(), ALIGN_Z, aDiagramPlusAxesRect, rPageSize);
+ if (aParam.mbAutoPosSecondTitleX)
+ changePositionOfAxisTitle(aParam.mpVTitleSecondX.get(), bIsVertical? ALIGN_RIGHT : ALIGN_TOP, aDiagramPlusAxesRect, rPageSize);
+ if (aParam.mbAutoPosSecondTitleY)
+ changePositionOfAxisTitle(aParam.mpVTitleSecondY.get(), bIsVertical? ALIGN_TOP : ALIGN_RIGHT, aDiagramPlusAxesRect, rPageSize);
}
//cleanup: remove all empty group shapes to avoid grey border lines:
@@ -3171,6 +3163,49 @@ void ChartView::createShapes2D( const awt::Size& rPageSize )
}
}
+bool ChartView::createAxisTitleShapes2D( const css::awt::Size& rPageSize, CreateShapeParam2D& rParam )
+{
+ uno::Reference<XDiagram> xDiagram = mrChartModel.getFirstDiagram();
+
+ Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) );
+ sal_Int32 nDimension = DiagramHelper::getDimension( xDiagram );
+
+ if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 0 ) )
+ rParam.mpVTitleX = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
+ , rParam.maRemainingSpace, rPageSize, ALIGN_BOTTOM, rParam.mbAutoPosTitleX );
+ if (rParam.maRemainingSpace.Width <= 0 ||rParam.maRemainingSpace.Height <= 0)
+ return false;
+
+ if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 1 ) )
+ rParam.mpVTitleY = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
+ , rParam.maRemainingSpace, rPageSize, ALIGN_LEFT, rParam.mbAutoPosTitleY );
+ if (rParam.maRemainingSpace.Width <= 0 || rParam.maRemainingSpace.Height <= 0)
+ return false;
+
+ if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 2 ) )
+ rParam.mpVTitleZ = lcl_createTitle( TitleHelper::Z_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , rParam.maRemainingSpace, rPageSize, ALIGN_RIGHT, rParam.mbAutoPosTitleZ );
+ if (rParam.maRemainingSpace.Width <= 0 || rParam.maRemainingSpace.Height <= 0)
+ return false;
+
+ bool bDummy = false;
+ bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy );
+
+ if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 0 ) )
+ rParam.mpVTitleSecondX = lcl_createTitle( TitleHelper::SECONDARY_X_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , rParam.maRemainingSpace, rPageSize, bIsVertical? ALIGN_RIGHT : ALIGN_TOP, rParam.mbAutoPosSecondTitleX );
+ if (rParam.maRemainingSpace.Width <= 0 || rParam.maRemainingSpace.Height <= 0)
+ return false;
+
+ if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 1 ) )
+ rParam.mpVTitleSecondY = lcl_createTitle( TitleHelper::SECONDARY_Y_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , rParam.maRemainingSpace, rPageSize, bIsVertical? ALIGN_TOP : ALIGN_RIGHT, rParam.mbAutoPosSecondTitleY );
+ if (rParam.maRemainingSpace.Width <= 0 || rParam.maRemainingSpace.Height <= 0)
+ return false;
+
+ return true;
+}
+
void ChartView::createShapes3D()
{
OpenGLWindow* pWindow = mrChartModel.getOpenGLWindow();
commit e55fd119c0eb9ecbbda1a95902f888a795bf8345
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Sep 19 11:53:18 2014 -0400
More scope reduction.
Change-Id: Ibaabf1122fb3e828c1b7b71e846911d77f312445
diff --git a/chart2/source/tools/DiagramHelper.cxx b/chart2/source/tools/DiagramHelper.cxx
index dec53af..765937b 100644
--- a/chart2/source/tools/DiagramHelper.cxx
+++ b/chart2/source/tools/DiagramHelper.cxx
@@ -136,66 +136,67 @@ void DiagramHelper::setVertical(
try
{
Reference< XCoordinateSystemContainer > xCnt( xDiagram, uno::UNO_QUERY );
- if( xCnt.is())
+ if (!xCnt.is())
+ return;
+
+ Sequence< Reference<XCoordinateSystem> > aCooSys = xCnt->getCoordinateSystems();
+ uno::Any aValue;
+ aValue <<= bVertical;
+ for( sal_Int32 i=0; i<aCooSys.getLength(); ++i )
{
- Sequence< Reference< XCoordinateSystem > > aCooSys(
- xCnt->getCoordinateSystems());
- uno::Any aValue;
- aValue <<= bVertical;
- for( sal_Int32 i=0; i<aCooSys.getLength(); ++i )
+ uno::Reference< XCoordinateSystem > xCooSys( aCooSys[i] );
+ Reference< beans::XPropertySet > xProp( xCooSys, uno::UNO_QUERY );
+ bool bChanged = false;
+ if (xProp.is())
{
- uno::Reference< XCoordinateSystem > xCooSys( aCooSys[i] );
- Reference< beans::XPropertySet > xProp( xCooSys, uno::UNO_QUERY );
- bool bChanged = false;
- if( xProp.is() )
- {
- bool bOldSwap = false;
- if( !(xProp->getPropertyValue( "SwapXAndYAxis" ) >>= bOldSwap)
- || bVertical != bOldSwap )
- bChanged = true;
+ bool bOldSwap = false;
+ if( !(xProp->getPropertyValue("SwapXAndYAxis") >>= bOldSwap)
+ || bVertical != bOldSwap )
+ bChanged = true;
- if( bChanged )
- xProp->setPropertyValue( "SwapXAndYAxis", aValue );
- }
- if( xCooSys.is() )
+ if( bChanged )
+ xProp->setPropertyValue("SwapXAndYAxis", aValue);
+ }
+
+ if (!xCooSys.is())
+ continue;
+
+ const sal_Int32 nDimensionCount = xCooSys->getDimension();
+ sal_Int32 nDimIndex = 0;
+ for (nDimIndex=0; nDimIndex < nDimensionCount; ++nDimIndex)
+ {
+ const sal_Int32 nMaximumScaleIndex = xCooSys->getMaximumAxisIndexByDimension(nDimIndex);
+ for (sal_Int32 nI = 0; nI <= nMaximumScaleIndex; ++nI)
{
- const sal_Int32 nDimensionCount( xCooSys->getDimension() );
- sal_Int32 nDimIndex = 0;
- for(nDimIndex=0; nDimIndex<nDimensionCount; ++nDimIndex)
- {
- const sal_Int32 nMaximumScaleIndex = xCooSys->getMaximumAxisIndexByDimension(nDimIndex);
- for(sal_Int32 nI=0; nI<=nMaximumScaleIndex; ++nI)
- {
- Reference< chart2::XAxis > xAxis( xCooSys->getAxisByDimension( nDimIndex,nI ));
- if( xAxis.is() )
- {
- //adapt title rotation only when axis swapping has changed
- if( bChanged )
- {
- Reference< XTitled > xTitled( xAxis, uno::UNO_QUERY );
- if( xTitled.is())
- {
- Reference< beans::XPropertySet > xTitleProps( xTitled->getTitleObject(), uno::UNO_QUERY );
- if( !xTitleProps.is() )
- continue;
- double fAngleDegree = 0.0;
- xTitleProps->getPropertyValue( "TextRotation" ) >>= fAngleDegree;
- if( !::rtl::math::approxEqual( fAngleDegree, 0.0 )
- && !::rtl::math::approxEqual( fAngleDegree, 90.0 ) )
- continue;
-
- double fNewAngleDegree = 0.0;
- if( !bVertical && nDimIndex == 1 )
- fNewAngleDegree = 90.0;
- else if( bVertical && nDimIndex == 0 )
- fNewAngleDegree = 90.0;
-
- xTitleProps->setPropertyValue( "TextRotation", uno::makeAny( fNewAngleDegree ));
- }
- }
- }
- }
- }
+ Reference<chart2::XAxis> xAxis = xCooSys->getAxisByDimension(nDimIndex,nI);
+ if (!xAxis.is())
+ continue;
+
+ //adapt title rotation only when axis swapping has changed
+ if (!bChanged)
+ continue;
+
+ Reference< XTitled > xTitled( xAxis, uno::UNO_QUERY );
+ if (!xTitled.is())
+ continue;
+
+ Reference< beans::XPropertySet > xTitleProps( xTitled->getTitleObject(), uno::UNO_QUERY );
+ if (!xTitleProps.is())
+ continue;
+
+ double fAngleDegree = 0.0;
+ xTitleProps->getPropertyValue("TextRotation") >>= fAngleDegree;
+ if (!rtl::math::approxEqual(fAngleDegree, 0.0) &&
+ !rtl::math::approxEqual(fAngleDegree, 90.0))
+ continue;
+
+ double fNewAngleDegree = 0.0;
+ if( !bVertical && nDimIndex == 1 )
+ fNewAngleDegree = 90.0;
+ else if( bVertical && nDimIndex == 0 )
+ fNewAngleDegree = 90.0;
+
+ xTitleProps->setPropertyValue("TextRotation", uno::makeAny(fNewAngleDegree));
}
}
}
@@ -214,29 +215,29 @@ bool DiagramHelper::getVertical( const uno::Reference< chart2::XDiagram > & xDia
rbAmbiguous = false;
Reference< XCoordinateSystemContainer > xCnt( xDiagram, uno::UNO_QUERY );
- if( xCnt.is())
+ if (!xCnt.is())
+ return false;
+
+ Sequence< Reference<XCoordinateSystem> > aCooSys = xCnt->getCoordinateSystems();
+
+ for (sal_Int32 i = 0; i < aCooSys.getLength(); ++i)
{
- Sequence< Reference< XCoordinateSystem > > aCooSys(
- xCnt->getCoordinateSystems());
- for( sal_Int32 i=0; i<aCooSys.getLength(); ++i )
+ Reference<beans::XPropertySet> xProp(aCooSys[i], uno::UNO_QUERY);
+ if (!xProp.is())
+ continue;
+
+ bool bCurrent = false;
+ if (xProp->getPropertyValue("SwapXAndYAxis") >>= bCurrent)
{
- Reference< beans::XPropertySet > xProp( aCooSys[i], uno::UNO_QUERY );
- if( xProp.is())
+ if (!rbFound)
{
- bool bCurrent = false;
- if( xProp->getPropertyValue( "SwapXAndYAxis" ) >>= bCurrent )
- {
- if( !rbFound )
- {
- bValue = bCurrent;
- rbFound = true;
- }
- else if( bCurrent != bValue )
- {
- // ambiguous -> choose always first found
- rbAmbiguous = true;
- }
- }
+ bValue = bCurrent;
+ rbFound = true;
+ }
+ else if (bCurrent != bValue)
+ {
+ // ambiguous -> choose always first found
+ rbAmbiguous = true;
}
}
}
commit 4e58aa02bf7a61804a64626cf9b9d3f36a1959da
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Sep 19 11:36:23 2014 -0400
Scope reduction.
Change-Id: Id677971ccd6959356a781a2d8c35ab864b35a62e
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 9e75190..7194c3c 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -1384,15 +1384,15 @@ void lcl_setDefaultWritingMode( ::boost::shared_ptr< DrawModelWrapper > pDrawMod
}
}
-sal_Int16 lcl_getDefaultWritingModeFromPool( ::boost::shared_ptr< DrawModelWrapper > pDrawModelWrapper )
+sal_Int16 lcl_getDefaultWritingModeFromPool( const boost::shared_ptr<DrawModelWrapper>& pDrawModelWrapper )
{
sal_Int16 nWritingMode = text::WritingMode2::LR_TB;
- if( pDrawModelWrapper.get() )
- {
- const SfxPoolItem* pItem = &(pDrawModelWrapper->GetItemPool().GetDefaultItem( EE_PARA_WRITINGDIR ));
- if( pItem )
- nWritingMode = static_cast< sal_Int16 >((static_cast< const SvxFrameDirectionItem * >( pItem ))->GetValue());
- }
+ if(!pDrawModelWrapper)
+ return nWritingMode;
+
+ const SfxPoolItem* pItem = &(pDrawModelWrapper->GetItemPool().GetDefaultItem( EE_PARA_WRITINGDIR ));
+ if( pItem )
+ nWritingMode = static_cast< sal_Int16 >((static_cast< const SvxFrameDirectionItem * >( pItem ))->GetValue());
return nWritingMode;
}
@@ -2327,17 +2327,16 @@ bool lcl_createLegend( const uno::Reference< XLegend > & xLegend
, const std::vector< LegendEntryProvider* >& rLegendEntryProviderList
, sal_Int16 nDefaultWritingMode )
{
- if( VLegend::isVisible( xLegend ))
- {
- VLegend aVLegend( xLegend, xContext, rLegendEntryProviderList,
- xPageShapes, xShapeFactory, rModel);
- aVLegend.setDefaultWritingMode( nDefaultWritingMode );
- aVLegend.createShapes( awt::Size( rRemainingSpace.Width, rRemainingSpace.Height ),
- rPageSize );
- aVLegend.changePosition( rRemainingSpace, rPageSize );
- return true;
- }
- return false;
+ if (!VLegend::isVisible(xLegend))
+ return false;
+
+ VLegend aVLegend( xLegend, xContext, rLegendEntryProviderList,
+ xPageShapes, xShapeFactory, rModel);
+ aVLegend.setDefaultWritingMode( nDefaultWritingMode );
+ aVLegend.createShapes( awt::Size( rRemainingSpace.Width, rRemainingSpace.Height ),
+ rPageSize );
+ aVLegend.changePosition( rRemainingSpace, rPageSize );
+ return true;
}
void formatPage(
commit b26b1f79b70fb0f7ee049033039925854259f227
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Sep 19 11:23:14 2014 -0400
Reduce scope by early bailout.
Change-Id: Icd344caf6e52ef568361078455d4e8d5cf0d40a8
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 93a9b87..9e75190 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2232,82 +2232,86 @@ boost::shared_ptr<VTitle> lcl_createTitle( TitleHelper::eTitleType eType
}
uno::Reference< XTitle > xTitle( TitleHelper::getTitle( eType, rModel ) );
- OUString aCompleteString( TitleHelper::getCompleteString( xTitle ) );
- if( !aCompleteString.isEmpty() )
- {
- //create title
- apVTitle.reset(new VTitle(xTitle));
- OUString aCID( ObjectIdentifier::createClassifiedIdentifierForObject( xTitle, rModel ) );
- apVTitle->init(xPageShapes,xShapeFactory,aCID);
- apVTitle->createShapes( awt::Point(0,0), rPageSize );
- awt::Size aTitleUnrotatedSize = apVTitle->getUnrotatedSize();
- awt::Size aTitleSize = apVTitle->getFinalSize();
-
- //position
- rbAutoPosition=true;
- awt::Point aNewPosition(0,0);
- chart2::RelativePosition aRelativePosition;
- uno::Reference< beans::XPropertySet > xProp(xTitle, uno::UNO_QUERY);
- if( xProp.is() && (xProp->getPropertyValue( "RelativePosition" )>>=aRelativePosition) )
- {
- rbAutoPosition = false;
+ OUString aCompleteString = TitleHelper::getCompleteString(xTitle);
+ if (aCompleteString.isEmpty())
+ return apVTitle;
+
+ //create title
+ apVTitle.reset(new VTitle(xTitle));
+ OUString aCID = ObjectIdentifier::createClassifiedIdentifierForObject(xTitle, rModel);
+ apVTitle->init(xPageShapes, xShapeFactory, aCID);
+ apVTitle->createShapes(awt::Point(0,0), rPageSize);
+ awt::Size aTitleUnrotatedSize = apVTitle->getUnrotatedSize();
+ awt::Size aTitleSize = apVTitle->getFinalSize();
+
+ //position
+ rbAutoPosition = true;
+ awt::Point aNewPosition(0,0);
+ chart2::RelativePosition aRelativePosition;
+ uno::Reference<beans::XPropertySet> xProp(xTitle, uno::UNO_QUERY);
+ if (xProp.is() && (xProp->getPropertyValue("RelativePosition") >>= aRelativePosition))
+ {
+ rbAutoPosition = false;
- //@todo decide whether x is primary or secondary
- double fX = aRelativePosition.Primary*rPageSize.Width;
- double fY = aRelativePosition.Secondary*rPageSize.Height;
+ //@todo decide whether x is primary or secondary
+ double fX = aRelativePosition.Primary*rPageSize.Width;
+ double fY = aRelativePosition.Secondary*rPageSize.Height;
- double fAnglePi = apVTitle->getRotationAnglePi();
- aNewPosition = RelativePositionHelper::getCenterOfAnchoredObject(
- awt::Point(static_cast<sal_Int32>(fX),static_cast<sal_Int32>(fY))
- , aTitleUnrotatedSize, aRelativePosition.Anchor, fAnglePi );
- }
- else //auto position
+ double fAnglePi = apVTitle->getRotationAnglePi();
+ aNewPosition = RelativePositionHelper::getCenterOfAnchoredObject(
+ awt::Point(static_cast<sal_Int32>(fX),static_cast<sal_Int32>(fY))
+ , aTitleUnrotatedSize, aRelativePosition.Anchor, fAnglePi );
+ }
+ else //auto position
+ {
+ switch( eAlignment )
{
- switch( eAlignment )
- {
- case ALIGN_TOP:
- aNewPosition = awt::Point( rRemainingSpace.X + rRemainingSpace.Width/2
- , rRemainingSpace.Y + aTitleSize.Height/2 + nYDistance );
- break;
- case ALIGN_BOTTOM:
- aNewPosition = awt::Point( rRemainingSpace.X + rRemainingSpace.Width/2
- , rRemainingSpace.Y + rRemainingSpace.Height - aTitleSize.Height/2 - nYDistance );
- break;
- case ALIGN_LEFT:
- aNewPosition = awt::Point( rRemainingSpace.X + aTitleSize.Width/2 + nXDistance
- , rRemainingSpace.Y + rRemainingSpace.Height/2 );
- break;
- case ALIGN_RIGHT:
- aNewPosition = awt::Point( rRemainingSpace.X + rRemainingSpace.Width - aTitleSize.Width/2 - nXDistance
- , rRemainingSpace.Y + rRemainingSpace.Height/2 );
- break;
- default:
- break;
+ case ALIGN_TOP:
+ aNewPosition = awt::Point( rRemainingSpace.X + rRemainingSpace.Width/2
+ , rRemainingSpace.Y + aTitleSize.Height/2 + nYDistance );
+ break;
+ case ALIGN_BOTTOM:
+ aNewPosition = awt::Point( rRemainingSpace.X + rRemainingSpace.Width/2
+ , rRemainingSpace.Y + rRemainingSpace.Height - aTitleSize.Height/2 - nYDistance );
+ break;
+ case ALIGN_LEFT:
+ aNewPosition = awt::Point( rRemainingSpace.X + aTitleSize.Width/2 + nXDistance
+ , rRemainingSpace.Y + rRemainingSpace.Height/2 );
+ break;
+ case ALIGN_RIGHT:
+ aNewPosition = awt::Point( rRemainingSpace.X + rRemainingSpace.Width - aTitleSize.Width/2 - nXDistance
+ , rRemainingSpace.Y + rRemainingSpace.Height/2 );
+ break;
+ default:
+ break;
- }
}
- apVTitle->changePosition( aNewPosition );
+ }
+ apVTitle->changePosition( aNewPosition );
- //remaining space
- switch( eAlignment )
- {
- case ALIGN_TOP:
- rRemainingSpace.Y += ( aTitleSize.Height + nYDistance );
- rRemainingSpace.Height -= ( aTitleSize.Height + nYDistance );
- break;
- case ALIGN_BOTTOM:
- rRemainingSpace.Height -= ( aTitleSize.Height + nYDistance );
- break;
- case ALIGN_LEFT:
- rRemainingSpace.X += ( aTitleSize.Width + nXDistance );
- rRemainingSpace.Width -= ( aTitleSize.Width + nXDistance );
- break;
- case ALIGN_RIGHT:
- rRemainingSpace.Width -= ( aTitleSize.Width + nXDistance );
- break;
- default:
- break;
- }
+ //remaining space
+ switch( eAlignment )
+ {
+ case ALIGN_TOP:
+ // Push the remaining space down from top.
+ rRemainingSpace.Y += ( aTitleSize.Height + nYDistance );
+ rRemainingSpace.Height -= ( aTitleSize.Height + nYDistance );
+ break;
+ case ALIGN_BOTTOM:
+ // Push the remaining space up from bottom.
+ rRemainingSpace.Height -= ( aTitleSize.Height + nYDistance );
+ break;
+ case ALIGN_LEFT:
+ // Push the remaining space to the right from left edge.
+ rRemainingSpace.X += ( aTitleSize.Width + nXDistance );
+ rRemainingSpace.Width -= ( aTitleSize.Width + nXDistance );
+ break;
+ case ALIGN_RIGHT:
+ // Push the remaining space to the left from right edge.
+ rRemainingSpace.Width -= ( aTitleSize.Width + nXDistance );
+ break;
+ default:
+ break;
}
return apVTitle;
commit 6d0592b40ec8c6f7e36b58a21efc78927ceaa012
Author: Kohei Yoshida <kohei.yoshida at collabora.com>
Date: Fri Sep 19 10:48:04 2014 -0400
Move the 2D shape creation code into a separate method.
Change-Id: I38ccb7f98f404540f5cf3c32be27da19394475a0
diff --git a/chart2/inc/ChartView.hxx b/chart2/inc/ChartView.hxx
index 4f2b961..cf217b7 100644
--- a/chart2/inc/ChartView.hxx
+++ b/chart2/inc/ChartView.hxx
@@ -203,6 +203,7 @@ private: //methods
ChartView();
void createShapes();
+ void createShapes2D( const css::awt::Size& rPageSize );
void createShapes3D();
bool isReal3DChart();
void getMetaFile( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XOutputStream >& xOutStream
diff --git a/chart2/source/view/main/ChartView.cxx b/chart2/source/view/main/ChartView.cxx
index 77a70f8d..93a9b87 100644
--- a/chart2/source/view/main/ChartView.cxx
+++ b/chart2/source/view/main/ChartView.cxx
@@ -2504,191 +2504,7 @@ void ChartView::createShapes()
}
#endif
- {
- SolarMutexGuard aSolarGuard;
-
- // todo: it would be nicer to just pass the page m_xDrawPage and format it,
- // but the draw page does not support XPropertySet
- formatPage( mrChartModel, aPageSize, mxRootShape, m_xShapeFactory );
-
- //sal_Int32 nYDistance = static_cast<sal_Int32>(aPageSize.Height*lcl_getPageLayoutDistancePercentage());
- awt::Rectangle aRemainingSpace( 0, 0, aPageSize.Width, aPageSize.Height );
-
- //create the group shape for diagram and axes first to have title and legends on top of it
- uno::Reference< XDiagram > xDiagram( mrChartModel.getFirstDiagram() );
- OUString aDiagramCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM, OUString::number( 0 ) ) );//todo: other index if more than one diagram is possible
- uno::Reference< drawing::XShapes > xDiagramPlusAxesPlusMarkHandlesGroup_Shapes(
- pShapeFactory->createGroup2D(mxRootShape,aDiagramCID) );
-
- uno::Reference< drawing::XShape > xDiagram_MarkHandles( pShapeFactory->createInvisibleRectangle(
- xDiagramPlusAxesPlusMarkHandlesGroup_Shapes, awt::Size(0,0) ) );
- AbstractShapeFactory::setShapeName( xDiagram_MarkHandles, "MarkHandles" );
-
- uno::Reference< drawing::XShape > xDiagram_OuterRect( pShapeFactory->createInvisibleRectangle(
- xDiagramPlusAxesPlusMarkHandlesGroup_Shapes, awt::Size(0,0) ) );
- AbstractShapeFactory::setShapeName( xDiagram_OuterRect, "PlotAreaIncludingAxes" );
-
- uno::Reference< drawing::XShapes > xDiagramPlusAxes_Shapes( pShapeFactory->createGroup2D(xDiagramPlusAxesPlusMarkHandlesGroup_Shapes ) );
-
- bool bAutoPositionDummy = true;
-
- lcl_createTitle( TitleHelper::MAIN_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, ALIGN_TOP, bAutoPositionDummy );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- lcl_createTitle( TitleHelper::SUB_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, ALIGN_TOP, bAutoPositionDummy );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- SeriesPlotterContainer aSeriesPlotterContainer( m_aVCooSysList );
- aSeriesPlotterContainer.initializeCooSysAndSeriesPlotter( mrChartModel );
- if(maTimeBased.bTimeBased && maTimeBased.nFrame != 0)
- {
- std::vector<VSeriesPlotter*>& rSeriesPlotter =
- aSeriesPlotterContainer.getSeriesPlotterList();
- size_t n = rSeriesPlotter.size();
- for(size_t i = 0; i < n; ++i)
- {
- std::vector< VDataSeries* > aAllNewDataSeries =
- rSeriesPlotter[i]->getAllSeries();
- std::vector< VDataSeries* >& rAllOldDataSeries =
- maTimeBased.m_aDataSeriesList[i];
- size_t m = std::min(aAllNewDataSeries.size(), rAllOldDataSeries.size());
- for(size_t j = 0; j < m; ++j)
- {
- aAllNewDataSeries[j]->setOldTimeBased(
- rAllOldDataSeries[j], (maTimeBased.nFrame % 60)/60.0);
- }
- }
- }
-
- lcl_createLegend( LegendHelper::getLegend( mrChartModel ), mxRootShape, m_xShapeFactory, m_xCC
- , aRemainingSpace, aPageSize, mrChartModel, aSeriesPlotterContainer.getLegendEntryProviderList()
- , lcl_getDefaultWritingModeFromPool( m_pDrawModelWrapper ) );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) );
- sal_Int32 nDimension = DiagramHelper::getDimension( xDiagram );
-
- bool bAutoPosition_XTitle = true;
- boost::shared_ptr<VTitle> apVTitle_X;
- if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 0 ) )
- apVTitle_X = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, ALIGN_BOTTOM, bAutoPosition_XTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bAutoPosition_YTitle = true;
- boost::shared_ptr<VTitle> apVTitle_Y;
- if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 1 ) )
- apVTitle_Y = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, ALIGN_LEFT, bAutoPosition_YTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bAutoPosition_ZTitle = true;
- boost::shared_ptr<VTitle> apVTitle_Z;
- if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 2 ) )
- apVTitle_Z = lcl_createTitle( TitleHelper::Z_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, ALIGN_RIGHT, bAutoPosition_ZTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bDummy = false;
- bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy );
-
- bool bAutoPosition_SecondXTitle = true;
- boost::shared_ptr<VTitle> apVTitle_SecondX;
- if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 0 ) )
- apVTitle_SecondX = lcl_createTitle( TitleHelper::SECONDARY_X_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, bIsVertical? ALIGN_RIGHT : ALIGN_TOP, bAutoPosition_SecondXTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- bool bAutoPosition_SecondYTitle = true;
- boost::shared_ptr<VTitle> apVTitle_SecondY;
- if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 1 ) )
- apVTitle_SecondY = lcl_createTitle( TitleHelper::SECONDARY_Y_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
- , aRemainingSpace, aPageSize, bIsVertical? ALIGN_TOP : ALIGN_RIGHT, bAutoPosition_SecondYTitle );
- if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
- return;
-
- awt::Point aAvailablePosDia;
- awt::Size aAvailableSizeForDiagram;
- bool bUseFixedInnerSize = false;
- if( getAvailablePosAndSizeForDiagram( aAvailablePosDia, aAvailableSizeForDiagram, aRemainingSpace, aPageSize
- , mrChartModel.getFirstDiagram(), bUseFixedInnerSize ) )
- {
- awt::Rectangle aUsedOuterRect = impl_createDiagramAndContent( aSeriesPlotterContainer
- , xDiagramPlusAxes_Shapes
- , aAvailablePosDia ,aAvailableSizeForDiagram, aPageSize, bUseFixedInnerSize, xDiagram_MarkHandles );
-
- if( xDiagram_OuterRect.is() )
- {
- xDiagram_OuterRect->setPosition( awt::Point( aUsedOuterRect.X, aUsedOuterRect.Y ) );
- xDiagram_OuterRect->setSize( awt::Size( aUsedOuterRect.Width, aUsedOuterRect.Height ) );
- }
-
- //correct axis title position
- awt::Rectangle aDiagramPlusAxesRect( aUsedOuterRect );
- if(bAutoPosition_XTitle)
- changePositionOfAxisTitle( apVTitle_X.get(), ALIGN_BOTTOM, aDiagramPlusAxesRect, aPageSize );
- if(bAutoPosition_YTitle)
- changePositionOfAxisTitle( apVTitle_Y.get(), ALIGN_LEFT, aDiagramPlusAxesRect, aPageSize );
- if(bAutoPosition_ZTitle)
- changePositionOfAxisTitle( apVTitle_Z.get(), ALIGN_Z, aDiagramPlusAxesRect, aPageSize );
- if(bAutoPosition_SecondXTitle)
- changePositionOfAxisTitle( apVTitle_SecondX.get(), bIsVertical? ALIGN_RIGHT : ALIGN_TOP, aDiagramPlusAxesRect, aPageSize );
- if(bAutoPosition_SecondYTitle)
- changePositionOfAxisTitle( apVTitle_SecondY.get(), bIsVertical? ALIGN_TOP : ALIGN_RIGHT, aDiagramPlusAxesRect, aPageSize );
- }
-
- //cleanup: remove all empty group shapes to avoid grey border lines:
- lcl_removeEmptyGroupShapes( mxRootShape );
-
- render();
-
- if(maTimeBased.bTimeBased && maTimeBased.nFrame % 60 == 0)
- {
- // create copy of the data for next frame
- std::vector<VSeriesPlotter*>& rSeriesPlotter =
- aSeriesPlotterContainer.getSeriesPlotterList();
- size_t n = rSeriesPlotter.size();
- maTimeBased.m_aDataSeriesList.clear();
- maTimeBased.m_aDataSeriesList.resize(n);
- for(size_t i = 0; i < n; ++i)
- {
- std::vector< VDataSeries* > aAllNewDataSeries =
- rSeriesPlotter[i]->getAllSeries();
- std::vector< VDataSeries* >& rAllOldDataSeries =
- maTimeBased.m_aDataSeriesList[i];
- size_t m = aAllNewDataSeries.size();
- for(size_t j = 0; j < m; ++j)
- {
- rAllOldDataSeries.push_back( aAllNewDataSeries[j]->
- createCopyForTimeBased() );
- }
- }
-
- if(maTimeBased.eMode != MANUAL)
- {
- mrChartModel.setTimeBased(true);
- mrChartModel.getNextTimePoint();
- }
- else
- maTimeBased.maTimer.Stop();
- }
-
- if(maTimeBased.bTimeBased && maTimeBased.eMode != MANUAL && !maTimeBased.maTimer.IsActive())
- {
- maTimeBased.maTimer.SetTimeout(15);
- maTimeBased.maTimer.SetTimeoutHdl(LINK(this, ChartView, UpdateTimeBased));
- maTimeBased.maTimer.Start();
- }
- }
+ createShapes2D(aPageSize);
// #i12587# support for shapes in chart
if ( m_pDrawModelWrapper )
@@ -3163,6 +2979,195 @@ IMPL_LINK_NOARG(ChartView, UpdateTimeBased)
return 0;
}
+void ChartView::createShapes2D( const awt::Size& rPageSize )
+{
+ AbstractShapeFactory* pShapeFactory = AbstractShapeFactory::getOrCreateShapeFactory(m_xShapeFactory);
+
+ SolarMutexGuard aSolarGuard;
+
+ // todo: it would be nicer to just pass the page m_xDrawPage and format it,
+ // but the draw page does not support XPropertySet
+ formatPage( mrChartModel, rPageSize, mxRootShape, m_xShapeFactory );
+
+ //sal_Int32 nYDistance = static_cast<sal_Int32>(aPageSize.Height*lcl_getPageLayoutDistancePercentage());
+ awt::Rectangle aRemainingSpace( 0, 0, rPageSize.Width, rPageSize.Height );
+
+ //create the group shape for diagram and axes first to have title and legends on top of it
+ uno::Reference< XDiagram > xDiagram( mrChartModel.getFirstDiagram() );
+ OUString aDiagramCID( ObjectIdentifier::createClassifiedIdentifier( OBJECTTYPE_DIAGRAM, OUString::number( 0 ) ) );//todo: other index if more than one diagram is possible
+ uno::Reference< drawing::XShapes > xDiagramPlusAxesPlusMarkHandlesGroup_Shapes(
+ pShapeFactory->createGroup2D(mxRootShape,aDiagramCID) );
+
+ uno::Reference< drawing::XShape > xDiagram_MarkHandles( pShapeFactory->createInvisibleRectangle(
+ xDiagramPlusAxesPlusMarkHandlesGroup_Shapes, awt::Size(0,0) ) );
+ AbstractShapeFactory::setShapeName( xDiagram_MarkHandles, "MarkHandles" );
+
+ uno::Reference< drawing::XShape > xDiagram_OuterRect( pShapeFactory->createInvisibleRectangle(
+ xDiagramPlusAxesPlusMarkHandlesGroup_Shapes, awt::Size(0,0) ) );
+ AbstractShapeFactory::setShapeName( xDiagram_OuterRect, "PlotAreaIncludingAxes" );
+
+ uno::Reference< drawing::XShapes > xDiagramPlusAxes_Shapes( pShapeFactory->createGroup2D(xDiagramPlusAxesPlusMarkHandlesGroup_Shapes ) );
+
+ bool bAutoPositionDummy = true;
+
+ lcl_createTitle( TitleHelper::MAIN_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, ALIGN_TOP, bAutoPositionDummy );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ lcl_createTitle( TitleHelper::SUB_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, ALIGN_TOP, bAutoPositionDummy );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ SeriesPlotterContainer aSeriesPlotterContainer( m_aVCooSysList );
+ aSeriesPlotterContainer.initializeCooSysAndSeriesPlotter( mrChartModel );
+ if(maTimeBased.bTimeBased && maTimeBased.nFrame != 0)
+ {
+ std::vector<VSeriesPlotter*>& rSeriesPlotter =
+ aSeriesPlotterContainer.getSeriesPlotterList();
+ size_t n = rSeriesPlotter.size();
+ for(size_t i = 0; i < n; ++i)
+ {
+ std::vector< VDataSeries* > aAllNewDataSeries =
+ rSeriesPlotter[i]->getAllSeries();
+ std::vector< VDataSeries* >& rAllOldDataSeries =
+ maTimeBased.m_aDataSeriesList[i];
+ size_t m = std::min(aAllNewDataSeries.size(), rAllOldDataSeries.size());
+ for(size_t j = 0; j < m; ++j)
+ {
+ aAllNewDataSeries[j]->setOldTimeBased(
+ rAllOldDataSeries[j], (maTimeBased.nFrame % 60)/60.0);
+ }
+ }
+ }
+
+ lcl_createLegend( LegendHelper::getLegend( mrChartModel ), mxRootShape, m_xShapeFactory, m_xCC
+ , aRemainingSpace, rPageSize, mrChartModel, aSeriesPlotterContainer.getLegendEntryProviderList()
+ , lcl_getDefaultWritingModeFromPool( m_pDrawModelWrapper ) );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ Reference< chart2::XChartType > xChartType( DiagramHelper::getChartTypeByIndex( xDiagram, 0 ) );
+ sal_Int32 nDimension = DiagramHelper::getDimension( xDiagram );
+
+ bool bAutoPosition_XTitle = true;
+ boost::shared_ptr<VTitle> apVTitle_X;
+ if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 0 ) )
+ apVTitle_X = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_X_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, ALIGN_BOTTOM, bAutoPosition_XTitle );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ bool bAutoPosition_YTitle = true;
+ boost::shared_ptr<VTitle> apVTitle_Y;
+ if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 1 ) )
+ apVTitle_Y = lcl_createTitle( TitleHelper::TITLE_AT_STANDARD_Y_AXIS_POSITION, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, ALIGN_LEFT, bAutoPosition_YTitle );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ bool bAutoPosition_ZTitle = true;
+ boost::shared_ptr<VTitle> apVTitle_Z;
+ if( ChartTypeHelper::isSupportingMainAxis( xChartType, nDimension, 2 ) )
+ apVTitle_Z = lcl_createTitle( TitleHelper::Z_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, ALIGN_RIGHT, bAutoPosition_ZTitle );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ bool bDummy = false;
+ bool bIsVertical = DiagramHelper::getVertical( xDiagram, bDummy, bDummy );
+
+ bool bAutoPosition_SecondXTitle = true;
+ boost::shared_ptr<VTitle> apVTitle_SecondX;
+ if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 0 ) )
+ apVTitle_SecondX = lcl_createTitle( TitleHelper::SECONDARY_X_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, bIsVertical? ALIGN_RIGHT : ALIGN_TOP, bAutoPosition_SecondXTitle );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ bool bAutoPosition_SecondYTitle = true;
+ boost::shared_ptr<VTitle> apVTitle_SecondY;
+ if( ChartTypeHelper::isSupportingSecondaryAxis( xChartType, nDimension, 1 ) )
+ apVTitle_SecondY = lcl_createTitle( TitleHelper::SECONDARY_Y_AXIS_TITLE, mxRootShape, m_xShapeFactory, mrChartModel
+ , aRemainingSpace, rPageSize, bIsVertical? ALIGN_TOP : ALIGN_RIGHT, bAutoPosition_SecondYTitle );
+ if(aRemainingSpace.Width<=0||aRemainingSpace.Height<=0)
+ return;
+
+ awt::Point aAvailablePosDia;
+ awt::Size aAvailableSizeForDiagram;
+ bool bUseFixedInnerSize = false;
+ if( getAvailablePosAndSizeForDiagram( aAvailablePosDia, aAvailableSizeForDiagram, aRemainingSpace, rPageSize
+ , mrChartModel.getFirstDiagram(), bUseFixedInnerSize ) )
+ {
+ awt::Rectangle aUsedOuterRect = impl_createDiagramAndContent( aSeriesPlotterContainer
+ , xDiagramPlusAxes_Shapes
+ , aAvailablePosDia ,aAvailableSizeForDiagram, rPageSize, bUseFixedInnerSize, xDiagram_MarkHandles );
+
+ if( xDiagram_OuterRect.is() )
+ {
+ xDiagram_OuterRect->setPosition( awt::Point( aUsedOuterRect.X, aUsedOuterRect.Y ) );
+ xDiagram_OuterRect->setSize( awt::Size( aUsedOuterRect.Width, aUsedOuterRect.Height ) );
+ }
+
+ //correct axis title position
+ awt::Rectangle aDiagramPlusAxesRect( aUsedOuterRect );
+ if(bAutoPosition_XTitle)
+ changePositionOfAxisTitle( apVTitle_X.get(), ALIGN_BOTTOM, aDiagramPlusAxesRect, rPageSize );
+ if(bAutoPosition_YTitle)
+ changePositionOfAxisTitle( apVTitle_Y.get(), ALIGN_LEFT, aDiagramPlusAxesRect, rPageSize );
+ if(bAutoPosition_ZTitle)
+ changePositionOfAxisTitle( apVTitle_Z.get(), ALIGN_Z, aDiagramPlusAxesRect, rPageSize );
+ if(bAutoPosition_SecondXTitle)
+ changePositionOfAxisTitle( apVTitle_SecondX.get(), bIsVertical? ALIGN_RIGHT : ALIGN_TOP, aDiagramPlusAxesRect, rPageSize );
+ if(bAutoPosition_SecondYTitle)
+ changePositionOfAxisTitle( apVTitle_SecondY.get(), bIsVertical? ALIGN_TOP : ALIGN_RIGHT, aDiagramPlusAxesRect, rPageSize );
+ }
+
+ //cleanup: remove all empty group shapes to avoid grey border lines:
+ lcl_removeEmptyGroupShapes( mxRootShape );
+
+ render();
+
+ if(maTimeBased.bTimeBased && maTimeBased.nFrame % 60 == 0)
+ {
+ // create copy of the data for next frame
+ std::vector<VSeriesPlotter*>& rSeriesPlotter =
+ aSeriesPlotterContainer.getSeriesPlotterList();
+ size_t n = rSeriesPlotter.size();
+ maTimeBased.m_aDataSeriesList.clear();
+ maTimeBased.m_aDataSeriesList.resize(n);
+ for(size_t i = 0; i < n; ++i)
+ {
+ std::vector< VDataSeries* > aAllNewDataSeries =
+ rSeriesPlotter[i]->getAllSeries();
+ std::vector< VDataSeries* >& rAllOldDataSeries =
+ maTimeBased.m_aDataSeriesList[i];
+ size_t m = aAllNewDataSeries.size();
+ for(size_t j = 0; j < m; ++j)
+ {
+ rAllOldDataSeries.push_back( aAllNewDataSeries[j]->
+ createCopyForTimeBased() );
+ }
+ }
+
+ if(maTimeBased.eMode != MANUAL)
+ {
+ mrChartModel.setTimeBased(true);
+ mrChartModel.getNextTimePoint();
+ }
+ else
+ maTimeBased.maTimer.Stop();
+ }
+
+ if(maTimeBased.bTimeBased && maTimeBased.eMode != MANUAL && !maTimeBased.maTimer.IsActive())
+ {
+ maTimeBased.maTimer.SetTimeout(15);
+ maTimeBased.maTimer.SetTimeoutHdl(LINK(this, ChartView, UpdateTimeBased));
+ maTimeBased.maTimer.Start();
+ }
+}
+
void ChartView::createShapes3D()
{
OpenGLWindow* pWindow = mrChartModel.getOpenGLWindow();
More information about the Libreoffice-commits
mailing list