xref: /trunk/main/sd/source/ui/view/drawview.cxx (revision cdf0e10c4e3984b49a9502b011690b615761d4a3)
1     /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sd.hxx"
30 #include <sfx2/dispatch.hxx>
31 #ifndef _MSGBOX_HXX //autogen
32 #include <vcl/msgbox.hxx>
33 #endif
34 #include <svx/svdpagv.hxx>
35 #include <sfx2/request.hxx>
36 #include <svl/style.hxx>
37 #include <editeng/outliner.hxx>
38 #ifndef _VIEW3D_HXX //autogen
39 #include <svx/view3d.hxx>
40 #endif
41 #ifndef _SVXIDS_HRC //autogen
42 #include <svx/svxids.hrc>
43 #endif
44 #include <svx/svdotext.hxx>
45 #include <svx/svdograf.hxx>
46 #include <svx/svdogrp.hxx>
47 #include <svx/svdorect.hxx>
48 #include <svl/poolitem.hxx>
49 #include <editeng/eeitem.hxx>
50 #include <editeng/bulitem.hxx>
51 #include <svl/itempool.hxx>
52 #include <editeng/numitem.hxx>
53 #include <svl/whiter.hxx>
54 
55 #include <sfx2/viewfrm.hxx>
56 #include <sfx2/objface.hxx>
57 #include "stlsheet.hxx"
58 
59 #include <svx/svdoutl.hxx>
60 #undef BMP_OLEOBJ
61 #include <svx/svdstr.hrc>
62 #include <svx/dialmgr.hxx>
63 
64 #include "glob.hrc"
65 #include "strings.hrc"
66 #include "View.hxx"
67 #include "sdattr.hxx"
68 #include "drawview.hxx"
69 #include "drawdoc.hxx"
70 #include "DrawDocShell.hxx"
71 #include "sdpage.hxx"
72 #include "DrawViewShell.hxx"
73 #include "pres.hxx"
74 #include "sdresid.hxx"
75 #include "Window.hxx"
76 #include "unchss.hxx"
77 #ifndef SD_FRAME_VIEW
78 #include "FrameView.hxx"
79 #endif
80 #include "anminfo.hxx"
81 #include "slideshow.hxx"
82 #include <vcl/virdev.hxx>
83 #include <svx/sdrpaintwindow.hxx>
84 #include <svx/sdr/contact/viewobjectcontact.hxx>
85 #include <svx/sdr/contact/viewcontact.hxx>
86 #include <svx/sdr/contact/displayinfo.hxx>
87 
88 #include "undo/undomanager.hxx"
89 
90 using namespace ::com::sun::star;
91 
92 namespace sd {
93 
94 TYPEINIT1(DrawView, View);
95 
96 /*************************************************************************
97 |*
98 |* Konstruktor
99 |* zeigt die erste Seite des Dokuments auf Position 0,0 an;
100 |* falls noch keine Seite vorhanden ist, wird eine erzeugt
101 |*
102 \************************************************************************/
103 
104 DrawView::DrawView( DrawDocShell* pDocSh, OutputDevice* pOutDev, DrawViewShell* pShell)
105 : ::sd::View(pDocSh->GetDoc(), pOutDev, pShell)
106 , mpDocShell(pDocSh)
107 , mpDrawViewShell(pShell)
108 , mpVDev(NULL)
109 , mnPOCHSmph(0)
110 {
111     SetCurrentObj(OBJ_RECT, SdrInventor);
112 }
113 
114 /*************************************************************************
115 |*
116 |* Destruktor
117 |*
118 \************************************************************************/
119 
120 DrawView::~DrawView()
121 {
122     delete mpVDev;
123 }
124 
125 /*************************************************************************
126 |*
127 |* virtuelle Methode von SdrView, wird bei Selektionsaenderung gerufen
128 |*
129 \************************************************************************/
130 
131 void DrawView::MarkListHasChanged()
132 {
133     ::sd::View::MarkListHasChanged();
134 
135     if (mpDrawViewShell)
136         mpDrawViewShell->SelectionHasChanged();
137 }
138 
139 /*************************************************************************
140 |*
141 |* virtuelle Methode von SdrView, wird bei Modelaenderung gerufen
142 |*
143 \************************************************************************/
144 
145 void DrawView::ModelHasChanged()
146 {
147     ::sd::View::ModelHasChanged();
148 
149     // den Gestalter zur Neudarstellung zwingen
150     SfxStyleSheetBasePool* pSSPool = mpDoc->GetStyleSheetPool();
151     pSSPool->Broadcast(SfxStyleSheetPoolHint(SFX_STYLESHEETPOOL_CHANGES));
152 
153     if( mpDrawViewShell )
154         mpDrawViewShell->ModelHasChanged();
155 
156 }
157 
158 /*************************************************************************
159 |*
160 |* Attribute auf Titel- und Gliederungtext und Hintergrundrechteck einer
161 |* Masterpage in Vorlagen umlenken, sonst an Basisklasse weitergeben
162 |*
163 \************************************************************************/
164 
165 sal_Bool DrawView::SetAttributes(const SfxItemSet& rSet,
166                                             sal_Bool bReplaceAll)
167 {
168     sal_Bool bOk = sal_False;
169 
170     // wird eine Masterpage bearbeitet?
171     if ( mpDrawViewShell && mpDrawViewShell->GetEditMode() == EM_MASTERPAGE )
172     {
173         SfxStyleSheetBasePool* pStShPool = mpDoc->GetStyleSheetPool();
174         SdPage& rPage = *mpDrawViewShell->getCurrentPage();
175         String aLayoutName = rPage.GetName();
176         SdrTextObj* pEditObject = static_cast< SdrTextObj* >( GetTextEditObject() );
177 
178         if (pEditObject)
179         {
180             // Textedit
181             String aTemplateName(aLayoutName);
182 
183             sal_uInt32 nInv = pEditObject->GetObjInventor();
184 
185             if (nInv == SdrInventor)
186             {
187                 sal_uInt16 eObjKind = pEditObject->GetObjIdentifier();
188                 PresObjKind ePresObjKind = rPage.GetPresObjKind(pEditObject);
189 
190                 if ( ePresObjKind == PRESOBJ_TITLE ||
191                      ePresObjKind == PRESOBJ_NOTES )
192                 {
193                     // Presentation object (except outline)
194                     SfxStyleSheet* pSheet = rPage.GetStyleSheetForPresObj( ePresObjKind );
195                     DBG_ASSERT(pSheet, "StyleSheet nicht gefunden");
196 
197                     SfxItemSet aTempSet( pSheet->GetItemSet() );
198                     aTempSet.Put( rSet );
199                     aTempSet.ClearInvalidItems();
200 
201                     // Undo-Action
202                     StyleSheetUndoAction* pAction = new StyleSheetUndoAction(mpDoc, pSheet, &aTempSet);
203                     mpDocSh->GetUndoManager()->AddUndoAction(pAction);
204 
205                     pSheet->GetItemSet().Put(aTempSet);
206                     pSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
207                     bOk = sal_True;
208                 }
209                 else if (eObjKind == OBJ_OUTLINETEXT)
210                 {
211                     // Presentation object outline
212                     OutlinerView* pOV   = GetTextEditOutlinerView();
213                     ::Outliner* pOutliner = pOV->GetOutliner();
214                     List*         pList = (List*)pOV->CreateSelectionList();
215                     aTemplateName += String(SdResId(STR_LAYOUT_OUTLINE));
216 
217                     pOutliner->SetUpdateMode(sal_False);
218                     mpDocSh->SetWaitCursor( sal_True );
219 
220                     // Platzhalter durch Vorlagennamen ersetzen
221                     String aComment(SdResId(STR_UNDO_CHANGE_PRES_OBJECT));
222                     xub_StrLen nPos = aComment.Search( (sal_Unicode)'$' );
223                     aComment.Erase(nPos, 1);
224                     aComment.Insert( String((SdResId(STR_PSEUDOSHEET_OUTLINE))), nPos);
225                     mpDocSh->GetUndoManager()->EnterListAction( aComment, String() );
226 
227                     Paragraph* pPara = (Paragraph*)pList->Last();
228                     while (pPara)
229                     {
230                         sal_uLong nParaPos = pOutliner->GetAbsPos( pPara );
231                         sal_Int16 nDepth = pOutliner->GetDepth( (sal_uInt16) nParaPos );
232                         String aName(rPage.GetLayoutName());
233                         aName += (sal_Unicode)(' ');
234                         aName += String::CreateFromInt32( (nDepth <= 0) ? 1 : nDepth + 1 );
235                         SfxStyleSheet* pSheet = (SfxStyleSheet*)pStShPool->Find(aName, SD_STYLE_FAMILY_MASTERPAGE);
236                         DBG_ASSERT(pSheet, "StyleSheet nicht gefunden");
237 
238                         SfxItemSet aTempSet( pSheet->GetItemSet() );
239                         aTempSet.Put( rSet );
240                         aTempSet.ClearInvalidItems();
241 
242                         if( nDepth > 0 && aTempSet.GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON )
243                         {
244                             // no SvxNumBulletItem in outline level 1 to 8!
245                             aTempSet.ClearItem( EE_PARA_NUMBULLET );
246                         }
247 
248                         // Undo-Action
249                         StyleSheetUndoAction* pAction = new StyleSheetUndoAction(mpDoc, pSheet, &aTempSet);
250                         mpDocSh->GetUndoManager()->AddUndoAction(pAction);
251 
252                         pSheet->GetItemSet().Put(aTempSet);
253                         pSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
254 
255                         // now also broadcast any child sheets
256                         sal_Int16 nChild;
257                         for( nChild = nDepth + 1; nChild < 9; nChild++ )
258                         {
259                             String aSheetName(rPage.GetLayoutName());
260                             aSheetName += (sal_Unicode)(' ');
261                             aSheetName += String::CreateFromInt32( nChild <= 0 ? 1 : nChild + 1 );
262                             SfxStyleSheet* pOutlSheet = static_cast< SfxStyleSheet* >(pStShPool->Find(aSheetName, SD_STYLE_FAMILY_MASTERPAGE));
263 
264                             if( pOutlSheet )
265                                 pOutlSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
266                         }
267 
268                         pPara = (Paragraph*)pList->Prev();
269 
270                         if( !pPara && nDepth > 0 &&  rSet.GetItemState( EE_PARA_NUMBULLET ) == SFX_ITEM_ON &&
271                             pOutliner->GetDepth( (sal_uInt16) pOutliner->GetAbsPos( (Paragraph*) pList->First() ) ) > 0 )
272                             pPara = pOutliner->GetParagraph( 0 );  // Put NumBulletItem in outline level 1
273                     }
274 
275                     mpDocSh->SetWaitCursor( sal_False );
276                     pOV->GetOutliner()->SetUpdateMode(sal_True);
277 
278                     mpDocSh->GetUndoManager()->LeaveListAction();
279 
280                     delete pList;
281                     bOk = sal_True;
282                 }
283                 else
284                 {
285                     bOk = ::sd::View::SetAttributes(rSet, bReplaceAll);
286                 }
287             }
288         }
289         else
290         {
291             // Selection
292             const SdrMarkList& rList = GetMarkedObjectList();
293             sal_uLong nMarkCount         = rList.GetMarkCount();
294             for (sal_uLong nMark = 0; nMark < nMarkCount; nMark++)
295             {
296                 SdrObject* pObject = rList.GetMark(nMark)->GetMarkedSdrObj();
297                 sal_uInt32 nInv = pObject->GetObjInventor();
298 
299                 if (nInv == SdrInventor)
300                 {
301                     sal_uInt16 eObjKind = pObject->GetObjIdentifier();
302                     PresObjKind ePresObjKind = rPage.GetPresObjKind(pObject);
303                     String aTemplateName(aLayoutName);
304 
305                     if (ePresObjKind == PRESOBJ_TITLE ||
306                         ePresObjKind == PRESOBJ_NOTES)
307                     {
308                         // Presentation object (except outline)
309                         SfxStyleSheet* pSheet = rPage.GetStyleSheetForPresObj( ePresObjKind );
310                         DBG_ASSERT(pSheet, "StyleSheet not found");
311 
312                         SfxItemSet aTempSet( pSheet->GetItemSet() );
313                         aTempSet.Put( rSet );
314                         aTempSet.ClearInvalidItems();
315 
316                         // Undo-Action
317                         StyleSheetUndoAction* pAction = new StyleSheetUndoAction(mpDoc, pSheet, &aTempSet);
318                         mpDocSh->GetUndoManager()->AddUndoAction(pAction);
319 
320                         pSheet->GetItemSet().Put(aTempSet,false);
321                         pSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
322                         bOk = sal_True;
323                     }
324                     else if (eObjKind == OBJ_OUTLINETEXT)
325                     {
326                         // Presentation object outline
327                         aTemplateName += String(SdResId(STR_LAYOUT_OUTLINE));
328                         for (sal_uInt16 nLevel = 9; nLevel > 0; nLevel--)
329                         {
330                             String aName(rPage.GetLayoutName());
331                             aName += (sal_Unicode)(' ');
332                             aName += String::CreateFromInt32( (sal_Int32)nLevel );
333                             SfxStyleSheet* pSheet = (SfxStyleSheet*)pStShPool->
334                                                 Find(aName, SD_STYLE_FAMILY_MASTERPAGE);
335                             DBG_ASSERT(pSheet, "StyleSheet nicht gefunden");
336 
337                             SfxItemSet aTempSet( pSheet->GetItemSet() );
338 
339                             if( nLevel > 1 )
340                             {
341                                 // for all levels over 1, clear all items that will be
342                                 // hard set to level 1
343                                 SfxWhichIter aWhichIter(rSet);
344                                 sal_uInt16 nWhich(aWhichIter.FirstWhich());
345                                 while( nWhich )
346                                 {
347                                     if( SFX_ITEM_ON == rSet.GetItemState( nWhich ) )
348                                         aTempSet.ClearItem( nWhich );
349                                     nWhich = aWhichIter.NextWhich();
350                                 }
351 
352                             }
353                             else
354                             {
355                                 // put the items hard into level one
356                                 aTempSet.Put( rSet );
357                             }
358 
359                             aTempSet.ClearInvalidItems();
360 
361                             // Undo-Action
362                             StyleSheetUndoAction* pAction = new StyleSheetUndoAction(mpDoc, pSheet, &aTempSet);
363                             mpDocSh->GetUndoManager()->AddUndoAction(pAction);
364 
365                             pSheet->GetItemSet().Set(aTempSet,false);
366                             pSheet->Broadcast(SfxSimpleHint(SFX_HINT_DATACHANGED));
367                         }
368 
369                         // remove all hard set items from shape that are now set in style
370                         SfxWhichIter aWhichIter(rSet);
371                         sal_uInt16 nWhich(aWhichIter.FirstWhich());
372                         while( nWhich )
373                         {
374                             if( SFX_ITEM_ON == rSet.GetItemState( nWhich ) )
375                                 pObject->ClearMergedItem( nWhich );
376                             nWhich = aWhichIter.NextWhich();
377                         }
378 
379                         bOk = sal_True;
380                     }
381                 }
382             }
383 
384             if(!bOk)
385                 bOk = ::sd::View::SetAttributes(rSet, bReplaceAll);
386         }
387     }
388     else    // nicht auf der Masterpage
389     {
390         bOk = ::sd::View::SetAttributes(rSet, bReplaceAll);
391     }
392 
393     return (bOk);
394 }
395 
396 /*************************************************************************
397 |*
398 |* Notify fuer Aenderung der Seitenanordnung
399 |*
400 \************************************************************************/
401 
402 void DrawView::Notify(SfxBroadcaster& rBC, const SfxHint& rHint)
403 {
404     if ( mpDrawViewShell && rHint.ISA(SdrHint) )
405     {
406         SdrHintKind eHintKind = ( (SdrHint&) rHint).GetKind();
407 
408         if ( mnPOCHSmph == 0 && eHintKind == HINT_PAGEORDERCHG )
409         {
410             mpDrawViewShell->ResetActualPage();
411         }
412         else if ( eHintKind == HINT_LAYERCHG || eHintKind == HINT_LAYERORDERCHG )
413         {
414             mpDrawViewShell->ResetActualLayer();
415         }
416 
417         // #94278# switch to that page when it's not a master page
418         if(HINT_SWITCHTOPAGE == eHintKind)
419         {
420             const SdrPage* pPage = ((const SdrHint&)rHint).GetPage();
421 
422             if(pPage && !pPage->IsMasterPage())
423             {
424                 if(mpDrawViewShell->GetActualPage() != pPage)
425                 {
426                     sal_uInt16 nPageNum = (pPage->GetPageNum() - 1) / 2; // Sdr --> Sd
427                     mpDrawViewShell->SwitchPage(nPageNum);
428                 }
429             }
430         }
431     }
432 
433     ::sd::View::Notify(rBC, rHint);
434 }
435 
436 /*************************************************************************
437 |*
438 |* PageOrderChangedHint blockieren/freigeben
439 |*
440 \************************************************************************/
441 
442 void DrawView::BlockPageOrderChangedHint(sal_Bool bBlock)
443 {
444     if (bBlock)
445         mnPOCHSmph++;
446     else
447     {
448         DBG_ASSERT(mnPOCHSmph, "Zaehlerunterlauf");
449         mnPOCHSmph--;
450     }
451 }
452 
453 /*************************************************************************
454 |*
455 |* StyleSheet-Setzen auf der Masterpage abfangen, wenn Praesentationsobjekte
456 |* selektiert sind
457 |*
458 \************************************************************************/
459 
460 sal_Bool DrawView::SetStyleSheet(SfxStyleSheet* pStyleSheet, sal_Bool bDontRemoveHardAttr)
461 {
462     sal_Bool bResult = sal_True;
463 
464     // wird eine Masterpage bearbeitet?
465     if (mpDrawViewShell && mpDrawViewShell->GetEditMode() == EM_MASTERPAGE)
466     {
467         if (IsPresObjSelected(sal_False, sal_True))
468         {
469 
470             InfoBox(mpDrawViewShell->GetActiveWindow(),
471                     String(SdResId(STR_ACTION_NOTPOSSIBLE))).Execute();
472             bResult = sal_False;
473         }
474         else
475         {
476             bResult = ::sd::View::SetStyleSheet(pStyleSheet, bDontRemoveHardAttr);
477         }
478     }
479     else
480     {
481         bResult = ::sd::View::SetStyleSheet(pStyleSheet, bDontRemoveHardAttr);
482     }
483     return bResult;
484 }
485 
486 /*************************************************************************
487 |*
488 |* Paint-Methode: das Ereignis wird an die View weitergeleitet
489 |*
490 \************************************************************************/
491 
492 void DrawView::CompleteRedraw(OutputDevice* pOutDev, const Region& rReg, sdr::contact::ViewObjectContactRedirector* pRedirector /*=0L*/)
493 {
494     if( mpVDev )
495     {
496         delete mpVDev;
497         mpVDev = NULL;
498     }
499 
500     sal_Bool bStandardPaint = sal_True;
501 
502     SdDrawDocument* pDoc = mpDocShell->GetDoc();
503     if( pDoc && pDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS)
504     {
505         rtl::Reference< sd::SlideShow > xSlideshow( SlideShow::GetSlideShow( pDoc ) );
506         if(xSlideshow.is() && xSlideshow->isRunning())
507         {
508             OutputDevice* pShowWindow = ( OutputDevice* )xSlideshow->getShowWindow();
509             if( (pShowWindow == pOutDev) || (xSlideshow->getAnimationMode() == ANIMATIONMODE_PREVIEW) )
510             {
511                 if( pShowWindow == pOutDev )
512                     PresPaint(rReg);
513                 bStandardPaint = sal_False;
514             }
515         }
516     }
517 
518     if(bStandardPaint)
519     {
520         ::sd::View::CompleteRedraw(pOutDev, rReg, pRedirector);
521     }
522 }
523 
524 /*************************************************************************
525 |*
526 |* Paint-Event during running slide show
527 |*
528 \************************************************************************/
529 
530 void DrawView::PresPaint(const Region& rRegion)
531 {
532     if(mpViewSh)
533     {
534         rtl::Reference< SlideShow > xSlideshow( SlideShow::GetSlideShow( GetDoc() ) );
535         if( xSlideshow.is() && xSlideshow->isRunning() )
536             xSlideshow->paint( rRegion.GetBoundRect() );
537     }
538 }
539 
540 /*************************************************************************
541 |* entscheidet, ob ein Objekt markiert werden kann (z. B. noch nicht
542 |* erschienene Animationsobjekte in der Diashow)
543 \************************************************************************/
544 
545 sal_Bool DrawView::IsObjMarkable(SdrObject* pObj, SdrPageView* pPV) const
546 {
547     return FmFormView::IsObjMarkable(pObj, pPV);;
548 }
549 
550 /*************************************************************************
551 |*
552 |* Uebergebenen Bereich sichtbar machen (es wird ggf. gescrollt)
553 |*
554 \************************************************************************/
555 
556 void DrawView::MakeVisible(const Rectangle& rRect, ::Window& rWin)
557 {
558     if (!rRect.IsEmpty())
559     {
560         mpDrawViewShell->MakeVisible(rRect, rWin);
561     }
562 }
563 /*************************************************************************
564 |*
565 |* Seite wird gehided
566 |*
567 \************************************************************************/
568 
569 void DrawView::HideSdrPage()
570 {
571     if (mpDrawViewShell)
572     {
573         mpDrawViewShell->HidePage();
574     }
575 
576     ::sd::View::HideSdrPage();
577 }
578 
579 void DrawView::DeleteMarked()
580 {
581     OSL_TRACE( "DrawView::DeleteMarked() - enter" );
582 
583     sd::UndoManager* pUndoManager = mpDoc->GetUndoManager();
584     DBG_ASSERT( pUndoManager, "sd::DrawView::DeleteMarked(), ui action without undo manager!?" );
585 
586     if( pUndoManager )
587     {
588         String aUndo( SVX_RES(STR_EditDelete) );
589         String aSearchString(RTL_CONSTASCII_USTRINGPARAM("%1"));
590         aUndo.SearchAndReplace(aSearchString, GetDescriptionOfMarkedObjects());
591         pUndoManager->EnterListAction(aUndo, aUndo);
592     }
593 
594     SdPage* pPage = 0;
595     bool bResetLayout = false;
596 
597     const sal_uLong nMarkCount = GetMarkedObjectList().GetMarkCount();
598     if( nMarkCount )
599     {
600         SdrMarkList aList( GetMarkedObjectList() );
601         for (sal_uLong nMark = 0; nMark < nMarkCount; nMark++)
602         {
603             SdrObject* pObj = aList.GetMark(nMark)->GetMarkedSdrObj();
604             if( pObj && !pObj->IsEmptyPresObj() && pObj->GetUserCall() )
605             {
606                 pPage = static_cast< SdPage* >( pObj->GetPage() );
607                 PresObjKind ePresObjKind;
608                 if( pPage && ((ePresObjKind = pPage->GetPresObjKind(pObj)) != PRESOBJ_NONE))
609                 {
610                     switch( ePresObjKind )
611                     {
612                     case PRESOBJ_GRAPHIC:
613                     case PRESOBJ_OBJECT:
614                     case PRESOBJ_CHART:
615                     case PRESOBJ_ORGCHART:
616                     case PRESOBJ_TABLE:
617                     case PRESOBJ_CALC:
618                     case PRESOBJ_IMAGE:
619                     case PRESOBJ_MEDIA:
620                         ePresObjKind = PRESOBJ_OUTLINE;
621                         break;
622                     default:
623                         break;
624                     }
625                     SdrTextObj* pTextObj = dynamic_cast< SdrTextObj* >( pObj );
626                     bool bVertical = pTextObj && pTextObj->IsVerticalWriting();
627                     Rectangle aRect( pObj->GetLogicRect() );
628                     SdrObject* pNewObj = pPage->InsertAutoLayoutShape( 0, ePresObjKind, bVertical, aRect, true );
629 
630                     pPage->SetObjectOrdNum( pNewObj->GetOrdNum(), pObj->GetOrdNum() );
631 
632                     bResetLayout = true;
633 
634                     OSL_TRACE( "DrawView::InsertAutoLayoutShape() - InsertAutoLayoutShape" );
635                 }
636             }
637         }
638     }
639 
640     ::sd::View::DeleteMarked();
641 
642     if( pPage && bResetLayout )
643         pPage->SetAutoLayout( pPage->GetAutoLayout() );
644 
645     if( pUndoManager )
646         pUndoManager->LeaveListAction();
647 
648     OSL_TRACE( "DrawView::InsertAutoLayoutShape() - leave" );
649 }
650 
651 } // end of namespace sd
652