LCOV - code coverage report
Current view: top level - chart2/source/controller/main - ChartController_Insert.cxx (source / functions) Hit Total Coverage
Test: commit 10e77ab3ff6f4314137acd6e2702a6e5c1ce1fae Lines: 1 405 0.2 %
Date: 2014-11-03 Functions: 2 38 5.3 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
       2             : /*
       3             :  * This file is part of the LibreOffice project.
       4             :  *
       5             :  * This Source Code Form is subject to the terms of the Mozilla Public
       6             :  * License, v. 2.0. If a copy of the MPL was not distributed with this
       7             :  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
       8             :  *
       9             :  * This file incorporates work covered by the following license notice:
      10             :  *
      11             :  *   Licensed to the Apache Software Foundation (ASF) under one or more
      12             :  *   contributor license agreements. See the NOTICE file distributed
      13             :  *   with this work for additional information regarding copyright
      14             :  *   ownership. The ASF licenses this file to you under the Apache
      15             :  *   License, Version 2.0 (the "License"); you may not use this file
      16             :  *   except in compliance with the License. You may obtain a copy of
      17             :  *   the License at http://www.apache.org/licenses/LICENSE-2.0 .
      18             :  */
      19             : 
      20             : #include "ChartController.hxx"
      21             : 
      22             : #include "dlg_InsertAxis_Grid.hxx"
      23             : #include "dlg_InsertDataLabel.hxx"
      24             : #include "dlg_InsertLegend.hxx"
      25             : #include "dlg_InsertErrorBars.hxx"
      26             : #include "dlg_InsertTitle.hxx"
      27             : #include "dlg_ObjectProperties.hxx"
      28             : 
      29             : #include "ChartWindow.hxx"
      30             : #include "ChartModelHelper.hxx"
      31             : #include "AxisHelper.hxx"
      32             : #include "TitleHelper.hxx"
      33             : #include "DiagramHelper.hxx"
      34             : #include "macros.hxx"
      35             : #include "chartview/DrawModelWrapper.hxx"
      36             : #include "NumberFormatterWrapper.hxx"
      37             : #include "ViewElementListProvider.hxx"
      38             : #include "MultipleChartConverters.hxx"
      39             : #include "ControllerLockGuard.hxx"
      40             : #include "UndoGuard.hxx"
      41             : #include "ResId.hxx"
      42             : #include "Strings.hrc"
      43             : #include "ReferenceSizeProvider.hxx"
      44             : #include "ObjectIdentifier.hxx"
      45             : #include "RegressionCurveHelper.hxx"
      46             : #include "RegressionCurveItemConverter.hxx"
      47             : #include "StatisticsHelper.hxx"
      48             : #include "ErrorBarItemConverter.hxx"
      49             : #include "MultipleItemConverter.hxx"
      50             : #include "DataSeriesHelper.hxx"
      51             : #include "ObjectNameProvider.hxx"
      52             : #include "LegendHelper.hxx"
      53             : 
      54             : #include <com/sun/star/chart2/XRegressionCurve.hpp>
      55             : #include <com/sun/star/chart/ErrorBarStyle.hpp>
      56             : #include <svx/ActionDescriptionProvider.hxx>
      57             : 
      58             : #include <vcl/msgbox.hxx>
      59             : #include <rtl/ustrbuf.hxx>
      60             : #include <vcl/svapp.hxx>
      61             : #include <osl/mutex.hxx>
      62             : 
      63             : using namespace ::com::sun::star;
      64             : using namespace ::com::sun::star::chart2;
      65             : using ::com::sun::star::uno::Reference;
      66             : using ::com::sun::star::uno::Sequence;
      67             : 
      68             : namespace
      69             : {
      70           0 : struct lcl_InsertMeanValueLine
      71             : {
      72             : public:
      73           0 :     lcl_InsertMeanValueLine( const uno::Reference< uno::XComponentContext > & xContext ) :
      74           0 :             m_xContext( xContext )
      75           0 :     {}
      76             : 
      77           0 :     void operator()( const uno::Reference< chart2::XDataSeries > & xSeries )
      78             :     {
      79             :         uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
      80           0 :             xSeries, uno::UNO_QUERY );
      81           0 :         if( xRegCurveCnt.is())
      82             :         {
      83             :             ::chart::RegressionCurveHelper::addMeanValueLine(
      84           0 :                 xRegCurveCnt, m_xContext, uno::Reference< beans::XPropertySet >( xSeries, uno::UNO_QUERY ));
      85           0 :         }
      86           0 :     }
      87             : 
      88             : private:
      89             :     uno::Reference< uno::XComponentContext > m_xContext;
      90             : };
      91             : 
      92             : } // anonymous namespace
      93             : 
      94             : namespace chart
      95             : {
      96             : 
      97           0 : void ChartController::executeDispatch_InsertAxes()
      98             : {
      99             :     UndoGuard aUndoGuard(
     100             :         ActionDescriptionProvider::createDescription(
     101             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_AXES )),
     102           0 :         m_xUndoManager );
     103             : 
     104             :     try
     105             :     {
     106           0 :         InsertAxisOrGridDialogData aDialogInput;
     107           0 :         uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram(getModel());
     108           0 :         AxisHelper::getAxisOrGridExcistence( aDialogInput.aExistenceList, xDiagram, true );
     109           0 :         AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, xDiagram, true );
     110             : 
     111           0 :         SolarMutexGuard aGuard;
     112           0 :         SchAxisDlg aDlg( m_pChartWindow, aDialogInput );
     113           0 :         if( aDlg.Execute() == RET_OK )
     114             :         {
     115             :             // lock controllers till end of block
     116           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     117             : 
     118           0 :             InsertAxisOrGridDialogData aDialogOutput;
     119           0 :             aDlg.getResult( aDialogOutput );
     120             :             boost::scoped_ptr< ReferenceSizeProvider > mpRefSizeProvider(
     121           0 :                 impl_createReferenceSizeProvider());
     122             :             bool bChanged = AxisHelper::changeVisibilityOfAxes( xDiagram
     123             :                 , aDialogInput.aExistenceList, aDialogOutput.aExistenceList, m_xCC
     124           0 :                 , mpRefSizeProvider.get() );
     125           0 :             if( bChanged )
     126           0 :                 aUndoGuard.commit();
     127           0 :         }
     128             :     }
     129           0 :     catch(const uno::RuntimeException& e)
     130             :     {
     131             :         ASSERT_EXCEPTION( e );
     132           0 :     }
     133           0 : }
     134             : 
     135           0 : void ChartController::executeDispatch_InsertGrid()
     136             : {
     137             :     UndoGuard aUndoGuard(
     138             :         ActionDescriptionProvider::createDescription(
     139             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_GRIDS )),
     140           0 :         m_xUndoManager );
     141             : 
     142             :     try
     143             :     {
     144           0 :         InsertAxisOrGridDialogData aDialogInput;
     145           0 :         uno::Reference< XDiagram > xDiagram = ChartModelHelper::findDiagram(getModel());
     146           0 :         AxisHelper::getAxisOrGridExcistence( aDialogInput.aExistenceList, xDiagram, false );
     147           0 :         AxisHelper::getAxisOrGridPossibilities( aDialogInput.aPossibilityList, xDiagram, false );
     148             : 
     149           0 :         SolarMutexGuard aGuard;
     150           0 :         SchGridDlg aDlg( m_pChartWindow, aDialogInput );//aItemSet, b3D, bNet, bSecondaryX, bSecondaryY );
     151           0 :         if( aDlg.Execute() == RET_OK )
     152             :         {
     153             :             // lock controllers till end of block
     154           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     155           0 :             InsertAxisOrGridDialogData aDialogOutput;
     156           0 :             aDlg.getResult( aDialogOutput );
     157             :             bool bChanged = AxisHelper::changeVisibilityOfGrids( xDiagram
     158           0 :                 , aDialogInput.aExistenceList, aDialogOutput.aExistenceList, m_xCC );
     159           0 :             if( bChanged )
     160           0 :                 aUndoGuard.commit();
     161           0 :         }
     162             :     }
     163           0 :     catch(const uno::RuntimeException& e)
     164             :     {
     165             :         ASSERT_EXCEPTION( e );
     166           0 :     }
     167           0 : }
     168             : 
     169           0 : void ChartController::executeDispatch_InsertTitles()
     170             : {
     171             :     UndoGuard aUndoGuard(
     172             :         ActionDescriptionProvider::createDescription(
     173             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_TITLES )),
     174           0 :         m_xUndoManager );
     175             : 
     176             :     try
     177             :     {
     178           0 :         TitleDialogData aDialogInput;
     179           0 :         aDialogInput.readFromModel( getModel() );
     180             : 
     181           0 :         SolarMutexGuard aGuard;
     182           0 :         SchTitleDlg aDlg( m_pChartWindow, aDialogInput );
     183           0 :         if( aDlg.Execute() == RET_OK )
     184             :         {
     185             :             // lock controllers till end of block
     186           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     187           0 :             TitleDialogData aDialogOutput(impl_createReferenceSizeProvider());
     188           0 :             aDlg.getResult( aDialogOutput );
     189           0 :             bool bChanged = aDialogOutput.writeDifferenceToModel( getModel(), m_xCC, &aDialogInput );
     190           0 :             if( bChanged )
     191           0 :                 aUndoGuard.commit();
     192           0 :         }
     193             :     }
     194           0 :     catch(const uno::RuntimeException& e)
     195             :     {
     196             :         ASSERT_EXCEPTION( e );
     197           0 :     }
     198           0 : }
     199             : 
     200           0 : void ChartController::executeDispatch_DeleteLegend()
     201             : {
     202             :     UndoGuard aUndoGuard(
     203             :         ActionDescriptionProvider::createDescription(
     204             :             ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_LEGEND )),
     205           0 :         m_xUndoManager );
     206             : 
     207           0 :     ChartModel& rModel = dynamic_cast<ChartModel&>(*getModel().get());
     208           0 :     LegendHelper::hideLegend(rModel);
     209           0 :     aUndoGuard.commit();
     210           0 : }
     211             : 
     212           0 : void ChartController::executeDispatch_InsertLegend()
     213             : {
     214             :     UndoGuard aUndoGuard(
     215             :         ActionDescriptionProvider::createDescription(
     216             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_LEGEND )),
     217           0 :         m_xUndoManager );
     218             : 
     219           0 :     ChartModel& rModel = dynamic_cast<ChartModel&>(*getModel().get());
     220           0 :     Reference< chart2::XLegend > xLegend = LegendHelper::showLegend(rModel, m_xCC);
     221           0 :     aUndoGuard.commit();
     222           0 : }
     223             : 
     224           0 : void ChartController::executeDispatch_OpenLegendDialog()
     225             : {
     226             :     UndoGuard aUndoGuard(
     227             :         ActionDescriptionProvider::createDescription(
     228             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_LEGEND )),
     229           0 :         m_xUndoManager );
     230             : 
     231             :     try
     232             :     {
     233             :         //prepare and open dialog
     234           0 :         SolarMutexGuard aGuard;
     235           0 :         SchLegendDlg aDlg( m_pChartWindow, m_xCC );
     236           0 :         aDlg.init( getModel() );
     237           0 :         if( aDlg.Execute() == RET_OK )
     238             :         {
     239             :             // lock controllers till end of block
     240           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     241           0 :             bool bChanged = aDlg.writeToModel( getModel() );
     242           0 :             if( bChanged )
     243           0 :                 aUndoGuard.commit();
     244           0 :         }
     245             :     }
     246           0 :     catch(const uno::RuntimeException& e)
     247             :     {
     248             :         ASSERT_EXCEPTION( e );
     249           0 :     }
     250           0 : }
     251             : 
     252           0 : void ChartController::executeDispatch_InsertMenu_DataLabels()
     253             : {
     254             :     UndoGuard aUndoGuard(
     255             :         ActionDescriptionProvider::createDescription(
     256             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_DATALABELS )),
     257           0 :         m_xUndoManager );
     258             : 
     259             :     //if a series is selected insert labels for that series only:
     260             :     uno::Reference< chart2::XDataSeries > xSeries(
     261           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel()), uno::UNO_QUERY );
     262           0 :     if( xSeries.is() )
     263             :     {
     264             :         // add labels
     265           0 :         DataSeriesHelper::insertDataLabelsToSeriesAndAllPoints( xSeries );
     266             : 
     267           0 :         OUString aChildParticle( ObjectIdentifier::getStringForType( OBJECTTYPE_DATA_LABELS ) + "=" );
     268             :         OUString aObjectCID = ObjectIdentifier::createClassifiedIdentifierForParticles(
     269           0 :             ObjectIdentifier::getSeriesParticleFromCID(m_aSelection.getSelectedCID()), aChildParticle );
     270             : 
     271           0 :         bool bSuccess = ChartController::executeDlg_ObjectProperties_withoutUndoGuard( aObjectCID, true );
     272           0 :         if( bSuccess )
     273           0 :             aUndoGuard.commit();
     274           0 :         return;
     275             :     }
     276             : 
     277             :     try
     278             :     {
     279             :         wrapper::AllDataLabelItemConverter aItemConverter(
     280           0 :             getModel(),
     281           0 :             m_pDrawModelWrapper->GetItemPool(),
     282           0 :             m_pDrawModelWrapper->getSdrModel(),
     283           0 :             uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY ));
     284           0 :         SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
     285           0 :         aItemConverter.FillItemSet( aItemSet );
     286             : 
     287             :         //prepare and open dialog
     288           0 :         SolarMutexGuard aGuard;
     289             : 
     290             :         //get number formatter
     291           0 :         uno::Reference< util::XNumberFormatsSupplier > xNumberFormatsSupplier( getModel(), uno::UNO_QUERY );
     292           0 :         NumberFormatterWrapper aNumberFormatterWrapper( xNumberFormatsSupplier );
     293           0 :         SvNumberFormatter* pNumberFormatter = aNumberFormatterWrapper.getSvNumberFormatter();
     294             : 
     295           0 :         DataLabelsDialog aDlg( m_pChartWindow, aItemSet, pNumberFormatter);
     296             : 
     297           0 :         if( aDlg.Execute() == RET_OK )
     298             :         {
     299           0 :             SfxItemSet aOutItemSet = aItemConverter.CreateEmptyItemSet();
     300           0 :             aDlg.FillItemSet( aOutItemSet );
     301             :             // lock controllers till end of block
     302           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     303           0 :             bool bChanged = aItemConverter.ApplyItemSet( aOutItemSet );//model should be changed now
     304           0 :             if( bChanged )
     305           0 :                 aUndoGuard.commit();
     306           0 :         }
     307             :     }
     308           0 :     catch(const uno::RuntimeException& e)
     309             :     {
     310             :         ASSERT_EXCEPTION( e );
     311           0 :     }
     312             : }
     313             : 
     314           0 : void ChartController::executeDispatch_InsertMeanValue()
     315             : {
     316             :     UndoGuard aUndoGuard(
     317             :         ActionDescriptionProvider::createDescription(
     318             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_AVERAGE_LINE )),
     319           0 :         m_xUndoManager );
     320             :     lcl_InsertMeanValueLine( m_xCC ).operator()(
     321           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ));
     322           0 :     aUndoGuard.commit();
     323           0 : }
     324             : 
     325           0 : void ChartController::executeDispatch_InsertMenu_MeanValues()
     326             : {
     327             :     UndoGuard aUndoGuard(
     328             :         ActionDescriptionProvider::createDescription(
     329             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_AVERAGE_LINE )),
     330           0 :         m_xUndoManager );
     331             : 
     332             :     uno::Reference< chart2::XDataSeries > xSeries(
     333           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     334           0 :     if( xSeries.is() )
     335             :     {
     336             :         //if a series is selected insert mean value only for that series:
     337           0 :         lcl_InsertMeanValueLine( m_xCC ).operator()(xSeries);
     338             :     }
     339             :     else
     340             :     {
     341             :         ::std::vector< uno::Reference< chart2::XDataSeries > > aSeries(
     342           0 :             DiagramHelper::getDataSeriesFromDiagram( ChartModelHelper::findDiagram( getModel() )));
     343           0 :         ::std::for_each( aSeries.begin(), aSeries.end(), lcl_InsertMeanValueLine( m_xCC ));
     344             :     }
     345           0 :     aUndoGuard.commit();
     346           0 : }
     347             : 
     348           0 : void ChartController::executeDispatch_InsertMenu_Trendlines()
     349             : {
     350           0 :     OUString aCID = m_aSelection.getSelectedCID();
     351             : 
     352             :     uno::Reference< chart2::XDataSeries > xSeries(
     353           0 :         ObjectIdentifier::getDataSeriesForCID( aCID, getModel() ), uno::UNO_QUERY );
     354             : 
     355           0 :     if( !xSeries.is() )
     356           0 :         return;
     357             : 
     358           0 :     executeDispatch_InsertTrendline();
     359             : }
     360             : 
     361           0 : void ChartController::executeDispatch_InsertTrendline()
     362             : {
     363             :     uno::Reference< chart2::XRegressionCurveContainer > xRegressionCurveContainer(
     364           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel()), uno::UNO_QUERY );
     365             : 
     366           0 :     if( !xRegressionCurveContainer.is() )
     367           0 :         return;
     368             : 
     369             :     UndoLiveUpdateGuard aUndoGuard(
     370             :         ActionDescriptionProvider::createDescription(
     371             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE )),
     372           0 :         m_xUndoManager );
     373             : 
     374             :     uno::Reference< chart2::XRegressionCurve > xCurve =
     375             :         RegressionCurveHelper::addRegressionCurve(
     376             :             CHREGRESS_LINEAR,
     377             :             xRegressionCurveContainer,
     378           0 :             m_xCC );
     379             : 
     380           0 :     uno::Reference< beans::XPropertySet > xProperties( xCurve, uno::UNO_QUERY );
     381             : 
     382           0 :     if( !xProperties.is())
     383           0 :         return;
     384             : 
     385             :     wrapper::RegressionCurveItemConverter aItemConverter(
     386           0 :         xProperties, xRegressionCurveContainer, m_pDrawModelWrapper->getSdrModel().GetItemPool(),
     387           0 :         m_pDrawModelWrapper->getSdrModel(),
     388           0 :         uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY ));
     389             : 
     390             :     // open dialog
     391           0 :     SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
     392           0 :     aItemConverter.FillItemSet( aItemSet );
     393             :     ObjectPropertiesDialogParameter aDialogParameter = ObjectPropertiesDialogParameter(
     394             :         ObjectIdentifier::createDataCurveCID(
     395             :             ObjectIdentifier::getSeriesParticleFromCID( m_aSelection.getSelectedCID()),
     396           0 :             RegressionCurveHelper::getRegressionCurveIndex( xRegressionCurveContainer, xCurve ), false ));
     397           0 :     aDialogParameter.init( getModel() );
     398           0 :     ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get());
     399           0 :     SolarMutexGuard aGuard;
     400             :     SchAttribTabDlg aDialog( m_pChartWindow, &aItemSet, &aDialogParameter, &aViewElementListProvider,
     401           0 :                           uno::Reference< util::XNumberFormatsSupplier >( getModel(), uno::UNO_QUERY ));
     402             : 
     403             :     // note: when a user pressed "OK" but didn't change any settings in the
     404             :     // dialog, the SfxTabDialog returns "Cancel"
     405           0 :     if( aDialog.Execute() == RET_OK || aDialog.DialogWasClosedWithOK())
     406             :     {
     407           0 :         const SfxItemSet* pOutItemSet = aDialog.GetOutputItemSet();
     408           0 :         if( pOutItemSet )
     409             :         {
     410           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     411           0 :             aItemConverter.ApplyItemSet( *pOutItemSet );
     412             :         }
     413           0 :         aUndoGuard.commit();
     414           0 :     }
     415             : }
     416             : 
     417           0 : void ChartController::executeDispatch_InsertErrorBars( bool bYError )
     418             : {
     419           0 :     ObjectType objType = bYError ? OBJECTTYPE_DATA_ERRORS_Y : OBJECTTYPE_DATA_ERRORS_X;
     420             : 
     421             :     //if a series is selected insert error bars for that series only:
     422             :     uno::Reference< chart2::XDataSeries > xSeries(
     423           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     424             : 
     425           0 :     if( xSeries.is())
     426             :     {
     427             :         UndoLiveUpdateGuard aUndoGuard(
     428             :             ActionDescriptionProvider::createDescription(
     429             :                 ActionDescriptionProvider::INSERT,
     430             :                 SCH_RESSTR( bYError ? STR_OBJECT_ERROR_BARS_Y : STR_OBJECT_ERROR_BARS_X )),
     431           0 :             m_xUndoManager );
     432             : 
     433             :         // add error bars with standard deviation
     434             :         uno::Reference< beans::XPropertySet > xErrorBarProp(
     435             :             StatisticsHelper::addErrorBars( xSeries, m_xCC,
     436             :                                             ::com::sun::star::chart::ErrorBarStyle::STANDARD_DEVIATION,
     437           0 :                                             bYError));
     438             : 
     439             :         // get an appropriate item converter
     440             :         wrapper::ErrorBarItemConverter aItemConverter(
     441           0 :             getModel(), xErrorBarProp, m_pDrawModelWrapper->getSdrModel().GetItemPool(),
     442           0 :             m_pDrawModelWrapper->getSdrModel(),
     443           0 :             uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY ));
     444             : 
     445             :         // open dialog
     446           0 :         SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
     447           0 :         aItemSet.Put(SfxBoolItem(SCHATTR_STAT_ERRORBAR_TYPE,bYError));
     448           0 :         aItemConverter.FillItemSet( aItemSet );
     449             :         ObjectPropertiesDialogParameter aDialogParameter = ObjectPropertiesDialogParameter(
     450             :             ObjectIdentifier::createClassifiedIdentifierWithParent(
     451           0 :                 objType, OUString(), m_aSelection.getSelectedCID()));
     452           0 :         aDialogParameter.init( getModel() );
     453           0 :         ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get());
     454           0 :         SolarMutexGuard aGuard;
     455             :         SchAttribTabDlg aDlg( m_pChartWindow, &aItemSet, &aDialogParameter, &aViewElementListProvider,
     456           0 :                               uno::Reference< util::XNumberFormatsSupplier >( getModel(), uno::UNO_QUERY ));
     457             :         aDlg.SetAxisMinorStepWidthForErrorBarDecimals(
     458           0 :             InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getModel(),
     459           0 :                                                                              m_xChartView, m_aSelection.getSelectedCID()));
     460             : 
     461             :         // note: when a user pressed "OK" but didn't change any settings in the
     462             :         // dialog, the SfxTabDialog returns "Cancel"
     463           0 :         if( aDlg.Execute() == RET_OK || aDlg.DialogWasClosedWithOK())
     464             :         {
     465           0 :             const SfxItemSet* pOutItemSet = aDlg.GetOutputItemSet();
     466           0 :             if( pOutItemSet )
     467             :             {
     468           0 :                 ControllerLockGuardUNO aCLGuard( getModel() );
     469           0 :                 aItemConverter.ApplyItemSet( *pOutItemSet );
     470             :             }
     471           0 :             aUndoGuard.commit();
     472           0 :         }
     473             :     }
     474             :     else
     475             :     {
     476             :         //if no series is selected insert error bars for all series
     477             :         UndoGuard aUndoGuard(
     478             :             ActionDescriptionProvider::createDescription(
     479             :                 ActionDescriptionProvider::INSERT,
     480             :                 ObjectNameProvider::getName_ObjectForAllSeries( objType ) ),
     481           0 :             m_xUndoManager );
     482             : 
     483             :         try
     484             :         {
     485             :             wrapper::AllSeriesStatisticsConverter aItemConverter(
     486           0 :                 getModel(), m_pDrawModelWrapper->GetItemPool() );
     487           0 :             SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
     488           0 :             aItemConverter.FillItemSet( aItemSet );
     489             : 
     490             :             //prepare and open dialog
     491           0 :             SolarMutexGuard aGuard;
     492             :             InsertErrorBarsDialog aDlg(
     493             :                 m_pChartWindow, aItemSet,
     494           0 :                 uno::Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY ),
     495           0 :                 bYError ? ErrorBarResources::ERROR_BAR_Y : ErrorBarResources::ERROR_BAR_X);
     496             : 
     497             :             aDlg.SetAxisMinorStepWidthForErrorBarDecimals(
     498           0 :                 InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getModel(), m_xChartView, OUString() ) );
     499             : 
     500           0 :             if( aDlg.Execute() == RET_OK )
     501             :             {
     502           0 :                 SfxItemSet aOutItemSet = aItemConverter.CreateEmptyItemSet();
     503           0 :                 aDlg.FillItemSet( aOutItemSet );
     504             : 
     505             :                 // lock controllers till end of block
     506           0 :                 ControllerLockGuardUNO aCLGuard( getModel() );
     507           0 :                 bool bChanged = aItemConverter.ApplyItemSet( aOutItemSet );//model should be changed now
     508           0 :                 if( bChanged )
     509           0 :                     aUndoGuard.commit();
     510           0 :             }
     511             :         }
     512           0 :         catch(const uno::RuntimeException& e)
     513             :         {
     514             :             ASSERT_EXCEPTION( e );
     515           0 :         }
     516           0 :     }
     517           0 : }
     518             : 
     519           0 : void ChartController::executeDispatch_InsertTrendlineEquation( bool bInsertR2 )
     520             : {
     521             :     uno::Reference< chart2::XRegressionCurve > xRegCurve(
     522           0 :         ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     523           0 :     if( !xRegCurve.is() )
     524             :     {
     525             :         uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     526           0 :             ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     527           0 :         xRegCurve.set( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCurveCnt ) );
     528             :     }
     529           0 :     if( xRegCurve.is())
     530             :     {
     531           0 :         uno::Reference< beans::XPropertySet > xEqProp( xRegCurve->getEquationProperties());
     532           0 :         if( xEqProp.is())
     533             :         {
     534             :             // using assignment for broken gcc 3.3
     535             :             UndoGuard aUndoGuard = UndoGuard(
     536             :                 ActionDescriptionProvider::createDescription(
     537             :                     ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     538           0 :                 m_xUndoManager );
     539           0 :             xEqProp->setPropertyValue( "ShowEquation", uno::makeAny( true ));
     540           0 :             xEqProp->setPropertyValue( "ShowCorrelationCoefficient", uno::makeAny( bInsertR2 ));
     541           0 :             aUndoGuard.commit();
     542           0 :         }
     543           0 :     }
     544           0 : }
     545             : 
     546           0 : void ChartController::executeDispatch_InsertR2Value()
     547             : {
     548             :     uno::Reference< beans::XPropertySet > xEqProp(
     549           0 :         ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     550           0 :     if( xEqProp.is())
     551             :     {
     552             :         UndoGuard aUndoGuard = UndoGuard(
     553             :             ActionDescriptionProvider::createDescription(
     554             :                 ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     555           0 :             m_xUndoManager );
     556           0 :         xEqProp->setPropertyValue( "ShowCorrelationCoefficient", uno::makeAny( true ));
     557           0 :         aUndoGuard.commit();
     558           0 :     }
     559           0 : }
     560             : 
     561           0 : void ChartController::executeDispatch_DeleteR2Value()
     562             : {
     563             :     uno::Reference< beans::XPropertySet > xEqProp(
     564           0 :         ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     565           0 :     if( xEqProp.is())
     566             :     {
     567             :         UndoGuard aUndoGuard = UndoGuard(
     568             :             ActionDescriptionProvider::createDescription(
     569             :                 ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     570           0 :             m_xUndoManager );
     571           0 :         xEqProp->setPropertyValue( "ShowCorrelationCoefficient", uno::makeAny( false ));
     572           0 :         aUndoGuard.commit();
     573           0 :     }
     574           0 : }
     575             : 
     576           0 : void ChartController::executeDispatch_DeleteMeanValue()
     577             : {
     578             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     579           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     580           0 :     if( xRegCurveCnt.is())
     581             :     {
     582             :         UndoGuard aUndoGuard(
     583             :             ActionDescriptionProvider::createDescription(
     584             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_AVERAGE_LINE )),
     585           0 :             m_xUndoManager );
     586           0 :         RegressionCurveHelper::removeMeanValueLine( xRegCurveCnt );
     587           0 :         aUndoGuard.commit();
     588           0 :     }
     589           0 : }
     590             : 
     591           0 : void ChartController::executeDispatch_DeleteTrendline()
     592             : {
     593             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     594           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     595           0 :     if( xRegCurveCnt.is())
     596             :     {
     597             :         UndoGuard aUndoGuard(
     598             :             ActionDescriptionProvider::createDescription(
     599             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_CURVE )),
     600           0 :             m_xUndoManager );
     601           0 :         RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCurveCnt );
     602           0 :         aUndoGuard.commit();
     603           0 :     }
     604           0 : }
     605             : 
     606           0 : void ChartController::executeDispatch_DeleteTrendlineEquation()
     607             : {
     608             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     609           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     610           0 :     if( xRegCurveCnt.is())
     611             :     {
     612             :         UndoGuard aUndoGuard(
     613             :             ActionDescriptionProvider::createDescription(
     614             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     615           0 :             m_xUndoManager );
     616           0 :         RegressionCurveHelper::removeEquations( xRegCurveCnt );
     617           0 :         aUndoGuard.commit();
     618           0 :     }
     619           0 : }
     620             : 
     621           0 : void ChartController::executeDispatch_DeleteErrorBars( bool bYError )
     622             : {
     623             :     uno::Reference< chart2::XDataSeries > xDataSeries(
     624           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ));
     625           0 :     if( xDataSeries.is())
     626             :     {
     627             :         UndoGuard aUndoGuard(
     628             :             ActionDescriptionProvider::createDescription(
     629             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_CURVE )),
     630           0 :             m_xUndoManager );
     631           0 :         StatisticsHelper::removeErrorBars( xDataSeries, bYError );
     632           0 :         aUndoGuard.commit();
     633           0 :     }
     634           0 : }
     635             : 
     636           0 : void ChartController::executeDispatch_InsertDataLabels()
     637             : {
     638             :     uno::Reference< chart2::XDataSeries > xSeries(
     639           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     640           0 :     if( xSeries.is() )
     641             :     {
     642             :         UndoGuard aUndoGuard = UndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::INSERT,
     643             :             SCH_RESSTR( STR_OBJECT_DATALABELS )),
     644           0 :             m_xUndoManager );
     645           0 :         DataSeriesHelper::insertDataLabelsToSeriesAndAllPoints( xSeries );
     646           0 :         aUndoGuard.commit();
     647           0 :     }
     648           0 : }
     649             : 
     650           0 : void ChartController::executeDispatch_InsertDataLabel()
     651             : {
     652             :     UndoGuard aUndoGuard = UndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::INSERT,
     653             :         SCH_RESSTR( STR_OBJECT_LABEL )),
     654           0 :         m_xUndoManager );
     655           0 :     DataSeriesHelper::insertDataLabelToPoint( ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ) );
     656           0 :     aUndoGuard.commit();
     657           0 : }
     658             : 
     659           0 : void ChartController::executeDispatch_DeleteDataLabels()
     660             : {
     661             :     uno::Reference< chart2::XDataSeries > xSeries(
     662           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     663           0 :     if( xSeries.is() )
     664             :     {
     665             :         UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::DELETE,
     666             :             SCH_RESSTR( STR_OBJECT_DATALABELS )),
     667           0 :             m_xUndoManager );
     668           0 :         DataSeriesHelper::deleteDataLabelsFromSeriesAndAllPoints( xSeries );
     669           0 :         aUndoGuard.commit();
     670           0 :     }
     671           0 : }
     672             : 
     673           0 : void ChartController::executeDispatch_DeleteDataLabel()
     674             : {
     675             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::DELETE,
     676             :         SCH_RESSTR( STR_OBJECT_LABEL )),
     677           0 :         m_xUndoManager );
     678           0 :     DataSeriesHelper::deleteDataLabelsFromPoint( ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ) );
     679           0 :     aUndoGuard.commit();
     680           0 : }
     681             : 
     682           0 : void ChartController::executeDispatch_ResetAllDataPoints()
     683             : {
     684             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::FORMAT,
     685             :         SCH_RESSTR( STR_OBJECT_DATAPOINTS )),
     686           0 :         m_xUndoManager );
     687           0 :     uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     688           0 :     if( xSeries.is() )
     689           0 :         xSeries->resetAllDataPoints();
     690           0 :     aUndoGuard.commit();
     691           0 : }
     692           0 : void ChartController::executeDispatch_ResetDataPoint()
     693             : {
     694             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::FORMAT,
     695             :         SCH_RESSTR( STR_OBJECT_DATAPOINT )),
     696           0 :         m_xUndoManager );
     697           0 :     uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     698           0 :     if( xSeries.is() )
     699             :     {
     700           0 :         sal_Int32 nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( m_aSelection.getSelectedCID() );
     701           0 :         xSeries->resetDataPoint( nPointIndex );
     702             :     }
     703           0 :     aUndoGuard.commit();
     704           0 : }
     705             : 
     706           0 : void ChartController::executeDispatch_InsertAxisTitle()
     707             : {
     708             :     try
     709             :     {
     710           0 :         uno::Reference< XTitle > xTitle;
     711             :         {
     712             :             UndoGuard aUndoGuard(
     713             :             ActionDescriptionProvider::createDescription(
     714             :                 ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_TITLE )),
     715           0 :             m_xUndoManager );
     716             : 
     717           0 :             Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     718           0 :             sal_Int32 nDimensionIndex = -1;
     719           0 :             sal_Int32 nCooSysIndex = -1;
     720           0 :             sal_Int32 nAxisIndex = -1;
     721           0 :             AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram(getModel()), nCooSysIndex, nDimensionIndex, nAxisIndex );
     722             : 
     723           0 :             TitleHelper::eTitleType eTitleType = TitleHelper::X_AXIS_TITLE;
     724           0 :             if( nDimensionIndex==0 )
     725           0 :                 eTitleType = nAxisIndex==0 ? TitleHelper::X_AXIS_TITLE : TitleHelper::SECONDARY_X_AXIS_TITLE;
     726           0 :             else if( nDimensionIndex==1 )
     727           0 :                 eTitleType = nAxisIndex==0 ? TitleHelper::Y_AXIS_TITLE : TitleHelper::SECONDARY_Y_AXIS_TITLE;
     728             :             else
     729           0 :                 eTitleType = TitleHelper::Z_AXIS_TITLE;
     730             : 
     731           0 :             boost::scoped_ptr< ReferenceSizeProvider > apRefSizeProvider( impl_createReferenceSizeProvider());
     732           0 :             xTitle = TitleHelper::createTitle( eTitleType, ObjectNameProvider::getTitleNameByType(eTitleType), getModel(), m_xCC, apRefSizeProvider.get() );
     733           0 :             aUndoGuard.commit();
     734           0 :         }
     735             :     }
     736           0 :     catch(const uno::RuntimeException& e)
     737             :     {
     738             :         ASSERT_EXCEPTION( e );
     739             :     }
     740           0 : }
     741             : 
     742           0 : void ChartController::executeDispatch_InsertAxis()
     743             : {
     744             :     UndoGuard aUndoGuard(
     745             :         ActionDescriptionProvider::createDescription(
     746             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_AXIS )),
     747           0 :         m_xUndoManager );
     748             : 
     749             :     try
     750             :     {
     751           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     752           0 :         if( xAxis.is() )
     753             :         {
     754           0 :             AxisHelper::makeAxisVisible( xAxis );
     755           0 :             aUndoGuard.commit();
     756           0 :         }
     757             :     }
     758           0 :     catch(const uno::RuntimeException& e)
     759             :     {
     760             :         ASSERT_EXCEPTION( e );
     761           0 :     }
     762           0 : }
     763             : 
     764           0 : void ChartController::executeDispatch_DeleteAxis()
     765             : {
     766             :     UndoGuard aUndoGuard(
     767             :         ActionDescriptionProvider::createDescription(
     768             :             ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_AXIS )),
     769           0 :         m_xUndoManager );
     770             : 
     771             :     try
     772             :     {
     773           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     774           0 :         if( xAxis.is() )
     775             :         {
     776           0 :             AxisHelper::makeAxisInvisible( xAxis );
     777           0 :             aUndoGuard.commit();
     778           0 :         }
     779             :     }
     780           0 :     catch(const uno::RuntimeException& e)
     781             :     {
     782             :         ASSERT_EXCEPTION( e );
     783           0 :     }
     784           0 : }
     785             : 
     786           0 : void ChartController::executeDispatch_InsertMajorGrid()
     787             : {
     788             :     UndoGuard aUndoGuard(
     789             :         ActionDescriptionProvider::createDescription(
     790             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_GRID )),
     791           0 :         m_xUndoManager );
     792             : 
     793             :     try
     794             :     {
     795           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     796           0 :         if( xAxis.is() )
     797             :         {
     798           0 :             AxisHelper::makeGridVisible( xAxis->getGridProperties() );
     799           0 :             aUndoGuard.commit();
     800           0 :         }
     801             :     }
     802           0 :     catch(const uno::RuntimeException& e)
     803             :     {
     804             :         ASSERT_EXCEPTION( e );
     805           0 :     }
     806           0 : }
     807             : 
     808           0 : void ChartController::executeDispatch_DeleteMajorGrid()
     809             : {
     810             :     UndoGuard aUndoGuard(
     811             :         ActionDescriptionProvider::createDescription(
     812             :             ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_GRID )),
     813           0 :         m_xUndoManager );
     814             : 
     815             :     try
     816             :     {
     817           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     818           0 :         if( xAxis.is() )
     819             :         {
     820           0 :             AxisHelper::makeGridInvisible( xAxis->getGridProperties() );
     821           0 :             aUndoGuard.commit();
     822           0 :         }
     823             :     }
     824           0 :     catch(const uno::RuntimeException& e)
     825             :     {
     826             :         ASSERT_EXCEPTION( e );
     827           0 :     }
     828           0 : }
     829             : 
     830           0 : void ChartController::executeDispatch_InsertMinorGrid()
     831             : {
     832             :     UndoGuard aUndoGuard(
     833             :         ActionDescriptionProvider::createDescription(
     834             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_GRID )),
     835           0 :         m_xUndoManager );
     836             : 
     837             :     try
     838             :     {
     839           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     840           0 :         if( xAxis.is() )
     841             :         {
     842           0 :             Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() );
     843           0 :             for( sal_Int32 nN=0; nN<aSubGrids.getLength(); nN++)
     844           0 :                 AxisHelper::makeGridVisible( aSubGrids[nN] );
     845           0 :             aUndoGuard.commit();
     846           0 :         }
     847             :     }
     848           0 :     catch(const uno::RuntimeException& e)
     849             :     {
     850             :         ASSERT_EXCEPTION( e );
     851           0 :     }
     852           0 : }
     853             : 
     854           0 : void ChartController::executeDispatch_DeleteMinorGrid()
     855             : {
     856             :     UndoGuard aUndoGuard(
     857             :         ActionDescriptionProvider::createDescription(
     858             :             ActionDescriptionProvider::DELETE, SCH_RESSTR(STR_OBJECT_GRID)),
     859           0 :         m_xUndoManager );
     860             : 
     861             :     try
     862             :     {
     863           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     864           0 :         if( xAxis.is() )
     865             :         {
     866           0 :             Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() );
     867           0 :             for( sal_Int32 nN=0; nN<aSubGrids.getLength(); nN++)
     868           0 :                 AxisHelper::makeGridInvisible( aSubGrids[nN] );
     869           0 :             aUndoGuard.commit();
     870           0 :         }
     871             :     }
     872           0 :     catch(const uno::RuntimeException& e)
     873             :     {
     874             :         ASSERT_EXCEPTION( e );
     875           0 :     }
     876           0 : }
     877             : 
     878         102 : } //namespace chart
     879             : 
     880             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.10