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_svx.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir #include <svx/svdpage.hxx> 32*cdf0e10cSrcweir 33*cdf0e10cSrcweir // HACK 34*cdf0e10cSrcweir #include <sot/storage.hxx> 35*cdf0e10cSrcweir #include <sot/clsids.hxx> 36*cdf0e10cSrcweir #include <sot/storage.hxx> 37*cdf0e10cSrcweir #include <svx/svdview.hxx> 38*cdf0e10cSrcweir #include <string.h> 39*cdf0e10cSrcweir #ifndef _STRING_H 40*cdf0e10cSrcweir #define _STRING_H 41*cdf0e10cSrcweir #endif 42*cdf0e10cSrcweir #include <vcl/svapp.hxx> 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #include <tools/diagnose_ex.h> 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir #include <svx/svdetc.hxx> 47*cdf0e10cSrcweir #include <svx/svdobj.hxx> 48*cdf0e10cSrcweir #include <svx/svdogrp.hxx> 49*cdf0e10cSrcweir #include <svx/svdograf.hxx> // fuer SwapInAll() 50*cdf0e10cSrcweir #include <svx/svdoedge.hxx> // Zum kopieren der Konnektoren 51*cdf0e10cSrcweir #include <svx/svdoole2.hxx> // Sonderbehandlung OLE beim SdrExchangeFormat 52*cdf0e10cSrcweir #include "svx/svditer.hxx" 53*cdf0e10cSrcweir #include <svx/svdmodel.hxx> 54*cdf0e10cSrcweir #include <svx/svdlayer.hxx> 55*cdf0e10cSrcweir #include <svx/svdotext.hxx> 56*cdf0e10cSrcweir #include <svx/svdpagv.hxx> 57*cdf0e10cSrcweir #include <svx/svdundo.hxx> 58*cdf0e10cSrcweir #include <svx/fmglob.hxx> 59*cdf0e10cSrcweir #include <svx/polysc3d.hxx> 60*cdf0e10cSrcweir 61*cdf0e10cSrcweir #include <svx/fmdpage.hxx> 62*cdf0e10cSrcweir 63*cdf0e10cSrcweir #include <sfx2/objsh.hxx> 64*cdf0e10cSrcweir #include <vcl/salbtype.hxx> // FRound 65*cdf0e10cSrcweir #include <svx/sdr/contact/viewcontactofsdrpage.hxx> 66*cdf0e10cSrcweir #include <svx/sdr/contact/viewobjectcontact.hxx> 67*cdf0e10cSrcweir #include <svx/sdr/contact/displayinfo.hxx> 68*cdf0e10cSrcweir #include <algorithm> 69*cdf0e10cSrcweir #include <svl/smplhint.hxx> 70*cdf0e10cSrcweir 71*cdf0e10cSrcweir using namespace ::com::sun::star; 72*cdf0e10cSrcweir 73*cdf0e10cSrcweir namespace { 74*cdf0e10cSrcweir void DumpObjectList (const ::std::vector<SdrObjectWeakRef>& rContainer) 75*cdf0e10cSrcweir { 76*cdf0e10cSrcweir ::std::vector<SdrObjectWeakRef>::const_iterator iObject (rContainer.begin()); 77*cdf0e10cSrcweir ::std::vector<SdrObjectWeakRef>::const_iterator iEnd (rContainer.end()); 78*cdf0e10cSrcweir for (int nIndex=0 ; iObject!=iEnd; ++iObject,++nIndex) 79*cdf0e10cSrcweir { 80*cdf0e10cSrcweir const SdrObject* pObject = iObject->get(); 81*cdf0e10cSrcweir OSL_TRACE("%d : %x, %s", nIndex, 82*cdf0e10cSrcweir pObject, 83*cdf0e10cSrcweir ::rtl::OUStringToOString(pObject->GetName(),RTL_TEXTENCODING_UTF8).getStr()); 84*cdf0e10cSrcweir } 85*cdf0e10cSrcweir } 86*cdf0e10cSrcweir } 87*cdf0e10cSrcweir 88*cdf0e10cSrcweir 89*cdf0e10cSrcweir class SdrObjList::WeakSdrObjectContainerType 90*cdf0e10cSrcweir : public ::std::vector<SdrObjectWeakRef> 91*cdf0e10cSrcweir { 92*cdf0e10cSrcweir public: 93*cdf0e10cSrcweir WeakSdrObjectContainerType (const sal_Int32 nInitialSize) 94*cdf0e10cSrcweir : ::std::vector<SdrObjectWeakRef>(nInitialSize) {}; 95*cdf0e10cSrcweir }; 96*cdf0e10cSrcweir 97*cdf0e10cSrcweir 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir static const sal_Int32 InitialObjectContainerCapacity (64); 100*cdf0e10cSrcweir DBG_NAME(SdrObjList) 101*cdf0e10cSrcweir 102*cdf0e10cSrcweir TYPEINIT0(SdrObjList); 103*cdf0e10cSrcweir 104*cdf0e10cSrcweir SdrObjList::SdrObjList(SdrModel* pNewModel, SdrPage* pNewPage, SdrObjList* pNewUpList): 105*cdf0e10cSrcweir maList(), 106*cdf0e10cSrcweir mpNavigationOrder(), 107*cdf0e10cSrcweir mbIsNavigationOrderDirty(false) 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir DBG_CTOR(SdrObjList,NULL); 110*cdf0e10cSrcweir maList.reserve(InitialObjectContainerCapacity); 111*cdf0e10cSrcweir pModel=pNewModel; 112*cdf0e10cSrcweir pPage=pNewPage; 113*cdf0e10cSrcweir pUpList=pNewUpList; 114*cdf0e10cSrcweir bObjOrdNumsDirty=sal_False; 115*cdf0e10cSrcweir bRectsDirty=sal_False; 116*cdf0e10cSrcweir pOwnerObj=NULL; 117*cdf0e10cSrcweir eListKind=SDROBJLIST_UNKNOWN; 118*cdf0e10cSrcweir } 119*cdf0e10cSrcweir 120*cdf0e10cSrcweir SdrObjList::SdrObjList(const SdrObjList& rSrcList): 121*cdf0e10cSrcweir maList(), 122*cdf0e10cSrcweir mpNavigationOrder(), 123*cdf0e10cSrcweir mbIsNavigationOrderDirty(false) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir DBG_CTOR(SdrObjList,NULL); 126*cdf0e10cSrcweir maList.reserve(InitialObjectContainerCapacity); 127*cdf0e10cSrcweir pModel=NULL; 128*cdf0e10cSrcweir pPage=NULL; 129*cdf0e10cSrcweir pUpList=NULL; 130*cdf0e10cSrcweir bObjOrdNumsDirty=sal_False; 131*cdf0e10cSrcweir bRectsDirty=sal_False; 132*cdf0e10cSrcweir pOwnerObj=NULL; 133*cdf0e10cSrcweir eListKind=SDROBJLIST_UNKNOWN; 134*cdf0e10cSrcweir *this=rSrcList; 135*cdf0e10cSrcweir } 136*cdf0e10cSrcweir 137*cdf0e10cSrcweir SdrObjList::~SdrObjList() 138*cdf0e10cSrcweir { 139*cdf0e10cSrcweir DBG_DTOR(SdrObjList,NULL); 140*cdf0e10cSrcweir 141*cdf0e10cSrcweir // #111111# 142*cdf0e10cSrcweir // To avoid that the Clear() method will broadcast changes when in destruction 143*cdf0e10cSrcweir // which would call virtual methos (not allowed in destructor), the model is set 144*cdf0e10cSrcweir // to NULL here. 145*cdf0e10cSrcweir pModel = 0L; 146*cdf0e10cSrcweir 147*cdf0e10cSrcweir Clear(); // Containerinhalt loeschen! 148*cdf0e10cSrcweir } 149*cdf0e10cSrcweir 150*cdf0e10cSrcweir void SdrObjList::operator=(const SdrObjList& rSrcList) 151*cdf0e10cSrcweir { 152*cdf0e10cSrcweir Clear(); 153*cdf0e10cSrcweir eListKind=rSrcList.eListKind; 154*cdf0e10cSrcweir CopyObjects(rSrcList); 155*cdf0e10cSrcweir } 156*cdf0e10cSrcweir 157*cdf0e10cSrcweir void SdrObjList::CopyObjects(const SdrObjList& rSrcList) 158*cdf0e10cSrcweir { 159*cdf0e10cSrcweir Clear(); 160*cdf0e10cSrcweir bObjOrdNumsDirty=sal_False; 161*cdf0e10cSrcweir bRectsDirty =sal_False; 162*cdf0e10cSrcweir sal_uIntPtr nCloneErrCnt=0; 163*cdf0e10cSrcweir sal_uIntPtr nAnz=rSrcList.GetObjCount(); 164*cdf0e10cSrcweir SdrInsertReason aReason(SDRREASON_COPY); 165*cdf0e10cSrcweir sal_uIntPtr no; 166*cdf0e10cSrcweir for (no=0; no<nAnz; no++) { 167*cdf0e10cSrcweir SdrObject* pSO=rSrcList.GetObj(no); 168*cdf0e10cSrcweir 169*cdf0e10cSrcweir // #116235# 170*cdf0e10cSrcweir //SdrObject* pDO=pSO->Clone(pPage,pModel); 171*cdf0e10cSrcweir SdrObject* pDO = pSO->Clone(); 172*cdf0e10cSrcweir pDO->SetModel(pModel); 173*cdf0e10cSrcweir pDO->SetPage(pPage); 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir if (pDO!=NULL) { 176*cdf0e10cSrcweir NbcInsertObject(pDO,CONTAINER_APPEND,&aReason); 177*cdf0e10cSrcweir } else { 178*cdf0e10cSrcweir nCloneErrCnt++; 179*cdf0e10cSrcweir } 180*cdf0e10cSrcweir } 181*cdf0e10cSrcweir // und nun zu den Konnektoren 182*cdf0e10cSrcweir // Die neuen Objekte werden auf die der rSrcList abgebildet 183*cdf0e10cSrcweir // und so die Objektverbindungen hergestellt. 184*cdf0e10cSrcweir // Aehnliche Implementation an folgenden Stellen: 185*cdf0e10cSrcweir // void SdrObjList::CopyObjects(const SdrObjList& rSrcList) 186*cdf0e10cSrcweir // SdrModel* SdrExchangeView::GetMarkedObjModel() const 187*cdf0e10cSrcweir // FASTBOOL SdrExchangeView::Paste(const SdrModel& rMod,...) 188*cdf0e10cSrcweir // void SdrEditView::CopyMarked() 189*cdf0e10cSrcweir if (nCloneErrCnt==0) { 190*cdf0e10cSrcweir for (no=0; no<nAnz; no++) { 191*cdf0e10cSrcweir const SdrObject* pSrcOb=rSrcList.GetObj(no); 192*cdf0e10cSrcweir SdrEdgeObj* pSrcEdge=PTR_CAST(SdrEdgeObj,pSrcOb); 193*cdf0e10cSrcweir if (pSrcEdge!=NULL) { 194*cdf0e10cSrcweir SdrObject* pSrcNode1=pSrcEdge->GetConnectedNode(sal_True); 195*cdf0e10cSrcweir SdrObject* pSrcNode2=pSrcEdge->GetConnectedNode(sal_False); 196*cdf0e10cSrcweir if (pSrcNode1!=NULL && pSrcNode1->GetObjList()!=pSrcEdge->GetObjList()) pSrcNode1=NULL; // Listenuebergreifend 197*cdf0e10cSrcweir if (pSrcNode2!=NULL && pSrcNode2->GetObjList()!=pSrcEdge->GetObjList()) pSrcNode2=NULL; // ist (noch) nicht 198*cdf0e10cSrcweir if (pSrcNode1!=NULL || pSrcNode2!=NULL) { 199*cdf0e10cSrcweir SdrObject* pEdgeObjTmp=GetObj(no); 200*cdf0e10cSrcweir SdrEdgeObj* pDstEdge=PTR_CAST(SdrEdgeObj,pEdgeObjTmp); 201*cdf0e10cSrcweir if (pDstEdge!=NULL) { 202*cdf0e10cSrcweir if (pSrcNode1!=NULL) { 203*cdf0e10cSrcweir sal_uIntPtr nDstNode1=pSrcNode1->GetOrdNum(); 204*cdf0e10cSrcweir SdrObject* pDstNode1=GetObj(nDstNode1); 205*cdf0e10cSrcweir if (pDstNode1!=NULL) { // Sonst grober Fehler! 206*cdf0e10cSrcweir pDstEdge->ConnectToNode(sal_True,pDstNode1); 207*cdf0e10cSrcweir } else { 208*cdf0e10cSrcweir DBG_ERROR("SdrObjList::operator=(): pDstNode1==NULL!"); 209*cdf0e10cSrcweir } 210*cdf0e10cSrcweir } 211*cdf0e10cSrcweir if (pSrcNode2!=NULL) { 212*cdf0e10cSrcweir sal_uIntPtr nDstNode2=pSrcNode2->GetOrdNum(); 213*cdf0e10cSrcweir SdrObject* pDstNode2=GetObj(nDstNode2); 214*cdf0e10cSrcweir if (pDstNode2!=NULL) { // Node war sonst wohl nicht markiert 215*cdf0e10cSrcweir pDstEdge->ConnectToNode(sal_False,pDstNode2); 216*cdf0e10cSrcweir } else { 217*cdf0e10cSrcweir DBG_ERROR("SdrObjList::operator=(): pDstNode2==NULL!"); 218*cdf0e10cSrcweir } 219*cdf0e10cSrcweir } 220*cdf0e10cSrcweir } else { 221*cdf0e10cSrcweir DBG_ERROR("SdrObjList::operator=(): pDstEdge==NULL!"); 222*cdf0e10cSrcweir } 223*cdf0e10cSrcweir } 224*cdf0e10cSrcweir } 225*cdf0e10cSrcweir } 226*cdf0e10cSrcweir } else { 227*cdf0e10cSrcweir #ifdef DBG_UTIL 228*cdf0e10cSrcweir ByteString aStr("SdrObjList::operator=(): Fehler beim Clonen "); 229*cdf0e10cSrcweir 230*cdf0e10cSrcweir if(nCloneErrCnt == 1) 231*cdf0e10cSrcweir { 232*cdf0e10cSrcweir aStr += "eines Zeichenobjekts."; 233*cdf0e10cSrcweir } 234*cdf0e10cSrcweir else 235*cdf0e10cSrcweir { 236*cdf0e10cSrcweir aStr += "von "; 237*cdf0e10cSrcweir aStr += ByteString::CreateFromInt32( nCloneErrCnt ); 238*cdf0e10cSrcweir aStr += " Zeichenobjekten."; 239*cdf0e10cSrcweir } 240*cdf0e10cSrcweir 241*cdf0e10cSrcweir aStr += " Objektverbindungen werden nicht mitkopiert."; 242*cdf0e10cSrcweir 243*cdf0e10cSrcweir DBG_ERROR(aStr.GetBuffer()); 244*cdf0e10cSrcweir #endif 245*cdf0e10cSrcweir } 246*cdf0e10cSrcweir } 247*cdf0e10cSrcweir 248*cdf0e10cSrcweir void SdrObjList::Clear() 249*cdf0e10cSrcweir { 250*cdf0e10cSrcweir sal_Bool bObjectsRemoved(sal_False); 251*cdf0e10cSrcweir 252*cdf0e10cSrcweir while( ! maList.empty()) 253*cdf0e10cSrcweir { 254*cdf0e10cSrcweir // remove last object from list 255*cdf0e10cSrcweir SdrObject* pObj = maList.back(); 256*cdf0e10cSrcweir RemoveObjectFromContainer(maList.size()-1); 257*cdf0e10cSrcweir 258*cdf0e10cSrcweir // flushViewObjectContacts() is done since SdrObject::Free is not guaranteed 259*cdf0e10cSrcweir // to delete the object and thus refresh visualisations 260*cdf0e10cSrcweir pObj->GetViewContact().flushViewObjectContacts(true); 261*cdf0e10cSrcweir 262*cdf0e10cSrcweir bObjectsRemoved = sal_True; 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir // sent remove hint (after removal, see RemoveObject()) 265*cdf0e10cSrcweir if(pModel) 266*cdf0e10cSrcweir { 267*cdf0e10cSrcweir SdrHint aHint(*pObj); 268*cdf0e10cSrcweir aHint.SetKind(HINT_OBJREMOVED); 269*cdf0e10cSrcweir aHint.SetPage(pPage); 270*cdf0e10cSrcweir pModel->Broadcast(aHint); 271*cdf0e10cSrcweir } 272*cdf0e10cSrcweir 273*cdf0e10cSrcweir // delete the object itself 274*cdf0e10cSrcweir SdrObject::Free( pObj ); 275*cdf0e10cSrcweir } 276*cdf0e10cSrcweir 277*cdf0e10cSrcweir if(pModel && bObjectsRemoved) 278*cdf0e10cSrcweir { 279*cdf0e10cSrcweir pModel->SetChanged(); 280*cdf0e10cSrcweir } 281*cdf0e10cSrcweir } 282*cdf0e10cSrcweir 283*cdf0e10cSrcweir SdrPage* SdrObjList::GetPage() const 284*cdf0e10cSrcweir { 285*cdf0e10cSrcweir return pPage; 286*cdf0e10cSrcweir } 287*cdf0e10cSrcweir 288*cdf0e10cSrcweir void SdrObjList::SetPage(SdrPage* pNewPage) 289*cdf0e10cSrcweir { 290*cdf0e10cSrcweir if (pPage!=pNewPage) { 291*cdf0e10cSrcweir pPage=pNewPage; 292*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 293*cdf0e10cSrcweir for (sal_uIntPtr no=0; no<nAnz; no++) { 294*cdf0e10cSrcweir SdrObject* pObj=GetObj(no); 295*cdf0e10cSrcweir pObj->SetPage(pPage); 296*cdf0e10cSrcweir } 297*cdf0e10cSrcweir } 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir SdrModel* SdrObjList::GetModel() const 301*cdf0e10cSrcweir { 302*cdf0e10cSrcweir return pModel; 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir void SdrObjList::SetModel(SdrModel* pNewModel) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir if (pModel!=pNewModel) { 308*cdf0e10cSrcweir pModel=pNewModel; 309*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 310*cdf0e10cSrcweir for (sal_uIntPtr i=0; i<nAnz; i++) { 311*cdf0e10cSrcweir SdrObject* pObj=GetObj(i); 312*cdf0e10cSrcweir pObj->SetModel(pModel); 313*cdf0e10cSrcweir } 314*cdf0e10cSrcweir } 315*cdf0e10cSrcweir } 316*cdf0e10cSrcweir 317*cdf0e10cSrcweir void SdrObjList::RecalcObjOrdNums() 318*cdf0e10cSrcweir { 319*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 320*cdf0e10cSrcweir for (sal_uIntPtr no=0; no<nAnz; no++) { 321*cdf0e10cSrcweir SdrObject* pObj=GetObj(no); 322*cdf0e10cSrcweir pObj->SetOrdNum(no); 323*cdf0e10cSrcweir } 324*cdf0e10cSrcweir bObjOrdNumsDirty=sal_False; 325*cdf0e10cSrcweir } 326*cdf0e10cSrcweir 327*cdf0e10cSrcweir void SdrObjList::RecalcRects() 328*cdf0e10cSrcweir { 329*cdf0e10cSrcweir aOutRect=Rectangle(); 330*cdf0e10cSrcweir aSnapRect=aOutRect; 331*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 332*cdf0e10cSrcweir sal_uIntPtr i; 333*cdf0e10cSrcweir for (i=0; i<nAnz; i++) { 334*cdf0e10cSrcweir SdrObject* pObj=GetObj(i); 335*cdf0e10cSrcweir if (i==0) { 336*cdf0e10cSrcweir aOutRect=pObj->GetCurrentBoundRect(); 337*cdf0e10cSrcweir aSnapRect=pObj->GetSnapRect(); 338*cdf0e10cSrcweir } else { 339*cdf0e10cSrcweir aOutRect.Union(pObj->GetCurrentBoundRect()); 340*cdf0e10cSrcweir aSnapRect.Union(pObj->GetSnapRect()); 341*cdf0e10cSrcweir } 342*cdf0e10cSrcweir } 343*cdf0e10cSrcweir } 344*cdf0e10cSrcweir 345*cdf0e10cSrcweir void SdrObjList::SetRectsDirty() 346*cdf0e10cSrcweir { 347*cdf0e10cSrcweir bRectsDirty=sal_True; 348*cdf0e10cSrcweir if (pUpList!=NULL) pUpList->SetRectsDirty(); 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir 351*cdf0e10cSrcweir void SdrObjList::impChildInserted(SdrObject& rChild) const 352*cdf0e10cSrcweir { 353*cdf0e10cSrcweir sdr::contact::ViewContact* pParent = rChild.GetViewContact().GetParentContact(); 354*cdf0e10cSrcweir 355*cdf0e10cSrcweir if(pParent) 356*cdf0e10cSrcweir { 357*cdf0e10cSrcweir pParent->ActionChildInserted(rChild.GetViewContact()); 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir } 360*cdf0e10cSrcweir 361*cdf0e10cSrcweir void SdrObjList::NbcInsertObject(SdrObject* pObj, sal_uIntPtr nPos, const SdrInsertReason* /*pReason*/) 362*cdf0e10cSrcweir { 363*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"SdrObjList::NbcInsertObject(NULL)"); 364*cdf0e10cSrcweir if (pObj!=NULL) { 365*cdf0e10cSrcweir DBG_ASSERT(!pObj->IsInserted(),"ZObjekt hat bereits Inserted-Status"); 366*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 367*cdf0e10cSrcweir if (nPos>nAnz) nPos=nAnz; 368*cdf0e10cSrcweir InsertObjectIntoContainer(*pObj,nPos); 369*cdf0e10cSrcweir 370*cdf0e10cSrcweir if (nPos<nAnz) bObjOrdNumsDirty=sal_True; 371*cdf0e10cSrcweir pObj->SetOrdNum(nPos); 372*cdf0e10cSrcweir pObj->SetObjList(this); 373*cdf0e10cSrcweir pObj->SetPage(pPage); 374*cdf0e10cSrcweir 375*cdf0e10cSrcweir // #110094# Inform the parent about change to allow invalidations at 376*cdf0e10cSrcweir // evtl. existing parent visualisations 377*cdf0e10cSrcweir impChildInserted(*pObj); 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir if (!bRectsDirty) { 380*cdf0e10cSrcweir aOutRect.Union(pObj->GetCurrentBoundRect()); 381*cdf0e10cSrcweir aSnapRect.Union(pObj->GetSnapRect()); 382*cdf0e10cSrcweir } 383*cdf0e10cSrcweir pObj->SetInserted(sal_True); // Ruft u.a. den UserCall 384*cdf0e10cSrcweir } 385*cdf0e10cSrcweir } 386*cdf0e10cSrcweir 387*cdf0e10cSrcweir void SdrObjList::InsertObject(SdrObject* pObj, sal_uIntPtr nPos, const SdrInsertReason* pReason) 388*cdf0e10cSrcweir { 389*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"SdrObjList::InsertObject(NULL)"); 390*cdf0e10cSrcweir 391*cdf0e10cSrcweir if(pObj) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir // #69055# if anchor is used, reset it before grouping 394*cdf0e10cSrcweir if(GetOwnerObj()) 395*cdf0e10cSrcweir { 396*cdf0e10cSrcweir const Point& rAnchorPos = pObj->GetAnchorPos(); 397*cdf0e10cSrcweir if(rAnchorPos.X() || rAnchorPos.Y()) 398*cdf0e10cSrcweir pObj->NbcSetAnchorPos(Point()); 399*cdf0e10cSrcweir } 400*cdf0e10cSrcweir 401*cdf0e10cSrcweir // do insert to new group 402*cdf0e10cSrcweir NbcInsertObject(pObj, nPos, pReason); 403*cdf0e10cSrcweir 404*cdf0e10cSrcweir // Falls das Objekt in eine Gruppe eingefuegt wird 405*cdf0e10cSrcweir // und nicht mit seinen Bruedern ueberlappt, muss es 406*cdf0e10cSrcweir // einen eigenen Redraw bekommen 407*cdf0e10cSrcweir if(pOwnerObj) 408*cdf0e10cSrcweir { 409*cdf0e10cSrcweir // only repaint here 410*cdf0e10cSrcweir pOwnerObj->ActionChanged(); 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir if(pModel) 414*cdf0e10cSrcweir { 415*cdf0e10cSrcweir // Hier muss ein anderer Broadcast her! 416*cdf0e10cSrcweir // Repaint ab Objekt Nummer ... (Achtung: GroupObj) 417*cdf0e10cSrcweir if(pObj->GetPage()) 418*cdf0e10cSrcweir { 419*cdf0e10cSrcweir SdrHint aHint(*pObj); 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir aHint.SetKind(HINT_OBJINSERTED); 422*cdf0e10cSrcweir pModel->Broadcast(aHint); 423*cdf0e10cSrcweir } 424*cdf0e10cSrcweir 425*cdf0e10cSrcweir pModel->SetChanged(); 426*cdf0e10cSrcweir } 427*cdf0e10cSrcweir } 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir 430*cdf0e10cSrcweir SdrObject* SdrObjList::NbcRemoveObject(sal_uIntPtr nObjNum) 431*cdf0e10cSrcweir { 432*cdf0e10cSrcweir if (nObjNum >= maList.size()) 433*cdf0e10cSrcweir { 434*cdf0e10cSrcweir OSL_ASSERT(nObjNum<maList.size()); 435*cdf0e10cSrcweir return NULL; 436*cdf0e10cSrcweir } 437*cdf0e10cSrcweir 438*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 439*cdf0e10cSrcweir SdrObject* pObj=maList[nObjNum]; 440*cdf0e10cSrcweir RemoveObjectFromContainer(nObjNum); 441*cdf0e10cSrcweir 442*cdf0e10cSrcweir // flushViewObjectContacts() clears the VOC's and those invalidate 443*cdf0e10cSrcweir pObj->GetViewContact().flushViewObjectContacts(true); 444*cdf0e10cSrcweir 445*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"Object zum Removen nicht gefunden"); 446*cdf0e10cSrcweir if (pObj!=NULL) { 447*cdf0e10cSrcweir DBG_ASSERT(pObj->IsInserted(),"ZObjekt hat keinen Inserted-Status"); 448*cdf0e10cSrcweir pObj->SetInserted(sal_False); // Ruft u.a. den UserCall 449*cdf0e10cSrcweir pObj->SetObjList(NULL); 450*cdf0e10cSrcweir pObj->SetPage(NULL); 451*cdf0e10cSrcweir if (!bObjOrdNumsDirty) { // Optimierung fuer den Fall, dass das letzte Obj rausgenommen wird 452*cdf0e10cSrcweir if (nObjNum!=sal_uIntPtr(nAnz-1)) { 453*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir } 456*cdf0e10cSrcweir SetRectsDirty(); 457*cdf0e10cSrcweir } 458*cdf0e10cSrcweir return pObj; 459*cdf0e10cSrcweir } 460*cdf0e10cSrcweir 461*cdf0e10cSrcweir SdrObject* SdrObjList::RemoveObject(sal_uIntPtr nObjNum) 462*cdf0e10cSrcweir { 463*cdf0e10cSrcweir if (nObjNum >= maList.size()) 464*cdf0e10cSrcweir { 465*cdf0e10cSrcweir OSL_ASSERT(nObjNum<maList.size()); 466*cdf0e10cSrcweir return NULL; 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir 469*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 470*cdf0e10cSrcweir SdrObject* pObj=maList[nObjNum]; 471*cdf0e10cSrcweir RemoveObjectFromContainer(nObjNum); 472*cdf0e10cSrcweir 473*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"Object zum Removen nicht gefunden"); 474*cdf0e10cSrcweir if(pObj) 475*cdf0e10cSrcweir { 476*cdf0e10cSrcweir // flushViewObjectContacts() clears the VOC's and those invalidate 477*cdf0e10cSrcweir pObj->GetViewContact().flushViewObjectContacts(true); 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir DBG_ASSERT(pObj->IsInserted(),"ZObjekt hat keinen Inserted-Status"); 480*cdf0e10cSrcweir if (pModel!=NULL) { 481*cdf0e10cSrcweir // Hier muss ein anderer Broadcast her! 482*cdf0e10cSrcweir if (pObj->GetPage()!=NULL) { 483*cdf0e10cSrcweir SdrHint aHint(*pObj); 484*cdf0e10cSrcweir aHint.SetKind(HINT_OBJREMOVED); 485*cdf0e10cSrcweir pModel->Broadcast(aHint); 486*cdf0e10cSrcweir } 487*cdf0e10cSrcweir pModel->SetChanged(); 488*cdf0e10cSrcweir } 489*cdf0e10cSrcweir pObj->SetInserted(sal_False); // Ruft u.a. den UserCall 490*cdf0e10cSrcweir pObj->SetObjList(NULL); 491*cdf0e10cSrcweir pObj->SetPage(NULL); 492*cdf0e10cSrcweir if (!bObjOrdNumsDirty) { // Optimierung fuer den Fall, dass das letzte Obj rausgenommen wird 493*cdf0e10cSrcweir if (nObjNum!=sal_uIntPtr(nAnz-1)) { 494*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 495*cdf0e10cSrcweir } 496*cdf0e10cSrcweir } 497*cdf0e10cSrcweir SetRectsDirty(); 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir if(pOwnerObj && !GetObjCount()) 500*cdf0e10cSrcweir { 501*cdf0e10cSrcweir // empty group created; it needs to be repainted since it's 502*cdf0e10cSrcweir // visualisation changes 503*cdf0e10cSrcweir pOwnerObj->ActionChanged(); 504*cdf0e10cSrcweir } 505*cdf0e10cSrcweir } 506*cdf0e10cSrcweir return pObj; 507*cdf0e10cSrcweir } 508*cdf0e10cSrcweir 509*cdf0e10cSrcweir SdrObject* SdrObjList::NbcReplaceObject(SdrObject* pNewObj, sal_uIntPtr nObjNum) 510*cdf0e10cSrcweir { 511*cdf0e10cSrcweir if (nObjNum >= maList.size() || pNewObj == NULL) 512*cdf0e10cSrcweir { 513*cdf0e10cSrcweir OSL_ASSERT(nObjNum<maList.size()); 514*cdf0e10cSrcweir OSL_ASSERT(pNewObj!=NULL); 515*cdf0e10cSrcweir return NULL; 516*cdf0e10cSrcweir } 517*cdf0e10cSrcweir 518*cdf0e10cSrcweir SdrObject* pObj=maList[nObjNum]; 519*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"SdrObjList::ReplaceObject: Object zum Removen nicht gefunden"); 520*cdf0e10cSrcweir if (pObj!=NULL) { 521*cdf0e10cSrcweir DBG_ASSERT(pObj->IsInserted(),"SdrObjList::ReplaceObject: ZObjekt hat keinen Inserted-Status"); 522*cdf0e10cSrcweir pObj->SetInserted(sal_False); 523*cdf0e10cSrcweir pObj->SetObjList(NULL); 524*cdf0e10cSrcweir pObj->SetPage(NULL); 525*cdf0e10cSrcweir ReplaceObjectInContainer(*pNewObj,nObjNum); 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir // flushViewObjectContacts() clears the VOC's and those invalidate 528*cdf0e10cSrcweir pObj->GetViewContact().flushViewObjectContacts(true); 529*cdf0e10cSrcweir 530*cdf0e10cSrcweir pNewObj->SetOrdNum(nObjNum); 531*cdf0e10cSrcweir pNewObj->SetObjList(this); 532*cdf0e10cSrcweir pNewObj->SetPage(pPage); 533*cdf0e10cSrcweir 534*cdf0e10cSrcweir // #110094# Inform the parent about change to allow invalidations at 535*cdf0e10cSrcweir // evtl. existing parent visualisations 536*cdf0e10cSrcweir impChildInserted(*pNewObj); 537*cdf0e10cSrcweir 538*cdf0e10cSrcweir pNewObj->SetInserted(sal_True); 539*cdf0e10cSrcweir SetRectsDirty(); 540*cdf0e10cSrcweir } 541*cdf0e10cSrcweir return pObj; 542*cdf0e10cSrcweir } 543*cdf0e10cSrcweir 544*cdf0e10cSrcweir SdrObject* SdrObjList::ReplaceObject(SdrObject* pNewObj, sal_uIntPtr nObjNum) 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir if (nObjNum >= maList.size()) 547*cdf0e10cSrcweir { 548*cdf0e10cSrcweir OSL_ASSERT(nObjNum<maList.size()); 549*cdf0e10cSrcweir return NULL; 550*cdf0e10cSrcweir } 551*cdf0e10cSrcweir if (pNewObj == NULL) 552*cdf0e10cSrcweir { 553*cdf0e10cSrcweir OSL_ASSERT(pNewObj!=NULL); 554*cdf0e10cSrcweir return NULL; 555*cdf0e10cSrcweir } 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir SdrObject* pObj=maList[nObjNum]; 558*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"SdrObjList::ReplaceObject: Object zum Removen nicht gefunden"); 559*cdf0e10cSrcweir if (pObj!=NULL) { 560*cdf0e10cSrcweir DBG_ASSERT(pObj->IsInserted(),"SdrObjList::ReplaceObject: ZObjekt hat keinen Inserted-Status"); 561*cdf0e10cSrcweir if (pModel!=NULL) { 562*cdf0e10cSrcweir // Hier muss ein anderer Broadcast her! 563*cdf0e10cSrcweir if (pObj->GetPage()!=NULL) { 564*cdf0e10cSrcweir SdrHint aHint(*pObj); 565*cdf0e10cSrcweir aHint.SetKind(HINT_OBJREMOVED); 566*cdf0e10cSrcweir pModel->Broadcast(aHint); 567*cdf0e10cSrcweir } 568*cdf0e10cSrcweir } 569*cdf0e10cSrcweir pObj->SetInserted(sal_False); 570*cdf0e10cSrcweir pObj->SetObjList(NULL); 571*cdf0e10cSrcweir pObj->SetPage(NULL); 572*cdf0e10cSrcweir ReplaceObjectInContainer(*pNewObj,nObjNum); 573*cdf0e10cSrcweir 574*cdf0e10cSrcweir // flushViewObjectContacts() clears the VOC's and those invalidate 575*cdf0e10cSrcweir pObj->GetViewContact().flushViewObjectContacts(true); 576*cdf0e10cSrcweir 577*cdf0e10cSrcweir pNewObj->SetOrdNum(nObjNum); 578*cdf0e10cSrcweir pNewObj->SetObjList(this); 579*cdf0e10cSrcweir pNewObj->SetPage(pPage); 580*cdf0e10cSrcweir 581*cdf0e10cSrcweir // #110094# Inform the parent about change to allow invalidations at 582*cdf0e10cSrcweir // evtl. existing parent visualisations 583*cdf0e10cSrcweir impChildInserted(*pNewObj); 584*cdf0e10cSrcweir 585*cdf0e10cSrcweir pNewObj->SetInserted(sal_True); 586*cdf0e10cSrcweir if (pModel!=NULL) { 587*cdf0e10cSrcweir // Hier muss ein anderer Broadcast her! 588*cdf0e10cSrcweir if (pNewObj->GetPage()!=NULL) { 589*cdf0e10cSrcweir SdrHint aHint(*pNewObj); 590*cdf0e10cSrcweir aHint.SetKind(HINT_OBJINSERTED); 591*cdf0e10cSrcweir pModel->Broadcast(aHint); 592*cdf0e10cSrcweir } 593*cdf0e10cSrcweir pModel->SetChanged(); 594*cdf0e10cSrcweir } 595*cdf0e10cSrcweir SetRectsDirty(); 596*cdf0e10cSrcweir } 597*cdf0e10cSrcweir return pObj; 598*cdf0e10cSrcweir } 599*cdf0e10cSrcweir 600*cdf0e10cSrcweir SdrObject* SdrObjList::NbcSetObjectOrdNum(sal_uIntPtr nOldObjNum, sal_uIntPtr nNewObjNum) 601*cdf0e10cSrcweir { 602*cdf0e10cSrcweir if (nOldObjNum >= maList.size() || nNewObjNum >= maList.size()) 603*cdf0e10cSrcweir { 604*cdf0e10cSrcweir OSL_ASSERT(nOldObjNum<maList.size()); 605*cdf0e10cSrcweir OSL_ASSERT(nNewObjNum<maList.size()); 606*cdf0e10cSrcweir return NULL; 607*cdf0e10cSrcweir } 608*cdf0e10cSrcweir 609*cdf0e10cSrcweir SdrObject* pObj=maList[nOldObjNum]; 610*cdf0e10cSrcweir if (nOldObjNum==nNewObjNum) return pObj; 611*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"SdrObjList::NbcSetObjectOrdNum: Object nicht gefunden"); 612*cdf0e10cSrcweir if (pObj!=NULL) { 613*cdf0e10cSrcweir DBG_ASSERT(pObj->IsInserted(),"SdrObjList::NbcSetObjectOrdNum: ZObjekt hat keinen Inserted-Status"); 614*cdf0e10cSrcweir RemoveObjectFromContainer(nOldObjNum); 615*cdf0e10cSrcweir 616*cdf0e10cSrcweir InsertObjectIntoContainer(*pObj,nNewObjNum); 617*cdf0e10cSrcweir 618*cdf0e10cSrcweir // #110094# No need to delete visualisation data since same object 619*cdf0e10cSrcweir // gets inserted again. Also a single ActionChanged is enough 620*cdf0e10cSrcweir pObj->ActionChanged(); 621*cdf0e10cSrcweir 622*cdf0e10cSrcweir pObj->SetOrdNum(nNewObjNum); 623*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 624*cdf0e10cSrcweir } 625*cdf0e10cSrcweir return pObj; 626*cdf0e10cSrcweir } 627*cdf0e10cSrcweir 628*cdf0e10cSrcweir SdrObject* SdrObjList::SetObjectOrdNum(sal_uIntPtr nOldObjNum, sal_uIntPtr nNewObjNum) 629*cdf0e10cSrcweir { 630*cdf0e10cSrcweir if (nOldObjNum >= maList.size() || nNewObjNum >= maList.size()) 631*cdf0e10cSrcweir { 632*cdf0e10cSrcweir OSL_ASSERT(nOldObjNum<maList.size()); 633*cdf0e10cSrcweir OSL_ASSERT(nNewObjNum<maList.size()); 634*cdf0e10cSrcweir return NULL; 635*cdf0e10cSrcweir } 636*cdf0e10cSrcweir 637*cdf0e10cSrcweir SdrObject* pObj=maList[nOldObjNum]; 638*cdf0e10cSrcweir if (nOldObjNum==nNewObjNum) return pObj; 639*cdf0e10cSrcweir DBG_ASSERT(pObj!=NULL,"SdrObjList::SetObjectOrdNum: Object nicht gefunden"); 640*cdf0e10cSrcweir if (pObj!=NULL) { 641*cdf0e10cSrcweir DBG_ASSERT(pObj->IsInserted(),"SdrObjList::SetObjectOrdNum: ZObjekt hat keinen Inserted-Status"); 642*cdf0e10cSrcweir RemoveObjectFromContainer(nOldObjNum); 643*cdf0e10cSrcweir InsertObjectIntoContainer(*pObj,nNewObjNum); 644*cdf0e10cSrcweir 645*cdf0e10cSrcweir // #110094#No need to delete visualisation data since same object 646*cdf0e10cSrcweir // gets inserted again. Also a single ActionChanged is enough 647*cdf0e10cSrcweir pObj->ActionChanged(); 648*cdf0e10cSrcweir 649*cdf0e10cSrcweir pObj->SetOrdNum(nNewObjNum); 650*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 651*cdf0e10cSrcweir if (pModel!=NULL) 652*cdf0e10cSrcweir { 653*cdf0e10cSrcweir // Hier muss ein anderer Broadcast her! 654*cdf0e10cSrcweir if (pObj->GetPage()!=NULL) pModel->Broadcast(SdrHint(*pObj)); 655*cdf0e10cSrcweir pModel->SetChanged(); 656*cdf0e10cSrcweir } 657*cdf0e10cSrcweir } 658*cdf0e10cSrcweir return pObj; 659*cdf0e10cSrcweir } 660*cdf0e10cSrcweir 661*cdf0e10cSrcweir const Rectangle& SdrObjList::GetAllObjSnapRect() const 662*cdf0e10cSrcweir { 663*cdf0e10cSrcweir if (bRectsDirty) { 664*cdf0e10cSrcweir ((SdrObjList*)this)->RecalcRects(); 665*cdf0e10cSrcweir ((SdrObjList*)this)->bRectsDirty=sal_False; 666*cdf0e10cSrcweir } 667*cdf0e10cSrcweir return aSnapRect; 668*cdf0e10cSrcweir } 669*cdf0e10cSrcweir 670*cdf0e10cSrcweir const Rectangle& SdrObjList::GetAllObjBoundRect() const 671*cdf0e10cSrcweir { 672*cdf0e10cSrcweir // #i106183# for deep group hierarchies like in chart2, the invalidates 673*cdf0e10cSrcweir // through the hierarchy are not correct; use a 2nd hint for the needed 674*cdf0e10cSrcweir // recalculation. Future versions will have no bool flag at all, but 675*cdf0e10cSrcweir // just aOutRect in empty state to representate an invalid state, thus 676*cdf0e10cSrcweir // it's a step in the right direction. 677*cdf0e10cSrcweir if (bRectsDirty || aOutRect.IsEmpty()) 678*cdf0e10cSrcweir { 679*cdf0e10cSrcweir ((SdrObjList*)this)->RecalcRects(); 680*cdf0e10cSrcweir ((SdrObjList*)this)->bRectsDirty=sal_False; 681*cdf0e10cSrcweir } 682*cdf0e10cSrcweir return aOutRect; 683*cdf0e10cSrcweir } 684*cdf0e10cSrcweir 685*cdf0e10cSrcweir void SdrObjList::NbcReformatAllTextObjects() 686*cdf0e10cSrcweir { 687*cdf0e10cSrcweir sal_uIntPtr nAnz=GetObjCount(); 688*cdf0e10cSrcweir sal_uIntPtr nNum=0; 689*cdf0e10cSrcweir 690*cdf0e10cSrcweir Printer* pPrinter = NULL; 691*cdf0e10cSrcweir 692*cdf0e10cSrcweir if (pModel) 693*cdf0e10cSrcweir { 694*cdf0e10cSrcweir if (pModel->GetRefDevice() && pModel->GetRefDevice()->GetOutDevType() == OUTDEV_PRINTER) 695*cdf0e10cSrcweir { 696*cdf0e10cSrcweir // Kein RefDevice oder RefDevice kein Printer 697*cdf0e10cSrcweir pPrinter = (Printer*) pModel->GetRefDevice(); 698*cdf0e10cSrcweir } 699*cdf0e10cSrcweir } 700*cdf0e10cSrcweir 701*cdf0e10cSrcweir while (nNum<nAnz) 702*cdf0e10cSrcweir { 703*cdf0e10cSrcweir SdrObject* pObj = GetObj(nNum); 704*cdf0e10cSrcweir if (pPrinter && 705*cdf0e10cSrcweir pObj->GetObjInventor() == SdrInventor && 706*cdf0e10cSrcweir pObj->GetObjIdentifier() == OBJ_OLE2 && 707*cdf0e10cSrcweir !( (SdrOle2Obj*) pObj )->IsEmpty() ) 708*cdf0e10cSrcweir { 709*cdf0e10cSrcweir //const SvInPlaceObjectRef& xObjRef = ((SdrOle2Obj*) pObj)->GetObjRef(); 710*cdf0e10cSrcweir //TODO/LATER: PrinterChangeNotification needed 711*cdf0e10cSrcweir //if( xObjRef.Is() && ( xObjRef->GetMiscStatus() & SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE ) ) 712*cdf0e10cSrcweir // xObjRef->OnDocumentPrinterChanged(pPrinter); 713*cdf0e10cSrcweir } 714*cdf0e10cSrcweir 715*cdf0e10cSrcweir pObj->NbcReformatText(); 716*cdf0e10cSrcweir nAnz=GetObjCount(); // ReformatText may delete an object 717*cdf0e10cSrcweir nNum++; 718*cdf0e10cSrcweir } 719*cdf0e10cSrcweir 720*cdf0e10cSrcweir } 721*cdf0e10cSrcweir 722*cdf0e10cSrcweir void SdrObjList::ReformatAllTextObjects() 723*cdf0e10cSrcweir { 724*cdf0e10cSrcweir NbcReformatAllTextObjects(); 725*cdf0e10cSrcweir } 726*cdf0e10cSrcweir 727*cdf0e10cSrcweir /** steps over all available objects and reformats all 728*cdf0e10cSrcweir edge objects that are connected to other objects so that 729*cdf0e10cSrcweir they may reposition itselfs. 730*cdf0e10cSrcweir #103122# 731*cdf0e10cSrcweir */ 732*cdf0e10cSrcweir void SdrObjList::ReformatAllEdgeObjects() 733*cdf0e10cSrcweir { 734*cdf0e10cSrcweir const sal_uInt32 nCount=GetObjCount(); 735*cdf0e10cSrcweir sal_uInt32 nObj; 736*cdf0e10cSrcweir 737*cdf0e10cSrcweir for( nObj = 0; nObj < nCount; nObj++ ) 738*cdf0e10cSrcweir { 739*cdf0e10cSrcweir SdrObject* pObj = GetObj(nObj); 740*cdf0e10cSrcweir if( pObj->ISA(SdrEdgeObj) ) 741*cdf0e10cSrcweir static_cast<SdrEdgeObj*>(pObj)->Reformat(); 742*cdf0e10cSrcweir } 743*cdf0e10cSrcweir } 744*cdf0e10cSrcweir 745*cdf0e10cSrcweir void SdrObjList::BurnInStyleSheetAttributes() 746*cdf0e10cSrcweir { 747*cdf0e10cSrcweir for(sal_uInt32 a(0L); a < GetObjCount(); a++) 748*cdf0e10cSrcweir { 749*cdf0e10cSrcweir GetObj(a)->BurnInStyleSheetAttributes(); 750*cdf0e10cSrcweir } 751*cdf0e10cSrcweir } 752*cdf0e10cSrcweir 753*cdf0e10cSrcweir sal_uIntPtr SdrObjList::GetObjCount() const 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir return maList.size(); 756*cdf0e10cSrcweir } 757*cdf0e10cSrcweir 758*cdf0e10cSrcweir 759*cdf0e10cSrcweir 760*cdf0e10cSrcweir 761*cdf0e10cSrcweir SdrObject* SdrObjList::GetObj(sal_uIntPtr nNum) const 762*cdf0e10cSrcweir { 763*cdf0e10cSrcweir if (nNum >= maList.size()) 764*cdf0e10cSrcweir { 765*cdf0e10cSrcweir OSL_ASSERT(nNum<maList.size()); 766*cdf0e10cSrcweir return NULL; 767*cdf0e10cSrcweir } 768*cdf0e10cSrcweir else 769*cdf0e10cSrcweir return maList[nNum]; 770*cdf0e10cSrcweir } 771*cdf0e10cSrcweir 772*cdf0e10cSrcweir 773*cdf0e10cSrcweir 774*cdf0e10cSrcweir 775*cdf0e10cSrcweir FASTBOOL SdrObjList::IsReadOnly() const 776*cdf0e10cSrcweir { 777*cdf0e10cSrcweir FASTBOOL bRet=sal_False; 778*cdf0e10cSrcweir if (pPage!=NULL && pPage!=this) bRet=pPage->IsReadOnly(); 779*cdf0e10cSrcweir return bRet; 780*cdf0e10cSrcweir } 781*cdf0e10cSrcweir 782*cdf0e10cSrcweir sal_uIntPtr SdrObjList::CountAllObjects() const 783*cdf0e10cSrcweir { 784*cdf0e10cSrcweir sal_uIntPtr nCnt=GetObjCount(); 785*cdf0e10cSrcweir sal_uIntPtr nAnz=nCnt; 786*cdf0e10cSrcweir for (sal_uInt16 nNum=0; nNum<nAnz; nNum++) { 787*cdf0e10cSrcweir SdrObjList* pSubOL=GetObj(nNum)->GetSubList(); 788*cdf0e10cSrcweir if (pSubOL!=NULL) { 789*cdf0e10cSrcweir nCnt+=pSubOL->CountAllObjects(); 790*cdf0e10cSrcweir } 791*cdf0e10cSrcweir } 792*cdf0e10cSrcweir return nCnt; 793*cdf0e10cSrcweir } 794*cdf0e10cSrcweir 795*cdf0e10cSrcweir void SdrObjList::ForceSwapInObjects() const 796*cdf0e10cSrcweir { 797*cdf0e10cSrcweir sal_uIntPtr nObjAnz=GetObjCount(); 798*cdf0e10cSrcweir for (sal_uIntPtr nObjNum=nObjAnz; nObjNum>0;) { 799*cdf0e10cSrcweir SdrObject* pObj=GetObj(--nObjNum); 800*cdf0e10cSrcweir SdrGrafObj* pGrafObj=PTR_CAST(SdrGrafObj,pObj); 801*cdf0e10cSrcweir if (pGrafObj!=NULL) { 802*cdf0e10cSrcweir pGrafObj->ForceSwapIn(); 803*cdf0e10cSrcweir } 804*cdf0e10cSrcweir SdrObjList* pOL=pObj->GetSubList(); 805*cdf0e10cSrcweir if (pOL!=NULL) { 806*cdf0e10cSrcweir pOL->ForceSwapInObjects(); 807*cdf0e10cSrcweir } 808*cdf0e10cSrcweir } 809*cdf0e10cSrcweir } 810*cdf0e10cSrcweir 811*cdf0e10cSrcweir void SdrObjList::ForceSwapOutObjects() const 812*cdf0e10cSrcweir { 813*cdf0e10cSrcweir sal_uIntPtr nObjAnz=GetObjCount(); 814*cdf0e10cSrcweir for (sal_uIntPtr nObjNum=nObjAnz; nObjNum>0;) { 815*cdf0e10cSrcweir SdrObject* pObj=GetObj(--nObjNum); 816*cdf0e10cSrcweir SdrGrafObj* pGrafObj=PTR_CAST(SdrGrafObj,pObj); 817*cdf0e10cSrcweir if (pGrafObj!=NULL) { 818*cdf0e10cSrcweir pGrafObj->ForceSwapOut(); 819*cdf0e10cSrcweir } 820*cdf0e10cSrcweir SdrObjList* pOL=pObj->GetSubList(); 821*cdf0e10cSrcweir if (pOL!=NULL) { 822*cdf0e10cSrcweir pOL->ForceSwapOutObjects(); 823*cdf0e10cSrcweir } 824*cdf0e10cSrcweir } 825*cdf0e10cSrcweir } 826*cdf0e10cSrcweir 827*cdf0e10cSrcweir void SdrObjList::FlattenGroups() 828*cdf0e10cSrcweir { 829*cdf0e10cSrcweir sal_Int32 nObj = GetObjCount(); 830*cdf0e10cSrcweir sal_Int32 i; 831*cdf0e10cSrcweir for( i=nObj-1; i>=0; --i) 832*cdf0e10cSrcweir UnGroupObj(i); 833*cdf0e10cSrcweir } 834*cdf0e10cSrcweir 835*cdf0e10cSrcweir void SdrObjList::UnGroupObj( sal_uIntPtr nObjNum ) 836*cdf0e10cSrcweir { 837*cdf0e10cSrcweir // if the given object is no group, this method is a noop 838*cdf0e10cSrcweir SdrObject* pUngroupObj = GetObj( nObjNum ); 839*cdf0e10cSrcweir if( pUngroupObj ) 840*cdf0e10cSrcweir { 841*cdf0e10cSrcweir SdrObjList* pSrcLst = pUngroupObj->GetSubList(); 842*cdf0e10cSrcweir //sal_Int32 nCount( 0 ); 843*cdf0e10cSrcweir if( pUngroupObj->ISA( SdrObjGroup ) && pSrcLst ) 844*cdf0e10cSrcweir { 845*cdf0e10cSrcweir SdrObjGroup* pUngroupGroup = static_cast< SdrObjGroup* > (pUngroupObj); 846*cdf0e10cSrcweir 847*cdf0e10cSrcweir // ungroup recursively (has to be head recursion, 848*cdf0e10cSrcweir // otherwise our indices will get trashed when doing it in 849*cdf0e10cSrcweir // the loop) 850*cdf0e10cSrcweir pSrcLst->FlattenGroups(); 851*cdf0e10cSrcweir 852*cdf0e10cSrcweir // the position at which we insert the members of rUngroupGroup 853*cdf0e10cSrcweir sal_Int32 nInsertPos( pUngroupGroup->GetOrdNum() ); 854*cdf0e10cSrcweir 855*cdf0e10cSrcweir SdrObject* pObj; 856*cdf0e10cSrcweir sal_Int32 i, nAnz = pSrcLst->GetObjCount(); 857*cdf0e10cSrcweir for( i=0; i<nAnz; ++i ) 858*cdf0e10cSrcweir { 859*cdf0e10cSrcweir pObj = pSrcLst->RemoveObject(0); 860*cdf0e10cSrcweir SdrInsertReason aReason(SDRREASON_VIEWCALL, pUngroupGroup); 861*cdf0e10cSrcweir InsertObject(pObj, nInsertPos, &aReason); 862*cdf0e10cSrcweir ++nInsertPos; 863*cdf0e10cSrcweir } 864*cdf0e10cSrcweir 865*cdf0e10cSrcweir RemoveObject(nInsertPos); 866*cdf0e10cSrcweir } 867*cdf0e10cSrcweir } 868*cdf0e10cSrcweir #ifdef DBG_UTIL 869*cdf0e10cSrcweir else 870*cdf0e10cSrcweir DBG_ERROR("SdrObjList::UnGroupObj: object index invalid"); 871*cdf0e10cSrcweir #endif 872*cdf0e10cSrcweir } 873*cdf0e10cSrcweir 874*cdf0e10cSrcweir 875*cdf0e10cSrcweir 876*cdf0e10cSrcweir 877*cdf0e10cSrcweir bool SdrObjList::HasObjectNavigationOrder (void) const 878*cdf0e10cSrcweir { 879*cdf0e10cSrcweir return mpNavigationOrder.get() != NULL; 880*cdf0e10cSrcweir } 881*cdf0e10cSrcweir 882*cdf0e10cSrcweir 883*cdf0e10cSrcweir 884*cdf0e10cSrcweir 885*cdf0e10cSrcweir void SdrObjList::SetObjectNavigationPosition ( 886*cdf0e10cSrcweir SdrObject& rObject, 887*cdf0e10cSrcweir const sal_uInt32 nNewPosition) 888*cdf0e10cSrcweir { 889*cdf0e10cSrcweir // When the navigation order container has not yet been created then 890*cdf0e10cSrcweir // create one now. It is initialized with the z-order taken from 891*cdf0e10cSrcweir // maList. 892*cdf0e10cSrcweir if (mpNavigationOrder.get() == NULL) 893*cdf0e10cSrcweir { 894*cdf0e10cSrcweir mpNavigationOrder.reset(new WeakSdrObjectContainerType(maList.size())); 895*cdf0e10cSrcweir ::std::copy( 896*cdf0e10cSrcweir maList.begin(), 897*cdf0e10cSrcweir maList.end(), 898*cdf0e10cSrcweir mpNavigationOrder->begin()); 899*cdf0e10cSrcweir } 900*cdf0e10cSrcweir OSL_ASSERT(mpNavigationOrder.get()!=NULL); 901*cdf0e10cSrcweir OSL_ASSERT( mpNavigationOrder->size() == maList.size()); 902*cdf0e10cSrcweir 903*cdf0e10cSrcweir SdrObjectWeakRef aReference (&rObject); 904*cdf0e10cSrcweir 905*cdf0e10cSrcweir // Look up the object whose navigation position is to be changed. 906*cdf0e10cSrcweir WeakSdrObjectContainerType::iterator iObject (::std::find( 907*cdf0e10cSrcweir mpNavigationOrder->begin(), 908*cdf0e10cSrcweir mpNavigationOrder->end(), 909*cdf0e10cSrcweir aReference)); 910*cdf0e10cSrcweir if (iObject == mpNavigationOrder->end()) 911*cdf0e10cSrcweir { 912*cdf0e10cSrcweir // The given object is not a member of the navigation order. 913*cdf0e10cSrcweir return; 914*cdf0e10cSrcweir } 915*cdf0e10cSrcweir 916*cdf0e10cSrcweir // Move the object to its new position. 917*cdf0e10cSrcweir const sal_uInt32 nOldPosition = ::std::distance(mpNavigationOrder->begin(), iObject); 918*cdf0e10cSrcweir if (nOldPosition != nNewPosition) 919*cdf0e10cSrcweir { 920*cdf0e10cSrcweir mpNavigationOrder->erase(iObject); 921*cdf0e10cSrcweir sal_uInt32 nInsertPosition (nNewPosition); 922*cdf0e10cSrcweir // Adapt insertion position for the just erased object. 923*cdf0e10cSrcweir if (nNewPosition >= nOldPosition) 924*cdf0e10cSrcweir nInsertPosition -= 1; 925*cdf0e10cSrcweir if (nInsertPosition >= mpNavigationOrder->size()) 926*cdf0e10cSrcweir mpNavigationOrder->push_back(aReference); 927*cdf0e10cSrcweir else 928*cdf0e10cSrcweir mpNavigationOrder->insert(mpNavigationOrder->begin()+nInsertPosition, aReference); 929*cdf0e10cSrcweir 930*cdf0e10cSrcweir mbIsNavigationOrderDirty = true; 931*cdf0e10cSrcweir 932*cdf0e10cSrcweir // The navigation order is written out to file so mark the model as modified. 933*cdf0e10cSrcweir if (pModel != NULL) 934*cdf0e10cSrcweir pModel->SetChanged(); 935*cdf0e10cSrcweir } 936*cdf0e10cSrcweir } 937*cdf0e10cSrcweir 938*cdf0e10cSrcweir 939*cdf0e10cSrcweir 940*cdf0e10cSrcweir 941*cdf0e10cSrcweir SdrObject* SdrObjList::GetObjectForNavigationPosition (const sal_uInt32 nNavigationPosition) const 942*cdf0e10cSrcweir { 943*cdf0e10cSrcweir if (HasObjectNavigationOrder()) 944*cdf0e10cSrcweir { 945*cdf0e10cSrcweir // There is a user defined navigation order. Make sure the object 946*cdf0e10cSrcweir // index is correct and look up the object in mpNavigationOrder. 947*cdf0e10cSrcweir if (nNavigationPosition >= mpNavigationOrder->size()) 948*cdf0e10cSrcweir { 949*cdf0e10cSrcweir OSL_ASSERT(nNavigationPosition < mpNavigationOrder->size()); 950*cdf0e10cSrcweir } 951*cdf0e10cSrcweir else 952*cdf0e10cSrcweir return (*mpNavigationOrder)[nNavigationPosition].get(); 953*cdf0e10cSrcweir } 954*cdf0e10cSrcweir else 955*cdf0e10cSrcweir { 956*cdf0e10cSrcweir // There is no user defined navigation order. Use the z-order 957*cdf0e10cSrcweir // instead. 958*cdf0e10cSrcweir if (nNavigationPosition >= maList.size()) 959*cdf0e10cSrcweir { 960*cdf0e10cSrcweir OSL_ASSERT(nNavigationPosition < maList.size()); 961*cdf0e10cSrcweir } 962*cdf0e10cSrcweir else 963*cdf0e10cSrcweir return maList[nNavigationPosition]; 964*cdf0e10cSrcweir } 965*cdf0e10cSrcweir return NULL; 966*cdf0e10cSrcweir } 967*cdf0e10cSrcweir 968*cdf0e10cSrcweir 969*cdf0e10cSrcweir 970*cdf0e10cSrcweir 971*cdf0e10cSrcweir void SdrObjList::ClearObjectNavigationOrder (void) 972*cdf0e10cSrcweir { 973*cdf0e10cSrcweir mpNavigationOrder.reset(); 974*cdf0e10cSrcweir mbIsNavigationOrderDirty = true; 975*cdf0e10cSrcweir } 976*cdf0e10cSrcweir 977*cdf0e10cSrcweir 978*cdf0e10cSrcweir 979*cdf0e10cSrcweir 980*cdf0e10cSrcweir bool SdrObjList::RecalcNavigationPositions (void) 981*cdf0e10cSrcweir { 982*cdf0e10cSrcweir bool bUpToDate (false); 983*cdf0e10cSrcweir 984*cdf0e10cSrcweir if (mbIsNavigationOrderDirty) 985*cdf0e10cSrcweir { 986*cdf0e10cSrcweir if (mpNavigationOrder.get() != NULL) 987*cdf0e10cSrcweir { 988*cdf0e10cSrcweir mbIsNavigationOrderDirty = false; 989*cdf0e10cSrcweir 990*cdf0e10cSrcweir WeakSdrObjectContainerType::iterator iObject; 991*cdf0e10cSrcweir WeakSdrObjectContainerType::const_iterator iEnd (mpNavigationOrder->end()); 992*cdf0e10cSrcweir sal_uInt32 nIndex (0); 993*cdf0e10cSrcweir for (iObject=mpNavigationOrder->begin(); iObject!=iEnd; ++iObject,++nIndex) 994*cdf0e10cSrcweir (*iObject)->SetNavigationPosition(nIndex); 995*cdf0e10cSrcweir 996*cdf0e10cSrcweir bUpToDate = true; 997*cdf0e10cSrcweir } 998*cdf0e10cSrcweir } 999*cdf0e10cSrcweir 1000*cdf0e10cSrcweir return mpNavigationOrder.get() != NULL; 1001*cdf0e10cSrcweir } 1002*cdf0e10cSrcweir 1003*cdf0e10cSrcweir 1004*cdf0e10cSrcweir 1005*cdf0e10cSrcweir 1006*cdf0e10cSrcweir void SdrObjList::SetNavigationOrder (const uno::Reference<container::XIndexAccess>& rxOrder) 1007*cdf0e10cSrcweir { 1008*cdf0e10cSrcweir if (rxOrder.is()) 1009*cdf0e10cSrcweir { 1010*cdf0e10cSrcweir const sal_Int32 nCount = rxOrder->getCount(); 1011*cdf0e10cSrcweir if ((sal_uInt32)nCount != maList.size()) 1012*cdf0e10cSrcweir return; 1013*cdf0e10cSrcweir 1014*cdf0e10cSrcweir if (mpNavigationOrder.get() == NULL) 1015*cdf0e10cSrcweir mpNavigationOrder.reset(new WeakSdrObjectContainerType(nCount)); 1016*cdf0e10cSrcweir 1017*cdf0e10cSrcweir for (sal_Int32 nIndex=0; nIndex<nCount; ++nIndex) 1018*cdf0e10cSrcweir { 1019*cdf0e10cSrcweir uno::Reference<uno::XInterface> xShape (rxOrder->getByIndex(nIndex), uno::UNO_QUERY); 1020*cdf0e10cSrcweir SdrObject* pObject = SdrObject::getSdrObjectFromXShape(xShape); 1021*cdf0e10cSrcweir if (pObject == NULL) 1022*cdf0e10cSrcweir break; 1023*cdf0e10cSrcweir (*mpNavigationOrder)[nIndex] = pObject; 1024*cdf0e10cSrcweir } 1025*cdf0e10cSrcweir 1026*cdf0e10cSrcweir mbIsNavigationOrderDirty = true; 1027*cdf0e10cSrcweir } 1028*cdf0e10cSrcweir else 1029*cdf0e10cSrcweir ClearObjectNavigationOrder(); 1030*cdf0e10cSrcweir } 1031*cdf0e10cSrcweir 1032*cdf0e10cSrcweir 1033*cdf0e10cSrcweir 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir void SdrObjList::InsertObjectIntoContainer ( 1036*cdf0e10cSrcweir SdrObject& rObject, 1037*cdf0e10cSrcweir const sal_uInt32 nInsertPosition) 1038*cdf0e10cSrcweir { 1039*cdf0e10cSrcweir OSL_ASSERT(nInsertPosition<=maList.size()); 1040*cdf0e10cSrcweir 1041*cdf0e10cSrcweir // Update the navigation positions. 1042*cdf0e10cSrcweir if (HasObjectNavigationOrder()) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir // The new object does not have a user defined position so append it 1045*cdf0e10cSrcweir // to the list. 1046*cdf0e10cSrcweir rObject.SetNavigationPosition(mpNavigationOrder->size()); 1047*cdf0e10cSrcweir mpNavigationOrder->push_back(&rObject); 1048*cdf0e10cSrcweir } 1049*cdf0e10cSrcweir 1050*cdf0e10cSrcweir // Insert object into object list. Because the insert() method requires 1051*cdf0e10cSrcweir // a valid iterator as insertion position, we have to use push_back() to 1052*cdf0e10cSrcweir // insert at the end of the list. 1053*cdf0e10cSrcweir if (nInsertPosition >= maList.size()) 1054*cdf0e10cSrcweir maList.push_back(&rObject); 1055*cdf0e10cSrcweir else 1056*cdf0e10cSrcweir maList.insert(maList.begin()+nInsertPosition, &rObject); 1057*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 1058*cdf0e10cSrcweir } 1059*cdf0e10cSrcweir 1060*cdf0e10cSrcweir 1061*cdf0e10cSrcweir 1062*cdf0e10cSrcweir 1063*cdf0e10cSrcweir void SdrObjList::ReplaceObjectInContainer ( 1064*cdf0e10cSrcweir SdrObject& rNewObject, 1065*cdf0e10cSrcweir const sal_uInt32 nObjectPosition) 1066*cdf0e10cSrcweir { 1067*cdf0e10cSrcweir if (nObjectPosition >= maList.size()) 1068*cdf0e10cSrcweir { 1069*cdf0e10cSrcweir OSL_ASSERT(nObjectPosition<maList.size()); 1070*cdf0e10cSrcweir return; 1071*cdf0e10cSrcweir } 1072*cdf0e10cSrcweir 1073*cdf0e10cSrcweir // Update the navigation positions. 1074*cdf0e10cSrcweir if (HasObjectNavigationOrder()) 1075*cdf0e10cSrcweir { 1076*cdf0e10cSrcweir // A user defined position of the object that is to be replaced is 1077*cdf0e10cSrcweir // not transferred to the new object so erase the former and append 1078*cdf0e10cSrcweir // the later object from/to the navigation order. 1079*cdf0e10cSrcweir OSL_ASSERT(nObjectPosition < maList.size()); 1080*cdf0e10cSrcweir SdrObjectWeakRef aReference (maList[nObjectPosition]); 1081*cdf0e10cSrcweir WeakSdrObjectContainerType::iterator iObject (::std::find( 1082*cdf0e10cSrcweir mpNavigationOrder->begin(), 1083*cdf0e10cSrcweir mpNavigationOrder->end(), 1084*cdf0e10cSrcweir aReference)); 1085*cdf0e10cSrcweir if (iObject != mpNavigationOrder->end()) 1086*cdf0e10cSrcweir mpNavigationOrder->erase(iObject); 1087*cdf0e10cSrcweir 1088*cdf0e10cSrcweir mpNavigationOrder->push_back(&rNewObject); 1089*cdf0e10cSrcweir 1090*cdf0e10cSrcweir mbIsNavigationOrderDirty = true; 1091*cdf0e10cSrcweir } 1092*cdf0e10cSrcweir 1093*cdf0e10cSrcweir maList[nObjectPosition] = &rNewObject; 1094*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 1095*cdf0e10cSrcweir } 1096*cdf0e10cSrcweir 1097*cdf0e10cSrcweir 1098*cdf0e10cSrcweir 1099*cdf0e10cSrcweir 1100*cdf0e10cSrcweir void SdrObjList::RemoveObjectFromContainer ( 1101*cdf0e10cSrcweir const sal_uInt32 nObjectPosition) 1102*cdf0e10cSrcweir { 1103*cdf0e10cSrcweir if (nObjectPosition >= maList.size()) 1104*cdf0e10cSrcweir { 1105*cdf0e10cSrcweir OSL_ASSERT(nObjectPosition<maList.size()); 1106*cdf0e10cSrcweir return; 1107*cdf0e10cSrcweir } 1108*cdf0e10cSrcweir 1109*cdf0e10cSrcweir // Update the navigation positions. 1110*cdf0e10cSrcweir if (HasObjectNavigationOrder()) 1111*cdf0e10cSrcweir { 1112*cdf0e10cSrcweir SdrObjectWeakRef aReference (maList[nObjectPosition]); 1113*cdf0e10cSrcweir WeakSdrObjectContainerType::iterator iObject (::std::find( 1114*cdf0e10cSrcweir mpNavigationOrder->begin(), 1115*cdf0e10cSrcweir mpNavigationOrder->end(), 1116*cdf0e10cSrcweir aReference)); 1117*cdf0e10cSrcweir if (iObject != mpNavigationOrder->end()) 1118*cdf0e10cSrcweir mpNavigationOrder->erase(iObject); 1119*cdf0e10cSrcweir mbIsNavigationOrderDirty = true; 1120*cdf0e10cSrcweir } 1121*cdf0e10cSrcweir 1122*cdf0e10cSrcweir maList.erase(maList.begin()+nObjectPosition); 1123*cdf0e10cSrcweir bObjOrdNumsDirty=sal_True; 1124*cdf0e10cSrcweir } 1125*cdf0e10cSrcweir 1126*cdf0e10cSrcweir 1127*cdf0e10cSrcweir 1128*cdf0e10cSrcweir 1129*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 1130*cdf0e10cSrcweir 1131*cdf0e10cSrcweir void SdrPageGridFrameList::Clear() 1132*cdf0e10cSrcweir { 1133*cdf0e10cSrcweir sal_uInt16 nAnz=GetCount(); 1134*cdf0e10cSrcweir for (sal_uInt16 i=0; i<nAnz; i++) { 1135*cdf0e10cSrcweir delete GetObject(i); 1136*cdf0e10cSrcweir } 1137*cdf0e10cSrcweir aList.Clear(); 1138*cdf0e10cSrcweir } 1139*cdf0e10cSrcweir 1140*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 1141*cdf0e10cSrcweir // #111111# PageUser section 1142*cdf0e10cSrcweir 1143*cdf0e10cSrcweir void SdrPage::AddPageUser(sdr::PageUser& rNewUser) 1144*cdf0e10cSrcweir { 1145*cdf0e10cSrcweir maPageUsers.push_back(&rNewUser); 1146*cdf0e10cSrcweir } 1147*cdf0e10cSrcweir 1148*cdf0e10cSrcweir void SdrPage::RemovePageUser(sdr::PageUser& rOldUser) 1149*cdf0e10cSrcweir { 1150*cdf0e10cSrcweir const ::sdr::PageUserVector::iterator aFindResult = ::std::find(maPageUsers.begin(), maPageUsers.end(), &rOldUser); 1151*cdf0e10cSrcweir if(aFindResult != maPageUsers.end()) 1152*cdf0e10cSrcweir { 1153*cdf0e10cSrcweir maPageUsers.erase(aFindResult); 1154*cdf0e10cSrcweir } 1155*cdf0e10cSrcweir } 1156*cdf0e10cSrcweir 1157*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 1158*cdf0e10cSrcweir // #110094# DrawContact section 1159*cdf0e10cSrcweir 1160*cdf0e10cSrcweir sdr::contact::ViewContact* SdrPage::CreateObjectSpecificViewContact() 1161*cdf0e10cSrcweir { 1162*cdf0e10cSrcweir return new sdr::contact::ViewContactOfSdrPage(*this); 1163*cdf0e10cSrcweir } 1164*cdf0e10cSrcweir 1165*cdf0e10cSrcweir sdr::contact::ViewContact& SdrPage::GetViewContact() const 1166*cdf0e10cSrcweir { 1167*cdf0e10cSrcweir if(!mpViewContact) 1168*cdf0e10cSrcweir { 1169*cdf0e10cSrcweir const_cast< SdrPage* >(this)->mpViewContact = 1170*cdf0e10cSrcweir const_cast< SdrPage* >(this)->CreateObjectSpecificViewContact(); 1171*cdf0e10cSrcweir } 1172*cdf0e10cSrcweir 1173*cdf0e10cSrcweir return *mpViewContact; 1174*cdf0e10cSrcweir } 1175*cdf0e10cSrcweir 1176*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 1177*cdf0e10cSrcweir 1178*cdf0e10cSrcweir void SdrPageProperties::ImpRemoveStyleSheet() 1179*cdf0e10cSrcweir { 1180*cdf0e10cSrcweir if(mpStyleSheet) 1181*cdf0e10cSrcweir { 1182*cdf0e10cSrcweir EndListening(*mpStyleSheet); 1183*cdf0e10cSrcweir mpProperties->SetParent(0); 1184*cdf0e10cSrcweir mpStyleSheet = 0; 1185*cdf0e10cSrcweir } 1186*cdf0e10cSrcweir } 1187*cdf0e10cSrcweir 1188*cdf0e10cSrcweir void SdrPageProperties::ImpAddStyleSheet(SfxStyleSheet& rNewStyleSheet) 1189*cdf0e10cSrcweir { 1190*cdf0e10cSrcweir if(mpStyleSheet != &rNewStyleSheet) 1191*cdf0e10cSrcweir { 1192*cdf0e10cSrcweir ImpRemoveStyleSheet(); 1193*cdf0e10cSrcweir mpStyleSheet = &rNewStyleSheet; 1194*cdf0e10cSrcweir StartListening(rNewStyleSheet); 1195*cdf0e10cSrcweir mpProperties->SetParent(&rNewStyleSheet.GetItemSet()); 1196*cdf0e10cSrcweir } 1197*cdf0e10cSrcweir } 1198*cdf0e10cSrcweir 1199*cdf0e10cSrcweir void ImpPageChange(SdrPage& rSdrPage) 1200*cdf0e10cSrcweir { 1201*cdf0e10cSrcweir rSdrPage.ActionChanged(); 1202*cdf0e10cSrcweir 1203*cdf0e10cSrcweir if(rSdrPage.GetModel()) 1204*cdf0e10cSrcweir { 1205*cdf0e10cSrcweir rSdrPage.GetModel()->SetChanged(true); 1206*cdf0e10cSrcweir SdrHint aHint(HINT_PAGEORDERCHG); 1207*cdf0e10cSrcweir aHint.SetPage(&rSdrPage); 1208*cdf0e10cSrcweir rSdrPage.GetModel()->Broadcast(aHint); 1209*cdf0e10cSrcweir } 1210*cdf0e10cSrcweir } 1211*cdf0e10cSrcweir 1212*cdf0e10cSrcweir SdrPageProperties::SdrPageProperties(SdrPage& rSdrPage) 1213*cdf0e10cSrcweir : SfxListener(), 1214*cdf0e10cSrcweir mpSdrPage(&rSdrPage), 1215*cdf0e10cSrcweir mpStyleSheet(0), 1216*cdf0e10cSrcweir mpProperties(new SfxItemSet(mpSdrPage->GetModel()->GetItemPool(), XATTR_FILL_FIRST, XATTR_FILL_LAST)) 1217*cdf0e10cSrcweir { 1218*cdf0e10cSrcweir if(!rSdrPage.IsMasterPage()) 1219*cdf0e10cSrcweir { 1220*cdf0e10cSrcweir mpProperties->Put(XFillStyleItem(XFILL_NONE)); 1221*cdf0e10cSrcweir } 1222*cdf0e10cSrcweir } 1223*cdf0e10cSrcweir 1224*cdf0e10cSrcweir SdrPageProperties::~SdrPageProperties() 1225*cdf0e10cSrcweir { 1226*cdf0e10cSrcweir ImpRemoveStyleSheet(); 1227*cdf0e10cSrcweir delete mpProperties; 1228*cdf0e10cSrcweir } 1229*cdf0e10cSrcweir 1230*cdf0e10cSrcweir void SdrPageProperties::Notify(SfxBroadcaster& /*rBC*/, const SfxHint& rHint) 1231*cdf0e10cSrcweir { 1232*cdf0e10cSrcweir const SfxSimpleHint* pSimpleHint = dynamic_cast< const SfxSimpleHint* >(&rHint); 1233*cdf0e10cSrcweir 1234*cdf0e10cSrcweir if(pSimpleHint) 1235*cdf0e10cSrcweir { 1236*cdf0e10cSrcweir switch(pSimpleHint->GetId()) 1237*cdf0e10cSrcweir { 1238*cdf0e10cSrcweir case SFX_HINT_DATACHANGED : 1239*cdf0e10cSrcweir { 1240*cdf0e10cSrcweir // notify change, broadcast 1241*cdf0e10cSrcweir ImpPageChange(*mpSdrPage); 1242*cdf0e10cSrcweir break; 1243*cdf0e10cSrcweir } 1244*cdf0e10cSrcweir case SFX_HINT_DYING : 1245*cdf0e10cSrcweir { 1246*cdf0e10cSrcweir // Style needs to be forgotten 1247*cdf0e10cSrcweir ImpRemoveStyleSheet(); 1248*cdf0e10cSrcweir break; 1249*cdf0e10cSrcweir } 1250*cdf0e10cSrcweir } 1251*cdf0e10cSrcweir } 1252*cdf0e10cSrcweir } 1253*cdf0e10cSrcweir 1254*cdf0e10cSrcweir const SfxItemSet& SdrPageProperties::GetItemSet() const 1255*cdf0e10cSrcweir { 1256*cdf0e10cSrcweir return *mpProperties; 1257*cdf0e10cSrcweir } 1258*cdf0e10cSrcweir 1259*cdf0e10cSrcweir void SdrPageProperties::PutItemSet(const SfxItemSet& rSet) 1260*cdf0e10cSrcweir { 1261*cdf0e10cSrcweir OSL_ENSURE(!mpSdrPage->IsMasterPage(), "Item set at MasterPage Attributes (!)"); 1262*cdf0e10cSrcweir mpProperties->Put(rSet); 1263*cdf0e10cSrcweir ImpPageChange(*mpSdrPage); 1264*cdf0e10cSrcweir } 1265*cdf0e10cSrcweir 1266*cdf0e10cSrcweir void SdrPageProperties::PutItem(const SfxPoolItem& rItem) 1267*cdf0e10cSrcweir { 1268*cdf0e10cSrcweir OSL_ENSURE(!mpSdrPage->IsMasterPage(), "Item set at MasterPage Attributes (!)"); 1269*cdf0e10cSrcweir mpProperties->Put(rItem); 1270*cdf0e10cSrcweir ImpPageChange(*mpSdrPage); 1271*cdf0e10cSrcweir } 1272*cdf0e10cSrcweir 1273*cdf0e10cSrcweir void SdrPageProperties::ClearItem(const sal_uInt16 nWhich) 1274*cdf0e10cSrcweir { 1275*cdf0e10cSrcweir mpProperties->ClearItem(nWhich); 1276*cdf0e10cSrcweir ImpPageChange(*mpSdrPage); 1277*cdf0e10cSrcweir } 1278*cdf0e10cSrcweir 1279*cdf0e10cSrcweir void SdrPageProperties::SetStyleSheet(SfxStyleSheet* pStyleSheet) 1280*cdf0e10cSrcweir { 1281*cdf0e10cSrcweir if(pStyleSheet) 1282*cdf0e10cSrcweir { 1283*cdf0e10cSrcweir ImpAddStyleSheet(*pStyleSheet); 1284*cdf0e10cSrcweir } 1285*cdf0e10cSrcweir else 1286*cdf0e10cSrcweir { 1287*cdf0e10cSrcweir ImpRemoveStyleSheet(); 1288*cdf0e10cSrcweir } 1289*cdf0e10cSrcweir 1290*cdf0e10cSrcweir ImpPageChange(*mpSdrPage); 1291*cdf0e10cSrcweir } 1292*cdf0e10cSrcweir 1293*cdf0e10cSrcweir SfxStyleSheet* SdrPageProperties::GetStyleSheet() const 1294*cdf0e10cSrcweir { 1295*cdf0e10cSrcweir return mpStyleSheet; 1296*cdf0e10cSrcweir } 1297*cdf0e10cSrcweir 1298*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 1299*cdf0e10cSrcweir 1300*cdf0e10cSrcweir TYPEINIT1(SdrPage,SdrObjList); 1301*cdf0e10cSrcweir DBG_NAME(SdrPage) 1302*cdf0e10cSrcweir SdrPage::SdrPage(SdrModel& rNewModel, bool bMasterPage) 1303*cdf0e10cSrcweir : SdrObjList(&rNewModel, this), 1304*cdf0e10cSrcweir mpViewContact(0L), 1305*cdf0e10cSrcweir nWdt(10L), 1306*cdf0e10cSrcweir nHgt(10L), 1307*cdf0e10cSrcweir nBordLft(0L), 1308*cdf0e10cSrcweir nBordUpp(0L), 1309*cdf0e10cSrcweir nBordRgt(0L), 1310*cdf0e10cSrcweir nBordLwr(0L), 1311*cdf0e10cSrcweir pLayerAdmin(new SdrLayerAdmin(&rNewModel.GetLayerAdmin())), 1312*cdf0e10cSrcweir mpSdrPageProperties(0), 1313*cdf0e10cSrcweir mpMasterPageDescriptor(0L), 1314*cdf0e10cSrcweir nPageNum(0L), 1315*cdf0e10cSrcweir mbMaster(bMasterPage), 1316*cdf0e10cSrcweir mbInserted(false), 1317*cdf0e10cSrcweir mbObjectsNotPersistent(false), 1318*cdf0e10cSrcweir mbSwappingLocked(false), 1319*cdf0e10cSrcweir mbPageBorderOnlyLeftRight(false) 1320*cdf0e10cSrcweir { 1321*cdf0e10cSrcweir DBG_CTOR(SdrPage,NULL); 1322*cdf0e10cSrcweir aPrefVisiLayers.SetAll(); 1323*cdf0e10cSrcweir eListKind = (bMasterPage) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE; 1324*cdf0e10cSrcweir 1325*cdf0e10cSrcweir mpSdrPageProperties = new SdrPageProperties(*this); 1326*cdf0e10cSrcweir } 1327*cdf0e10cSrcweir 1328*cdf0e10cSrcweir SdrPage::SdrPage(const SdrPage& rSrcPage) 1329*cdf0e10cSrcweir : SdrObjList(rSrcPage.pModel, this), 1330*cdf0e10cSrcweir tools::WeakBase< SdrPage >(), 1331*cdf0e10cSrcweir mpViewContact(0L), 1332*cdf0e10cSrcweir nWdt(rSrcPage.nWdt), 1333*cdf0e10cSrcweir nHgt(rSrcPage.nHgt), 1334*cdf0e10cSrcweir nBordLft(rSrcPage.nBordLft), 1335*cdf0e10cSrcweir nBordUpp(rSrcPage.nBordUpp), 1336*cdf0e10cSrcweir nBordRgt(rSrcPage.nBordRgt), 1337*cdf0e10cSrcweir nBordLwr(rSrcPage.nBordLwr), 1338*cdf0e10cSrcweir pLayerAdmin(new SdrLayerAdmin(rSrcPage.pModel->GetLayerAdmin())), 1339*cdf0e10cSrcweir mpSdrPageProperties(0), 1340*cdf0e10cSrcweir mpMasterPageDescriptor(0L), 1341*cdf0e10cSrcweir nPageNum(rSrcPage.nPageNum), 1342*cdf0e10cSrcweir mbMaster(rSrcPage.mbMaster), 1343*cdf0e10cSrcweir mbInserted(false), 1344*cdf0e10cSrcweir mbObjectsNotPersistent(rSrcPage.mbObjectsNotPersistent), 1345*cdf0e10cSrcweir mbSwappingLocked(rSrcPage.mbSwappingLocked), 1346*cdf0e10cSrcweir mbPageBorderOnlyLeftRight(rSrcPage.mbPageBorderOnlyLeftRight) 1347*cdf0e10cSrcweir { 1348*cdf0e10cSrcweir DBG_CTOR(SdrPage,NULL); 1349*cdf0e10cSrcweir aPrefVisiLayers.SetAll(); 1350*cdf0e10cSrcweir eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE; 1351*cdf0e10cSrcweir 1352*cdf0e10cSrcweir // copy things from source 1353*cdf0e10cSrcweir // Warning: this leads to slicing (see issue 93186) and has to be 1354*cdf0e10cSrcweir // removed as soon as possible. 1355*cdf0e10cSrcweir *this = rSrcPage; 1356*cdf0e10cSrcweir OSL_ENSURE(mpSdrPageProperties, 1357*cdf0e10cSrcweir "SdrPage::SdrPage: operator= did not create needed SdrPageProperties (!)"); 1358*cdf0e10cSrcweir 1359*cdf0e10cSrcweir // be careful and correct eListKind, a member of SdrObjList which 1360*cdf0e10cSrcweir // will be changed by the SdrOIbjList::operator= before... 1361*cdf0e10cSrcweir eListKind = (mbMaster) ? SDROBJLIST_MASTERPAGE : SDROBJLIST_DRAWPAGE; 1362*cdf0e10cSrcweir 1363*cdf0e10cSrcweir // The previous assignment to *this may have resulted in a call to 1364*cdf0e10cSrcweir // createUnoPage at a partially initialized (sliced) SdrPage object. 1365*cdf0e10cSrcweir // Due to the vtable being not yet fully set-up at this stage, 1366*cdf0e10cSrcweir // createUnoPage() may have been called at the wrong class. 1367*cdf0e10cSrcweir // To force a call to the right createUnoPage() at a later time when the 1368*cdf0e10cSrcweir // new object is full constructed mxUnoPage is disposed now. 1369*cdf0e10cSrcweir uno::Reference<lang::XComponent> xComponent (mxUnoPage, uno::UNO_QUERY); 1370*cdf0e10cSrcweir if (xComponent.is()) 1371*cdf0e10cSrcweir { 1372*cdf0e10cSrcweir mxUnoPage = NULL; 1373*cdf0e10cSrcweir xComponent->dispose(); 1374*cdf0e10cSrcweir } 1375*cdf0e10cSrcweir } 1376*cdf0e10cSrcweir 1377*cdf0e10cSrcweir SdrPage::~SdrPage() 1378*cdf0e10cSrcweir { 1379*cdf0e10cSrcweir if( mxUnoPage.is() ) try 1380*cdf0e10cSrcweir { 1381*cdf0e10cSrcweir uno::Reference< lang::XComponent > xPageComponent( mxUnoPage, uno::UNO_QUERY_THROW ); 1382*cdf0e10cSrcweir mxUnoPage.clear(); 1383*cdf0e10cSrcweir xPageComponent->dispose(); 1384*cdf0e10cSrcweir } 1385*cdf0e10cSrcweir catch( const uno::Exception& ) 1386*cdf0e10cSrcweir { 1387*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 1388*cdf0e10cSrcweir } 1389*cdf0e10cSrcweir 1390*cdf0e10cSrcweir // #111111# 1391*cdf0e10cSrcweir // tell all the registered PageUsers that the page is in destruction 1392*cdf0e10cSrcweir // This causes some (all?) PageUsers to remove themselves from the list 1393*cdf0e10cSrcweir // of page users. Therefore we have to use a copy of the list for the 1394*cdf0e10cSrcweir // iteration. 1395*cdf0e10cSrcweir ::sdr::PageUserVector aListCopy (maPageUsers.begin(), maPageUsers.end()); 1396*cdf0e10cSrcweir for(::sdr::PageUserVector::iterator aIterator = aListCopy.begin(); aIterator != aListCopy.end(); aIterator++) 1397*cdf0e10cSrcweir { 1398*cdf0e10cSrcweir sdr::PageUser* pPageUser = *aIterator; 1399*cdf0e10cSrcweir DBG_ASSERT(pPageUser, "SdrPage::~SdrPage: corrupt PageUser list (!)"); 1400*cdf0e10cSrcweir pPageUser->PageInDestruction(*this); 1401*cdf0e10cSrcweir } 1402*cdf0e10cSrcweir 1403*cdf0e10cSrcweir // #111111# 1404*cdf0e10cSrcweir // Clear the vector. This means that user do not need to call RemovePageUser() 1405*cdf0e10cSrcweir // when they get called from PageInDestruction(). 1406*cdf0e10cSrcweir maPageUsers.clear(); 1407*cdf0e10cSrcweir 1408*cdf0e10cSrcweir delete pLayerAdmin; 1409*cdf0e10cSrcweir 1410*cdf0e10cSrcweir TRG_ClearMasterPage(); 1411*cdf0e10cSrcweir 1412*cdf0e10cSrcweir // #110094# 1413*cdf0e10cSrcweir if(mpViewContact) 1414*cdf0e10cSrcweir { 1415*cdf0e10cSrcweir delete mpViewContact; 1416*cdf0e10cSrcweir mpViewContact = 0L; 1417*cdf0e10cSrcweir } 1418*cdf0e10cSrcweir 1419*cdf0e10cSrcweir { 1420*cdf0e10cSrcweir delete mpSdrPageProperties; 1421*cdf0e10cSrcweir mpSdrPageProperties = 0; 1422*cdf0e10cSrcweir } 1423*cdf0e10cSrcweir 1424*cdf0e10cSrcweir DBG_DTOR(SdrPage,NULL); 1425*cdf0e10cSrcweir } 1426*cdf0e10cSrcweir 1427*cdf0e10cSrcweir void SdrPage::operator=(const SdrPage& rSrcPage) 1428*cdf0e10cSrcweir { 1429*cdf0e10cSrcweir if(mpViewContact) 1430*cdf0e10cSrcweir { 1431*cdf0e10cSrcweir delete mpViewContact; 1432*cdf0e10cSrcweir mpViewContact = 0L; 1433*cdf0e10cSrcweir } 1434*cdf0e10cSrcweir 1435*cdf0e10cSrcweir // Joe also sets some parameters for the class this one 1436*cdf0e10cSrcweir // is derived from. SdrObjList does the same bad handling of 1437*cdf0e10cSrcweir // copy constructor and operator=, so i better let it stand here. 1438*cdf0e10cSrcweir pPage = this; 1439*cdf0e10cSrcweir 1440*cdf0e10cSrcweir // copy all the local parameters to make this instance 1441*cdf0e10cSrcweir // a valid copy od source page before copying and inserting 1442*cdf0e10cSrcweir // the contained objects 1443*cdf0e10cSrcweir mbMaster = rSrcPage.mbMaster; 1444*cdf0e10cSrcweir mbSwappingLocked = rSrcPage.mbSwappingLocked; 1445*cdf0e10cSrcweir mbPageBorderOnlyLeftRight = rSrcPage.mbPageBorderOnlyLeftRight; 1446*cdf0e10cSrcweir aPrefVisiLayers = rSrcPage.aPrefVisiLayers; 1447*cdf0e10cSrcweir nWdt = rSrcPage.nWdt; 1448*cdf0e10cSrcweir nHgt = rSrcPage.nHgt; 1449*cdf0e10cSrcweir nBordLft = rSrcPage.nBordLft; 1450*cdf0e10cSrcweir nBordUpp = rSrcPage.nBordUpp; 1451*cdf0e10cSrcweir nBordRgt = rSrcPage.nBordRgt; 1452*cdf0e10cSrcweir nBordLwr = rSrcPage.nBordLwr; 1453*cdf0e10cSrcweir nPageNum = rSrcPage.nPageNum; 1454*cdf0e10cSrcweir 1455*cdf0e10cSrcweir if(rSrcPage.TRG_HasMasterPage()) 1456*cdf0e10cSrcweir { 1457*cdf0e10cSrcweir TRG_SetMasterPage(rSrcPage.TRG_GetMasterPage()); 1458*cdf0e10cSrcweir TRG_SetMasterPageVisibleLayers(rSrcPage.TRG_GetMasterPageVisibleLayers()); 1459*cdf0e10cSrcweir } 1460*cdf0e10cSrcweir else 1461*cdf0e10cSrcweir { 1462*cdf0e10cSrcweir TRG_ClearMasterPage(); 1463*cdf0e10cSrcweir } 1464*cdf0e10cSrcweir //aMasters = rSrcPage.aMasters; 1465*cdf0e10cSrcweir 1466*cdf0e10cSrcweir mbObjectsNotPersistent = rSrcPage.mbObjectsNotPersistent; 1467*cdf0e10cSrcweir 1468*cdf0e10cSrcweir { 1469*cdf0e10cSrcweir // #i111122# delete SdrPageProperties when model is different 1470*cdf0e10cSrcweir if(mpSdrPageProperties && GetModel() != rSrcPage.GetModel()) 1471*cdf0e10cSrcweir { 1472*cdf0e10cSrcweir delete mpSdrPageProperties; 1473*cdf0e10cSrcweir mpSdrPageProperties = 0; 1474*cdf0e10cSrcweir } 1475*cdf0e10cSrcweir 1476*cdf0e10cSrcweir if(!mpSdrPageProperties) 1477*cdf0e10cSrcweir { 1478*cdf0e10cSrcweir mpSdrPageProperties = new SdrPageProperties(*this); 1479*cdf0e10cSrcweir } 1480*cdf0e10cSrcweir else 1481*cdf0e10cSrcweir { 1482*cdf0e10cSrcweir mpSdrPageProperties->ClearItem(0); 1483*cdf0e10cSrcweir } 1484*cdf0e10cSrcweir 1485*cdf0e10cSrcweir if(!IsMasterPage()) 1486*cdf0e10cSrcweir { 1487*cdf0e10cSrcweir mpSdrPageProperties->PutItemSet(rSrcPage.getSdrPageProperties().GetItemSet()); 1488*cdf0e10cSrcweir } 1489*cdf0e10cSrcweir 1490*cdf0e10cSrcweir mpSdrPageProperties->SetStyleSheet(rSrcPage.getSdrPageProperties().GetStyleSheet()); 1491*cdf0e10cSrcweir } 1492*cdf0e10cSrcweir 1493*cdf0e10cSrcweir // Now copy the contained obejcts (by cloning them) 1494*cdf0e10cSrcweir SdrObjList::operator=(rSrcPage); 1495*cdf0e10cSrcweir } 1496*cdf0e10cSrcweir 1497*cdf0e10cSrcweir SdrPage* SdrPage::Clone() const 1498*cdf0e10cSrcweir { 1499*cdf0e10cSrcweir return Clone(NULL); 1500*cdf0e10cSrcweir } 1501*cdf0e10cSrcweir 1502*cdf0e10cSrcweir SdrPage* SdrPage::Clone(SdrModel* pNewModel) const 1503*cdf0e10cSrcweir { 1504*cdf0e10cSrcweir if (pNewModel==NULL) pNewModel=pModel; 1505*cdf0e10cSrcweir SdrPage* pPage2=new SdrPage(*pNewModel); 1506*cdf0e10cSrcweir *pPage2=*this; 1507*cdf0e10cSrcweir return pPage2; 1508*cdf0e10cSrcweir } 1509*cdf0e10cSrcweir 1510*cdf0e10cSrcweir void SdrPage::SetSize(const Size& aSiz) 1511*cdf0e10cSrcweir { 1512*cdf0e10cSrcweir bool bChanged(false); 1513*cdf0e10cSrcweir 1514*cdf0e10cSrcweir if(aSiz.Width() != nWdt) 1515*cdf0e10cSrcweir { 1516*cdf0e10cSrcweir nWdt = aSiz.Width(); 1517*cdf0e10cSrcweir bChanged = true; 1518*cdf0e10cSrcweir } 1519*cdf0e10cSrcweir 1520*cdf0e10cSrcweir if(aSiz.Height() != nHgt) 1521*cdf0e10cSrcweir { 1522*cdf0e10cSrcweir nHgt = aSiz.Height(); 1523*cdf0e10cSrcweir bChanged = true; 1524*cdf0e10cSrcweir } 1525*cdf0e10cSrcweir 1526*cdf0e10cSrcweir if(bChanged) 1527*cdf0e10cSrcweir { 1528*cdf0e10cSrcweir SetChanged(); 1529*cdf0e10cSrcweir } 1530*cdf0e10cSrcweir } 1531*cdf0e10cSrcweir 1532*cdf0e10cSrcweir Size SdrPage::GetSize() const 1533*cdf0e10cSrcweir { 1534*cdf0e10cSrcweir return Size(nWdt,nHgt); 1535*cdf0e10cSrcweir } 1536*cdf0e10cSrcweir 1537*cdf0e10cSrcweir sal_Int32 SdrPage::GetWdt() const 1538*cdf0e10cSrcweir { 1539*cdf0e10cSrcweir return nWdt; 1540*cdf0e10cSrcweir } 1541*cdf0e10cSrcweir 1542*cdf0e10cSrcweir void SdrPage::SetOrientation(Orientation eOri) 1543*cdf0e10cSrcweir { 1544*cdf0e10cSrcweir // Quadratisch ist und bleibt immer Portrait 1545*cdf0e10cSrcweir Size aSiz(GetSize()); 1546*cdf0e10cSrcweir if (aSiz.Width()!=aSiz.Height()) { 1547*cdf0e10cSrcweir if ((eOri==ORIENTATION_PORTRAIT) == (aSiz.Width()>aSiz.Height())) { 1548*cdf0e10cSrcweir SetSize(Size(aSiz.Height(),aSiz.Width())); 1549*cdf0e10cSrcweir } 1550*cdf0e10cSrcweir } 1551*cdf0e10cSrcweir } 1552*cdf0e10cSrcweir 1553*cdf0e10cSrcweir Orientation SdrPage::GetOrientation() const 1554*cdf0e10cSrcweir { 1555*cdf0e10cSrcweir // Quadratisch ist Portrait 1556*cdf0e10cSrcweir Orientation eRet=ORIENTATION_PORTRAIT; 1557*cdf0e10cSrcweir Size aSiz(GetSize()); 1558*cdf0e10cSrcweir if (aSiz.Width()>aSiz.Height()) eRet=ORIENTATION_LANDSCAPE; 1559*cdf0e10cSrcweir return eRet; 1560*cdf0e10cSrcweir } 1561*cdf0e10cSrcweir 1562*cdf0e10cSrcweir sal_Int32 SdrPage::GetHgt() const 1563*cdf0e10cSrcweir { 1564*cdf0e10cSrcweir return nHgt; 1565*cdf0e10cSrcweir } 1566*cdf0e10cSrcweir 1567*cdf0e10cSrcweir void SdrPage::SetBorder(sal_Int32 nLft, sal_Int32 nUpp, sal_Int32 nRgt, sal_Int32 nLwr) 1568*cdf0e10cSrcweir { 1569*cdf0e10cSrcweir bool bChanged(false); 1570*cdf0e10cSrcweir 1571*cdf0e10cSrcweir if(nBordLft != nLft) 1572*cdf0e10cSrcweir { 1573*cdf0e10cSrcweir nBordLft = nLft; 1574*cdf0e10cSrcweir bChanged = true; 1575*cdf0e10cSrcweir } 1576*cdf0e10cSrcweir 1577*cdf0e10cSrcweir if(nBordUpp != nUpp) 1578*cdf0e10cSrcweir { 1579*cdf0e10cSrcweir nBordUpp = nUpp; 1580*cdf0e10cSrcweir bChanged = true; 1581*cdf0e10cSrcweir } 1582*cdf0e10cSrcweir 1583*cdf0e10cSrcweir if(nBordRgt != nRgt) 1584*cdf0e10cSrcweir { 1585*cdf0e10cSrcweir nBordRgt = nRgt; 1586*cdf0e10cSrcweir bChanged = true; 1587*cdf0e10cSrcweir } 1588*cdf0e10cSrcweir 1589*cdf0e10cSrcweir if(nBordLwr != nLwr) 1590*cdf0e10cSrcweir { 1591*cdf0e10cSrcweir nBordLwr = nLwr; 1592*cdf0e10cSrcweir bChanged = true; 1593*cdf0e10cSrcweir } 1594*cdf0e10cSrcweir 1595*cdf0e10cSrcweir if(bChanged) 1596*cdf0e10cSrcweir { 1597*cdf0e10cSrcweir SetChanged(); 1598*cdf0e10cSrcweir } 1599*cdf0e10cSrcweir } 1600*cdf0e10cSrcweir 1601*cdf0e10cSrcweir void SdrPage::SetLftBorder(sal_Int32 nBorder) 1602*cdf0e10cSrcweir { 1603*cdf0e10cSrcweir if(nBordLft != nBorder) 1604*cdf0e10cSrcweir { 1605*cdf0e10cSrcweir nBordLft = nBorder; 1606*cdf0e10cSrcweir SetChanged(); 1607*cdf0e10cSrcweir } 1608*cdf0e10cSrcweir } 1609*cdf0e10cSrcweir 1610*cdf0e10cSrcweir void SdrPage::SetUppBorder(sal_Int32 nBorder) 1611*cdf0e10cSrcweir { 1612*cdf0e10cSrcweir if(nBordUpp != nBorder) 1613*cdf0e10cSrcweir { 1614*cdf0e10cSrcweir nBordUpp = nBorder; 1615*cdf0e10cSrcweir SetChanged(); 1616*cdf0e10cSrcweir } 1617*cdf0e10cSrcweir } 1618*cdf0e10cSrcweir 1619*cdf0e10cSrcweir void SdrPage::SetRgtBorder(sal_Int32 nBorder) 1620*cdf0e10cSrcweir { 1621*cdf0e10cSrcweir if(nBordRgt != nBorder) 1622*cdf0e10cSrcweir { 1623*cdf0e10cSrcweir nBordRgt=nBorder; 1624*cdf0e10cSrcweir SetChanged(); 1625*cdf0e10cSrcweir } 1626*cdf0e10cSrcweir } 1627*cdf0e10cSrcweir 1628*cdf0e10cSrcweir void SdrPage::SetLwrBorder(sal_Int32 nBorder) 1629*cdf0e10cSrcweir { 1630*cdf0e10cSrcweir if(nBordLwr != nBorder) 1631*cdf0e10cSrcweir { 1632*cdf0e10cSrcweir nBordLwr=nBorder; 1633*cdf0e10cSrcweir SetChanged(); 1634*cdf0e10cSrcweir } 1635*cdf0e10cSrcweir } 1636*cdf0e10cSrcweir 1637*cdf0e10cSrcweir sal_Int32 SdrPage::GetLftBorder() const 1638*cdf0e10cSrcweir { 1639*cdf0e10cSrcweir return nBordLft; 1640*cdf0e10cSrcweir } 1641*cdf0e10cSrcweir 1642*cdf0e10cSrcweir sal_Int32 SdrPage::GetUppBorder() const 1643*cdf0e10cSrcweir { 1644*cdf0e10cSrcweir return nBordUpp; 1645*cdf0e10cSrcweir } 1646*cdf0e10cSrcweir 1647*cdf0e10cSrcweir sal_Int32 SdrPage::GetRgtBorder() const 1648*cdf0e10cSrcweir { 1649*cdf0e10cSrcweir return nBordRgt; 1650*cdf0e10cSrcweir } 1651*cdf0e10cSrcweir 1652*cdf0e10cSrcweir sal_Int32 SdrPage::GetLwrBorder() const 1653*cdf0e10cSrcweir { 1654*cdf0e10cSrcweir return nBordLwr; 1655*cdf0e10cSrcweir } 1656*cdf0e10cSrcweir 1657*cdf0e10cSrcweir void SdrPage::SetModel(SdrModel* pNewModel) 1658*cdf0e10cSrcweir { 1659*cdf0e10cSrcweir SdrModel* pOldModel=pModel; 1660*cdf0e10cSrcweir SdrObjList::SetModel(pNewModel); 1661*cdf0e10cSrcweir if (pNewModel!=pOldModel) 1662*cdf0e10cSrcweir { 1663*cdf0e10cSrcweir if (pNewModel!=NULL) { 1664*cdf0e10cSrcweir pLayerAdmin->SetParent(&pNewModel->GetLayerAdmin()); 1665*cdf0e10cSrcweir } else { 1666*cdf0e10cSrcweir pLayerAdmin->SetParent(NULL); 1667*cdf0e10cSrcweir } 1668*cdf0e10cSrcweir pLayerAdmin->SetModel(pNewModel); 1669*cdf0e10cSrcweir 1670*cdf0e10cSrcweir // create new SdrPageProperties with new model (due to SfxItemSet there) 1671*cdf0e10cSrcweir // and copy ItemSet and StyleSheet 1672*cdf0e10cSrcweir SdrPageProperties *pNew = new SdrPageProperties(*this); 1673*cdf0e10cSrcweir 1674*cdf0e10cSrcweir if(!IsMasterPage()) 1675*cdf0e10cSrcweir { 1676*cdf0e10cSrcweir pNew->PutItemSet(getSdrPageProperties().GetItemSet()); 1677*cdf0e10cSrcweir } 1678*cdf0e10cSrcweir 1679*cdf0e10cSrcweir pNew->SetStyleSheet(getSdrPageProperties().GetStyleSheet()); 1680*cdf0e10cSrcweir 1681*cdf0e10cSrcweir delete mpSdrPageProperties; 1682*cdf0e10cSrcweir mpSdrPageProperties = pNew; 1683*cdf0e10cSrcweir } 1684*cdf0e10cSrcweir 1685*cdf0e10cSrcweir // update listeners at possible api wrapper object 1686*cdf0e10cSrcweir if( pOldModel != pNewModel ) 1687*cdf0e10cSrcweir { 1688*cdf0e10cSrcweir if( mxUnoPage.is() ) 1689*cdf0e10cSrcweir { 1690*cdf0e10cSrcweir SvxDrawPage* pPage2 = SvxDrawPage::getImplementation( mxUnoPage ); 1691*cdf0e10cSrcweir if( pPage2 ) 1692*cdf0e10cSrcweir pPage2->ChangeModel( pNewModel ); 1693*cdf0e10cSrcweir } 1694*cdf0e10cSrcweir } 1695*cdf0e10cSrcweir } 1696*cdf0e10cSrcweir 1697*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 1698*cdf0e10cSrcweir 1699*cdf0e10cSrcweir // #i68775# React on PageNum changes (from Model in most cases) 1700*cdf0e10cSrcweir void SdrPage::SetPageNum(sal_uInt16 nNew) 1701*cdf0e10cSrcweir { 1702*cdf0e10cSrcweir if(nNew != nPageNum) 1703*cdf0e10cSrcweir { 1704*cdf0e10cSrcweir // change 1705*cdf0e10cSrcweir nPageNum = nNew; 1706*cdf0e10cSrcweir 1707*cdf0e10cSrcweir // notify visualisations, also notifies e.g. buffered MasterPages 1708*cdf0e10cSrcweir ActionChanged(); 1709*cdf0e10cSrcweir } 1710*cdf0e10cSrcweir } 1711*cdf0e10cSrcweir 1712*cdf0e10cSrcweir sal_uInt16 SdrPage::GetPageNum() const 1713*cdf0e10cSrcweir { 1714*cdf0e10cSrcweir if (!mbInserted) 1715*cdf0e10cSrcweir return 0; 1716*cdf0e10cSrcweir 1717*cdf0e10cSrcweir if (mbMaster) { 1718*cdf0e10cSrcweir if (pModel && pModel->IsMPgNumsDirty()) 1719*cdf0e10cSrcweir ((SdrModel*)pModel)->RecalcPageNums(sal_True); 1720*cdf0e10cSrcweir } else { 1721*cdf0e10cSrcweir if (pModel && pModel->IsPagNumsDirty()) 1722*cdf0e10cSrcweir ((SdrModel*)pModel)->RecalcPageNums(sal_False); 1723*cdf0e10cSrcweir } 1724*cdf0e10cSrcweir return nPageNum; 1725*cdf0e10cSrcweir } 1726*cdf0e10cSrcweir 1727*cdf0e10cSrcweir void SdrPage::SetChanged() 1728*cdf0e10cSrcweir { 1729*cdf0e10cSrcweir // #110094#-11 1730*cdf0e10cSrcweir // For test purposes, use the new ViewContact for change 1731*cdf0e10cSrcweir // notification now. 1732*cdf0e10cSrcweir ActionChanged(); 1733*cdf0e10cSrcweir 1734*cdf0e10cSrcweir if( pModel ) 1735*cdf0e10cSrcweir { 1736*cdf0e10cSrcweir pModel->SetChanged(); 1737*cdf0e10cSrcweir } 1738*cdf0e10cSrcweir } 1739*cdf0e10cSrcweir 1740*cdf0e10cSrcweir //////////////////////////////////////////////////////////////////////////////////////////////////// 1741*cdf0e10cSrcweir // MasterPage interface 1742*cdf0e10cSrcweir 1743*cdf0e10cSrcweir void SdrPage::TRG_SetMasterPage(SdrPage& rNew) 1744*cdf0e10cSrcweir { 1745*cdf0e10cSrcweir if(mpMasterPageDescriptor && &(mpMasterPageDescriptor->GetUsedPage()) == &rNew) 1746*cdf0e10cSrcweir return; 1747*cdf0e10cSrcweir 1748*cdf0e10cSrcweir if(mpMasterPageDescriptor) 1749*cdf0e10cSrcweir TRG_ClearMasterPage(); 1750*cdf0e10cSrcweir 1751*cdf0e10cSrcweir mpMasterPageDescriptor = new ::sdr::MasterPageDescriptor(*this, rNew); 1752*cdf0e10cSrcweir GetViewContact().ActionChanged(); 1753*cdf0e10cSrcweir } 1754*cdf0e10cSrcweir 1755*cdf0e10cSrcweir void SdrPage::TRG_ClearMasterPage() 1756*cdf0e10cSrcweir { 1757*cdf0e10cSrcweir if(mpMasterPageDescriptor) 1758*cdf0e10cSrcweir { 1759*cdf0e10cSrcweir SetChanged(); 1760*cdf0e10cSrcweir 1761*cdf0e10cSrcweir // the flushViewObjectContacts() will do needed invalidates by deleting the involved VOCs 1762*cdf0e10cSrcweir mpMasterPageDescriptor->GetUsedPage().GetViewContact().flushViewObjectContacts(true); 1763*cdf0e10cSrcweir 1764*cdf0e10cSrcweir delete mpMasterPageDescriptor; 1765*cdf0e10cSrcweir mpMasterPageDescriptor = 0L; 1766*cdf0e10cSrcweir } 1767*cdf0e10cSrcweir } 1768*cdf0e10cSrcweir 1769*cdf0e10cSrcweir SdrPage& SdrPage::TRG_GetMasterPage() const 1770*cdf0e10cSrcweir { 1771*cdf0e10cSrcweir DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_GetMasterPage(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); 1772*cdf0e10cSrcweir return mpMasterPageDescriptor->GetUsedPage(); 1773*cdf0e10cSrcweir } 1774*cdf0e10cSrcweir 1775*cdf0e10cSrcweir const SetOfByte& SdrPage::TRG_GetMasterPageVisibleLayers() const 1776*cdf0e10cSrcweir { 1777*cdf0e10cSrcweir DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_GetMasterPageVisibleLayers(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); 1778*cdf0e10cSrcweir return mpMasterPageDescriptor->GetVisibleLayers(); 1779*cdf0e10cSrcweir } 1780*cdf0e10cSrcweir 1781*cdf0e10cSrcweir void SdrPage::TRG_SetMasterPageVisibleLayers(const SetOfByte& rNew) 1782*cdf0e10cSrcweir { 1783*cdf0e10cSrcweir DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_SetMasterPageVisibleLayers(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); 1784*cdf0e10cSrcweir mpMasterPageDescriptor->SetVisibleLayers(rNew); 1785*cdf0e10cSrcweir } 1786*cdf0e10cSrcweir 1787*cdf0e10cSrcweir sdr::contact::ViewContact& SdrPage::TRG_GetMasterPageDescriptorViewContact() const 1788*cdf0e10cSrcweir { 1789*cdf0e10cSrcweir DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_GetMasterPageDescriptorViewContact(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); 1790*cdf0e10cSrcweir return mpMasterPageDescriptor->GetViewContact(); 1791*cdf0e10cSrcweir } 1792*cdf0e10cSrcweir 1793*cdf0e10cSrcweir // #115423# used from SdrModel::RemoveMasterPage 1794*cdf0e10cSrcweir void SdrPage::TRG_ImpMasterPageRemoved(const SdrPage& rRemovedPage) 1795*cdf0e10cSrcweir { 1796*cdf0e10cSrcweir if(TRG_HasMasterPage()) 1797*cdf0e10cSrcweir { 1798*cdf0e10cSrcweir if(&TRG_GetMasterPage() == &rRemovedPage) 1799*cdf0e10cSrcweir { 1800*cdf0e10cSrcweir TRG_ClearMasterPage(); 1801*cdf0e10cSrcweir } 1802*cdf0e10cSrcweir } 1803*cdf0e10cSrcweir } 1804*cdf0e10cSrcweir 1805*cdf0e10cSrcweir const SdrPageGridFrameList* SdrPage::GetGridFrameList(const SdrPageView* /*pPV*/, const Rectangle* /*pRect*/) const 1806*cdf0e10cSrcweir { 1807*cdf0e10cSrcweir return NULL; 1808*cdf0e10cSrcweir } 1809*cdf0e10cSrcweir 1810*cdf0e10cSrcweir XubString SdrPage::GetLayoutName() const 1811*cdf0e10cSrcweir { 1812*cdf0e10cSrcweir // Die wollte Dieter haben. 1813*cdf0e10cSrcweir return String(); 1814*cdf0e10cSrcweir } 1815*cdf0e10cSrcweir 1816*cdf0e10cSrcweir void SdrPage::SetInserted( bool bIns ) 1817*cdf0e10cSrcweir { 1818*cdf0e10cSrcweir if( mbInserted != bIns ) 1819*cdf0e10cSrcweir { 1820*cdf0e10cSrcweir mbInserted = bIns; 1821*cdf0e10cSrcweir 1822*cdf0e10cSrcweir SdrObjListIter aIter( *this, IM_FLAT ); 1823*cdf0e10cSrcweir while ( aIter.IsMore() ) 1824*cdf0e10cSrcweir { 1825*cdf0e10cSrcweir SdrObject* pObj = aIter.Next(); 1826*cdf0e10cSrcweir if ( pObj->ISA(SdrOle2Obj) ) 1827*cdf0e10cSrcweir { 1828*cdf0e10cSrcweir if( mbInserted ) 1829*cdf0e10cSrcweir ( (SdrOle2Obj*) pObj)->Connect(); 1830*cdf0e10cSrcweir else 1831*cdf0e10cSrcweir ( (SdrOle2Obj*) pObj)->Disconnect(); 1832*cdf0e10cSrcweir } 1833*cdf0e10cSrcweir } 1834*cdf0e10cSrcweir } 1835*cdf0e10cSrcweir } 1836*cdf0e10cSrcweir 1837*cdf0e10cSrcweir 1838*cdf0e10cSrcweir uno::Reference< uno::XInterface > SdrPage::getUnoPage() 1839*cdf0e10cSrcweir { 1840*cdf0e10cSrcweir // try weak reference first 1841*cdf0e10cSrcweir if( !mxUnoPage.is() ) 1842*cdf0e10cSrcweir { 1843*cdf0e10cSrcweir // create one 1844*cdf0e10cSrcweir mxUnoPage = createUnoPage(); 1845*cdf0e10cSrcweir } 1846*cdf0e10cSrcweir 1847*cdf0e10cSrcweir return mxUnoPage; 1848*cdf0e10cSrcweir } 1849*cdf0e10cSrcweir 1850*cdf0e10cSrcweir uno::Reference< uno::XInterface > SdrPage::createUnoPage() 1851*cdf0e10cSrcweir { 1852*cdf0e10cSrcweir ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xInt = 1853*cdf0e10cSrcweir static_cast<cppu::OWeakObject*>( new SvxFmDrawPage( this ) ); 1854*cdf0e10cSrcweir return xInt; 1855*cdf0e10cSrcweir } 1856*cdf0e10cSrcweir 1857*cdf0e10cSrcweir SfxStyleSheet* SdrPage::GetTextStyleSheetForObject( SdrObject* pObj ) const 1858*cdf0e10cSrcweir { 1859*cdf0e10cSrcweir return pObj->GetStyleSheet(); 1860*cdf0e10cSrcweir } 1861*cdf0e10cSrcweir 1862*cdf0e10cSrcweir FASTBOOL SdrPage::HasTransparentObjects( sal_Bool bCheckForAlphaChannel ) const 1863*cdf0e10cSrcweir { 1864*cdf0e10cSrcweir FASTBOOL bRet = sal_False; 1865*cdf0e10cSrcweir 1866*cdf0e10cSrcweir for( sal_uIntPtr n = 0, nCount = GetObjCount(); ( n < nCount ) && !bRet; n++ ) 1867*cdf0e10cSrcweir if( GetObj( n )->IsTransparent( bCheckForAlphaChannel ) ) 1868*cdf0e10cSrcweir bRet = sal_True; 1869*cdf0e10cSrcweir 1870*cdf0e10cSrcweir return bRet; 1871*cdf0e10cSrcweir } 1872*cdf0e10cSrcweir 1873*cdf0e10cSrcweir /** returns an averaged background color of this page */ 1874*cdf0e10cSrcweir // #i75566# GetBackgroundColor -> GetPageBackgroundColor and bScreenDisplay hint value 1875*cdf0e10cSrcweir Color SdrPage::GetPageBackgroundColor( SdrPageView* pView, bool bScreenDisplay ) const 1876*cdf0e10cSrcweir { 1877*cdf0e10cSrcweir Color aColor; 1878*cdf0e10cSrcweir 1879*cdf0e10cSrcweir if(bScreenDisplay && (!pView || pView->GetApplicationDocumentColor() == COL_AUTO)) 1880*cdf0e10cSrcweir { 1881*cdf0e10cSrcweir svtools::ColorConfig aColorConfig; 1882*cdf0e10cSrcweir aColor = aColorConfig.GetColorValue( svtools::DOCCOLOR ).nColor; 1883*cdf0e10cSrcweir } 1884*cdf0e10cSrcweir else 1885*cdf0e10cSrcweir { 1886*cdf0e10cSrcweir aColor = pView->GetApplicationDocumentColor(); 1887*cdf0e10cSrcweir } 1888*cdf0e10cSrcweir 1889*cdf0e10cSrcweir const SfxItemSet* pBackgroundFill = &getSdrPageProperties().GetItemSet(); 1890*cdf0e10cSrcweir 1891*cdf0e10cSrcweir if(!IsMasterPage() && TRG_HasMasterPage()) 1892*cdf0e10cSrcweir { 1893*cdf0e10cSrcweir if(XFILL_NONE == ((const XFillStyleItem&)pBackgroundFill->Get(XATTR_FILLSTYLE)).GetValue()) 1894*cdf0e10cSrcweir { 1895*cdf0e10cSrcweir pBackgroundFill = &TRG_GetMasterPage().getSdrPageProperties().GetItemSet(); 1896*cdf0e10cSrcweir } 1897*cdf0e10cSrcweir } 1898*cdf0e10cSrcweir 1899*cdf0e10cSrcweir GetDraftFillColor(*pBackgroundFill, aColor); 1900*cdf0e10cSrcweir 1901*cdf0e10cSrcweir return aColor; 1902*cdf0e10cSrcweir } 1903*cdf0e10cSrcweir 1904*cdf0e10cSrcweir /** *deprecated, use GetBackgroundColor with SdrPageView */ 1905*cdf0e10cSrcweir Color SdrPage::GetPageBackgroundColor() const 1906*cdf0e10cSrcweir // #i75566# GetBackgroundColor -> GetPageBackgroundColor 1907*cdf0e10cSrcweir { 1908*cdf0e10cSrcweir return GetPageBackgroundColor( NULL, true ); 1909*cdf0e10cSrcweir } 1910*cdf0e10cSrcweir 1911*cdf0e10cSrcweir /** this method returns true if the object from the ViewObjectContact should 1912*cdf0e10cSrcweir be visible on this page while rendering. 1913*cdf0e10cSrcweir bEdit selects if visibility test is for an editing view or a final render, 1914*cdf0e10cSrcweir like printing. 1915*cdf0e10cSrcweir */ 1916*cdf0e10cSrcweir bool SdrPage::checkVisibility( 1917*cdf0e10cSrcweir const sdr::contact::ViewObjectContact& /*rOriginal*/, 1918*cdf0e10cSrcweir const sdr::contact::DisplayInfo& /*rDisplayInfo*/, 1919*cdf0e10cSrcweir bool /*bEdit*/) 1920*cdf0e10cSrcweir { 1921*cdf0e10cSrcweir // this will be handled in the application if needed 1922*cdf0e10cSrcweir return true; 1923*cdf0e10cSrcweir } 1924*cdf0e10cSrcweir 1925*cdf0e10cSrcweir // #110094# DrawContact support: Methods for handling Page changes 1926*cdf0e10cSrcweir void SdrPage::ActionChanged() const 1927*cdf0e10cSrcweir { 1928*cdf0e10cSrcweir // Do necessary ViewContact actions 1929*cdf0e10cSrcweir GetViewContact().ActionChanged(); 1930*cdf0e10cSrcweir 1931*cdf0e10cSrcweir // #i48535# also handle MasterPage change 1932*cdf0e10cSrcweir if(TRG_HasMasterPage()) 1933*cdf0e10cSrcweir { 1934*cdf0e10cSrcweir TRG_GetMasterPageDescriptorViewContact().ActionChanged(); 1935*cdf0e10cSrcweir } 1936*cdf0e10cSrcweir } 1937*cdf0e10cSrcweir 1938*cdf0e10cSrcweir // NYI: Dummy implementations for declarations in svdpage.hxx 1939*cdf0e10cSrcweir Bitmap SdrPage::GetBitmap(const SetOfByte& /*rVisibleLayers*/, FASTBOOL /*bTrimBorders*/) const 1940*cdf0e10cSrcweir { 1941*cdf0e10cSrcweir DBG_ASSERT(0, "SdrPage::GetBitmap(): not yet implemented."); 1942*cdf0e10cSrcweir return Bitmap(); 1943*cdf0e10cSrcweir } 1944*cdf0e10cSrcweir GDIMetaFile SdrPage::GetMetaFile(const SetOfByte& /*rVisibleLayers*/, FASTBOOL /*bTrimBorders*/) 1945*cdf0e10cSrcweir { 1946*cdf0e10cSrcweir DBG_ASSERT(0, "SdrPage::GetMetaFile(): not yet implemented."); 1947*cdf0e10cSrcweir return GDIMetaFile(); 1948*cdf0e10cSrcweir } 1949*cdf0e10cSrcweir 1950*cdf0e10cSrcweir bool SdrPage::isHandoutMasterPage() const 1951*cdf0e10cSrcweir { 1952*cdf0e10cSrcweir return mbMaster && GetModel() && GetModel()->GetMasterPageCount() 1953*cdf0e10cSrcweir && GetModel()->GetMasterPage(0) == this; 1954*cdf0e10cSrcweir } 1955*cdf0e10cSrcweir 1956*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 1957*cdf0e10cSrcweir // sdr::Comment interface 1958*cdf0e10cSrcweir 1959*cdf0e10cSrcweir const sdr::Comment& SdrPage::GetCommentByIndex(sal_uInt32 nIndex) 1960*cdf0e10cSrcweir { 1961*cdf0e10cSrcweir DBG_ASSERT(nIndex < maComments.size(), "SdrPage::GetCommentByIndex: Access out of range (!)"); 1962*cdf0e10cSrcweir return maComments[nIndex]; 1963*cdf0e10cSrcweir } 1964*cdf0e10cSrcweir 1965*cdf0e10cSrcweir void SdrPage::AddComment(const sdr::Comment& rNew) 1966*cdf0e10cSrcweir { 1967*cdf0e10cSrcweir maComments.push_back(rNew); 1968*cdf0e10cSrcweir ::std::sort(maComments.begin(), maComments.end()); 1969*cdf0e10cSrcweir } 1970*cdf0e10cSrcweir 1971*cdf0e10cSrcweir void SdrPage::ReplaceCommentByIndex(sal_uInt32 nIndex, const sdr::Comment& rNew) 1972*cdf0e10cSrcweir { 1973*cdf0e10cSrcweir DBG_ASSERT(nIndex < maComments.size(), "SdrPage::GetCommentByIndex: Access out of range (!)"); 1974*cdf0e10cSrcweir 1975*cdf0e10cSrcweir if(maComments[nIndex] != rNew) 1976*cdf0e10cSrcweir { 1977*cdf0e10cSrcweir maComments[nIndex] = rNew; 1978*cdf0e10cSrcweir ::std::sort(maComments.begin(), maComments.end()); 1979*cdf0e10cSrcweir } 1980*cdf0e10cSrcweir } 1981*cdf0e10cSrcweir 1982*cdf0e10cSrcweir const SdrPageProperties* SdrPage::getCorrectSdrPageProperties() const 1983*cdf0e10cSrcweir { 1984*cdf0e10cSrcweir if(mpMasterPageDescriptor) 1985*cdf0e10cSrcweir { 1986*cdf0e10cSrcweir return mpMasterPageDescriptor->getCorrectSdrPageProperties(); 1987*cdf0e10cSrcweir } 1988*cdf0e10cSrcweir else 1989*cdf0e10cSrcweir { 1990*cdf0e10cSrcweir return &getSdrPageProperties(); 1991*cdf0e10cSrcweir } 1992*cdf0e10cSrcweir } 1993*cdf0e10cSrcweir 1994*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 1995*cdf0e10cSrcweir // use new redirector instead of pPaintProc 1996*cdf0e10cSrcweir 1997*cdf0e10cSrcweir StandardCheckVisisbilityRedirector::StandardCheckVisisbilityRedirector() 1998*cdf0e10cSrcweir : ViewObjectContactRedirector() 1999*cdf0e10cSrcweir { 2000*cdf0e10cSrcweir } 2001*cdf0e10cSrcweir 2002*cdf0e10cSrcweir StandardCheckVisisbilityRedirector::~StandardCheckVisisbilityRedirector() 2003*cdf0e10cSrcweir { 2004*cdf0e10cSrcweir } 2005*cdf0e10cSrcweir 2006*cdf0e10cSrcweir drawinglayer::primitive2d::Primitive2DSequence StandardCheckVisisbilityRedirector::createRedirectedPrimitive2DSequence( 2007*cdf0e10cSrcweir const sdr::contact::ViewObjectContact& rOriginal, 2008*cdf0e10cSrcweir const sdr::contact::DisplayInfo& rDisplayInfo) 2009*cdf0e10cSrcweir { 2010*cdf0e10cSrcweir SdrObject* pObject = rOriginal.GetViewContact().TryToGetSdrObject(); 2011*cdf0e10cSrcweir 2012*cdf0e10cSrcweir if(pObject) 2013*cdf0e10cSrcweir { 2014*cdf0e10cSrcweir if(pObject->GetPage()) 2015*cdf0e10cSrcweir { 2016*cdf0e10cSrcweir if(pObject->GetPage()->checkVisibility(rOriginal, rDisplayInfo, false)) 2017*cdf0e10cSrcweir { 2018*cdf0e10cSrcweir return ::sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence(rOriginal, rDisplayInfo); 2019*cdf0e10cSrcweir } 2020*cdf0e10cSrcweir } 2021*cdf0e10cSrcweir 2022*cdf0e10cSrcweir return drawinglayer::primitive2d::Primitive2DSequence(); 2023*cdf0e10cSrcweir } 2024*cdf0e10cSrcweir else 2025*cdf0e10cSrcweir { 2026*cdf0e10cSrcweir // not an object, maybe a page 2027*cdf0e10cSrcweir return ::sdr::contact::ViewObjectContactRedirector::createRedirectedPrimitive2DSequence(rOriginal, rDisplayInfo); 2028*cdf0e10cSrcweir } 2029*cdf0e10cSrcweir } 2030*cdf0e10cSrcweir 2031*cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 2032*cdf0e10cSrcweir // eof 2033