102c50d82SAndre Fischer /**************************************************************
202c50d82SAndre Fischer *
302c50d82SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one
402c50d82SAndre Fischer * or more contributor license agreements. See the NOTICE file
502c50d82SAndre Fischer * distributed with this work for additional information
602c50d82SAndre Fischer * regarding copyright ownership. The ASF licenses this file
702c50d82SAndre Fischer * to you under the Apache License, Version 2.0 (the
802c50d82SAndre Fischer * "License"); you may not use this file except in compliance
902c50d82SAndre Fischer * with the License. You may obtain a copy of the License at
1002c50d82SAndre Fischer *
1102c50d82SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0
1202c50d82SAndre Fischer *
1302c50d82SAndre Fischer * Unless required by applicable law or agreed to in writing,
1402c50d82SAndre Fischer * software distributed under the License is distributed on an
1502c50d82SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1602c50d82SAndre Fischer * KIND, either express or implied. See the License for the
1702c50d82SAndre Fischer * specific language governing permissions and limitations
1802c50d82SAndre Fischer * under the License.
1902c50d82SAndre Fischer *
2002c50d82SAndre Fischer *************************************************************/
2102c50d82SAndre Fischer
2202c50d82SAndre Fischer #include "precompiled_sd.hxx"
2302c50d82SAndre Fischer
2402c50d82SAndre Fischer #include "MasterPageDescriptor.hxx"
2502c50d82SAndre Fischer
2602c50d82SAndre Fischer #include "DocumentHelper.hxx"
2702c50d82SAndre Fischer #include "sdpage.hxx"
2802c50d82SAndre Fischer #include <tools/urlobj.hxx>
2902c50d82SAndre Fischer
3002c50d82SAndre Fischer namespace sd { namespace sidebar {
3102c50d82SAndre Fischer
3202c50d82SAndre Fischer
3302c50d82SAndre Fischer //===== MasterPageDescriptor ==================================================
3402c50d82SAndre Fischer
MasterPageDescriptor(MasterPageContainer::Origin eOrigin,const sal_Int32 nTemplateIndex,const String & rsURL,const String & rsPageName,const String & rsStyleName,const bool bIsPrecious,const::boost::shared_ptr<PageObjectProvider> & rpPageObjectProvider,const::boost::shared_ptr<PreviewProvider> & rpPreviewProvider)3502c50d82SAndre Fischer MasterPageDescriptor::MasterPageDescriptor (
3602c50d82SAndre Fischer MasterPageContainer::Origin eOrigin,
3702c50d82SAndre Fischer const sal_Int32 nTemplateIndex,
3802c50d82SAndre Fischer const String& rsURL,
3902c50d82SAndre Fischer const String& rsPageName,
4002c50d82SAndre Fischer const String& rsStyleName,
4102c50d82SAndre Fischer const bool bIsPrecious,
4202c50d82SAndre Fischer const ::boost::shared_ptr<PageObjectProvider>& rpPageObjectProvider,
4302c50d82SAndre Fischer const ::boost::shared_ptr<PreviewProvider>& rpPreviewProvider)
4402c50d82SAndre Fischer : maToken(MasterPageContainer::NIL_TOKEN),
4502c50d82SAndre Fischer meOrigin(eOrigin),
4602c50d82SAndre Fischer msURL(INetURLObject(rsURL).GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS)),
4702c50d82SAndre Fischer msPageName(rsPageName),
4802c50d82SAndre Fischer msStyleName(rsStyleName),
4902c50d82SAndre Fischer mbIsPrecious(bIsPrecious),
5002c50d82SAndre Fischer mpMasterPage(NULL),
5102c50d82SAndre Fischer mpSlide(NULL),
5202c50d82SAndre Fischer maSmallPreview(),
5302c50d82SAndre Fischer maLargePreview(),
5402c50d82SAndre Fischer mpPreviewProvider(rpPreviewProvider),
5502c50d82SAndre Fischer mpPageObjectProvider(rpPageObjectProvider),
5602c50d82SAndre Fischer mnTemplateIndex(nTemplateIndex),
5702c50d82SAndre Fischer meURLClassification(URLCLASS_UNDETERMINED),
5802c50d82SAndre Fischer mnUseCount(0)
5902c50d82SAndre Fischer {
6002c50d82SAndre Fischer }
6102c50d82SAndre Fischer
6202c50d82SAndre Fischer
6302c50d82SAndre Fischer
6402c50d82SAndre Fischer
MasterPageDescriptor(const MasterPageDescriptor & rDescriptor)6502c50d82SAndre Fischer MasterPageDescriptor::MasterPageDescriptor (const MasterPageDescriptor& rDescriptor)
6602c50d82SAndre Fischer : maToken(rDescriptor.maToken),
6702c50d82SAndre Fischer meOrigin(rDescriptor.meOrigin),
6802c50d82SAndre Fischer msURL(rDescriptor.msURL),
6902c50d82SAndre Fischer msPageName(rDescriptor.msPageName),
7002c50d82SAndre Fischer msStyleName(rDescriptor.msStyleName),
7102c50d82SAndre Fischer mbIsPrecious(rDescriptor.mbIsPrecious),
7202c50d82SAndre Fischer mpMasterPage(rDescriptor.mpMasterPage),
7302c50d82SAndre Fischer mpSlide(rDescriptor.mpSlide),
7402c50d82SAndre Fischer maSmallPreview(rDescriptor.maSmallPreview),
7502c50d82SAndre Fischer maLargePreview(rDescriptor.maLargePreview),
7602c50d82SAndre Fischer mpPreviewProvider(rDescriptor.mpPreviewProvider),
7702c50d82SAndre Fischer mpPageObjectProvider(rDescriptor.mpPageObjectProvider),
7802c50d82SAndre Fischer mnTemplateIndex(rDescriptor.mnTemplateIndex),
7902c50d82SAndre Fischer meURLClassification(rDescriptor.meURLClassification),
8002c50d82SAndre Fischer mnUseCount(rDescriptor.mnUseCount)
8102c50d82SAndre Fischer {
8202c50d82SAndre Fischer }
8302c50d82SAndre Fischer
8402c50d82SAndre Fischer
8502c50d82SAndre Fischer
8602c50d82SAndre Fischer
~MasterPageDescriptor(void)8702c50d82SAndre Fischer MasterPageDescriptor::~MasterPageDescriptor (void)
8802c50d82SAndre Fischer {
8902c50d82SAndre Fischer }
9002c50d82SAndre Fischer
9102c50d82SAndre Fischer
9202c50d82SAndre Fischer
9302c50d82SAndre Fischer
SetToken(MasterPageContainer::Token aToken)9402c50d82SAndre Fischer void MasterPageDescriptor::SetToken (MasterPageContainer::Token aToken)
9502c50d82SAndre Fischer {
9602c50d82SAndre Fischer maToken = aToken;
9702c50d82SAndre Fischer }
9802c50d82SAndre Fischer
9902c50d82SAndre Fischer
10002c50d82SAndre Fischer
10102c50d82SAndre Fischer
GetPreview(MasterPageContainer::PreviewSize eSize)10202c50d82SAndre Fischer Image MasterPageDescriptor::GetPreview (MasterPageContainer::PreviewSize eSize)
10302c50d82SAndre Fischer {
10402c50d82SAndre Fischer if (eSize == MasterPageContainer::SMALL)
10502c50d82SAndre Fischer return maSmallPreview;
10602c50d82SAndre Fischer else
10702c50d82SAndre Fischer return maLargePreview;
10802c50d82SAndre Fischer }
10902c50d82SAndre Fischer
11002c50d82SAndre Fischer
11102c50d82SAndre Fischer
11202c50d82SAndre Fischer
11302c50d82SAndre Fischer ::std::auto_ptr<std::vector<MasterPageContainerChangeEvent::EventType> >
Update(const MasterPageDescriptor & rDescriptor)11402c50d82SAndre Fischer MasterPageDescriptor::Update (
11502c50d82SAndre Fischer const MasterPageDescriptor& rDescriptor)
11602c50d82SAndre Fischer {
11702c50d82SAndre Fischer bool bDataChanged (false);
11802c50d82SAndre Fischer bool bIndexChanged (false);
11902c50d82SAndre Fischer bool bPreviewChanged (false);
12002c50d82SAndre Fischer
12102c50d82SAndre Fischer if (meOrigin==MasterPageContainer::UNKNOWN
12202c50d82SAndre Fischer && rDescriptor.meOrigin!=MasterPageContainer::UNKNOWN)
12302c50d82SAndre Fischer {
12402c50d82SAndre Fischer meOrigin = rDescriptor.meOrigin;
12502c50d82SAndre Fischer bIndexChanged = true;
12602c50d82SAndre Fischer }
12702c50d82SAndre Fischer
12802c50d82SAndre Fischer if (msURL.getLength()==0 && rDescriptor.msURL.getLength()!=0)
12902c50d82SAndre Fischer {
13002c50d82SAndre Fischer msURL = rDescriptor.msURL;
13102c50d82SAndre Fischer bDataChanged = true;
13202c50d82SAndre Fischer }
13302c50d82SAndre Fischer
13402c50d82SAndre Fischer if (msPageName.getLength()==0 && rDescriptor.msPageName.getLength()!=0)
13502c50d82SAndre Fischer {
13602c50d82SAndre Fischer msPageName = rDescriptor.msPageName;
13702c50d82SAndre Fischer bDataChanged = true;
13802c50d82SAndre Fischer }
13902c50d82SAndre Fischer
14002c50d82SAndre Fischer if (msStyleName.getLength()==0 && rDescriptor.msStyleName.getLength()!=0)
14102c50d82SAndre Fischer {
14202c50d82SAndre Fischer msStyleName = rDescriptor.msStyleName;
14302c50d82SAndre Fischer bDataChanged = true;
14402c50d82SAndre Fischer }
14502c50d82SAndre Fischer
14602c50d82SAndre Fischer if (mpPageObjectProvider.get()==NULL && rDescriptor.mpPageObjectProvider.get()!=NULL)
14702c50d82SAndre Fischer {
14802c50d82SAndre Fischer mpPageObjectProvider = rDescriptor.mpPageObjectProvider;
14902c50d82SAndre Fischer bDataChanged = true;
15002c50d82SAndre Fischer }
15102c50d82SAndre Fischer
15202c50d82SAndre Fischer if (mpPreviewProvider.get()==NULL && rDescriptor.mpPreviewProvider.get()!=NULL)
15302c50d82SAndre Fischer {
15402c50d82SAndre Fischer mpPreviewProvider = rDescriptor.mpPreviewProvider;
15502c50d82SAndre Fischer bPreviewChanged = true;
15602c50d82SAndre Fischer }
15702c50d82SAndre Fischer
15802c50d82SAndre Fischer if (mnTemplateIndex<0 && rDescriptor.mnTemplateIndex>=0)
15902c50d82SAndre Fischer {
16002c50d82SAndre Fischer mnTemplateIndex = rDescriptor.mnTemplateIndex;
16102c50d82SAndre Fischer bIndexChanged = true;
16202c50d82SAndre Fischer }
16302c50d82SAndre Fischer
16402c50d82SAndre Fischer // Prepare the list of event types that will be returned.
16502c50d82SAndre Fischer ::std::auto_ptr<std::vector<MasterPageContainerChangeEvent::EventType> > pResult;
16602c50d82SAndre Fischer if (bDataChanged || bIndexChanged || bPreviewChanged)
16702c50d82SAndre Fischer {
16802c50d82SAndre Fischer pResult.reset(new std::vector<MasterPageContainerChangeEvent::EventType>());
16902c50d82SAndre Fischer if (bDataChanged)
17002c50d82SAndre Fischer pResult->push_back(MasterPageContainerChangeEvent::DATA_CHANGED);
17102c50d82SAndre Fischer if (bIndexChanged)
17202c50d82SAndre Fischer pResult->push_back(MasterPageContainerChangeEvent::INDEX_CHANGED);
17302c50d82SAndre Fischer if (bPreviewChanged)
17402c50d82SAndre Fischer pResult->push_back(MasterPageContainerChangeEvent::PREVIEW_CHANGED);
17502c50d82SAndre Fischer }
17602c50d82SAndre Fischer
17702c50d82SAndre Fischer return pResult;
17802c50d82SAndre Fischer }
17902c50d82SAndre Fischer
18002c50d82SAndre Fischer
18102c50d82SAndre Fischer
18202c50d82SAndre Fischer
UpdatePageObject(sal_Int32 nCostThreshold,SdDrawDocument * pDocument)18302c50d82SAndre Fischer bool MasterPageDescriptor::UpdatePageObject (
18402c50d82SAndre Fischer sal_Int32 nCostThreshold,
18502c50d82SAndre Fischer SdDrawDocument* pDocument)
18602c50d82SAndre Fischer {
18702c50d82SAndre Fischer bool bModified (false);
18802c50d82SAndre Fischer
18902c50d82SAndre Fischer // Update the page object when that is not yet known.
19002c50d82SAndre Fischer if (mpMasterPage == NULL
19102c50d82SAndre Fischer && mpPageObjectProvider.get()!=NULL
19202c50d82SAndre Fischer && (nCostThreshold<0 || mpPageObjectProvider->GetCostIndex()<=nCostThreshold))
19302c50d82SAndre Fischer {
19402c50d82SAndre Fischer // Note that pDocument may be NULL.
19502c50d82SAndre Fischer
19602c50d82SAndre Fischer SdPage* pPage = (*mpPageObjectProvider)(pDocument);
19702c50d82SAndre Fischer if (meOrigin == MasterPageContainer::MASTERPAGE)
19802c50d82SAndre Fischer {
19902c50d82SAndre Fischer mpMasterPage = pPage;
20002c50d82SAndre Fischer if (mpMasterPage != NULL)
20102c50d82SAndre Fischer mpMasterPage->SetPrecious(mbIsPrecious);
20202c50d82SAndre Fischer }
20302c50d82SAndre Fischer else
20402c50d82SAndre Fischer {
20502c50d82SAndre Fischer // Master pages from templates are copied into the local document.
20602c50d82SAndre Fischer if (pDocument != NULL)
20702c50d82SAndre Fischer mpMasterPage = DocumentHelper::CopyMasterPageToLocalDocument(*pDocument,pPage);
20802c50d82SAndre Fischer mpSlide = DocumentHelper::GetSlideForMasterPage(mpMasterPage);
20902c50d82SAndre Fischer }
21002c50d82SAndre Fischer
21102c50d82SAndre Fischer if (mpMasterPage != NULL)
21202c50d82SAndre Fischer {
21302c50d82SAndre Fischer // Update page name and style name.
21402c50d82SAndre Fischer if (msPageName.getLength() == 0)
21502c50d82SAndre Fischer msPageName = mpMasterPage->GetName();
21602c50d82SAndre Fischer msStyleName = mpMasterPage->GetName();
21702c50d82SAndre Fischer
21802c50d82SAndre Fischer // Delete an existing substitution. The next request for a preview
21902c50d82SAndre Fischer // will create the real one.
22002c50d82SAndre Fischer maSmallPreview = Image();
22102c50d82SAndre Fischer maLargePreview = Image();
22202c50d82SAndre Fischer mpPreviewProvider = ::boost::shared_ptr<PreviewProvider>(new PagePreviewProvider());
22302c50d82SAndre Fischer }
22402c50d82SAndre Fischer else
22502c50d82SAndre Fischer {
22602c50d82SAndre Fischer DBG_ASSERT(false, "UpdatePageObject: master page is NULL");
22702c50d82SAndre Fischer }
22802c50d82SAndre Fischer
22902c50d82SAndre Fischer bModified = true;
23002c50d82SAndre Fischer }
23102c50d82SAndre Fischer
23202c50d82SAndre Fischer return bModified;
23302c50d82SAndre Fischer }
23402c50d82SAndre Fischer
23502c50d82SAndre Fischer
23602c50d82SAndre Fischer
23702c50d82SAndre Fischer
UpdatePreview(sal_Int32 nCostThreshold,const Size & rSmallSize,const Size & rLargeSize,::sd::PreviewRenderer & rRenderer)23802c50d82SAndre Fischer bool MasterPageDescriptor::UpdatePreview (
23902c50d82SAndre Fischer sal_Int32 nCostThreshold,
24002c50d82SAndre Fischer const Size& rSmallSize,
24102c50d82SAndre Fischer const Size& rLargeSize,
24202c50d82SAndre Fischer ::sd::PreviewRenderer& rRenderer)
24302c50d82SAndre Fischer {
24402c50d82SAndre Fischer bool bModified (false);
24502c50d82SAndre Fischer
24602c50d82SAndre Fischer // Update the preview when that is not yet known.
24702c50d82SAndre Fischer if (maLargePreview.GetSizePixel().Width()==0
24802c50d82SAndre Fischer && mpPreviewProvider.get()!=NULL
24902c50d82SAndre Fischer && (nCostThreshold<0 || mpPreviewProvider->GetCostIndex()<=nCostThreshold))
25002c50d82SAndre Fischer {
25102c50d82SAndre Fischer SdPage* pPage = mpSlide;
25202c50d82SAndre Fischer if (pPage == NULL)
25302c50d82SAndre Fischer {
25402c50d82SAndre Fischer pPage = mpMasterPage;
25502c50d82SAndre Fischer }
25602c50d82SAndre Fischer maLargePreview = (*mpPreviewProvider)(
25702c50d82SAndre Fischer rLargeSize.Width(),
25802c50d82SAndre Fischer pPage,
25902c50d82SAndre Fischer rRenderer);
26002c50d82SAndre Fischer if (maLargePreview.GetSizePixel().Width() > 0)
26102c50d82SAndre Fischer {
26202c50d82SAndre Fischer // Create the small preview by scaling the large one down.
26302c50d82SAndre Fischer maSmallPreview = rRenderer.ScaleBitmap(
26402c50d82SAndre Fischer maLargePreview.GetBitmapEx(),
26502c50d82SAndre Fischer rSmallSize.Width());
26602c50d82SAndre Fischer // The large preview may not have the desired width. Scale it
267*141ed1b0SJohn Bampton // accordingly.
26802c50d82SAndre Fischer if (maLargePreview.GetSizePixel().Width() != rLargeSize.Width())
26902c50d82SAndre Fischer maLargePreview = rRenderer.ScaleBitmap(
27002c50d82SAndre Fischer maLargePreview.GetBitmapEx(),
27102c50d82SAndre Fischer rLargeSize.Width());
27202c50d82SAndre Fischer bModified = true;
27302c50d82SAndre Fischer }
27402c50d82SAndre Fischer }
27502c50d82SAndre Fischer
27602c50d82SAndre Fischer return bModified;
27702c50d82SAndre Fischer }
27802c50d82SAndre Fischer
27902c50d82SAndre Fischer
28002c50d82SAndre Fischer
28102c50d82SAndre Fischer
GetURLClassification(void)28202c50d82SAndre Fischer MasterPageDescriptor::URLClassification MasterPageDescriptor::GetURLClassification (void)
28302c50d82SAndre Fischer {
28402c50d82SAndre Fischer if (meURLClassification == URLCLASS_UNDETERMINED)
28502c50d82SAndre Fischer {
28602c50d82SAndre Fischer if (msURL.getLength() == 0)
28702c50d82SAndre Fischer meURLClassification = URLCLASS_UNKNOWN;
28802c50d82SAndre Fischer else if (msURL.indexOf(::rtl::OUString::createFromAscii("presnt"))>=0)
28902c50d82SAndre Fischer {
29002c50d82SAndre Fischer meURLClassification = URLCLASS_PRESENTATION;
29102c50d82SAndre Fischer }
29202c50d82SAndre Fischer else if (msURL.indexOf(::rtl::OUString::createFromAscii("layout"))>=0)
29302c50d82SAndre Fischer {
29402c50d82SAndre Fischer meURLClassification = URLCLASS_LAYOUT;
29502c50d82SAndre Fischer }
29602c50d82SAndre Fischer else if (msURL.indexOf(::rtl::OUString::createFromAscii("educate"))>=0)
29702c50d82SAndre Fischer {
29802c50d82SAndre Fischer meURLClassification = URLCLASS_OTHER;
29902c50d82SAndre Fischer }
30002c50d82SAndre Fischer else
30102c50d82SAndre Fischer {
30202c50d82SAndre Fischer meURLClassification = URLCLASS_USER;
30302c50d82SAndre Fischer }
30402c50d82SAndre Fischer }
30502c50d82SAndre Fischer
30602c50d82SAndre Fischer return meURLClassification;
30702c50d82SAndre Fischer }
30802c50d82SAndre Fischer
30902c50d82SAndre Fischer
31002c50d82SAndre Fischer
31102c50d82SAndre Fischer //===== URLComparator =========================================================
31202c50d82SAndre Fischer
URLComparator(const::rtl::OUString & sURL)31302c50d82SAndre Fischer MasterPageDescriptor::URLComparator::URLComparator (const ::rtl::OUString& sURL)
31402c50d82SAndre Fischer : msURL(sURL)
31502c50d82SAndre Fischer {
31602c50d82SAndre Fischer }
31702c50d82SAndre Fischer
31802c50d82SAndre Fischer
31902c50d82SAndre Fischer
32002c50d82SAndre Fischer
operator ()(const SharedMasterPageDescriptor & rDescriptor)32102c50d82SAndre Fischer bool MasterPageDescriptor::URLComparator::operator() (
32202c50d82SAndre Fischer const SharedMasterPageDescriptor& rDescriptor)
32302c50d82SAndre Fischer {
32402c50d82SAndre Fischer if (rDescriptor.get() == NULL)
32502c50d82SAndre Fischer return false;
32602c50d82SAndre Fischer else
32702c50d82SAndre Fischer return rDescriptor->msURL.equals(msURL);
32802c50d82SAndre Fischer }
32902c50d82SAndre Fischer
33002c50d82SAndre Fischer
33102c50d82SAndre Fischer
33202c50d82SAndre Fischer
33302c50d82SAndre Fischer // ===== StyleNameComparator ==================================================
33402c50d82SAndre Fischer
StyleNameComparator(const::rtl::OUString & sStyleName)33502c50d82SAndre Fischer MasterPageDescriptor::StyleNameComparator::StyleNameComparator (const ::rtl::OUString& sStyleName)
33602c50d82SAndre Fischer : msStyleName(sStyleName)
33702c50d82SAndre Fischer {
33802c50d82SAndre Fischer }
33902c50d82SAndre Fischer
34002c50d82SAndre Fischer
34102c50d82SAndre Fischer
34202c50d82SAndre Fischer
operator ()(const SharedMasterPageDescriptor & rDescriptor)34302c50d82SAndre Fischer bool MasterPageDescriptor::StyleNameComparator::operator() (
34402c50d82SAndre Fischer const SharedMasterPageDescriptor& rDescriptor)
34502c50d82SAndre Fischer {
34602c50d82SAndre Fischer if (rDescriptor.get() == NULL)
34702c50d82SAndre Fischer return false;
34802c50d82SAndre Fischer else
34902c50d82SAndre Fischer return rDescriptor->msStyleName.equals(msStyleName);
35002c50d82SAndre Fischer }
35102c50d82SAndre Fischer
35202c50d82SAndre Fischer
35302c50d82SAndre Fischer
35402c50d82SAndre Fischer
35502c50d82SAndre Fischer //===== PageObjectComparator ==================================================
35602c50d82SAndre Fischer
PageObjectComparator(const SdPage * pPageObject)35702c50d82SAndre Fischer MasterPageDescriptor::PageObjectComparator::PageObjectComparator (const SdPage* pPageObject)
35802c50d82SAndre Fischer : mpMasterPage(pPageObject)
35902c50d82SAndre Fischer {
36002c50d82SAndre Fischer }
36102c50d82SAndre Fischer
36202c50d82SAndre Fischer
36302c50d82SAndre Fischer
36402c50d82SAndre Fischer
operator ()(const SharedMasterPageDescriptor & rDescriptor)36502c50d82SAndre Fischer bool MasterPageDescriptor::PageObjectComparator::operator() (
36602c50d82SAndre Fischer const SharedMasterPageDescriptor& rDescriptor)
36702c50d82SAndre Fischer {
36802c50d82SAndre Fischer if (rDescriptor.get() == NULL)
36902c50d82SAndre Fischer return false;
37002c50d82SAndre Fischer else
37102c50d82SAndre Fischer return rDescriptor->mpMasterPage==mpMasterPage;
37202c50d82SAndre Fischer }
37302c50d82SAndre Fischer
37402c50d82SAndre Fischer
37502c50d82SAndre Fischer
37602c50d82SAndre Fischer
37702c50d82SAndre Fischer //===== AllComparator =========================================================
37802c50d82SAndre Fischer
AllComparator(const SharedMasterPageDescriptor & rDescriptor)37902c50d82SAndre Fischer MasterPageDescriptor::AllComparator::AllComparator(const SharedMasterPageDescriptor& rDescriptor)
38002c50d82SAndre Fischer : mpDescriptor(rDescriptor)
38102c50d82SAndre Fischer {
38202c50d82SAndre Fischer }
38302c50d82SAndre Fischer
38402c50d82SAndre Fischer
38502c50d82SAndre Fischer
38602c50d82SAndre Fischer
operator ()(const SharedMasterPageDescriptor & rDescriptor)38702c50d82SAndre Fischer bool MasterPageDescriptor::AllComparator::operator() (const SharedMasterPageDescriptor&rDescriptor)
38802c50d82SAndre Fischer {
38902c50d82SAndre Fischer if (rDescriptor.get() == NULL)
39002c50d82SAndre Fischer return false;
39102c50d82SAndre Fischer else
39202c50d82SAndre Fischer {
39302c50d82SAndre Fischer // Take URL, page name, style name, and page object into account
39402c50d82SAndre Fischer // when comparing two descriptors. When two descriptors are
39502c50d82SAndre Fischer // identical in any of these values then their are thought of as
39602c50d82SAndre Fischer // equivalent. Only the Origin has to be the same in both
39702c50d82SAndre Fischer // descriptors.
39802c50d82SAndre Fischer return
39902c50d82SAndre Fischer mpDescriptor->meOrigin == rDescriptor->meOrigin
40002c50d82SAndre Fischer && (
40102c50d82SAndre Fischer (mpDescriptor->msURL.getLength()>0
40202c50d82SAndre Fischer && mpDescriptor->msURL.equals(rDescriptor->msURL))
40302c50d82SAndre Fischer || (mpDescriptor->msPageName.getLength()>0
40402c50d82SAndre Fischer && mpDescriptor->msPageName.equals(rDescriptor->msPageName))
40502c50d82SAndre Fischer || (mpDescriptor->msStyleName.getLength()>0
40602c50d82SAndre Fischer && mpDescriptor->msStyleName.equals(rDescriptor->msStyleName))
40702c50d82SAndre Fischer || (mpDescriptor->mpMasterPage!=NULL
40802c50d82SAndre Fischer && mpDescriptor->mpMasterPage==rDescriptor->mpMasterPage)
40902c50d82SAndre Fischer || (mpDescriptor->mpPageObjectProvider.get()!=NULL
41002c50d82SAndre Fischer && rDescriptor->mpPageObjectProvider.get()!=NULL
41102c50d82SAndre Fischer && mpDescriptor->mpPageObjectProvider==rDescriptor->mpPageObjectProvider));
41202c50d82SAndre Fischer }
41302c50d82SAndre Fischer }
41402c50d82SAndre Fischer
41502c50d82SAndre Fischer
41602c50d82SAndre Fischer } } // end of namespace sd::sidebar
417