summaryrefslogtreecommitdiff
path: root/sd/source/ui/func/fupage.cxx
diff options
context:
space:
mode:
authorAshod Nakashian <ashod.nakashian@collabora.co.uk>2018-09-12 20:03:11 -0400
committerJan Holesovsky <kendy@collabora.com>2019-06-06 14:33:27 +0200
commit905e6bd3ae0ca5c5ac7083430d7aa126c6526fd7 (patch)
tree65e11c24a7db94ddd3f5e520777c94eeb830ca74 /sd/source/ui/func/fupage.cxx
parentfd95fb975b754d71d3750e85431a4e596a40e659 (diff)
sd: support inserting background image from file via .uno:SelectBackground
The UNO command always prompted the user via file open dialog. This change allows for passing the filename as an argument to allow for inserting slide background programatically. Also, hide the Insert Image button in the sidebar since we can't use that (just yet), because it invokes .uno:SelectBackground directly. We would need to send LOOL a notification to invoke this on its own end to first prompt the user for a file. (cherry picked from commit 2118143bdd246921439ba9e835207585203dd45f) Change-Id: I20c0e33d66f8bcd72a6388e39c4ac92e64978f45 Reviewed-on: https://gerrit.libreoffice.org/73481 Tested-by: Jenkins Reviewed-by: Jan Holesovsky <kendy@collabora.com>
Diffstat (limited to 'sd/source/ui/func/fupage.cxx')
-rw-r--r--sd/source/ui/func/fupage.cxx62
1 files changed, 44 insertions, 18 deletions
diff --git a/sd/source/ui/func/fupage.cxx b/sd/source/ui/func/fupage.cxx
index ba77b29c54ef..b410cacb0a1e 100644
--- a/sd/source/ui/func/fupage.cxx
+++ b/sd/source/ui/func/fupage.cxx
@@ -26,6 +26,7 @@
#include <svl/itempool.hxx>
#include <sfx2/request.hxx>
#include <vcl/prntypes.hxx>
+#include <vcl/graphicfilter.hxx>
#include <stlsheet.hxx>
#include <editeng/eeitem.hxx>
#include <editeng/frmdiritem.hxx>
@@ -111,7 +112,7 @@ rtl::Reference<FuPoor> FuPage::Create( ViewShell* pViewSh, ::sd::Window* pWin, :
return xFunc;
}
-void FuPage::DoExecute( SfxRequest& )
+void FuPage::DoExecute(SfxRequest& rReq)
{
mpDrawViewShell = dynamic_cast<DrawViewShell*>(mpViewShell);
DBG_ASSERT( mpDrawViewShell, "sd::FuPage::FuPage(), called without a current DrawViewShell!" );
@@ -129,10 +130,11 @@ void FuPage::DoExecute( SfxRequest& )
return;
// if there are no arguments given, open the dialog
- if( !mpArgs )
+ const SfxPoolItem* pItem;
+ if (!mpArgs || mpArgs->GetItemState(SID_SELECT_BACKGROUND, true, &pItem) == SfxItemState::SET)
{
mpView->SdrEndTextEdit();
- mpArgs = ExecuteDialog(mpWindow ? mpWindow->GetFrameWeld() : nullptr);
+ mpArgs = ExecuteDialog(mpWindow ? mpWindow->GetFrameWeld() : nullptr, rReq);
}
// if we now have arguments, apply them to current page
@@ -189,7 +191,7 @@ void MergePageBackgroundFilling(SdPage *pPage, SdStyleSheet *pStyleSheet, bool b
}
}
-const SfxItemSet* FuPage::ExecuteDialog(weld::Window* pParent)
+const SfxItemSet* FuPage::ExecuteDialog(weld::Window* pParent, SfxRequest& rReq)
{
if (!mpDrawViewShell)
return nullptr;
@@ -288,27 +290,51 @@ const SfxItemSet* FuPage::ExecuteDialog(weld::Window* pParent)
}
else if (nId == SID_SELECT_BACKGROUND)
{
- SvxOpenGraphicDialog aDlg(SdResId(STR_SET_BACKGROUND_PICTURE), pParent);
+ OUString aFileName;
+ OUString aFilterName;
+ Graphic aGraphic;
+ ErrCode nError = ERRCODE_GRFILTER_OPENERROR;
- if( aDlg.Execute() == ERRCODE_NONE )
+ const SfxItemSet* pArgs = rReq.GetArgs();
+ const SfxPoolItem* pItem;
+
+ if (pArgs && pArgs->GetItemState(SID_SELECT_BACKGROUND, true, &pItem) == SfxItemState::SET)
{
- Graphic aGraphic;
- ErrCode nError = aDlg.GetGraphic(aGraphic);
- if( nError == ERRCODE_NONE )
- {
- pTempSet.reset( new SfxItemSet( mpDoc->GetPool(), svl::Items<XATTR_FILL_FIRST, XATTR_FILL_LAST>{}) );
+ aFileName = static_cast<const SfxStringItem*>(pItem)->GetValue();
- pTempSet->Put( XFillStyleItem( drawing::FillStyle_BITMAP ) );
+ if (pArgs->GetItemState(FN_PARAM_FILTER, true, &pItem) == SfxItemState::SET)
+ aFilterName = static_cast<const SfxStringItem*>(pItem)->GetValue();
- // MigrateItemSet makes sure the XFillBitmapItem will have a unique name
- SfxItemSet aMigrateSet( mpDoc->GetPool(), svl::Items<XATTR_FILLBITMAP, XATTR_FILLBITMAP>{} );
- aMigrateSet.Put(XFillBitmapItem("background", aGraphic));
- SdrModel::MigrateItemSet( &aMigrateSet, pTempSet.get(), mpDoc );
+ nError = GraphicFilter::LoadGraphic(aFileName, aFilterName, aGraphic,
+ &GraphicFilter::GetGraphicFilter());
+ }
+ else
+ {
+ SvxOpenGraphicDialog aDlg(SdResId(STR_SET_BACKGROUND_PICTURE), pParent);
- pTempSet->Put( XFillBmpStretchItem( true ));
- pTempSet->Put( XFillBmpTileItem( false ));
+ nError = aDlg.Execute();
+ if (nError != ERRCODE_NONE)
+ {
+ nError = aDlg.GetGraphic(aGraphic);
+ aFileName = aDlg.GetPath();
+ aFilterName = aDlg.GetDetectedFilter();
}
}
+
+ if (nError == ERRCODE_NONE)
+ {
+ pTempSet.reset( new SfxItemSet( mpDoc->GetPool(), svl::Items<XATTR_FILL_FIRST, XATTR_FILL_LAST>{}) );
+
+ pTempSet->Put( XFillStyleItem( drawing::FillStyle_BITMAP ) );
+
+ // MigrateItemSet makes sure the XFillBitmapItem will have a unique name
+ SfxItemSet aMigrateSet( mpDoc->GetPool(), svl::Items<XATTR_FILLBITMAP, XATTR_FILLBITMAP>{} );
+ aMigrateSet.Put(XFillBitmapItem("background", aGraphic));
+ SdrModel::MigrateItemSet( &aMigrateSet, pTempSet.get(), mpDoc );
+
+ pTempSet->Put( XFillBmpStretchItem( true ));
+ pTempSet->Put( XFillBmpTileItem( false ));
+ }
}
else