1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski #ifndef SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX
23*b1cdbd2cSJim Jagielski #define SD_SIDEBAR_PANELS_MASTER_PAGE_CONTAINER_PROVIDERS_HXX
24*b1cdbd2cSJim Jagielski 
25*b1cdbd2cSJim Jagielski #include <rtl/ustring.hxx>
26*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski class Image;
29*b1cdbd2cSJim Jagielski class SdDrawDocument;
30*b1cdbd2cSJim Jagielski class SdPage;
31*b1cdbd2cSJim Jagielski namespace sd { class PreviewRenderer; }
32*b1cdbd2cSJim Jagielski namespace sd { class DrawDocShell; }
33*b1cdbd2cSJim Jagielski 
34*b1cdbd2cSJim Jagielski 
35*b1cdbd2cSJim Jagielski namespace sd { namespace sidebar {
36*b1cdbd2cSJim Jagielski 
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski /** Interface for a provider of page objects.  It is used by the
39*b1cdbd2cSJim Jagielski     MasterPageDescriptor to create master page objects on demand.
40*b1cdbd2cSJim Jagielski */
41*b1cdbd2cSJim Jagielski class PageObjectProvider
42*b1cdbd2cSJim Jagielski {
43*b1cdbd2cSJim Jagielski public:
44*b1cdbd2cSJim Jagielski     /** Return a master page either by returning an already existing one, by
45*b1cdbd2cSJim Jagielski         creating a new page, or by loading a document.
46*b1cdbd2cSJim Jagielski         @param pDocument
47*b1cdbd2cSJim Jagielski             The document of the MasterPageContainer.  It may be used to
48*b1cdbd2cSJim Jagielski             create new pages.
49*b1cdbd2cSJim Jagielski     */
50*b1cdbd2cSJim Jagielski     virtual SdPage* operator() (SdDrawDocument* pDocument) = 0;
51*b1cdbd2cSJim Jagielski 
52*b1cdbd2cSJim Jagielski     /** An abstract value for the expected cost of providing a master page
53*b1cdbd2cSJim Jagielski         object.
54*b1cdbd2cSJim Jagielski         @return
55*b1cdbd2cSJim Jagielski             A value of 0 represents for the lowest cost, i.e. an almost
56*b1cdbd2cSJim Jagielski             immediate return.  Positive values stand for higher costs.
57*b1cdbd2cSJim Jagielski             Negative values are not supported.
58*b1cdbd2cSJim Jagielski     */
59*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void) = 0;
60*b1cdbd2cSJim Jagielski 
61*b1cdbd2cSJim Jagielski     virtual bool operator== (const PageObjectProvider& rProvider) = 0;
62*b1cdbd2cSJim Jagielski };
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski 
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski 
67*b1cdbd2cSJim Jagielski class PreviewProvider
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski public:
70*b1cdbd2cSJim Jagielski     /** Create a preview image in the specified width.
71*b1cdbd2cSJim Jagielski         @param nWidth
72*b1cdbd2cSJim Jagielski             Requested width of the preview.  The calling method can cope
73*b1cdbd2cSJim Jagielski             with other sizes as well but the resulting image quality is
74*b1cdbd2cSJim Jagielski             better when the returned image has the requested size.
75*b1cdbd2cSJim Jagielski         @param pPage
76*b1cdbd2cSJim Jagielski             Page object for which a preview is requested.  This may be NULL
77*b1cdbd2cSJim Jagielski             when the page object is expensive to get and the PreviewProvider
78*b1cdbd2cSJim Jagielski             does not need this object (NeedsPageObject() returns false.)
79*b1cdbd2cSJim Jagielski         @param rRenderer
80*b1cdbd2cSJim Jagielski             This PreviewRenderer may be used by the PreviewProvider to
81*b1cdbd2cSJim Jagielski             create a preview image.
82*b1cdbd2cSJim Jagielski     */
83*b1cdbd2cSJim Jagielski     virtual Image operator() (int nWidth, SdPage* pPage, ::sd::PreviewRenderer& rRenderer) = 0;
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski     /** Return a value that indicates how expensive the creation of a
86*b1cdbd2cSJim Jagielski         preview image is.  The higher the returned value the more expensive
87*b1cdbd2cSJim Jagielski         is the preview creation.  Return 0 when the preview is already
88*b1cdbd2cSJim Jagielski         present and can be returned immediately.
89*b1cdbd2cSJim Jagielski     */
90*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void) = 0;
91*b1cdbd2cSJim Jagielski 
92*b1cdbd2cSJim Jagielski     /** Return whether the page object passed is necessary to create a
93*b1cdbd2cSJim Jagielski         preview.
94*b1cdbd2cSJim Jagielski     */
95*b1cdbd2cSJim Jagielski     virtual bool NeedsPageObject (void) = 0;
96*b1cdbd2cSJim Jagielski };
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski 
100*b1cdbd2cSJim Jagielski 
101*b1cdbd2cSJim Jagielski /** Provide previews of existing page objects by rendering them.
102*b1cdbd2cSJim Jagielski */
103*b1cdbd2cSJim Jagielski class PagePreviewProvider : public PreviewProvider
104*b1cdbd2cSJim Jagielski {
105*b1cdbd2cSJim Jagielski public:
106*b1cdbd2cSJim Jagielski     PagePreviewProvider (void);
107*b1cdbd2cSJim Jagielski     virtual Image operator () (int nWidth, SdPage* pPage, ::sd::PreviewRenderer& rRenderer);
108*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void);
109*b1cdbd2cSJim Jagielski     virtual bool NeedsPageObject (void);
110*b1cdbd2cSJim Jagielski private:
111*b1cdbd2cSJim Jagielski };
112*b1cdbd2cSJim Jagielski 
113*b1cdbd2cSJim Jagielski 
114*b1cdbd2cSJim Jagielski 
115*b1cdbd2cSJim Jagielski 
116*b1cdbd2cSJim Jagielski /** Provide master page objects for template documents for which only the
117*b1cdbd2cSJim Jagielski     URL is given.
118*b1cdbd2cSJim Jagielski */
119*b1cdbd2cSJim Jagielski class TemplatePageObjectProvider : public PageObjectProvider
120*b1cdbd2cSJim Jagielski {
121*b1cdbd2cSJim Jagielski public:
122*b1cdbd2cSJim Jagielski     TemplatePageObjectProvider (const ::rtl::OUString& rsURL);
~TemplatePageObjectProvider(void)123*b1cdbd2cSJim Jagielski     virtual ~TemplatePageObjectProvider (void) {};
124*b1cdbd2cSJim Jagielski     virtual SdPage* operator () (SdDrawDocument* pDocument);
125*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void);
126*b1cdbd2cSJim Jagielski     virtual bool operator== (const PageObjectProvider& rProvider);
127*b1cdbd2cSJim Jagielski private:
128*b1cdbd2cSJim Jagielski     ::rtl::OUString msURL;
129*b1cdbd2cSJim Jagielski     SfxObjectShellLock mxDocumentShell;
130*b1cdbd2cSJim Jagielski     ::sd::DrawDocShell* LoadDocument (const ::rtl::OUString& sFileName);
131*b1cdbd2cSJim Jagielski };
132*b1cdbd2cSJim Jagielski 
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski /** Provide previews for template documents by loading the thumbnails from
137*b1cdbd2cSJim Jagielski     the documents.
138*b1cdbd2cSJim Jagielski */
139*b1cdbd2cSJim Jagielski class TemplatePreviewProvider : public PreviewProvider
140*b1cdbd2cSJim Jagielski {
141*b1cdbd2cSJim Jagielski public:
142*b1cdbd2cSJim Jagielski     TemplatePreviewProvider (const ::rtl::OUString& rsURL);
~TemplatePreviewProvider(void)143*b1cdbd2cSJim Jagielski     virtual ~TemplatePreviewProvider (void) {};
144*b1cdbd2cSJim Jagielski     virtual Image operator() (int nWidth, SdPage* pPage, ::sd::PreviewRenderer& rRenderer);
145*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void);
146*b1cdbd2cSJim Jagielski     virtual bool NeedsPageObject (void);
147*b1cdbd2cSJim Jagielski private:
148*b1cdbd2cSJim Jagielski     ::rtl::OUString msURL;
149*b1cdbd2cSJim Jagielski };
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 
152*b1cdbd2cSJim Jagielski 
153*b1cdbd2cSJim Jagielski 
154*b1cdbd2cSJim Jagielski /** Create an empty default master page.
155*b1cdbd2cSJim Jagielski */
156*b1cdbd2cSJim Jagielski class DefaultPageObjectProvider : public PageObjectProvider
157*b1cdbd2cSJim Jagielski {
158*b1cdbd2cSJim Jagielski public:
159*b1cdbd2cSJim Jagielski     DefaultPageObjectProvider (void);
160*b1cdbd2cSJim Jagielski     virtual SdPage* operator () (SdDrawDocument* pDocument);
161*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void);
162*b1cdbd2cSJim Jagielski     virtual bool operator== (const PageObjectProvider& rProvider);
163*b1cdbd2cSJim Jagielski };
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski 
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski /** This implementation of the PageObjectProvider simply returns an already
168*b1cdbd2cSJim Jagielski     existing master page object.
169*b1cdbd2cSJim Jagielski */
170*b1cdbd2cSJim Jagielski class ExistingPageProvider : public PageObjectProvider
171*b1cdbd2cSJim Jagielski {
172*b1cdbd2cSJim Jagielski public:
173*b1cdbd2cSJim Jagielski     ExistingPageProvider (SdPage* pPage);
174*b1cdbd2cSJim Jagielski     virtual SdPage* operator() (SdDrawDocument* pDocument);
175*b1cdbd2cSJim Jagielski     virtual int GetCostIndex (void);
176*b1cdbd2cSJim Jagielski     virtual bool operator== (const PageObjectProvider& rProvider);
177*b1cdbd2cSJim Jagielski private:
178*b1cdbd2cSJim Jagielski     SdPage* mpPage;
179*b1cdbd2cSJim Jagielski };
180*b1cdbd2cSJim Jagielski 
181*b1cdbd2cSJim Jagielski } } // end of namespace sd::sidebar
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski #endif
184