diff options
Diffstat (limited to 'sd/source/ui/func/fuinsert.cxx')
-rw-r--r-- | sd/source/ui/func/fuinsert.cxx | 781 |
1 files changed, 0 insertions, 781 deletions
diff --git a/sd/source/ui/func/fuinsert.cxx b/sd/source/ui/func/fuinsert.cxx deleted file mode 100644 index 3d958b50d..000000000 --- a/sd/source/ui/func/fuinsert.cxx +++ /dev/null @@ -1,781 +0,0 @@ -/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ -/************************************************************************* - * - * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. - * - * Copyright 2000, 2010 Oracle and/or its affiliates. - * - * OpenOffice.org - a multi-platform office productivity suite - * - * This file is part of OpenOffice.org. - * - * OpenOffice.org is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License version 3 - * only, as published by the Free Software Foundation. - * - * OpenOffice.org is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License version 3 for more details - * (a copy is included in the LICENSE file that accompanied this code). - * - * You should have received a copy of the GNU Lesser General Public License - * version 3 along with OpenOffice.org. If not, see - * <http://www.openoffice.org/license.html> - * for a copy of the LGPLv3 License. - * - ************************************************************************/ - -// MARKER(update_precomp.py): autogen include statement, do not remove -#include "precompiled_sd.hxx" - -#include "fuinsert.hxx" - -#include <comphelper/storagehelper.hxx> -#include <comphelper/processfactory.hxx> -#include <toolkit/helper/vclunohelper.hxx> -#include <svx/svxdlg.hxx> -#include <com/sun/star/embed/NoVisualAreaSizeException.hpp> -#include <com/sun/star/embed/Aspects.hpp> -#include <com/sun/star/beans/XPropertySet.hpp> -#include <com/sun/star/chart2/XChartDocument.hpp> -#include <com/sun/star/drawing/FillStyle.hpp> - -#include <tools/urlobj.hxx> -#include <svl/urihelper.hxx> -#include <sfx2/msgpool.hxx> -#include <svtools/sores.hxx> -#include <svtools/insdlg.hxx> -#include <sfx2/request.hxx> -#include <svl/globalnameitem.hxx> -#include <unotools/pathoptions.hxx> -#include <svtools/miscopt.hxx> -#include <svx/pfiledlg.hxx> -#include <svx/dialogs.hrc> -#include <sfx2/linkmgr.hxx> -#include <svx/linkwarn.hxx> -#include <svx/svdetc.hxx> -#include <avmedia/mediawindow.hxx> -#include <unotools/ucbstreamhelper.hxx> -#include <sfx2/printer.hxx> -#include <sot/clsids.hxx> -#include <svtools/sfxecode.hxx> -#include <svtools/transfer.hxx> -#include <svl/urlbmk.hxx> -#include <svx/svdobj.hxx> -#include <svx/svdograf.hxx> -#include <svx/svdoole2.hxx> -#include <svx/svdomedia.hxx> -#include <editeng/editeng.hxx> -#include <sot/storage.hxx> -#include <sot/formats.hxx> -#include <svx/svdpagv.hxx> -#include <vcl/msgbox.hxx> -#include <sfx2/opengrf.hxx> - -#include <sfx2/viewfrm.hxx> - -#include "app.hrc" -#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 <vcl/svapp.hxx> -#include "undo/undoobjects.hxx" - -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 ); - if( pPickObj ) - nAction = DND_ACTION_LINK; - - 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()) - { - // really store as link only? - if( SvtMiscOptions().ShowLinkWarningDialog() ) - { - SvxLinkWarningDialog aWarnDlg(mpWindow,aDlg.GetPath()); - if( aWarnDlg.Execute() != RET_OK ) - return; // don't store as link - } - - // store as link - String aFltName(aDlg.GetCurrentFilter()); - String aPath(aDlg.GetPath()); - pGrafObj->SetGraphicLink(aPath, aFltName); - } - } - } - 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<DrawViewShell*>(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()); - } - } - - 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" ) ) ); - } - - 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. - mpViewShell->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(RTL_CONSTASCII_USTRINGPARAM("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(); - - 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) ) - { - // 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) - { - 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 - -/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |