Kaydet (Commit) 3ecc2b1f authored tarafından Henry Castro's avatar Henry Castro

sd: enable insert graphic when UNO command has URL file argument

When LOOL requires to insert a graphic, it uses UNO command ".uno:InsertGraphic",
and the corresponding URL file image argument.

However Impress, ignores URL file image argument, and by default
pop up a dialog, so no image is inserted in LOOL.

Change-Id: I31dd1b1536307ef2dbb6b3d49812b310560c919f
üst 5ae9e844
...@@ -113,69 +113,96 @@ rtl::Reference<FuPoor> FuInsertGraphic::Create( ViewShell* pViewSh, ::sd::Window ...@@ -113,69 +113,96 @@ rtl::Reference<FuPoor> FuInsertGraphic::Create( ViewShell* pViewSh, ::sd::Window
return xFunc; return xFunc;
} }
void FuInsertGraphic::DoExecute( SfxRequest& ) void FuInsertGraphic::DoExecute( SfxRequest& rReq )
{ {
SvxOpenGraphicDialog aDlg(SdResId(STR_INSERTGRAPHIC)); OUString aFileName;
OUString aFilterName;
Graphic aGraphic;
if( aDlg.Execute() == GRFILTER_OK ) bool bAsLink = false;
int nError = GRFILTER_OPENERROR;
const SfxItemSet* pArgs = rReq.GetArgs();
const SfxPoolItem* pItem;
if ( pArgs &&
pArgs->GetItemState( SID_INSERT_GRAPHIC, true, &pItem ) == SfxItemState::SET )
{ {
Graphic aGraphic; aFileName = static_cast<const SfxStringItem*>(pItem)->GetValue();
int nError = aDlg.GetGraphic(aGraphic);
if( nError == GRFILTER_OK ) if ( pArgs->GetItemState( FN_PARAM_FILTER, true, &pItem ) == SfxItemState::SET )
aFilterName = static_cast<const SfxStringItem*>(pItem)->GetValue();
if ( pArgs->GetItemState( FN_PARAM_1, true, &pItem ) == SfxItemState::SET )
bAsLink = static_cast<const SfxBoolItem*>(pItem)->GetValue();
nError = GraphicFilter::LoadGraphic( aFileName, aFilterName, aGraphic, &GraphicFilter::GetGraphicFilter() );
}
else
{
SvxOpenGraphicDialog aDlg(SdResId(STR_INSERTGRAPHIC));
if( aDlg.Execute() == GRFILTER_OK )
{ {
if( mpViewShell && mpViewShell->ISA(DrawViewShell)) nError = aDlg.GetGraphic(aGraphic);
{ bAsLink = aDlg.IsAsLink();
sal_Int8 nAction = DND_ACTION_COPY; aFileName = aDlg.GetPath();
SdrObject* pPickObj; aFilterName = aDlg.GetCurrentFilter();
bool bSelectionReplaced(false); }
}
if( ( pPickObj = mpView->GetSelectedSingleObject( mpView->GetPage() ) ) || ( pPickObj = mpView->GetEmptyPresentationObject( PRESOBJ_GRAPHIC ) ) ) if( nError == GRFILTER_OK )
{ {
nAction = DND_ACTION_LINK; if( mpViewShell && dynamic_cast< DrawViewShell *>( mpViewShell ) != nullptr)
} {
else if(1 == mpView->GetMarkedObjectCount()) sal_Int8 nAction = DND_ACTION_COPY;
{ SdrObject* pPickObj;
pPickObj = mpView->GetMarkedObjectByIndex(0); bool bSelectionReplaced(false);
nAction = DND_ACTION_MOVE;
bSelectionReplaced = true;
}
Point aPos; if( ( pPickObj = mpView->GetSelectedSingleObject( mpView->GetPage() ) ) || ( pPickObj = mpView->GetEmptyPresentationObject( PRESOBJ_GRAPHIC ) ) )
Rectangle aRect(aPos, mpWindow->GetOutputSizePixel() ); {
aPos = aRect.Center(); nAction = DND_ACTION_LINK;
aPos = mpWindow->PixelToLogic(aPos); }
SdrGrafObj* pGrafObj = mpView->InsertGraphic(aGraphic, nAction, aPos, pPickObj, NULL); else if(1 == mpView->GetMarkedObjectCount())
{
pPickObj = mpView->GetMarkedObjectByIndex(0);
nAction = DND_ACTION_MOVE;
bSelectionReplaced = true;
}
if(pGrafObj && aDlg.IsAsLink()) Point aPos;
{ Rectangle aRect(aPos, mpWindow->GetOutputSizePixel() );
// really store as link only? aPos = aRect.Center();
if( SvtMiscOptions().ShowLinkWarningDialog() ) aPos = mpWindow->PixelToLogic(aPos);
{ SdrGrafObj* pGrafObj = mpView->InsertGraphic(aGraphic, nAction, aPos, pPickObj, nullptr);
ScopedVclPtrInstance< SvxLinkWarningDialog > aWarnDlg(mpWindow,aDlg.GetPath());
if( aWarnDlg->Execute() != RET_OK )
return; // don't store as link
}
// store as link if(pGrafObj && bAsLink )
OUString aFltName(aDlg.GetCurrentFilter()); {
OUString aPath(aDlg.GetPath()); // really store as link only?
OUString aReferer; if( SvtMiscOptions().ShowLinkWarningDialog() )
if (mpDocSh->HasName()) { {
aReferer = mpDocSh->GetMedium()->GetName(); ScopedVclPtrInstance< SvxLinkWarningDialog > aWarnDlg(mpWindow, aFileName);
} if( aWarnDlg->Execute() != RET_OK )
pGrafObj->SetGraphicLink(aPath, aReferer, aFltName); return; // don't store as link
} }
if(bSelectionReplaced && pGrafObj) // store as link
{ OUString aReferer;
mpView->MarkObj(pGrafObj, mpView->GetSdrPageView()); if (mpDocSh->HasName()) {
aReferer = mpDocSh->GetMedium()->GetName();
} }
pGrafObj->SetGraphicLink(aFileName, aReferer, aFilterName);
}
if(bSelectionReplaced && pGrafObj)
{
mpView->MarkObj(pGrafObj, mpView->GetSdrPageView());
} }
} }
else }
{ else
SdGRFFilter::HandleGraphicFilterError( (sal_uInt16)nError, GraphicFilter::GetGraphicFilter().GetLastError().nStreamError ); {
} SdGRFFilter::HandleGraphicFilterError( (sal_uInt16)nError, GraphicFilter::GetGraphicFilter().GetLastError().nStreamError );
} }
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment