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(), true ) );
320 if ( pDlg.get() )
321 {
322 SfxItemPool& rItemPool = pDrawViewWrapper->GetModel()->GetItemPool();
323 SfxItemSet aSet( rItemPool, rItemPool.GetFirstWhich(), rItemPool.GetLastWhich() );
324 // const SvxColorTableItem* pColorItem = static_cast< const SvxColorTableItem* >( aSet.GetItem( SID_COLOR_TABLE ) );
325
326 if ( pDlg->Execute() == RET_OK )
327 {
328 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
329 if ( bHasMarked )
330 {
331 pDrawViewWrapper->SetAttrToMarked( *pOutAttr, sal_False );
332 }
333 else
334 {
335 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False );
336 }
337 }
338 }
339 }
340 }
341 }
342 }
343
executeDispatch_TextAttributes()344 void ShapeController::executeDispatch_TextAttributes()
345 {
346 ::vos::OGuard aGuard( Application::GetSolarMutex() );
347 if ( m_pChartController )
348 {
349 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
350 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
351 if ( pParent && pDrawViewWrapper )
352 {
353 SfxItemSet aAttr( pDrawViewWrapper->GetDefaultAttr() );
354 sal_Bool bHasMarked = pDrawViewWrapper->AreObjectsMarked();
355 if ( bHasMarked )
356 {
357 pDrawViewWrapper->MergeAttrFromMarked( aAttr, sal_False );
358 }
359 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
360 if ( pFact )
361 {
362 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
363 pFact->CreateTextTabDialog( pParent, &aAttr, pDrawViewWrapper ) );
364 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
365 {
366 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
367 if ( bHasMarked )
368 {
369 pDrawViewWrapper->SetAttributes( *pOutAttr );
370 }
371 else
372 {
373 pDrawViewWrapper->SetDefaultAttr( *pOutAttr, sal_False );
374 }
375 }
376 }
377 }
378 }
379 }
380
executeDispatch_TransformDialog()381 void ShapeController::executeDispatch_TransformDialog()
382 {
383 ::vos::OGuard aGuard( Application::GetSolarMutex() );
384 if ( m_pChartController )
385 {
386 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
387 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
388 if ( pParent && pDrawViewWrapper )
389 {
390 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
391 if ( pSelectedObj && pSelectedObj->GetObjIdentifier() == OBJ_CAPTION )
392 {
393 // item set for caption
394 SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() );
395 pDrawViewWrapper->GetAttributes( aAttr );
396 // item set for position and size
397 SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() );
398 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
399 if ( pFact )
400 {
401 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
402 pFact->CreateCaptionDialog( pParent, pDrawViewWrapper ) );
403 if ( pDlg.get() )
404 {
405 const sal_uInt16* pRange = pDlg->GetInputRanges( *aAttr.GetPool() );
406 SfxItemSet aCombAttr( *aAttr.GetPool(), pRange );
407 aCombAttr.Put( aAttr );
408 aCombAttr.Put( aGeoAttr );
409 pDlg->SetInputSet( &aCombAttr );
410 if ( pDlg->Execute() == RET_OK )
411 {
412 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
413 pDrawViewWrapper->SetAttributes( *pOutAttr );
414 pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr );
415 }
416 }
417 }
418 }
419 else
420 {
421 SfxItemSet aGeoAttr( pDrawViewWrapper->GetGeoAttrFromMarked() );
422 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
423 if ( pFact )
424 {
425 ::boost::scoped_ptr< SfxAbstractTabDialog > pDlg(
426 pFact->CreateSvxTransformTabDialog( pParent, &aGeoAttr, pDrawViewWrapper ) );
427 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
428 {
429 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
430 pDrawViewWrapper->SetGeoAttrToMarked( *pOutAttr );
431 }
432 }
433 }
434 }
435 }
436 }
437
executeDispatch_ObjectTitleDescription()438 void ShapeController::executeDispatch_ObjectTitleDescription()
439 {
440 ::vos::OGuard aGuard( Application::GetSolarMutex() );
441 if ( m_pChartController )
442 {
443 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
444 if ( pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1 )
445 {
446 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
447 if ( pSelectedObj )
448 {
449 String aTitle( pSelectedObj->GetTitle() );
450 String aDescription( pSelectedObj->GetDescription() );
451 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
452 if ( pFact )
453 {
454 ::boost::scoped_ptr< AbstractSvxObjectTitleDescDialog > pDlg(
455 pFact->CreateSvxObjectTitleDescDialog( NULL, aTitle, aDescription ) );
456 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
457 {
458 pDlg->GetTitle( aTitle );
459 pDlg->GetDescription( aDescription );
460 pSelectedObj->SetTitle( aTitle );
461 pSelectedObj->SetDescription( aDescription );
462 }
463 }
464 }
465 }
466 }
467 }
468
executeDispatch_RenameObject()469 void ShapeController::executeDispatch_RenameObject()
470 {
471 ::vos::OGuard aGuard( Application::GetSolarMutex() );
472 if ( m_pChartController )
473 {
474 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
475 if ( pDrawViewWrapper && pDrawViewWrapper->GetMarkedObjectCount() == 1 )
476 {
477 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
478 if ( pSelectedObj )
479 {
480 String aName( pSelectedObj->GetName() );
481 SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
482 if ( pFact )
483 {
484 ::boost::scoped_ptr< AbstractSvxObjectNameDialog > pDlg(
485 pFact->CreateSvxObjectNameDialog( NULL, aName ) );
486 pDlg->SetCheckNameHdl( LINK( this, ShapeController, CheckNameHdl ) );
487 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
488 {
489 pDlg->GetName( aName );
490 if ( aName != pSelectedObj->GetName() )
491 {
492 pSelectedObj->SetName( aName );
493 }
494 }
495 }
496 }
497 }
498 }
499 }
500
executeDispatch_ChangeZOrder(sal_uInt16 nId)501 void ShapeController::executeDispatch_ChangeZOrder( sal_uInt16 nId )
502 {
503 ::vos::OGuard aGuard( Application::GetSolarMutex() );
504 DrawViewWrapper* pDrawViewWrapper = ( m_pChartController ? m_pChartController->GetDrawViewWrapper() : NULL );
505 if ( pDrawViewWrapper )
506 {
507 switch ( nId )
508 {
509 case COMMAND_ID_BRING_TO_FRONT:
510 {
511 if ( isForwardPossible() )
512 {
513 pDrawViewWrapper->PutMarkedToTop();
514 }
515 }
516 break;
517 case COMMAND_ID_FORWARD:
518 {
519 if ( isForwardPossible() )
520 {
521 pDrawViewWrapper->MovMarkedToTop();
522 }
523 }
524 break;
525 case COMMAND_ID_BACKWARD:
526 {
527 if ( isBackwardPossible() )
528 {
529 pDrawViewWrapper->MovMarkedToBtm();
530 }
531 }
532 break;
533 case COMMAND_ID_SEND_TO_BACK:
534 {
535 if ( isBackwardPossible() )
536 {
537 SdrObject* pFirstObj = getFirstAdditionalShape();
538 pDrawViewWrapper->PutMarkedBehindObj( pFirstObj );
539 }
540 }
541 break;
542 default:
543 {
544 }
545 break;
546 }
547 }
548 }
549
executeDispatch_FontDialog()550 void ShapeController::executeDispatch_FontDialog()
551 {
552 ::vos::OGuard aGuard( Application::GetSolarMutex() );
553 if ( m_pChartController )
554 {
555 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
556 DrawModelWrapper* pDrawModelWrapper = m_pChartController->GetDrawModelWrapper();
557 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
558 if ( pParent && pDrawModelWrapper && pDrawViewWrapper )
559 {
560 SfxItemSet aAttr( pDrawViewWrapper->GetModel()->GetItemPool() );
561 pDrawViewWrapper->GetAttributes( aAttr );
562 ViewElementListProvider aViewElementListProvider( pDrawModelWrapper );
563 ::boost::scoped_ptr< ShapeFontDialog > pDlg( new ShapeFontDialog( pParent, &aAttr, &aViewElementListProvider ) );
564 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
565 {
566 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
567 pDrawViewWrapper->SetAttributes( *pOutAttr );
568 }
569 }
570 }
571 }
572
executeDispatch_ParagraphDialog()573 void ShapeController::executeDispatch_ParagraphDialog()
574 {
575 ::vos::OGuard aGuard( Application::GetSolarMutex() );
576 if ( m_pChartController )
577 {
578 Window* pParent = dynamic_cast< Window* >( m_pChartController->m_pChartWindow );
579 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
580 if ( pParent && pDrawViewWrapper )
581 {
582 SfxItemPool& rPool = pDrawViewWrapper->GetModel()->GetItemPool();
583 SfxItemSet aAttr( rPool );
584 pDrawViewWrapper->GetAttributes( aAttr );
585
586 SfxItemSet aNewAttr( rPool,
587 EE_ITEMS_START, EE_ITEMS_END,
588 SID_ATTR_PARA_HYPHENZONE, SID_ATTR_PARA_HYPHENZONE,
589 SID_ATTR_PARA_PAGEBREAK, SID_ATTR_PARA_PAGEBREAK,
590 SID_ATTR_PARA_SPLIT, SID_ATTR_PARA_SPLIT,
591 SID_ATTR_PARA_WIDOWS, SID_ATTR_PARA_WIDOWS,
592 SID_ATTR_PARA_ORPHANS, SID_ATTR_PARA_ORPHANS,
593 0 );
594 aNewAttr.Put( aAttr );
595 aNewAttr.Put( SvxHyphenZoneItem( sal_False, SID_ATTR_PARA_HYPHENZONE ) );
596 aNewAttr.Put( SvxFmtBreakItem( SVX_BREAK_NONE, SID_ATTR_PARA_PAGEBREAK ) );
597 aNewAttr.Put( SvxFmtSplitItem( sal_True, SID_ATTR_PARA_SPLIT) );
598 aNewAttr.Put( SvxWidowsItem( 0, SID_ATTR_PARA_WIDOWS) );
599 aNewAttr.Put( SvxOrphansItem( 0, SID_ATTR_PARA_ORPHANS) );
600
601 ::boost::scoped_ptr< ShapeParagraphDialog > pDlg( new ShapeParagraphDialog( pParent, &aNewAttr ) );
602 if ( pDlg.get() && ( pDlg->Execute() == RET_OK ) )
603 {
604 const SfxItemSet* pOutAttr = pDlg->GetOutputItemSet();
605 pDrawViewWrapper->SetAttributes( *pOutAttr );
606 }
607 }
608 }
609 }
610
getFirstAdditionalShape()611 SdrObject* ShapeController::getFirstAdditionalShape()
612 {
613 SdrObject* pFirstObj = NULL;
614
615 try
616 {
617 DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL );
618 if ( pDrawModelWrapper )
619 {
620 Reference< drawing::XShape > xFirstShape;
621 Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() );
622 Reference< drawing::XShapes > xDrawPageShapes( xDrawPage, uno::UNO_QUERY_THROW );
623 Reference< drawing::XShapes > xChartRoot( DrawModelWrapper::getChartRootShape( xDrawPage ) );
624 sal_Int32 nCount = xDrawPageShapes->getCount();
625 for ( sal_Int32 i = 0; i < nCount; ++i )
626 {
627 Reference< drawing::XShape > xShape;
628 if ( xDrawPageShapes->getByIndex( i ) >>= xShape )
629 {
630 if ( xShape.is() && xShape != xChartRoot )
631 {
632 xFirstShape = xShape;
633 break;
634 }
635 }
636 }
637 if ( xFirstShape.is() )
638 {
639 pFirstObj = DrawViewWrapper::getSdrObject( xFirstShape );
640 }
641 }
642 }
643 catch ( uno::Exception& ex )
644 {
645 ASSERT_EXCEPTION( ex );
646 }
647
648 return pFirstObj;
649 }
650
getLastAdditionalShape()651 SdrObject* ShapeController::getLastAdditionalShape()
652 {
653 SdrObject* pLastObj = NULL;
654
655 try
656 {
657 DrawModelWrapper* pDrawModelWrapper = ( m_pChartController ? m_pChartController->GetDrawModelWrapper() : NULL );
658 if ( pDrawModelWrapper )
659 {
660 Reference< drawing::XShape > xLastShape;
661 Reference< drawing::XDrawPage > xDrawPage( pDrawModelWrapper->getMainDrawPage() );
662 Reference< drawing::XShapes > xDrawPageShapes( xDrawPage, uno::UNO_QUERY_THROW );
663 Reference< drawing::XShapes > xChartRoot( DrawModelWrapper::getChartRootShape( xDrawPage ) );
664 sal_Int32 nCount = xDrawPageShapes->getCount();
665 for ( sal_Int32 i = nCount - 1; i >= 0; --i )
666 {
667 Reference< drawing::XShape > xShape;
668 if ( xDrawPageShapes->getByIndex( i ) >>= xShape )
669 {
670 if ( xShape.is() && xShape != xChartRoot )
671 {
672 xLastShape = xShape;
673 break;
674 }
675 }
676 }
677 if ( xLastShape.is() )
678 {
679 pLastObj = DrawViewWrapper::getSdrObject( xLastShape );
680 }
681 }
682 }
683 catch ( uno::Exception& ex )
684 {
685 ASSERT_EXCEPTION( ex );
686 }
687
688 return pLastObj;
689 }
690
isBackwardPossible()691 bool ShapeController::isBackwardPossible()
692 {
693 if ( m_pChartController && m_pChartController->m_aSelection.isAdditionalShapeSelected() )
694 {
695 ::vos::OGuard aGuard( Application::GetSolarMutex() );
696 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
697 if ( pDrawViewWrapper )
698 {
699 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
700 SdrObject* pFirstObj = getFirstAdditionalShape();
701 if ( pSelectedObj && pFirstObj && pSelectedObj != pFirstObj )
702 {
703 return true;
704 }
705 }
706 }
707 return false;
708 }
709
isForwardPossible()710 bool ShapeController::isForwardPossible()
711 {
712 if ( m_pChartController && m_pChartController->m_aSelection.isAdditionalShapeSelected() )
713 {
714 ::vos::OGuard aGuard( Application::GetSolarMutex() );
715 DrawViewWrapper* pDrawViewWrapper = m_pChartController->GetDrawViewWrapper();
716 if ( pDrawViewWrapper )
717 {
718 SdrObject* pSelectedObj = pDrawViewWrapper->getSelectedObject();
719 SdrObject* pLastObj = getLastAdditionalShape();
720 if ( pSelectedObj && pLastObj && pSelectedObj != pLastObj )
721 {
722 return true;
723 }
724 }
725 }
726 return false;
727 }
728
729 //.............................................................................
730 } // namespace chart
731 //.............................................................................
732