[PATCH] Create Photo Album implementation
Gergő Mocsi (via_Code_Review)
gerrit at gerrit.libreoffice.org
Thu Apr 11 06:07:21 PDT 2013
Hi,
I have submitted a patch for review:
https://gerrit.libreoffice.org/3335
To pull it, you can do:
git pull ssh://gerrit.libreoffice.org:29418/core refs/changes/35/3335/1
Create Photo Album implementation
UI tweaks: dialog window open in all modes (Normal, Outline, Slide Sorter, ..).
Fixed some pointer issues in function CreateHdl).
Functionality: Title slide gets inserted only when we have one slide in the
presentation (having > 1, I assume that we don't have an empty presentation).
Change-Id: I7eb844bf2382a44481435cfaa8f498e29c56bd69
---
M sd/source/ui/dlg/PhotoAlbumDialog.cxx
M sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
M sd/source/ui/view/outlnvs2.cxx
3 files changed, 68 insertions(+), 23 deletions(-)
diff --git a/sd/source/ui/dlg/PhotoAlbumDialog.cxx b/sd/source/ui/dlg/PhotoAlbumDialog.cxx
index a2445a5..00a9e06 100644
--- a/sd/source/ui/dlg/PhotoAlbumDialog.cxx
+++ b/sd/source/ui/dlg/PhotoAlbumDialog.cxx
@@ -99,19 +99,25 @@
Reference< lang::XMultiServiceFactory > xShapeFactory( pDoc->getUnoModel(), uno::UNO_QUERY );
// Create the title slide
- Reference< drawing::XDrawPage > xTitleSlide = appendNewSlide(AUTOLAYOUT_TITLE, xDrawPages);
+ const sal_Int32 nSlideCount = pDoc->GetSdPageCount(PK_STANDARD);
- SdPage* pFirstSlide = pDoc->GetSdPage( pDoc->GetSdPageCount(PK_STANDARD)-1, PK_STANDARD);
- SvtUserOptions aUserOptions;
- SdrObject* pTitleObj = pFirstSlide->GetPresObj(PRESOBJ_TITLE, 0);
- SvxShapeText* pTitleText = new SvxShapeText(pTitleObj);
- pTitleText->SetShapeType("com.sun.star.presentation.TitleTextShape");
- pTitleText->setString(OUString("Photoalbum\n"));
+ if(nSlideCount == 1)
+ {
+ // we have created an empty presentation (probably)
+ Reference< drawing::XDrawPage > xTitleSlide = appendNewSlide(AUTOLAYOUT_TITLE, xDrawPages);
- SdrObject* pTextObj = pFirstSlide->GetPresObj(PRESOBJ_TEXT, 0);
- SvxShapeText* pTextShape = new SvxShapeText(pTextObj);
- pTextShape->SetShapeType("com.sun.star.presentation.TextShape");
- pTextShape->setString(OUString("Author: ") + aUserOptions.GetFullName());
+ SdPage* pFirstSlide = pDoc->GetSdPage( pDoc->GetSdPageCount(PK_STANDARD)-1, PK_STANDARD);
+ SvtUserOptions aUserOptions;
+ SdrObject* pTitleObj = pFirstSlide->GetPresObj(PRESOBJ_TITLE, 0);
+ SvxShapeText* pTitleText = new SvxShapeText(pTitleObj);
+ pTitleText->SetShapeType("com.sun.star.presentation.TitleTextShape");
+ pTitleText->setString(OUString("Photoalbum\n"));
+
+ SdrObject* pTextObj = pFirstSlide->GetPresObj(PRESOBJ_TEXT, 0);
+ SvxShapeText* pTextShape = new SvxShapeText(pTextObj);
+ pTextShape->SetShapeType("com.sun.star.presentation.TextShape");
+ pTextShape->setString(OUString("Author: ") + aUserOptions.GetFullName());
+ }
Reference< XComponentContext > xContext(::comphelper::getProcessComponentContext());
Reference< graphic::XGraphicProvider> xProvider(graphic::GraphicProvider::create(xContext));
@@ -121,10 +127,10 @@
if ( sOpt == "Fit to slide")
{
OUString sUrl;
- OUString* pData;
+
for( sal_Int16 i = 0; i < pImagesLst->GetEntryCount(); ++i )
{
- pData = (OUString*) pImagesLst->GetEntryData(i);
+ OUString* pData = (OUString*) pImagesLst->GetEntryData(i);
sUrl = *pData;
if (sUrl != "Text Box")
{
@@ -175,16 +181,17 @@
{
appendNewSlide(AUTOLAYOUT_ONLY_TEXT, xDrawPages);
}
+ delete pData;
+ pData = NULL;
}
- delete pData;
}
else if( sOpt == "1 image with title" )
{
OUString sUrl;
- OUString* pData;
+
for( sal_Int16 i = 0; i < pImagesLst->GetEntryCount(); ++i )
{
- pData = (OUString*) pImagesLst->GetEntryData(i);
+ OUString* pData = (OUString*) pImagesLst->GetEntryData(i);
sUrl = *pData;
if ( sUrl != "Text Box" )
{
@@ -217,17 +224,19 @@
{
appendNewSlide(AUTOLAYOUT_ONLY_TEXT, xDrawPages);
}
+ delete pData;
+ pData = NULL;
}
- delete pData;
}
else if( sOpt == "2 images" )
{
OUString sUrl1("");
OUString sUrl2("");
- OUString* pData;
for( sal_Int32 i = 0; i < pImagesLst->GetEntryCount(); i+=2 )
{
+ OUString* pData;
+
// create the slide
Reference< drawing::XDrawPage > xSlide = appendNewSlide(AUTOLAYOUT_NONE, xDrawPages);
Reference< beans::XPropertySet > xSlideProps( xSlide, uno::UNO_QUERY );
@@ -328,9 +337,9 @@
xShape->setPosition(aPicPos);
xSlide->add(xShape);
}
-
+ delete pData;
+ pData = NULL;
}
- delete pData;
}
else if( sOpt == "4 images" )
{
@@ -338,10 +347,10 @@
OUString sUrl2("");
OUString sUrl3("");
OUString sUrl4("");
- OUString* pData;
for( sal_Int32 i = 0; i < pImagesLst->GetEntryCount(); i+=4 )
{
+ OUString* pData;
// create the slide
Reference< drawing::XDrawPage > xSlide = appendNewSlide(AUTOLAYOUT_NONE, xDrawPages);
Reference< beans::XPropertySet > xSlideProps( xSlide, uno::UNO_QUERY );
@@ -535,8 +544,9 @@
xShape->setPosition(aPicPos);
xSlide->add(xShape);
}
+ delete pData;
+ pData = NULL;
}
- delete pData;
}
else
{
@@ -591,7 +601,7 @@
// Write out configuration
try
{
- Reference< XInterface > xCfg = ::comphelper::ConfigurationHelper::openConfig(
+ xCfg = ::comphelper::ConfigurationHelper::openConfig(
::comphelper::getProcessComponentContext(),
OUString("/org.openoffice.Office.Impress/"),
::comphelper::ConfigurationHelper::E_STANDARD);
@@ -895,6 +905,7 @@
Reference< graphic::XGraphicProvider> xProvider
)
{
+ // The same as above, except this returns an XGraphic from the image URL
::comphelper::NamedValueCollection aMediaProperties;
aMediaProperties.put( "URL", OUString( sUrl ) );
Reference< graphic::XGraphic> xGraphic =
diff --git a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
index 4817f42..3d0b58e 100644
--- a/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
+++ b/sd/source/ui/slidesorter/controller/SlsSlotManager.cxx
@@ -66,6 +66,7 @@
#include "glob.hrc"
#include "unmodpg.hxx"
#include "DrawViewShell.hxx"
+#include "sdabstdlg.hxx"
#include <sfx2/request.hxx>
#include <sfx2/viewfrm.hxx>
@@ -263,6 +264,22 @@
}
break;
+ case SID_PHOTOALBUM:
+ {
+ SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
+ VclAbstractDialog* pDlg = pFact ? pFact->CreateSdPhotoAlbumDialog(
+ mrSlideSorter.GetContentWindow().get(),
+ pDocument) : 0;
+
+ if (pDlg)
+ {
+ pDlg->Execute();
+ delete pDlg;
+ }
+ rRequest.Done ();
+ }
+ break;
+
default:
break;
}
diff --git a/sd/source/ui/view/outlnvs2.cxx b/sd/source/ui/view/outlnvs2.cxx
index a514bb2..939d6dd 100644
--- a/sd/source/ui/view/outlnvs2.cxx
+++ b/sd/source/ui/view/outlnvs2.cxx
@@ -297,6 +297,23 @@
Cancel();
}
break;
+
+ case SID_PHOTOALBUM:
+ {
+ SdAbstractDialogFactory* pFact = SdAbstractDialogFactory::Create();
+ VclAbstractDialog* pDlg = pFact ? pFact->CreateSdPhotoAlbumDialog(
+ GetActiveWindow(),
+ GetDoc()) : 0;
+
+ if (pDlg)
+ {
+ pDlg->Execute();
+ delete pDlg;
+ }
+ Cancel();
+ rReq.Ignore ();
+ }
+ break;
}
if(HasCurrentFunction())
--
To view, visit https://gerrit.libreoffice.org/3335
To unsubscribe, visit https://gerrit.libreoffice.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I7eb844bf2382a44481435cfaa8f498e29c56bd69
Gerrit-PatchSet: 1
Gerrit-Project: core
Gerrit-Branch: master
Gerrit-Owner: Gergő Mocsi <gmocsi91 at gmail.com>
More information about the LibreOffice
mailing list