Branch data 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 : :
21 : : #include "ChartController.hxx"
22 : : #include "ChartWindow.hxx"
23 : : #include "ChartModelHelper.hxx"
24 : : #include "TitleHelper.hxx"
25 : : #include "ThreeDHelper.hxx"
26 : : #include "DataSeriesHelper.hxx"
27 : : #include "UndoGuard.hxx"
28 : : #include "ControllerLockGuard.hxx"
29 : : #include "macros.hxx"
30 : : #include "ResId.hxx"
31 : : #include "Strings.hrc"
32 : : #include "ObjectIdentifier.hxx"
33 : : #include "ReferenceSizeProvider.hxx"
34 : : #include "chartview/ExplicitValueProvider.hxx"
35 : : #include "chartview/DrawModelWrapper.hxx"
36 : : #include "ChartTransferable.hxx"
37 : : #include "DrawViewWrapper.hxx"
38 : : #include "LegendHelper.hxx"
39 : : #include "AxisHelper.hxx"
40 : : #include "RegressionCurveHelper.hxx"
41 : : #include "ShapeController.hxx"
42 : : #include "DiagramHelper.hxx"
43 : : #include "ObjectNameProvider.hxx"
44 : :
45 : : #include <com/sun/star/chart2/DataPointLabel.hpp>
46 : : #include <com/sun/star/beans/XPropertyState.hpp>
47 : : #include <com/sun/star/drawing/CameraGeometry.hpp>
48 : : #include <com/sun/star/graphic/XGraphic.hpp>
49 : : #include <com/sun/star/io/XInputStream.hpp>
50 : : #include <com/sun/star/text/XTextRange.hpp>
51 : : #include <com/sun/star/drawing/TextVerticalAdjust.hpp>
52 : : #include <com/sun/star/drawing/TextHorizontalAdjust.hpp>
53 : : #include <com/sun/star/chart/ErrorBarStyle.hpp>
54 : :
55 : : #include <svx/ActionDescriptionProvider.hxx>
56 : : // for TransferableDataHelper/TransferableHelper
57 : : #include <svtools/transfer.hxx>
58 : : // for SotStorageStreamRef
59 : : #include <sot/storage.hxx>
60 : : // for Graphic
61 : : #include <vcl/graph.hxx>
62 : : // for SvxDrawingLayerImport/SvxUnoDrawingModel
63 : : #include <svx/unomodel.hxx>
64 : : // for SdrModel
65 : : #include <svx/svdmodel.hxx>
66 : : // for OInputStreamWrapper
67 : : #include <unotools/streamwrap.hxx>
68 : : // for SolarMutex
69 : : #include <vcl/svapp.hxx>
70 : : #include <osl/mutex.hxx>
71 : : #include <svx/dialmgr.hxx>
72 : : #include <svx/dialogs.hrc>
73 : : // for OutlinerView
74 : : #include <editeng/outliner.hxx>
75 : : #include <svx/svditer.hxx>
76 : : #include <svx/svdpage.hxx>
77 : : #include <svx/svdundo.hxx>
78 : : #include <svx/unoapi.hxx>
79 : : #include <svx/unopage.hxx>
80 : :
81 : : #include <boost/scoped_ptr.hpp>
82 : :
83 : : using namespace ::com::sun::star;
84 : :
85 : : using ::com::sun::star::uno::Reference;
86 : : using ::com::sun::star::uno::Sequence;
87 : : using ::rtl::OUString;
88 : :
89 : : namespace
90 : : {
91 : :
92 : 0 : bool lcl_deleteDataSeries(
93 : : const OUString & rCID,
94 : : const Reference< frame::XModel > & xModel,
95 : : const Reference< document::XUndoManager > & xUndoManager )
96 : : {
97 : 0 : bool bResult = false;
98 [ # # ]: 0 : uno::Reference< chart2::XDataSeries > xSeries( ::chart::ObjectIdentifier::getDataSeriesForCID( rCID, xModel ));
99 [ # # ]: 0 : uno::Reference< chart2::XChartDocument > xChartDoc( xModel, uno::UNO_QUERY );
100 [ # # ][ # # ]: 0 : if( xSeries.is() && xChartDoc.is())
[ # # ]
101 : : {
102 : : uno::Reference< chart2::XChartType > xChartType(
103 [ # # ][ # # ]: 0 : ::chart::DataSeriesHelper::getChartTypeOfSeries( xSeries, xChartDoc->getFirstDiagram()));
[ # # ]
104 [ # # ]: 0 : if( xChartType.is())
105 : : {
106 : : ::chart::UndoGuard aUndoGuard(
107 : : ActionDescriptionProvider::createDescription(
108 : : ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_DATASERIES ))),
109 [ # # ][ # # ]: 0 : xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
110 : :
111 [ # # ]: 0 : Reference< chart2::XDiagram > xDiagram( ::chart::ChartModelHelper::findDiagram( xModel ) );
112 [ # # ]: 0 : uno::Reference< chart2::XAxis > xAxis( ::chart::DiagramHelper::getAttachedAxis( xSeries, xDiagram ) );
113 : :
114 [ # # ]: 0 : ::chart::DataSeriesHelper::deleteSeries( xSeries, xChartType );
115 : :
116 [ # # ]: 0 : ::chart::AxisHelper::hideAxisIfNoDataIsAttached( xAxis, xDiagram );
117 : :
118 : 0 : bResult = true;
119 [ # # ][ # # ]: 0 : aUndoGuard.commit();
120 : 0 : }
121 : : }
122 : 0 : return bResult;
123 : : }
124 : :
125 : 0 : bool lcl_deleteDataCurve(
126 : : const OUString & rCID,
127 : : const Reference< frame::XModel > & xModel,
128 : : const Reference< document::XUndoManager > & xUndoManager )
129 : : {
130 : 0 : bool bResult = false;
131 : : uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
132 : : ::chart::ObjectIdentifier::getObjectPropertySet(
133 [ # # ][ # # ]: 0 : ::chart::ObjectIdentifier::getSeriesParticleFromCID( rCID ), xModel ), uno::UNO_QUERY );
[ # # ]
134 [ # # ]: 0 : if( xRegCurveCnt.is())
135 : : {
136 : : ::chart::UndoGuard aUndoGuard(
137 : : ActionDescriptionProvider::createDescription(
138 : : ActionDescriptionProvider::DELETE, String( ::chart::SchResId( STR_OBJECT_CURVE ))),
139 [ # # ][ # # ]: 0 : xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
140 [ # # ]: 0 : ::chart::RegressionCurveHelper::removeAllExceptMeanValueLine( xRegCurveCnt );
141 : 0 : bResult = true;
142 [ # # ][ # # ]: 0 : aUndoGuard.commit();
143 : : }
144 : 0 : return bResult;
145 : : }
146 : :
147 : : } // anonymous namespace
148 : :
149 : :
150 : : namespace chart
151 : : {
152 : :
153 : : SAL_WNODEPRECATED_DECLARATIONS_PUSH
154 : 0 : ::std::auto_ptr< ReferenceSizeProvider > ChartController::impl_createReferenceSizeProvider()
155 : : {
156 [ # # ][ # # ]: 0 : awt::Size aPageSize( ChartModelHelper::getPageSize( getModel() ) );
157 : :
158 : : return ::std::auto_ptr< ReferenceSizeProvider >(
159 : : new ReferenceSizeProvider( aPageSize,
160 [ # # ][ # # ]: 0 : Reference< chart2::XChartDocument >( getModel(), uno::UNO_QUERY )));
[ # # ][ # # ]
[ # # ]
161 : : }
162 : : SAL_WNODEPRECATED_DECLARATIONS_POP
163 : :
164 : 0 : void ChartController::impl_adaptDataSeriesAutoResize()
165 : : {
166 : : SAL_WNODEPRECATED_DECLARATIONS_PUSH
167 : : ::std::auto_ptr< ReferenceSizeProvider > apRefSizeProvider(
168 [ # # ][ # # ]: 0 : impl_createReferenceSizeProvider());
169 : : SAL_WNODEPRECATED_DECLARATIONS_POP
170 [ # # ]: 0 : if( apRefSizeProvider.get())
171 [ # # ][ # # ]: 0 : apRefSizeProvider->setValuesAtAllDataSeries();
172 : 0 : }
173 : :
174 : 0 : void ChartController::executeDispatch_NewArrangement()
175 : : {
176 : : // remove manual positions at titles, legend and the diagram, remove manual
177 : : // size at the diagram
178 : :
179 : : try
180 : : {
181 [ # # ]: 0 : Reference< frame::XModel > xModel( getModel() );
182 [ # # ]: 0 : Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( xModel ));
183 [ # # ]: 0 : if( xDiagram.is())
184 : : {
185 : : // using assignment for broken gcc 3.3
186 : : UndoGuard aUndoGuard = UndoGuard(
187 : : String( SchResId( STR_ACTION_REARRANGE_CHART )),
188 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ]
189 [ # # ]: 0 : ControllerLockGuard aCtlLockGuard( xModel );
190 : :
191 : : // diagram
192 [ # # ]: 0 : Reference< beans::XPropertyState > xState( xDiagram, uno::UNO_QUERY_THROW );
193 [ # # ][ # # ]: 0 : xState->setPropertyToDefault( C2U("RelativeSize"));
[ # # ]
194 [ # # ][ # # ]: 0 : xState->setPropertyToDefault( C2U("RelativePosition"));
[ # # ]
195 [ # # ][ # # ]: 0 : xState->setPropertyToDefault( C2U("PosSizeExcludeAxes"));
[ # # ]
196 : :
197 : : // 3d rotation
198 [ # # ][ # # ]: 0 : ThreeDHelper::set3DSettingsToDefault( uno::Reference< beans::XPropertySet >( xDiagram, uno::UNO_QUERY ) );
199 : :
200 : : // legend
201 [ # # ][ # # ]: 0 : Reference< beans::XPropertyState > xLegendState( xDiagram->getLegend(), uno::UNO_QUERY );
[ # # ]
202 [ # # ]: 0 : if( xLegendState.is())
203 : : {
204 [ # # ][ # # ]: 0 : xLegendState->setPropertyToDefault( C2U("RelativePosition"));
[ # # ]
205 [ # # ][ # # ]: 0 : xLegendState->setPropertyToDefault( C2U("RelativeSize"));
[ # # ]
206 [ # # ][ # # ]: 0 : xLegendState->setPropertyToDefault( C2U("AnchorPosition"));
[ # # ]
207 : : }
208 : :
209 : : // titles
210 [ # # ]: 0 : for( sal_Int32 eType = TitleHelper::TITLE_BEGIN;
211 : : eType < TitleHelper::NORMAL_TITLE_END;
212 : : ++eType )
213 : : {
214 : : Reference< beans::XPropertyState > xTitleState(
215 : : TitleHelper::getTitle(
216 [ # # ][ # # ]: 0 : static_cast< TitleHelper::eTitleType >( eType ), xModel ), uno::UNO_QUERY );
217 [ # # ]: 0 : if( xTitleState.is())
218 [ # # ][ # # ]: 0 : xTitleState->setPropertyToDefault( C2U("RelativePosition"));
[ # # ]
219 : 0 : }
220 : :
221 : : // regression curve equations
222 : : ::std::vector< Reference< chart2::XRegressionCurve > > aRegressionCurves(
223 [ # # ]: 0 : RegressionCurveHelper::getAllRegressionCurvesNotMeanValueLine( xDiagram ));
224 : : ::std::for_each( aRegressionCurves.begin(), aRegressionCurves.end(),
225 [ # # ]: 0 : RegressionCurveHelper::resetEquationPosition );
226 : :
227 [ # # ][ # # ]: 0 : aUndoGuard.commit();
[ # # ]
228 [ # # ]: 0 : }
229 : : }
230 : 0 : catch( const uno::RuntimeException & ex )
231 : : {
232 : : ASSERT_EXCEPTION( ex );
233 : : }
234 : 0 : }
235 : :
236 : 0 : void ChartController::executeDispatch_ScaleText()
237 : : {
238 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
239 : : // using assignment for broken gcc 3.3
240 : : UndoGuard aUndoGuard = UndoGuard(
241 : : String( SchResId( STR_ACTION_SCALE_TEXT )),
242 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ]
243 [ # # ][ # # ]: 0 : ControllerLockGuard aCtlLockGuard( getModel() );
244 : : SAL_WNODEPRECATED_DECLARATIONS_PUSH
245 [ # # ][ # # ]: 0 : ::std::auto_ptr< ReferenceSizeProvider > apRefSizeProv( impl_createReferenceSizeProvider());
246 : : SAL_WNODEPRECATED_DECLARATIONS_POP
247 : : OSL_ASSERT( apRefSizeProv.get());
248 [ # # ]: 0 : if( apRefSizeProv.get())
249 [ # # ]: 0 : apRefSizeProv->toggleAutoResizeState();
250 [ # # ][ # # ]: 0 : aUndoGuard.commit();
[ # # ][ # # ]
[ # # ]
251 : 0 : }
252 : :
253 : 0 : void ChartController::executeDispatch_Paste()
254 : : {
255 [ # # ]: 0 : SolarMutexGuard aGuard;
256 [ # # ]: 0 : if( m_pChartWindow )
257 : : {
258 [ # # ]: 0 : Graphic aGraphic;
259 : : // paste location: center of window
260 : 0 : Point aPos;
261 [ # # ][ # # ]: 0 : aPos = m_pChartWindow->PixelToLogic( Rectangle( aPos, m_pChartWindow->GetSizePixel()).Center());
[ # # ][ # # ]
262 : :
263 : : // handle different formats
264 [ # # ]: 0 : TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( m_pChartWindow ));
265 [ # # ]: 0 : if( aDataHelper.GetTransferable().is())
266 : : {
267 [ # # ][ # # ]: 0 : if ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_DRAWING ) )
268 : : {
269 : 0 : SotStorageStreamRef xStm;
270 [ # # ][ # # ]: 0 : if ( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_DRAWING, xStm ) )
271 : : {
272 [ # # ]: 0 : xStm->Seek( 0 );
273 [ # # ][ # # ]: 0 : Reference< io::XInputStream > xInputStream( new utl::OInputStreamWrapper( *xStm ) );
[ # # ]
274 [ # # ][ # # ]: 0 : ::boost::scoped_ptr< SdrModel > spModel( new SdrModel() );
275 [ # # ][ # # ]: 0 : if ( SvxDrawingLayerImport( spModel.get(), xInputStream ) )
276 : : {
277 [ # # ]: 0 : impl_PasteShapes( spModel.get() );
278 [ # # ]: 0 : }
279 [ # # ]: 0 : }
280 : : }
281 [ # # ][ # # ]: 0 : else if ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_SVXB ) )
282 : : {
283 : : // graphic exchange format (graphic manager bitmap format?)
284 : 0 : SotStorageStreamRef xStm;
285 [ # # ][ # # ]: 0 : if( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_SVXB, xStm ))
286 [ # # ][ # # ]: 0 : (*xStm) >> aGraphic;
287 : : }
288 [ # # ][ # # ]: 0 : else if( aDataHelper.HasFormat( FORMAT_GDIMETAFILE ))
289 : : {
290 : : // meta file
291 [ # # ]: 0 : GDIMetaFile aMetafile;
292 [ # # ][ # # ]: 0 : if( aDataHelper.GetGDIMetaFile( FORMAT_GDIMETAFILE, aMetafile ))
293 [ # # ][ # # ]: 0 : aGraphic = Graphic( aMetafile );
[ # # ][ # # ]
294 : : }
295 [ # # ][ # # ]: 0 : else if( aDataHelper.HasFormat( FORMAT_BITMAP ))
296 : : {
297 : : // bitmap (non-graphic-manager)
298 [ # # ]: 0 : Bitmap aBmp;
299 [ # # ][ # # ]: 0 : if( aDataHelper.GetBitmap( FORMAT_BITMAP, aBmp ))
300 [ # # ][ # # ]: 0 : aGraphic = Graphic( aBmp );
[ # # ][ # # ]
301 : : }
302 [ # # ][ # # ]: 0 : else if( aDataHelper.HasFormat( FORMAT_STRING ))
303 : : {
304 : 0 : OUString aString;
305 [ # # ][ # # ]: 0 : if( aDataHelper.GetString( FORMAT_STRING, aString ) && m_pDrawModelWrapper )
[ # # ][ # # ]
306 : : {
307 [ # # ]: 0 : if( m_pDrawViewWrapper )
308 : : {
309 : 0 : OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView();
310 [ # # ]: 0 : if( pOutlinerView )//in case of edit mode insert into edited string
311 [ # # ][ # # ]: 0 : pOutlinerView->InsertText( aString );
[ # # ]
312 : : else
313 : : {
314 [ # # ]: 0 : impl_PasteStringAsTextShape( aString, awt::Point( 0, 0 ) );
315 : : }
316 : : }
317 : 0 : }
318 : : }
319 : : }
320 : :
321 [ # # ][ # # ]: 0 : if( aGraphic.GetType() != GRAPHIC_NONE )
322 : : {
323 [ # # ]: 0 : Reference< graphic::XGraphic > xGraphic( aGraphic.GetXGraphic());
324 [ # # ]: 0 : if( xGraphic.is())
325 [ # # ]: 0 : impl_PasteGraphic( xGraphic, aPos );
326 [ # # ][ # # ]: 0 : }
327 [ # # ]: 0 : }
328 : 0 : }
329 : :
330 : : // note: aPosition is ignored for now. The object is always pasted centered to
331 : : // the page
332 : 0 : void ChartController::impl_PasteGraphic(
333 : : uno::Reference< graphic::XGraphic > & xGraphic,
334 : : const ::Point & /* aPosition */ )
335 : : {
336 : : // note: the XPropertySet of the model is the old API. Also the property
337 : : // "AdditionalShapes" that is used there.
338 [ # # ][ # # ]: 0 : uno::Reference< beans::XPropertySet > xModelProp( getModel(), uno::UNO_QUERY );
339 [ # # ]: 0 : DrawModelWrapper * pDrawModelWrapper( this->GetDrawModelWrapper());
340 [ # # ][ # # ]: 0 : if( ! (xGraphic.is() && xModelProp.is()))
[ # # ]
341 : 0 : return;
342 [ # # ]: 0 : uno::Reference< lang::XMultiServiceFactory > xFact( pDrawModelWrapper->getShapeFactory());
343 : : uno::Reference< drawing::XShape > xGraphicShape(
344 [ # # ][ # # ]: 0 : xFact->createInstance( C2U( "com.sun.star.drawing.GraphicObjectShape" )), uno::UNO_QUERY );
[ # # ][ # # ]
345 [ # # ]: 0 : uno::Reference< beans::XPropertySet > xGraphicShapeProp( xGraphicShape, uno::UNO_QUERY );
346 [ # # ][ # # ]: 0 : if( xGraphicShapeProp.is() && xGraphicShape.is())
[ # # ]
347 : : {
348 [ # # ][ # # ]: 0 : uno::Reference< drawing::XShapes > xPage( pDrawModelWrapper->getMainDrawPage(), uno::UNO_QUERY );
349 [ # # ]: 0 : if( xPage.is())
350 : : {
351 [ # # ][ # # ]: 0 : xPage->add( xGraphicShape );
352 : : //need to change the model state manually
353 : : {
354 [ # # ][ # # ]: 0 : uno::Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY );
355 [ # # ]: 0 : if( xModifiable.is() )
356 [ # # ][ # # ]: 0 : xModifiable->setModified( true );
357 : : }
358 : : //select new shape
359 [ # # ]: 0 : m_aSelection.setSelection( xGraphicShape );
360 [ # # ]: 0 : m_aSelection.applySelection( m_pDrawViewWrapper );
361 : : }
362 [ # # ][ # # ]: 0 : xGraphicShapeProp->setPropertyValue( C2U("Graphic"), uno::makeAny( xGraphic ));
[ # # ][ # # ]
363 [ # # ]: 0 : uno::Reference< beans::XPropertySet > xGraphicProp( xGraphic, uno::UNO_QUERY );
364 : :
365 : 0 : awt::Size aGraphicSize( 1000, 1000 );
366 : : // first try size in 100th mm, then pixel size
367 [ # # ][ # # ]: 0 : if( ! ( xGraphicProp->getPropertyValue( C2U("Size100thMM")) >>= aGraphicSize ) &&
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ][ # # ]
[ # # # #
# # ][ # # ]
368 [ # # ][ # # ]: 0 : ( ( xGraphicProp->getPropertyValue( C2U("SizePixel")) >>= aGraphicSize ) && m_pChartWindow ))
[ # # ][ # # ]
[ # # ][ # # ]
[ # # # # ]
369 : : {
370 [ # # ]: 0 : ::Size aVCLSize( m_pChartWindow->PixelToLogic( Size( aGraphicSize.Width, aGraphicSize.Height )));
371 : 0 : aGraphicSize.Width = aVCLSize.getWidth();
372 : 0 : aGraphicSize.Height = aVCLSize.getHeight();
373 : : }
374 [ # # ][ # # ]: 0 : xGraphicShape->setSize( aGraphicSize );
375 [ # # ][ # # ]: 0 : xGraphicShape->setPosition( awt::Point( 0, 0 ) );
376 [ # # ]: 0 : }
377 : : }
378 : :
379 : 0 : void ChartController::impl_PasteShapes( SdrModel* pModel )
380 : : {
381 : 0 : DrawModelWrapper* pDrawModelWrapper( this->GetDrawModelWrapper() );
382 [ # # ][ # # ]: 0 : if ( pDrawModelWrapper && m_pDrawViewWrapper )
383 : : {
384 [ # # ]: 0 : Reference< drawing::XDrawPage > xDestPage( pDrawModelWrapper->getMainDrawPage() );
385 : 0 : SdrPage* pDestPage = GetSdrPageFromXDrawPage( xDestPage );
386 [ # # ]: 0 : if ( pDestPage )
387 : : {
388 : 0 : Reference< drawing::XShape > xSelShape;
389 [ # # ][ # # ]: 0 : m_pDrawViewWrapper->BegUndo( SVX_RESSTR( RID_SVX_3D_UNDO_EXCHANGE_PASTE ) );
[ # # ][ # # ]
[ # # ]
390 [ # # ]: 0 : sal_uInt16 nCount = pModel->GetPageCount();
391 [ # # ]: 0 : for ( sal_uInt16 i = 0; i < nCount; ++i )
392 : : {
393 [ # # ]: 0 : const SdrPage* pPage = pModel->GetPage( i );
394 [ # # ]: 0 : SdrObjListIter aIter( *pPage, IM_DEEPNOGROUPS );
395 [ # # ]: 0 : while ( aIter.IsMore() )
396 : : {
397 [ # # ]: 0 : SdrObject* pObj = aIter.Next();
398 [ # # ][ # # ]: 0 : SdrObject* pNewObj = ( pObj ? pObj->Clone() : NULL );
399 [ # # ]: 0 : if ( pNewObj )
400 : : {
401 [ # # ][ # # ]: 0 : pNewObj->SetModel( &pDrawModelWrapper->getSdrModel() );
402 [ # # ]: 0 : pNewObj->SetPage( pDestPage );
403 : :
404 : : // set position
405 [ # # ][ # # ]: 0 : Reference< drawing::XShape > xShape( pNewObj->getUnoShape(), uno::UNO_QUERY );
406 [ # # ]: 0 : if ( xShape.is() )
407 : : {
408 [ # # ][ # # ]: 0 : xShape->setPosition( awt::Point( 0, 0 ) );
409 : : }
410 : :
411 [ # # ]: 0 : pDestPage->InsertObject( pNewObj );
412 [ # # ][ # # ]: 0 : m_pDrawViewWrapper->AddUndo( new SdrUndoInsertObj( *pNewObj ) );
[ # # ]
413 [ # # ]: 0 : xSelShape = xShape;
414 : : }
415 : : }
416 : 0 : }
417 : :
418 [ # # ][ # # ]: 0 : Reference< util::XModifiable > xModifiable( getModel(), uno::UNO_QUERY );
419 [ # # ]: 0 : if ( xModifiable.is() )
420 : : {
421 [ # # ][ # # ]: 0 : xModifiable->setModified( true );
422 : : }
423 : :
424 : : // select last inserted shape
425 [ # # ]: 0 : m_aSelection.setSelection( xSelShape );
426 [ # # ]: 0 : m_aSelection.applySelection( m_pDrawViewWrapper );
427 : :
428 [ # # ]: 0 : m_pDrawViewWrapper->EndUndo();
429 : :
430 [ # # ]: 0 : impl_switchDiagramPositioningToExcludingPositioning();
431 : 0 : }
432 : : }
433 : 0 : }
434 : :
435 : 0 : void ChartController::impl_PasteStringAsTextShape( const OUString& rString, const awt::Point& rPosition )
436 : : {
437 : 0 : DrawModelWrapper* pDrawModelWrapper( this->GetDrawModelWrapper() );
438 [ # # ][ # # ]: 0 : if ( pDrawModelWrapper && m_pDrawViewWrapper )
439 : : {
440 : 0 : const Reference< lang::XMultiServiceFactory >& xShapeFactory( pDrawModelWrapper->getShapeFactory() );
441 [ # # ]: 0 : const Reference< drawing::XDrawPage >& xDrawPage( pDrawModelWrapper->getMainDrawPage() );
442 : : OSL_ASSERT( xShapeFactory.is() && xDrawPage.is() );
443 : :
444 [ # # ][ # # ]: 0 : if ( xShapeFactory.is() && xDrawPage.is() )
[ # # ]
445 : : {
446 : : try
447 : : {
448 : : Reference< drawing::XShape > xTextShape(
449 [ # # ][ # # ]: 0 : xShapeFactory->createInstance( C2U( "com.sun.star.drawing.TextShape" ) ), uno::UNO_QUERY_THROW );
[ # # ][ # # ]
450 [ # # ][ # # ]: 0 : xDrawPage->add( xTextShape );
451 : :
452 [ # # ]: 0 : Reference< text::XTextRange > xRange( xTextShape, uno::UNO_QUERY_THROW );
453 [ # # ][ # # ]: 0 : xRange->setString( rString );
454 : :
455 : 0 : float fCharHeight = 10.0;
456 [ # # ]: 0 : Reference< beans::XPropertySet > xProperties( xTextShape, uno::UNO_QUERY_THROW );
457 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "TextAutoGrowHeight" ), uno::makeAny( true ) );
[ # # ][ # # ]
458 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "TextAutoGrowWidth" ), uno::makeAny( true ) );
[ # # ][ # # ]
459 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "CharHeight" ), uno::makeAny( fCharHeight ) );
[ # # ][ # # ]
460 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "CharHeightAsian" ), uno::makeAny( fCharHeight ) );
[ # # ][ # # ]
461 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "CharHeightComplex" ), uno::makeAny( fCharHeight ) );
[ # # ][ # # ]
462 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "TextVerticalAdjust" ), uno::makeAny( drawing::TextVerticalAdjust_CENTER ) );
[ # # ][ # # ]
463 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "TextHorizontalAdjust" ), uno::makeAny( drawing::TextHorizontalAdjust_CENTER ) );
[ # # ][ # # ]
464 [ # # ][ # # ]: 0 : xProperties->setPropertyValue( C2U( "CharFontName" ), uno::makeAny( C2U( "Albany" ) ) );
[ # # ][ # # ]
[ # # ]
465 : :
466 [ # # ][ # # ]: 0 : xTextShape->setPosition( rPosition );
467 : :
468 [ # # ]: 0 : m_aSelection.setSelection( xTextShape );
469 [ # # ]: 0 : m_aSelection.applySelection( m_pDrawViewWrapper );
470 : :
471 [ # # ]: 0 : SdrObject* pObj = DrawViewWrapper::getSdrObject( xTextShape );
472 [ # # ]: 0 : if ( pObj )
473 : : {
474 [ # # ][ # # ]: 0 : m_pDrawViewWrapper->BegUndo( SVX_RESSTR( RID_SVX_3D_UNDO_EXCHANGE_PASTE ) );
[ # # ][ # # ]
[ # # ]
475 [ # # ][ # # ]: 0 : m_pDrawViewWrapper->AddUndo( new SdrUndoInsertObj( *pObj ) );
[ # # ]
476 [ # # ]: 0 : m_pDrawViewWrapper->EndUndo();
477 : :
478 [ # # ]: 0 : impl_switchDiagramPositioningToExcludingPositioning();
479 [ # # ]: 0 : }
480 : : }
481 [ # # ]: 0 : catch ( const uno::Exception& ex )
482 : : {
483 : : ASSERT_EXCEPTION( ex );
484 : : }
485 : 0 : }
486 : : }
487 : 0 : }
488 : :
489 : 0 : void ChartController::executeDispatch_Copy()
490 : : {
491 [ # # ]: 0 : if ( m_pDrawViewWrapper )
492 : : {
493 : 0 : OutlinerView* pOutlinerView = m_pDrawViewWrapper->GetTextEditOutlinerView();
494 [ # # ]: 0 : if ( pOutlinerView )
495 : : {
496 : 0 : pOutlinerView->Copy();
497 : : }
498 : : else
499 : : {
500 : 0 : Reference< datatransfer::XTransferable > xTransferable;
501 : : {
502 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
503 : 0 : SdrObject* pSelectedObj = 0;
504 [ # # ]: 0 : if ( m_pDrawModelWrapper )
505 : : {
506 [ # # ]: 0 : ObjectIdentifier aSelOID( m_aSelection.getSelectedOID() );
507 [ # # ][ # # ]: 0 : if ( aSelOID.isAutoGeneratedObject() )
508 : : {
509 [ # # ][ # # ]: 0 : pSelectedObj = m_pDrawModelWrapper->getNamedSdrObject( aSelOID.getObjectCID() );
510 : : }
511 [ # # ][ # # ]: 0 : else if ( aSelOID.isAdditionalShape() )
512 : : {
513 [ # # ][ # # ]: 0 : pSelectedObj = DrawViewWrapper::getSdrObject( aSelOID.getAdditionalShape() );
514 : : }
515 [ # # ]: 0 : if ( pSelectedObj )
516 : : {
517 : : xTransferable = Reference< datatransfer::XTransferable >( new ChartTransferable(
518 [ # # ][ # # ]: 0 : &m_pDrawModelWrapper->getSdrModel(), pSelectedObj, aSelOID.isAdditionalShape() ) );
[ # # ][ # # ]
[ # # ][ # # ]
519 [ # # ]: 0 : }
520 [ # # ]: 0 : }
521 : : }
522 [ # # ]: 0 : if ( xTransferable.is() )
523 : : {
524 [ # # ]: 0 : Reference< datatransfer::clipboard::XClipboard > xClipboard( TransferableHelper::GetSystemClipboard() );
525 [ # # ]: 0 : if ( xClipboard.is() )
526 : : {
527 [ # # ][ # # ]: 0 : xClipboard->setContents( xTransferable, Reference< datatransfer::clipboard::XClipboardOwner >() );
528 : 0 : }
529 : 0 : }
530 : : }
531 : : }
532 : 0 : }
533 : :
534 : 0 : void ChartController::executeDispatch_Cut()
535 : : {
536 : 0 : executeDispatch_Copy();
537 : 0 : executeDispatch_Delete();
538 : 0 : }
539 : :
540 : 2361 : bool ChartController::isObjectDeleteable( const uno::Any& rSelection )
541 : : {
542 [ + - ]: 2361 : ObjectIdentifier aSelOID( rSelection );
543 [ + - ][ + + ]: 2361 : if ( aSelOID.isAutoGeneratedObject() )
544 : : {
545 [ + - ]: 2327 : OUString aSelObjCID( aSelOID.getObjectCID() );
546 [ + - ]: 2327 : ObjectType aObjectType(ObjectIdentifier::getObjectType( aSelObjCID ));
547 : :
548 [ - + ]: 2327 : switch(aObjectType)
549 : : {
550 : : case OBJECTTYPE_TITLE:
551 : : case OBJECTTYPE_LEGEND:
552 : : case OBJECTTYPE_DATA_SERIES:
553 : : case OBJECTTYPE_LEGEND_ENTRY:
554 : : case OBJECTTYPE_DATA_CURVE_EQUATION:
555 : : case OBJECTTYPE_DATA_CURVE:
556 : : case OBJECTTYPE_DATA_AVERAGE_LINE:
557 : : case OBJECTTYPE_DATA_ERRORS_X:
558 : : case OBJECTTYPE_DATA_ERRORS_Y:
559 : : case OBJECTTYPE_DATA_ERRORS_Z:
560 : : case OBJECTTYPE_DATA_LABELS:
561 : : case OBJECTTYPE_DATA_LABEL:
562 : : case OBJECTTYPE_AXIS:
563 : : case OBJECTTYPE_GRID:
564 : : case OBJECTTYPE_SUBGRID:
565 : 0 : return true;
566 : : default:
567 : 2327 : break;
568 [ + - ]: 2327 : }
569 : : }
570 [ + - ][ - + ]: 34 : else if ( aSelOID.isAdditionalShape() )
571 : : {
572 : 0 : return true;
573 : : }
574 : :
575 [ + - ]: 2361 : return false;
576 : : }
577 : :
578 : 2361 : bool ChartController::isShapeContext() const
579 : : {
580 [ + - ][ + + : 6903 : if ( m_aSelection.isAdditionalShapeSelected() ||
+ + - + ]
[ - + ]
581 : 2293 : ( m_pDrawViewWrapper && m_pDrawViewWrapper->AreObjectsMarked() &&
582 : 2249 : ( m_pDrawViewWrapper->GetCurrentObjIdentifier() == OBJ_TEXT ) ) )
583 : : {
584 : 0 : return true;
585 : : }
586 : :
587 : 2361 : return false;
588 : : }
589 : :
590 : 0 : void ChartController::impl_ClearSelection()
591 : : {
592 [ # # ]: 0 : if( m_aSelection.hasSelection())
593 : : {
594 : 0 : m_aSelection.clearSelection();
595 : 0 : impl_notifySelectionChangeListeners();
596 : : }
597 : 0 : }
598 : :
599 : 0 : bool ChartController::executeDispatch_Delete()
600 : : {
601 : 0 : bool bReturn = false;
602 : :
603 : : // remove the selected object
604 [ # # ]: 0 : rtl::OUString aCID( m_aSelection.getSelectedCID() );
605 [ # # ]: 0 : if( !aCID.isEmpty() )
606 : : {
607 [ # # ][ # # ]: 0 : if( !isObjectDeleteable( uno::Any( aCID ) ) )
[ # # ]
608 : 0 : return false;
609 : :
610 : : //remove chart object
611 [ # # ][ # # ]: 0 : uno::Reference< chart2::XChartDocument > xChartDoc( getModel(), uno::UNO_QUERY );
612 [ # # ]: 0 : if( !xChartDoc.is() )
613 : 0 : return false;
614 : :
615 [ # # ]: 0 : ObjectType aObjectType( ObjectIdentifier::getObjectType( aCID ));
616 [ # # # # : 0 : switch( aObjectType )
# # # # #
# # # # ]
617 : : {
618 : : case OBJECTTYPE_TITLE:
619 : : {
620 : : // using assignment for broken gcc 3.3
621 : : UndoGuard aUndoGuard = UndoGuard(
622 : : ActionDescriptionProvider::createDescription(
623 : : ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_TITLE ))),
624 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
625 : : TitleHelper::removeTitle(
626 [ # # ][ # # ]: 0 : ObjectIdentifier::getTitleTypeForCID( aCID ), getModel() );
[ # # ]
627 : 0 : bReturn = true;
628 [ # # ]: 0 : aUndoGuard.commit();
629 [ # # ]: 0 : break;
630 : : }
631 : : case OBJECTTYPE_LEGEND:
632 : : {
633 [ # # ][ # # ]: 0 : uno::Reference< chart2::XDiagram > xDiagram( xChartDoc->getFirstDiagram());
634 [ # # ]: 0 : if( xDiagram.is())
635 : : {
636 [ # # ][ # # ]: 0 : uno::Reference< beans::XPropertySet > xLegendProp( xDiagram->getLegend(), uno::UNO_QUERY );
[ # # ]
637 [ # # ]: 0 : if( xLegendProp.is())
638 : : {
639 : : // using assignment for broken gcc 3.3
640 : : UndoGuard aUndoGuard = UndoGuard(
641 : : ActionDescriptionProvider::createDescription(
642 : : ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_LEGEND ))),
643 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
644 [ # # ][ # # ]: 0 : xLegendProp->setPropertyValue( C2U("Show"), uno::makeAny( false ));
[ # # ][ # # ]
645 : 0 : bReturn = true;
646 [ # # ][ # # ]: 0 : aUndoGuard.commit();
647 : 0 : }
648 : : }
649 : 0 : break;
650 : : }
651 : :
652 : : case OBJECTTYPE_DATA_SERIES:
653 [ # # ][ # # ]: 0 : bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager );
654 : 0 : break;
655 : :
656 : : case OBJECTTYPE_LEGEND_ENTRY:
657 : : {
658 : : ObjectType eParentObjectType = ObjectIdentifier::getObjectType(
659 [ # # ][ # # ]: 0 : ObjectIdentifier::getFullParentParticle( aCID ));
660 [ # # ]: 0 : if( eParentObjectType == OBJECTTYPE_DATA_SERIES )
661 [ # # ][ # # ]: 0 : bReturn = lcl_deleteDataSeries( aCID, getModel(), m_xUndoManager );
662 [ # # ]: 0 : else if( eParentObjectType == OBJECTTYPE_DATA_CURVE )
663 [ # # ][ # # ]: 0 : bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager );
664 [ # # ]: 0 : else if( eParentObjectType == OBJECTTYPE_DATA_AVERAGE_LINE )
665 : : {
666 [ # # ]: 0 : executeDispatch_DeleteMeanValue();
667 : 0 : bReturn = true;
668 : : }
669 : 0 : break;
670 : : }
671 : :
672 : : case OBJECTTYPE_DATA_AVERAGE_LINE:
673 : : {
674 : : uno::Reference< chart2::XRegressionCurveContainer > xRegCurveCnt(
675 : : ObjectIdentifier::getObjectPropertySet(
676 [ # # ][ # # ]: 0 : ObjectIdentifier::getFullParentParticle( aCID ), getModel()), uno::UNO_QUERY );
[ # # ][ # # ]
677 [ # # ]: 0 : if( xRegCurveCnt.is())
678 : : {
679 : : // using assignment for broken gcc 3.3
680 : : UndoGuard aUndoGuard = UndoGuard(
681 : : ActionDescriptionProvider::createDescription(
682 : : ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_AVERAGE_LINE ))),
683 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
684 [ # # ]: 0 : RegressionCurveHelper::removeMeanValueLine( xRegCurveCnt );
685 : 0 : bReturn = true;
686 [ # # ][ # # ]: 0 : aUndoGuard.commit();
687 : : }
688 : 0 : break;
689 : : }
690 : :
691 : : case OBJECTTYPE_DATA_CURVE:
692 [ # # ][ # # ]: 0 : bReturn = lcl_deleteDataCurve( aCID, getModel(), m_xUndoManager );
693 : 0 : break;
694 : :
695 : : case OBJECTTYPE_DATA_CURVE_EQUATION:
696 : : {
697 : : uno::Reference< beans::XPropertySet > xEqProp(
698 [ # # ][ # # ]: 0 : ObjectIdentifier::getObjectPropertySet( aCID, getModel()));
699 [ # # ]: 0 : if( xEqProp.is())
700 : : {
701 [ # # ]: 0 : uno::Reference< frame::XModel > xModel( getModel() );
702 : : // using assignment for broken gcc 3.3
703 : : UndoGuard aUndoGuard = UndoGuard(
704 : : ActionDescriptionProvider::createDescription(
705 : : ActionDescriptionProvider::DELETE, String( SchResId( STR_OBJECT_CURVE_EQUATION ))),
706 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
707 : : {
708 [ # # ]: 0 : ControllerLockGuard aCtlLockGuard( xModel );
709 [ # # ][ # # ]: 0 : xEqProp->setPropertyValue( C2U("ShowEquation"), uno::makeAny( false ));
[ # # ][ # # ]
710 [ # # ][ # # ]: 0 : xEqProp->setPropertyValue( C2U("ShowCorrelationCoefficient"), uno::makeAny( false ));
[ # # ][ # # ]
[ # # ]
711 : : }
712 : 0 : bReturn = true;
713 [ # # ][ # # ]: 0 : aUndoGuard.commit();
714 : : }
715 : 0 : break;
716 : : }
717 : :
718 : : case OBJECTTYPE_DATA_ERRORS_X:
719 : : case OBJECTTYPE_DATA_ERRORS_Y:
720 : : case OBJECTTYPE_DATA_ERRORS_Z:
721 : : {
722 : : uno::Reference< beans::XPropertySet > xErrorBarProp(
723 [ # # ][ # # ]: 0 : ObjectIdentifier::getObjectPropertySet( aCID, getModel() ));
724 [ # # ]: 0 : if( xErrorBarProp.is())
725 : : {
726 : : sal_Int16 nId;
727 : :
728 [ # # ]: 0 : if ( aObjectType == OBJECTTYPE_DATA_ERRORS_X )
729 : 0 : nId = STR_OBJECT_ERROR_BARS_X;
730 [ # # ]: 0 : else if ( aObjectType == OBJECTTYPE_DATA_ERRORS_Y )
731 : 0 : nId = STR_OBJECT_ERROR_BARS_Y;
732 : : else
733 : 0 : nId = STR_OBJECT_ERROR_BARS_Z;
734 : :
735 [ # # ]: 0 : uno::Reference< frame::XModel > xModel( getModel() );
736 : : // using assignment for broken gcc 3.3
737 : : UndoGuard aUndoGuard = UndoGuard(
738 : : ActionDescriptionProvider::createDescription(
739 : : ActionDescriptionProvider::DELETE, String( SchResId( nId ))),
740 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
741 : : {
742 [ # # ]: 0 : ControllerLockGuard aCtlLockGuard( xModel );
743 [ # # ]: 0 : xErrorBarProp->setPropertyValue(
744 : : C2U("ErrorBarStyle"),
745 [ # # ][ # # ]: 0 : uno::makeAny( ::com::sun::star::chart::ErrorBarStyle::NONE ));
[ # # ][ # # ]
746 : : }
747 : 0 : bReturn = true;
748 [ # # ][ # # ]: 0 : aUndoGuard.commit();
749 : : }
750 : 0 : break;
751 : : }
752 : :
753 : : case OBJECTTYPE_DATA_LABELS:
754 : : case OBJECTTYPE_DATA_LABEL:
755 : : {
756 : : uno::Reference< beans::XPropertySet > xObjectProperties =
757 [ # # ][ # # ]: 0 : ObjectIdentifier::getObjectPropertySet( aCID, getModel() );
758 [ # # ]: 0 : if( xObjectProperties.is() )
759 : : {
760 : : UndoGuard aUndoGuard = UndoGuard(
761 : : ActionDescriptionProvider::createDescription(
762 : : ActionDescriptionProvider::DELETE, ::rtl::OUString( String(
763 : : SchResId( aObjectType == OBJECTTYPE_DATA_LABEL ? STR_OBJECT_LABEL : STR_OBJECT_DATALABELS )))),
764 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ][ # # ]
[ # # ][ # # ]
[ # # ]
765 : 0 : chart2::DataPointLabel aLabel;
766 [ # # ][ # # ]: 0 : xObjectProperties->getPropertyValue( C2U( "Label" ) ) >>= aLabel;
[ # # ][ # # ]
767 : 0 : aLabel.ShowNumber = false;
768 : 0 : aLabel.ShowNumberInPercent = false;
769 : 0 : aLabel.ShowCategoryName = false;
770 : 0 : aLabel.ShowLegendSymbol = false;
771 [ # # ]: 0 : if( aObjectType == OBJECTTYPE_DATA_LABELS )
772 : : {
773 [ # # ][ # # ]: 0 : uno::Reference< chart2::XDataSeries > xSeries( ObjectIdentifier::getDataSeriesForCID( aCID, getModel() ));
774 [ # # ][ # # ]: 0 : ::chart::DataSeriesHelper::setPropertyAlsoToAllAttributedDataPoints( xSeries, C2U( "Label" ), uno::makeAny(aLabel) );
[ # # ]
775 : : }
776 : : else
777 [ # # ][ # # ]: 0 : xObjectProperties->setPropertyValue( C2U( "Label" ), uno::makeAny(aLabel) );
[ # # ][ # # ]
778 : 0 : bReturn = true;
779 [ # # ][ # # ]: 0 : aUndoGuard.commit();
780 : : }
781 : 0 : break;
782 : : }
783 : : case OBJECTTYPE_AXIS:
784 : : {
785 [ # # ]: 0 : executeDispatch_DeleteAxis();
786 : 0 : bReturn = true;
787 : 0 : break;
788 : : }
789 : : case OBJECTTYPE_GRID:
790 : : {
791 [ # # ]: 0 : executeDispatch_DeleteMajorGrid();
792 : 0 : bReturn = true;
793 : 0 : break;
794 : : }
795 : : case OBJECTTYPE_SUBGRID:
796 : : {
797 [ # # ]: 0 : executeDispatch_DeleteMinorGrid();
798 : 0 : bReturn = true;
799 : 0 : break;
800 : : }
801 : :
802 : : default:
803 : : {
804 : 0 : break;
805 : : }
806 [ # # ]: 0 : }
807 : : }
808 : : else
809 : : {
810 : : //remove additional shape
811 [ # # ]: 0 : impl_ClearSelection();
812 : : {
813 [ # # ]: 0 : SolarMutexGuard aSolarGuard;
814 [ # # ]: 0 : if ( m_pDrawViewWrapper )
815 : : {
816 [ # # ]: 0 : m_pDrawViewWrapper->DeleteMarked();
817 : 0 : bReturn = true;
818 [ # # ]: 0 : }
819 : : }
820 : : }
821 : 0 : return bReturn;
822 : : }
823 : :
824 : 0 : void ChartController::executeDispatch_ToggleLegend()
825 : : {
826 [ # # ]: 0 : Reference< frame::XModel > xModel( getModel() );
827 : : UndoGuard aUndoGuard = UndoGuard(
828 [ # # ][ # # ]: 0 : String( SchResId( STR_ACTION_TOGGLE_LEGEND )), m_xUndoManager );
[ # # ][ # # ]
[ # # ]
829 [ # # ][ # # ]: 0 : Reference< beans::XPropertySet > xLegendProp( LegendHelper::getLegend( xModel ), uno::UNO_QUERY );
[ # # ]
830 : 0 : bool bChanged = false;
831 [ # # ]: 0 : if( xLegendProp.is())
832 : : {
833 : : try
834 : : {
835 : 0 : bool bShow = false;
836 [ # # ][ # # ]: 0 : if( xLegendProp->getPropertyValue( C2U("Show")) >>= bShow )
[ # # ][ # # ]
837 : : {
838 [ # # ][ # # ]: 0 : xLegendProp->setPropertyValue( C2U("Show"), uno::makeAny( ! bShow ));
[ # # ][ # # ]
[ # # ]
839 : 0 : bChanged = true;
840 : : }
841 : : }
842 [ # # ]: 0 : catch( const uno::Exception & ex )
843 : : {
844 : : ASSERT_EXCEPTION( ex );
845 : : }
846 : : }
847 : : else
848 : : {
849 [ # # ][ # # ]: 0 : xLegendProp.set( LegendHelper::getLegend( xModel, m_xCC, true ), uno::UNO_QUERY );
850 [ # # ]: 0 : if( xLegendProp.is())
851 : 0 : bChanged = true;
852 : : }
853 : :
854 [ # # ]: 0 : if( bChanged )
855 [ # # ][ # # ]: 0 : aUndoGuard.commit();
856 : 0 : }
857 : :
858 : 0 : void ChartController::executeDispatch_ToggleGridHorizontal()
859 : : {
860 [ # # ]: 0 : Reference< frame::XModel > xModel( getModel() );
861 : : UndoGuard aUndoGuard = UndoGuard(
862 [ # # ][ # # ]: 0 : String( SchResId( STR_ACTION_TOGGLE_GRID_HORZ )), m_xUndoManager );
[ # # ][ # # ]
[ # # ]
863 [ # # ][ # # ]: 0 : Reference< chart2::XDiagram > xDiagram( ChartModelHelper::findDiagram( getModel() ));
864 [ # # ]: 0 : if( xDiagram.is())
865 : : {
866 : 0 : sal_Int32 nDimensionIndex = 1;
867 : 0 : sal_Int32 nCooSysIndex = 0;
868 : 0 : bool bIsMainGrid = true;
869 : :
870 [ # # ]: 0 : bool bHasMainYGrid = AxisHelper::isGridShown( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram );
871 : :
872 [ # # ]: 0 : if( bHasMainYGrid )
873 [ # # ]: 0 : AxisHelper::hideGrid( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram );
874 : : else
875 [ # # ]: 0 : AxisHelper::showGrid( nDimensionIndex, nCooSysIndex, bIsMainGrid, xDiagram, m_xCC );
876 : :
877 [ # # ]: 0 : aUndoGuard.commit();
878 [ # # ]: 0 : }
879 : 0 : }
880 : :
881 : 0 : void ChartController::impl_ShapeControllerDispatch( const util::URL& rURL, const Sequence< beans::PropertyValue >& rArgs )
882 : : {
883 [ # # ][ # # ]: 0 : Reference< frame::XDispatch > xDispatch( m_aDispatchContainer.getShapeController() );
884 [ # # ]: 0 : if ( xDispatch.is() )
885 : : {
886 [ # # ][ # # ]: 0 : xDispatch->dispatch( rURL, rArgs );
887 : 0 : }
888 : 0 : }
889 : :
890 : 0 : void ChartController::impl_switchDiagramPositioningToExcludingPositioning()
891 : : {
892 : : UndoGuard aUndoGuard( ActionDescriptionProvider::createDescription(
893 : : ActionDescriptionProvider::POS_SIZE,
894 : : ObjectNameProvider::getName( OBJECTTYPE_DIAGRAM)),
895 [ # # ][ # # ]: 0 : m_xUndoManager );
[ # # ]
896 [ # # ][ # # ]: 0 : if( DiagramHelper::switchDiagramPositioningToExcludingPositioning( m_aModel->getModel(), true, true ) )
[ # # ]
897 [ # # ][ # # ]: 0 : aUndoGuard.commit();
898 : 0 : }
899 : :
900 : : } // namespace chart
901 : :
902 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|