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