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