diff options
author | Tomaž Vajngerl <quikee@gmail.com> | 2013-06-29 18:43:16 +0200 |
---|---|---|
committer | Tomaž Vajngerl <quikee@gmail.com> | 2013-07-03 21:46:44 +0200 |
commit | 1cd3e2038010cb37bda82d38dd058b793b7eec26 (patch) | |
tree | d687acc5e82b2897ece13dda23b7bef09ba9e6e6 /chart2/source | |
parent | 4c116a7b31328a781197082c826fe910afaaee8b (diff) |
Multiple trendline removing and changing type support.
Change-Id: I33a298341e228080920977639cb59986d0b4bd82
Diffstat (limited to 'chart2/source')
7 files changed, 114 insertions, 89 deletions
diff --git a/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx b/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx index cbb208b70576..216217f7ee83 100644 --- a/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx +++ b/chart2/source/controller/chartapiwrapper/WrappedStatisticProperties.cxx @@ -867,13 +867,18 @@ WrappedRegressionCurvesProperty::~WrappedRegressionCurvesProperty() } void WrappedRegressionCurvesProperty::setValueToSeries( const Reference< beans::XPropertySet >& xSeriesPropertySet, ::com::sun::star::chart::ChartRegressionCurveType aNewValue ) const { - uno::Reference< chart2::XRegressionCurveContainer > xRegCnt( xSeriesPropertySet, uno::UNO_QUERY ); - if( xRegCnt.is() ) + uno::Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer( xSeriesPropertySet, uno::UNO_QUERY ); + uno::Reference< chart2::XRegressionCurve > xRegressionCurve( xSeriesPropertySet, uno::UNO_QUERY ); + + if( xRegressionCurveContainer.is() && xRegressionCurve.is() ) { RegressionCurveHelper::tRegressionType eNewRegressionType = lcl_getRegressionType( aNewValue ); - RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCnt ); - if( eNewRegressionType != RegressionCurveHelper::REGRESSION_TYPE_NONE ) - RegressionCurveHelper::addRegressionCurve( eNewRegressionType, xRegCnt, 0, 0 ); + + RegressionCurveHelper::changeRegressionCurveType( + eNewRegressionType, + xRegressionCurveContainer, + xRegressionCurve, + uno::Reference< uno::XComponentContext >()); } } diff --git a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx index 011853ff1561..9c4f1bfc5416 100644 --- a/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/RegressionCurveItemConverter.cxx @@ -146,18 +146,12 @@ bool RegressionCurveItemConverter::ApplySpecialItem( // for which this converter was created. Not optimal, but // currently the only way to handle the type in the // regression curve properties dialog - RegressionCurveHelper::replaceOrAddCurveAndReduceToOne( - lcl_convertRegressionType( eNewRegress ), m_xCurveContainer, + RegressionCurveHelper::changeRegressionCurveType( + lcl_convertRegressionType( eNewRegress ), + m_xCurveContainer, + xCurve, uno::Reference< uno::XComponentContext >()); - uno::Reference< beans::XPropertySet > xNewPropSet( - RegressionCurveHelper::getFirstCurveNotMeanValueLine( m_xCurveContainer ), - uno::UNO_QUERY ); - OSL_ASSERT( xNewPropSet.is()); - if( xNewPropSet.is()) - { - resetPropertySet( xNewPropSet ); - bChanged = true; - } + bChanged = true; } } } diff --git a/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx b/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx index c4b6896fd507..2a8ebc8e76fd 100644 --- a/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx +++ b/chart2/source/controller/itemsetwrapper/StatisticsItemConverter.cxx @@ -412,28 +412,38 @@ bool StatisticsItemConverter::ApplySpecialItem( case SCHATTR_REGRESSION_TYPE: { SvxChartRegress eRegress = - static_cast< const SvxChartRegressItem & >( + static_cast< const SvxChartRegressItem& >( rItemSet.Get( nWhichId )).GetValue(); - uno::Reference< chart2::XRegressionCurveContainer > xRegCnt( - GetPropertySet(), uno::UNO_QUERY ); + uno::Reference< chart2::XRegressionCurve > xRegressionCurve( GetPropertySet(), uno::UNO_QUERY ); + uno::Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer( GetPropertySet(), uno::UNO_QUERY ); if( eRegress == CHREGRESS_NONE ) { - bChanged = RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCnt ); + if ( xRegressionCurve.is() ) + { + xRegressionCurveContainer->removeRegressionCurve( xRegressionCurve ); + bChanged = true; + } } else { - SvxChartRegress eOldRegress( - static_cast< SvxChartRegress >( - static_cast< sal_Int32 >( - RegressionCurveHelper::getFirstRegressTypeNotMeanValueLine( xRegCnt )))); - if( eOldRegress != eRegress ) + if ( xRegressionCurve.is() ) { - RegressionCurveHelper::replaceOrAddCurveAndReduceToOne( - lcl_convertRegressionType( eRegress ), xRegCnt, - uno::Reference< uno::XComponentContext >()); - bChanged = true; + SvxChartRegress eOldRegress( + static_cast< SvxChartRegress >( + static_cast< sal_Int32 >( + RegressionCurveHelper::getRegressionType( xRegressionCurve )))); + + if( eOldRegress != eRegress ) + { + RegressionCurveHelper::changeRegressionCurveType( + lcl_convertRegressionType( eRegress ), + xRegressionCurveContainer, + xRegressionCurve, + uno::Reference< uno::XComponentContext >()); + bChanged = true; + } } } } diff --git a/chart2/source/controller/main/ChartController_Insert.cxx b/chart2/source/controller/main/ChartController_Insert.cxx index 8741ec9a21b7..6461a8a9aff1 100644 --- a/chart2/source/controller/main/ChartController_Insert.cxx +++ b/chart2/source/controller/main/ChartController_Insert.cxx @@ -386,13 +386,13 @@ void ChartController::executeDispatch_InsertMenu_Trendlines() //prepare and open dialog SolarMutexGuard aGuard; - InsertTrendlineDialog aDlg( m_pChartWindow, aItemSet ); - aDlg.adjustSize(); + InsertTrendlineDialog aDialog( m_pChartWindow, aItemSet ); + aDialog.adjustSize(); - if( aDlg.Execute() == RET_OK ) + if( aDialog.Execute() == RET_OK ) { SfxItemSet aOutItemSet = aItemConverter.CreateEmptyItemSet(); - aDlg.FillItemSet( aOutItemSet ); + aDialog.FillItemSet( aOutItemSet ); // lock controllers till end of block ControllerLockGuard aCLGuard( getModel() ); @@ -443,14 +443,14 @@ void ChartController::executeDispatch_InsertTrendline() aDialogParameter.init( getModel() ); ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get()); SolarMutexGuard aGuard; - SchAttribTabDlg aDlg( m_pChartWindow, &aItemSet, &aDialogParameter, &aViewElementListProvider, + SchAttribTabDlg aDialog( m_pChartWindow, &aItemSet, &aDialogParameter, &aViewElementListProvider, uno::Reference< util::XNumberFormatsSupplier >( getModel(), uno::UNO_QUERY )); // note: when a user pressed "OK" but didn't change any settings in the // dialog, the SfxTabDialog returns "Cancel" - if( aDlg.Execute() == RET_OK || aDlg.DialogWasClosedWithOK()) + if( aDialog.Execute() == RET_OK || aDialog.DialogWasClosedWithOK()) { - const SfxItemSet* pOutItemSet = aDlg.GetOutputItemSet(); + const SfxItemSet* pOutItemSet = aDialog.GetOutputItemSet(); if( pOutItemSet ) { ControllerLockGuard aCLGuard( getModel() ); diff --git a/chart2/source/controller/main/ChartController_Tools.cxx b/chart2/source/controller/main/ChartController_Tools.cxx index c25770f0d9a7..6244943b1263 100644 --- a/chart2/source/controller/main/ChartController_Tools.cxx +++ b/chart2/source/controller/main/ChartController_Tools.cxx @@ -85,6 +85,9 @@ using namespace ::com::sun::star; using ::com::sun::star::uno::Reference; using ::com::sun::star::uno::Sequence; +namespace chart +{ + namespace { @@ -94,25 +97,25 @@ bool lcl_deleteDataSeries( const Reference< document::XUndoManager > & xUndoManager ) { bool bResult = false; - uno::Reference< chart2::XDataSeries > xSeries( ::chart::ObjectIdentifier::getDataSeriesForCID( rCID, xModel )); + uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( rCID, xModel )); uno::Reference< chart2::XChartDocument > xChartDoc( xModel, uno::UNO_QUERY ); if( xSeries.is() && xChartDoc.is()) { uno::Reference< chart2::XChartType > xChartType( - ::chart::DataSeriesHelper::getChartTypeOfSeries( xSeries, xChartDoc->getFirstDiagram())); + DataSeriesHelper::getChartTypeOfSeries( xSeries, xChartDoc->getFirstDiagram())); if( xChartType.is()) { - ::chart::UndoGuard aUndoGuard( + UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_DATASERIES ))), + ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_DATASERIES ))), xUndoManager ); - Reference< chart2::XDiagram > xDiagram( ::chart::ChartModelHelper::findDiagram( xModel ) ); - uno::Reference< chart2::XAxis > xAxis( ::chart::DiagramHelper::getAttachedAxis( xSeries, xDiagram ) ); + Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ) ); + uno::Reference< chart2::XAxis > xAxis( DiagramHelper::getAttachedAxis( xSeries, xDiagram ) ); - ::chart::DataSeriesHelper::deleteSeries( xSeries, xChartType ); + DataSeriesHelper::deleteSeries( xSeries, xChartType ); - ::chart::AxisHelper::hideAxisIfNoDataIsAttached( xAxis, xDiagram ); + AxisHelper::hideAxisIfNoDataIsAttached( xAxis, xDiagram ); bResult = true; aUndoGuard.commit(); @@ -127,28 +130,36 @@ bool lcl_deleteDataCurve( const Reference< document::XUndoManager > & xUndoManager ) { bool bResult = false; - uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt( - ::chart::ObjectIdentifier::getObjectPropertySet( - ::chart::ObjectIdentifier::getSeriesParticleFromCID( rCID ), xModel ), uno::UNO_QUERY ); - if( xRegCurveCnt.is()) + + uno::Reference< beans::XPropertySet > xProperties( + ObjectIdentifier::getObjectPropertySet( rCID, xModel)); + + uno::Reference< chart2::XRegressionCurve > xRegressionCurve( xProperties, uno::UNO_QUERY ); + + if( xRegressionCurve.is()) { - ::chart::UndoGuard aUndoGuard( - ActionDescriptionProvider::createDescription( - ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_CURVE ))), - xUndoManager ); - ::chart::RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCurveCnt ); - bResult = true; - aUndoGuard.commit(); + uno::Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer( + ObjectIdentifier::getObjectPropertySet( + ObjectIdentifier::getFullParentParticle( rCID ), xModel), uno::UNO_QUERY ); + + if( xRegressionCurveContainer.is()) + { + UndoGuard aUndoGuard = UndoGuard( + ActionDescriptionProvider::createDescription( + ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_CURVE ))), + xUndoManager ); + + xRegressionCurveContainer->removeRegressionCurve( xRegressionCurve ); + + bResult = true; + aUndoGuard.commit(); + } } return bResult; } } // anonymous namespace - -namespace chart -{ - SAL_WNODEPRECATED_DECLARATIONS_PUSH ::std::auto_ptr< ReferenceSizeProvider > ChartController::impl_createReferenceSizeProvider() { @@ -657,9 +668,16 @@ bool ChartController::executeDispatch_Delete() ObjectType eParentObjectType = ObjectIdentifier::getObjectType( ObjectIdentifier::getFullParentParticle( aCID )); if( eParentObjectType == OBJECTTYPE_DATA_SERIES ) + { bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager ); + } else if( eParentObjectType == OBJECTTYPE_DATA_CURVE ) - bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager ); + { + sal_Int32 nEndPos = aCID.lastIndexOf(':'); + OUString aParentCID = aCID.copy(0, nEndPos); + + bReturn = lcl_deleteDataCurve(aParentCID, getModel(), m_xUndoManager ); + } else if( eParentObjectType == OBJECTTYPE_DATA_AVERAGE_LINE ) { executeDispatch_DeleteMeanValue(); @@ -684,17 +702,20 @@ bool ChartController::executeDispatch_Delete() bReturn = true; aUndoGuard.commit(); } - break; } + break; case OBJECTTYPE_DATA_CURVE: + { bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager ); - break; + } + break; case OBJECTTYPE_DATA_CURVE_EQUATION: { uno::Reference< beans::XPropertySet > xEqProp( ObjectIdentifier::getObjectPropertySet( aCID, getModel())); + if( xEqProp.is()) { uno::Reference< frame::XModel > xModel( getModel() ); @@ -711,8 +732,8 @@ bool ChartController::executeDispatch_Delete() bReturn = true; aUndoGuard.commit(); } - break; } + break; case OBJECTTYPE_DATA_ERRORS_X: case OBJECTTYPE_DATA_ERRORS_Y: diff --git a/chart2/source/inc/RegressionCurveHelper.hxx b/chart2/source/inc/RegressionCurveHelper.hxx index 6adb73640443..5f209dd00145 100644 --- a/chart2/source/inc/RegressionCurveHelper.hxx +++ b/chart2/source/inc/RegressionCurveHelper.hxx @@ -152,12 +152,14 @@ public: <p>This function ignores mean-value lines.</p> */ - static void replaceOrAddCurveAndReduceToOne( + static void changeRegressionCurveType( tRegressionType eType, - ::com::sun::star::uno::Reference< - ::com::sun::star::chart2::XRegressionCurveContainer > & xRegCnt, - const ::com::sun::star::uno::Reference< - ::com::sun::star::uno::XComponentContext > & xContext ); + com::sun::star::uno::Reference< + com::sun::star::chart2::XRegressionCurveContainer > & xRegressionCurveContainer, + com::sun::star::uno::Reference< + com::sun::star::chart2::XRegressionCurve > & xRegressionCurve, + const com::sun::star::uno::Reference< + com::sun::star::uno::XComponentContext > & xContext ); // ------------------------------------------------------------ diff --git a/chart2/source/tools/RegressionCurveHelper.cxx b/chart2/source/tools/RegressionCurveHelper.cxx index 5ffc1d5c3e4b..976d12506837 100644 --- a/chart2/source/tools/RegressionCurveHelper.cxx +++ b/chart2/source/tools/RegressionCurveHelper.cxx @@ -382,17 +382,17 @@ void RegressionCurveHelper::addRegressionCurve( if( xEquationProperties.is()) xCurve->setEquationProperties( xEquationProperties ); - uno::Reference< beans::XPropertySet > xProp( xCurve, uno::UNO_QUERY ); - if( xProp.is()) + uno::Reference< beans::XPropertySet > xProperties( xCurve, uno::UNO_QUERY ); + if( xProperties.is()) { if( xPropertySource.is()) - comphelper::copyProperties( xPropertySource, xProp ); + comphelper::copyProperties( xPropertySource, xProperties ); else { uno::Reference< XPropertySet > xSeriesProp( xRegCnt, uno::UNO_QUERY ); if( xSeriesProp.is()) { - xProp->setPropertyValue( "LineColor", + xProperties->setPropertyValue( "LineColor", xSeriesProp->getPropertyValue( "Color")); } // xProp->setPropertyValue( "LineWidth", uno::makeAny( sal_Int32( 100 ))); @@ -472,26 +472,19 @@ void RegressionCurveHelper::removeEquations( } } -void RegressionCurveHelper::replaceOrAddCurveAndReduceToOne( +void RegressionCurveHelper::changeRegressionCurveType( tRegressionType eType, - uno::Reference< XRegressionCurveContainer > & xRegCnt, + uno::Reference< XRegressionCurveContainer > & xRegressionCurveContainer, + uno::Reference< XRegressionCurve > & xRegressionCurve, const uno::Reference< XComponentContext > & xContext ) { - uno::Reference< chart2::XRegressionCurve > xRegressionCurve( getFirstCurveNotMeanValueLine( xRegCnt )); - if( ! xRegressionCurve.is()) - RegressionCurveHelper::addRegressionCurve( eType, xRegCnt, xContext ); - else - { - OUString aServiceName( lcl_getServiceNameForType( eType )); - if( !aServiceName.isEmpty()) - { - RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCnt ); - RegressionCurveHelper::addRegressionCurve( - eType, xRegCnt, xContext, - Reference< beans::XPropertySet >( xRegressionCurve, uno::UNO_QUERY ), - xRegressionCurve->getEquationProperties()); - } - } + xRegressionCurveContainer->removeRegressionCurve( xRegressionCurve ); + RegressionCurveHelper::addRegressionCurve( + eType, + xRegressionCurveContainer, + xContext, + uno::Reference< beans::XPropertySet >( xRegressionCurve, uno::UNO_QUERY ), + xRegressionCurve->getEquationProperties()); } uno::Reference< chart2::XRegressionCurve > RegressionCurveHelper::getFirstCurveNotMeanValueLine( |