1*f6e50924SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*f6e50924SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*f6e50924SAndrew Rist * or more contributor license agreements. See the NOTICE file 5*f6e50924SAndrew Rist * distributed with this work for additional information 6*f6e50924SAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*f6e50924SAndrew Rist * to you under the Apache License, Version 2.0 (the 8*f6e50924SAndrew Rist * "License"); you may not use this file except in compliance 9*f6e50924SAndrew Rist * with the License. You may obtain a copy of the License at 10*f6e50924SAndrew Rist * 11*f6e50924SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12*f6e50924SAndrew Rist * 13*f6e50924SAndrew Rist * Unless required by applicable law or agreed to in writing, 14*f6e50924SAndrew Rist * software distributed under the License is distributed on an 15*f6e50924SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*f6e50924SAndrew Rist * KIND, either express or implied. See the License for the 17*f6e50924SAndrew Rist * specific language governing permissions and limitations 18*f6e50924SAndrew Rist * under the License. 19*f6e50924SAndrew Rist * 20*f6e50924SAndrew Rist *************************************************************/ 21*f6e50924SAndrew Rist 22*f6e50924SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_svx.hxx" 26cdf0e10cSrcweir #include <svx/sdrmasterpagedescriptor.hxx> 27cdf0e10cSrcweir #include <svx/sdr/contact/viewcontactofmasterpagedescriptor.hxx> 28cdf0e10cSrcweir #include <svx/svdpage.hxx> 29cdf0e10cSrcweir 30cdf0e10cSrcweir // #i42075# 31cdf0e10cSrcweir #include <svx/svdobj.hxx> 32cdf0e10cSrcweir #include <svx/xfillit0.hxx> 33cdf0e10cSrcweir #include <svl/itemset.hxx> 34cdf0e10cSrcweir 35cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 36cdf0e10cSrcweir 37cdf0e10cSrcweir namespace sdr 38cdf0e10cSrcweir { 39cdf0e10cSrcweir // ViewContact part CreateObjectSpecificViewContact()40cdf0e10cSrcweir sdr::contact::ViewContact* MasterPageDescriptor::CreateObjectSpecificViewContact() 41cdf0e10cSrcweir { 42cdf0e10cSrcweir return new sdr::contact::ViewContactOfMasterPageDescriptor(*this); 43cdf0e10cSrcweir } 44cdf0e10cSrcweir MasterPageDescriptor(SdrPage & aOwnerPage,SdrPage & aUsedPage)45cdf0e10cSrcweir MasterPageDescriptor::MasterPageDescriptor(SdrPage& aOwnerPage, SdrPage& aUsedPage) 46cdf0e10cSrcweir : maOwnerPage(aOwnerPage), 47cdf0e10cSrcweir maUsedPage(aUsedPage), 48cdf0e10cSrcweir mpViewContact(0L) 49cdf0e10cSrcweir { 50cdf0e10cSrcweir // all layers visible 51cdf0e10cSrcweir maVisibleLayers.SetAll(); 52cdf0e10cSrcweir 53cdf0e10cSrcweir // register at used page 54cdf0e10cSrcweir maUsedPage.AddPageUser(*this); 55cdf0e10cSrcweir } 56cdf0e10cSrcweir ~MasterPageDescriptor()57cdf0e10cSrcweir MasterPageDescriptor::~MasterPageDescriptor() 58cdf0e10cSrcweir { 59cdf0e10cSrcweir // de-register at used page 60cdf0e10cSrcweir maUsedPage.RemovePageUser(*this); 61cdf0e10cSrcweir 62cdf0e10cSrcweir if(mpViewContact) 63cdf0e10cSrcweir { 64cdf0e10cSrcweir delete mpViewContact; 65cdf0e10cSrcweir mpViewContact = 0L; 66cdf0e10cSrcweir } 67cdf0e10cSrcweir } 68cdf0e10cSrcweir 69cdf0e10cSrcweir // ViewContact part GetViewContact() const70cdf0e10cSrcweir sdr::contact::ViewContact& MasterPageDescriptor::GetViewContact() const 71cdf0e10cSrcweir { 72cdf0e10cSrcweir if(!mpViewContact) 73cdf0e10cSrcweir { 74cdf0e10cSrcweir const_cast< MasterPageDescriptor* >(this)->mpViewContact = 75cdf0e10cSrcweir const_cast< MasterPageDescriptor* >(this)->CreateObjectSpecificViewContact(); 76cdf0e10cSrcweir } 77cdf0e10cSrcweir 78cdf0e10cSrcweir return *mpViewContact; 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir // this method is called form the destructor of the referenced page. 82cdf0e10cSrcweir // do all necessary action to forget the page. It is not necessary to call 83cdf0e10cSrcweir // RemovePageUser(), that is done form the destructor. PageInDestruction(const SdrPage &)84cdf0e10cSrcweir void MasterPageDescriptor::PageInDestruction(const SdrPage& /*rPage*/) 85cdf0e10cSrcweir { 86cdf0e10cSrcweir maOwnerPage.TRG_ClearMasterPage(); 87cdf0e10cSrcweir } 88cdf0e10cSrcweir SetVisibleLayers(const SetOfByte & rNew)89cdf0e10cSrcweir void MasterPageDescriptor::SetVisibleLayers(const SetOfByte& rNew) 90cdf0e10cSrcweir { 91cdf0e10cSrcweir if(rNew != maVisibleLayers) 92cdf0e10cSrcweir { 93cdf0e10cSrcweir maVisibleLayers = rNew; 94cdf0e10cSrcweir GetViewContact().ActionChanged(); 95cdf0e10cSrcweir } 96cdf0e10cSrcweir } 97cdf0e10cSrcweir 98cdf0e10cSrcweir // operators operator ==(const MasterPageDescriptor & rCandidate) const99cdf0e10cSrcweir sal_Bool MasterPageDescriptor::operator==(const MasterPageDescriptor& rCandidate) const 100cdf0e10cSrcweir { 101cdf0e10cSrcweir return (&maOwnerPage == &rCandidate.maOwnerPage 102cdf0e10cSrcweir && &maUsedPage == &rCandidate.maUsedPage 103cdf0e10cSrcweir && maVisibleLayers == rCandidate.maVisibleLayers); 104cdf0e10cSrcweir } 105cdf0e10cSrcweir operator !=(const MasterPageDescriptor & rCandidate) const106cdf0e10cSrcweir sal_Bool MasterPageDescriptor::operator!=(const MasterPageDescriptor& rCandidate) const 107cdf0e10cSrcweir { 108cdf0e10cSrcweir return (&maOwnerPage != &rCandidate.maOwnerPage 109cdf0e10cSrcweir || &maUsedPage != &rCandidate.maUsedPage 110cdf0e10cSrcweir || maVisibleLayers != rCandidate.maVisibleLayers); 111cdf0e10cSrcweir } 112cdf0e10cSrcweir getCorrectSdrPageProperties() const113cdf0e10cSrcweir const SdrPageProperties* MasterPageDescriptor::getCorrectSdrPageProperties() const 114cdf0e10cSrcweir { 115cdf0e10cSrcweir const SdrPage* pCorrectPage = &GetOwnerPage(); 116cdf0e10cSrcweir const SdrPageProperties* pCorrectProperties = &pCorrectPage->getSdrPageProperties(); 117cdf0e10cSrcweir 118cdf0e10cSrcweir if(XFILL_NONE == ((const XFillStyleItem&)pCorrectProperties->GetItemSet().Get(XATTR_FILLSTYLE)).GetValue()) 119cdf0e10cSrcweir { 120cdf0e10cSrcweir pCorrectPage = &GetUsedPage(); 121cdf0e10cSrcweir pCorrectProperties = &pCorrectPage->getSdrPageProperties(); 122cdf0e10cSrcweir } 123cdf0e10cSrcweir 124cdf0e10cSrcweir if(pCorrectPage->IsMasterPage() && !pCorrectProperties->GetStyleSheet()) 125cdf0e10cSrcweir { 126cdf0e10cSrcweir // #i110846# Suppress SdrPage FillStyle for MasterPages without StyleSheets, 127cdf0e10cSrcweir // else the PoolDefault (XFILL_COLOR and Blue8) will be used. Normally, all 128cdf0e10cSrcweir // MasterPages should have a StyleSheet excactly for this reason, but historically 129cdf0e10cSrcweir // e.g. the Notes MasterPage has no StyleSheet set (and there maybe others). 130cdf0e10cSrcweir pCorrectProperties = 0; 131cdf0e10cSrcweir } 132cdf0e10cSrcweir 133cdf0e10cSrcweir return pCorrectProperties; 134cdf0e10cSrcweir } 135cdf0e10cSrcweir } // end of namespace sdr 136cdf0e10cSrcweir 137cdf0e10cSrcweir ////////////////////////////////////////////////////////////////////////////// 138cdf0e10cSrcweir // eof 139