diff options
author | Rüdiger Timm <rt@openoffice.org> | 2004-07-12 13:48:23 +0000 |
---|---|---|
committer | Rüdiger Timm <rt@openoffice.org> | 2004-07-12 13:48:23 +0000 |
commit | 150a88e2b2d7b3fe75775c1d48c77594581a973d (patch) | |
tree | caf45b1937a6824c9ca64759ff6324709627e8c0 /svx/source/svdraw/svdpage.cxx | |
parent | 1b87655a38742051858e97d25e3495c67a57dbde (diff) |
INTEGRATION: CWS aw013 (1.41.66); FILE MERGED
2004/06/29 11:32:37 aw 1.41.66.6: RESYNC: (1.41-1.42); FILE MERGED
2004/06/28 14:55:10 aw 1.41.66.5: #117254#
2004/06/22 15:21:07 aw 1.41.66.4: #i29641#
2004/06/15 16:08:03 aw 1.41.66.3: #117095#
2004/06/11 16:11:30 aw 1.41.66.2: #114389#, #114394#
2004/06/09 11:30:54 aw 1.41.66.1: #i29973#
Diffstat (limited to 'svx/source/svdraw/svdpage.cxx')
-rw-r--r-- | svx/source/svdraw/svdpage.cxx | 1145 |
1 files changed, 279 insertions, 866 deletions
diff --git a/svx/source/svdraw/svdpage.cxx b/svx/source/svdraw/svdpage.cxx index ba3279d33cc8..46aa87d93003 100644 --- a/svx/source/svdraw/svdpage.cxx +++ b/svx/source/svdraw/svdpage.cxx @@ -2,9 +2,9 @@ * * $RCSfile: svdpage.cxx,v $ * - * $Revision: 1.42 $ + * $Revision: 1.43 $ * - * last change: $Author: rt $ $Date: 2004-06-17 15:30:46 $ + * last change: $Author: rt $ $Date: 2004-07-12 14:48:23 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -128,6 +128,15 @@ #include <svx/sdr/contact/viewcontactofmasterpage.hxx> #endif +// StandardCheckVisisbilityRedirector +#ifndef _SDR_CONTACT_VIEWOBJECTCONTACT_HXX +#include <svx/sdr/contact/viewobjectcontact.hxx> +#endif + +#ifndef _SDR_CONTACT_DISPLAYINFO_HXX +#include <svx/sdr/contact/displayinfo.hxx> +#endif + // #111111# #include <algorithm> @@ -307,30 +316,6 @@ void SdrObjList::Clear() { pModel->SetChanged(); } - -// ULONG nAnz=GetObjCount(); -// -// if(pModel!=NULL && nAnz!=0) -// { -// SdrHint aHint(HINT_OBJLISTCLEAR); -// aHint.SetPage(pPage); -// aHint.SetObjList(this); -// pModel->Broadcast(aHint); -// } -// -// for (ULONG no=0; no<nAnz; no++) { -// SdrObject* pObj=GetObj(no); -// delete pObj; -// } -// maList.Clear(); -// if (pModel!=NULL && nAnz!=0) -// { -// pModel->SetChanged(); -// SdrHint aHint(HINT_OBJLISTCLEARED); -// aHint.SetPage(pPage); -// aHint.SetObjList(this); -// pModel->Broadcast(aHint); -// } } SdrPage* SdrObjList::GetPage() const @@ -409,6 +394,7 @@ void SdrObjList::NbcInsertObject(SdrObject* pObj, ULONG nPos, const SdrInsertRea ULONG nAnz=GetObjCount(); if (nPos>nAnz) nPos=nAnz; maList.Insert(pObj,nPos); + if (nPos<nAnz) bObjOrdNumsDirty=TRUE; pObj->SetOrdNum(nPos); pObj->SetObjList(this); @@ -431,14 +417,6 @@ void SdrObjList::InsertObject(SdrObject* pObj, ULONG nPos, const SdrInsertReason if(pObj) { - //if(pOwnerObj && !GetObjCount()) - //{ - // // only repaint here to get rid of the grey border at empty - // // group objects - // pOwnerObj->ActionChanged(); - // // pOwnerObj->BroadcastObjectChange(); - //} - // #69055# if anchor is used, reset it before grouping if(GetOwnerObj()) { @@ -681,399 +659,6 @@ const Rectangle& SdrObjList::GetAllObjBoundRect() const return aOutRect; } -//#110094# -// Paint() in SdrObjList is no longer used - try to remove it -//FASTBOOL SdrObjList::Paint(ExtOutputDevice& rXOut, const SdrPaintInfoRec& rInfoRec, FASTBOOL bRestoreColors) const -//{ -// BOOL bOk(TRUE); -// BOOL bWasNotActive = rInfoRec.bNotActive; -// BOOL bIsEnteredGroup(FALSE); -// UINT32 nWasDrawMode = rXOut.GetOutDev()->GetDrawMode(); -// -// if(!rInfoRec.bOriginalDrawModeSet) -// { -// // Original-Paintmode retten -// ((SdrPaintInfoRec&)rInfoRec).bOriginalDrawModeSet = TRUE; -// ((SdrPaintInfoRec&)rInfoRec).nOriginalDrawMode = rXOut.GetOutDev()->GetDrawMode(); -// } -// -// if((rInfoRec.pPV && rInfoRec.pPV->GetObjList() == this) -// || (rInfoRec.nPaintMode & SDRPAINTMODE_MASTERPAGE)) -// { -// bIsEnteredGroup = TRUE; -// } -// -// if(bIsEnteredGroup && bWasNotActive) -// { -// // auf aktive Elemente schalten -// ((SdrPaintInfoRec&)rInfoRec).bNotActive = FALSE; -// } -// -// if(rInfoRec.pPV && rInfoRec.bNotActive) -// { -// if(rInfoRec.pPV->GetView().DoVisualizeEnteredGroup()) -// { -// // Darstellung schmal -// rXOut.GetOutDev()->SetDrawMode(nWasDrawMode | ( -// DRAWMODE_GHOSTEDLINE|DRAWMODE_GHOSTEDFILL|DRAWMODE_GHOSTEDTEXT|DRAWMODE_GHOSTEDBITMAP|DRAWMODE_GHOSTEDGRADIENT)); -// } -// } -// else -// { -// // Darstellung normal -// rXOut.GetOutDev()->SetDrawMode(rInfoRec.nOriginalDrawMode); -// } -// -// bOk = Paint(rXOut, rInfoRec, bRestoreColors, IMP_PAGEPAINT_NORMAL); -// -// if(bIsEnteredGroup && bWasNotActive) -// { -// // Zurueck auf Ursprung, Zustand wieder verlassen -// ((SdrPaintInfoRec&)rInfoRec).bNotActive = TRUE; -// } -// -// // Darstellung restaurieren -// rXOut.GetOutDev()->SetDrawMode(nWasDrawMode); -// -// return bOk; -//} - -//FASTBOOL SdrObjList::Paint(ExtOutputDevice& rXOut, const SdrPaintInfoRec& rInfoRec, FASTBOOL bRestoreColors, USHORT nImpMode) const -//{ -// FASTBOOL bOk=TRUE; -// FASTBOOL bBrk=FALSE; -// ULONG nObjAnz=GetObjCount(); -// if (nObjAnz==0) return TRUE; -// -// // #110094#-5 -// // USHORT nEvent=rInfoRec.nBrkEvent; -// -// const SetOfByte* pVisiLayer=&rInfoRec.aPaintLayer; -// FASTBOOL bPrinter=rInfoRec.bPrinter; -// OutputDevice* pOut=rXOut.GetOutDev(); -// Rectangle aCheckRect(rInfoRec.aCheckRect); -// FASTBOOL bDrawAll=aCheckRect.IsEmpty(); -// ImpSdrHdcMerk aHDCMerk(*pOut,SDRHDC_SAVEPENANDBRUSHANDFONT,bRestoreColors); -// FASTBOOL bColorsDirty=FALSE; -// if (bDrawAll || aCheckRect.IsOver(GetAllObjBoundRect())) -// { -// // #110094#-5 -// //Application* pAppPtr=NULL; -// //if (nEvent!=0) pAppPtr=GetpApp(); -// -// SetOfByte aPaintLayer(*pVisiLayer); -// USHORT nPaintCycles = 1; -// SdrLayerID nLayerId = 0; -// -// // #85670# if pModel is NULL, try to get model of list owner -// SdrModel *pLocalModel = pModel; -// if(!pLocalModel && GetOwnerObj()) -// pLocalModel = GetOwnerObj()->GetModel(); -// -// // #85670# use correct model to get layer ID -// if(pLocalModel) -// { -// const SdrLayerAdmin& rLayerAdmin = pLocalModel->GetLayerAdmin(); -// nLayerId = rLayerAdmin.GetLayerID(rLayerAdmin.GetControlLayerName(), FALSE); -// } -// -// if( pPage == NULL || ( !pPage->IsMasterPage() && aPaintLayer.IsSet( nLayerId ) ) ) -// { -// // Der ControlLayer soll gezeichnet werden -// // Wenn Controls existieren, wird der ControlLayer als letztes gezeichnet -// SetOfByte aTestLayerSet = aPaintLayer; -// aTestLayerSet.Clear(nLayerId); -// -// if (!aTestLayerSet.IsEmpty()) -// { -// // Es soll nicht nur der ControlLayer gezeichnet werden -// ULONG nObjNum=0; -// while (nObjNum<nObjAnz && nPaintCycles < 2) -// { -// if (GetObj(nObjNum)->GetLayer() == nLayerId) -// { -// // Objekt auf ControlLayer gefunden -// // Der ControlLayer wird ersteinmal unsichtbar geschaltet -// nPaintCycles = 2; -// aPaintLayer.Clear(nLayerId); -// } -// -// nObjNum++; -// } -// } -// } -// -// for (USHORT nCycle = 1; nCycle <= nPaintCycles; nCycle++) -// { -// USHORT nPaintImpMode = nImpMode; -// FASTBOOL bNormal = ( nPaintImpMode == IMP_PAGEPAINT_NORMAL ); -// FASTBOOL bCachePrepare = ( nPaintImpMode == IMP_PAGEPAINT_PREPARE_CACHE ); -// FASTBOOL bBGCachePrepare = ( nPaintImpMode == IMP_PAGEPAINT_PREPARE_BG_CACHE ); -// FASTBOOL bCachePaint = ( nPaintImpMode == IMP_PAGEPAINT_PAINT_CACHE ); -// FASTBOOL bBGCachePaint = ( nPaintImpMode == IMP_PAGEPAINT_PAINT_BG_CACHE ); -// FASTBOOL bPaintFlag = ( bNormal || bCachePrepare || bBGCachePrepare ); -// -// if( nCycle == 2 ) -// { -// // Im zweiten Durchgang nur den ControlLayer zeichnen -// aPaintLayer.ClearAll(); -// aPaintLayer.Set(nLayerId); -// } -// -// ULONG nObjNum = 0UL; -// -// while( ( nObjNum < nObjAnz ) && !bBrk ) -// { -// SdrObject* pObj = GetObj( nObjNum ); -// -// if( nObjNum == 0 && eListKind == SDROBJLIST_MASTERPAGE && -// pPage && pPage->IsMasterPage() && rInfoRec.pPV ) -// { -// // painting pages background obj instead of masterpages background obj -// SdrPage* pPg = rInfoRec.pPV->GetPage(); -// SdrObject* pBackgroundObj = pPg ? pPg->GetBackgroundObj() : NULL; -// if( pBackgroundObj ) -// { -// if( rXOut.GetOutDev()->GetDrawMode() == DRAWMODE_DEFAULT ) -// { -// pObj = pBackgroundObj; -// Point aPos ( pPage->GetLftBorder(), pPage->GetUppBorder() ); -// Size aSize ( pPage->GetSize() ); -// aSize.Width() -= pPage->GetLftBorder() + pPage->GetRgtBorder() - 1; -// aSize.Height() -= pPage->GetUppBorder() + pPage->GetLwrBorder() - 1; -// Rectangle aLogicRect( aPos, aSize ); -// -// if( pBackgroundObj->GetLogicRect() != aLogicRect ) -// { -// pBackgroundObj->SetLogicRect( aLogicRect ); -// pBackgroundObj->RecalcBoundRect(); -// } -// } -// else -// pObj = NULL; -// -// } -// } -// -// if( pObj && ( bDrawAll || aCheckRect.IsOver( pObj->GetBoundRect() ) ) ) -// { -// SdrObjList* pSubList = pObj->GetSubList(); -// -// // Gruppenobjekte beruecksichtigen sichtbare Layer selbst (Ansonsten nur Painten, wenn Layer sichtbar) -// if( pSubList!=NULL || ((!bPrinter || pObj->IsPrintable()) && aPaintLayer.IsSet(pObj->GetLayer())) ) -// { -// // #108937# -// // IsMasterCachable() does not visit groups automatically. Since -// // this mechanism should be changed to set information at the page -// // (counter?) later, i will fix that with a SdrObjListIter here. -// sal_Bool bHierarchyIsMasterPageCachable(pObj->IsMasterCachable()); -// -// if(bHierarchyIsMasterPageCachable && pObj->IsGroupObject()) -// { -// SdrObjListIter aIter(*pObj, IM_DEEPNOGROUPS); -// -// while(bHierarchyIsMasterPageCachable && aIter.IsMore()) -// { -// SdrObject* pNestedObj = aIter.Next(); -// -// if(!pNestedObj->IsMasterCachable()) -// { -// bHierarchyIsMasterPageCachable = sal_False; -// } -// } -// } -// -// if( !bNormal && !bHierarchyIsMasterPageCachable) -// { -// if( bCachePrepare || bBGCachePrepare ) -// bBrk = TRUE, bPaintFlag = FALSE; -// else if( bCachePaint || bBGCachePaint ) -// { -// bPaintFlag = bNormal = TRUE; -// } -// } -// -// if( bPaintFlag ) -// { -// if( pObj->IsNeedColorRestore() ) -// { -// if (bColorsDirty && bRestoreColors) -// aHDCMerk.Restore(*pOut); -// -// bColorsDirty=FALSE; -// } -// else -// bColorsDirty=TRUE; // andere aendern die Farben -// -// if( rInfoRec.pPaintProc!=NULL ) -// { -// SdrPaintProcRec aRec(pObj,rXOut,rInfoRec); -// Link aLink(*rInfoRec.pPaintProc); -// aLink.Call(&aRec); // sollte mal 'nen ReturnCode liefern -// } -// else -// { -// // #109985# -// // New methodology to test for the new SC drawing flags (SDRPAINTMODE_SC_) -// sal_Bool bDoPaint(sal_True); -// sal_Bool bDoDraft(sal_False); -// -// // #109985# -// // Something to evaluate at all? -// if(rInfoRec.nPaintMode & (SDRPAINTMODE_SC_ALL_HIDE|SDRPAINTMODE_SC_ALL_DRAFT)) -// { -// if(OBJ_OLE2 == pObj->GetObjIdentifier()) -// { -// if(((SdrOle2Obj*)pObj)->IsChart()) -// { -// // chart -// if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_HIDE_CHART) -// { -// bDoPaint = sal_False; -// } -// else if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_DRAFT_CHART) -// { -// bDoPaint = sal_False; -// bDoDraft = sal_True; -// } -// } -// else -// { -// // OLE -// if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_HIDE_OLE) -// { -// bDoPaint = sal_False; -// } -// else if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_DRAFT_OLE) -// { -// bDoPaint = sal_False; -// bDoDraft = sal_True; -// } -// } -// } -// else if(OBJ_GRAF == pObj->GetObjIdentifier()) -// { -// // graphic (like OLE) -// if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_HIDE_OLE) -// { -// bDoPaint = sal_False; -// } -// else if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_DRAFT_OLE) -// { -// bDoPaint = sal_False; -// bDoDraft = sal_True; -// } -// } -// else -// { -// // any other draw object -// if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_HIDE_DRAW) -// { -// bDoPaint = sal_False; -// } -// else if(rInfoRec.nPaintMode & SDRPAINTMODE_SC_DRAFT_DRAW) -// { -// bDoPaint = sal_False; -// bDoDraft = sal_True; -// } -// } -// } -// -// // #109985# -// if(bDoPaint) -// { -// // as usual -// bOk = pObj->Paint(rXOut, rInfoRec); -// } -// else -// { -// if(bDoDraft) -// { -// Rectangle aObjRect = pObj->GetBoundRect(); -// -// pOut->SetFillColor(COL_LIGHTGRAY); -// pOut->SetLineColor(COL_BLACK); -// pOut->DrawRect( aObjRect ); -// } -// -// bOk = TRUE; -// } -// -//////////////////////////////////////////////////////////////////////////////// -//// -//// Vector2D aTRScale; -//// double fTRShear; -//// double fTRRotate; -//// Vector2D aTRTranslate; -//// Matrix3D aOrigMat; -//// XPolyPolygon aTRPolyPolygon; -//// -//// BOOL bIsPath = pObj->TRGetBaseGeometry(aOrigMat, aTRPolyPolygon); -//// aOrigMat.DecomposeAndCorrect(aTRScale, fTRShear, fTRRotate, aTRTranslate); -//// Vector2D aVectorTranslate; -//// aVectorTranslate.X() = FRound(aTRTranslate.X()); -//// aVectorTranslate.Y() = FRound(aTRTranslate.Y()); -//// -//// Point aPoint(aVectorTranslate.X(), aVectorTranslate.Y()); -//// Rectangle aTRBaseRect( -//// aPoint, -//// Size(FRound(aTRScale.X()), FRound(aTRScale.Y()))); -//// -//// Color aLineColorMerk(rXOut.GetOutDev()->GetLineColor()); -//// Color aFillColorMerk(rXOut.GetOutDev()->GetFillColor()); -//// rXOut.GetOutDev()->SetFillColor(); -//// -//// rXOut.GetOutDev()->SetLineColor(COL_BLACK); -//// rXOut.GetOutDev()->DrawRect(aTRBaseRect); -//// -//// if(bIsPath) -//// { -//// rXOut.GetOutDev()->SetLineColor(COL_LIGHTRED); -//// XPolyPolygon aTRPoPo(aTRPolyPolygon); -//// aTRPoPo.Move(aTRBaseRect.Left(), aTRBaseRect.Top()); -//// sal_uInt16 nCount(aTRPoPo.Count()); -//// for(sal_uInt16 a(0); a < nCount; a++) -//// rXOut.GetOutDev()->DrawPolygon(XOutCreatePolygon(aTRPoPo[a], rXOut.GetOutDev())); -//// } -//// -//// rXOut.GetOutDev()->SetLineColor(aLineColorMerk); -//// rXOut.GetOutDev()->SetFillColor(aFillColorMerk); -//// -//// static BOOL bDoTestSetAllGeometry(FALSE); -//// if(bDoTestSetAllGeometry) -//// pObj->TRSetBaseGeometry(aOrigMat, aTRPolyPolygon); -//// -//// -//////////////////////////////////////////////////////////////////////////////// -// } -// -// // nach dem ersten Objekt bei reinem Hintergrundcache -// // sollen die folgenden Objekte natuerlich nicht gezeichnet werden -// if( bBGCachePrepare ) -// bPaintFlag = FALSE; -// } -// else if( bBGCachePaint ) -// bPaintFlag = TRUE; -// } -// -// // #110094#-5 -// //if( bOk && nEvent != 0 ) -// // bOk = !pAppPtr->AnyInput( nEvent ); -// -// if( !bOk ) -// bBrk = TRUE; -// } -// nObjNum++; -// } -// } -// } -// -// if (bColorsDirty && bRestoreColors) -// aHDCMerk.Restore(*pOut); -// -// return bOk; -//} - SdrObject* SdrObjList::CheckHit(const Point& rPnt, USHORT nTol, const SetOfByte* pVisiLayer, FASTBOOL bBackward) const { SdrObject* pHit=NULL; @@ -1263,7 +848,6 @@ FASTBOOL SdrObjList::GetFillColor(const Point& rPnt, const SetOfByte& rVisLayers return bRet; } - FASTBOOL SdrObjList::IsReadOnly() const { FASTBOOL bRet=FALSE; @@ -1535,71 +1119,6 @@ void SdrObjList::UnGroupObj( ULONG nObjNum ) //////////////////////////////////////////////////////////////////////////////////////////////////// -SvStream& operator<<(SvStream& rOut, const SdrMasterPageDescriptor& rMDP) -{ - SdrIOHeader aHead(rOut,STREAM_WRITE,SdrIOMPgDID); - rOut<<rMDP.nPgNum; - rOut<<rMDP.aVisLayers; - return rOut; -} - -SvStream& operator>>(SvStream& rIn, SdrMasterPageDescriptor& rMDP) -{ - if (rIn.GetError()!=0) return rIn; - SdrIOHeader aHead(rIn,STREAM_READ); - rIn>>rMDP.nPgNum; - rIn>>rMDP.aVisLayers; - return rIn; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -void SdrMasterPageDescriptorList::Clear() -{ - USHORT nAnz=GetCount(); - for (USHORT i=0; i<nAnz; i++) { - delete GetObject(i); - } - aList.Clear(); -} - -void SdrMasterPageDescriptorList::operator=(const SdrMasterPageDescriptorList& rSrcList) -{ - Clear(); - USHORT nAnz=rSrcList.GetCount(); - for (USHORT i=0; i<nAnz; i++) { - Insert(rSrcList[i]); - } -} - -SvStream& operator<<(SvStream& rOut, const SdrMasterPageDescriptorList& rMPDL) -{ - SdrIOHeader aHead(rOut,STREAM_WRITE,SdrIOMPDLID); - USHORT nAnz=rMPDL.GetCount(); - rOut<<nAnz; - for (USHORT i=0; i<nAnz; i++) { - rOut<<rMPDL[i]; - } - return rOut; -} - -SvStream& operator>>(SvStream& rIn, SdrMasterPageDescriptorList& rMPDL) -{ - if (rIn.GetError()!=0) return rIn; - SdrIOHeader aHead(rIn,STREAM_READ); - rMPDL.Clear(); - USHORT nAnz; - rIn>>nAnz; - for (USHORT i=0; i<nAnz; i++) { - SdrMasterPageDescriptor* pMPD=new SdrMasterPageDescriptor; - rIn>>*pMPD; - rMPDL.aList.Insert(pMPD,CONTAINER_APPEND); - } - return rIn; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - void SdrPageGridFrameList::Clear() { USHORT nAnz=GetCount(); @@ -1612,14 +1131,14 @@ void SdrPageGridFrameList::Clear() ////////////////////////////////////////////////////////////////////////////// // #111111# PageUser section -void SdrPage::AddPageUser(SdrPageUser& rNewUser) +void SdrPage::AddPageUser(sdr::PageUser& rNewUser) { maPageUsers.push_back(&rNewUser); } -void SdrPage::RemovePageUser(SdrPageUser& rOldUser) +void SdrPage::RemovePageUser(sdr::PageUser& rOldUser) { - const PageUserVector::iterator aFindResult = ::std::find(maPageUsers.begin(), maPageUsers.end(), &rOldUser); + const ::sdr::PageUserVector::iterator aFindResult = ::std::find(maPageUsers.begin(), maPageUsers.end(), &rOldUser); if(aFindResult != maPageUsers.end()) { maPageUsers.erase(aFindResult); @@ -1666,6 +1185,7 @@ SdrPage::SdrPage(SdrModel& rNewModel, FASTBOOL bMasterPage) nBordLwr(0L), pLayerAdmin(new SdrLayerAdmin(&rNewModel.GetLayerAdmin())), pBackgroundObj(0L), + mpMasterPageDescriptor(0L), nPageNum(0L), bMaster(bMasterPage), bInserted(sal_False), @@ -1687,6 +1207,7 @@ SdrPage::SdrPage(const SdrPage& rSrcPage) nBordLwr(rSrcPage.nBordLwr), pLayerAdmin(new SdrLayerAdmin(rSrcPage.pModel->GetLayerAdmin())), pBackgroundObj(0L), + mpMasterPageDescriptor(0L), nPageNum(rSrcPage.nPageNum), bMaster(rSrcPage.bMaster), bInserted(sal_False), @@ -1707,9 +1228,9 @@ SdrPage::~SdrPage() { // #111111# // tell all the registered PageUsers that the page is in destruction - for(PageUserVector::iterator aIterator = maPageUsers.begin(); aIterator != maPageUsers.end(); aIterator++) + for(::sdr::PageUserVector::iterator aIterator = maPageUsers.begin(); aIterator != maPageUsers.end(); aIterator++) { - SdrPageUser* pPageUser = *aIterator; + sdr::PageUser* pPageUser = *aIterator; DBG_ASSERT(pPageUser, "SdrPage::~SdrPage: corrupt PageUser list (!)"); pPageUser->PageInDestruction(*this); } @@ -1722,6 +1243,8 @@ SdrPage::~SdrPage() delete pBackgroundObj; delete pLayerAdmin; + TRG_ClearMasterPage(); + // #110094# if(mpViewContact) { @@ -1763,7 +1286,18 @@ void SdrPage::operator=(const SdrPage& rSrcPage) nBordRgt = rSrcPage.nBordRgt; nBordLwr = rSrcPage.nBordLwr; nPageNum = rSrcPage.nPageNum; - aMasters = rSrcPage.aMasters; + + if(rSrcPage.TRG_HasMasterPage()) + { + TRG_SetMasterPage(rSrcPage.TRG_GetMasterPage()); + TRG_SetMasterPageVisibleLayers(rSrcPage.TRG_GetMasterPageVisibleLayers()); + } + else + { + TRG_ClearMasterPage(); + } + //aMasters = rSrcPage.aMasters; + bObjectsNotPersistent = rSrcPage.bObjectsNotPersistent; if(rSrcPage.pBackgroundObj) @@ -1890,13 +1424,6 @@ INT32 SdrPage::GetLwrBorder() const return nBordLwr; } -// #i3694# -// This GetOffset() method is not needed anymore, it even leads to errors. -//Point SdrPage::GetOffset() const -//{ -// return Point(); -//} - void SdrPage::SetModel(SdrModel* pNewModel) { SdrModel* pOldModel=pModel; @@ -1944,223 +1471,68 @@ void SdrPage::SetChanged() } //////////////////////////////////////////////////////////////////////////////////////////////////// +// MasterPage interface -// #115423# Not needed -//void SdrPage::BroadcastPageChange() const -//{ -// if(bInserted && pModel) -// { -// pModel->Broadcast(SdrHint(*this)); -// } -//} - -//void SdrPage::SendRepaintBroadcast() const -//{ -// if (bInserted && pModel!=NULL) pModel->Broadcast(SdrHint(*this)); -//} - -USHORT SdrPage::GetMasterPagePos(USHORT nPgNum) const -{ - USHORT nAnz=aMasters.GetCount(); - for (USHORT i=0; i<nAnz; i++) { - USHORT nMaPgNum=aMasters[i].GetPageNum(); - if (nMaPgNum==nPgNum) return i; - } - return SDRPAGE_NOTFOUND; -} - -void SdrPage::InsertMasterPage(USHORT nPgNum, USHORT nPos) -{ - aMasters.Insert(nPgNum,nPos); - SetChanged(); - - SdrPage* pMaster = pModel->GetMasterPage(nPgNum); - if(pMaster) - { - GetViewContact().ActionChildInserted(pMaster->GetViewContact()); - } -} - -void SdrPage::InsertMasterPage(const SdrMasterPageDescriptor& rMPD, USHORT nPos) -{ - aMasters.Insert(rMPD,nPos); - SetChanged(); - - SdrPage* pMaster = pModel->GetMasterPage(rMPD.GetPageNum()); - if(pMaster) - { - GetViewContact().ActionChildInserted(pMaster->GetViewContact()); - } -} - -void SdrPage::RemoveMasterPage(USHORT nPos) +void SdrPage::TRG_SetMasterPage(SdrPage& rNew) { - if(nPos < aMasters.GetCount()) - { - SdrPage* pMaster = pModel->GetMasterPage(aMasters[nPos].GetPageNum()); + if(mpMasterPageDescriptor && &(mpMasterPageDescriptor->GetUsedPage()) == &rNew) + return; - aMasters.Remove(nPos); - SetChanged(); + if(mpMasterPageDescriptor) + TRG_ClearMasterPage(); - if(pMaster) - { - pMaster->GetViewContact().ActionRemoved(); - } - } + mpMasterPageDescriptor = new ::sdr::MasterPageDescriptor(*this, rNew); + GetViewContact().ActionChildInserted(rNew.GetViewContact()); } -void SdrPage::MoveMasterPage(USHORT nPos, USHORT nNewPos) +void SdrPage::TRG_ClearMasterPage() { - if(nPos < aMasters.GetCount()) + if(mpMasterPageDescriptor) { - SdrPage* pMaster = pModel->GetMasterPage(aMasters[nPos].GetPageNum()); - aMasters.Move(nPos,nNewPos); SetChanged(); + sdr::contact::ViewContact& rMasterPageViewContact = mpMasterPageDescriptor->GetUsedPage().GetViewContact(); + rMasterPageViewContact.ActionRemoved(); - // Do necessary ViewContact actions - if(pMaster) - { - pMaster->GetViewContact().ActionRemoved(); - GetViewContact().ActionChildInserted(pMaster->GetViewContact()); - } + delete mpMasterPageDescriptor; + mpMasterPageDescriptor = 0L; } } -SdrPage* SdrPage::GetMasterPage(USHORT nPos) const -{ - USHORT nPgNum=GetMasterPageNum(nPos); - SdrPage* pPg=NULL; - if( pModel ) - pPg = pModel->GetMasterPage(nPgNum); - return pPg; -} - -void SdrPage::SetMasterPageNum(USHORT nPgNum, USHORT nPos) +SdrPage& SdrPage::TRG_GetMasterPage() const { - if(nPos < aMasters.GetCount()) - { - sal_uInt16 nOldPageNum(aMasters[nPos].GetPageNum()); - - if(nOldPageNum != nPgNum) - { - SdrPage* pOldMaster = pModel->GetMasterPage(nOldPageNum); - SdrPage* pNewMaster = pModel->GetMasterPage(nPgNum); - aMasters[nPos].SetPageNum(nPgNum); - SetChanged(); - - // Do necessary ViewContact actions - if(pOldMaster) - { - pOldMaster->GetViewContact().ActionRemoved(); - } - - if(pNewMaster) - { - GetViewContact().ActionChildInserted(pNewMaster->GetViewContact()); - } - } - } + DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_GetMasterPage(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); + return mpMasterPageDescriptor->GetUsedPage(); } -void SdrPage::SetMasterPageVisibleLayers(const SetOfByte& rVL, USHORT nPos) +const SetOfByte& SdrPage::TRG_GetMasterPageVisibleLayers() const { - if(nPos < aMasters.GetCount()) - { - const SetOfByte& rOldSetOfByte = aMasters[nPos].GetVisibleLayers(); - - if(rOldSetOfByte != rVL) - { - SdrPage* pMaster = pModel->GetMasterPage(aMasters[nPos].GetPageNum()); - aMasters[nPos].SetVisibleLayers(rVL); - SetChanged(); - - // Do necessary ViewContact actions - if(pMaster) - { - pMaster->GetViewContact().ActionChanged(); - } - } - } + DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_GetMasterPageVisibleLayers(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); + return mpMasterPageDescriptor->GetVisibleLayers(); } -void SdrPage::SetMasterPageDescriptor(const SdrMasterPageDescriptor& rMPD, USHORT nPos) +void SdrPage::TRG_SetMasterPageVisibleLayers(const SetOfByte& rNew) { - if(nPos < aMasters.GetCount()) - { - const SdrMasterPageDescriptor& rOldMPD = aMasters[nPos]; - - if(rOldMPD != rMPD) - { - SdrPage* pOldMaster = pModel->GetMasterPage(rOldMPD.GetPageNum()); - SdrPage* pNewMaster = pModel->GetMasterPage(rMPD.GetPageNum()); - aMasters[nPos] = rMPD; - SetChanged(); + DBG_ASSERT(mpMasterPageDescriptor != 0L, "TRG_SetMasterPageVisibleLayers(): No MasterPage available. Use TRG_HasMasterPage() before access (!)"); + mpMasterPageDescriptor->SetVisibleLayers(rNew); - // Do necessary ViewContact actions - if(pOldMaster) - { - pOldMaster->GetViewContact().ActionRemoved(); - } - - if(pNewMaster) - { - GetViewContact().ActionChildInserted(pNewMaster->GetViewContact()); - } - } - } + sdr::contact::ViewContact& rMasterPageViewContact = mpMasterPageDescriptor->GetUsedPage().GetViewContact(); + rMasterPageViewContact.ActionChanged(); + rMasterPageViewContact.SetVisibleLayers(rNew); } // #115423# used from SdrModel::RemoveMasterPage -void SdrPage::ImpMasterPageRemoved(USHORT nMasterPageNum) +void SdrPage::TRG_ImpMasterPageRemoved(const SdrPage& rRemovedPage) { - USHORT nMasterAnz=GetMasterPageCount(); - for (USHORT nm=nMasterAnz; nm>0;) { - nm--; - USHORT nNum=aMasters[nm].GetPageNum(); - if (nNum==nMasterPageNum) + if(TRG_HasMasterPage()) + { + if(&TRG_GetMasterPage() == &rRemovedPage) { - RemoveMasterPage(nm); - } - if (nNum>nMasterPageNum) { - // Hintere anpassen wegen Verschiebung durch entfernen - aMasters[nm].SetPageNum(USHORT(nNum-1)); - } - } -} - -// #115423# used from SdrModel::InsertMasterPage -void SdrPage::ImpMasterPageInserted(USHORT nMasterPageNum) -{ - USHORT nMasterAnz=GetMasterPageCount(); - for (USHORT nm=nMasterAnz; nm>0;) { - nm--; - USHORT nNum=aMasters[nm].GetPageNum(); - if (nNum>=nMasterPageNum) { - // Hintere anpassen wegen Verschiebung durch einfuegen - aMasters[nm].SetPageNum(nNum+1); - } - } -} - -// #115423# used from SdrModel::MoveMasterPage -void SdrPage::ImpMasterPageMoved(USHORT nMasterPageNum, USHORT nNewMasterPageNum) -{ - USHORT nMasterAnz=GetMasterPageCount(); - for (USHORT nm=nMasterAnz; nm>0;) { - nm--; - USHORT nNum=aMasters[nm].GetPageNum(); - if (nNum==nMasterPageNum) { - aMasters[nm].SetPageNum(nNewMasterPageNum); - } else { - // Hintere anpassen wegen Verschiebung durch entfernen und einfuegen - USHORT nNeuNum=nNum; - if (nNeuNum>nMasterPageNum) nNeuNum--; - if (nNeuNum>=nNewMasterPageNum) nNeuNum++; - aMasters[nm].SetPageNum(nNeuNum); + TRG_ClearMasterPage(); } } } +// MasterPage interface //////////////////////////////////////////////////////////////////////////////////////////////////// FASTBOOL SdrPage::ImplGetFillColor(const Point& rPnt, const SetOfByte& rVisLayers, @@ -2168,27 +1540,25 @@ FASTBOOL SdrPage::ImplGetFillColor(const Point& rPnt, const SetOfByte& rVisLayer { if (pModel==NULL) return FALSE; FASTBOOL bRet=SdrObjList::GetFillColor(rPnt,rVisLayers,/*bLayerSorted,*/rCol); - if (!bRet && !bMaster) { + if (!bRet && !bMaster) + { // nun zu den Masterpages - USHORT nMasterAnz=GetMasterPageCount(); - for (USHORT nMaster=nMasterAnz; nMaster>0 && !bRet;) { - nMaster--; - const SdrMasterPageDescriptor& rMaster=GetMasterPageDescriptor(nMaster); + if(TRG_HasMasterPage()) + { SetOfByte aSet(rVisLayers); - aSet&=rMaster.GetVisibleLayers(); - SdrPage* pMaster=pModel->GetMasterPage(rMaster.GetPageNum()); - if (pMaster!=NULL) - { - // #108867# Don't fall back to background shape on - // master pages. This is later handled by - // GetBackgroundColor, and is necessary to cater for - // the silly ordering: 1. shapes, 2. master page - // shapes, 3. page background, 4. master page - // background. - bRet=pMaster->ImplGetFillColor(rPnt,aSet,/*bLayerSorted,*/rCol,TRUE); - } + aSet &= TRG_GetMasterPageVisibleLayers(); + SdrPage& rMasterPage = TRG_GetMasterPage(); + + // #108867# Don't fall back to background shape on + // master pages. This is later handled by + // GetBackgroundColor, and is necessary to cater for + // the silly ordering: 1. shapes, 2. master page + // shapes, 3. page background, 4. master page + // background. + bRet = rMasterPage.ImplGetFillColor(rPnt, aSet, rCol, TRUE); } } + // #108867# Only now determine background color from background shapes if( !bRet && !bSkipBackgroundShape ) { @@ -2221,160 +1591,162 @@ const SdrPageGridFrameList* SdrPage::GetGridFrameList(const SdrPageView* pPV, co void SdrPage::ReadData(const SdrIOHeader& rHead, SvStream& rIn) { - if (rIn.GetError()!=0) return; - SdrDownCompat aCompat(rIn,STREAM_READ); // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code) -#ifdef DBG_UTIL - aCompat.SetID("SdrPage"); -#endif - - if (rHead.GetVersion()>=11) { - // damit ich meine eigenen SubRecords erkenne (ab V11) - char cMagic[4]; - if (rIn.Read(cMagic,4)!=4 || memcmp(cMagic,SdrIOJoeMagic,4)!=0) { - rIn.SetError(SVSTREAM_FILEFORMAT_ERROR); - return; - } - } - - { // MiscellaneousData ab V11 eingepackt - SdrDownCompat* pPageMiscCompat=NULL; - if (rHead.GetVersion()>=11) { - pPageMiscCompat=new SdrDownCompat(rIn,STREAM_READ); -#ifdef DBG_UTIL - pPageMiscCompat->SetID("SdrPage(Miscellaneous)"); -#endif - } - rIn>>nWdt; - rIn>>nHgt; - rIn>>nBordLft; - rIn>>nBordUpp; - rIn>>nBordRgt; - rIn>>nBordLwr; - USHORT n; - rIn>>n; //aName; - if (pPageMiscCompat!=NULL) { - delete pPageMiscCompat; - } - } - - FASTBOOL bEnde=FALSE; - while (rIn.GetError()==0 && !rIn.IsEof() && !bEnde) { - SdrIOHeaderLookAhead aHead(rIn); // Layerdefinitionen lesen - if (aHead.IsID(SdrIOLayrID)) { - SdrLayer* pLay=new SdrLayer; // Layerdefinition lesen - rIn>>*pLay; - pLayerAdmin->InsertLayer(pLay); - } - //#110094#-10 - //else if (aHead.IsID(SdrIOLSetID)) - //{ - // SdrLayerSet* pSet=new SdrLayerSet; // Layersetdefinition lesen - // rIn>>*pSet; - // pLayerAdmin->InsertLayerSet(pSet); - //} - else - // Fuer den Fall der Faelle kann hier ww. MPgDscr oder MPgDscrList stehen - if (aHead.IsID(SdrIOMPgDID)) { // Masterpagedescriptor - SdrMasterPageDescriptor aDscr; - rIn>>aDscr; - aMasters.Insert(aDscr); - } else - if (aHead.IsID(SdrIOMPDLID)) { // MasterpagedescriptorList - SdrMasterPageDescriptorList aDscrList; - rIn>>aDscrList; - USHORT nAnz=aDscrList.GetCount(); - for (USHORT nNum=0; nNum<nAnz; nNum++) { - aMasters.Insert(aDscrList[nNum]); - } - } else bEnde=TRUE; - } - - if (rHead.GetVersion()>=1) { - } else { - USHORT nMaAnz=0,i; - rIn>>nMaAnz; - for (i=0; i<nMaAnz; i++) { - USHORT nMaPgNum; - rIn>>nMaPgNum; - InsertMasterPage(nMaPgNum); - } - } - SdrObjList::Load(rIn,*this); // Liste der Objekte lesen - - if ( rHead.GetVersion() >= 16 ) - { - BOOL bBackgroundObj = FALSE; - rIn >> bBackgroundObj; - if( bBackgroundObj ) - { - SdrObjIOHeaderLookAhead aHead( rIn,STREAM_READ ); - if ( !aHead.IsEnde() ) - { - pBackgroundObj = SdrObjFactory::MakeNewObject( aHead.nInventor, aHead.nIdentifier, this ); - if ( bBackgroundObj ) - rIn >> *pBackgroundObj; - } - else - aHead.SkipRecord(); // skip end mark - } - } - - // #88340# - if(!aMasters.GetCount() && !IsMasterPage()) - { - if(pModel && pModel->GetMasterPageCount() > 2) - { - // This is not allowed. Create a dummy entry - // to compensate this error. - SdrMasterPageDescriptor aDscr(1/*PageMaster*/); - aMasters.Insert(aDscr); - } - else - { - SdrMasterPageDescriptor aDscr(0); - aMasters.Insert(aDscr); - } - } + DBG_ERROR("SdrPage::ReadData(): binfilter still used, but should not (!)"); +// if (rIn.GetError()!=0) return; +// SdrDownCompat aCompat(rIn,STREAM_READ); // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code) +//#ifdef DBG_UTIL +// aCompat.SetID("SdrPage"); +//#endif +// +// if (rHead.GetVersion()>=11) { +// // damit ich meine eigenen SubRecords erkenne (ab V11) +// char cMagic[4]; +// if (rIn.Read(cMagic,4)!=4 || memcmp(cMagic,SdrIOJoeMagic,4)!=0) { +// rIn.SetError(SVSTREAM_FILEFORMAT_ERROR); +// return; +// } +// } +// +// { // MiscellaneousData ab V11 eingepackt +// SdrDownCompat* pPageMiscCompat=NULL; +// if (rHead.GetVersion()>=11) { +// pPageMiscCompat=new SdrDownCompat(rIn,STREAM_READ); +//#ifdef DBG_UTIL +// pPageMiscCompat->SetID("SdrPage(Miscellaneous)"); +//#endif +// } +// rIn>>nWdt; +// rIn>>nHgt; +// rIn>>nBordLft; +// rIn>>nBordUpp; +// rIn>>nBordRgt; +// rIn>>nBordLwr; +// USHORT n; +// rIn>>n; //aName; +// if (pPageMiscCompat!=NULL) { +// delete pPageMiscCompat; +// } +// } +// +// FASTBOOL bEnde=FALSE; +// while (rIn.GetError()==0 && !rIn.IsEof() && !bEnde) { +// SdrIOHeaderLookAhead aHead(rIn); // Layerdefinitionen lesen +// if (aHead.IsID(SdrIOLayrID)) { +// SdrLayer* pLay=new SdrLayer; // Layerdefinition lesen +// rIn>>*pLay; +// pLayerAdmin->InsertLayer(pLay); +// } +// //#110094#-10 +// //else if (aHead.IsID(SdrIOLSetID)) +// //{ +// // SdrLayerSet* pSet=new SdrLayerSet; // Layersetdefinition lesen +// // rIn>>*pSet; +// // pLayerAdmin->InsertLayerSet(pSet); +// //} +// else +// // Fuer den Fall der Faelle kann hier ww. MPgDscr oder MPgDscrList stehen +// if (aHead.IsID(SdrIOMPgDID)) { // Masterpagedescriptor +// SdrMasterPageDescriptor aDscr; +// rIn>>aDscr; +// aMasters.Insert(aDscr); +// } else +// if (aHead.IsID(SdrIOMPDLID)) { // MasterpagedescriptorList +// SdrMasterPageDescriptorList aDscrList; +// rIn>>aDscrList; +// USHORT nAnz=aDscrList.GetCount(); +// for (USHORT nNum=0; nNum<nAnz; nNum++) { +// aMasters.Insert(aDscrList[nNum]); +// } +// } else bEnde=TRUE; +// } +// +// if (rHead.GetVersion()>=1) { +// } else { +// USHORT nMaAnz=0,i; +// rIn>>nMaAnz; +// for (i=0; i<nMaAnz; i++) { +// USHORT nMaPgNum; +// rIn>>nMaPgNum; +// InsertMasterPage(nMaPgNum); +// } +// } +// SdrObjList::Load(rIn,*this); // Liste der Objekte lesen +// +// if ( rHead.GetVersion() >= 16 ) +// { +// BOOL bBackgroundObj = FALSE; +// rIn >> bBackgroundObj; +// if( bBackgroundObj ) +// { +// SdrObjIOHeaderLookAhead aHead( rIn,STREAM_READ ); +// if ( !aHead.IsEnde() ) +// { +// pBackgroundObj = SdrObjFactory::MakeNewObject( aHead.nInventor, aHead.nIdentifier, this ); +// if ( bBackgroundObj ) +// rIn >> *pBackgroundObj; +// } +// else +// aHead.SkipRecord(); // skip end mark +// } +// } +// +// // #88340# +// if(!aMasters.GetCount() && !IsMasterPage()) +// { +// if(pModel && pModel->GetMasterPageCount() > 2) +// { +// // This is not allowed. Create a dummy entry +// // to compensate this error. +// SdrMasterPageDescriptor aDscr(1/*PageMaster*/); +// aMasters.Insert(aDscr); +// } +// else +// { +// SdrMasterPageDescriptor aDscr(0); +// aMasters.Insert(aDscr); +// } +// } } void SdrPage::WriteData(SvStream& rOut) const { - SdrDownCompat aCompat(rOut,STREAM_WRITE); // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code) -#ifdef DBG_UTIL - aCompat.SetID("SdrPage"); -#endif - rOut.Write(SdrIOJoeMagic,4); // damit ich meine eigenen SubRecords erkenne (ab V11) - { // MiscellaneousData ab V11 eingepackt - SdrDownCompat aPageMiscCompat(rOut,STREAM_WRITE); -#ifdef DBG_UTIL - aPageMiscCompat.SetID("SdrPage(Miscellaneous)"); -#endif - rOut<<nWdt; - rOut<<nHgt; - rOut<<nBordLft; - rOut<<nBordUpp; - rOut<<nBordRgt; - rOut<<nBordLwr; - USHORT n=0; - rOut<<n; //rPg.aName; - } - - USHORT i; // Lokale Layerdefinitionen der Seite - for (i=0; i<pLayerAdmin->GetLayerCount(); i++) { - rOut<<*pLayerAdmin->GetLayer(i); - } - //#110094#-10 - //for (i=0; i<pLayerAdmin->GetLayerSetCount(); i++) { - // rOut<<*pLayerAdmin->GetLayerSet(i); - //} - - rOut<<aMasters; - SdrObjList::Save(rOut); - - BOOL bBackgroundObj = pBackgroundObj ? TRUE : FALSE; - rOut << bBackgroundObj; - if( pBackgroundObj ) - rOut << *pBackgroundObj; + DBG_ERROR("SdrPage::WriteData(): binfilter still used, but should not (!)"); +// SdrDownCompat aCompat(rOut,STREAM_WRITE); // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code) +//#ifdef DBG_UTIL +// aCompat.SetID("SdrPage"); +//#endif +// rOut.Write(SdrIOJoeMagic,4); // damit ich meine eigenen SubRecords erkenne (ab V11) +// { // MiscellaneousData ab V11 eingepackt +// SdrDownCompat aPageMiscCompat(rOut,STREAM_WRITE); +//#ifdef DBG_UTIL +// aPageMiscCompat.SetID("SdrPage(Miscellaneous)"); +//#endif +// rOut<<nWdt; +// rOut<<nHgt; +// rOut<<nBordLft; +// rOut<<nBordUpp; +// rOut<<nBordRgt; +// rOut<<nBordLwr; +// USHORT n=0; +// rOut<<n; //rPg.aName; +// } +// +// USHORT i; // Lokale Layerdefinitionen der Seite +// for (i=0; i<pLayerAdmin->GetLayerCount(); i++) { +// rOut<<*pLayerAdmin->GetLayer(i); +// } +// //#110094#-10 +// //for (i=0; i<pLayerAdmin->GetLayerSetCount(); i++) { +// // rOut<<*pLayerAdmin->GetLayerSet(i); +// //} +// +// rOut<<aMasters; +// SdrObjList::Save(rOut); +// +// BOOL bBackgroundObj = pBackgroundObj ? TRUE : FALSE; +// rOut << bBackgroundObj; +// if( pBackgroundObj ) +// rOut << *pBackgroundObj; } SvStream& operator>>(SvStream& rIn, SdrPage& rPg) @@ -2504,12 +1876,14 @@ Color SdrPage::GetBackgroundColor( SdrPageView* pView ) const if( NULL == pBackgroundObj ) { // if not, see if we have a masterpage and get that background object - if( GetMasterPageCount() ) + if(TRG_HasMasterPage()) { - SdrPage* pMaster = GetMasterPage(0); + SdrPage& rMasterPage = TRG_GetMasterPage(); - if( pMaster && pMaster->GetObjCount() ) - pBackgroundObj = pMaster->GetObj( 0 ); + if(rMasterPage.GetObjCount()) + { + pBackgroundObj = rMasterPage.GetObj( 0 ); + } } } } @@ -2529,12 +1903,15 @@ Color SdrPage::GetBackgroundColor() const return GetBackgroundColor( NULL ); } -/** this method returns true if the object from the SdrPaintProcRec should +/** this method returns true if the object from the ViewObjectContact should be visible on this page while rendering. bEdit selects if visibility test is for an editing view or a final render, like printing. */ -bool SdrPage::checkVisibility( SdrPaintProcRec* pRecord, bool bEdit ) +bool SdrPage::checkVisibility( + ::sdr::contact::ViewObjectContact& rOriginal, + ::sdr::contact::DisplayInfo& rDisplayInfo, + bool bEdit ) { // this will be handled in the application if needed return true; @@ -2552,3 +1929,39 @@ void SdrPage::ActionChanged() const Bitmap SdrPage::GetBitmap(const SetOfByte& rVisibleLayers, FASTBOOL bTrimBorders) const {} GDIMetaFile SdrPage::GetMetaFile(const SetOfByte& rVisibleLayers, FASTBOOL bTrimBorders) {} #endif + +////////////////////////////////////////////////////////////////////////////// +// use new redirector instead of pPaintProc + +StandardCheckVisisbilityRedirector::StandardCheckVisisbilityRedirector() +: ViewObjectContactRedirector() +{ +} + +StandardCheckVisisbilityRedirector::~StandardCheckVisisbilityRedirector() +{ +} + +void StandardCheckVisisbilityRedirector::PaintObject(::sdr::contact::ViewObjectContact& rOriginal, ::sdr::contact::DisplayInfo& rDisplayInfo) +{ + SdrObject* pObject = rOriginal.GetViewContact().TryToGetSdrObject(); + + if(pObject) + { + if(pObject->GetPage()) + { + if(pObject->GetPage()->checkVisibility(rOriginal, rDisplayInfo, false)) + { + rOriginal.PaintObject(rDisplayInfo); + } + } + } + else + { + // not an object, maybe a page + rOriginal.PaintObject(rDisplayInfo); + } +} + +////////////////////////////////////////////////////////////////////////////// +// eof |