xref: /trunk/main/sd/source/ui/sidebar/MasterPageDescriptor.cxx (revision cf6516809c57e1bb0a940545cca99cdad54d4ce2)
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