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: */
|