summaryrefslogtreecommitdiff
path: root/sd/source/ui/view/sdview2.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'sd/source/ui/view/sdview2.cxx')
-rw-r--r--sd/source/ui/view/sdview2.cxx1038
1 files changed, 0 insertions, 1038 deletions
diff --git a/sd/source/ui/view/sdview2.cxx b/sd/source/ui/view/sdview2.cxx
deleted file mode 100644
index 562c14349..000000000
--- a/sd/source/ui/view/sdview2.cxx
+++ /dev/null
@@ -1,1038 +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 "View.hxx"
-
-#include <vector>
-#include <com/sun/star/embed/XEmbedPersist.hpp>
-#include <tools/ref.hxx>
-#include <tools/urlobj.hxx>
-#include <vcl/msgbox.hxx>
-#include <svx/svdetc.hxx>
-#include <svx/svdoole2.hxx>
-#include <svx/svdograf.hxx>
-#include <vcl/graph.hxx>
-#include <svx/xexch.hxx>
-#include <svx/svxdlg.hxx>
-#include <svx/dialogs.hrc>
-#include <sfx2/docfile.hxx>
-#include <sfx2/childwin.hxx>
-#include <svx/svdundo.hxx>
-#include <svx/svdpagv.hxx>
-#include <svl/urlbmk.hxx>
-#include <svl/urlbmk.hxx>
-#include <editeng/outliner.hxx>
-#include <svx/xflclit.hxx>
-#include <svx/dbexch.hrc>
-#include <sot/formats.hxx>
-#include <editeng/editeng.hxx>
-#include <svx/svditer.hxx>
-#include <svx/obj3d.hxx>
-#include <svx/scene3d.hxx>
-
-#include <sfx2/objsh.hxx>
-#include <svtools/embedtransfer.hxx>
-
-#include "navigatr.hxx"
-#include "anminfo.hxx"
-#include "strings.hrc"
-#include "glob.hrc"
-#include "sdxfer.hxx"
-#include "sdresid.hxx"
-#include "sdmod.hxx"
-#include "DrawViewShell.hxx"
-#include "DrawDocShell.hxx"
-#include "fudraw.hxx"
-#include "drawdoc.hxx"
-#include "Window.hxx"
-#include "sdpage.hxx"
-#include "unoaprms.hxx"
-#include "drawview.hxx"
-#include "helpids.h"
-#include <vcl/svapp.hxx>
-
-#include "slideshow.hxx"
-
-namespace sd {
-
-#ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED
-#define SO2_DECL_SVINPLACEOBJECT_DEFINED
-SO2_DECL_REF(SvInPlaceObject)
-#endif
-#ifndef SO2_DECL_SVSTORAGE_DEFINED
-#define SO2_DECL_SVSTORAGE_DEFINED
-SO2_DECL_REF(SvStorage)
-#endif
-
-using namespace ::com::sun::star;
-
-// ------------------------
-// - SdNavigatorDropEvent -
-// ------------------------
-
-struct SdNavigatorDropEvent : public ExecuteDropEvent
-{
- DropTargetHelper& mrTargetHelper;
- ::sd::Window* mpTargetWindow;
- sal_uInt16 mnPage;
- sal_uInt16 mnLayer;
-
- SdNavigatorDropEvent (
- const ExecuteDropEvent& rEvt,
- DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow,
- sal_uInt16 nPage,
- sal_uInt16 nLayer )
- : ExecuteDropEvent( rEvt ),
- mrTargetHelper( rTargetHelper ),
- mpTargetWindow( pTargetWindow ),
- mnPage( nPage ),
- mnLayer( nLayer )
- {}
-};
-
-// -----------------------------------------------------------------------------
-
-::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > View::CreateClipboardDataObject( View*, ::Window& )
-{
- // since SdTransferable::CopyToClipboard is called, this
- // dynamically created object ist destroyed automatically
- SdTransferable* pTransferable = new SdTransferable( mpDoc, NULL, sal_False );
- ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRet( pTransferable );
-
- SD_MOD()->pTransferClip = pTransferable;
-
- mpDoc->CreatingDataObj( pTransferable );
- pTransferable->SetWorkDocument( (SdDrawDocument*) GetAllMarkedModel() );
- mpDoc->CreatingDataObj( NULL );
-
- const Rectangle aMarkRect( GetAllMarkedRect() );
- TransferableObjectDescriptor aObjDesc;
- String aDisplayName;
- SdrOle2Obj* pSdrOleObj = NULL;
- SdrPageView* pPgView = GetSdrPageView();
- SdPage* pOldPage = pPgView ? ( (SdPage*) pPgView->GetPage() ) : NULL;
- SdPage* pNewPage = (SdPage*) pTransferable->GetWorkDocument()->GetPage( 0 );
-
- if( pOldPage )
- {
- pNewPage->SetSize( pOldPage->GetSize() );
- pNewPage->SetLayoutName( pOldPage->GetLayoutName() );
- }
-
- if( GetMarkedObjectCount() == 1 )
- {
- SdrObject* pObj = GetMarkedObjectByIndex(0);
-
- if( pObj && pObj->ISA(SdrOle2Obj) && ((SdrOle2Obj*) pObj)->GetObjRef().is() )
- {
- // If object has no persistence it must be copied as part of the document
- try
- {
- uno::Reference< embed::XEmbedPersist > xPersObj( ((SdrOle2Obj*)pObj)->GetObjRef(), uno::UNO_QUERY );
- if ( xPersObj.is() && xPersObj->hasEntry() )
- pSdrOleObj = (SdrOle2Obj*) pObj;
- }
- catch( uno::Exception& )
- {}
- }
- }
-
- if( pSdrOleObj )
- SvEmbedTransferHelper::FillTransferableObjectDescriptor( aObjDesc, pSdrOleObj->GetObjRef(), pSdrOleObj->GetGraphic(), pSdrOleObj->GetAspect() );
- else
- pTransferable->GetWorkDocument()->GetDocSh()->FillTransferableObjectDescriptor( aObjDesc );
-
- if( mpDocSh )
- aObjDesc.maDisplayName = mpDocSh->GetMedium()->GetURLObject().GetURLNoPass();
-
- aObjDesc.maSize = aMarkRect.GetSize();
-
- pTransferable->SetStartPos( aMarkRect.TopLeft() );
- pTransferable->SetObjectDescriptor( aObjDesc );
- pTransferable->CopyToClipboard( mpViewSh->GetActiveWindow() );
-
- return xRet;
-}
-
-// -----------------------------------------------------------------------------
-
-::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > View::CreateDragDataObject( View* pWorkView, ::Window& rWindow, const Point& rDragPos )
-{
- SdTransferable* pTransferable = new SdTransferable( mpDoc, pWorkView, sal_False );
- ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRet( pTransferable );
-
- SD_MOD()->pTransferDrag = pTransferable;
-
- TransferableObjectDescriptor aObjDesc;
- String aDisplayName;
- SdrOle2Obj* pSdrOleObj = NULL;
-
- if( GetMarkedObjectCount() == 1 )
- {
- SdrObject* pObj = GetMarkedObjectByIndex( 0 );
-
- if( pObj && pObj->ISA( SdrOle2Obj ) && ( (SdrOle2Obj*) pObj )->GetObjRef().is() )
- {
- // If object has no persistence it must be copied as part of the document
- try
- {
- uno::Reference< embed::XEmbedPersist > xPersObj( ((SdrOle2Obj*)pObj)->GetObjRef(), uno::UNO_QUERY );
- if ( xPersObj.is() && xPersObj->hasEntry() )
- pSdrOleObj = (SdrOle2Obj*) pObj;
- }
- catch( uno::Exception& )
- {}
- }
- }
-
- if( mpDocSh )
- aDisplayName = mpDocSh->GetMedium()->GetURLObject().GetURLNoPass();
-
- if( pSdrOleObj )
- SvEmbedTransferHelper::FillTransferableObjectDescriptor( aObjDesc, pSdrOleObj->GetObjRef(), pSdrOleObj->GetGraphic(), pSdrOleObj->GetAspect() );
- else
- mpDocSh->FillTransferableObjectDescriptor( aObjDesc );
-
- aObjDesc.maSize = GetAllMarkedRect().GetSize();
- aObjDesc.maDragStartPos = rDragPos;
- aObjDesc.maDisplayName = aDisplayName;
- aObjDesc.mbCanLink = sal_False;
-
- pTransferable->SetStartPos( rDragPos );
- pTransferable->SetObjectDescriptor( aObjDesc );
- pTransferable->StartDrag( &rWindow, DND_ACTION_COPYMOVE | DND_ACTION_LINK );
-
- return xRet;
-}
-
-// -----------------------------------------------------------------------------
-
-::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > View::CreateSelectionDataObject( View* pWorkView, ::Window& rWindow )
-{
- SdTransferable* pTransferable = new SdTransferable( mpDoc, pWorkView, sal_True );
- ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRet( pTransferable );
- TransferableObjectDescriptor aObjDesc;
- const Rectangle aMarkRect( GetAllMarkedRect() );
- String aDisplayName;
-
- SD_MOD()->pTransferSelection = pTransferable;
-
- if( mpDocSh )
- {
- aDisplayName = mpDocSh->GetMedium()->GetURLObject().GetURLNoPass();
- mpDocSh->FillTransferableObjectDescriptor( aObjDesc );
- }
-
- aObjDesc.maSize = aMarkRect.GetSize();
-
- pTransferable->SetStartPos( aMarkRect.TopLeft() );
- pTransferable->SetObjectDescriptor( aObjDesc );
- pTransferable->CopyToSelection( &rWindow );
-
- return xRet;
-}
-
-// -----------------------------------------------------------------------------
-
-void View::UpdateSelectionClipboard( sal_Bool bForceDeselect )
-{
- if( mpViewSh && mpViewSh->GetActiveWindow() )
- {
- if( !bForceDeselect && GetMarkedObjectList().GetMarkCount() )
- CreateSelectionDataObject( this, *mpViewSh->GetActiveWindow() );
- else if( SD_MOD()->pTransferSelection && ( SD_MOD()->pTransferSelection->GetView() == this ) )
- {
- TransferableHelper::ClearSelection( mpViewSh->GetActiveWindow() );
- SD_MOD()->pTransferSelection = NULL;
- }
- }
-}
-
-// -----------------------------------------------------------------------------
-
-void View::DoCut(::Window* )
-{
- const OutlinerView* pOLV = GetTextEditOutlinerView();
-
- if( pOLV )
- ( (OutlinerView*) pOLV)->Cut();
- else if( AreObjectsMarked() )
- {
- String aStr( SdResId(STR_UNDO_CUT) );
-
- DoCopy();
- BegUndo( ( aStr += sal_Unicode(' ') ) += GetDescriptionOfMarkedObjects() );
- DeleteMarked();
- EndUndo();
- }
-}
-
-// -----------------------------------------------------------------------------
-
-void View::DoCopy (::Window* pWindow)
-{
- const OutlinerView* pOLV = GetTextEditOutlinerView();
-
- if( pOLV )
- ( (OutlinerView*) pOLV)->Copy();
- else if( AreObjectsMarked() )
- {
- BrkAction();
- CreateClipboardDataObject( this, *pWindow );
- }
-}
-
-// -----------------------------------------------------------------------------
-
-void View::DoPaste (::Window* pWindow)
-{
- TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( mpViewSh->GetActiveWindow() ) );
- if( !aDataHelper.GetTransferable().is() )
- return; // empty clipboard?
-
- const OutlinerView* pOLV = GetTextEditOutlinerView();
-
- if( pOLV && EditEngine::HasValidData( aDataHelper.GetTransferable() ) )
- {
- const_cast< OutlinerView* >(pOLV)->PasteSpecial();
-
- SdrObject* pObj = GetTextEditObject();
- SdPage* pPage = (SdPage*)( pObj ? pObj->GetPage() : NULL );
- ::Outliner* pOutliner = pOLV->GetOutliner();
-
- if( pOutliner)
- {
- if( pObj && pPage && pPage->GetPresObjKind(pObj) == PRESOBJ_TITLE )
- {
- // remove all hard linebreaks from the title
- if( pOutliner && pOutliner->GetParagraphCount() > 1 )
- {
- sal_Bool bOldUpdateMode = pOutliner->GetUpdateMode();
-
- pOutliner->SetUpdateMode( sal_False );
-
- const EditEngine& rEdit = pOutliner->GetEditEngine();
- const int nParaCount = rEdit.GetParagraphCount();
-
- for( int nPara = nParaCount - 2; nPara >= 0; nPara-- )
- {
- const sal_uInt16 nParaLen = (sal_uInt16)rEdit.GetTextLen( (sal_uInt16)nPara );
- pOutliner->QuickDelete( ESelection( (sal_uInt16)nPara, nParaLen, (sal_uInt16)nPara+1, 0 ) );
- pOutliner->QuickInsertLineBreak( ESelection( (sal_uInt16)nPara, nParaLen, (sal_uInt16)nPara, nParaLen ) );
- }
-
- DBG_ASSERT( rEdit.GetParagraphCount() <= 1, "Titelobjekt contains hard line breaks" );
- pOutliner->SetUpdateMode(bOldUpdateMode);
- }
- }
-
- if( !mpDoc->IsChanged() )
- {
- if( pOutliner && pOutliner->IsModified() )
- mpDoc->SetChanged( sal_True );
- }
- }
- }
- else
- {
- Point aPos;
- sal_Int8 nDnDAction = DND_ACTION_COPY;
-
- if( pWindow )
- aPos = pWindow->PixelToLogic( Rectangle( aPos, pWindow->GetOutputSizePixel() ).Center() );
-
- DrawViewShell* pDrViewSh = (DrawViewShell*) mpDocSh->GetViewShell();
-
- if (pDrViewSh != NULL)
- {
- if( !InsertData( aDataHelper, aPos, nDnDAction, sal_False ) )
- {
- 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 );
- }
- }
- }
- }
-}
-
-// -----------------------------------------------------------------------------
-
-void View::StartDrag( const Point& rStartPos, ::Window* pWindow )
-{
- if( AreObjectsMarked() && IsAction() && mpViewSh && pWindow && !mpDragSrcMarkList )
- {
- BrkAction();
-
- if( IsTextEdit() )
- SdrEndTextEdit();
-
- DrawViewShell* pDrawViewShell = dynamic_cast< DrawViewShell* >( mpDocSh ? mpDocSh->GetViewShell() : 0 );
-
- if( pDrawViewShell )
- {
- FunctionReference xFunction( pDrawViewShell->GetCurrentFunction() );
-
- if( xFunction.is() && xFunction->ISA( FuDraw ) )
- static_cast<FuDraw*>(xFunction.get())->ForcePointer( NULL );
- }
-
- mpDragSrcMarkList = new SdrMarkList(GetMarkedObjectList());
- mnDragSrcPgNum = GetSdrPageView()->GetPage()->GetPageNum();
-
- if( IsUndoEnabled() )
- {
- String aStr( SdResId(STR_UNDO_DRAGDROP) );
- aStr += sal_Unicode(' ');
- aStr += mpDragSrcMarkList->GetMarkDescription();
- BegUndo(aStr);
- }
- CreateDragDataObject( this, *pWindow, rStartPos );
- }
-}
-
-// -----------------------------------------------------------------------------
-
-void View::DragFinished( sal_Int8 nDropAction )
-{
- const bool bUndo = IsUndoEnabled();
-
- SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
-
- if( pDragTransferable )
- pDragTransferable->SetView( NULL );
-
- if( ( nDropAction & DND_ACTION_MOVE ) &&
- pDragTransferable && !pDragTransferable->IsInternalMove() &&
- mpDragSrcMarkList && mpDragSrcMarkList->GetMarkCount() &&
- !IsPresObjSelected() )
- {
- mpDragSrcMarkList->ForceSort();
-
- if( bUndo )
- BegUndo();
-
- sal_uLong nm, nAnz = mpDragSrcMarkList->GetMarkCount();
-
- for( nm = nAnz; nm>0; )
- {
- nm--;
- SdrMark* pM=mpDragSrcMarkList->GetMark(nm);
- if( bUndo )
- AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pM->GetMarkedSdrObj()));
- }
-
- mpDragSrcMarkList->GetMark(0)->GetMarkedSdrObj()->GetOrdNum();
-
- for (nm=nAnz; nm>0;)
- {
- nm--;
- SdrMark* pM=mpDragSrcMarkList->GetMark(nm);
- SdrObject* pObj=pM->GetMarkedSdrObj();
- sal_uInt32 nOrdNum=pObj->GetOrdNumDirect();
-
- if( pObj && pObj->GetPage() )
- {
-#ifdef DBG_UTIL
- SdrObject* pChkObj =
-#endif
- pObj->GetPage()->RemoveObject(nOrdNum);
- DBG_ASSERT(pChkObj==pObj,"pChkObj!=pObj beim RemoveObject()");
- }
- }
-
- if( bUndo )
- EndUndo();
- }
-
- if( pDragTransferable )
- pDragTransferable->SetInternalMove( sal_False );
-
- if( bUndo )
- EndUndo();
- mnDragSrcPgNum = SDRPAGE_NOTFOUND;
- delete mpDragSrcMarkList;
- mpDragSrcMarkList = NULL;
-}
-
-// -----------------------------------------------------------------------------
-
-sal_Int8 View::AcceptDrop( const AcceptDropEvent& rEvt, DropTargetHelper& rTargetHelper,
- ::sd::Window*, sal_uInt16, sal_uInt16 nLayer )
-{
- String aLayerName( GetActiveLayer() );
- SdrPageView* pPV = GetSdrPageView();
- sal_Int8 nDropAction = rEvt.mnAction;
- sal_Int8 nRet = DND_ACTION_NONE;
-
- if( nLayer != SDRLAYER_NOTFOUND )
- {
- SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
- aLayerName = rLayerAdmin.GetLayerPerID(nLayer)->GetName();
- }
-
- if( mbIsDropAllowed && !pPV->IsLayerLocked( aLayerName ) && pPV->IsLayerVisible( aLayerName ) )
- {
- const OutlinerView* pOLV = GetTextEditOutlinerView();
- sal_Bool bIsInsideOutlinerView = sal_False;
-
- if( pOLV )
- {
- Rectangle aRect( pOLV->GetOutputArea() );
-
- if (GetMarkedObjectCount() == 1)
- {
- SdrMark* pMark = GetSdrMarkByIndex(0);
- SdrObject* pObj = pMark->GetMarkedSdrObj();
- aRect.Union( pObj->GetLogicRect() );
- }
-
- if( aRect.IsInside( pOLV->GetWindow()->PixelToLogic( rEvt.maPosPixel ) ) )
- {
- bIsInsideOutlinerView = sal_True;
- }
- }
-
- if( !bIsInsideOutlinerView )
- {
- SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
-
- if( pDragTransferable )
- {
- const View* pSourceView = pDragTransferable->GetView();
-
- if( pDragTransferable->IsPageTransferable() )
- {
- nRet = DND_ACTION_COPY;
- }
- else if( pSourceView )
- {
- if( !( nDropAction & DND_ACTION_LINK ) ||
- pSourceView->GetDocSh()->GetMedium()->GetName().Len() )
- {
- nRet = nDropAction;
- }
- }
- }
- else
- {
- const sal_Bool bDrawing = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_DRAWING );
- const sal_Bool bGraphic = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_SVXB );
- const sal_Bool bMtf = rTargetHelper.IsDropFormatSupported( FORMAT_GDIMETAFILE );
- const sal_Bool bBitmap = rTargetHelper.IsDropFormatSupported( FORMAT_BITMAP );
- sal_Bool bBookmark = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK );
- sal_Bool bXFillExchange = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_XFA );
-
- // check handle insert
- if( !nRet && ( (bXFillExchange && ( SDRDRAG_GRADIENT == GetDragMode() )) || ( SDRDRAG_TRANSPARENCE == GetDragMode() ) ) )
- {
- const SdrHdlList& rHdlList = GetHdlList();
-
- for( sal_uInt32 n = 0; n < rHdlList.GetHdlCount(); n++ )
- {
- SdrHdl* pIAOHandle = rHdlList.GetHdl( n );
-
- if( pIAOHandle && ( HDL_COLR == pIAOHandle->GetKind() ) )
- {
- if(pIAOHandle->getOverlayObjectList().isHitPixel(rEvt.maPosPixel))
- {
- nRet = nDropAction;
- static_cast< SdrHdlColor* >( pIAOHandle )->SetSize( SDR_HANDLE_COLOR_SIZE_SELECTED );
- }
- else
- {
- static_cast< SdrHdlColor* >( pIAOHandle )->SetSize( SDR_HANDLE_COLOR_SIZE_NORMAL );
- }
- }
- }
- }
-
- // check object insert
- if( !nRet && ( bXFillExchange || ( ( bDrawing || bGraphic || bMtf || bBitmap || bBookmark ) && ( nDropAction & DND_ACTION_LINK ) ) ) )
- {
- SdrObject* pPickObj = NULL;
- SdrPageView* pPageView = NULL;
- ::sd::Window* pWindow = mpViewSh->GetActiveWindow();
- Point aPos( pWindow->PixelToLogic( rEvt.maPosPixel ) );
- const sal_Bool bHasPickObj = PickObj( aPos, getHitTolLog(), pPickObj, pPageView );
- sal_Bool bIsPresTarget = sal_False;
-
- if( bHasPickObj && pPickObj && ( pPickObj->IsEmptyPresObj() || pPickObj->GetUserCall() ) )
- {
- SdPage* pPage = (SdPage*) pPickObj->GetPage();
-
- if( pPage && pPage->IsMasterPage() )
- bIsPresTarget = pPage->IsPresObj( pPickObj );
- }
-
- if( bHasPickObj && !bIsPresTarget &&
- ( !pPickObj->ISA( SdrGrafObj ) || bGraphic || bMtf || bBitmap || ( bXFillExchange && !pPickObj->ISA( SdrGrafObj ) && !pPickObj->ISA( SdrOle2Obj ) ) ) )
- {
- if( mpDropMarkerObj != pPickObj )
- {
- mpDropMarkerObj = pPickObj;
- ImplClearDrawDropMarker();
-
- if(mpDropMarkerObj)
- {
- mpDropMarker = new SdrDropMarkerOverlay(*this, *mpDropMarkerObj);
- }
- }
-
- nRet = nDropAction;
- }
- else
- bXFillExchange = sal_False;
- }
-
- // check normal insert
- if( !nRet )
- {
- const sal_Bool bSBAFormat = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_SVX_FORMFIELDEXCH );
- const sal_Bool bEditEngine = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_EDITENGINE );
- const sal_Bool bString = rTargetHelper.IsDropFormatSupported( FORMAT_STRING );
- const sal_Bool bRTF = rTargetHelper.IsDropFormatSupported( FORMAT_RTF );
- const sal_Bool bFile = rTargetHelper.IsDropFormatSupported( FORMAT_FILE );
- const sal_Bool bFileList = rTargetHelper.IsDropFormatSupported( FORMAT_FILE_LIST );
-
- if( mpDropMarker )
- {
- ImplClearDrawDropMarker();
- mpDropMarkerObj = NULL;
- }
-
- if( bBookmark && bFile && ( nDropAction & DND_ACTION_MOVE ) && mpViewSh && SlideShow::IsRunning(mpViewSh->GetViewShellBase()) )
- bBookmark = sal_False;
-
- if( bDrawing || bGraphic || bMtf || bBitmap || bBookmark || bFile || bFileList || bXFillExchange || bSBAFormat || bEditEngine || bString || bRTF )
- nRet = nDropAction;
-
- // For entries from the navigator, change action copy.
- if (bBookmark
- && rTargetHelper.IsDropFormatSupported(
- SdPageObjsTLB::SdPageObjsTransferable::GetListBoxDropFormatId())
- && (nDropAction & DND_ACTION_MOVE)!=0)
- {
- nRet = DND_ACTION_COPY;
- }
- }
- }
- }
- }
-
- // destroy drop marker if this is a leaving event
- if( rEvt.mbLeaving && mpDropMarker )
- {
- ImplClearDrawDropMarker();
- mpDropMarkerObj = NULL;
- }
-
- return nRet;
-}
-
-// -----------------------------------------------------------------------------
-
-sal_Int8 View::ExecuteDrop( const ExecuteDropEvent& rEvt, DropTargetHelper& rTargetHelper,
- ::sd::Window* pTargetWindow, sal_uInt16 nPage, sal_uInt16 nLayer )
-{
- SdrPageView* pPV = GetSdrPageView();
- String aActiveLayer = GetActiveLayer();
- sal_Int8 nDropAction = rEvt.mnAction;
- sal_Int8 nRet = DND_ACTION_NONE;
-
- // destroy drop marker if it is shown
- if( mpDropMarker )
- {
- ImplClearDrawDropMarker();
- mpDropMarkerObj = NULL;
- }
-
- if( !pPV->IsLayerLocked( aActiveLayer ) )
- {
- const OutlinerView* pOLV = GetTextEditOutlinerView();
- sal_Bool bIsInsideOutlinerView = sal_False;
-
- if( pOLV )
- {
- Rectangle aRect( pOLV->GetOutputArea() );
-
- if( GetMarkedObjectCount() == 1 )
- {
- SdrMark* pMark = GetSdrMarkByIndex(0);
- SdrObject* pObj = pMark->GetMarkedSdrObj();
- aRect.Union( pObj->GetLogicRect() );
- }
-
- Point aPos( pOLV->GetWindow()->PixelToLogic( rEvt.maPosPixel ) );
-
- if( aRect.IsInside( aPos ) )
- {
- bIsInsideOutlinerView = sal_True;
- }
- }
-
- if( !bIsInsideOutlinerView )
- {
- Point aPos;
- TransferableDataHelper aDataHelper( rEvt.maDropEvent.Transferable );
-
- if( pTargetWindow )
- aPos = pTargetWindow->PixelToLogic( rEvt.maPosPixel );
-
- // handle insert?
- if( (!nRet && ( SDRDRAG_GRADIENT == GetDragMode() )) || (( SDRDRAG_TRANSPARENCE == GetDragMode() ) && aDataHelper.HasFormat( SOT_FORMATSTR_ID_XFA )) )
- {
- const SdrHdlList& rHdlList = GetHdlList();
-
- for( sal_uInt32 n = 0; !nRet && n < rHdlList.GetHdlCount(); n++ )
- {
- SdrHdl* pIAOHandle = rHdlList.GetHdl( n );
-
- if( pIAOHandle && ( HDL_COLR == pIAOHandle->GetKind() ) )
- {
- if(pIAOHandle->getOverlayObjectList().isHitPixel(rEvt.maPosPixel))
- {
- SotStorageStreamRef xStm;
-
- if( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_XFA, xStm ) && xStm.Is() )
- {
- XFillExchangeData aFillData( XFillAttrSetItem( &mpDoc->GetPool() ) );
-
- *xStm >> aFillData;
- const Color aColor( ( (XFillColorItem&) aFillData.GetXFillAttrSetItem()->GetItemSet().Get( XATTR_FILLCOLOR ) ).GetColorValue() );
- static_cast< SdrHdlColor* >( pIAOHandle )->SetColor( aColor, sal_True );
- nRet = nDropAction;
- }
- }
- }
- }
- }
-
- // standard insert?
- if( !nRet && InsertData( aDataHelper, aPos, nDropAction, sal_True, 0, nPage, nLayer ) )
- nRet = nDropAction;
-
- // special insert?
- if( !nRet && mpViewSh )
- {
- String aTmpString1, aTmpString2;
- INetBookmark aINetBookmark( aTmpString1, aTmpString2 );
-
- // insert bookmark
- if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) &&
- aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) )
- {
- SdPageObjsTLB::SdPageObjsTransferable* pPageObjsTransferable = SdPageObjsTLB::SdPageObjsTransferable::getImplementation( aDataHelper.GetXTransferable() );
-
- if( pPageObjsTransferable &&
- ( NAVIGATOR_DRAGTYPE_LINK == pPageObjsTransferable->GetDragType() ||
- NAVIGATOR_DRAGTYPE_EMBEDDED == pPageObjsTransferable->GetDragType() ) )
- {
- // insert bookmark from own navigator (handled async. due to possible message box )
- Application::PostUserEvent( LINK( this, View, ExecuteNavigatorDrop ),
- new SdNavigatorDropEvent( rEvt, rTargetHelper, pTargetWindow,
- nPage, nLayer ) );
- nRet = nDropAction;
- }
- else
- {
- SdrObject* pPickObj = NULL;
- SdrPageView* pPageView = NULL;
-
- if( PickObj( aPos, getHitTolLog(), pPickObj, pPageView ) )
- {
- // insert as clip action => jump
- rtl::OUString aBookmark( aINetBookmark.GetURL() );
- SdAnimationInfo* pInfo = mpDoc->GetAnimationInfo( pPickObj );
- sal_Bool bCreated = sal_False;
-
- if( aBookmark.getLength() )
- {
- presentation::ClickAction eClickAction = presentation::ClickAction_DOCUMENT;
-
- sal_Int32 nIndex = aBookmark.indexOf( (sal_Unicode)'#' );
- if( nIndex != -1 )
- {
- const String aDocName( aBookmark.copy( 0, nIndex ) );
-
- if( mpDocSh->GetMedium()->GetName() == aDocName || mpDocSh->GetName() == aDocName )
- {
- // internal jump, only use the part after and including '#'
- eClickAction = presentation::ClickAction_BOOKMARK;
- aBookmark = aBookmark.copy( nIndex+1 );
- }
- }
-
- if( !pInfo )
- {
- pInfo = SdDrawDocument::GetShapeUserData( *pPickObj, true );
- bCreated = sal_True;
- }
-
- // Undo-Action mit alten und neuen Groessen erzeugen
- SdAnimationPrmsUndoAction* pAction = new SdAnimationPrmsUndoAction(mpDoc, pPickObj, bCreated);
- pAction->SetActive(pInfo->mbActive, pInfo->mbActive);
- pAction->SetEffect(pInfo->meEffect, pInfo->meEffect);
- pAction->SetTextEffect(pInfo->meTextEffect, pInfo->meTextEffect);
- pAction->SetSpeed(pInfo->meSpeed, pInfo->meSpeed);
- pAction->SetDim(pInfo->mbDimPrevious, pInfo->mbDimPrevious);
- pAction->SetDimColor(pInfo->maDimColor, pInfo->maDimColor);
- pAction->SetDimHide(pInfo->mbDimHide, pInfo->mbDimHide);
- pAction->SetSoundOn(pInfo->mbSoundOn, pInfo->mbSoundOn);
- pAction->SetSound(pInfo->maSoundFile, pInfo->maSoundFile);
- pAction->SetPlayFull(pInfo->mbPlayFull, pInfo->mbPlayFull);
- pAction->SetPathObj(pInfo->mpPathObj, pInfo->mpPathObj);
- pAction->SetClickAction(pInfo->meClickAction, eClickAction);
- pAction->SetBookmark(pInfo->GetBookmark(), aBookmark);
- pAction->SetVerb(pInfo->mnVerb, pInfo->mnVerb);
- pAction->SetSecondEffect(pInfo->meSecondEffect, pInfo->meSecondEffect);
- pAction->SetSecondSpeed(pInfo->meSecondSpeed, pInfo->meSecondSpeed);
- pAction->SetSecondSoundOn(pInfo->mbSecondSoundOn, pInfo->mbSecondSoundOn);
- pAction->SetSecondPlayFull(pInfo->mbSecondPlayFull, pInfo->mbSecondPlayFull);
-
- String aString(SdResId(STR_UNDO_ANIMATION));
- pAction->SetComment(aString);
- mpDocSh->GetUndoManager()->AddUndoAction(pAction);
- pInfo->meClickAction = eClickAction;
- pInfo->SetBookmark( aBookmark );
- mpDoc->SetChanged();
-
- nRet = nDropAction;
- }
- }
- else if( mpViewSh->ISA( DrawViewShell ) )
- {
- // insert as normal URL button
- ( (DrawViewShell*) mpViewSh )->InsertURLButton( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), String(), &aPos );
- nRet = nDropAction;
- }
- }
- }
- }
- }
- }
-
- return nRet;
-}
-
-// -----------------------------------------------------------------------------
-
-IMPL_LINK( View, ExecuteNavigatorDrop, SdNavigatorDropEvent*, pSdNavigatorDropEvent )
-{
- TransferableDataHelper aDataHelper( pSdNavigatorDropEvent->maDropEvent.Transferable );
- SdPageObjsTLB::SdPageObjsTransferable* pPageObjsTransferable = SdPageObjsTLB::SdPageObjsTransferable::getImplementation( aDataHelper.GetXTransferable() );
- INetBookmark aINetBookmark;
-
- if( pPageObjsTransferable && aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) )
- {
- Point aPos;
- List aBookmarkList;
- String aBookmark;
- SdPage* pPage = (SdPage*) GetSdrPageView()->GetPage();
- sal_uInt16 nPgPos = 0xFFFF;
-
- if( pSdNavigatorDropEvent->mpTargetWindow )
- aPos = pSdNavigatorDropEvent->mpTargetWindow->PixelToLogic( pSdNavigatorDropEvent->maPosPixel );
-
- const rtl::OUString aURL( aINetBookmark.GetURL() );
- sal_Int32 nIndex = aURL.indexOf( (sal_Unicode)'#' );
- if( nIndex != -1 )
- aBookmark = aURL.copy( nIndex+1 );
- aBookmarkList.Insert( &aBookmark );
-
- if( !pPage->IsMasterPage() )
- {
- if( pPage->GetPageKind() == PK_STANDARD )
- nPgPos = pPage->GetPageNum() + 2;
- else if( pPage->GetPageKind() == PK_NOTES )
- nPgPos = pPage->GetPageNum() + 1;
- }
-
- // Um zu gewaehrleisten, dass alle Seitennamen eindeutig sind, werden
- // die einzufuegenden geprueft und gegebenenfalls in einer Ersatzliste
- // aufgenommen (bNameOK == sal_False -> Benutzer hat abgebrochen)
- List* pExchangeList = NULL;
- sal_Bool bLink = ( NAVIGATOR_DRAGTYPE_LINK == pPageObjsTransferable->GetDragType() ? sal_True : sal_False );
- sal_Bool bNameOK = GetExchangeList( pExchangeList, &aBookmarkList, 2 );
- sal_Bool bReplace = sal_False;
-
- // Da man hier nicht weiss, ob es sich um eine Seite oder ein Objekt handelt,
- // wird eine Liste sowohl mit Seiten, als auch mit Objekten gefuellt.
- // Sollten Seitennamen und Objektnamen identisch sein gibt es hier natuerlich Probleme !!!
- if( bNameOK )
- {
- mpDoc->InsertBookmark( &aBookmarkList, pExchangeList,
- bLink, bReplace, nPgPos, sal_False,
- &pPageObjsTransferable->GetDocShell(),
- sal_True, &aPos );
- }
-
- // Delete the ExchangeList
- if( pExchangeList )
- {
- for( void* p = pExchangeList->First(); p; p = pExchangeList->Next() )
- delete (String*) p;
-
- delete pExchangeList;
- }
- }
-
- delete pSdNavigatorDropEvent;
-
- return 0;
-}
-
-/*************************************************************************
-|*
-|* Rueckgabeparameter:
-|* pExchangeList == NULL -> Namen sind alle eindeutig
-|* bNameOK == sal_False -> Benutzer hat abgebrochen
-|* nType == 0 -> Seiten
-|* nType == 1 -> Objekte
-|* nType == 2 -> Seiten + Objekte
-|*
-\************************************************************************/
-
-sal_Bool View::GetExchangeList( List*& rpExchangeList, List* pBookmarkList, sal_uInt16 nType )
-{
- DBG_ASSERT( !rpExchangeList, "ExchangeList muss NULL sein!");
-
- sal_Bool bListIdentical = sal_True; // BookmarkList und ExchangeList sind gleich
- sal_Bool bNameOK = sal_True; // Name ist eindeutig
-
- rpExchangeList = new List();
-
- if( pBookmarkList )
- {
- String* pString = (String*) pBookmarkList->First();
-
- while( pString && bNameOK )
- {
- String* pNewName = new String( *pString );
-
- if( nType == 0 || nType == 2 )
- bNameOK = mpDocSh->CheckPageName (
- mpViewSh->GetActiveWindow(), *pNewName);
-
- if( bNameOK && ( nType == 1 || nType == 2 ) )
- {
- if( mpDoc->GetObj( *pNewName ) )
- {
- String aTitle( SdResId( STR_TITLE_NAMEGROUP ) );
- String aDesc( SdResId( STR_DESC_NAMEGROUP ) );
- SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
- AbstractSvxNameDialog* pDlg = pFact ? pFact->CreateSvxNameDialog( mpViewSh->GetActiveWindow(), *pNewName, aDesc ) : 0;
- if( pDlg )
- {
- pDlg->SetEditHelpId( HID_SD_NAMEDIALOG_OBJECT );
-
- bNameOK = sal_False;
- pDlg->SetText( aTitle );
-
- while( !bNameOK && pDlg->Execute() == RET_OK )
- {
- pDlg->GetName( *pNewName );
-
- if( !mpDoc->GetObj( *pNewName ) )
- bNameOK = sal_True;
- }
-
- delete pDlg;
- }
- }
- }
-
- if( bListIdentical )
- bListIdentical = ( *pString == *pNewName );
-
- rpExchangeList->Insert( pNewName, LIST_APPEND );
- pString = (String*) pBookmarkList->Next();
- }
- }
-
- // ExchangeList ist mit BookmarkList identisch
- if( rpExchangeList && bListIdentical )
- {
- String* pString = (String*) rpExchangeList->First();
- while( pString )
- {
- delete pString;
- pString = (String*) rpExchangeList->Next();
- }
- delete rpExchangeList;
- rpExchangeList = NULL;
- }
-
- return( bNameOK );
-}
-
-typedef std::vector< std::pair< sal_uInt32, sal_uInt32 > > PathSurrogateVector;
-typedef std::vector< SdrObject* > SdrObjectVector;
-
-void ImplProcessObjectList(SdrObject* pObj, SdrObjectVector& rVector )
-{
- sal_Bool bIsGroup(pObj->IsGroupObject());
- if(bIsGroup && pObj->ISA(E3dObject) && !pObj->ISA(E3dScene))
- bIsGroup = sal_False;
-
- rVector.push_back( pObj );
-
- if(bIsGroup)
- {
- SdrObjList* pObjList = pObj->GetSubList();
- sal_uInt32 a;
- for( a = 0; a < pObjList->GetObjCount(); a++)
- ImplProcessObjectList(pObjList->GetObj(a), rVector);
- }
-}
-
-SdrModel* View::GetMarkedObjModel() const
-{
- return FmFormView::GetMarkedObjModel();;
-}
-
-sal_Bool View::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst /* =NULL */, sal_uInt32 nOptions /* =0 */)
-{
- return FmFormView::Paste( rMod, rPos, pLst,nOptions );;
-}
-
-} // end of namespace sd
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */