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 :
10 : #include <comphelper/namedvaluecollection.hxx>
11 : #include <comphelper/processfactory.hxx>
12 : #include <svl/itemset.hxx>
13 : #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
14 : #include <com/sun/star/drawing/XMasterPagesSupplier.hpp>
15 : #include <com/sun/star/container/XNameAccess.hpp>
16 :
17 : #include <com/sun/star/drawing/XDrawPagesSupplier.hpp>
18 : #include <com/sun/star/text/XText.hpp>
19 :
20 : #include <sfx2/filedlghelper.hxx>
21 : #include <tools/urlobj.hxx>
22 :
23 : #include <unotools/pathoptions.hxx>
24 : #include <unotools/useroptions.hxx>
25 : #include <unotools/ucbstreamhelper.hxx>
26 : #include <officecfg/Office/Impress.hxx>
27 : #include <svx/svdview.hxx>
28 : #include <vcl/msgbox.hxx>
29 : #include <svx/unoshape.hxx>
30 : #include <svx/xfltrit.hxx>
31 : #include <svx/xfillit.hxx>
32 : #include "PhotoAlbumDialog.hxx"
33 : #include "strings.hrc"
34 : #include "sdresid.hxx"
35 :
36 : namespace sd
37 : {
38 :
39 0 : OUString SdPhotoAlbumDialog::sDirUrl;
40 :
41 0 : SdPhotoAlbumDialog::SdPhotoAlbumDialog(vcl::Window* pWindow, SdDrawDocument* pActDoc)
42 : : ModalDialog(pWindow, "PhotoAlbumCreatorDialog", "modules/simpress/ui/photoalbum.ui"),
43 0 : pDoc(pActDoc)
44 : {
45 0 : get(pCancelBtn, "cancel_btn");
46 0 : get(pCreateBtn, "create_btn");
47 :
48 0 : get(pAddBtn, "add_btn");
49 0 : get(pUpBtn, "up_btn");
50 0 : get(pDownBtn, "down_btn");
51 0 : get(pRemoveBtn, "rem_btn");
52 :
53 0 : get(pImagesLst, "images_tree");
54 0 : get(pImg, "preview_img");
55 :
56 0 : get(pInsTypeCombo, "opt_combo");
57 0 : get(pASRCheck, "asr_check");
58 0 : get(pCapCheck, "cap_check");
59 0 : pCancelBtn->SetClickHdl(LINK(this, SdPhotoAlbumDialog, CancelHdl));
60 0 : pCreateBtn->SetClickHdl(LINK(this, SdPhotoAlbumDialog, CreateHdl));
61 :
62 0 : pAddBtn->SetClickHdl(LINK(this, SdPhotoAlbumDialog, FileHdl));
63 0 : pUpBtn->SetClickHdl(LINK(this, SdPhotoAlbumDialog, UpHdl));
64 0 : pUpBtn->Disable();
65 0 : pDownBtn->SetClickHdl(LINK(this, SdPhotoAlbumDialog, DownHdl));
66 0 : pDownBtn->Disable();
67 0 : pRemoveBtn->SetClickHdl(LINK(this, SdPhotoAlbumDialog, RemoveHdl));
68 0 : pRemoveBtn->Disable();
69 0 : pImagesLst->SetSelectHdl(LINK(this, SdPhotoAlbumDialog, SelectHdl));
70 :
71 0 : mpGraphicFilter = new GraphicFilter;
72 0 : sDirUrl.clear();
73 0 : pAddBtn->GrabFocus();
74 0 : pImagesLst->Clear();
75 0 : }
76 :
77 0 : SdPhotoAlbumDialog::~SdPhotoAlbumDialog()
78 : {
79 0 : disposeOnce();
80 0 : }
81 :
82 0 : void SdPhotoAlbumDialog::dispose()
83 : {
84 0 : pCancelBtn.clear();
85 0 : pCreateBtn.clear();
86 0 : pAddBtn.clear();
87 0 : pUpBtn.clear();
88 0 : pDownBtn.clear();
89 0 : pRemoveBtn.clear();
90 0 : pImagesLst.clear();
91 0 : pImg.clear();
92 0 : pInsTypeCombo.clear();
93 0 : pASRCheck.clear();
94 0 : pCapCheck.clear();
95 0 : ModalDialog::dispose();
96 0 : }
97 :
98 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, CancelHdl)
99 : {
100 0 : Close();
101 0 : return 0;
102 : }
103 :
104 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, CreateHdl)
105 : {
106 0 : if (pImagesLst->GetEntryCount() == 0)
107 : {
108 0 : ScopedVclPtrInstance< WarningBox > aWarning(this, WB_OK, SD_RESSTR(STR_PHOTO_ALBUM_EMPTY_WARNING));
109 0 : aWarning->Execute();
110 : }
111 : else
112 : {
113 0 : Reference< drawing::XDrawPagesSupplier > xDPS( pDoc->getUnoModel(), uno::UNO_QUERY );
114 0 : Reference< drawing::XDrawPages > xDrawPages( xDPS->getDrawPages(), uno::UNO_QUERY );
115 0 : Reference< lang::XMultiServiceFactory > xShapeFactory( pDoc->getUnoModel(), uno::UNO_QUERY );
116 :
117 0 : Reference< XComponentContext > xContext(::comphelper::getProcessComponentContext());
118 0 : Reference< graphic::XGraphicProvider> xProvider(graphic::GraphicProvider::create(xContext));
119 :
120 : // get the option
121 0 : sal_uInt16 nOpt = pInsTypeCombo->GetSelectEntryPos();
122 0 : if ( nOpt == ONE_IMAGE )
123 : {
124 0 : OUString sUrl;
125 0 : for( sal_Int32 i = 0; i < pImagesLst->GetEntryCount(); ++i )
126 : {
127 0 : OUString const * pData = static_cast<OUString const *>(pImagesLst->GetEntryData(i));
128 0 : sUrl = *pData;
129 :
130 0 : Reference< drawing::XDrawPage > xSlide = appendNewSlide(AUTOLAYOUT_NONE, xDrawPages);
131 0 : Reference< beans::XPropertySet > xSlideProps( xSlide, uno::UNO_QUERY );
132 :
133 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl, xProvider);
134 :
135 0 : Image aImg(xGraphic);
136 : // Save the original size, multiplied with 100
137 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
138 :
139 : Reference< drawing::XShape > xShape(
140 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
141 0 : uno::UNO_QUERY);
142 :
143 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
144 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
145 :
146 0 : ::awt::Size aPageSize;
147 :
148 0 : xSlideProps->getPropertyValue(
149 0 : OUString("Width")) >>= aPageSize.Width;
150 0 : xSlideProps->getPropertyValue(
151 0 : OUString("Height")) >>= aPageSize.Height;
152 :
153 0 : ::awt::Point aPicPos;
154 :
155 0 : if(pASRCheck->IsChecked())
156 : {
157 : // Resize the image, with keeping ASR
158 0 : aPicSize = createASRSize(aPicSize, aPageSize);
159 : }
160 : else
161 : {
162 0 : aPicSize.Width = aPageSize.Width;
163 0 : aPicSize.Height = aPageSize.Height;
164 : }
165 :
166 0 : xShape->setSize(aPicSize);
167 0 : aPicPos.X = (aPageSize.Width - aPicSize.Width)/2;
168 0 : aPicPos.Y = (aPageSize.Height - aPicSize.Height)/2;
169 :
170 0 : xShape->setPosition(aPicPos);
171 0 : xSlide->add(xShape);
172 0 : if(pCapCheck->IsChecked())
173 0 : createCaption( aPageSize );
174 0 : }
175 : }
176 0 : else if( nOpt == TWO_IMAGES )
177 : {
178 0 : OUString sUrl1("");
179 0 : OUString sUrl2("");
180 :
181 0 : for( sal_Int32 i = 0; i < pImagesLst->GetEntryCount(); i+=2 )
182 : {
183 0 : OUString const * pData = NULL;
184 :
185 : // create the slide
186 0 : Reference< drawing::XDrawPage > xSlide = appendNewSlide(AUTOLAYOUT_NONE, xDrawPages);
187 0 : Reference< beans::XPropertySet > xSlideProps( xSlide, uno::UNO_QUERY );
188 : //Slide dimensions
189 0 : ::awt::Size aPageSize;
190 :
191 0 : xSlideProps->getPropertyValue(
192 0 : OUString("Width")) >>= aPageSize.Width;
193 0 : xSlideProps->getPropertyValue(
194 0 : OUString("Height")) >>= aPageSize.Height;
195 :
196 : // grab the left one
197 0 : void* pD1 = pImagesLst->GetEntryData(i);
198 0 : pData = static_cast<OUString const *>(pD1);
199 0 : sUrl1 = pData ? OUString(*pData) : "";
200 : // grab the right one
201 0 : void* pD2 = pImagesLst->GetEntryData(i+1);
202 0 : pData = static_cast<OUString const *>(pD2);
203 0 : sUrl2 = pData ? OUString(*pData) : "";
204 :
205 0 : if( !sUrl1.isEmpty() )
206 : {
207 :
208 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl1, xProvider);
209 :
210 0 : Image aImg(xGraphic);
211 : // Save the original size, multiplied with 100
212 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
213 :
214 : Reference< drawing::XShape > xShape(
215 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
216 0 : uno::UNO_QUERY);
217 :
218 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
219 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
220 :
221 0 : ::awt::Point aPicPos;
222 :
223 0 : if(pASRCheck->IsChecked())
224 : {
225 : // Resize the image, with keeping ASR
226 0 : aPicSize = createASRSize(aPicSize, ::awt::Size(aPageSize.Width/2 - 100, aPageSize.Height/2 - 100));
227 : }
228 : else
229 : {
230 0 : aPicSize.Width = aPageSize.Width/2 - 100;
231 0 : aPicSize.Height = aPageSize.Height/2 - 100;
232 : }
233 0 : xShape->setSize(aPicSize);
234 0 : aPicPos.X = (aPageSize.Width/4 - aPicSize.Width/2);
235 0 : aPicPos.Y = aPageSize.Height/2 - aPicSize.Height/2;
236 :
237 0 : xShape->setPosition(aPicPos);
238 0 : xSlide->add(xShape);
239 : }
240 :
241 0 : if( !sUrl2.isEmpty() )
242 : {
243 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl2, xProvider);
244 :
245 0 : Image aImg(xGraphic);
246 : // Save the original size, multiplied with 100
247 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
248 :
249 : Reference< drawing::XShape > xShape(
250 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
251 0 : uno::UNO_QUERY);
252 :
253 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
254 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
255 :
256 0 : ::awt::Point aPicPos;
257 :
258 0 : if(pASRCheck->IsChecked())
259 : {
260 : // Resize the image, with keeping ASR
261 0 : aPicSize = createASRSize(aPicSize, ::awt::Size(aPageSize.Width/2 - 100, aPageSize.Height/2 - 100));
262 : }
263 : else
264 : {
265 0 : aPicSize.Width = aPageSize.Width/2 - 100;
266 0 : aPicSize.Height = aPageSize.Height/2 - 100;
267 : }
268 0 : xShape->setSize(aPicSize);
269 0 : aPicPos.X = (aPageSize.Width/4 - aPicSize.Width/2) + aPageSize.Width/2;
270 0 : aPicPos.Y = aPageSize.Height/2 - aPicSize.Height/2;
271 :
272 0 : xShape->setPosition(aPicPos);
273 0 : xSlide->add(xShape);
274 0 : if(pCapCheck->IsChecked())
275 0 : createCaption( aPageSize );
276 :
277 : }
278 0 : }
279 : }
280 0 : else if( nOpt == FOUR_IMAGES )
281 : {
282 0 : OUString sUrl1("");
283 0 : OUString sUrl2("");
284 0 : OUString sUrl3("");
285 0 : OUString sUrl4("");
286 :
287 0 : for( sal_Int32 i = 0; i < pImagesLst->GetEntryCount(); i+=4 )
288 : {
289 0 : OUString* pData = NULL;
290 : // create the slide
291 0 : Reference< drawing::XDrawPage > xSlide = appendNewSlide(AUTOLAYOUT_NONE, xDrawPages);
292 0 : Reference< beans::XPropertySet > xSlideProps( xSlide, uno::UNO_QUERY );
293 : //Slide dimensions
294 0 : ::awt::Size aPageSize;
295 :
296 0 : xSlideProps->getPropertyValue(
297 0 : OUString("Width")) >>= aPageSize.Width;
298 0 : xSlideProps->getPropertyValue(
299 0 : OUString("Height")) >>= aPageSize.Height;
300 :
301 : // grab the upper left one
302 0 : void* pD1 = pImagesLst->GetEntryData(i);
303 0 : pData = static_cast<OUString*>(pD1);
304 0 : sUrl1 = pData ? OUString(*pData) : "";
305 :
306 : // grab the upper right one
307 0 : void* pD2 = pImagesLst->GetEntryData(i+1);
308 0 : pData = static_cast<OUString *>(pD2);
309 0 : sUrl2 = pData ? OUString(*pData) : "";
310 :
311 : // grab the lower left one
312 0 : void* pD3 = pImagesLst->GetEntryData(i+2);
313 0 : pData = static_cast<OUString*>(pD3);
314 0 : sUrl3 = pData ? OUString(*pData) : "";
315 :
316 : // grab the lower right one
317 0 : void* pD4 = pImagesLst->GetEntryData(i+3);
318 0 : pData = static_cast<OUString*>(pD4);
319 0 : sUrl4 = pData ? OUString(*pData) : "";
320 :
321 0 : if( !sUrl1.isEmpty() )
322 : {
323 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl1, xProvider);
324 :
325 0 : Image aImg(xGraphic);
326 : // Save the original size, multiplied with 100
327 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
328 :
329 : Reference< drawing::XShape > xShape(
330 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
331 0 : uno::UNO_QUERY);
332 :
333 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
334 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
335 :
336 0 : ::awt::Point aPicPos;
337 :
338 0 : if(pASRCheck->IsChecked())
339 : {
340 : // Resize the image, with keeping ASR
341 0 : aPicSize = createASRSize(aPicSize, ::awt::Size(aPageSize.Width/2 - 100, aPageSize.Height/2 - 100));
342 : }
343 : else
344 : {
345 0 : aPicSize.Width = aPageSize.Width/2 - 100;
346 0 : aPicSize.Height = aPageSize.Height/2 - 100;
347 : }
348 0 : xShape->setSize(aPicSize);
349 0 : aPicPos.X = (aPageSize.Width/4 - aPicSize.Width/2);
350 0 : aPicPos.Y = aPageSize.Height/4 - aPicSize.Height/2;
351 :
352 0 : xShape->setPosition(aPicPos);
353 0 : xSlide->add(xShape);
354 : }
355 0 : if( !sUrl2.isEmpty() )
356 : {
357 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl2, xProvider);
358 :
359 0 : Image aImg(xGraphic);
360 : // Save the original size, multiplied with 100
361 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
362 :
363 : Reference< drawing::XShape > xShape(
364 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
365 0 : uno::UNO_QUERY);
366 :
367 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
368 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
369 :
370 0 : ::awt::Point aPicPos;
371 :
372 0 : if(pASRCheck->IsChecked())
373 : {
374 : // Resize the image, with keeping ASR
375 0 : aPicSize = createASRSize(aPicSize, ::awt::Size(aPageSize.Width/2 - 100, aPageSize.Height/2 - 100));
376 : }
377 : else
378 : {
379 0 : aPicSize.Width = aPageSize.Width/2 - 100;
380 0 : aPicSize.Height = aPageSize.Height/2 - 100;
381 : }
382 0 : xShape->setSize(aPicSize);
383 0 : aPicPos.X = (aPageSize.Width/4 - aPicSize.Width/2) + aPageSize.Width/2;
384 0 : aPicPos.Y = aPageSize.Height/4 - aPicSize.Height/2;
385 :
386 0 : xShape->setPosition(aPicPos);
387 0 : xSlide->add(xShape);
388 : }
389 0 : if( !sUrl3.isEmpty() )
390 : {
391 :
392 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl3, xProvider);
393 :
394 0 : Image aImg(xGraphic);
395 : // Save the original size, multiplied with 100
396 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
397 :
398 : Reference< drawing::XShape > xShape(
399 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
400 0 : uno::UNO_QUERY);
401 :
402 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
403 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
404 :
405 0 : ::awt::Point aPicPos;
406 :
407 0 : if(pASRCheck->IsChecked())
408 : {
409 : // Resize the image, with keeping ASR
410 0 : aPicSize = createASRSize(aPicSize, ::awt::Size(aPageSize.Width/2 - 100, aPageSize.Height/2 - 100));
411 : }
412 : else
413 : {
414 0 : aPicSize.Width = aPageSize.Width/2 - 100;
415 0 : aPicSize.Height = aPageSize.Height/2 - 100;
416 : }
417 0 : xShape->setSize(aPicSize);
418 0 : aPicPos.X = (aPageSize.Width/4 - aPicSize.Width/2);
419 0 : aPicPos.Y = aPageSize.Height/4 - aPicSize.Height/2 + aPageSize.Height/2;
420 :
421 0 : xShape->setPosition(aPicPos);
422 0 : xSlide->add(xShape);
423 : }
424 0 : if( !sUrl4.isEmpty() )
425 : {
426 0 : Reference< graphic::XGraphic > xGraphic = createXGraphicFromUrl(sUrl4, xProvider);
427 :
428 0 : Image aImg(xGraphic);
429 : // Save the original size, multiplied with 100
430 0 : ::awt::Size aPicSize(aImg.GetSizePixel().Width()*100, aImg.GetSizePixel().Height()*100);
431 :
432 : Reference< drawing::XShape > xShape(
433 0 : xShapeFactory->createInstance("com.sun.star.drawing.GraphicObjectShape"),
434 0 : uno::UNO_QUERY);
435 :
436 0 : Reference< beans::XPropertySet > xProps( xShape, uno::UNO_QUERY );
437 0 : xProps->setPropertyValue("Graphic", ::uno::Any(xGraphic));
438 :
439 0 : ::awt::Point aPicPos;
440 :
441 0 : if(pASRCheck->IsChecked())
442 : {
443 : // Resize the image, with keeping ASR
444 0 : aPicSize = createASRSize(aPicSize, ::awt::Size(aPageSize.Width/2 - 100, aPageSize.Height/2 - 100));
445 : }
446 : else
447 : {
448 0 : aPicSize.Width = aPageSize.Width/2 - 100;
449 0 : aPicSize.Height = aPageSize.Height/2 - 100;
450 : }
451 0 : xShape->setSize(aPicSize);
452 0 : aPicPos.X = (aPageSize.Width/4 - aPicSize.Width/2) + aPageSize.Width/2;
453 0 : aPicPos.Y = aPageSize.Height/4 - aPicSize.Height/2 + aPageSize.Height/2;
454 :
455 0 : xShape->setPosition(aPicPos);
456 0 : xSlide->add(xShape);
457 0 : if(pCapCheck->IsChecked())
458 0 : createCaption( aPageSize );
459 :
460 : }
461 0 : }
462 : }
463 : else
464 : {
465 0 : ScopedVclPtrInstance< InfoBox > aInfo(this, OUString("Function is not implemented!"));
466 0 : aInfo->Execute();
467 : }
468 0 : EndDialog();
469 0 : return 0;
470 : }
471 0 : return 0;
472 : }
473 :
474 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, FileHdl)
475 : {
476 : ::sfx2::FileDialogHelper aDlg(
477 : css::ui::dialogs::TemplateDescription::FILEOPEN_LINK_PREVIEW,
478 : SFXWB_GRAPHIC | SFXWB_MULTISELECTION
479 0 : );
480 : // Read configuration
481 0 : OUString sUrl(officecfg::Office::Impress::Pictures::Path::get());
482 :
483 0 : INetURLObject aFile( SvtPathOptions().GetUserConfigPath() );
484 0 : if (!sUrl.isEmpty())
485 0 : aDlg.SetDisplayDirectory(sUrl);
486 : else
487 0 : aDlg.SetDisplayDirectory( aFile.GetMainURL( INetURLObject::NO_DECODE ) );
488 :
489 0 : if ( aDlg.Execute() == ERRCODE_NONE )
490 : {
491 0 : Sequence< OUString > aFilesArr = aDlg.GetSelectedFiles();
492 0 : if( aFilesArr.getLength() )
493 : {
494 0 : sUrl = aDlg.GetDisplayDirectory();
495 : // Write out configuration
496 : {
497 : std::shared_ptr< comphelper::ConfigurationChanges > batch(
498 0 : comphelper::ConfigurationChanges::create());
499 0 : officecfg::Office::Impress::Pictures::Path::set(sUrl, batch);
500 0 : batch->commit();
501 : }
502 :
503 0 : for ( sal_Int32 i = 0; i < aFilesArr.getLength(); i++ )
504 : {
505 : // Store full path, show filename only. Use INetURLObject to display spaces in filename correctly
506 0 : INetURLObject aUrl = INetURLObject(aFilesArr[i]);
507 0 : sal_Int16 nPos = pImagesLst->InsertEntry( aUrl.GetLastName(INetURLObject::DECODE_WITH_CHARSET, RTL_TEXTENCODING_UTF8) );
508 0 : pImagesLst->SetEntryData(nPos, new OUString(aUrl.GetMainURL(INetURLObject::DECODE_WITH_CHARSET, RTL_TEXTENCODING_UTF8)));
509 0 : }
510 0 : }
511 : }
512 0 : EnableDisableButtons();
513 0 : return 0;
514 : }
515 :
516 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, UpHdl)
517 : {
518 0 : if (pImagesLst->GetSelectEntryPos() != LISTBOX_ENTRY_NOTFOUND
519 0 : && pImagesLst->GetSelectEntryPos() != 0)
520 : {
521 0 : sal_uInt16 nActPos = pImagesLst->GetSelectEntryPos();
522 0 : OUString sActEntry( pImagesLst->GetEntry(nActPos) );
523 : // actual data
524 0 : OUString* pActData = static_cast<OUString*>(pImagesLst->GetEntryData(nActPos));
525 0 : OUString sAct(*pActData);
526 :
527 0 : OUString sUpperEntry( pImagesLst->GetEntry(nActPos - 1) );
528 : // upper data
529 0 : OUString* pUpperData = static_cast<OUString*>(pImagesLst->GetEntryData(nActPos - 1));
530 0 : OUString sUpper(*pUpperData);
531 :
532 0 : pImagesLst->RemoveEntry( sActEntry );
533 0 : pImagesLst->RemoveEntry( sUpperEntry );
534 :
535 0 : pImagesLst->InsertEntry( sActEntry, nActPos - 1 );
536 0 : pImagesLst->SetEntryData( nActPos - 1, new OUString(sAct));
537 :
538 0 : pImagesLst->InsertEntry( sUpperEntry, nActPos );
539 0 : pImagesLst->SetEntryData( nActPos, new OUString(sUpper));
540 :
541 0 : pImagesLst->SelectEntryPos(nActPos - 1);
542 : }
543 :
544 0 : EnableDisableButtons();
545 0 : return 0;
546 : }
547 :
548 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, DownHdl)
549 : {
550 0 : sal_uInt16 nActPos = pImagesLst->GetSelectEntryPos();
551 0 : if (!pImagesLst->GetEntry(nActPos + 1).isEmpty())
552 : {
553 0 : OUString sActEntry( pImagesLst->GetSelectEntry() );
554 0 : OUString* pActData = static_cast<OUString*>(pImagesLst->GetSelectEntryData());
555 0 : OUString sAct(*pActData);
556 :
557 0 : OUString sDownEntry( pImagesLst->GetEntry(nActPos + 1) );
558 0 : OUString* pDownData = static_cast<OUString*>(pImagesLst->GetEntryData(nActPos + 1));
559 0 : OUString sDown(*pDownData);
560 :
561 0 : pImagesLst->RemoveEntry( sActEntry );
562 0 : pImagesLst->RemoveEntry( sDownEntry );
563 :
564 0 : pImagesLst->InsertEntry( sDownEntry, nActPos );
565 0 : pImagesLst->SetEntryData( nActPos, new OUString(sDown));
566 :
567 0 : pImagesLst->InsertEntry( sActEntry, nActPos + 1 );
568 0 : pImagesLst->SetEntryData( nActPos + 1, new OUString(sAct));
569 :
570 0 : pImagesLst->SelectEntryPos(nActPos + 1);
571 :
572 : }
573 0 : EnableDisableButtons();
574 0 : return 0;
575 : }
576 :
577 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, RemoveHdl)
578 : {
579 0 : pImagesLst->RemoveEntry( pImagesLst->GetSelectEntryPos() );
580 0 : pImg->SetImage(Image());
581 :
582 0 : EnableDisableButtons();
583 0 : return 0;
584 : }
585 :
586 0 : IMPL_LINK_NOARG(SdPhotoAlbumDialog, SelectHdl)
587 : {
588 0 : OUString* pData = static_cast<OUString*>(pImagesLst->GetSelectEntryData());
589 0 : OUString sImgUrl = pData ? OUString(*pData) : "";
590 :
591 0 : if (sImgUrl != SD_RESSTR(STR_PHOTO_ALBUM_TEXTBOX))
592 : {
593 0 : GraphicFilter aCurFilter;
594 0 : Graphic aGraphic;
595 0 : INetURLObject aURLObj( sImgUrl );
596 :
597 0 : sal_uInt16 nFilter = GRFILTER_FORMAT_DONTKNOW;
598 :
599 0 : if ( aURLObj.HasError() || INetProtocol::NotValid == aURLObj.GetProtocol() )
600 : {
601 0 : aURLObj.SetSmartProtocol( INetProtocol::File );
602 0 : aURLObj.SetSmartURL( sImgUrl );
603 : }
604 :
605 0 : GraphicFilterImportFlags nFilterImportFlags = GraphicFilterImportFlags::SetLogsizeForJpeg;
606 : // remote?
607 0 : if ( INetProtocol::File != aURLObj.GetProtocol() )
608 : {
609 0 : SvStream* pStream = ::utl::UcbStreamHelper::CreateStream( sImgUrl, StreamMode::READ );
610 :
611 0 : if( pStream )
612 0 : mpGraphicFilter->ImportGraphic( aGraphic, sImgUrl, *pStream, nFilter, NULL, nFilterImportFlags );
613 : else
614 0 : mpGraphicFilter->ImportGraphic( aGraphic, aURLObj, nFilter, NULL, nFilterImportFlags );
615 0 : delete pStream;
616 : }
617 : else
618 : {
619 0 : mpGraphicFilter->ImportGraphic( aGraphic, aURLObj, nFilter, NULL, nFilterImportFlags );
620 : }
621 :
622 0 : Bitmap aBmp = aGraphic.GetBitmap();
623 0 : sal_Int32 nBmpWidth = aBmp.GetSizePixel().Width();
624 0 : sal_Int32 nBmpHeight = aBmp.GetSizePixel().Height();
625 0 : sal_Int32 nPrevWidth = 200;
626 0 : sal_Int32 nPrewHeight = 150;
627 :
628 0 : double nXRatio = (double) nPrevWidth / nBmpWidth;
629 0 : double nYRatio = (double) nPrewHeight / nBmpHeight;
630 0 : if ( nXRatio < nYRatio )
631 0 : aBmp.Scale( nXRatio, nXRatio );
632 : else
633 0 : aBmp.Scale( nYRatio, nYRatio );
634 :
635 0 : aBmp.Convert( BMP_CONVERSION_24BIT );
636 0 : pImg->SetImage(Image(aBmp));
637 : }
638 : else
639 : {
640 0 : pImg->SetImage(Image());
641 : }
642 0 : EnableDisableButtons();
643 0 : return 0;
644 : }
645 :
646 0 : Reference< drawing::XDrawPage > SdPhotoAlbumDialog::appendNewSlide(AutoLayout aLayout,
647 : Reference< drawing::XDrawPages > xDrawPages
648 : )
649 : {
650 0 : Reference< drawing::XDrawPage > xSlide; // Create the slide
651 0 : Reference< container::XIndexAccess > xIndexAccess( xDrawPages, uno::UNO_QUERY );
652 0 : xSlide = xDrawPages->insertNewByIndex( xIndexAccess->getCount() );
653 0 : SdPage* pSlide = pDoc->GetSdPage( pDoc->GetSdPageCount(PK_STANDARD)-1, PK_STANDARD);
654 0 : pSlide->SetAutoLayout(aLayout, true); // Set the layout here
655 0 : return xSlide;
656 : }
657 :
658 0 : awt::Size SdPhotoAlbumDialog::createASRSize(const awt::Size& aPicSize, const awt::Size& aMaxSize)
659 : {
660 0 : double resizeWidth = aPicSize.Width;
661 0 : double resizeHeight = aPicSize.Height;
662 0 : double aspect = resizeWidth/resizeHeight;
663 :
664 0 : if( resizeWidth > aMaxSize.Width )
665 : {
666 0 : resizeWidth = aMaxSize.Width;
667 0 : resizeHeight = resizeWidth / aspect;
668 : }
669 :
670 0 : if( resizeHeight > aMaxSize.Height )
671 : {
672 0 : aspect = resizeWidth/resizeHeight;
673 0 : resizeHeight = aMaxSize.Height;
674 0 : resizeWidth = resizeHeight * aspect;
675 : }
676 0 : return awt::Size(resizeWidth, resizeHeight);
677 : }
678 :
679 0 : void SdPhotoAlbumDialog::createCaption(const awt::Size& aPageSize )
680 : {
681 0 : Point CapPos;
682 0 : Size CapSize;
683 :
684 0 : CapSize.Width() = aPageSize.Width;
685 0 : CapSize.Height() = aPageSize.Height/6;
686 0 : CapPos.X() = 0;
687 0 : CapPos.Y() = aPageSize.Height - CapSize.Height();
688 0 : SdPage* pSlide = pDoc->GetSdPage( pDoc->GetSdPageCount(PK_STANDARD)-1, PK_STANDARD );
689 0 : Rectangle rRect(CapPos,CapSize);
690 0 : SdrObject* pSdrObj = pSlide->CreatePresObj(PRESOBJ_TITLE,false,rRect);
691 0 : SdrModel* pSdrModel = pDoc->AllocModel();
692 0 : SfxItemSet aSet(pSdrModel->GetItemPool() );
693 0 : aSet.Put( XFillStyleItem(drawing::FillStyle_SOLID) );
694 0 : aSet.Put( XFillColorItem( "", Color(COL_BLACK) ) );
695 0 : aSet.Put( XFillTransparenceItem( 20 ) );
696 0 : pSdrObj->SetMergedItemSetAndBroadcast(aSet);
697 0 : pSlide->InsertObject(pSdrObj);
698 0 : }
699 :
700 0 : Reference< graphic::XGraphic> SdPhotoAlbumDialog::createXGraphicFromUrl(const OUString& sUrl,
701 : Reference< graphic::XGraphicProvider> xProvider
702 : )
703 : {
704 : // The same as above, except this returns an XGraphic from the image URL
705 0 : ::comphelper::NamedValueCollection aMediaProperties;
706 0 : aMediaProperties.put( "URL", OUString( sUrl ) );
707 : Reference< graphic::XGraphic> xGraphic =
708 0 : xProvider->queryGraphic( aMediaProperties.getPropertyValues() );
709 0 : return xGraphic;
710 : }
711 :
712 0 : short SdPhotoAlbumDialog::Execute()
713 : {
714 0 : return ModalDialog::Execute();
715 : }
716 :
717 0 : void SdPhotoAlbumDialog::EnableDisableButtons()
718 : {
719 0 : pRemoveBtn->Enable(pImagesLst->GetSelectEntryCount() > 0);
720 0 : pUpBtn->Enable(pImagesLst->GetSelectEntryCount() > 0 &&
721 0 : pImagesLst->GetSelectEntryPos() != 0);
722 0 : pDownBtn->Enable(pImagesLst->GetSelectEntryCount() > 0 &&
723 0 : pImagesLst->GetSelectEntryPos() < pImagesLst->GetEntryCount()-1);
724 0 : }
725 :
726 0 : } // end of namespace sd
727 :
728 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|