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 "ShapeController.hxx"
22 : : #include "ShapeController.hrc"
23 : : #include "ChartController.hxx"
24 : : #include "ChartWindow.hxx"
25 : : #include "ViewElementListProvider.hxx"
26 : : #include "dlg_ShapeFont.hxx"
27 : : #include "dlg_ShapeParagraph.hxx"
28 : : #include "chartview/DrawModelWrapper.hxx"
29 : : #include "macros.hxx"
30 : :
31 : : #include <com/sun/star/frame/XStorable.hpp>
32 : :
33 : : #include <osl/mutex.hxx>
34 : : #include <vcl/msgbox.hxx>
35 : : #include <vcl/svapp.hxx>
36 : : #include <editeng/brkitem.hxx>
37 : : #include <svx/dialogs.hrc>
38 : : #include <svx/drawitem.hxx>
39 : : #include <editeng/eeitem.hxx>
40 : : #include <editeng/hyznitem.hxx>
41 : : #include <editeng/orphitem.hxx>
42 : : #include <editeng/spltitem.hxx>
43 : : #include <svx/svxdlg.hxx>
44 : : #include <editeng/widwitem.hxx>
45 : :
46 : : #include <boost/scoped_ptr.hpp>
47 : :
48 : : using namespace ::com::sun::star;
49 : : using namespace ::com::sun::star::frame;
50 : :
51 : : using ::com::sun::star::uno::Reference;
52 : : using ::com::sun::star::uno::Sequence;
53 : :
54 : : //.............................................................................
55 : : namespace chart
56 : : {
57 : : //.............................................................................
58 : :
59 : 34 : ShapeController::ShapeController( const Reference< uno::XComponentContext >& rxContext,
60 : : ChartController* pController )
61 : : :FeatureCommandDispatchBase( rxContext )
62 : 34 : ,m_pChartController( pController )
63 : : {
64 : 34 : }
65 : :
66 : 34 : ShapeController::~ShapeController()
67 : : {
68 [ - + ]: 68 : }
69 : :
70 : 34 : void ShapeController::initialize()
71 : : {
72 : 34 : FeatureCommandDispatchBase::initialize();
73 : 34 : }
74 : :
75 : : // WeakComponentImplHelperBase
76 : 34 : void ShapeController::disposing()
77 : : {
78 : 34 : }
79 : :
80 : : // XEventListener
81 : 0 : void ShapeController::disposing( const lang::EventObject& /* Source */ )
82 : : throw (uno::RuntimeException)
83 : : {
84 : 0 : }
85 : :
86 : 0 : FeatureState ShapeController::getState( const ::rtl::OUString& rCommand )
87 : : {
88 : 0 : FeatureState aReturn;
89 : 0 : aReturn.bEnabled = false;
90 [ # # ]: 0 : aReturn.aState <<= false;
91 : :
92 : 0 : bool bWritable = false;
93 [ # # ]: 0 : if ( m_pChartController )
94 : : {
95 [ # # ][ # # ]: 0 : Reference< frame::XStorable > xStorable( m_pChartController->getModel(), uno::UNO_QUERY );
96 [ # # ]: 0 : if ( xStorable.is() )
97 : : {
98 [ # # ][ # # ]: 0 : bWritable = !xStorable->isReadonly();
99 : 0 : }
100 : : }
101 : :
102 [ # # ]: 0 : SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand );
103 [ # # ]: 0 : if ( aIter != m_aSupportedFeatures.end() )
104 : : {
105 : 0 : sal_uInt16 nFeatureId = aIter->second.nFeatureId;
106 [ # # # # : 0 : switch ( nFeatureId )
# ]
107 : : {
108 : : case COMMAND_ID_FORMAT_LINE:
109 : : case COMMAND_ID_FORMAT_AREA:
110 : : case COMMAND_ID_TEXT_ATTRIBUTES:
111 : : case COMMAND_ID_TRANSFORM_DIALOG:
112 : : case COMMAND_ID_OBJECT_TITLE_DESCRIPTION:
113 : : case COMMAND_ID_RENAME_OBJECT:
114 : : {
115 : 0 : aReturn.bEnabled = bWritable;
116 [ # # ]: 0 : aReturn.aState <<= false;
117 : : }
118 : 0 : break;
119 : : case COMMAND_ID_BRING_TO_FRONT:
120 : : case COMMAND_ID_FORWARD:
121 : : {
122 [ # # ][ # # ]: 0 : aReturn.bEnabled = ( bWritable && isForwardPossible() );
[ # # ]
123 [ # # ]: 0 : aReturn.aState <<= false;
124 : : }
125 : 0 : break;
126 : : case COMMAND_ID_BACKWARD:
127 : : case COMMAND_ID_SEND_TO_BACK:
128 : : {
129 : :
130 [ # # ][ # # ]: 0 : aReturn.bEnabled = ( bWritable && isBackwardPossible() );
[ # # ]
131 [ # # ]: 0 : aReturn.aState <<= false;
132 : : }
133 : 0 : break;
134 : : case COMMAND_ID_FONT_DIALOG:
135 : : case COMMAND_ID_PARAGRAPH_DIALOG:
136 : : {
137 : 0 : aReturn.bEnabled = bWritable;
138 [ # # ]: 0 : aReturn.aState <<= false;
139 : : }
140 : 0 : break;
141 : : default:
142 : : {
143 : 0 : aReturn.bEnabled = false;
144 [ # # ]: 0 : aReturn.aState <<= false;
145 : : }
146 : 0 : break;
147 : : }
148 : : }
149 : :
150 : 0 : return aReturn;
151 : : }
152 : :
153 : 0 : void ShapeController::execute( const ::rtl::OUString& rCommand, const Sequence< beans::PropertyValue>& rArgs )
154 : : {
155 : : (void)rArgs;
156 : :
157 [ # # ]: 0 : SupportedFeatures::const_iterator aIter = m_aSupportedFeatures.find( rCommand );
158 [ # # ]: 0 : if ( aIter != m_aSupportedFeatures.end() )
159 : : {
160 : 0 : sal_uInt16 nFeatureId = aIter->second.nFeatureId;
161 [ # # # # : 0 : switch ( nFeatureId )
# # # # #
# ]
162 : : {
163 : : case COMMAND_ID_FORMAT_LINE:
164 : : {
165 [ # # ]: 0 : executeDispatch_FormatLine();
166 : : }
167 : 0 : break;
168 : : case COMMAND_ID_FORMAT_AREA:
169 : : {
170 [ # # ]: 0 : executeDispatch_FormatArea();
171 : : }
172 : 0 : break;
173 : : case COMMAND_ID_TEXT_ATTRIBUTES:
174 : : {
175 [ # # ]: 0 : executeDispatch_TextAttributes();
176 : : }
177 : 0 : break;
178 : : case COMMAND_ID_TRANSFORM_DIALOG:
179 : : {
180 [ # # ]: 0 : executeDispatch_TransformDialog();
181 : : }
182 : 0 : break;
183 : : case COMMAND_ID_OBJECT_TITLE_DESCRIPTION:
184 : : {
185 [ # # ]: 0 : executeDispatch_ObjectTitleDescription();
186 : : }
187 : 0 : break;
188 : : case COMMAND_ID_RENAME_OBJECT:
189 : : {
190 [ # # ]: 0 : executeDispatch_RenameObject();
191 : : }
192 : 0 : break;
193 : : case COMMAND_ID_BRING_TO_FRONT:
194 : : case COMMAND_ID_FORWARD:
195 : : case COMMAND_ID_BACKWARD:
196 : : case COMMAND_ID_SEND_TO_BACK:
197 : : {
198 [ # # ]: 0 : executeDispatch_ChangeZOrder( nFeatureId );
199 : : }
200 : 0 : break;
201 : : case COMMAND_ID_FONT_DIALOG:
202 : : {
203 [ # # ]: 0 : executeDispatch_FontDialog();
204 : : }
205 : 0 : break;
206 : : case COMMAND_ID_PARAGRAPH_DIALOG:
207 : : {
208 [ # # ]: 0 : executeDispatch_ParagraphDialog();
209 : : }
210 : 0 : break;
211 : : default:
212 : : {
213 : : }
214 : 0 : break;
215 : : }
216 : : }
217 : 0 : }
218 : :
219 : 34 : void ShapeController::describeSupportedFeatures()
220 : : {
221 : 34 : implDescribeSupportedFeature( ".uno:FormatLine", COMMAND_ID_FORMAT_LINE, CommandGroup::FORMAT );
222 : 34 : implDescribeSupportedFeature( ".uno:FormatArea", COMMAND_ID_FORMAT_AREA, CommandGroup::FORMAT );
223 : 34 : implDescribeSupportedFeature( ".uno:TextAttributes", COMMAND_ID_TEXT_ATTRIBUTES, CommandGroup::FORMAT );
224 : 34 : implDescribeSupportedFeature( ".uno:TransformDialog", COMMAND_ID_TRANSFORM_DIALOG, CommandGroup::FORMAT );
225 : 34 : implDescribeSupportedFeature( ".uno:ObjectTitleDescription", COMMAND_ID_OBJECT_TITLE_DESCRIPTION, CommandGroup::FORMAT );
226 : 34 : implDescribeSupportedFeature( ".uno:RenameObject", COMMAND_ID_RENAME_OBJECT, CommandGroup::FORMAT );
227 : 34 : implDescribeSupportedFeature( ".uno:BringToFront", COMMAND_ID_BRING_TO_FRONT, CommandGroup::FORMAT );
228 : 34 : implDescribeSupportedFeature( ".uno:Forward", COMMAND_ID_FORWARD, CommandGroup::FORMAT );
229 : 34 : implDescribeSupportedFeature( ".uno:Backward", COMMAND_ID_BACKWARD, CommandGroup::FORMAT );
230 : 34 : implDescribeSupportedFeature( ".uno:SendToBack", COMMAND_ID_SEND_TO_BACK, CommandGroup::FORMAT );
231 : 34 : implDescribeSupportedFeature( ".uno:FontDialog", COMMAND_ID_FONT_DIALOG, CommandGroup::EDIT );
232 : 34 : implDescribeSupportedFeature( ".uno:ParagraphDialog", COMMAND_ID_PARAGRAPH_DIALOG, CommandGroup::EDIT );
233 : 34 : }
234 : :
235 : 0 : IMPL_LINK( ShapeController, CheckNameHdl, AbstractSvxNameDialog*, pDialog )
236 : : {
237 [ # # ]: 0 : String aName;
238 [ # # ]: 0 : if ( pDialog )
239 : : {
240 [ # # ]: 0 : pDialog->GetName( aName );
241 : : }
242 [ # # ]: 0 : if ( aName.Len() )
243 : : {
244 [ # # ][ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL );
245 [ # # ][ # # ]: 0 : if ( pDrawViewWrapper && pDrawViewWrapper->getNamedSdrObject( aName ) )
[ # # ][ # # ]
[ # # ]
[ # # # # ]
246 : : {
247 : 0 : return 0;
248 : : }
249 : : }
250 [ # # ]: 0 : return 1;
251 : : }
252 : :
253 : 0 : void ShapeController::executeDispatch_FormatLine()
254 : : {
255 [ # # ]: 0 : SolarMutexGuard aGuard;
256 [ # # ]: 0 : if ( m_pChartController )
257 : : {
258 : 0 : Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
259 [ # # ]: 0 : DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper();
260 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
261 [ # # ][ # # ]: 0 : if ( pParent && pDrawModelWrapper && pDrawViewWrapper )
[ # # ]
262 : : {
263 [ # # ]: 0 : SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
264 [ # # ]: 0 : SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
265 : 0 : sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
266 [ # # ]: 0 : if ( bHasMarked )
267 : : {
268 [ # # ]: 0 : pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False );
269 : : }
270 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
271 [ # # ]: 0 : if ( pFact )
272 : : {
273 : : ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
274 [ # # ]: 0 : pFact->CreateSvxLineTabDialog( pParent, &aAttr, &pDrawModelWrapper->getSdrModel(),
275 [ # # ]: 0 : pSelectedObj, bHasMarked ) );
276 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
277 : : {
278 [ # # ]: 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
279 [ # # ]: 0 : if ( bHasMarked )
280 : : {
281 [ # # ]: 0 : pDrawViewWrapper->SetAttrToMarked( *pOutAttr, sal_False );
282 : : }
283 : : else
284 : : {
285 [ # # ]: 0 : pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False );
286 : : }
287 [ # # ]: 0 : }
288 [ # # ]: 0 : }
289 : : }
290 [ # # ]: 0 : }
291 : 0 : }
292 : :
293 : 0 : void ShapeController::executeDispatch_FormatArea()
294 : : {
295 [ # # ]: 0 : SolarMutexGuard aGuard;
296 [ # # ]: 0 : if ( m_pChartController )
297 : : {
298 : 0 : Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
299 [ # # ]: 0 : DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper();
300 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
301 [ # # ][ # # ]: 0 : if ( pParent && pDrawModelWrapper && pDrawViewWrapper )
[ # # ]
302 : : {
303 [ # # ]: 0 : SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
304 : 0 : sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
305 [ # # ]: 0 : if ( bHasMarked )
306 : : {
307 [ # # ]: 0 : pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False );
308 : : }
309 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
310 [ # # ]: 0 : if ( pFact )
311 : : {
312 : : ::boost::scoped_ptr< AbstractSvxAreaTabDialog > pDlg(
313 [ # # ]: 0 : pFact->CreateSvxAreaTabDialog( pParent, &aAttr, &pDrawModelWrapper->getSdrModel(),
314 [ # # ]: 0 : pDrawViewWrapper ) );
315 [ # # ]: 0 : if ( pDlg.get() )
316 : : {
317 : 0 : SfxItemPool& rItemPool = pDrawViewWrapper->GetModel()->GetItemPool();
318 [ # # ][ # # ]: 0 : SfxItemSet aSet( rItemPool, rItemPool.GetFirstWhich(), rItemPool.GetLastWhich() );
[ # # ]
319 [ # # ][ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
320 : : {
321 [ # # ]: 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
322 [ # # ]: 0 : if ( bHasMarked )
323 : : {
324 [ # # ]: 0 : pDrawViewWrapper->SetAttrToMarked( *pOutAttr, sal_False );
325 : : }
326 : : else
327 : : {
328 [ # # ]: 0 : pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False );
329 : : }
330 [ # # ]: 0 : }
331 [ # # ]: 0 : }
332 [ # # ]: 0 : }
333 : : }
334 [ # # ]: 0 : }
335 : 0 : }
336 : :
337 : 0 : void ShapeController::executeDispatch_TextAttributes()
338 : : {
339 [ # # ]: 0 : SolarMutexGuard aGuard;
340 [ # # ]: 0 : if ( m_pChartController )
341 : : {
342 : 0 : Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
343 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
344 [ # # ][ # # ]: 0 : if ( pParent && pDrawViewWrapper )
345 : : {
346 [ # # ]: 0 : SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
347 : 0 : sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
348 [ # # ]: 0 : if ( bHasMarked )
349 : : {
350 [ # # ]: 0 : pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False );
351 : : }
352 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
353 [ # # ]: 0 : if ( pFact )
354 : : {
355 : : ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
356 [ # # ]: 0 : pFact->CreateTextTabDialog( pParent, &aAttr, pDrawViewWrapper ) );
357 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
358 : : {
359 [ # # ]: 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
360 [ # # ]: 0 : if ( bHasMarked )
361 : : {
362 [ # # ]: 0 : pDrawViewWrapper->SetAttributes( *pOutAttr );
363 : : }
364 : : else
365 : : {
366 [ # # ]: 0 : pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False );
367 : : }
368 [ # # ]: 0 : }
369 [ # # ]: 0 : }
370 : : }
371 [ # # ]: 0 : }
372 : 0 : }
373 : :
374 : 0 : void ShapeController::executeDispatch_TransformDialog()
375 : : {
376 [ # # ]: 0 : SolarMutexGuard aGuard;
377 [ # # ]: 0 : if ( m_pChartController )
378 : : {
379 : 0 : Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
380 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
381 [ # # ][ # # ]: 0 : if ( pParent && pDrawViewWrapper )
382 : : {
383 [ # # ]: 0 : SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
384 [ # # ][ # # ]: 0 : if ( pSelectedObj && pSelectedObj->GetObjIdentifier() == OBJ_CAPTION )
[ # # ][ # # ]
385 : : {
386 : : // item set for caption
387 [ # # ]: 0 : SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() );
388 [ # # ]: 0 : pDrawViewWrapper->GetAttributes( aAttr );
389 : : // item set for position and size
390 [ # # ]: 0 : SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() );
391 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
392 [ # # ]: 0 : if ( pFact )
393 : : {
394 : : ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
395 [ # # ]: 0 : pFact->CreateCaptionDialog( pParent, pDrawViewWrapper ) );
396 [ # # ]: 0 : if ( pDlg.get() )
397 : : {
398 [ # # ]: 0 : const sal_uInt16* pRange = pDlg->GetInputRanges( *aAttr.GetPool() );
399 [ # # ]: 0 : SfxItemSet aCombAttr( *aAttr.GetPool(), pRange );
400 [ # # ]: 0 : aCombAttr.Put( aAttr );
401 [ # # ]: 0 : aCombAttr.Put( aGeoAttr );
402 [ # # ]: 0 : pDlg->SetInputSet( &aCombAttr );
403 [ # # ][ # # ]: 0 : if ( pDlg->Execute() == RET_OK )
404 : : {
405 [ # # ]: 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
406 [ # # ]: 0 : pDrawViewWrapper->SetAttributes( *pOutAttr );
407 [ # # ]: 0 : pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr );
408 [ # # ]: 0 : }
409 [ # # ]: 0 : }
410 [ # # ][ # # ]: 0 : }
411 : : }
412 : : else
413 : : {
414 [ # # ]: 0 : SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() );
415 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
416 [ # # ]: 0 : if ( pFact )
417 : : {
418 : : ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
419 [ # # ]: 0 : pFact->CreateSvxTransformTabDialog( pParent, &aGeoAttr, pDrawViewWrapper ) );
420 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
421 : : {
422 [ # # ]: 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
423 [ # # ]: 0 : pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr );
424 [ # # ]: 0 : }
425 [ # # ]: 0 : }
426 : : }
427 : : }
428 [ # # ]: 0 : }
429 : 0 : }
430 : :
431 : 0 : void ShapeController::executeDispatch_ObjectTitleDescription()
432 : : {
433 [ # # ]: 0 : SolarMutexGuard aGuard;
434 [ # # ]: 0 : if ( m_pChartController )
435 : : {
436 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
437 [ # # ][ # # ]: 0 : if ( pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1 )
[ # # ]
438 : : {
439 [ # # ]: 0 : SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
440 [ # # ]: 0 : if ( pSelectedObj )
441 : : {
442 [ # # ][ # # ]: 0 : String aTitle( pSelectedObj->GetTitle() );
443 [ # # ][ # # ]: 0 : String aDescription( pSelectedObj->GetDescription() );
444 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
445 [ # # ]: 0 : if ( pFact )
446 : : {
447 : : ::boost::scoped_ptr< AbstractSvxObjectTitleDescDialog > pDlg(
448 [ # # ]: 0 : pFact->CreateSvxObjectTitleDescDialog( NULL, aTitle, aDescription ) );
449 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
450 : : {
451 [ # # ]: 0 : pDlg->GetTitle( aTitle );
452 [ # # ]: 0 : pDlg->GetDescription( aDescription );
453 [ # # ][ # # ]: 0 : pSelectedObj->SetTitle( aTitle );
454 [ # # ][ # # ]: 0 : pSelectedObj->SetDescription( aDescription );
455 [ # # ]: 0 : }
456 [ # # ][ # # ]: 0 : }
457 : : }
458 : : }
459 [ # # ]: 0 : }
460 : 0 : }
461 : :
462 : 0 : void ShapeController::executeDispatch_RenameObject()
463 : : {
464 [ # # ]: 0 : SolarMutexGuard aGuard;
465 [ # # ]: 0 : if ( m_pChartController )
466 : : {
467 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
468 [ # # ][ # # ]: 0 : if ( pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1 )
[ # # ]
469 : : {
470 [ # # ]: 0 : SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
471 [ # # ]: 0 : if ( pSelectedObj )
472 : : {
473 [ # # ]: 0 : rtl::OUString aName = pSelectedObj->GetName();
474 [ # # ]: 0 : SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
475 [ # # ]: 0 : if ( pFact )
476 : : {
477 : : ::boost::scoped_ptr< AbstractSvxObjectNameDialog > pDlg(
478 [ # # ][ # # ]: 0 : pFact->CreateSvxObjectNameDialog( NULL, aName ) );
[ # # ]
479 [ # # ][ # # ]: 0 : pDlg->SetCheckNameHdl( LINK( this, ShapeController, CheckNameHdl ) );
480 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
481 : : {
482 [ # # ]: 0 : String aTmp;
483 [ # # ]: 0 : pDlg->GetName(aTmp);
484 [ # # ]: 0 : aName = aTmp;
485 [ # # ][ # # ]: 0 : if (pSelectedObj->GetName().equals(aName))
486 : : {
487 [ # # ]: 0 : pSelectedObj->SetName( aName );
488 [ # # ]: 0 : }
489 [ # # ]: 0 : }
490 : 0 : }
491 : : }
492 : : }
493 [ # # ]: 0 : }
494 : 0 : }
495 : :
496 : 0 : void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId )
497 : : {
498 [ # # ]: 0 : SolarMutexGuard aGuard;
499 [ # # ][ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL );
500 [ # # ]: 0 : if ( pDrawViewWrapper )
501 : : {
502 [ # # # # : 0 : switch ( nId )
# ]
503 : : {
504 : : case COMMAND_ID_BRING_TO_FRONT:
505 : : {
506 [ # # ][ # # ]: 0 : if ( isForwardPossible() )
507 : : {
508 [ # # ]: 0 : pDrawViewWrapper->PutMarkedToTop();
509 : : }
510 : : }
511 : 0 : break;
512 : : case COMMAND_ID_FORWARD:
513 : : {
514 [ # # ][ # # ]: 0 : if ( isForwardPossible() )
515 : : {
516 [ # # ]: 0 : pDrawViewWrapper->MovMarkedToTop();
517 : : }
518 : : }
519 : 0 : break;
520 : : case COMMAND_ID_BACKWARD:
521 : : {
522 [ # # ][ # # ]: 0 : if ( isBackwardPossible() )
523 : : {
524 [ # # ]: 0 : pDrawViewWrapper->MovMarkedToBtm();
525 : : }
526 : : }
527 : 0 : break;
528 : : case COMMAND_ID_SEND_TO_BACK:
529 : : {
530 [ # # ][ # # ]: 0 : if ( isBackwardPossible() )
531 : : {
532 [ # # ]: 0 : SdrObject* pFirstObj = getFirstAdditionalShape();
533 [ # # ]: 0 : pDrawViewWrapper->PutMarkedBehindObj( pFirstObj );
534 : : }
535 : : }
536 : 0 : break;
537 : : default:
538 : : {
539 : : }
540 : 0 : break;
541 : : }
542 [ # # ]: 0 : }
543 : 0 : }
544 : :
545 : 0 : void ShapeController::executeDispatch_FontDialog()
546 : : {
547 [ # # ]: 0 : SolarMutexGuard aGuard;
548 [ # # ]: 0 : if ( m_pChartController )
549 : : {
550 : 0 : Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
551 [ # # ]: 0 : DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper();
552 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
553 [ # # ][ # # ]: 0 : if ( pParent && pDrawModelWrapper && pDrawViewWrapper )
[ # # ]
554 : : {
555 [ # # ]: 0 : SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() );
556 [ # # ]: 0 : pDrawViewWrapper->GetAttributes( aAttr );
557 [ # # ]: 0 : ViewElementListProvider aViewElementListProvider( pDrawModelWrapper );
558 [ # # ][ # # ]: 0 : ::boost::scoped_ptr< ShapeFontDialog > pDlg( new ShapeFontDialog( pParent, &aAttr, &aViewElementListProvider ) );
559 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
560 : : {
561 : 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
562 [ # # ]: 0 : pDrawViewWrapper->SetAttributes( *pOutAttr );
563 [ # # ][ # # ]: 0 : }
[ # # ]
564 : : }
565 [ # # ]: 0 : }
566 : 0 : }
567 : :
568 : 0 : void ShapeController::executeDispatch_ParagraphDialog()
569 : : {
570 [ # # ]: 0 : SolarMutexGuard aGuard;
571 [ # # ]: 0 : if ( m_pChartController )
572 : : {
573 : 0 : Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
574 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
575 [ # # ][ # # ]: 0 : if ( pParent && pDrawViewWrapper )
576 : : {
577 : 0 : SfxItemPool& rPool = pDrawViewWrapper->GetModel()->GetItemPool();
578 [ # # ]: 0 : SfxItemSet aAttr( rPool );
579 [ # # ]: 0 : pDrawViewWrapper->GetAttributes( aAttr );
580 : :
581 : : SfxItemSet aNewAttr( rPool,
582 : : EE_ITEMS_START, EE_ITEMS_END,
583 : : SID_ATTR_PARA_HYPHENZONE, SID_ATTR_PARA_HYPHENZONE,
584 : : SID_ATTR_PARA_PAGEBREAK, SID_ATTR_PARA_PAGEBREAK,
585 : : SID_ATTR_PARA_SPLIT, SID_ATTR_PARA_SPLIT,
586 : : SID_ATTR_PARA_WIDOWS, SID_ATTR_PARA_WIDOWS,
587 : : SID_ATTR_PARA_ORPHANS, SID_ATTR_PARA_ORPHANS,
588 [ # # ]: 0 : 0 );
589 [ # # ]: 0 : aNewAttr.Put( aAttr );
590 [ # # ][ # # ]: 0 : aNewAttr.Put( SvxHyphenZoneItem( sal_False, SID_ATTR_PARA_HYPHENZONE ) );
[ # # ]
591 [ # # ][ # # ]: 0 : aNewAttr.Put( SvxFmtBreakItem( SVX_BREAK_NONE, SID_ATTR_PARA_PAGEBREAK ) );
[ # # ]
592 [ # # ][ # # ]: 0 : aNewAttr.Put( SvxFmtSplitItem( sal_True, SID_ATTR_PARA_SPLIT) );
[ # # ]
593 [ # # ][ # # ]: 0 : aNewAttr.Put( SvxWidowsItem( 0, SID_ATTR_PARA_WIDOWS) );
[ # # ]
594 [ # # ][ # # ]: 0 : aNewAttr.Put( SvxOrphansItem( 0, SID_ATTR_PARA_ORPHANS) );
[ # # ]
595 : :
596 [ # # ][ # # ]: 0 : ::boost::scoped_ptr< ShapeParagraphDialog > pDlg( new ShapeParagraphDialog( pParent, &aNewAttr ) );
597 [ # # ][ # # ]: 0 : if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
[ # # ][ # # ]
598 : : {
599 : 0 : const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
600 [ # # ]: 0 : pDrawViewWrapper->SetAttributes( *pOutAttr );
601 [ # # ][ # # ]: 0 : }
[ # # ]
602 : : }
603 [ # # ]: 0 : }
604 : 0 : }
605 : :
606 : 0 : SdrObject* ShapeController::getFirstAdditionalShape()
607 : : {
608 : 0 : SdrObject* pFirstObj = NULL;
609 : :
610 : : try
611 : : {
612 [ # # ][ # # ]: 0 : DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL );
613 [ # # ]: 0 : if ( pDrawModelWrapper )
614 : : {
615 : 0 : Reference< drawing::XShape > xFirstShape;
616 [ # # ]: 0 : Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() );
617 [ # # ]: 0 : Reference< drawing::XShapes > xDrawPageShapes( xDrawPage, uno::UNO_QUERY_THROW );
618 [ # # ]: 0 : Reference< drawing::XShapes > xChartRoot( DrawModelWrapper::getChartRootShape( xDrawPage ) );
619 [ # # ][ # # ]: 0 : sal_Int32 nCount = xDrawPageShapes->getCount();
620 [ # # ]: 0 : for ( sal_Int32 i = 0; i < nCount; ++i )
621 : : {
622 : 0 : Reference< drawing::XShape > xShape;
623 [ # # ][ # # ]: 0 : if ( xDrawPageShapes->getByIndex( i ) >>= xShape )
[ # # ][ # # ]
624 : : {
625 [ # # ][ # # ]: 0 : if ( xShape.is() && xShape != xChartRoot )
[ # # ][ # # ]
626 : : {
627 [ # # ]: 0 : xFirstShape = xShape;
628 : : break;
629 : : }
630 : : }
631 [ # # ]: 0 : }
632 [ # # ]: 0 : if ( xFirstShape.is() )
633 : : {
634 [ # # ]: 0 : pFirstObj = DrawViewWrapper::getSdrObject( xFirstShape );
635 [ # # ]: 0 : }
636 : : }
637 : : }
638 : 0 : catch ( const uno::Exception& ex )
639 : : {
640 : : ASSERT_EXCEPTION( ex );
641 : : }
642 : :
643 : 0 : return pFirstObj;
644 : : }
645 : :
646 : 0 : SdrObject* ShapeController::getLastAdditionalShape()
647 : : {
648 : 0 : SdrObject* pLastObj = NULL;
649 : :
650 : : try
651 : : {
652 [ # # ][ # # ]: 0 : DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL );
653 [ # # ]: 0 : if ( pDrawModelWrapper )
654 : : {
655 : 0 : Reference< drawing::XShape > xLastShape;
656 [ # # ]: 0 : Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() );
657 [ # # ]: 0 : Reference< drawing::XShapes > xDrawPageShapes( xDrawPage, uno::UNO_QUERY_THROW );
658 [ # # ]: 0 : Reference< drawing::XShapes > xChartRoot( DrawModelWrapper::getChartRootShape( xDrawPage ) );
659 [ # # ][ # # ]: 0 : sal_Int32 nCount = xDrawPageShapes->getCount();
660 [ # # ]: 0 : for ( sal_Int32 i = nCount - 1; i >= 0; --i )
661 : : {
662 : 0 : Reference< drawing::XShape > xShape;
663 [ # # ][ # # ]: 0 : if ( xDrawPageShapes->getByIndex( i ) >>= xShape )
[ # # ][ # # ]
664 : : {
665 [ # # ][ # # ]: 0 : if ( xShape.is() && xShape != xChartRoot )
[ # # ][ # # ]
666 : : {
667 [ # # ]: 0 : xLastShape = xShape;
668 : : break;
669 : : }
670 : : }
671 [ # # ]: 0 : }
672 [ # # ]: 0 : if ( xLastShape.is() )
673 : : {
674 [ # # ]: 0 : pLastObj = DrawViewWrapper::getSdrObject( xLastShape );
675 [ # # ]: 0 : }
676 : : }
677 : : }
678 : 0 : catch ( const uno::Exception& ex )
679 : : {
680 : : ASSERT_EXCEPTION( ex );
681 : : }
682 : :
683 : 0 : return pLastObj;
684 : : }
685 : :
686 : 0 : bool ShapeController::isBackwardPossible()
687 : : {
688 [ # # ][ # # ]: 0 : if ( m_pChartController && m_pChartController->m_aSelection.isAdditionalShapeSelected() )
[ # # ]
689 : : {
690 [ # # ]: 0 : SolarMutexGuard aGuard;
691 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
692 [ # # ]: 0 : if ( pDrawViewWrapper )
693 : : {
694 [ # # ]: 0 : SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
695 [ # # ]: 0 : SdrObject* pFirstObj = getFirstAdditionalShape();
696 [ # # ][ # # ]: 0 : if ( pSelectedObj && pFirstObj && pSelectedObj != pFirstObj )
[ # # ]
697 : : {
698 : 0 : return true;
699 : : }
700 [ # # ][ # # ]: 0 : }
701 : : }
702 : 0 : return false;
703 : : }
704 : :
705 : 0 : bool ShapeController::isForwardPossible()
706 : : {
707 [ # # ][ # # ]: 0 : if ( m_pChartController && m_pChartController->m_aSelection.isAdditionalShapeSelected() )
[ # # ]
708 : : {
709 [ # # ]: 0 : SolarMutexGuard aGuard;
710 [ # # ]: 0 : DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
711 [ # # ]: 0 : if ( pDrawViewWrapper )
712 : : {
713 [ # # ]: 0 : SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
714 [ # # ]: 0 : SdrObject* pLastObj = getLastAdditionalShape();
715 [ # # ][ # # ]: 0 : if ( pSelectedObj && pLastObj && pSelectedObj != pLastObj )
[ # # ]
716 : : {
717 : 0 : return true;
718 : : }
719 [ # # ][ # # ]: 0 : }
720 : : }
721 : 0 : return false;
722 : : }
723 : :
724 : : //.............................................................................
725 : : } // namespace chart
726 : : //.............................................................................
727 : :
728 : : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|