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 0 : ShapeController::ShapeController( const Reference< uno::XComponentContext >& rxContext,
60 : ChartController* pController )
61 : :FeatureCommandDispatchBase( rxContext )
62 0 : ,m_pChartController( pController )
63 : {
64 0 : }
65 :
66 0 : ShapeController::~ShapeController()
67 : {
68 0 : }
69 :
70 0 : void ShapeController::initialize()
71 : {
72 0 : FeatureCommandDispatchBase::initialize();
73 0 : }
74 :
75 : // WeakComponentImplHelperBase
76 0 : void ShapeController::disposing()
77 : {
78 0 : }
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 0 : void ShapeController::describeSupportedFeatures()
220 : {
221 0 : implDescribeSupportedFeature( ".uno:FormatLine", COMMAND_ID_FORMAT_LINE, CommandGroup::FORMAT );
222 0 : implDescribeSupportedFeature( ".uno:FormatArea", COMMAND_ID_FORMAT_AREA, CommandGroup::FORMAT );
223 0 : implDescribeSupportedFeature( ".uno:TextAttributes", COMMAND_ID_TEXT_ATTRIBUTES, CommandGroup::FORMAT );
224 0 : implDescribeSupportedFeature( ".uno:TransformDialog", COMMAND_ID_TRANSFORM_DIALOG, CommandGroup::FORMAT );
225 0 : implDescribeSupportedFeature( ".uno:ObjectTitleDescription", COMMAND_ID_OBJECT_TITLE_DESCRIPTION, CommandGroup::FORMAT );
226 0 : implDescribeSupportedFeature( ".uno:RenameObject", COMMAND_ID_RENAME_OBJECT, CommandGroup::FORMAT );
227 0 : implDescribeSupportedFeature( ".uno:BringToFront", COMMAND_ID_BRING_TO_FRONT, CommandGroup::FORMAT );
228 0 : implDescribeSupportedFeature( ".uno:Forward", COMMAND_ID_FORWARD, CommandGroup::FORMAT );
229 0 : implDescribeSupportedFeature( ".uno:Backward", COMMAND_ID_BACKWARD, CommandGroup::FORMAT );
230 0 : implDescribeSupportedFeature( ".uno:SendToBack", COMMAND_ID_SEND_TO_BACK, CommandGroup::FORMAT );
231 0 : implDescribeSupportedFeature( ".uno:FontDialog", COMMAND_ID_FONT_DIALOG, CommandGroup::EDIT );
232 0 : implDescribeSupportedFeature( ".uno:ParagraphDialog", COMMAND_ID_PARAGRAPH_DIALOG, CommandGroup::EDIT );
233 0 : }
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 3 : } // namespace chart
726 : //.............................................................................
727 :
728 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|