Line data Source code
1 : /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 : /*
3 : * This file is part of the LibreOffice project.
4 : *
5 : * This Source Code Form is subject to the terms of the Mozilla Public
6 : * License, v. 2.0. If a copy of the MPL was not distributed with this
7 : * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 : *
9 : * This file incorporates work covered by the following license notice:
10 : *
11 : * Licensed to the Apache Software Foundation (ASF) under one or more
12 : * contributor license agreements. See the NOTICE file distributed
13 : * with this work for additional information regarding copyright
14 : * ownership. The ASF licenses this file to you under the Apache
15 : * License, Version 2.0 (the "License"); you may not use this file
16 : * except in compliance with the License. You may obtain a copy of
17 : * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 : */
19 :
20 : #include "MasterPageContainerProviders.hxx"
21 :
22 : #include "DrawDocShell.hxx"
23 : #include "drawdoc.hxx"
24 : #include "PreviewRenderer.hxx"
25 : #include <comphelper/processfactory.hxx>
26 : #include <sfx2/app.hxx>
27 : #include <sfx2/sfxsids.hrc>
28 : #include <sfx2/thumbnailview.hxx>
29 : #include <unotools/ucbstreamhelper.hxx>
30 : #include <vcl/image.hxx>
31 : #include <vcl/pngread.hxx>
32 : #include <com/sun/star/embed/ElementModes.hpp>
33 : #include <com/sun/star/embed/StorageFactory.hpp>
34 : #include <tools/diagnose_ex.h>
35 :
36 : using namespace ::com::sun::star;
37 : using namespace ::com::sun::star::uno;
38 :
39 : namespace sd { namespace sidebar {
40 :
41 :
42 : //===== PagePreviewProvider ===================================================
43 :
44 0 : PagePreviewProvider::PagePreviewProvider (void)
45 : {
46 0 : }
47 :
48 :
49 :
50 :
51 0 : Image PagePreviewProvider::operator () (
52 : int nWidth,
53 : SdPage* pPage,
54 : ::sd::PreviewRenderer& rRenderer)
55 : {
56 0 : Image aPreview;
57 :
58 0 : if (pPage != NULL)
59 : {
60 : // Use the given renderer to create a preview of the given page
61 : // object.
62 0 : aPreview = rRenderer.RenderPage(
63 : pPage,
64 : nWidth,
65 : OUString(),
66 0 : false);
67 : }
68 :
69 0 : return aPreview;
70 : }
71 :
72 :
73 :
74 :
75 0 : int PagePreviewProvider::GetCostIndex (void)
76 : {
77 0 : return 5;
78 : }
79 :
80 :
81 :
82 :
83 0 : bool PagePreviewProvider::NeedsPageObject (void)
84 : {
85 0 : return true;
86 : }
87 :
88 :
89 :
90 :
91 : //===== TemplatePreviewProvider ===============================================
92 :
93 0 : TemplatePreviewProvider::TemplatePreviewProvider (const OUString& rsURL)
94 0 : : msURL(rsURL)
95 : {
96 0 : }
97 :
98 :
99 :
100 :
101 0 : Image TemplatePreviewProvider::operator() (
102 : int nWidth,
103 : SdPage* pPage,
104 : ::sd::PreviewRenderer& rRenderer)
105 : {
106 : // Unused parameters.
107 : (void)nWidth;
108 : (void)pPage;
109 : (void)rRenderer;
110 :
111 0 : return Image(ThumbnailView::readThumbnail(msURL));
112 : }
113 :
114 :
115 :
116 :
117 0 : int TemplatePreviewProvider::GetCostIndex (void)
118 : {
119 0 : return 10;
120 : }
121 :
122 :
123 :
124 :
125 0 : bool TemplatePreviewProvider::NeedsPageObject (void)
126 : {
127 0 : return false;
128 : }
129 :
130 :
131 :
132 :
133 : //===== TemplatePageObjectProvider =============================================
134 :
135 0 : TemplatePageObjectProvider::TemplatePageObjectProvider (const OUString& rsURL)
136 : : msURL(rsURL),
137 0 : mxDocumentShell()
138 : {
139 0 : }
140 :
141 :
142 :
143 :
144 0 : SdPage* TemplatePageObjectProvider::operator() (SdDrawDocument* pContainerDocument)
145 : {
146 : // Unused parameters.
147 : (void)pContainerDocument;
148 :
149 0 : SdPage* pPage = NULL;
150 :
151 0 : mxDocumentShell = NULL;
152 0 : ::sd::DrawDocShell* pDocumentShell = NULL;
153 : try
154 : {
155 : // Load the template document and return its first page.
156 0 : pDocumentShell = LoadDocument (msURL);
157 0 : if (pDocumentShell != NULL)
158 : {
159 0 : SdDrawDocument* pDocument = pDocumentShell->GetDoc();
160 0 : if (pDocument != NULL)
161 : {
162 0 : pPage = pDocument->GetMasterSdPage(0, PK_STANDARD);
163 : // In order to make the newly loaded master page deletable
164 : // when copied into documents it is marked as no "precious".
165 : // When it is modified then it is marked as "precious".
166 0 : if (pPage != NULL)
167 0 : pPage->SetPrecious(false);
168 : }
169 : }
170 : }
171 0 : catch (const uno::RuntimeException&)
172 : {
173 : DBG_UNHANDLED_EXCEPTION();
174 0 : pPage = NULL;
175 : }
176 :
177 0 : return pPage;
178 : }
179 :
180 :
181 :
182 :
183 0 : ::sd::DrawDocShell* TemplatePageObjectProvider::LoadDocument (const OUString& sFileName)
184 : {
185 0 : SfxApplication* pSfxApp = SFX_APP();
186 0 : SfxItemSet* pSet = new SfxAllItemSet (pSfxApp->GetPool());
187 0 : pSet->Put (SfxBoolItem (SID_TEMPLATE, true));
188 0 : pSet->Put (SfxBoolItem (SID_PREVIEW, true));
189 0 : if (pSfxApp->LoadTemplate (mxDocumentShell, sFileName, true, pSet))
190 : {
191 0 : mxDocumentShell = NULL;
192 : }
193 0 : SfxObjectShell* pShell = mxDocumentShell;
194 0 : return PTR_CAST(::sd::DrawDocShell,pShell);
195 : }
196 :
197 :
198 :
199 :
200 0 : int TemplatePageObjectProvider::GetCostIndex (void)
201 : {
202 0 : return 20;
203 : }
204 :
205 :
206 :
207 :
208 0 : bool TemplatePageObjectProvider::operator== (const PageObjectProvider& rProvider)
209 : {
210 : const TemplatePageObjectProvider* pTemplatePageObjectProvider
211 0 : = dynamic_cast<const TemplatePageObjectProvider*>(&rProvider);
212 0 : if (pTemplatePageObjectProvider != NULL)
213 0 : return (msURL == pTemplatePageObjectProvider->msURL);
214 : else
215 0 : return false;
216 : }
217 :
218 :
219 :
220 :
221 : //===== DefaultPageObjectProvider ==============================================
222 :
223 0 : DefaultPageObjectProvider::DefaultPageObjectProvider (void)
224 : {
225 0 : }
226 :
227 :
228 :
229 :
230 0 : SdPage* DefaultPageObjectProvider::operator () (SdDrawDocument* pContainerDocument)
231 : {
232 0 : SdPage* pLocalMasterPage = NULL;
233 0 : if (pContainerDocument != NULL)
234 : {
235 0 : sal_Int32 nIndex (0);
236 0 : SdPage* pLocalSlide = pContainerDocument->GetSdPage((sal_uInt16)nIndex, PK_STANDARD);
237 0 : if (pLocalSlide!=NULL && pLocalSlide->TRG_HasMasterPage())
238 0 : pLocalMasterPage = dynamic_cast<SdPage*>(&pLocalSlide->TRG_GetMasterPage());
239 : }
240 :
241 : if (pLocalMasterPage == NULL)
242 : {
243 : DBG_ASSERT(false, "can not create master page for slide");
244 : }
245 :
246 0 : return pLocalMasterPage;
247 : }
248 :
249 :
250 :
251 :
252 0 : int DefaultPageObjectProvider::GetCostIndex (void)
253 : {
254 0 : return 15;
255 : }
256 :
257 :
258 :
259 :
260 0 : bool DefaultPageObjectProvider::operator== (const PageObjectProvider& rProvider)
261 : {
262 0 : return (dynamic_cast<const DefaultPageObjectProvider*>(&rProvider) != NULL);
263 : }
264 :
265 :
266 :
267 :
268 : //===== ExistingPageProvider ==================================================
269 :
270 0 : ExistingPageProvider::ExistingPageProvider (SdPage* pPage)
271 0 : : mpPage(pPage)
272 : {
273 0 : }
274 :
275 :
276 :
277 :
278 0 : SdPage* ExistingPageProvider::operator() (SdDrawDocument* pDocument)
279 : {
280 : (void)pDocument; // Unused parameter.
281 :
282 0 : return mpPage;
283 : }
284 :
285 :
286 :
287 :
288 0 : int ExistingPageProvider::GetCostIndex (void)
289 : {
290 0 : return 0;
291 : }
292 :
293 :
294 :
295 :
296 0 : bool ExistingPageProvider::operator== (const PageObjectProvider& rProvider)
297 : {
298 : const ExistingPageProvider* pExistingPageProvider
299 0 : = dynamic_cast<const ExistingPageProvider*>(&rProvider);
300 0 : if (pExistingPageProvider != NULL)
301 0 : return (mpPage == pExistingPageProvider->mpPage);
302 : else
303 0 : return false;
304 : }
305 :
306 :
307 : } } // end of namespace sd::sidebar
308 :
309 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|