LCOV - code coverage report
Current view: top level - sd/source/ui/dlg - PhotoAlbumDialog.cxx (source / functions) Hit Total Coverage
Test: commit c8344322a7af75b84dd3ca8f78b05543a976dfd5 Lines: 0 404 0.0 %
Date: 2015-06-13 12:38:46 Functions: 0 26 0.0 %
Legend: Lines: hit not hit

          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: */

Generated by: LCOV version 1.11