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