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