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