/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ // MARKER(update_precomp.py): autogen include statement, do not remove #include "precompiled_sd.hxx" #include "fuinsert.hxx" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #ifndef _UNOTOOLS_UCBSTREAMHELPER_HXX #include #endif #include #include #include #include #include #include #include #include #include #ifndef _EDITENG_HXX //autogen #include #endif #include #include #include #ifndef _MSGBOX_HXX //autogen #include #endif #include #include #include #include "app.hrc" #include "misc.hxx" #include "sdresid.hxx" #include "View.hxx" #include "app.hxx" #include "Window.hxx" #include "drawview.hxx" #include "DrawViewShell.hxx" #include "DrawDocShell.hxx" #include "GraphicDocShell.hxx" #include "strings.hrc" #include "drawdoc.hxx" #include "sdgrffilter.hxx" #include "sdxfer.hxx" #include #include "undo/undoobjects.hxx" #include "glob.hrc" using namespace com::sun::star; namespace sd { TYPEINIT1( FuInsertGraphic, FuPoor ); TYPEINIT1( FuInsertClipboard, FuPoor ); TYPEINIT1( FuInsertOLE, FuPoor ); TYPEINIT1( FuInsertAVMedia, FuPoor ); /************************************************************************* |* |* FuInsertGraphic::Konstruktor |* \************************************************************************/ FuInsertGraphic::FuInsertGraphic ( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq) : FuPoor(pViewSh, pWin, pView, pDoc, rReq) { } FunctionReference FuInsertGraphic::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) { FunctionReference xFunc( new FuInsertGraphic( pViewSh, pWin, pView, pDoc, rReq ) ); xFunc->DoExecute(rReq); return xFunc; } #ifdef _MSC_VER #pragma optimize ( "", off ) #endif void FuInsertGraphic::DoExecute( SfxRequest& ) { SvxOpenGraphicDialog aDlg(SdResId(STR_INSERTGRAPHIC)); if( aDlg.Execute() == GRFILTER_OK ) { Graphic aGraphic; int nError = aDlg.GetGraphic(aGraphic); if( nError == GRFILTER_OK ) { if( mpViewShell && mpViewShell->ISA(DrawViewShell)) { sal_Int8 nAction = DND_ACTION_COPY; SdrObject* pPickObj = mpView->GetEmptyPresentationObject( PRESOBJ_GRAPHIC ); bool bSelectionReplaced(false); if( pPickObj ) { nAction = DND_ACTION_LINK; } else if(1 == mpView->GetMarkedObjectCount()) { pPickObj = mpView->GetMarkedObjectByIndex(0); nAction = DND_ACTION_MOVE; bSelectionReplaced = true; } Point aPos; Rectangle aRect(aPos, mpWindow->GetOutputSizePixel() ); aPos = aRect.Center(); aPos = mpWindow->PixelToLogic(aPos); SdrGrafObj* pGrafObj = mpView->InsertGraphic(aGraphic, nAction, aPos, pPickObj, NULL); if(pGrafObj && aDlg.IsAsLink()) { // store link only? String aFltName(aDlg.GetCurrentFilter()); String aPath(aDlg.GetPath()); pGrafObj->SetGraphicLink(aPath, aFltName); } if(bSelectionReplaced && pGrafObj) { mpView->MarkObj(pGrafObj, mpView->GetSdrPageView()); } } } else { SdGRFFilter::HandleGraphicFilterError( (sal_uInt16)nError, GraphicFilter::GetGraphicFilter()->GetLastError().nStreamError ); } } } #ifdef _MSC_VER #pragma optimize ( "", on ) #endif /************************************************************************* |* |* FuInsertClipboard::Konstruktor |* \************************************************************************/ FuInsertClipboard::FuInsertClipboard ( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq) : FuPoor(pViewSh, pWin, pView, pDoc, rReq) { } FunctionReference FuInsertClipboard::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) { FunctionReference xFunc( new FuInsertClipboard( pViewSh, pWin, pView, pDoc, rReq ) ); xFunc->DoExecute(rReq); return xFunc; } void FuInsertClipboard::DoExecute( SfxRequest& ) { TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( mpWindow ) ); sal_uLong nFormatId; SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); SfxAbstractPasteDialog* pDlg = pFact->CreatePasteDialog( mpViewShell->GetActiveWindow() ); if ( pDlg ) { const String aEmptyString; ::com::sun::star::datatransfer::DataFlavor aFlavor; pDlg->Insert( SOT_FORMATSTR_ID_EMBED_SOURCE, aEmptyString ); pDlg->Insert( SOT_FORMATSTR_ID_LINK_SOURCE, aEmptyString ); pDlg->Insert( SOT_FORMATSTR_ID_DRAWING, aEmptyString ); pDlg->Insert( SOT_FORMATSTR_ID_SVXB, aEmptyString ); pDlg->Insert( FORMAT_GDIMETAFILE, aEmptyString ); pDlg->Insert( FORMAT_BITMAP, aEmptyString ); pDlg->Insert( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aEmptyString ); pDlg->Insert( FORMAT_STRING, aEmptyString ); pDlg->Insert( SOT_FORMATSTR_ID_HTML, aEmptyString ); pDlg->Insert( FORMAT_RTF, aEmptyString ); pDlg->Insert( SOT_FORMATSTR_ID_EDITENGINE, aEmptyString ); //TODO/MBA: testing nFormatId = pDlg->GetFormat( aDataHelper ); if( nFormatId && aDataHelper.GetTransferable().is() ) { sal_Int8 nAction = DND_ACTION_COPY; if( !mpView->InsertData( aDataHelper, mpWindow->PixelToLogic( Rectangle( Point(), mpWindow->GetOutputSizePixel() ).Center() ), nAction, sal_False, nFormatId ) && ( mpViewShell && mpViewShell->ISA( DrawViewShell ) ) ) { DrawViewShell* pDrViewSh = static_cast(mpViewShell); INetBookmark aINetBookmark( aEmptyStr, aEmptyStr ); if( ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) && aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) ) || ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) && aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, aINetBookmark ) ) || ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) && aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, aINetBookmark ) ) ) { pDrViewSh->InsertURLField( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), aEmptyStr, NULL ); } } } delete pDlg; } } /************************************************************************* |* |* FuInsertOLE::Konstruktor |* \************************************************************************/ FuInsertOLE::FuInsertOLE ( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq) : FuPoor(pViewSh, pWin, pView, pDoc, rReq) { } FunctionReference FuInsertOLE::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) { FunctionReference xFunc( new FuInsertOLE( pViewSh, pWin, pView, pDoc, rReq ) ); xFunc->DoExecute(rReq); return xFunc; } void FuInsertOLE::DoExecute( SfxRequest& rReq ) { if ( nSlotId == SID_ATTR_TABLE || nSlotId == SID_INSERT_DIAGRAM || nSlotId == SID_INSERT_MATH ) { PresObjKind ePresObjKind = (nSlotId == SID_INSERT_DIAGRAM) ? PRESOBJ_CHART : PRESOBJ_OBJECT; SdrObject* pPickObj = mpView->GetEmptyPresentationObject( ePresObjKind ); /********************************************************************** * Diagramm oder StarCalc-Tabelle einfuegen **********************************************************************/ ::rtl::OUString aObjName; SvGlobalName aName; if (nSlotId == SID_INSERT_DIAGRAM) aName = SvGlobalName( SO3_SCH_CLASSID); else if (nSlotId == SID_ATTR_TABLE) aName = SvGlobalName(SO3_SC_CLASSID); else if (nSlotId == SID_INSERT_MATH) aName = SvGlobalName(SO3_SM_CLASSID); uno::Reference < embed::XEmbeddedObject > xObj = mpViewShell->GetViewFrame()->GetObjectShell()-> GetEmbeddedObjectContainer().CreateEmbeddedObject( aName.GetByteSequence(), aObjName ); if ( xObj.is() ) { sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; MapUnit aUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) ); Rectangle aRect; if( pPickObj ) { aRect = pPickObj->GetLogicRect(); awt::Size aSz; aSz.Width = aRect.GetWidth(); aSz.Height = aRect.GetHeight(); xObj->setVisualAreaSize( nAspect, aSz ); } else { awt::Size aSz; try { aSz = xObj->getVisualAreaSize( nAspect ); } catch ( embed::NoVisualAreaSizeException& ) { // the default size will be set later } Size aSize( aSz.Width, aSz.Height ); if (aSize.Height() == 0 || aSize.Width() == 0) { // Rechteck mit ausgewogenem Kantenverhaeltnis aSize.Width() = 14100; aSize.Height() = 10000; Size aTmp = OutputDevice::LogicToLogic( aSize, MAP_100TH_MM, aUnit ); aSz.Width = aTmp.Width(); aSz.Height = aTmp.Height(); xObj->setVisualAreaSize( nAspect, aSz ); } else { aSize = OutputDevice::LogicToLogic(aSize, aUnit, MAP_100TH_MM); } Point aPos; Rectangle aWinRect(aPos, mpWindow->GetOutputSizePixel() ); aPos = aWinRect.Center(); aPos = mpWindow->PixelToLogic(aPos); aPos.X() -= aSize.Width() / 2; aPos.Y() -= aSize.Height() / 2; aRect = Rectangle(aPos, aSize); } SdrOle2Obj* pOleObj = new SdrOle2Obj( svt::EmbeddedObjectRef( xObj, nAspect ), aObjName, aRect ); SdrPageView* pPV = mpView->GetSdrPageView(); // if we have a pick obj we need to make this new ole a pres obj replacing the current pick obj if( pPickObj ) { SdPage* pPage = static_cast< SdPage* >(pPickObj->GetPage()); if(pPage && pPage->IsPresObj(pPickObj)) { pPage->InsertPresObj( pOleObj, ePresObjKind ); pOleObj->SetUserCall(pPickObj->GetUserCall()); } // #123468# we need to end text edit before replacing the object. There cannot yet // being text typed (else it would not be an EmptyPresObj anymore), but it may be // in text edit mode if(mpView->IsTextEdit()) { mpView->SdrEndTextEdit(); } } bool bRet = true; if( pPickObj ) mpView->ReplaceObjectAtView(pPickObj, *pPV, pOleObj, sal_True ); else bRet = mpView->InsertObjectAtView(pOleObj, *pPV, SDRINSERT_SETDEFLAYER); if( bRet ) { if (nSlotId == SID_INSERT_DIAGRAM) { pOleObj->SetProgName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarChart" ) ) ); } else if (nSlotId == SID_ATTR_TABLE) { pOleObj->SetProgName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarCalc" ) ) ); } else if (nSlotId == SID_INSERT_MATH) { pOleObj->SetProgName( UniString::CreateFromAscii( RTL_CONSTASCII_STRINGPARAM( "StarMath" ) ) ); } //HMHmpView->HideMarkHdl(); pOleObj->SetLogicRect(aRect); Size aTmp( OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aUnit ) ); awt::Size aVisualSize; aVisualSize.Width = aTmp.Width(); aVisualSize.Height = aTmp.Height(); xObj->setVisualAreaSize( nAspect, aVisualSize ); mpViewShell->ActivateObject(pOleObj, SVVERB_SHOW); if (nSlotId == SID_INSERT_DIAGRAM) { // note, that this call modified the chart model which // results in a change notification. So call this after // everything else is finished. ChartHelper::AdaptDefaultsForChart( xObj ); } } } else { ErrorHandler::HandleError(* new StringErrorInfo(ERRCODE_SFX_OLEGENERAL, aEmptyStr ) ); } } else { /********************************************************************** * Objekt einfuegen **********************************************************************/ sal_Int64 nAspect = embed::Aspects::MSOLE_CONTENT; sal_Bool bCreateNew = sal_False; uno::Reference < embed::XEmbeddedObject > xObj; uno::Reference < embed::XStorage > xStorage = comphelper::OStorageHelper::GetTemporaryStorage(); SvObjectServerList aServerLst; ::rtl::OUString aName; ::rtl::OUString aIconMediaType; uno::Reference< io::XInputStream > xIconMetaFile; SFX_REQUEST_ARG( rReq, pNameItem, SfxGlobalNameItem, SID_INSERT_OBJECT, sal_False ); if ( nSlotId == SID_INSERT_OBJECT && pNameItem ) { SvGlobalName aClassName = pNameItem->GetValue(); xObj = mpViewShell->GetViewFrame()->GetObjectShell()-> GetEmbeddedObjectContainer().CreateEmbeddedObject( aClassName.GetByteSequence(), aName ); } else { switch ( nSlotId ) { case SID_INSERT_OBJECT : { aServerLst.FillInsertObjects(); if (mpDoc->GetDocumentType() == DOCUMENT_TYPE_DRAW) { aServerLst.Remove( GraphicDocShell::Factory().GetClassId() ); } else { aServerLst.Remove( DrawDocShell::Factory().GetClassId() ); } // intentionally no break! } case SID_INSERT_PLUGIN : case SID_INSERT_FLOATINGFRAME : { SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create(); SfxAbstractInsertObjectDialog* pDlg = pFact->CreateInsertObjectDialog( mpViewShell->GetActiveWindow(), SD_MOD()->GetSlotPool()->GetSlot(nSlotId)->GetCommandString(), xStorage, &aServerLst ); if ( pDlg ) { pDlg->Execute(); bCreateNew = pDlg->IsCreateNew(); xObj = pDlg->GetObject(); xIconMetaFile = pDlg->GetIconIfIconified( &aIconMediaType ); if ( xIconMetaFile.is() ) nAspect = embed::Aspects::MSOLE_ICON; if ( xObj.is() ) mpViewShell->GetObjectShell()->GetEmbeddedObjectContainer().InsertEmbeddedObject( xObj, aName ); DELETEZ( pDlg ); } break; } case SID_INSERT_SOUND : case SID_INSERT_VIDEO : { // create special filedialog for plugins SvxPluginFileDlg aPluginFileDialog (mpWindow, nSlotId); if( ERRCODE_NONE == aPluginFileDialog.Execute () ) { // get URL String aStrURL(aPluginFileDialog.GetPath()); INetURLObject aURL( aStrURL, INET_PROT_FILE ); if( aURL.GetProtocol() != INET_PROT_NOT_VALID ) { // create a plugin object xObj = mpViewShell->GetObjectShell()->GetEmbeddedObjectContainer().CreateEmbeddedObject( SvGlobalName( SO3_PLUGIN_CLASSID ).GetByteSequence(), aName ); } if ( xObj.is() && svt::EmbeddedObjectRef::TryRunningState( xObj ) ) { // set properties from dialog uno::Reference < embed::XComponentSupplier > xSup( xObj, uno::UNO_QUERY ); if ( xSup.is() ) { uno::Reference < beans::XPropertySet > xSet( xSup->getComponent(), uno::UNO_QUERY ); if ( xSet.is() ) { xSet->setPropertyValue( ::rtl::OUString::createFromAscii("PluginURL"), uno::makeAny( ::rtl::OUString( aURL.GetMainURL( INetURLObject::NO_DECODE ) ) ) ); } } } else { // PlugIn konnte nicht erzeugt werden String aStrErr( SdResId( STR_ERROR_OBJNOCREATE_PLUGIN ) ); String aMask; aMask += sal_Unicode('%'); aStrErr.SearchAndReplace( aMask, aStrURL ); ErrorBox( mpWindow, WB_3DLOOK | WB_OK, aStrErr ).Execute(); } } } } } try { if (xObj.is()) { //TODO/LATER: needs status for RESIZEONPRINTERCHANGE //if( SVOBJ_MISCSTATUS_RESIZEONPRINTERCHANGE & xObj->getStatus( nAspect ) ) // aIPObj->OnDocumentPrinterChanged( mpDocSh->GetPrinter(sal_False) ); sal_Bool bInsertNewObject = sal_True; Size aSize; MapUnit aMapUnit = MAP_100TH_MM; if ( nAspect != embed::Aspects::MSOLE_ICON ) { awt::Size aSz; try { aSz = xObj->getVisualAreaSize( nAspect ); } catch( embed::NoVisualAreaSizeException& ) { // the default size will be set later } aSize =Size( aSz.Width, aSz.Height ); aMapUnit = VCLUnoHelper::UnoEmbed2VCLMapUnit( xObj->getMapUnit( nAspect ) ); if (aSize.Height() == 0 || aSize.Width() == 0) { // Rechteck mit ausgewogenem Kantenverhaeltnis aSize.Width() = 14100; aSize.Height() = 10000; Size aTmp = OutputDevice::LogicToLogic( aSize, MAP_100TH_MM, aMapUnit ); aSz.Width = aTmp.Width(); aSz.Height = aTmp.Height(); xObj->setVisualAreaSize( nAspect, aSz ); } else { aSize = OutputDevice::LogicToLogic(aSize, aMapUnit, MAP_100TH_MM); } } if ( mpView->AreObjectsMarked() ) { /********************************************************** * Ist ein leeres OLE-Objekt vorhanden? **********************************************************/ const SdrMarkList& rMarkList = mpView->GetMarkedObjectList(); if (rMarkList.GetMarkCount() == 1) { SdrMark* pMark = rMarkList.GetMark(0); SdrObject* pObj = pMark->GetMarkedSdrObj(); if (pObj->GetObjInventor() == SdrInventor && pObj->GetObjIdentifier() == OBJ_OLE2) { if ( !( (SdrOle2Obj*) pObj)->GetObjRef().is() ) { /************************************************** * Das leere OLE-Objekt bekommt ein neues IPObj **************************************************/ bInsertNewObject = sal_False; pObj->SetEmptyPresObj(sal_False); ( (SdrOle2Obj*) pObj)->SetOutlinerParaObject(NULL); ( (SdrOle2Obj*) pObj)->SetObjRef(xObj); ( (SdrOle2Obj*) pObj)->SetPersistName(aName); ( (SdrOle2Obj*) pObj)->SetName(aName); ( (SdrOle2Obj*) pObj)->SetAspect(nAspect); Rectangle aRect = ( (SdrOle2Obj*) pObj)->GetLogicRect(); //HMHmpView->HideMarkHdl(); if ( nAspect == embed::Aspects::MSOLE_ICON ) { if( xIconMetaFile.is() ) ( (SdrOle2Obj*) pObj)->SetGraphicToObj( xIconMetaFile, aIconMediaType ); } else { Size aTmp = OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aMapUnit ); awt::Size aSz( aTmp.Width(), aTmp.Height() ); xObj->setVisualAreaSize( nAspect, aSz ); } } } } } if (bInsertNewObject) { /************************************************************** * Ein neues OLE-Objekt wird erzeugt **************************************************************/ SdrPageView* pPV = mpView->GetSdrPageView(); Size aPageSize = pPV->GetPage()->GetSize(); // get the size from the iconified object ::svt::EmbeddedObjectRef aObjRef( xObj, nAspect ); if ( nAspect == embed::Aspects::MSOLE_ICON ) { aObjRef.SetGraphicStream( xIconMetaFile, aIconMediaType ); MapMode aMapMode( MAP_100TH_MM ); aSize = aObjRef.GetSize( &aMapMode ); } Point aPnt ((aPageSize.Width() - aSize.Width()) / 2, (aPageSize.Height() - aSize.Height()) / 2); Rectangle aRect (aPnt, aSize); SdrOle2Obj* pObj = new SdrOle2Obj( aObjRef, aName, aRect); if( mpView->InsertObjectAtView(pObj, *pPV, SDRINSERT_SETDEFLAYER) ) { // #73279# Math objects change their object size during InsertObject. // New size must be set in SdrObject, or a wrong scale will be set at // ActivateObject. if ( nAspect != embed::Aspects::MSOLE_ICON ) { try { awt::Size aSz = xObj->getVisualAreaSize( nAspect ); Size aNewSize = Window::LogicToLogic( Size( aSz.Width, aSz.Height ), MapMode( aMapUnit ), MapMode( MAP_100TH_MM ) ); if ( aNewSize != aSize ) { aRect.SetSize( aNewSize ); pObj->SetLogicRect( aRect ); } } catch( embed::NoVisualAreaSizeException& ) {} } if (bCreateNew) { //HMHmpView->HideMarkHdl(); pObj->SetLogicRect(aRect); if ( nAspect != embed::Aspects::MSOLE_ICON ) { Size aTmp = OutputDevice::LogicToLogic( aRect.GetSize(), MAP_100TH_MM, aMapUnit ); awt::Size aSz( aTmp.Width(), aTmp.Height() ); xObj->setVisualAreaSize( nAspect, aSz ); } mpViewShell->ActivateObject(pObj, SVVERB_SHOW); } Size aVisSizePixel = mpWindow->GetOutputSizePixel(); Rectangle aVisAreaWin = mpWindow->PixelToLogic( Rectangle( Point(0,0), aVisSizePixel) ); mpViewShell->VisAreaChanged(aVisAreaWin); mpDocSh->SetVisArea(aVisAreaWin); } } } } catch (uno::Exception&) { // For some reason the object can not be inserted. For example // because it is password protected and is not properly unlocked. } } } /************************************************************************* |* |* FuInsertAVMedia::Konstruktor |* \************************************************************************/ FuInsertAVMedia::FuInsertAVMedia( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq) : FuPoor(pViewSh, pWin, pView, pDoc, rReq) { } FunctionReference FuInsertAVMedia::Create( ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView, SdDrawDocument* pDoc, SfxRequest& rReq ) { FunctionReference xFunc( new FuInsertAVMedia( pViewSh, pWin, pView, pDoc, rReq ) ); xFunc->DoExecute(rReq); return xFunc; } void FuInsertAVMedia::DoExecute( SfxRequest& rReq ) { ::rtl::OUString aURL; const SfxItemSet* pReqArgs = rReq.GetArgs(); bool bAPI = false; if( pReqArgs ) { const SfxStringItem* pStringItem = PTR_CAST( SfxStringItem, &pReqArgs->Get( rReq.GetSlot() ) ); if( pStringItem ) { aURL = pStringItem->GetValue(); bAPI = aURL.getLength(); } } if( bAPI || ::avmedia::MediaWindow::executeMediaURLDialog( mpWindow, aURL ) ) { Size aPrefSize; if( mpWindow ) mpWindow->EnterWait(); if( !::avmedia::MediaWindow::isMediaURL( aURL, true, &aPrefSize ) ) { if( mpWindow ) mpWindow->LeaveWait(); if( !bAPI ) ::avmedia::MediaWindow::executeFormatErrorBox( mpWindow ); } else { Point aPos; Size aSize; sal_Int8 nAction = DND_ACTION_COPY; if( aPrefSize.Width() && aPrefSize.Height() ) { if( mpWindow ) aSize = mpWindow->PixelToLogic( aPrefSize, MAP_100TH_MM ); else aSize = Application::GetDefaultDevice()->PixelToLogic( aPrefSize, MAP_100TH_MM ); } else aSize = Size( 5000, 5000 ); if( mpWindow ) { aPos = mpWindow->PixelToLogic( Rectangle( aPos, mpWindow->GetOutputSizePixel() ).Center() ); aPos.X() -= aSize.Width() >> 1; aPos.Y() -= aSize.Height() >> 1; } mpView->InsertMediaURL( aURL, nAction, aPos, aSize ) ; if( mpWindow ) mpWindow->LeaveWait(); } } } } // end of namespace sd