xref: /AOO41X/main/sd/source/ui/sidebar/MasterPageDescriptor.cxx (revision ca62e2c2083b5d0995f1245bad6c2edfb455fbec)
1*02c50d82SAndre Fischer /**************************************************************
2*02c50d82SAndre Fischer  *
3*02c50d82SAndre Fischer  * Licensed to the Apache Software Foundation (ASF) under one
4*02c50d82SAndre Fischer  * or more contributor license agreements.  See the NOTICE file
5*02c50d82SAndre Fischer  * distributed with this work for additional information
6*02c50d82SAndre Fischer  * regarding copyright ownership.  The ASF licenses this file
7*02c50d82SAndre Fischer  * to you under the Apache License, Version 2.0 (the
8*02c50d82SAndre Fischer  * "License"); you may not use this file except in compliance
9*02c50d82SAndre Fischer  * with the License.  You may obtain a copy of the License at
10*02c50d82SAndre Fischer  *
11*02c50d82SAndre Fischer  *   http://www.apache.org/licenses/LICENSE-2.0
12*02c50d82SAndre Fischer  *
13*02c50d82SAndre Fischer  * Unless required by applicable law or agreed to in writing,
14*02c50d82SAndre Fischer  * software distributed under the License is distributed on an
15*02c50d82SAndre Fischer  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*02c50d82SAndre Fischer  * KIND, either express or implied.  See the License for the
17*02c50d82SAndre Fischer  * specific language governing permissions and limitations
18*02c50d82SAndre Fischer  * under the License.
19*02c50d82SAndre Fischer  *
20*02c50d82SAndre Fischer  *************************************************************/
21*02c50d82SAndre Fischer 
22*02c50d82SAndre Fischer #include "precompiled_sd.hxx"
23*02c50d82SAndre Fischer 
24*02c50d82SAndre Fischer #include "MasterPageDescriptor.hxx"
25*02c50d82SAndre Fischer 
26*02c50d82SAndre Fischer #include "DocumentHelper.hxx"
27*02c50d82SAndre Fischer #include "sdpage.hxx"
28*02c50d82SAndre Fischer #include <tools/urlobj.hxx>
29*02c50d82SAndre Fischer 
30*02c50d82SAndre Fischer namespace sd { namespace sidebar {
31*02c50d82SAndre Fischer 
32*02c50d82SAndre Fischer 
33*02c50d82SAndre Fischer //===== MasterPageDescriptor ==================================================
34*02c50d82SAndre 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)35*02c50d82SAndre Fischer MasterPageDescriptor::MasterPageDescriptor (
36*02c50d82SAndre Fischer     MasterPageContainer::Origin eOrigin,
37*02c50d82SAndre Fischer     const sal_Int32 nTemplateIndex,
38*02c50d82SAndre Fischer     const String& rsURL,
39*02c50d82SAndre Fischer     const String& rsPageName,
40*02c50d82SAndre Fischer     const String& rsStyleName,
41*02c50d82SAndre Fischer     const bool bIsPrecious,
42*02c50d82SAndre Fischer     const ::boost::shared_ptr<PageObjectProvider>& rpPageObjectProvider,
43*02c50d82SAndre Fischer     const ::boost::shared_ptr<PreviewProvider>& rpPreviewProvider)
44*02c50d82SAndre Fischer     : maToken(MasterPageContainer::NIL_TOKEN),
45*02c50d82SAndre Fischer       meOrigin(eOrigin),
46*02c50d82SAndre Fischer       msURL(INetURLObject(rsURL).GetMainURL(INetURLObject::DECODE_UNAMBIGUOUS)),
47*02c50d82SAndre Fischer       msPageName(rsPageName),
48*02c50d82SAndre Fischer       msStyleName(rsStyleName),
49*02c50d82SAndre Fischer       mbIsPrecious(bIsPrecious),
50*02c50d82SAndre Fischer       mpMasterPage(NULL),
51*02c50d82SAndre Fischer       mpSlide(NULL),
52*02c50d82SAndre Fischer       maSmallPreview(),
53*02c50d82SAndre Fischer       maLargePreview(),
54*02c50d82SAndre Fischer       mpPreviewProvider(rpPreviewProvider),
55*02c50d82SAndre Fischer       mpPageObjectProvider(rpPageObjectProvider),
56*02c50d82SAndre Fischer       mnTemplateIndex(nTemplateIndex),
57*02c50d82SAndre Fischer       meURLClassification(URLCLASS_UNDETERMINED),
58*02c50d82SAndre Fischer       mnUseCount(0)
59*02c50d82SAndre Fischer {
60*02c50d82SAndre Fischer }
61*02c50d82SAndre Fischer 
62*02c50d82SAndre Fischer 
63*02c50d82SAndre Fischer 
64*02c50d82SAndre Fischer 
MasterPageDescriptor(const MasterPageDescriptor & rDescriptor)65*02c50d82SAndre Fischer MasterPageDescriptor::MasterPageDescriptor (const MasterPageDescriptor& rDescriptor)
66*02c50d82SAndre Fischer     : maToken(rDescriptor.maToken),
67*02c50d82SAndre Fischer       meOrigin(rDescriptor.meOrigin),
68*02c50d82SAndre Fischer       msURL(rDescriptor.msURL),
69*02c50d82SAndre Fischer       msPageName(rDescriptor.msPageName),
70*02c50d82SAndre Fischer       msStyleName(rDescriptor.msStyleName),
71*02c50d82SAndre Fischer       mbIsPrecious(rDescriptor.mbIsPrecious),
72*02c50d82SAndre Fischer       mpMasterPage(rDescriptor.mpMasterPage),
73*02c50d82SAndre Fischer       mpSlide(rDescriptor.mpSlide),
74*02c50d82SAndre Fischer       maSmallPreview(rDescriptor.maSmallPreview),
75*02c50d82SAndre Fischer       maLargePreview(rDescriptor.maLargePreview),
76*02c50d82SAndre Fischer       mpPreviewProvider(rDescriptor.mpPreviewProvider),
77*02c50d82SAndre Fischer       mpPageObjectProvider(rDescriptor.mpPageObjectProvider),
78*02c50d82SAndre Fischer       mnTemplateIndex(rDescriptor.mnTemplateIndex),
79*02c50d82SAndre Fischer       meURLClassification(rDescriptor.meURLClassification),
80*02c50d82SAndre Fischer       mnUseCount(rDescriptor.mnUseCount)
81*02c50d82SAndre Fischer {
82*02c50d82SAndre Fischer }
83*02c50d82SAndre Fischer 
84*02c50d82SAndre Fischer 
85*02c50d82SAndre Fischer 
86*02c50d82SAndre Fischer 
~MasterPageDescriptor(void)87*02c50d82SAndre Fischer MasterPageDescriptor::~MasterPageDescriptor (void)
88*02c50d82SAndre Fischer {
89*02c50d82SAndre Fischer }
90*02c50d82SAndre Fischer 
91*02c50d82SAndre Fischer 
92*02c50d82SAndre Fischer 
93*02c50d82SAndre Fischer 
SetToken(MasterPageContainer::Token aToken)94*02c50d82SAndre Fischer void MasterPageDescriptor::SetToken (MasterPageContainer::Token aToken)
95*02c50d82SAndre Fischer {
96*02c50d82SAndre Fischer     maToken = aToken;
97*02c50d82SAndre Fischer }
98*02c50d82SAndre Fischer 
99*02c50d82SAndre Fischer 
100*02c50d82SAndre Fischer 
101*02c50d82SAndre Fischer 
GetPreview(MasterPageContainer::PreviewSize eSize)102*02c50d82SAndre Fischer Image MasterPageDescriptor::GetPreview (MasterPageContainer::PreviewSize eSize)
103*02c50d82SAndre Fischer {
104*02c50d82SAndre Fischer     if (eSize == MasterPageContainer::SMALL)
105*02c50d82SAndre Fischer         return maSmallPreview;
106*02c50d82SAndre Fischer     else
107*02c50d82SAndre Fischer         return maLargePreview;
108*02c50d82SAndre Fischer }
109*02c50d82SAndre Fischer 
110*02c50d82SAndre Fischer 
111*02c50d82SAndre Fischer 
112*02c50d82SAndre Fischer 
113*02c50d82SAndre Fischer ::std::auto_ptr<std::vector<MasterPageContainerChangeEvent::EventType> >
Update(const MasterPageDescriptor & rDescriptor)114*02c50d82SAndre Fischer     MasterPageDescriptor::Update (
115*02c50d82SAndre Fischer         const MasterPageDescriptor& rDescriptor)
116*02c50d82SAndre Fischer {
117*02c50d82SAndre Fischer     bool bDataChanged (false);
118*02c50d82SAndre Fischer     bool bIndexChanged (false);
119*02c50d82SAndre Fischer     bool bPreviewChanged (false);
120*02c50d82SAndre Fischer 
121*02c50d82SAndre Fischer     if (meOrigin==MasterPageContainer::UNKNOWN
122*02c50d82SAndre Fischer         && rDescriptor.meOrigin!=MasterPageContainer::UNKNOWN)
123*02c50d82SAndre Fischer     {
124*02c50d82SAndre Fischer         meOrigin = rDescriptor.meOrigin;
125*02c50d82SAndre Fischer         bIndexChanged = true;
126*02c50d82SAndre Fischer     }
127*02c50d82SAndre Fischer 
128*02c50d82SAndre Fischer     if (msURL.getLength()==0 && rDescriptor.msURL.getLength()!=0)
129*02c50d82SAndre Fischer     {
130*02c50d82SAndre Fischer         msURL = rDescriptor.msURL;
131*02c50d82SAndre Fischer         bDataChanged = true;
132*02c50d82SAndre Fischer     }
133*02c50d82SAndre Fischer 
134*02c50d82SAndre Fischer     if (msPageName.getLength()==0 && rDescriptor.msPageName.getLength()!=0)
135*02c50d82SAndre Fischer     {
136*02c50d82SAndre Fischer         msPageName = rDescriptor.msPageName;
137*02c50d82SAndre Fischer         bDataChanged = true;
138*02c50d82SAndre Fischer     }
139*02c50d82SAndre Fischer 
140*02c50d82SAndre Fischer     if (msStyleName.getLength()==0 && rDescriptor.msStyleName.getLength()!=0)
141*02c50d82SAndre Fischer     {
142*02c50d82SAndre Fischer         msStyleName = rDescriptor.msStyleName;
143*02c50d82SAndre Fischer         bDataChanged = true;
144*02c50d82SAndre Fischer     }
145*02c50d82SAndre Fischer 
146*02c50d82SAndre Fischer     if (mpPageObjectProvider.get()==NULL && rDescriptor.mpPageObjectProvider.get()!=NULL)
147*02c50d82SAndre Fischer     {
148*02c50d82SAndre Fischer         mpPageObjectProvider = rDescriptor.mpPageObjectProvider;
149*02c50d82SAndre Fischer         bDataChanged = true;
150*02c50d82SAndre Fischer     }
151*02c50d82SAndre Fischer 
152*02c50d82SAndre Fischer      if (mpPreviewProvider.get()==NULL && rDescriptor.mpPreviewProvider.get()!=NULL)
153*02c50d82SAndre Fischer      {
154*02c50d82SAndre Fischer          mpPreviewProvider = rDescriptor.mpPreviewProvider;
155*02c50d82SAndre Fischer          bPreviewChanged = true;
156*02c50d82SAndre Fischer      }
157*02c50d82SAndre Fischer 
158*02c50d82SAndre Fischer      if (mnTemplateIndex<0 && rDescriptor.mnTemplateIndex>=0)
159*02c50d82SAndre Fischer      {
160*02c50d82SAndre Fischer          mnTemplateIndex = rDescriptor.mnTemplateIndex;
161*02c50d82SAndre Fischer          bIndexChanged = true;
162*02c50d82SAndre Fischer      }
163*02c50d82SAndre Fischer 
164*02c50d82SAndre Fischer      // Prepare the list of event types that will be returned.
165*02c50d82SAndre Fischer      ::std::auto_ptr<std::vector<MasterPageContainerChangeEvent::EventType> > pResult;
166*02c50d82SAndre Fischer      if (bDataChanged || bIndexChanged || bPreviewChanged)
167*02c50d82SAndre Fischer      {
168*02c50d82SAndre Fischer          pResult.reset(new std::vector<MasterPageContainerChangeEvent::EventType>());
169*02c50d82SAndre Fischer          if (bDataChanged)
170*02c50d82SAndre Fischer              pResult->push_back(MasterPageContainerChangeEvent::DATA_CHANGED);
171*02c50d82SAndre Fischer          if (bIndexChanged)
172*02c50d82SAndre Fischer              pResult->push_back(MasterPageContainerChangeEvent::INDEX_CHANGED);
173*02c50d82SAndre Fischer          if (bPreviewChanged)
174*02c50d82SAndre Fischer              pResult->push_back(MasterPageContainerChangeEvent::PREVIEW_CHANGED);
175*02c50d82SAndre Fischer      }
176*02c50d82SAndre Fischer 
177*02c50d82SAndre Fischer      return pResult;
178*02c50d82SAndre Fischer }
179*02c50d82SAndre Fischer 
180*02c50d82SAndre Fischer 
181*02c50d82SAndre Fischer 
182*02c50d82SAndre Fischer 
UpdatePageObject(sal_Int32 nCostThreshold,SdDrawDocument * pDocument)183*02c50d82SAndre Fischer bool MasterPageDescriptor::UpdatePageObject (
184*02c50d82SAndre Fischer     sal_Int32 nCostThreshold,
185*02c50d82SAndre Fischer     SdDrawDocument* pDocument)
186*02c50d82SAndre Fischer {
187*02c50d82SAndre Fischer     bool bModified (false);
188*02c50d82SAndre Fischer 
189*02c50d82SAndre Fischer     // Update the page object when that is not yet known.
190*02c50d82SAndre Fischer     if (mpMasterPage == NULL
191*02c50d82SAndre Fischer         && mpPageObjectProvider.get()!=NULL
192*02c50d82SAndre Fischer         && (nCostThreshold<0 || mpPageObjectProvider->GetCostIndex()<=nCostThreshold))
193*02c50d82SAndre Fischer     {
194*02c50d82SAndre Fischer         // Note that pDocument may be NULL.
195*02c50d82SAndre Fischer 
196*02c50d82SAndre Fischer         SdPage* pPage = (*mpPageObjectProvider)(pDocument);
197*02c50d82SAndre Fischer         if (meOrigin == MasterPageContainer::MASTERPAGE)
198*02c50d82SAndre Fischer         {
199*02c50d82SAndre Fischer             mpMasterPage = pPage;
200*02c50d82SAndre Fischer             if (mpMasterPage != NULL)
201*02c50d82SAndre Fischer                 mpMasterPage->SetPrecious(mbIsPrecious);
202*02c50d82SAndre Fischer         }
203*02c50d82SAndre Fischer         else
204*02c50d82SAndre Fischer         {
205*02c50d82SAndre Fischer             // Master pages from templates are copied into the local document.
206*02c50d82SAndre Fischer             if (pDocument != NULL)
207*02c50d82SAndre Fischer                 mpMasterPage = DocumentHelper::CopyMasterPageToLocalDocument(*pDocument,pPage);
208*02c50d82SAndre Fischer             mpSlide = DocumentHelper::GetSlideForMasterPage(mpMasterPage);
209*02c50d82SAndre Fischer         }
210*02c50d82SAndre Fischer 
211*02c50d82SAndre Fischer         if (mpMasterPage != NULL)
212*02c50d82SAndre Fischer         {
213*02c50d82SAndre Fischer             // Update page name and style name.
214*02c50d82SAndre Fischer             if (msPageName.getLength() == 0)
215*02c50d82SAndre Fischer                 msPageName = mpMasterPage->GetName();
216*02c50d82SAndre Fischer             msStyleName = mpMasterPage->GetName();
217*02c50d82SAndre Fischer 
218*02c50d82SAndre Fischer             // Delete an existing substitution. The next request for a preview
219*02c50d82SAndre Fischer             // will create the real one.
220*02c50d82SAndre Fischer             maSmallPreview = Image();
221*02c50d82SAndre Fischer             maLargePreview = Image();
222*02c50d82SAndre Fischer             mpPreviewProvider = ::boost::shared_ptr<PreviewProvider>(new PagePreviewProvider());
223*02c50d82SAndre Fischer         }
224*02c50d82SAndre Fischer         else
225*02c50d82SAndre Fischer         {
226*02c50d82SAndre Fischer             DBG_ASSERT(false, "UpdatePageObject: master page is NULL");
227*02c50d82SAndre Fischer         }
228*02c50d82SAndre Fischer 
229*02c50d82SAndre Fischer         bModified = true;
230*02c50d82SAndre Fischer     }
231*02c50d82SAndre Fischer 
232*02c50d82SAndre Fischer     return bModified;
233*02c50d82SAndre Fischer }
234*02c50d82SAndre Fischer 
235*02c50d82SAndre Fischer 
236*02c50d82SAndre Fischer 
237*02c50d82SAndre Fischer 
UpdatePreview(sal_Int32 nCostThreshold,const Size & rSmallSize,const Size & rLargeSize,::sd::PreviewRenderer & rRenderer)238*02c50d82SAndre Fischer bool MasterPageDescriptor::UpdatePreview (
239*02c50d82SAndre Fischer     sal_Int32 nCostThreshold,
240*02c50d82SAndre Fischer     const Size& rSmallSize,
241*02c50d82SAndre Fischer     const Size& rLargeSize,
242*02c50d82SAndre Fischer     ::sd::PreviewRenderer& rRenderer)
243*02c50d82SAndre Fischer {
244*02c50d82SAndre Fischer     bool bModified (false);
245*02c50d82SAndre Fischer 
246*02c50d82SAndre Fischer     // Update the preview when that is not yet known.
247*02c50d82SAndre Fischer     if (maLargePreview.GetSizePixel().Width()==0
248*02c50d82SAndre Fischer         && mpPreviewProvider.get()!=NULL
249*02c50d82SAndre Fischer         && (nCostThreshold<0 || mpPreviewProvider->GetCostIndex()<=nCostThreshold))
250*02c50d82SAndre Fischer     {
251*02c50d82SAndre Fischer         SdPage* pPage = mpSlide;
252*02c50d82SAndre Fischer         if (pPage == NULL)
253*02c50d82SAndre Fischer         {
254*02c50d82SAndre Fischer             pPage = mpMasterPage;
255*02c50d82SAndre Fischer         }
256*02c50d82SAndre Fischer         maLargePreview = (*mpPreviewProvider)(
257*02c50d82SAndre Fischer             rLargeSize.Width(),
258*02c50d82SAndre Fischer             pPage,
259*02c50d82SAndre Fischer             rRenderer);
260*02c50d82SAndre Fischer         if (maLargePreview.GetSizePixel().Width() > 0)
261*02c50d82SAndre Fischer         {
262*02c50d82SAndre Fischer             // Create the small preview by scaling the large one down.
263*02c50d82SAndre Fischer             maSmallPreview = rRenderer.ScaleBitmap(
264*02c50d82SAndre Fischer                 maLargePreview.GetBitmapEx(),
265*02c50d82SAndre Fischer                 rSmallSize.Width());
266*02c50d82SAndre Fischer             // The large preview may not have the desired width.  Scale it
267*02c50d82SAndre Fischer             // accrodingly.
268*02c50d82SAndre Fischer             if (maLargePreview.GetSizePixel().Width() != rLargeSize.Width())
269*02c50d82SAndre Fischer                 maLargePreview = rRenderer.ScaleBitmap(
270*02c50d82SAndre Fischer                     maLargePreview.GetBitmapEx(),
271*02c50d82SAndre Fischer                     rLargeSize.Width());
272*02c50d82SAndre Fischer             bModified = true;
273*02c50d82SAndre Fischer         }
274*02c50d82SAndre Fischer     }
275*02c50d82SAndre Fischer 
276*02c50d82SAndre Fischer     return bModified;
277*02c50d82SAndre Fischer }
278*02c50d82SAndre Fischer 
279*02c50d82SAndre Fischer 
280*02c50d82SAndre Fischer 
281*02c50d82SAndre Fischer 
GetURLClassification(void)282*02c50d82SAndre Fischer MasterPageDescriptor::URLClassification MasterPageDescriptor::GetURLClassification (void)
283*02c50d82SAndre Fischer {
284*02c50d82SAndre Fischer     if (meURLClassification == URLCLASS_UNDETERMINED)
285*02c50d82SAndre Fischer     {
286*02c50d82SAndre Fischer         if (msURL.getLength() == 0)
287*02c50d82SAndre Fischer             meURLClassification = URLCLASS_UNKNOWN;
288*02c50d82SAndre Fischer         else if (msURL.indexOf(::rtl::OUString::createFromAscii("presnt"))>=0)
289*02c50d82SAndre Fischer         {
290*02c50d82SAndre Fischer             meURLClassification = URLCLASS_PRESENTATION;
291*02c50d82SAndre Fischer         }
292*02c50d82SAndre Fischer         else if (msURL.indexOf(::rtl::OUString::createFromAscii("layout"))>=0)
293*02c50d82SAndre Fischer         {
294*02c50d82SAndre Fischer             meURLClassification = URLCLASS_LAYOUT;
295*02c50d82SAndre Fischer         }
296*02c50d82SAndre Fischer         else if (msURL.indexOf(::rtl::OUString::createFromAscii("educate"))>=0)
297*02c50d82SAndre Fischer         {
298*02c50d82SAndre Fischer             meURLClassification = URLCLASS_OTHER;
299*02c50d82SAndre Fischer         }
300*02c50d82SAndre Fischer         else
301*02c50d82SAndre Fischer         {
302*02c50d82SAndre Fischer             meURLClassification = URLCLASS_USER;
303*02c50d82SAndre Fischer         }
304*02c50d82SAndre Fischer     }
305*02c50d82SAndre Fischer 
306*02c50d82SAndre Fischer     return meURLClassification;
307*02c50d82SAndre Fischer }
308*02c50d82SAndre Fischer 
309*02c50d82SAndre Fischer 
310*02c50d82SAndre Fischer 
311*02c50d82SAndre Fischer //===== URLComparator =========================================================
312*02c50d82SAndre Fischer 
URLComparator(const::rtl::OUString & sURL)313*02c50d82SAndre Fischer MasterPageDescriptor::URLComparator::URLComparator (const ::rtl::OUString& sURL)
314*02c50d82SAndre Fischer     : msURL(sURL)
315*02c50d82SAndre Fischer {
316*02c50d82SAndre Fischer }
317*02c50d82SAndre Fischer 
318*02c50d82SAndre Fischer 
319*02c50d82SAndre Fischer 
320*02c50d82SAndre Fischer 
operator ()(const SharedMasterPageDescriptor & rDescriptor)321*02c50d82SAndre Fischer bool MasterPageDescriptor::URLComparator::operator() (
322*02c50d82SAndre Fischer     const SharedMasterPageDescriptor& rDescriptor)
323*02c50d82SAndre Fischer {
324*02c50d82SAndre Fischer     if (rDescriptor.get() == NULL)
325*02c50d82SAndre Fischer         return false;
326*02c50d82SAndre Fischer     else
327*02c50d82SAndre Fischer         return rDescriptor->msURL.equals(msURL);
328*02c50d82SAndre Fischer }
329*02c50d82SAndre Fischer 
330*02c50d82SAndre Fischer 
331*02c50d82SAndre Fischer 
332*02c50d82SAndre Fischer 
333*02c50d82SAndre Fischer // ===== StyleNameComparator ==================================================
334*02c50d82SAndre Fischer 
StyleNameComparator(const::rtl::OUString & sStyleName)335*02c50d82SAndre Fischer MasterPageDescriptor::StyleNameComparator::StyleNameComparator (const ::rtl::OUString& sStyleName)
336*02c50d82SAndre Fischer     : msStyleName(sStyleName)
337*02c50d82SAndre Fischer {
338*02c50d82SAndre Fischer }
339*02c50d82SAndre Fischer 
340*02c50d82SAndre Fischer 
341*02c50d82SAndre Fischer 
342*02c50d82SAndre Fischer 
operator ()(const SharedMasterPageDescriptor & rDescriptor)343*02c50d82SAndre Fischer bool MasterPageDescriptor::StyleNameComparator::operator() (
344*02c50d82SAndre Fischer     const SharedMasterPageDescriptor& rDescriptor)
345*02c50d82SAndre Fischer {
346*02c50d82SAndre Fischer     if (rDescriptor.get() == NULL)
347*02c50d82SAndre Fischer         return false;
348*02c50d82SAndre Fischer     else
349*02c50d82SAndre Fischer         return rDescriptor->msStyleName.equals(msStyleName);
350*02c50d82SAndre Fischer }
351*02c50d82SAndre Fischer 
352*02c50d82SAndre Fischer 
353*02c50d82SAndre Fischer 
354*02c50d82SAndre Fischer 
355*02c50d82SAndre Fischer //===== PageObjectComparator ==================================================
356*02c50d82SAndre Fischer 
PageObjectComparator(const SdPage * pPageObject)357*02c50d82SAndre Fischer MasterPageDescriptor::PageObjectComparator::PageObjectComparator (const SdPage* pPageObject)
358*02c50d82SAndre Fischer     : mpMasterPage(pPageObject)
359*02c50d82SAndre Fischer {
360*02c50d82SAndre Fischer }
361*02c50d82SAndre Fischer 
362*02c50d82SAndre Fischer 
363*02c50d82SAndre Fischer 
364*02c50d82SAndre Fischer 
operator ()(const SharedMasterPageDescriptor & rDescriptor)365*02c50d82SAndre Fischer bool MasterPageDescriptor::PageObjectComparator::operator() (
366*02c50d82SAndre Fischer     const SharedMasterPageDescriptor& rDescriptor)
367*02c50d82SAndre Fischer {
368*02c50d82SAndre Fischer     if (rDescriptor.get() == NULL)
369*02c50d82SAndre Fischer         return false;
370*02c50d82SAndre Fischer     else
371*02c50d82SAndre Fischer         return rDescriptor->mpMasterPage==mpMasterPage;
372*02c50d82SAndre Fischer }
373*02c50d82SAndre Fischer 
374*02c50d82SAndre Fischer 
375*02c50d82SAndre Fischer 
376*02c50d82SAndre Fischer 
377*02c50d82SAndre Fischer //===== AllComparator =========================================================
378*02c50d82SAndre Fischer 
AllComparator(const SharedMasterPageDescriptor & rDescriptor)379*02c50d82SAndre Fischer MasterPageDescriptor::AllComparator::AllComparator(const SharedMasterPageDescriptor& rDescriptor)
380*02c50d82SAndre Fischer     : mpDescriptor(rDescriptor)
381*02c50d82SAndre Fischer {
382*02c50d82SAndre Fischer }
383*02c50d82SAndre Fischer 
384*02c50d82SAndre Fischer 
385*02c50d82SAndre Fischer 
386*02c50d82SAndre Fischer 
operator ()(const SharedMasterPageDescriptor & rDescriptor)387*02c50d82SAndre Fischer bool MasterPageDescriptor::AllComparator::operator() (const SharedMasterPageDescriptor&rDescriptor)
388*02c50d82SAndre Fischer {
389*02c50d82SAndre Fischer     if (rDescriptor.get() == NULL)
390*02c50d82SAndre Fischer         return false;
391*02c50d82SAndre Fischer     else
392*02c50d82SAndre Fischer     {
393*02c50d82SAndre Fischer         // Take URL, page name, style name, and page object into account
394*02c50d82SAndre Fischer         // when comparing two descriptors.  When two descriptors are
395*02c50d82SAndre Fischer         // identical in any of these values then their are thought of as
396*02c50d82SAndre Fischer         // equivalent.  Only the Origin has to be the same in both
397*02c50d82SAndre Fischer         // descriptors.
398*02c50d82SAndre Fischer         return
399*02c50d82SAndre Fischer             mpDescriptor->meOrigin == rDescriptor->meOrigin
400*02c50d82SAndre Fischer             && (
401*02c50d82SAndre Fischer                 (mpDescriptor->msURL.getLength()>0
402*02c50d82SAndre Fischer                     && mpDescriptor->msURL.equals(rDescriptor->msURL))
403*02c50d82SAndre Fischer                 || (mpDescriptor->msPageName.getLength()>0
404*02c50d82SAndre Fischer                     && mpDescriptor->msPageName.equals(rDescriptor->msPageName))
405*02c50d82SAndre Fischer                 || (mpDescriptor->msStyleName.getLength()>0
406*02c50d82SAndre Fischer                     && mpDescriptor->msStyleName.equals(rDescriptor->msStyleName))
407*02c50d82SAndre Fischer                 || (mpDescriptor->mpMasterPage!=NULL
408*02c50d82SAndre Fischer                     && mpDescriptor->mpMasterPage==rDescriptor->mpMasterPage)
409*02c50d82SAndre Fischer                 || (mpDescriptor->mpPageObjectProvider.get()!=NULL
410*02c50d82SAndre Fischer                     && rDescriptor->mpPageObjectProvider.get()!=NULL
411*02c50d82SAndre Fischer                     && mpDescriptor->mpPageObjectProvider==rDescriptor->mpPageObjectProvider));
412*02c50d82SAndre Fischer     }
413*02c50d82SAndre Fischer }
414*02c50d82SAndre Fischer 
415*02c50d82SAndre Fischer 
416*02c50d82SAndre Fischer } } // end of namespace sd::sidebar
417