15b190011SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
35b190011SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
45b190011SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
55b190011SAndrew Rist  * distributed with this work for additional information
65b190011SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
75b190011SAndrew Rist  * to you under the Apache License, Version 2.0 (the
85b190011SAndrew Rist  * "License"); you may not use this file except in compliance
95b190011SAndrew Rist  * with the License.  You may obtain a copy of the License at
105b190011SAndrew Rist  *
115b190011SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
125b190011SAndrew Rist  *
135b190011SAndrew Rist  * Unless required by applicable law or agreed to in writing,
145b190011SAndrew Rist  * software distributed under the License is distributed on an
155b190011SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
165b190011SAndrew Rist  * KIND, either express or implied.  See the License for the
175b190011SAndrew Rist  * specific language governing permissions and limitations
185b190011SAndrew Rist  * under the License.
195b190011SAndrew Rist  *
205b190011SAndrew Rist  *************************************************************/
215b190011SAndrew Rist 
22cdf0e10cSrcweir #include "precompiled_sd.hxx"
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #include "MasterPageContainerProviders.hxx"
25cdf0e10cSrcweir 
26cdf0e10cSrcweir #include "DrawDocShell.hxx"
27cdf0e10cSrcweir #include "drawdoc.hxx"
28cdf0e10cSrcweir #include "PreviewRenderer.hxx"
29cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
30cdf0e10cSrcweir #include <sfx2/app.hxx>
31cdf0e10cSrcweir #include <sfx2/sfxsids.hrc>
32cdf0e10cSrcweir #include <unotools/ucbstreamhelper.hxx>
33cdf0e10cSrcweir #include <vcl/image.hxx>
34cdf0e10cSrcweir #include <vcl/pngread.hxx>
35cdf0e10cSrcweir #include <com/sun/star/embed/ElementModes.hpp>
36cdf0e10cSrcweir #include <tools/diagnose_ex.h>
37cdf0e10cSrcweir 
38cdf0e10cSrcweir using namespace ::com::sun::star;
39cdf0e10cSrcweir using namespace ::com::sun::star::uno;
40cdf0e10cSrcweir 
417a32b0c8SAndre Fischer namespace sd { namespace sidebar {
42cdf0e10cSrcweir 
43cdf0e10cSrcweir 
44cdf0e10cSrcweir //===== PagePreviewProvider ===================================================
45cdf0e10cSrcweir 
PagePreviewProvider(void)46cdf0e10cSrcweir PagePreviewProvider::PagePreviewProvider (void)
47cdf0e10cSrcweir {
48cdf0e10cSrcweir }
49cdf0e10cSrcweir 
50cdf0e10cSrcweir 
51cdf0e10cSrcweir 
52cdf0e10cSrcweir 
operator ()(int nWidth,SdPage * pPage,::sd::PreviewRenderer & rRenderer)53cdf0e10cSrcweir Image PagePreviewProvider::operator () (
54cdf0e10cSrcweir     int nWidth,
55cdf0e10cSrcweir     SdPage* pPage,
56cdf0e10cSrcweir     ::sd::PreviewRenderer& rRenderer)
57cdf0e10cSrcweir {
58cdf0e10cSrcweir     Image aPreview;
59cdf0e10cSrcweir 
60cdf0e10cSrcweir     if (pPage != NULL)
61cdf0e10cSrcweir     {
62cdf0e10cSrcweir         // Use the given renderer to create a preview of the given page
63cdf0e10cSrcweir         // object.
64cdf0e10cSrcweir         aPreview = rRenderer.RenderPage(
65cdf0e10cSrcweir             pPage,
66cdf0e10cSrcweir             nWidth,
67cdf0e10cSrcweir             String::CreateFromAscii(""),
68cdf0e10cSrcweir             false);
69cdf0e10cSrcweir     }
70cdf0e10cSrcweir 
71cdf0e10cSrcweir     return aPreview;
72cdf0e10cSrcweir }
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 
75cdf0e10cSrcweir 
76cdf0e10cSrcweir 
GetCostIndex(void)77cdf0e10cSrcweir int PagePreviewProvider::GetCostIndex (void)
78cdf0e10cSrcweir {
79cdf0e10cSrcweir     return 5;
80cdf0e10cSrcweir }
81cdf0e10cSrcweir 
82cdf0e10cSrcweir 
83cdf0e10cSrcweir 
84cdf0e10cSrcweir 
NeedsPageObject(void)85cdf0e10cSrcweir bool PagePreviewProvider::NeedsPageObject (void)
86cdf0e10cSrcweir {
87cdf0e10cSrcweir     return true;
88cdf0e10cSrcweir }
89cdf0e10cSrcweir 
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 
93cdf0e10cSrcweir //===== TemplatePreviewProvider ===============================================
94cdf0e10cSrcweir 
TemplatePreviewProvider(const::rtl::OUString & rsURL)95cdf0e10cSrcweir TemplatePreviewProvider::TemplatePreviewProvider (const ::rtl::OUString& rsURL)
96cdf0e10cSrcweir     : msURL(rsURL)
97cdf0e10cSrcweir {
98cdf0e10cSrcweir }
99cdf0e10cSrcweir 
100cdf0e10cSrcweir 
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 
operator ()(int nWidth,SdPage * pPage,::sd::PreviewRenderer & rRenderer)103cdf0e10cSrcweir Image TemplatePreviewProvider::operator() (
104cdf0e10cSrcweir     int nWidth,
105cdf0e10cSrcweir     SdPage* pPage,
106cdf0e10cSrcweir     ::sd::PreviewRenderer& rRenderer)
107cdf0e10cSrcweir {
108cdf0e10cSrcweir     // Unused parameters.
109cdf0e10cSrcweir     (void)nWidth;
110cdf0e10cSrcweir     (void)pPage;
111cdf0e10cSrcweir     (void)rRenderer;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir     // Load the thumbnail from a template document.
114cdf0e10cSrcweir 	uno::Reference<io::XInputStream> xIStream;
115cdf0e10cSrcweir 
116cdf0e10cSrcweir     uno::Reference< lang::XMultiServiceFactory > xServiceManager (
117cdf0e10cSrcweir         ::comphelper::getProcessServiceFactory());
118cdf0e10cSrcweir 	if (xServiceManager.is())
119cdf0e10cSrcweir 	{
120cdf0e10cSrcweir 		try
121cdf0e10cSrcweir         {
122cdf0e10cSrcweir 			uno::Reference<lang::XSingleServiceFactory> xStorageFactory(
123cdf0e10cSrcweir 				xServiceManager->createInstance(
124cdf0e10cSrcweir                     ::rtl::OUString::createFromAscii(
125cdf0e10cSrcweir                         "com.sun.star.embed.StorageFactory")),
126cdf0e10cSrcweir 				uno::UNO_QUERY);
127cdf0e10cSrcweir 
128cdf0e10cSrcweir 			if (xStorageFactory.is())
129cdf0e10cSrcweir 			{
130cdf0e10cSrcweir 				uno::Sequence<uno::Any> aArgs (2);
131cdf0e10cSrcweir 				aArgs[0] <<= msURL;
132cdf0e10cSrcweir 				aArgs[1] <<= embed::ElementModes::READ;
133cdf0e10cSrcweir 				uno::Reference<embed::XStorage> xDocStorage (
134cdf0e10cSrcweir                     xStorageFactory->createInstanceWithArguments(aArgs),
135cdf0e10cSrcweir                     uno::UNO_QUERY);
136cdf0e10cSrcweir 
137cdf0e10cSrcweir                 try
138cdf0e10cSrcweir                 {
139cdf0e10cSrcweir                     if (xDocStorage.is())
140cdf0e10cSrcweir                     {
141cdf0e10cSrcweir                         uno::Reference<embed::XStorage> xStorage (
142cdf0e10cSrcweir                             xDocStorage->openStorageElement(
143cdf0e10cSrcweir                                 ::rtl::OUString::createFromAscii("Thumbnails"),
144cdf0e10cSrcweir                                 embed::ElementModes::READ));
145cdf0e10cSrcweir                         if (xStorage.is())
146cdf0e10cSrcweir                         {
147cdf0e10cSrcweir                             uno::Reference<io::XStream> xThumbnailCopy (
148cdf0e10cSrcweir                                 xStorage->cloneStreamElement(
149cdf0e10cSrcweir                                     ::rtl::OUString::createFromAscii(
150cdf0e10cSrcweir                                         "thumbnail.png")));
151cdf0e10cSrcweir                             if (xThumbnailCopy.is())
152cdf0e10cSrcweir                                 xIStream = xThumbnailCopy->getInputStream();
153cdf0e10cSrcweir                         }
154cdf0e10cSrcweir                     }
155cdf0e10cSrcweir                 }
156cdf0e10cSrcweir                 catch (uno::Exception& rException)
157cdf0e10cSrcweir                 {
158cdf0e10cSrcweir                     OSL_TRACE (
159cdf0e10cSrcweir                         "caught exception while trying to access Thumbnail/thumbnail.png of %s: %s",
160cdf0e10cSrcweir                         ::rtl::OUStringToOString(msURL,
161cdf0e10cSrcweir                             RTL_TEXTENCODING_UTF8).getStr(),
162cdf0e10cSrcweir                         ::rtl::OUStringToOString(rException.Message,
163cdf0e10cSrcweir                             RTL_TEXTENCODING_UTF8).getStr());
164cdf0e10cSrcweir                 }
165cdf0e10cSrcweir 
166cdf0e10cSrcweir                 try
167cdf0e10cSrcweir                 {
168cdf0e10cSrcweir                     // An (older) implementation had a bug - The storage
169cdf0e10cSrcweir                     // name was "Thumbnail" instead of "Thumbnails".  The
170cdf0e10cSrcweir                     // old name is still used as fallback but this code can
171cdf0e10cSrcweir                     // be removed soon.
172cdf0e10cSrcweir                     if ( ! xIStream.is())
173cdf0e10cSrcweir                     {
174cdf0e10cSrcweir                         uno::Reference<embed::XStorage> xStorage (
175cdf0e10cSrcweir                             xDocStorage->openStorageElement(
176cdf0e10cSrcweir                                 ::rtl::OUString::createFromAscii("Thumbnail"),
177cdf0e10cSrcweir                                 embed::ElementModes::READ));
178cdf0e10cSrcweir                         if (xStorage.is())
179cdf0e10cSrcweir                         {
180cdf0e10cSrcweir                             uno::Reference<io::XStream> xThumbnailCopy (
181cdf0e10cSrcweir                                 xStorage->cloneStreamElement(
182cdf0e10cSrcweir                                     ::rtl::OUString::createFromAscii(
183cdf0e10cSrcweir                                         "thumbnail.png")));
184cdf0e10cSrcweir                             if (xThumbnailCopy.is())
185cdf0e10cSrcweir                                 xIStream = xThumbnailCopy->getInputStream();
186cdf0e10cSrcweir                         }
187cdf0e10cSrcweir 					}
188cdf0e10cSrcweir                 }
189cdf0e10cSrcweir                 catch (uno::Exception& rException)
190cdf0e10cSrcweir                 {
191cdf0e10cSrcweir                     OSL_TRACE (
192cdf0e10cSrcweir                         "caught exception while trying to access Thumbnails/thumbnail.png of %s: %s",
193cdf0e10cSrcweir                         ::rtl::OUStringToOString(msURL,
194cdf0e10cSrcweir                             RTL_TEXTENCODING_UTF8).getStr(),
195cdf0e10cSrcweir                         ::rtl::OUStringToOString(rException.Message,
196cdf0e10cSrcweir                             RTL_TEXTENCODING_UTF8).getStr());
197cdf0e10cSrcweir                 }
198cdf0e10cSrcweir 			}
199cdf0e10cSrcweir 		}
200cdf0e10cSrcweir 		catch (uno::Exception& rException)
201cdf0e10cSrcweir 		{
202cdf0e10cSrcweir             OSL_TRACE (
203cdf0e10cSrcweir                 "caught exception while trying to access tuhmbnail of %s: %s",
204cdf0e10cSrcweir                 ::rtl::OUStringToOString(msURL,
205cdf0e10cSrcweir                     RTL_TEXTENCODING_UTF8).getStr(),
206cdf0e10cSrcweir                 ::rtl::OUStringToOString(rException.Message,
207cdf0e10cSrcweir                     RTL_TEXTENCODING_UTF8).getStr());
208cdf0e10cSrcweir         }
209cdf0e10cSrcweir 	}
210cdf0e10cSrcweir 
211cdf0e10cSrcweir     // Extract the image from the stream.
212cdf0e10cSrcweir     BitmapEx aThumbnail;
213cdf0e10cSrcweir 	if (xIStream.is())
214cdf0e10cSrcweir     {
215cdf0e10cSrcweir         ::std::auto_ptr<SvStream> pStream (
216cdf0e10cSrcweir             ::utl::UcbStreamHelper::CreateStream (xIStream));
217cdf0e10cSrcweir         ::vcl::PNGReader aReader (*pStream);
218cdf0e10cSrcweir         aThumbnail = aReader.Read ();
219cdf0e10cSrcweir     }
220cdf0e10cSrcweir 
221cdf0e10cSrcweir     // Note that the preview is returned without scaling it to the desired
222cdf0e10cSrcweir     // width.  This gives the caller the chance to take advantage of a
223cdf0e10cSrcweir     // possibly larger resolution then was asked for.
224cdf0e10cSrcweir     return aThumbnail;
225cdf0e10cSrcweir }
226cdf0e10cSrcweir 
227cdf0e10cSrcweir 
228cdf0e10cSrcweir 
229cdf0e10cSrcweir 
GetCostIndex(void)230cdf0e10cSrcweir int TemplatePreviewProvider::GetCostIndex (void)
231cdf0e10cSrcweir {
232cdf0e10cSrcweir     return 10;
233cdf0e10cSrcweir }
234cdf0e10cSrcweir 
235cdf0e10cSrcweir 
236cdf0e10cSrcweir 
237cdf0e10cSrcweir 
NeedsPageObject(void)238cdf0e10cSrcweir bool TemplatePreviewProvider::NeedsPageObject (void)
239cdf0e10cSrcweir {
240cdf0e10cSrcweir     return false;
241cdf0e10cSrcweir }
242cdf0e10cSrcweir 
243cdf0e10cSrcweir 
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 
246cdf0e10cSrcweir //===== TemplatePageObjectProvider =============================================
247cdf0e10cSrcweir 
TemplatePageObjectProvider(const::rtl::OUString & rsURL)248cdf0e10cSrcweir TemplatePageObjectProvider::TemplatePageObjectProvider (const ::rtl::OUString& rsURL)
249cdf0e10cSrcweir     : msURL(rsURL),
250cdf0e10cSrcweir       mxDocumentShell()
251cdf0e10cSrcweir {
252cdf0e10cSrcweir }
253cdf0e10cSrcweir 
254cdf0e10cSrcweir 
255cdf0e10cSrcweir 
256cdf0e10cSrcweir 
operator ()(SdDrawDocument * pContainerDocument)257cdf0e10cSrcweir SdPage* TemplatePageObjectProvider::operator() (SdDrawDocument* pContainerDocument)
258cdf0e10cSrcweir {
259cdf0e10cSrcweir     // Unused parameters.
260cdf0e10cSrcweir     (void)pContainerDocument;
261cdf0e10cSrcweir 
262cdf0e10cSrcweir     SdPage* pPage = NULL;
263cdf0e10cSrcweir 
264cdf0e10cSrcweir     mxDocumentShell = NULL;
265cdf0e10cSrcweir     ::sd::DrawDocShell* pDocumentShell = NULL;
266cdf0e10cSrcweir     try
267cdf0e10cSrcweir     {
268cdf0e10cSrcweir         // Load the template document and return its first page.
269cdf0e10cSrcweir         pDocumentShell = LoadDocument (msURL);
270cdf0e10cSrcweir         if (pDocumentShell != NULL)
271cdf0e10cSrcweir         {
272cdf0e10cSrcweir             SdDrawDocument* pDocument = pDocumentShell->GetDoc();
273cdf0e10cSrcweir             if (pDocument != NULL)
274cdf0e10cSrcweir             {
275cdf0e10cSrcweir                 pPage = pDocument->GetMasterSdPage(0, PK_STANDARD);
276cdf0e10cSrcweir                 // In order to make the newly loaded master page deletable
277cdf0e10cSrcweir                 // when copied into documents it is marked as no "precious".
278cdf0e10cSrcweir                 // When it is modified then it is marked as "precious".
279cdf0e10cSrcweir                 if (pPage != NULL)
280cdf0e10cSrcweir                     pPage->SetPrecious(false);
281cdf0e10cSrcweir             }
282cdf0e10cSrcweir         }
283cdf0e10cSrcweir     }
284cdf0e10cSrcweir     catch (uno::RuntimeException)
285cdf0e10cSrcweir     {
286cdf0e10cSrcweir         DBG_UNHANDLED_EXCEPTION();
287cdf0e10cSrcweir         pPage = NULL;
288cdf0e10cSrcweir     }
289cdf0e10cSrcweir 
290cdf0e10cSrcweir     return pPage;
291cdf0e10cSrcweir }
292cdf0e10cSrcweir 
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 
LoadDocument(const::rtl::OUString & sFileName)296cdf0e10cSrcweir ::sd::DrawDocShell* TemplatePageObjectProvider::LoadDocument (const ::rtl::OUString& sFileName)
297cdf0e10cSrcweir {
298cdf0e10cSrcweir 	SfxApplication* pSfxApp = SFX_APP();
299cdf0e10cSrcweir     SfxItemSet* pSet = new SfxAllItemSet (pSfxApp->GetPool());
300cdf0e10cSrcweir     pSet->Put (SfxBoolItem (SID_TEMPLATE, sal_True));
301cdf0e10cSrcweir     pSet->Put (SfxBoolItem (SID_PREVIEW, sal_True));
302cdf0e10cSrcweir     if (pSfxApp->LoadTemplate (mxDocumentShell, sFileName, sal_True, pSet))
303cdf0e10cSrcweir     {
304cdf0e10cSrcweir         mxDocumentShell = NULL;
305cdf0e10cSrcweir     }
306cdf0e10cSrcweir     SfxObjectShell* pShell = mxDocumentShell;
307cdf0e10cSrcweir     return PTR_CAST(::sd::DrawDocShell,pShell);
308cdf0e10cSrcweir }
309cdf0e10cSrcweir 
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 
312cdf0e10cSrcweir 
GetCostIndex(void)313cdf0e10cSrcweir int TemplatePageObjectProvider::GetCostIndex (void)
314cdf0e10cSrcweir {
315cdf0e10cSrcweir     return 20;
316cdf0e10cSrcweir }
317cdf0e10cSrcweir 
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 
320cdf0e10cSrcweir 
operator ==(const PageObjectProvider & rProvider)321cdf0e10cSrcweir bool TemplatePageObjectProvider::operator== (const PageObjectProvider& rProvider)
322cdf0e10cSrcweir {
323cdf0e10cSrcweir     const TemplatePageObjectProvider* pTemplatePageObjectProvider
324cdf0e10cSrcweir         = dynamic_cast<const TemplatePageObjectProvider*>(&rProvider);
325cdf0e10cSrcweir     if (pTemplatePageObjectProvider != NULL)
326cdf0e10cSrcweir         return (msURL == pTemplatePageObjectProvider->msURL);
327cdf0e10cSrcweir     else
328cdf0e10cSrcweir         return false;
329cdf0e10cSrcweir }
330cdf0e10cSrcweir 
331cdf0e10cSrcweir 
332cdf0e10cSrcweir 
333cdf0e10cSrcweir 
334cdf0e10cSrcweir //===== DefaultPageObjectProvider ==============================================
335cdf0e10cSrcweir 
DefaultPageObjectProvider(void)336cdf0e10cSrcweir DefaultPageObjectProvider::DefaultPageObjectProvider (void)
337cdf0e10cSrcweir {
338cdf0e10cSrcweir }
339cdf0e10cSrcweir 
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 
342cdf0e10cSrcweir 
operator ()(SdDrawDocument * pContainerDocument)343cdf0e10cSrcweir SdPage* DefaultPageObjectProvider::operator () (SdDrawDocument* pContainerDocument)
344cdf0e10cSrcweir {
345cdf0e10cSrcweir     SdPage* pLocalMasterPage = NULL;
346cdf0e10cSrcweir     if (pContainerDocument != NULL)
347cdf0e10cSrcweir     {
348cdf0e10cSrcweir         sal_Int32 nIndex (0);
349cdf0e10cSrcweir         SdPage* pLocalSlide = pContainerDocument->GetSdPage((sal_uInt16)nIndex, PK_STANDARD);
350cdf0e10cSrcweir         if (pLocalSlide!=NULL && pLocalSlide->TRG_HasMasterPage())
351cdf0e10cSrcweir             pLocalMasterPage = dynamic_cast<SdPage*>(&pLocalSlide->TRG_GetMasterPage());
352cdf0e10cSrcweir     }
353cdf0e10cSrcweir 
354cdf0e10cSrcweir     if (pLocalMasterPage == NULL)
355cdf0e10cSrcweir     {
356cdf0e10cSrcweir         DBG_ASSERT(false, "can not create master page for slide");
357cdf0e10cSrcweir     }
358cdf0e10cSrcweir 
359cdf0e10cSrcweir     return pLocalMasterPage;
360cdf0e10cSrcweir }
361cdf0e10cSrcweir 
362cdf0e10cSrcweir 
363cdf0e10cSrcweir 
364cdf0e10cSrcweir 
GetCostIndex(void)365cdf0e10cSrcweir int DefaultPageObjectProvider::GetCostIndex (void)
366cdf0e10cSrcweir {
367cdf0e10cSrcweir     return 15;
368cdf0e10cSrcweir }
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 
371cdf0e10cSrcweir 
372cdf0e10cSrcweir 
operator ==(const PageObjectProvider & rProvider)373cdf0e10cSrcweir bool DefaultPageObjectProvider::operator== (const PageObjectProvider& rProvider)
374cdf0e10cSrcweir {
375cdf0e10cSrcweir     return (dynamic_cast<const DefaultPageObjectProvider*>(&rProvider) != NULL);
376cdf0e10cSrcweir }
377cdf0e10cSrcweir 
378cdf0e10cSrcweir 
379cdf0e10cSrcweir 
380cdf0e10cSrcweir 
381cdf0e10cSrcweir //===== ExistingPageProvider ==================================================
382cdf0e10cSrcweir 
ExistingPageProvider(SdPage * pPage)383cdf0e10cSrcweir ExistingPageProvider::ExistingPageProvider (SdPage* pPage)
384cdf0e10cSrcweir     : mpPage(pPage)
385cdf0e10cSrcweir {
386cdf0e10cSrcweir }
387cdf0e10cSrcweir 
388cdf0e10cSrcweir 
389cdf0e10cSrcweir 
390cdf0e10cSrcweir 
operator ()(SdDrawDocument * pDocument)391cdf0e10cSrcweir SdPage* ExistingPageProvider::operator() (SdDrawDocument* pDocument)
392cdf0e10cSrcweir {
393cdf0e10cSrcweir     (void)pDocument; // Unused parameter.
394cdf0e10cSrcweir 
395cdf0e10cSrcweir     return mpPage;
396cdf0e10cSrcweir }
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 
399cdf0e10cSrcweir 
400cdf0e10cSrcweir 
GetCostIndex(void)401cdf0e10cSrcweir int ExistingPageProvider::GetCostIndex (void)
402cdf0e10cSrcweir {
403cdf0e10cSrcweir     return 0;
404cdf0e10cSrcweir }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir 
407cdf0e10cSrcweir 
408cdf0e10cSrcweir 
operator ==(const PageObjectProvider & rProvider)409cdf0e10cSrcweir bool ExistingPageProvider::operator== (const PageObjectProvider& rProvider)
410cdf0e10cSrcweir {
411cdf0e10cSrcweir     const ExistingPageProvider* pExistingPageProvider
412cdf0e10cSrcweir         = dynamic_cast<const ExistingPageProvider*>(&rProvider);
413cdf0e10cSrcweir     if (pExistingPageProvider != NULL)
414cdf0e10cSrcweir         return (mpPage == pExistingPageProvider->mpPage);
415cdf0e10cSrcweir     else
416cdf0e10cSrcweir         return false;
417cdf0e10cSrcweir }
418cdf0e10cSrcweir 
419cdf0e10cSrcweir 
4207a32b0c8SAndre Fischer } } // end of namespace sd::sidebar
421