LCOV - code coverage report
Current view: top level - chart2/source/controller/main - ChartController_Insert.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 1 405 0.2 %
Date: 2015-06-13 12:38:46 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 :     explicit 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 :         ScopedVclPtrInstance<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 :         ScopedVclPtrInstance<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 :         ScopedVclPtrInstance< 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 :         ScopedVclPtrInstance< 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 :         ScopedVclPtrInstance< 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             :     ScopedVclPtrInstance<SchAttribTabDlg> aDialog(
     401             :         m_pChartWindow, &aItemSet, &aDialogParameter,
     402             :         &aViewElementListProvider,
     403             :         uno::Reference< util::XNumberFormatsSupplier >(
     404           0 :                 getModel(), uno::UNO_QUERY ) );
     405             : 
     406             :     // note: when a user pressed "OK" but didn't change any settings in the
     407             :     // dialog, the SfxTabDialog returns "Cancel"
     408           0 :     if( aDialog->Execute() == RET_OK || aDialog->DialogWasClosedWithOK())
     409             :     {
     410           0 :         const SfxItemSet* pOutItemSet = aDialog->GetOutputItemSet();
     411           0 :         if( pOutItemSet )
     412             :         {
     413           0 :             ControllerLockGuardUNO aCLGuard( getModel() );
     414           0 :             aItemConverter.ApplyItemSet( *pOutItemSet );
     415             :         }
     416           0 :         aUndoGuard.commit();
     417           0 :     }
     418             : }
     419             : 
     420           0 : void ChartController::executeDispatch_InsertErrorBars( bool bYError )
     421             : {
     422           0 :     ObjectType objType = bYError ? OBJECTTYPE_DATA_ERRORS_Y : OBJECTTYPE_DATA_ERRORS_X;
     423             : 
     424             :     //if a series is selected insert error bars for that series only:
     425             :     uno::Reference< chart2::XDataSeries > xSeries(
     426           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     427             : 
     428           0 :     if( xSeries.is())
     429             :     {
     430             :         UndoLiveUpdateGuard aUndoGuard(
     431             :             ActionDescriptionProvider::createDescription(
     432             :                 ActionDescriptionProvider::INSERT,
     433             :                 SCH_RESSTR( bYError ? STR_OBJECT_ERROR_BARS_Y : STR_OBJECT_ERROR_BARS_X )),
     434           0 :             m_xUndoManager );
     435             : 
     436             :         // add error bars with standard deviation
     437             :         uno::Reference< beans::XPropertySet > xErrorBarProp(
     438             :             StatisticsHelper::addErrorBars( xSeries, m_xCC,
     439             :                                             ::com::sun::star::chart::ErrorBarStyle::STANDARD_DEVIATION,
     440           0 :                                             bYError));
     441             : 
     442             :         // get an appropriate item converter
     443             :         wrapper::ErrorBarItemConverter aItemConverter(
     444           0 :             getModel(), xErrorBarProp, m_pDrawModelWrapper->getSdrModel().GetItemPool(),
     445           0 :             m_pDrawModelWrapper->getSdrModel(),
     446           0 :             uno::Reference< lang::XMultiServiceFactory >( getModel(), uno::UNO_QUERY ));
     447             : 
     448             :         // open dialog
     449           0 :         SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
     450           0 :         aItemSet.Put(SfxBoolItem(SCHATTR_STAT_ERRORBAR_TYPE,bYError));
     451           0 :         aItemConverter.FillItemSet( aItemSet );
     452             :         ObjectPropertiesDialogParameter aDialogParameter = ObjectPropertiesDialogParameter(
     453             :             ObjectIdentifier::createClassifiedIdentifierWithParent(
     454           0 :                 objType, OUString(), m_aSelection.getSelectedCID()));
     455           0 :         aDialogParameter.init( getModel() );
     456           0 :         ViewElementListProvider aViewElementListProvider( m_pDrawModelWrapper.get());
     457           0 :         SolarMutexGuard aGuard;
     458             :         ScopedVclPtrInstance<SchAttribTabDlg> aDlg(
     459             :                 m_pChartWindow, &aItemSet, &aDialogParameter,
     460             :                 &aViewElementListProvider,
     461             :                 uno::Reference< util::XNumberFormatsSupplier >(
     462           0 :                         getModel(), uno::UNO_QUERY ) );
     463             :         aDlg->SetAxisMinorStepWidthForErrorBarDecimals(
     464           0 :             InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getModel(),
     465           0 :                                                                              m_xChartView, m_aSelection.getSelectedCID()));
     466             : 
     467             :         // note: when a user pressed "OK" but didn't change any settings in the
     468             :         // dialog, the SfxTabDialog returns "Cancel"
     469           0 :         if( aDlg->Execute() == RET_OK || aDlg->DialogWasClosedWithOK())
     470             :         {
     471           0 :             const SfxItemSet* pOutItemSet = aDlg->GetOutputItemSet();
     472           0 :             if( pOutItemSet )
     473             :             {
     474           0 :                 ControllerLockGuardUNO aCLGuard( getModel() );
     475           0 :                 aItemConverter.ApplyItemSet( *pOutItemSet );
     476             :             }
     477           0 :             aUndoGuard.commit();
     478           0 :         }
     479             :     }
     480             :     else
     481             :     {
     482             :         //if no series is selected insert error bars for all series
     483             :         UndoGuard aUndoGuard(
     484             :             ActionDescriptionProvider::createDescription(
     485             :                 ActionDescriptionProvider::INSERT,
     486             :                 ObjectNameProvider::getName_ObjectForAllSeries( objType ) ),
     487           0 :             m_xUndoManager );
     488             : 
     489             :         try
     490             :         {
     491             :             wrapper::AllSeriesStatisticsConverter aItemConverter(
     492           0 :                 getModel(), m_pDrawModelWrapper->GetItemPool() );
     493           0 :             SfxItemSet aItemSet = aItemConverter.CreateEmptyItemSet();
     494           0 :             aItemConverter.FillItemSet( aItemSet );
     495             : 
     496             :             //prepare and open dialog
     497           0 :             SolarMutexGuard aGuard;
     498             :             ScopedVclPtrInstance<InsertErrorBarsDialog> aDlg(
     499             :                 m_pChartWindow, aItemSet,
     500           0 :                 uno::Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY ),
     501           0 :                 bYError ? ErrorBarResources::ERROR_BAR_Y : ErrorBarResources::ERROR_BAR_X);
     502             : 
     503             :             aDlg->SetAxisMinorStepWidthForErrorBarDecimals(
     504           0 :                 InsertErrorBarsDialog::getAxisMinorStepWidthForErrorBarDecimals( getModel(), m_xChartView, OUString() ) );
     505             : 
     506           0 :             if( aDlg->Execute() == RET_OK )
     507             :             {
     508           0 :                 SfxItemSet aOutItemSet = aItemConverter.CreateEmptyItemSet();
     509           0 :                 aDlg->FillItemSet( aOutItemSet );
     510             : 
     511             :                 // lock controllers till end of block
     512           0 :                 ControllerLockGuardUNO aCLGuard( getModel() );
     513           0 :                 bool bChanged = aItemConverter.ApplyItemSet( aOutItemSet );//model should be changed now
     514           0 :                 if( bChanged )
     515           0 :                     aUndoGuard.commit();
     516           0 :             }
     517             :         }
     518           0 :         catch(const uno::RuntimeException& e)
     519             :         {
     520             :             ASSERT_EXCEPTION( e );
     521           0 :         }
     522           0 :     }
     523           0 : }
     524             : 
     525           0 : void ChartController::executeDispatch_InsertTrendlineEquation( bool bInsertR2 )
     526             : {
     527             :     uno::Reference< chart2::XRegressionCurve > xRegCurve(
     528           0 :         ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     529           0 :     if( !xRegCurve.is() )
     530             :     {
     531             :         uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     532           0 :             ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     533           0 :         xRegCurve.set( RegressionCurveHelper::getFirstCurveNotMeanValueLine( xRegCurveCnt ) );
     534             :     }
     535           0 :     if( xRegCurve.is())
     536             :     {
     537           0 :         uno::Reference< beans::XPropertySet > xEqProp( xRegCurve->getEquationProperties());
     538           0 :         if( xEqProp.is())
     539             :         {
     540             :             // using assignment for broken gcc 3.3
     541             :             UndoGuard aUndoGuard = UndoGuard(
     542             :                 ActionDescriptionProvider::createDescription(
     543             :                     ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     544           0 :                 m_xUndoManager );
     545           0 :             xEqProp->setPropertyValue( "ShowEquation", uno::makeAny( true ));
     546           0 :             xEqProp->setPropertyValue( "ShowCorrelationCoefficient", uno::makeAny( bInsertR2 ));
     547           0 :             aUndoGuard.commit();
     548           0 :         }
     549           0 :     }
     550           0 : }
     551             : 
     552           0 : void ChartController::executeDispatch_InsertR2Value()
     553             : {
     554             :     uno::Reference< beans::XPropertySet > xEqProp(
     555           0 :         ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     556           0 :     if( xEqProp.is())
     557             :     {
     558             :         UndoGuard aUndoGuard = UndoGuard(
     559             :             ActionDescriptionProvider::createDescription(
     560             :                 ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     561           0 :             m_xUndoManager );
     562           0 :         xEqProp->setPropertyValue( "ShowCorrelationCoefficient", uno::makeAny( true ));
     563           0 :         aUndoGuard.commit();
     564           0 :     }
     565           0 : }
     566             : 
     567           0 : void ChartController::executeDispatch_DeleteR2Value()
     568             : {
     569             :     uno::Reference< beans::XPropertySet > xEqProp(
     570           0 :         ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     571           0 :     if( xEqProp.is())
     572             :     {
     573             :         UndoGuard aUndoGuard = UndoGuard(
     574             :             ActionDescriptionProvider::createDescription(
     575             :                 ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     576           0 :             m_xUndoManager );
     577           0 :         xEqProp->setPropertyValue( "ShowCorrelationCoefficient", uno::makeAny( false ));
     578           0 :         aUndoGuard.commit();
     579           0 :     }
     580           0 : }
     581             : 
     582           0 : void ChartController::executeDispatch_DeleteMeanValue()
     583             : {
     584             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     585           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     586           0 :     if( xRegCurveCnt.is())
     587             :     {
     588             :         UndoGuard aUndoGuard(
     589             :             ActionDescriptionProvider::createDescription(
     590             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_AVERAGE_LINE )),
     591           0 :             m_xUndoManager );
     592           0 :         RegressionCurveHelper::removeMeanValueLine( xRegCurveCnt );
     593           0 :         aUndoGuard.commit();
     594           0 :     }
     595           0 : }
     596             : 
     597           0 : void ChartController::executeDispatch_DeleteTrendline()
     598             : {
     599             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     600           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     601           0 :     if( xRegCurveCnt.is())
     602             :     {
     603             :         UndoGuard aUndoGuard(
     604             :             ActionDescriptionProvider::createDescription(
     605             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_CURVE )),
     606           0 :             m_xUndoManager );
     607           0 :         RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCurveCnt );
     608           0 :         aUndoGuard.commit();
     609           0 :     }
     610           0 : }
     611             : 
     612           0 : void ChartController::executeDispatch_DeleteTrendlineEquation()
     613             : {
     614             :     uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
     615           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     616           0 :     if( xRegCurveCnt.is())
     617             :     {
     618             :         UndoGuard aUndoGuard(
     619             :             ActionDescriptionProvider::createDescription(
     620             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_CURVE_EQUATION )),
     621           0 :             m_xUndoManager );
     622           0 :         RegressionCurveHelper::removeEquations( xRegCurveCnt );
     623           0 :         aUndoGuard.commit();
     624           0 :     }
     625           0 : }
     626             : 
     627           0 : void ChartController::executeDispatch_DeleteErrorBars( bool bYError )
     628             : {
     629             :     uno::Reference< chart2::XDataSeries > xDataSeries(
     630           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ));
     631           0 :     if( xDataSeries.is())
     632             :     {
     633             :         UndoGuard aUndoGuard(
     634             :             ActionDescriptionProvider::createDescription(
     635             :                 ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_CURVE )),
     636           0 :             m_xUndoManager );
     637           0 :         StatisticsHelper::removeErrorBars( xDataSeries, bYError );
     638           0 :         aUndoGuard.commit();
     639           0 :     }
     640           0 : }
     641             : 
     642           0 : void ChartController::executeDispatch_InsertDataLabels()
     643             : {
     644             :     uno::Reference< chart2::XDataSeries > xSeries(
     645           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     646           0 :     if( xSeries.is() )
     647             :     {
     648             :         UndoGuard aUndoGuard = UndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::INSERT,
     649             :             SCH_RESSTR( STR_OBJECT_DATALABELS )),
     650           0 :             m_xUndoManager );
     651           0 :         DataSeriesHelper::insertDataLabelsToSeriesAndAllPoints( xSeries );
     652           0 :         aUndoGuard.commit();
     653           0 :     }
     654           0 : }
     655             : 
     656           0 : void ChartController::executeDispatch_InsertDataLabel()
     657             : {
     658             :     UndoGuard aUndoGuard = UndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::INSERT,
     659             :         SCH_RESSTR( STR_OBJECT_LABEL )),
     660           0 :         m_xUndoManager );
     661           0 :     DataSeriesHelper::insertDataLabelToPoint( ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ) );
     662           0 :     aUndoGuard.commit();
     663           0 : }
     664             : 
     665           0 : void ChartController::executeDispatch_DeleteDataLabels()
     666             : {
     667             :     uno::Reference< chart2::XDataSeries > xSeries(
     668           0 :         ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     669           0 :     if( xSeries.is() )
     670             :     {
     671             :         UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::DELETE,
     672             :             SCH_RESSTR( STR_OBJECT_DATALABELS )),
     673           0 :             m_xUndoManager );
     674           0 :         DataSeriesHelper::deleteDataLabelsFromSeriesAndAllPoints( xSeries );
     675           0 :         aUndoGuard.commit();
     676           0 :     }
     677           0 : }
     678             : 
     679           0 : void ChartController::executeDispatch_DeleteDataLabel()
     680             : {
     681             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::DELETE,
     682             :         SCH_RESSTR( STR_OBJECT_LABEL )),
     683           0 :         m_xUndoManager );
     684           0 :     DataSeriesHelper::deleteDataLabelsFromPoint( ObjectIdentifier::getObjectPropertySet( m_aSelection.getSelectedCID(), getModel() ) );
     685           0 :     aUndoGuard.commit();
     686           0 : }
     687             : 
     688           0 : void ChartController::executeDispatch_ResetAllDataPoints()
     689             : {
     690             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::FORMAT,
     691             :         SCH_RESSTR( STR_OBJECT_DATAPOINTS )),
     692           0 :         m_xUndoManager );
     693           0 :     uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     694           0 :     if( xSeries.is() )
     695           0 :         xSeries->resetAllDataPoints();
     696           0 :     aUndoGuard.commit();
     697           0 : }
     698           0 : void ChartController::executeDispatch_ResetDataPoint()
     699             : {
     700             :     UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription( ActionDescriptionProvider::FORMAT,
     701             :         SCH_RESSTR( STR_OBJECT_DATAPOINT )),
     702           0 :         m_xUndoManager );
     703           0 :     uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( m_aSelection.getSelectedCID(), getModel() ), uno::UNO_QUERY );
     704           0 :     if( xSeries.is() )
     705             :     {
     706           0 :         sal_Int32 nPointIndex = ObjectIdentifier::getIndexFromParticleOrCID( m_aSelection.getSelectedCID() );
     707           0 :         xSeries->resetDataPoint( nPointIndex );
     708             :     }
     709           0 :     aUndoGuard.commit();
     710           0 : }
     711             : 
     712           0 : void ChartController::executeDispatch_InsertAxisTitle()
     713             : {
     714             :     try
     715             :     {
     716           0 :         uno::Reference< XTitle > xTitle;
     717             :         {
     718             :             UndoGuard aUndoGuard(
     719             :             ActionDescriptionProvider::createDescription(
     720             :                 ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_TITLE )),
     721           0 :             m_xUndoManager );
     722             : 
     723           0 :             Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     724           0 :             sal_Int32 nDimensionIndex = -1;
     725           0 :             sal_Int32 nCooSysIndex = -1;
     726           0 :             sal_Int32 nAxisIndex = -1;
     727           0 :             AxisHelper::getIndicesForAxis( xAxis, ChartModelHelper::findDiagram(getModel()), nCooSysIndex, nDimensionIndex, nAxisIndex );
     728             : 
     729           0 :             TitleHelper::eTitleType eTitleType = TitleHelper::X_AXIS_TITLE;
     730           0 :             if( nDimensionIndex==0 )
     731           0 :                 eTitleType = nAxisIndex==0 ? TitleHelper::X_AXIS_TITLE : TitleHelper::SECONDARY_X_AXIS_TITLE;
     732           0 :             else if( nDimensionIndex==1 )
     733           0 :                 eTitleType = nAxisIndex==0 ? TitleHelper::Y_AXIS_TITLE : TitleHelper::SECONDARY_Y_AXIS_TITLE;
     734             :             else
     735           0 :                 eTitleType = TitleHelper::Z_AXIS_TITLE;
     736             : 
     737           0 :             boost::scoped_ptr< ReferenceSizeProvider > apRefSizeProvider( impl_createReferenceSizeProvider());
     738           0 :             xTitle = TitleHelper::createTitle( eTitleType, ObjectNameProvider::getTitleNameByType(eTitleType), getModel(), m_xCC, apRefSizeProvider.get() );
     739           0 :             aUndoGuard.commit();
     740           0 :         }
     741             :     }
     742           0 :     catch(const uno::RuntimeException& e)
     743             :     {
     744             :         ASSERT_EXCEPTION( e );
     745             :     }
     746           0 : }
     747             : 
     748           0 : void ChartController::executeDispatch_InsertAxis()
     749             : {
     750             :     UndoGuard aUndoGuard(
     751             :         ActionDescriptionProvider::createDescription(
     752             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_AXIS )),
     753           0 :         m_xUndoManager );
     754             : 
     755             :     try
     756             :     {
     757           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     758           0 :         if( xAxis.is() )
     759             :         {
     760           0 :             AxisHelper::makeAxisVisible( xAxis );
     761           0 :             aUndoGuard.commit();
     762           0 :         }
     763             :     }
     764           0 :     catch(const uno::RuntimeException& e)
     765             :     {
     766             :         ASSERT_EXCEPTION( e );
     767           0 :     }
     768           0 : }
     769             : 
     770           0 : void ChartController::executeDispatch_DeleteAxis()
     771             : {
     772             :     UndoGuard aUndoGuard(
     773             :         ActionDescriptionProvider::createDescription(
     774             :             ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_AXIS )),
     775           0 :         m_xUndoManager );
     776             : 
     777             :     try
     778             :     {
     779           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     780           0 :         if( xAxis.is() )
     781             :         {
     782           0 :             AxisHelper::makeAxisInvisible( xAxis );
     783           0 :             aUndoGuard.commit();
     784           0 :         }
     785             :     }
     786           0 :     catch(const uno::RuntimeException& e)
     787             :     {
     788             :         ASSERT_EXCEPTION( e );
     789           0 :     }
     790           0 : }
     791             : 
     792           0 : void ChartController::executeDispatch_InsertMajorGrid()
     793             : {
     794             :     UndoGuard aUndoGuard(
     795             :         ActionDescriptionProvider::createDescription(
     796             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_GRID )),
     797           0 :         m_xUndoManager );
     798             : 
     799             :     try
     800             :     {
     801           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     802           0 :         if( xAxis.is() )
     803             :         {
     804           0 :             AxisHelper::makeGridVisible( xAxis->getGridProperties() );
     805           0 :             aUndoGuard.commit();
     806           0 :         }
     807             :     }
     808           0 :     catch(const uno::RuntimeException& e)
     809             :     {
     810             :         ASSERT_EXCEPTION( e );
     811           0 :     }
     812           0 : }
     813             : 
     814           0 : void ChartController::executeDispatch_DeleteMajorGrid()
     815             : {
     816             :     UndoGuard aUndoGuard(
     817             :         ActionDescriptionProvider::createDescription(
     818             :             ActionDescriptionProvider::DELETE, SCH_RESSTR( STR_OBJECT_GRID )),
     819           0 :         m_xUndoManager );
     820             : 
     821             :     try
     822             :     {
     823           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     824           0 :         if( xAxis.is() )
     825             :         {
     826           0 :             AxisHelper::makeGridInvisible( xAxis->getGridProperties() );
     827           0 :             aUndoGuard.commit();
     828           0 :         }
     829             :     }
     830           0 :     catch(const uno::RuntimeException& e)
     831             :     {
     832             :         ASSERT_EXCEPTION( e );
     833           0 :     }
     834           0 : }
     835             : 
     836           0 : void ChartController::executeDispatch_InsertMinorGrid()
     837             : {
     838             :     UndoGuard aUndoGuard(
     839             :         ActionDescriptionProvider::createDescription(
     840             :             ActionDescriptionProvider::INSERT, SCH_RESSTR( STR_OBJECT_GRID )),
     841           0 :         m_xUndoManager );
     842             : 
     843             :     try
     844             :     {
     845           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     846           0 :         if( xAxis.is() )
     847             :         {
     848           0 :             Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() );
     849           0 :             for( sal_Int32 nN=0; nN<aSubGrids.getLength(); nN++)
     850           0 :                 AxisHelper::makeGridVisible( aSubGrids[nN] );
     851           0 :             aUndoGuard.commit();
     852           0 :         }
     853             :     }
     854           0 :     catch(const uno::RuntimeException& e)
     855             :     {
     856             :         ASSERT_EXCEPTION( e );
     857           0 :     }
     858           0 : }
     859             : 
     860           0 : void ChartController::executeDispatch_DeleteMinorGrid()
     861             : {
     862             :     UndoGuard aUndoGuard(
     863             :         ActionDescriptionProvider::createDescription(
     864             :             ActionDescriptionProvider::DELETE, SCH_RESSTR(STR_OBJECT_GRID)),
     865           0 :         m_xUndoManager );
     866             : 
     867             :     try
     868             :     {
     869           0 :         Reference< XAxis > xAxis = ObjectIdentifier::getAxisForCID( m_aSelection.getSelectedCID(), getModel() );
     870           0 :         if( xAxis.is() )
     871             :         {
     872           0 :             Sequence< Reference< beans::XPropertySet > > aSubGrids( xAxis->getSubGridProperties() );
     873           0 :             for( sal_Int32 nN=0; nN<aSubGrids.getLength(); nN++)
     874           0 :                 AxisHelper::makeGridInvisible( aSubGrids[nN] );
     875           0 :             aUndoGuard.commit();
     876           0 :         }
     877             :     }
     878           0 :     catch(const uno::RuntimeException& e)
     879             :     {
     880             :         ASSERT_EXCEPTION( e );
     881           0 :     }
     882           0 : }
     883             : 
     884          57 : } //namespace chart
     885             : 
     886             : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */

Generated by: LCOV version 1.11