xref: /aoo4110/main/sd/source/ui/view/sdview2.cxx (revision b1cdbd2c)
1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sd.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski 
28*b1cdbd2cSJim Jagielski #include "View.hxx"
29*b1cdbd2cSJim Jagielski 
30*b1cdbd2cSJim Jagielski #include <vector>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XEmbedPersist.hpp>
32*b1cdbd2cSJim Jagielski #include <tools/ref.hxx>
33*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
34*b1cdbd2cSJim Jagielski #ifndef _MSGBOX_HXX //autogen
35*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
36*b1cdbd2cSJim Jagielski #endif
37*b1cdbd2cSJim Jagielski #include <svx/svdetc.hxx>
38*b1cdbd2cSJim Jagielski #include <svx/svdoole2.hxx>
39*b1cdbd2cSJim Jagielski #include <svx/svdograf.hxx>
40*b1cdbd2cSJim Jagielski #include <vcl/graph.hxx>
41*b1cdbd2cSJim Jagielski #include <svx/xexch.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/svxdlg.hxx>
43*b1cdbd2cSJim Jagielski #include <svx/dialogs.hrc>
44*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
45*b1cdbd2cSJim Jagielski #include <sfx2/childwin.hxx>
46*b1cdbd2cSJim Jagielski #include <svx/svdundo.hxx>
47*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
48*b1cdbd2cSJim Jagielski #include <svl/urlbmk.hxx>
49*b1cdbd2cSJim Jagielski #include <svl/urlbmk.hxx>
50*b1cdbd2cSJim Jagielski #include <editeng/outliner.hxx>
51*b1cdbd2cSJim Jagielski #include <svx/xflclit.hxx>
52*b1cdbd2cSJim Jagielski #include <svx/dbexch.hrc>
53*b1cdbd2cSJim Jagielski #include <sot/formats.hxx>
54*b1cdbd2cSJim Jagielski #include <editeng/editeng.hxx>
55*b1cdbd2cSJim Jagielski #include <svx/svditer.hxx>
56*b1cdbd2cSJim Jagielski #include <svx/obj3d.hxx>
57*b1cdbd2cSJim Jagielski #include <svx/scene3d.hxx>
58*b1cdbd2cSJim Jagielski 
59*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
60*b1cdbd2cSJim Jagielski #include <svtools/embedtransfer.hxx>
61*b1cdbd2cSJim Jagielski 
62*b1cdbd2cSJim Jagielski #include "navigatr.hxx"
63*b1cdbd2cSJim Jagielski #include "anminfo.hxx"
64*b1cdbd2cSJim Jagielski #include "strings.hrc"
65*b1cdbd2cSJim Jagielski #include "glob.hrc"
66*b1cdbd2cSJim Jagielski #include "sdxfer.hxx"
67*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
68*b1cdbd2cSJim Jagielski #include "sdmod.hxx"
69*b1cdbd2cSJim Jagielski #include "DrawViewShell.hxx"
70*b1cdbd2cSJim Jagielski #include "DrawDocShell.hxx"
71*b1cdbd2cSJim Jagielski #include "fudraw.hxx"
72*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
73*b1cdbd2cSJim Jagielski #include "Window.hxx"
74*b1cdbd2cSJim Jagielski #include "sdpage.hxx"
75*b1cdbd2cSJim Jagielski #include "unoaprms.hxx"
76*b1cdbd2cSJim Jagielski #include "drawview.hxx"
77*b1cdbd2cSJim Jagielski #include "helpids.h"
78*b1cdbd2cSJim Jagielski #include <vcl/svapp.hxx>
79*b1cdbd2cSJim Jagielski 
80*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
81*b1cdbd2cSJim Jagielski 
82*b1cdbd2cSJim Jagielski namespace sd {
83*b1cdbd2cSJim Jagielski 
84*b1cdbd2cSJim Jagielski #ifndef SO2_DECL_SVINPLACEOBJECT_DEFINED
85*b1cdbd2cSJim Jagielski #define SO2_DECL_SVINPLACEOBJECT_DEFINED
86*b1cdbd2cSJim Jagielski SO2_DECL_REF(SvInPlaceObject)
87*b1cdbd2cSJim Jagielski #endif
88*b1cdbd2cSJim Jagielski #ifndef SO2_DECL_SVSTORAGE_DEFINED
89*b1cdbd2cSJim Jagielski #define SO2_DECL_SVSTORAGE_DEFINED
90*b1cdbd2cSJim Jagielski SO2_DECL_REF(SvStorage)
91*b1cdbd2cSJim Jagielski #endif
92*b1cdbd2cSJim Jagielski 
93*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski // ------------------------
96*b1cdbd2cSJim Jagielski // - SdNavigatorDropEvent -
97*b1cdbd2cSJim Jagielski // ------------------------
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski struct SdNavigatorDropEvent : public ExecuteDropEvent
100*b1cdbd2cSJim Jagielski {
101*b1cdbd2cSJim Jagielski     DropTargetHelper&       mrTargetHelper;
102*b1cdbd2cSJim Jagielski     ::sd::Window* mpTargetWindow;
103*b1cdbd2cSJim Jagielski 	sal_uInt16					mnPage;
104*b1cdbd2cSJim Jagielski 	sal_uInt16					mnLayer;
105*b1cdbd2cSJim Jagielski 
SdNavigatorDropEventsd::SdNavigatorDropEvent106*b1cdbd2cSJim Jagielski     SdNavigatorDropEvent (
107*b1cdbd2cSJim Jagielski         const ExecuteDropEvent& rEvt,
108*b1cdbd2cSJim Jagielski         DropTargetHelper& rTargetHelper,
109*b1cdbd2cSJim Jagielski         ::sd::Window* pTargetWindow,
110*b1cdbd2cSJim Jagielski         sal_uInt16 nPage,
111*b1cdbd2cSJim Jagielski         sal_uInt16 nLayer )
112*b1cdbd2cSJim Jagielski         : ExecuteDropEvent( rEvt ),
113*b1cdbd2cSJim Jagielski           mrTargetHelper( rTargetHelper ),
114*b1cdbd2cSJim Jagielski           mpTargetWindow( pTargetWindow ),
115*b1cdbd2cSJim Jagielski           mnPage( nPage ),
116*b1cdbd2cSJim Jagielski           mnLayer( nLayer )
117*b1cdbd2cSJim Jagielski     {}
118*b1cdbd2cSJim Jagielski };
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
121*b1cdbd2cSJim Jagielski 
CreateClipboardDataObject(View *,::Window &)122*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > View::CreateClipboardDataObject( View*, ::Window& )
123*b1cdbd2cSJim Jagielski {
124*b1cdbd2cSJim Jagielski 	// since SdTransferable::CopyToClipboard is called, this
125*b1cdbd2cSJim Jagielski 	// dynamically created object ist destroyed automatically
126*b1cdbd2cSJim Jagielski 	SdTransferable* pTransferable = new SdTransferable( mpDoc, NULL, sal_False );
127*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRet( pTransferable );
128*b1cdbd2cSJim Jagielski 
129*b1cdbd2cSJim Jagielski 	SD_MOD()->pTransferClip = pTransferable;
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski 	mpDoc->CreatingDataObj( pTransferable );
132*b1cdbd2cSJim Jagielski 	pTransferable->SetWorkDocument( (SdDrawDocument*) GetAllMarkedModel() );
133*b1cdbd2cSJim Jagielski 	mpDoc->CreatingDataObj( NULL );
134*b1cdbd2cSJim Jagielski 
135*b1cdbd2cSJim Jagielski 	// #112978# need to use GetAllMarkedBoundRect instead of GetAllMarkedRect to get
136*b1cdbd2cSJim Jagielski 	// fat lines correctly
137*b1cdbd2cSJim Jagielski 	const Rectangle					aMarkRect( GetAllMarkedBoundRect() );
138*b1cdbd2cSJim Jagielski 	TransferableObjectDescriptor	aObjDesc;
139*b1cdbd2cSJim Jagielski 	String							aDisplayName;
140*b1cdbd2cSJim Jagielski 	SdrOle2Obj*						pSdrOleObj = NULL;
141*b1cdbd2cSJim Jagielski 	SdrPageView*					pPgView = GetSdrPageView();
142*b1cdbd2cSJim Jagielski 	SdPage*							pOldPage = pPgView ? ( (SdPage*) pPgView->GetPage() ) : NULL;
143*b1cdbd2cSJim Jagielski 	SdPage*							pNewPage = (SdPage*) pTransferable->GetWorkDocument()->GetPage( 0 );
144*b1cdbd2cSJim Jagielski 
145*b1cdbd2cSJim Jagielski     if( pOldPage )
146*b1cdbd2cSJim Jagielski     {
147*b1cdbd2cSJim Jagielski     	pNewPage->SetSize( pOldPage->GetSize() );
148*b1cdbd2cSJim Jagielski         pNewPage->SetLayoutName( pOldPage->GetLayoutName() );
149*b1cdbd2cSJim Jagielski     }
150*b1cdbd2cSJim Jagielski 
151*b1cdbd2cSJim Jagielski 	if( GetMarkedObjectCount() == 1 )
152*b1cdbd2cSJim Jagielski 	{
153*b1cdbd2cSJim Jagielski 		SdrObject* pObj = GetMarkedObjectByIndex(0);
154*b1cdbd2cSJim Jagielski 
155*b1cdbd2cSJim Jagielski 		if( pObj && pObj->ISA(SdrOle2Obj) && ((SdrOle2Obj*) pObj)->GetObjRef().is() )
156*b1cdbd2cSJim Jagielski 		{
157*b1cdbd2cSJim Jagielski 			// If object has no persistence it must be copied as part of the document
158*b1cdbd2cSJim Jagielski 			try
159*b1cdbd2cSJim Jagielski 			{
160*b1cdbd2cSJim Jagielski 				uno::Reference< embed::XEmbedPersist > xPersObj( ((SdrOle2Obj*)pObj)->GetObjRef(), uno::UNO_QUERY );
161*b1cdbd2cSJim Jagielski 				if ( xPersObj.is() && xPersObj->hasEntry() )
162*b1cdbd2cSJim Jagielski 	 				pSdrOleObj = (SdrOle2Obj*) pObj;
163*b1cdbd2cSJim Jagielski 			}
164*b1cdbd2cSJim Jagielski 			catch( uno::Exception& )
165*b1cdbd2cSJim Jagielski 			{}
166*b1cdbd2cSJim Jagielski 		}
167*b1cdbd2cSJim Jagielski 	}
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski 	if( pSdrOleObj )
170*b1cdbd2cSJim Jagielski         SvEmbedTransferHelper::FillTransferableObjectDescriptor( aObjDesc, pSdrOleObj->GetObjRef(), pSdrOleObj->GetGraphic(), pSdrOleObj->GetAspect() );
171*b1cdbd2cSJim Jagielski     else
172*b1cdbd2cSJim Jagielski 		pTransferable->GetWorkDocument()->GetDocSh()->FillTransferableObjectDescriptor( aObjDesc );
173*b1cdbd2cSJim Jagielski 
174*b1cdbd2cSJim Jagielski 	if( mpDocSh )
175*b1cdbd2cSJim Jagielski 		aObjDesc.maDisplayName = mpDocSh->GetMedium()->GetURLObject().GetURLNoPass();
176*b1cdbd2cSJim Jagielski 
177*b1cdbd2cSJim Jagielski 	aObjDesc.maSize = aMarkRect.GetSize();
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 	pTransferable->SetStartPos( aMarkRect.TopLeft() );
180*b1cdbd2cSJim Jagielski 	pTransferable->SetObjectDescriptor( aObjDesc );
181*b1cdbd2cSJim Jagielski 	pTransferable->CopyToClipboard( mpViewSh->GetActiveWindow() );
182*b1cdbd2cSJim Jagielski 
183*b1cdbd2cSJim Jagielski 	return xRet;
184*b1cdbd2cSJim Jagielski }
185*b1cdbd2cSJim Jagielski 
186*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
187*b1cdbd2cSJim Jagielski 
CreateDragDataObject(View * pWorkView,::Window & rWindow,const Point & rDragPos)188*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > View::CreateDragDataObject( View* pWorkView, ::Window& rWindow, const Point& rDragPos )
189*b1cdbd2cSJim Jagielski {
190*b1cdbd2cSJim Jagielski 	SdTransferable* pTransferable = new SdTransferable( mpDoc, pWorkView, sal_False );
191*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRet( pTransferable );
192*b1cdbd2cSJim Jagielski 
193*b1cdbd2cSJim Jagielski 	SD_MOD()->pTransferDrag = pTransferable;
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski 	TransferableObjectDescriptor	aObjDesc;
196*b1cdbd2cSJim Jagielski 	String							aDisplayName;
197*b1cdbd2cSJim Jagielski 	SdrOle2Obj*						pSdrOleObj = NULL;
198*b1cdbd2cSJim Jagielski 
199*b1cdbd2cSJim Jagielski 	if( GetMarkedObjectCount() == 1 )
200*b1cdbd2cSJim Jagielski 	{
201*b1cdbd2cSJim Jagielski 		SdrObject* pObj = GetMarkedObjectByIndex( 0 );
202*b1cdbd2cSJim Jagielski 
203*b1cdbd2cSJim Jagielski         if( pObj && pObj->ISA( SdrOle2Obj ) && ( (SdrOle2Obj*) pObj )->GetObjRef().is() )
204*b1cdbd2cSJim Jagielski 		{
205*b1cdbd2cSJim Jagielski 			// If object has no persistence it must be copied as part of the document
206*b1cdbd2cSJim Jagielski 			try
207*b1cdbd2cSJim Jagielski 			{
208*b1cdbd2cSJim Jagielski 				uno::Reference< embed::XEmbedPersist > xPersObj( ((SdrOle2Obj*)pObj)->GetObjRef(), uno::UNO_QUERY );
209*b1cdbd2cSJim Jagielski 				if ( xPersObj.is() && xPersObj->hasEntry() )
210*b1cdbd2cSJim Jagielski 	 				pSdrOleObj = (SdrOle2Obj*) pObj;
211*b1cdbd2cSJim Jagielski 			}
212*b1cdbd2cSJim Jagielski 			catch( uno::Exception& )
213*b1cdbd2cSJim Jagielski 			{}
214*b1cdbd2cSJim Jagielski 		}
215*b1cdbd2cSJim Jagielski 	}
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 	if( mpDocSh )
218*b1cdbd2cSJim Jagielski 		aDisplayName = mpDocSh->GetMedium()->GetURLObject().GetURLNoPass();
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 	if( pSdrOleObj )
221*b1cdbd2cSJim Jagielski         SvEmbedTransferHelper::FillTransferableObjectDescriptor( aObjDesc, pSdrOleObj->GetObjRef(), pSdrOleObj->GetGraphic(), pSdrOleObj->GetAspect() );
222*b1cdbd2cSJim Jagielski     else
223*b1cdbd2cSJim Jagielski 		mpDocSh->FillTransferableObjectDescriptor( aObjDesc );
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 	aObjDesc.maSize = GetAllMarkedRect().GetSize();
226*b1cdbd2cSJim Jagielski 	aObjDesc.maDragStartPos = rDragPos;
227*b1cdbd2cSJim Jagielski 	aObjDesc.maDisplayName = aDisplayName;
228*b1cdbd2cSJim Jagielski 	aObjDesc.mbCanLink = sal_False;
229*b1cdbd2cSJim Jagielski 
230*b1cdbd2cSJim Jagielski 	pTransferable->SetStartPos( rDragPos );
231*b1cdbd2cSJim Jagielski 	pTransferable->SetObjectDescriptor( aObjDesc );
232*b1cdbd2cSJim Jagielski     pTransferable->StartDrag( &rWindow, DND_ACTION_COPYMOVE | DND_ACTION_LINK );
233*b1cdbd2cSJim Jagielski 
234*b1cdbd2cSJim Jagielski 	return xRet;
235*b1cdbd2cSJim Jagielski }
236*b1cdbd2cSJim Jagielski 
237*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
238*b1cdbd2cSJim Jagielski 
CreateSelectionDataObject(View * pWorkView,::Window & rWindow)239*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > View::CreateSelectionDataObject( View* pWorkView, ::Window& rWindow )
240*b1cdbd2cSJim Jagielski {
241*b1cdbd2cSJim Jagielski 	SdTransferable*                 pTransferable = new SdTransferable( mpDoc, pWorkView, sal_True );
242*b1cdbd2cSJim Jagielski 	::com::sun::star::uno::Reference< ::com::sun::star::datatransfer::XTransferable > xRet( pTransferable );
243*b1cdbd2cSJim Jagielski 	TransferableObjectDescriptor	aObjDesc;
244*b1cdbd2cSJim Jagielski 	const Rectangle					aMarkRect( GetAllMarkedRect() );
245*b1cdbd2cSJim Jagielski 	String							aDisplayName;
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski 	SD_MOD()->pTransferSelection = pTransferable;
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski 	if( mpDocSh )
250*b1cdbd2cSJim Jagielski     {
251*b1cdbd2cSJim Jagielski 		aDisplayName = mpDocSh->GetMedium()->GetURLObject().GetURLNoPass();
252*b1cdbd2cSJim Jagielski 		mpDocSh->FillTransferableObjectDescriptor( aObjDesc );
253*b1cdbd2cSJim Jagielski     }
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 	aObjDesc.maSize = aMarkRect.GetSize();
256*b1cdbd2cSJim Jagielski 
257*b1cdbd2cSJim Jagielski 	pTransferable->SetStartPos( aMarkRect.TopLeft() );
258*b1cdbd2cSJim Jagielski 	pTransferable->SetObjectDescriptor( aObjDesc );
259*b1cdbd2cSJim Jagielski     pTransferable->CopyToSelection( &rWindow );
260*b1cdbd2cSJim Jagielski 
261*b1cdbd2cSJim Jagielski 	return xRet;
262*b1cdbd2cSJim Jagielski }
263*b1cdbd2cSJim Jagielski 
264*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
265*b1cdbd2cSJim Jagielski 
UpdateSelectionClipboard(sal_Bool bForceDeselect)266*b1cdbd2cSJim Jagielski void View::UpdateSelectionClipboard( sal_Bool bForceDeselect )
267*b1cdbd2cSJim Jagielski {
268*b1cdbd2cSJim Jagielski     if( mpViewSh && mpViewSh->GetActiveWindow() )
269*b1cdbd2cSJim Jagielski     {
270*b1cdbd2cSJim Jagielski         if( !bForceDeselect && GetMarkedObjectList().GetMarkCount() )
271*b1cdbd2cSJim Jagielski             CreateSelectionDataObject( this, *mpViewSh->GetActiveWindow() );
272*b1cdbd2cSJim Jagielski         else if( SD_MOD()->pTransferSelection && ( SD_MOD()->pTransferSelection->GetView() == this ) )
273*b1cdbd2cSJim Jagielski         {
274*b1cdbd2cSJim Jagielski             TransferableHelper::ClearSelection( mpViewSh->GetActiveWindow() );
275*b1cdbd2cSJim Jagielski             SD_MOD()->pTransferSelection = NULL;
276*b1cdbd2cSJim Jagielski         }
277*b1cdbd2cSJim Jagielski     }
278*b1cdbd2cSJim Jagielski }
279*b1cdbd2cSJim Jagielski 
280*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
281*b1cdbd2cSJim Jagielski 
DoCut(::Window *)282*b1cdbd2cSJim Jagielski void View::DoCut(::Window* )
283*b1cdbd2cSJim Jagielski {
284*b1cdbd2cSJim Jagielski 	const OutlinerView* pOLV = GetTextEditOutlinerView();
285*b1cdbd2cSJim Jagielski 
286*b1cdbd2cSJim Jagielski 	if( pOLV )
287*b1cdbd2cSJim Jagielski 		( (OutlinerView*) pOLV)->Cut();
288*b1cdbd2cSJim Jagielski 	else if( AreObjectsMarked() )
289*b1cdbd2cSJim Jagielski 	{
290*b1cdbd2cSJim Jagielski 		String aStr( SdResId(STR_UNDO_CUT) );
291*b1cdbd2cSJim Jagielski 
292*b1cdbd2cSJim Jagielski 		DoCopy();
293*b1cdbd2cSJim Jagielski 		BegUndo( ( aStr += sal_Unicode(' ') ) += GetDescriptionOfMarkedObjects() );
294*b1cdbd2cSJim Jagielski 		DeleteMarked();
295*b1cdbd2cSJim Jagielski 		EndUndo();
296*b1cdbd2cSJim Jagielski 	}
297*b1cdbd2cSJim Jagielski }
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
300*b1cdbd2cSJim Jagielski 
DoCopy(::Window * pWindow)301*b1cdbd2cSJim Jagielski void View::DoCopy (::Window* pWindow)
302*b1cdbd2cSJim Jagielski {
303*b1cdbd2cSJim Jagielski 	const OutlinerView* pOLV = GetTextEditOutlinerView();
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 	if( pOLV )
306*b1cdbd2cSJim Jagielski 		( (OutlinerView*) pOLV)->Copy();
307*b1cdbd2cSJim Jagielski 	else if( AreObjectsMarked() )
308*b1cdbd2cSJim Jagielski 	{
309*b1cdbd2cSJim Jagielski 		BrkAction();
310*b1cdbd2cSJim Jagielski 		CreateClipboardDataObject( this, *pWindow );
311*b1cdbd2cSJim Jagielski 	}
312*b1cdbd2cSJim Jagielski }
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
315*b1cdbd2cSJim Jagielski 
DoPaste(::Window * pWindow)316*b1cdbd2cSJim Jagielski void View::DoPaste (::Window* pWindow)
317*b1cdbd2cSJim Jagielski {
318*b1cdbd2cSJim Jagielski 	TransferableDataHelper aDataHelper( TransferableDataHelper::CreateFromSystemClipboard( mpViewSh->GetActiveWindow() ) );
319*b1cdbd2cSJim Jagielski 	if( !aDataHelper.GetTransferable().is() )
320*b1cdbd2cSJim Jagielski 		return; // empty clipboard?
321*b1cdbd2cSJim Jagielski 
322*b1cdbd2cSJim Jagielski 	const OutlinerView* pOLV = GetTextEditOutlinerView();
323*b1cdbd2cSJim Jagielski 
324*b1cdbd2cSJim Jagielski 	if( pOLV && EditEngine::HasValidData( aDataHelper.GetTransferable() ) )
325*b1cdbd2cSJim Jagielski 	{
326*b1cdbd2cSJim Jagielski 		const_cast< OutlinerView* >(pOLV)->PasteSpecial();
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 		SdrObject*	pObj = GetTextEditObject();
329*b1cdbd2cSJim Jagielski 		SdPage*		pPage = (SdPage*)( pObj ? pObj->GetPage() : NULL );
330*b1cdbd2cSJim Jagielski 		::Outliner*	pOutliner = pOLV->GetOutliner();
331*b1cdbd2cSJim Jagielski 
332*b1cdbd2cSJim Jagielski 		if( pOutliner)
333*b1cdbd2cSJim Jagielski 		{
334*b1cdbd2cSJim Jagielski 			if( pObj && pPage && pPage->GetPresObjKind(pObj) == PRESOBJ_TITLE )
335*b1cdbd2cSJim Jagielski 			{
336*b1cdbd2cSJim Jagielski 				// remove all hard linebreaks from the title
337*b1cdbd2cSJim Jagielski 				if( pOutliner && pOutliner->GetParagraphCount() > 1 )
338*b1cdbd2cSJim Jagielski 				{
339*b1cdbd2cSJim Jagielski 					sal_Bool bOldUpdateMode = pOutliner->GetUpdateMode();
340*b1cdbd2cSJim Jagielski 
341*b1cdbd2cSJim Jagielski 					pOutliner->SetUpdateMode( sal_False );
342*b1cdbd2cSJim Jagielski 
343*b1cdbd2cSJim Jagielski 					const EditEngine& rEdit = pOutliner->GetEditEngine();
344*b1cdbd2cSJim Jagielski 					const int nParaCount = rEdit.GetParagraphCount();
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski 					for( int nPara = nParaCount - 2; nPara >= 0; nPara-- )
347*b1cdbd2cSJim Jagielski 					{
348*b1cdbd2cSJim Jagielski 						const sal_uInt16 nParaLen = (sal_uInt16)rEdit.GetTextLen( (sal_uInt16)nPara );
349*b1cdbd2cSJim Jagielski 						pOutliner->QuickDelete( ESelection( (sal_uInt16)nPara, nParaLen, (sal_uInt16)nPara+1, 0 ) );
350*b1cdbd2cSJim Jagielski 						pOutliner->QuickInsertLineBreak( ESelection( (sal_uInt16)nPara, nParaLen, (sal_uInt16)nPara, nParaLen ) );
351*b1cdbd2cSJim Jagielski 					}
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski 					DBG_ASSERT( rEdit.GetParagraphCount() <= 1, "Titelobjekt contains hard line breaks" );
354*b1cdbd2cSJim Jagielski 					pOutliner->SetUpdateMode(bOldUpdateMode);
355*b1cdbd2cSJim Jagielski 				}
356*b1cdbd2cSJim Jagielski 			}
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski 			if( !mpDoc->IsChanged() )
359*b1cdbd2cSJim Jagielski 			{
360*b1cdbd2cSJim Jagielski 				if( pOutliner && pOutliner->IsModified() )
361*b1cdbd2cSJim Jagielski 					mpDoc->SetChanged( sal_True );
362*b1cdbd2cSJim Jagielski 			}
363*b1cdbd2cSJim Jagielski 		}
364*b1cdbd2cSJim Jagielski 	}
365*b1cdbd2cSJim Jagielski 	else
366*b1cdbd2cSJim Jagielski 	{
367*b1cdbd2cSJim Jagielski         Point       aPos;
368*b1cdbd2cSJim Jagielski 		sal_Int8    nDnDAction = DND_ACTION_COPY;
369*b1cdbd2cSJim Jagielski 
370*b1cdbd2cSJim Jagielski 	    if( pWindow )
371*b1cdbd2cSJim Jagielski 		    aPos = pWindow->PixelToLogic( Rectangle( aPos, pWindow->GetOutputSizePixel() ).Center() );
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski         DrawViewShell* pDrViewSh = (DrawViewShell*) mpDocSh->GetViewShell();
374*b1cdbd2cSJim Jagielski 
375*b1cdbd2cSJim Jagielski         if (pDrViewSh != NULL)
376*b1cdbd2cSJim Jagielski         {
377*b1cdbd2cSJim Jagielski             if( !InsertData( aDataHelper, aPos, nDnDAction, sal_False ) )
378*b1cdbd2cSJim Jagielski             {
379*b1cdbd2cSJim Jagielski 				INetBookmark	aINetBookmark( aEmptyStr, aEmptyStr );
380*b1cdbd2cSJim Jagielski 
381*b1cdbd2cSJim Jagielski 				if( ( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) &&
382*b1cdbd2cSJim Jagielski 					  aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) ) ||
383*b1cdbd2cSJim Jagielski 					( aDataHelper.HasFormat( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR ) &&
384*b1cdbd2cSJim Jagielski 					  aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_FILEGRPDESCRIPTOR, aINetBookmark ) ) ||
385*b1cdbd2cSJim Jagielski 					( aDataHelper.HasFormat( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR ) &&
386*b1cdbd2cSJim Jagielski 					  aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_UNIFORMRESOURCELOCATOR, aINetBookmark ) ) )
387*b1cdbd2cSJim Jagielski 				{
388*b1cdbd2cSJim Jagielski 					pDrViewSh->InsertURLField( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), aEmptyStr, NULL );
389*b1cdbd2cSJim Jagielski 				}
390*b1cdbd2cSJim Jagielski 			}
391*b1cdbd2cSJim Jagielski 		}
392*b1cdbd2cSJim Jagielski 	}
393*b1cdbd2cSJim Jagielski }
394*b1cdbd2cSJim Jagielski 
395*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
396*b1cdbd2cSJim Jagielski 
StartDrag(const Point & rStartPos,::Window * pWindow)397*b1cdbd2cSJim Jagielski void View::StartDrag( const Point& rStartPos, ::Window* pWindow )
398*b1cdbd2cSJim Jagielski {
399*b1cdbd2cSJim Jagielski 	if( AreObjectsMarked() && IsAction() && mpViewSh && pWindow && !mpDragSrcMarkList )
400*b1cdbd2cSJim Jagielski 	{
401*b1cdbd2cSJim Jagielski 		BrkAction();
402*b1cdbd2cSJim Jagielski 
403*b1cdbd2cSJim Jagielski 		if( IsTextEdit() )
404*b1cdbd2cSJim Jagielski             SdrEndTextEdit();
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 		DrawViewShell* pDrawViewShell = dynamic_cast< DrawViewShell* >( mpDocSh ? mpDocSh->GetViewShell() : 0 );
407*b1cdbd2cSJim Jagielski 
408*b1cdbd2cSJim Jagielski 		if( pDrawViewShell )
409*b1cdbd2cSJim Jagielski 		{
410*b1cdbd2cSJim Jagielski 			FunctionReference xFunction( pDrawViewShell->GetCurrentFunction() );
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 			if( xFunction.is() && xFunction->ISA( FuDraw ) )
413*b1cdbd2cSJim Jagielski 				static_cast<FuDraw*>(xFunction.get())->ForcePointer( NULL );
414*b1cdbd2cSJim Jagielski 		}
415*b1cdbd2cSJim Jagielski 
416*b1cdbd2cSJim Jagielski 		mpDragSrcMarkList = new SdrMarkList(GetMarkedObjectList());
417*b1cdbd2cSJim Jagielski 		mnDragSrcPgNum = GetSdrPageView()->GetPage()->GetPageNum();
418*b1cdbd2cSJim Jagielski 
419*b1cdbd2cSJim Jagielski 		if( IsUndoEnabled() )
420*b1cdbd2cSJim Jagielski 		{
421*b1cdbd2cSJim Jagielski 			String aStr( SdResId(STR_UNDO_DRAGDROP) );
422*b1cdbd2cSJim Jagielski 			aStr += sal_Unicode(' ');
423*b1cdbd2cSJim Jagielski 			aStr += mpDragSrcMarkList->GetMarkDescription();
424*b1cdbd2cSJim Jagielski 			BegUndo(aStr);
425*b1cdbd2cSJim Jagielski 		}
426*b1cdbd2cSJim Jagielski 		CreateDragDataObject( this, *pWindow, rStartPos );
427*b1cdbd2cSJim Jagielski 	}
428*b1cdbd2cSJim Jagielski }
429*b1cdbd2cSJim Jagielski 
430*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
431*b1cdbd2cSJim Jagielski 
DragFinished(sal_Int8 nDropAction)432*b1cdbd2cSJim Jagielski void View::DragFinished( sal_Int8 nDropAction )
433*b1cdbd2cSJim Jagielski {
434*b1cdbd2cSJim Jagielski 	const bool bUndo = IsUndoEnabled();
435*b1cdbd2cSJim Jagielski 
436*b1cdbd2cSJim Jagielski 	SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski 	if( pDragTransferable )
439*b1cdbd2cSJim Jagielski 		pDragTransferable->SetView( NULL );
440*b1cdbd2cSJim Jagielski 
441*b1cdbd2cSJim Jagielski 	if( ( nDropAction & DND_ACTION_MOVE ) &&
442*b1cdbd2cSJim Jagielski         pDragTransferable && !pDragTransferable->IsInternalMove() &&
443*b1cdbd2cSJim Jagielski         mpDragSrcMarkList && mpDragSrcMarkList->GetMarkCount() &&
444*b1cdbd2cSJim Jagielski 		!IsPresObjSelected() )
445*b1cdbd2cSJim Jagielski 	{
446*b1cdbd2cSJim Jagielski 		mpDragSrcMarkList->ForceSort();
447*b1cdbd2cSJim Jagielski 
448*b1cdbd2cSJim Jagielski 		if( bUndo )
449*b1cdbd2cSJim Jagielski 			BegUndo();
450*b1cdbd2cSJim Jagielski 
451*b1cdbd2cSJim Jagielski 		sal_uLong nm, nAnz = mpDragSrcMarkList->GetMarkCount();
452*b1cdbd2cSJim Jagielski 
453*b1cdbd2cSJim Jagielski  		for( nm = nAnz; nm>0; )
454*b1cdbd2cSJim Jagielski 		{
455*b1cdbd2cSJim Jagielski 			nm--;
456*b1cdbd2cSJim Jagielski 			SdrMark* pM=mpDragSrcMarkList->GetMark(nm);
457*b1cdbd2cSJim Jagielski 			if( bUndo )
458*b1cdbd2cSJim Jagielski 				AddUndo(mpDoc->GetSdrUndoFactory().CreateUndoDeleteObject(*pM->GetMarkedSdrObj()));
459*b1cdbd2cSJim Jagielski 		}
460*b1cdbd2cSJim Jagielski 
461*b1cdbd2cSJim Jagielski 		mpDragSrcMarkList->GetMark(0)->GetMarkedSdrObj()->GetOrdNum();
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski 		for (nm=nAnz; nm>0;)
464*b1cdbd2cSJim Jagielski 		{
465*b1cdbd2cSJim Jagielski 			nm--;
466*b1cdbd2cSJim Jagielski 			SdrMark* pM=mpDragSrcMarkList->GetMark(nm);
467*b1cdbd2cSJim Jagielski 			SdrObject* pObj=pM->GetMarkedSdrObj();
468*b1cdbd2cSJim Jagielski 			sal_uInt32 nOrdNum=pObj->GetOrdNumDirect();
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski             if( pObj && pObj->GetPage() )
471*b1cdbd2cSJim Jagielski             {
472*b1cdbd2cSJim Jagielski #ifdef DBG_UTIL
473*b1cdbd2cSJim Jagielski 			    SdrObject* pChkObj =
474*b1cdbd2cSJim Jagielski #endif
475*b1cdbd2cSJim Jagielski 					pObj->GetPage()->RemoveObject(nOrdNum);
476*b1cdbd2cSJim Jagielski 			    DBG_ASSERT(pChkObj==pObj,"pChkObj!=pObj beim RemoveObject()");
477*b1cdbd2cSJim Jagielski             }
478*b1cdbd2cSJim Jagielski 		}
479*b1cdbd2cSJim Jagielski 
480*b1cdbd2cSJim Jagielski 		if( bUndo )
481*b1cdbd2cSJim Jagielski 			EndUndo();
482*b1cdbd2cSJim Jagielski 	}
483*b1cdbd2cSJim Jagielski 
484*b1cdbd2cSJim Jagielski 	if( pDragTransferable )
485*b1cdbd2cSJim Jagielski 		pDragTransferable->SetInternalMove( sal_False );
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 	if( bUndo )
488*b1cdbd2cSJim Jagielski 		EndUndo();
489*b1cdbd2cSJim Jagielski 	mnDragSrcPgNum = SDRPAGE_NOTFOUND;
490*b1cdbd2cSJim Jagielski 	delete mpDragSrcMarkList;
491*b1cdbd2cSJim Jagielski 	mpDragSrcMarkList = NULL;
492*b1cdbd2cSJim Jagielski }
493*b1cdbd2cSJim Jagielski 
494*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
495*b1cdbd2cSJim Jagielski 
AcceptDrop(const AcceptDropEvent & rEvt,DropTargetHelper & rTargetHelper,::sd::Window *,sal_uInt16,sal_uInt16 nLayer)496*b1cdbd2cSJim Jagielski sal_Int8 View::AcceptDrop( const AcceptDropEvent& rEvt, DropTargetHelper& rTargetHelper,
497*b1cdbd2cSJim Jagielski                              ::sd::Window*, sal_uInt16, sal_uInt16 nLayer )
498*b1cdbd2cSJim Jagielski {
499*b1cdbd2cSJim Jagielski 	String			aLayerName( GetActiveLayer() );
500*b1cdbd2cSJim Jagielski 	SdrPageView*	pPV = GetSdrPageView();
501*b1cdbd2cSJim Jagielski 	sal_Int8		nDropAction = rEvt.mnAction;
502*b1cdbd2cSJim Jagielski 	sal_Int8		nRet = DND_ACTION_NONE;
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski 	if( nLayer != SDRLAYER_NOTFOUND )
505*b1cdbd2cSJim Jagielski 	{
506*b1cdbd2cSJim Jagielski 		SdrLayerAdmin& rLayerAdmin = mpDoc->GetLayerAdmin();
507*b1cdbd2cSJim Jagielski 		aLayerName = rLayerAdmin.GetLayerPerID(nLayer)->GetName();
508*b1cdbd2cSJim Jagielski 	}
509*b1cdbd2cSJim Jagielski 
510*b1cdbd2cSJim Jagielski 	if( mbIsDropAllowed && !pPV->IsLayerLocked( aLayerName ) && pPV->IsLayerVisible( aLayerName ) )
511*b1cdbd2cSJim Jagielski 	{
512*b1cdbd2cSJim Jagielski 		const OutlinerView* pOLV = GetTextEditOutlinerView();
513*b1cdbd2cSJim Jagielski 		sal_Bool				bIsInsideOutlinerView = sal_False;
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski 		if( pOLV )
516*b1cdbd2cSJim Jagielski 		{
517*b1cdbd2cSJim Jagielski 			Rectangle aRect( pOLV->GetOutputArea() );
518*b1cdbd2cSJim Jagielski 
519*b1cdbd2cSJim Jagielski 			if (GetMarkedObjectCount() == 1)
520*b1cdbd2cSJim Jagielski 			{
521*b1cdbd2cSJim Jagielski 				SdrMark* pMark = GetSdrMarkByIndex(0);
522*b1cdbd2cSJim Jagielski 				SdrObject* pObj = pMark->GetMarkedSdrObj();
523*b1cdbd2cSJim Jagielski 				aRect.Union( pObj->GetLogicRect() );
524*b1cdbd2cSJim Jagielski 			}
525*b1cdbd2cSJim Jagielski 
526*b1cdbd2cSJim Jagielski 			if( aRect.IsInside( pOLV->GetWindow()->PixelToLogic( rEvt.maPosPixel ) ) )
527*b1cdbd2cSJim Jagielski 			{
528*b1cdbd2cSJim Jagielski 				bIsInsideOutlinerView = sal_True;
529*b1cdbd2cSJim Jagielski 			}
530*b1cdbd2cSJim Jagielski 		}
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski 		if( !bIsInsideOutlinerView )
533*b1cdbd2cSJim Jagielski 		{
534*b1cdbd2cSJim Jagielski 			SdTransferable* pDragTransferable = SD_MOD()->pTransferDrag;
535*b1cdbd2cSJim Jagielski 
536*b1cdbd2cSJim Jagielski             if(pDragTransferable && (nDropAction & DND_ACTION_LINK))
537*b1cdbd2cSJim Jagielski             {
538*b1cdbd2cSJim Jagielski                 // suppress own data when it's intention is to use it as fill information
539*b1cdbd2cSJim Jagielski                 pDragTransferable = 0;
540*b1cdbd2cSJim Jagielski             }
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski 			if( pDragTransferable )
543*b1cdbd2cSJim Jagielski 			{
544*b1cdbd2cSJim Jagielski 				const View* pSourceView = pDragTransferable->GetView();
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski 				if( pDragTransferable->IsPageTransferable() )
547*b1cdbd2cSJim Jagielski 				{
548*b1cdbd2cSJim Jagielski 					nRet = DND_ACTION_COPY;
549*b1cdbd2cSJim Jagielski 				}
550*b1cdbd2cSJim Jagielski 				else if( pSourceView )
551*b1cdbd2cSJim Jagielski 				{
552*b1cdbd2cSJim Jagielski 					if( !( nDropAction & DND_ACTION_LINK ) ||
553*b1cdbd2cSJim Jagielski                         pSourceView->GetDocSh()->GetMedium()->GetName().Len() )
554*b1cdbd2cSJim Jagielski                     {
555*b1cdbd2cSJim Jagielski 						nRet = nDropAction;
556*b1cdbd2cSJim Jagielski                     }
557*b1cdbd2cSJim Jagielski 				}
558*b1cdbd2cSJim Jagielski 			}
559*b1cdbd2cSJim Jagielski 			else
560*b1cdbd2cSJim Jagielski 			{
561*b1cdbd2cSJim Jagielski 				const sal_Bool  bDrawing = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_DRAWING );
562*b1cdbd2cSJim Jagielski 				const sal_Bool  bGraphic = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_SVXB );
563*b1cdbd2cSJim Jagielski 				const sal_Bool	bMtf = rTargetHelper.IsDropFormatSupported( FORMAT_GDIMETAFILE );
564*b1cdbd2cSJim Jagielski 				const sal_Bool	bBitmap = rTargetHelper.IsDropFormatSupported( FORMAT_BITMAP );
565*b1cdbd2cSJim Jagielski 				sal_Bool	    bBookmark = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK );
566*b1cdbd2cSJim Jagielski 				sal_Bool	    bXFillExchange = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_XFA );
567*b1cdbd2cSJim Jagielski 
568*b1cdbd2cSJim Jagielski 		        // check handle insert
569*b1cdbd2cSJim Jagielski                 if( !nRet && ( (bXFillExchange && ( SDRDRAG_GRADIENT == GetDragMode() )) || ( SDRDRAG_TRANSPARENCE == GetDragMode() ) ) )
570*b1cdbd2cSJim Jagielski 		        {
571*b1cdbd2cSJim Jagielski 			        const SdrHdlList& rHdlList = GetHdlList();
572*b1cdbd2cSJim Jagielski 
573*b1cdbd2cSJim Jagielski 			        for( sal_uInt32 n = 0; n < rHdlList.GetHdlCount(); n++ )
574*b1cdbd2cSJim Jagielski 			        {
575*b1cdbd2cSJim Jagielski 				        SdrHdl* pIAOHandle = rHdlList.GetHdl( n );
576*b1cdbd2cSJim Jagielski 
577*b1cdbd2cSJim Jagielski 				        if( pIAOHandle && ( HDL_COLR == pIAOHandle->GetKind() ) )
578*b1cdbd2cSJim Jagielski 				        {
579*b1cdbd2cSJim Jagielski 							if(pIAOHandle->getOverlayObjectList().isHitPixel(rEvt.maPosPixel))
580*b1cdbd2cSJim Jagielski 							{
581*b1cdbd2cSJim Jagielski                                 nRet = nDropAction;
582*b1cdbd2cSJim Jagielski 						        static_cast< SdrHdlColor* >( pIAOHandle )->SetSize( SDR_HANDLE_COLOR_SIZE_SELECTED );
583*b1cdbd2cSJim Jagielski 							}
584*b1cdbd2cSJim Jagielski 							else
585*b1cdbd2cSJim Jagielski 							{
586*b1cdbd2cSJim Jagielski 						        static_cast< SdrHdlColor* >( pIAOHandle )->SetSize( SDR_HANDLE_COLOR_SIZE_NORMAL );
587*b1cdbd2cSJim Jagielski 							}
588*b1cdbd2cSJim Jagielski 				        }
589*b1cdbd2cSJim Jagielski 			        }
590*b1cdbd2cSJim Jagielski 		        }
591*b1cdbd2cSJim Jagielski 
592*b1cdbd2cSJim Jagielski 		        // check object insert
593*b1cdbd2cSJim Jagielski 				if( !nRet && ( bXFillExchange || ( ( bDrawing || bGraphic || bMtf || bBitmap || bBookmark ) && ( nDropAction & DND_ACTION_LINK ) ) ) )
594*b1cdbd2cSJim Jagielski 				{
595*b1cdbd2cSJim Jagielski 					SdrObject*		pPickObj = NULL;
596*b1cdbd2cSJim Jagielski 					SdrPageView*	pPageView = NULL;
597*b1cdbd2cSJim Jagielski                     ::sd::Window* pWindow = mpViewSh->GetActiveWindow();
598*b1cdbd2cSJim Jagielski 					Point			aPos( pWindow->PixelToLogic( rEvt.maPosPixel ) );
599*b1cdbd2cSJim Jagielski 					const sal_Bool		bHasPickObj = PickObj( aPos, getHitTolLog(), pPickObj, pPageView );
600*b1cdbd2cSJim Jagielski                     sal_Bool            bIsPresTarget = sal_False;
601*b1cdbd2cSJim Jagielski 
602*b1cdbd2cSJim Jagielski 					if( bHasPickObj && pPickObj && ( pPickObj->IsEmptyPresObj() || pPickObj->GetUserCall() ) )
603*b1cdbd2cSJim Jagielski 					{
604*b1cdbd2cSJim Jagielski 						SdPage* pPage = (SdPage*) pPickObj->GetPage();
605*b1cdbd2cSJim Jagielski 
606*b1cdbd2cSJim Jagielski 						if( pPage && pPage->IsMasterPage() )
607*b1cdbd2cSJim Jagielski 							bIsPresTarget = pPage->IsPresObj( pPickObj );
608*b1cdbd2cSJim Jagielski 					}
609*b1cdbd2cSJim Jagielski 
610*b1cdbd2cSJim Jagielski 					if( bHasPickObj && !bIsPresTarget &&
611*b1cdbd2cSJim Jagielski 					    ( bGraphic || bMtf || bBitmap || bXFillExchange ) )
612*b1cdbd2cSJim Jagielski 					{
613*b1cdbd2cSJim Jagielski 						if( mpDropMarkerObj != pPickObj )
614*b1cdbd2cSJim Jagielski 						{
615*b1cdbd2cSJim Jagielski 							mpDropMarkerObj = pPickObj;
616*b1cdbd2cSJim Jagielski 							ImplClearDrawDropMarker();
617*b1cdbd2cSJim Jagielski 
618*b1cdbd2cSJim Jagielski 							if(mpDropMarkerObj)
619*b1cdbd2cSJim Jagielski 							{
620*b1cdbd2cSJim Jagielski 								mpDropMarker = new SdrDropMarkerOverlay(*this, *mpDropMarkerObj);
621*b1cdbd2cSJim Jagielski 							}
622*b1cdbd2cSJim Jagielski 						}
623*b1cdbd2cSJim Jagielski 
624*b1cdbd2cSJim Jagielski                         nRet = nDropAction;
625*b1cdbd2cSJim Jagielski 					}
626*b1cdbd2cSJim Jagielski 					else
627*b1cdbd2cSJim Jagielski 						bXFillExchange = sal_False;
628*b1cdbd2cSJim Jagielski 				}
629*b1cdbd2cSJim Jagielski 
630*b1cdbd2cSJim Jagielski                 // check normal insert
631*b1cdbd2cSJim Jagielski                 if( !nRet )
632*b1cdbd2cSJim Jagielski                 {
633*b1cdbd2cSJim Jagielski                     const sal_Bool  bSBAFormat = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_SVX_FORMFIELDEXCH );
634*b1cdbd2cSJim Jagielski                     const sal_Bool  bEditEngine = rTargetHelper.IsDropFormatSupported( SOT_FORMATSTR_ID_EDITENGINE );
635*b1cdbd2cSJim Jagielski                     const sal_Bool  bString = rTargetHelper.IsDropFormatSupported( FORMAT_STRING );
636*b1cdbd2cSJim Jagielski                     const sal_Bool  bRTF = rTargetHelper.IsDropFormatSupported( FORMAT_RTF );
637*b1cdbd2cSJim Jagielski                     const sal_Bool  bFile = rTargetHelper.IsDropFormatSupported( FORMAT_FILE );
638*b1cdbd2cSJim Jagielski                     const sal_Bool  bFileList = rTargetHelper.IsDropFormatSupported( FORMAT_FILE_LIST );
639*b1cdbd2cSJim Jagielski 
640*b1cdbd2cSJim Jagielski 					if( mpDropMarker )
641*b1cdbd2cSJim Jagielski 					{
642*b1cdbd2cSJim Jagielski 						ImplClearDrawDropMarker();
643*b1cdbd2cSJim Jagielski 						mpDropMarkerObj = NULL;
644*b1cdbd2cSJim Jagielski 					}
645*b1cdbd2cSJim Jagielski 
646*b1cdbd2cSJim Jagielski 					if( bBookmark && bFile && ( nDropAction & DND_ACTION_MOVE ) && mpViewSh && SlideShow::IsRunning(mpViewSh->GetViewShellBase()) )
647*b1cdbd2cSJim Jagielski 		    			bBookmark = sal_False;
648*b1cdbd2cSJim Jagielski 
649*b1cdbd2cSJim Jagielski 				    if( bDrawing || bGraphic || bMtf || bBitmap || bBookmark || bFile || bFileList || bXFillExchange || bSBAFormat || bEditEngine || bString || bRTF )
650*b1cdbd2cSJim Jagielski 					    nRet = nDropAction;
651*b1cdbd2cSJim Jagielski 
652*b1cdbd2cSJim Jagielski                     // For entries from the navigator, change action copy.
653*b1cdbd2cSJim Jagielski                     if (bBookmark
654*b1cdbd2cSJim Jagielski                         && rTargetHelper.IsDropFormatSupported(
655*b1cdbd2cSJim Jagielski                             SdPageObjsTLB::SdPageObjsTransferable::GetListBoxDropFormatId())
656*b1cdbd2cSJim Jagielski                         && (nDropAction & DND_ACTION_MOVE)!=0)
657*b1cdbd2cSJim Jagielski                     {
658*b1cdbd2cSJim Jagielski                         nRet = DND_ACTION_COPY;
659*b1cdbd2cSJim Jagielski                     }
660*b1cdbd2cSJim Jagielski                 }
661*b1cdbd2cSJim Jagielski     		}
662*b1cdbd2cSJim Jagielski 		}
663*b1cdbd2cSJim Jagielski 	}
664*b1cdbd2cSJim Jagielski 
665*b1cdbd2cSJim Jagielski     // destroy drop marker if this is a leaving event
666*b1cdbd2cSJim Jagielski     if( rEvt.mbLeaving && mpDropMarker )
667*b1cdbd2cSJim Jagielski 	{
668*b1cdbd2cSJim Jagielski 		ImplClearDrawDropMarker();
669*b1cdbd2cSJim Jagielski 		mpDropMarkerObj = NULL;
670*b1cdbd2cSJim Jagielski 	}
671*b1cdbd2cSJim Jagielski 
672*b1cdbd2cSJim Jagielski 	return nRet;
673*b1cdbd2cSJim Jagielski }
674*b1cdbd2cSJim Jagielski 
675*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
676*b1cdbd2cSJim Jagielski 
ExecuteDrop(const ExecuteDropEvent & rEvt,DropTargetHelper & rTargetHelper,::sd::Window * pTargetWindow,sal_uInt16 nPage,sal_uInt16 nLayer)677*b1cdbd2cSJim Jagielski sal_Int8 View::ExecuteDrop( const ExecuteDropEvent& rEvt, DropTargetHelper& rTargetHelper,
678*b1cdbd2cSJim Jagielski                               ::sd::Window* pTargetWindow, sal_uInt16 nPage, sal_uInt16 nLayer )
679*b1cdbd2cSJim Jagielski {
680*b1cdbd2cSJim Jagielski 	SdrPageView*	pPV = GetSdrPageView();
681*b1cdbd2cSJim Jagielski 	String			aActiveLayer = GetActiveLayer();
682*b1cdbd2cSJim Jagielski 	sal_Int8		nDropAction = rEvt.mnAction;
683*b1cdbd2cSJim Jagielski 	sal_Int8		nRet = DND_ACTION_NONE;
684*b1cdbd2cSJim Jagielski 
685*b1cdbd2cSJim Jagielski     // destroy drop marker if it is shown
686*b1cdbd2cSJim Jagielski 	if( mpDropMarker )
687*b1cdbd2cSJim Jagielski 	{
688*b1cdbd2cSJim Jagielski 		ImplClearDrawDropMarker();
689*b1cdbd2cSJim Jagielski 		mpDropMarkerObj = NULL;
690*b1cdbd2cSJim Jagielski 	}
691*b1cdbd2cSJim Jagielski 
692*b1cdbd2cSJim Jagielski 	if( !pPV->IsLayerLocked( aActiveLayer ) )
693*b1cdbd2cSJim Jagielski 	{
694*b1cdbd2cSJim Jagielski 		const OutlinerView* pOLV = GetTextEditOutlinerView();
695*b1cdbd2cSJim Jagielski 		sal_Bool				bIsInsideOutlinerView = sal_False;
696*b1cdbd2cSJim Jagielski 
697*b1cdbd2cSJim Jagielski 		if( pOLV )
698*b1cdbd2cSJim Jagielski 		{
699*b1cdbd2cSJim Jagielski 			Rectangle aRect( pOLV->GetOutputArea() );
700*b1cdbd2cSJim Jagielski 
701*b1cdbd2cSJim Jagielski 			if( GetMarkedObjectCount() == 1 )
702*b1cdbd2cSJim Jagielski 			{
703*b1cdbd2cSJim Jagielski 				SdrMark* pMark = GetSdrMarkByIndex(0);
704*b1cdbd2cSJim Jagielski 				SdrObject* pObj = pMark->GetMarkedSdrObj();
705*b1cdbd2cSJim Jagielski 				aRect.Union( pObj->GetLogicRect() );
706*b1cdbd2cSJim Jagielski 			}
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski 			Point aPos( pOLV->GetWindow()->PixelToLogic( rEvt.maPosPixel ) );
709*b1cdbd2cSJim Jagielski 
710*b1cdbd2cSJim Jagielski 			if( aRect.IsInside( aPos ) )
711*b1cdbd2cSJim Jagielski 			{
712*b1cdbd2cSJim Jagielski 				bIsInsideOutlinerView = sal_True;
713*b1cdbd2cSJim Jagielski 			}
714*b1cdbd2cSJim Jagielski 		}
715*b1cdbd2cSJim Jagielski 
716*b1cdbd2cSJim Jagielski 		if( !bIsInsideOutlinerView )
717*b1cdbd2cSJim Jagielski 		{
718*b1cdbd2cSJim Jagielski 			Point				    aPos;
719*b1cdbd2cSJim Jagielski 			TransferableDataHelper	aDataHelper( rEvt.maDropEvent.Transferable );
720*b1cdbd2cSJim Jagielski 
721*b1cdbd2cSJim Jagielski 			if( pTargetWindow )
722*b1cdbd2cSJim Jagielski 				aPos = pTargetWindow->PixelToLogic( rEvt.maPosPixel );
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski             // handle insert?
725*b1cdbd2cSJim Jagielski             if( (!nRet && ( SDRDRAG_GRADIENT == GetDragMode() )) || (( SDRDRAG_TRANSPARENCE == GetDragMode() ) && aDataHelper.HasFormat( SOT_FORMATSTR_ID_XFA )) )
726*b1cdbd2cSJim Jagielski 	        {
727*b1cdbd2cSJim Jagielski 		        const SdrHdlList& rHdlList = GetHdlList();
728*b1cdbd2cSJim Jagielski 
729*b1cdbd2cSJim Jagielski 		        for( sal_uInt32 n = 0; !nRet && n < rHdlList.GetHdlCount(); n++ )
730*b1cdbd2cSJim Jagielski 		        {
731*b1cdbd2cSJim Jagielski 			        SdrHdl* pIAOHandle = rHdlList.GetHdl( n );
732*b1cdbd2cSJim Jagielski 
733*b1cdbd2cSJim Jagielski 			        if( pIAOHandle && ( HDL_COLR == pIAOHandle->GetKind() ) )
734*b1cdbd2cSJim Jagielski 			        {
735*b1cdbd2cSJim Jagielski 						if(pIAOHandle->getOverlayObjectList().isHitPixel(rEvt.maPosPixel))
736*b1cdbd2cSJim Jagielski 						{
737*b1cdbd2cSJim Jagielski                     		SotStorageStreamRef xStm;
738*b1cdbd2cSJim Jagielski 
739*b1cdbd2cSJim Jagielski                     		if( aDataHelper.GetSotStorageStream( SOT_FORMATSTR_ID_XFA, xStm ) && xStm.Is() )
740*b1cdbd2cSJim Jagielski 		                    {
741*b1cdbd2cSJim Jagielski 			                    XFillExchangeData aFillData( XFillAttrSetItem( &mpDoc->GetPool() ) );
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski                     			*xStm >> aFillData;
744*b1cdbd2cSJim Jagielski                                 const Color aColor( ( (XFillColorItem&) aFillData.GetXFillAttrSetItem()->GetItemSet().Get( XATTR_FILLCOLOR ) ).GetColorValue() );
745*b1cdbd2cSJim Jagielski             					static_cast< SdrHdlColor* >( pIAOHandle )->SetColor( aColor, sal_True );
746*b1cdbd2cSJim Jagielski                                 nRet = nDropAction;
747*b1cdbd2cSJim Jagielski 					        }
748*b1cdbd2cSJim Jagielski 						}
749*b1cdbd2cSJim Jagielski 			        }
750*b1cdbd2cSJim Jagielski 		        }
751*b1cdbd2cSJim Jagielski         	}
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski             // standard insert?
754*b1cdbd2cSJim Jagielski             if( !nRet && InsertData( aDataHelper, aPos, nDropAction, sal_True, 0, nPage, nLayer ) )
755*b1cdbd2cSJim Jagielski     			nRet = nDropAction;
756*b1cdbd2cSJim Jagielski 
757*b1cdbd2cSJim Jagielski 			// special insert?
758*b1cdbd2cSJim Jagielski             if( !nRet && mpViewSh )
759*b1cdbd2cSJim Jagielski 			{
760*b1cdbd2cSJim Jagielski 				String		    aTmpString1, aTmpString2;
761*b1cdbd2cSJim Jagielski 				INetBookmark	aINetBookmark( aTmpString1, aTmpString2 );
762*b1cdbd2cSJim Jagielski 
763*b1cdbd2cSJim Jagielski 				// insert bookmark
764*b1cdbd2cSJim Jagielski 				if( aDataHelper.HasFormat( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK ) &&
765*b1cdbd2cSJim Jagielski 					aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) )
766*b1cdbd2cSJim Jagielski 				{
767*b1cdbd2cSJim Jagielski 				    SdPageObjsTLB::SdPageObjsTransferable* pPageObjsTransferable = SdPageObjsTLB::SdPageObjsTransferable::getImplementation( aDataHelper.GetXTransferable() );
768*b1cdbd2cSJim Jagielski 
769*b1cdbd2cSJim Jagielski 				    if( pPageObjsTransferable &&
770*b1cdbd2cSJim Jagielski 				        ( NAVIGATOR_DRAGTYPE_LINK == pPageObjsTransferable->GetDragType() ||
771*b1cdbd2cSJim Jagielski 				          NAVIGATOR_DRAGTYPE_EMBEDDED == pPageObjsTransferable->GetDragType() ) )
772*b1cdbd2cSJim Jagielski 				    {
773*b1cdbd2cSJim Jagielski 						// insert bookmark from own navigator (handled async. due to possible message box )
774*b1cdbd2cSJim Jagielski 						Application::PostUserEvent( LINK( this, View, ExecuteNavigatorDrop ),
775*b1cdbd2cSJim Jagielski 													new SdNavigatorDropEvent( rEvt, rTargetHelper, pTargetWindow,
776*b1cdbd2cSJim Jagielski                                                                               nPage, nLayer ) );
777*b1cdbd2cSJim Jagielski 						nRet = nDropAction;
778*b1cdbd2cSJim Jagielski 					}
779*b1cdbd2cSJim Jagielski 					else
780*b1cdbd2cSJim Jagielski 					{
781*b1cdbd2cSJim Jagielski 						SdrObject*		pPickObj = NULL;
782*b1cdbd2cSJim Jagielski 						SdrPageView*	pPageView = NULL;
783*b1cdbd2cSJim Jagielski 
784*b1cdbd2cSJim Jagielski 						if( PickObj( aPos, getHitTolLog(), pPickObj, pPageView ) )
785*b1cdbd2cSJim Jagielski 						{
786*b1cdbd2cSJim Jagielski 							// insert as clip action => jump
787*b1cdbd2cSJim Jagielski 							rtl::OUString		aBookmark( aINetBookmark.GetURL() );
788*b1cdbd2cSJim Jagielski 							SdAnimationInfo*	pInfo = mpDoc->GetAnimationInfo( pPickObj );
789*b1cdbd2cSJim Jagielski 							sal_Bool				bCreated = sal_False;
790*b1cdbd2cSJim Jagielski 
791*b1cdbd2cSJim Jagielski 							if( aBookmark.getLength() )
792*b1cdbd2cSJim Jagielski 							{
793*b1cdbd2cSJim Jagielski 								presentation::ClickAction eClickAction = presentation::ClickAction_DOCUMENT;
794*b1cdbd2cSJim Jagielski 
795*b1cdbd2cSJim Jagielski 								sal_Int32 nIndex = aBookmark.indexOf( (sal_Unicode)'#' );
796*b1cdbd2cSJim Jagielski 								if( nIndex != -1 )
797*b1cdbd2cSJim Jagielski 								{
798*b1cdbd2cSJim Jagielski 									const String aDocName( aBookmark.copy( 0, nIndex ) );
799*b1cdbd2cSJim Jagielski 
800*b1cdbd2cSJim Jagielski 									if( mpDocSh->GetMedium()->GetName() == aDocName || mpDocSh->GetName() == aDocName )
801*b1cdbd2cSJim Jagielski 									{
802*b1cdbd2cSJim Jagielski 										// internal jump, only use the part after and including '#'
803*b1cdbd2cSJim Jagielski 										eClickAction = presentation::ClickAction_BOOKMARK;
804*b1cdbd2cSJim Jagielski 										aBookmark = aBookmark.copy( nIndex+1 );
805*b1cdbd2cSJim Jagielski 									}
806*b1cdbd2cSJim Jagielski 								}
807*b1cdbd2cSJim Jagielski 
808*b1cdbd2cSJim Jagielski 								if( !pInfo )
809*b1cdbd2cSJim Jagielski 								{
810*b1cdbd2cSJim Jagielski 									pInfo = SdDrawDocument::GetShapeUserData( *pPickObj, true );
811*b1cdbd2cSJim Jagielski 									bCreated = sal_True;
812*b1cdbd2cSJim Jagielski 								}
813*b1cdbd2cSJim Jagielski 
814*b1cdbd2cSJim Jagielski 								// Undo-Action mit alten und neuen Groessen erzeugen
815*b1cdbd2cSJim Jagielski 								SdAnimationPrmsUndoAction* pAction = new SdAnimationPrmsUndoAction(mpDoc, pPickObj, bCreated);
816*b1cdbd2cSJim Jagielski 								pAction->SetActive(pInfo->mbActive, pInfo->mbActive);
817*b1cdbd2cSJim Jagielski 								pAction->SetEffect(pInfo->meEffect, pInfo->meEffect);
818*b1cdbd2cSJim Jagielski 								pAction->SetTextEffect(pInfo->meTextEffect, pInfo->meTextEffect);
819*b1cdbd2cSJim Jagielski 								pAction->SetSpeed(pInfo->meSpeed, pInfo->meSpeed);
820*b1cdbd2cSJim Jagielski 								pAction->SetDim(pInfo->mbDimPrevious, pInfo->mbDimPrevious);
821*b1cdbd2cSJim Jagielski 								pAction->SetDimColor(pInfo->maDimColor, pInfo->maDimColor);
822*b1cdbd2cSJim Jagielski 								pAction->SetDimHide(pInfo->mbDimHide, pInfo->mbDimHide);
823*b1cdbd2cSJim Jagielski 								pAction->SetSoundOn(pInfo->mbSoundOn, pInfo->mbSoundOn);
824*b1cdbd2cSJim Jagielski 								pAction->SetSound(pInfo->maSoundFile, pInfo->maSoundFile);
825*b1cdbd2cSJim Jagielski 								pAction->SetPlayFull(pInfo->mbPlayFull, pInfo->mbPlayFull);
826*b1cdbd2cSJim Jagielski 								pAction->SetPathObj(pInfo->mpPathObj, pInfo->mpPathObj);
827*b1cdbd2cSJim Jagielski 								pAction->SetClickAction(pInfo->meClickAction, eClickAction);
828*b1cdbd2cSJim Jagielski 								pAction->SetBookmark(pInfo->GetBookmark(), aBookmark);
829*b1cdbd2cSJim Jagielski //								pAction->SetInvisibleInPres(pInfo->mbInvisibleInPresentation, sal_True);
830*b1cdbd2cSJim Jagielski 								pAction->SetVerb(pInfo->mnVerb, pInfo->mnVerb);
831*b1cdbd2cSJim Jagielski 								pAction->SetSecondEffect(pInfo->meSecondEffect, pInfo->meSecondEffect);
832*b1cdbd2cSJim Jagielski 								pAction->SetSecondSpeed(pInfo->meSecondSpeed, pInfo->meSecondSpeed);
833*b1cdbd2cSJim Jagielski 								pAction->SetSecondSoundOn(pInfo->mbSecondSoundOn, pInfo->mbSecondSoundOn);
834*b1cdbd2cSJim Jagielski 								pAction->SetSecondPlayFull(pInfo->mbSecondPlayFull, pInfo->mbSecondPlayFull);
835*b1cdbd2cSJim Jagielski 
836*b1cdbd2cSJim Jagielski 								String aString(SdResId(STR_UNDO_ANIMATION));
837*b1cdbd2cSJim Jagielski 								pAction->SetComment(aString);
838*b1cdbd2cSJim Jagielski 								mpDocSh->GetUndoManager()->AddUndoAction(pAction);
839*b1cdbd2cSJim Jagielski 								pInfo->meClickAction = eClickAction;
840*b1cdbd2cSJim Jagielski 								pInfo->SetBookmark( aBookmark );
841*b1cdbd2cSJim Jagielski 								mpDoc->SetChanged();
842*b1cdbd2cSJim Jagielski 
843*b1cdbd2cSJim Jagielski 								nRet = nDropAction;
844*b1cdbd2cSJim Jagielski 							}
845*b1cdbd2cSJim Jagielski 						}
846*b1cdbd2cSJim Jagielski 						else if( mpViewSh->ISA( DrawViewShell ) )
847*b1cdbd2cSJim Jagielski 						{
848*b1cdbd2cSJim Jagielski 							// insert as normal URL button
849*b1cdbd2cSJim Jagielski 							( (DrawViewShell*) mpViewSh )->InsertURLButton( aINetBookmark.GetURL(), aINetBookmark.GetDescription(), String(), &aPos );
850*b1cdbd2cSJim Jagielski 							nRet = nDropAction;
851*b1cdbd2cSJim Jagielski 						}
852*b1cdbd2cSJim Jagielski 					}
853*b1cdbd2cSJim Jagielski 				}
854*b1cdbd2cSJim Jagielski 			}
855*b1cdbd2cSJim Jagielski 		}
856*b1cdbd2cSJim Jagielski 	}
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski 	return nRet;
859*b1cdbd2cSJim Jagielski }
860*b1cdbd2cSJim Jagielski 
861*b1cdbd2cSJim Jagielski // -----------------------------------------------------------------------------
862*b1cdbd2cSJim Jagielski 
IMPL_LINK(View,ExecuteNavigatorDrop,SdNavigatorDropEvent *,pSdNavigatorDropEvent)863*b1cdbd2cSJim Jagielski IMPL_LINK( View, ExecuteNavigatorDrop, SdNavigatorDropEvent*, pSdNavigatorDropEvent )
864*b1cdbd2cSJim Jagielski {
865*b1cdbd2cSJim Jagielski 	TransferableDataHelper	                aDataHelper( pSdNavigatorDropEvent->maDropEvent.Transferable );
866*b1cdbd2cSJim Jagielski     SdPageObjsTLB::SdPageObjsTransferable*  pPageObjsTransferable = SdPageObjsTLB::SdPageObjsTransferable::getImplementation( aDataHelper.GetXTransferable() );
867*b1cdbd2cSJim Jagielski 	INetBookmark			                aINetBookmark;
868*b1cdbd2cSJim Jagielski 
869*b1cdbd2cSJim Jagielski 	if( pPageObjsTransferable && aDataHelper.GetINetBookmark( SOT_FORMATSTR_ID_NETSCAPE_BOOKMARK, aINetBookmark ) )
870*b1cdbd2cSJim Jagielski 	{
871*b1cdbd2cSJim Jagielski 		Point	aPos;
872*b1cdbd2cSJim Jagielski 		List	aBookmarkList;
873*b1cdbd2cSJim Jagielski 		String	aBookmark;
874*b1cdbd2cSJim Jagielski 		SdPage*	pPage = (SdPage*) GetSdrPageView()->GetPage();
875*b1cdbd2cSJim Jagielski 		sal_uInt16	nPgPos = 0xFFFF;
876*b1cdbd2cSJim Jagielski 
877*b1cdbd2cSJim Jagielski 		if( pSdNavigatorDropEvent->mpTargetWindow )
878*b1cdbd2cSJim Jagielski 			aPos = pSdNavigatorDropEvent->mpTargetWindow->PixelToLogic( pSdNavigatorDropEvent->maPosPixel );
879*b1cdbd2cSJim Jagielski 
880*b1cdbd2cSJim Jagielski 		const rtl::OUString aURL( aINetBookmark.GetURL() );
881*b1cdbd2cSJim Jagielski 		sal_Int32 nIndex = aURL.indexOf( (sal_Unicode)'#' );
882*b1cdbd2cSJim Jagielski 		if( nIndex != -1 )
883*b1cdbd2cSJim Jagielski 			aBookmark = aURL.copy( nIndex+1 );
884*b1cdbd2cSJim Jagielski 		aBookmarkList.Insert( &aBookmark );
885*b1cdbd2cSJim Jagielski 
886*b1cdbd2cSJim Jagielski 		if( !pPage->IsMasterPage() )
887*b1cdbd2cSJim Jagielski 		{
888*b1cdbd2cSJim Jagielski 			if( pPage->GetPageKind() == PK_STANDARD )
889*b1cdbd2cSJim Jagielski 				nPgPos = pPage->GetPageNum() + 2;
890*b1cdbd2cSJim Jagielski 			else if( pPage->GetPageKind() == PK_NOTES )
891*b1cdbd2cSJim Jagielski 				nPgPos = pPage->GetPageNum() + 1;
892*b1cdbd2cSJim Jagielski 		}
893*b1cdbd2cSJim Jagielski 
894*b1cdbd2cSJim Jagielski 		// Um zu gewaehrleisten, dass alle Seitennamen eindeutig sind, werden
895*b1cdbd2cSJim Jagielski 		// die einzufuegenden geprueft und gegebenenfalls in einer Ersatzliste
896*b1cdbd2cSJim Jagielski 		// aufgenommen (bNameOK == sal_False -> Benutzer hat abgebrochen)
897*b1cdbd2cSJim Jagielski 		List*	pExchangeList = NULL;
898*b1cdbd2cSJim Jagielski 		sal_Bool	bLink = ( NAVIGATOR_DRAGTYPE_LINK == pPageObjsTransferable->GetDragType()  ? sal_True : sal_False );
899*b1cdbd2cSJim Jagielski 		sal_Bool	bNameOK = GetExchangeList( pExchangeList, &aBookmarkList, 2 );
900*b1cdbd2cSJim Jagielski 		sal_Bool	bReplace = sal_False;
901*b1cdbd2cSJim Jagielski 
902*b1cdbd2cSJim Jagielski 		// Da man hier nicht weiss, ob es sich um eine Seite oder ein Objekt handelt,
903*b1cdbd2cSJim Jagielski 		// wird eine Liste sowohl mit Seiten, als auch mit Objekten gefuellt.
904*b1cdbd2cSJim Jagielski 		// Sollten Seitennamen und Objektnamen identisch sein gibt es hier natuerlich Probleme !!!
905*b1cdbd2cSJim Jagielski 		if( bNameOK )
906*b1cdbd2cSJim Jagielski 		{
907*b1cdbd2cSJim Jagielski 			mpDoc->InsertBookmark( &aBookmarkList, pExchangeList,
908*b1cdbd2cSJim Jagielski 								  bLink, bReplace, nPgPos, sal_False,
909*b1cdbd2cSJim Jagielski 								  &pPageObjsTransferable->GetDocShell(),
910*b1cdbd2cSJim Jagielski 								  sal_True, &aPos );
911*b1cdbd2cSJim Jagielski 		}
912*b1cdbd2cSJim Jagielski 
913*b1cdbd2cSJim Jagielski 		// Loeschen der ExchangeList
914*b1cdbd2cSJim Jagielski 		if( pExchangeList )
915*b1cdbd2cSJim Jagielski 		{
916*b1cdbd2cSJim Jagielski 			for( void* p = pExchangeList->First(); p; p = pExchangeList->Next() )
917*b1cdbd2cSJim Jagielski 				delete (String*) p;
918*b1cdbd2cSJim Jagielski 
919*b1cdbd2cSJim Jagielski 			delete pExchangeList;
920*b1cdbd2cSJim Jagielski 		}
921*b1cdbd2cSJim Jagielski 	}
922*b1cdbd2cSJim Jagielski 
923*b1cdbd2cSJim Jagielski 	delete pSdNavigatorDropEvent;
924*b1cdbd2cSJim Jagielski 
925*b1cdbd2cSJim Jagielski 	return 0;
926*b1cdbd2cSJim Jagielski }
927*b1cdbd2cSJim Jagielski 
928*b1cdbd2cSJim Jagielski /*************************************************************************
929*b1cdbd2cSJim Jagielski |*
930*b1cdbd2cSJim Jagielski |* Rueckgabeparameter:
931*b1cdbd2cSJim Jagielski |* pExchangeList == NULL -> Namen sind alle eindeutig
932*b1cdbd2cSJim Jagielski |* bNameOK == sal_False -> Benutzer hat abgebrochen
933*b1cdbd2cSJim Jagielski |* nType == 0 -> Seiten
934*b1cdbd2cSJim Jagielski |* nType == 1 -> Objekte
935*b1cdbd2cSJim Jagielski |* nType == 2 -> Seiten + Objekte
936*b1cdbd2cSJim Jagielski |*
937*b1cdbd2cSJim Jagielski \************************************************************************/
938*b1cdbd2cSJim Jagielski 
GetExchangeList(List * & rpExchangeList,List * pBookmarkList,sal_uInt16 nType)939*b1cdbd2cSJim Jagielski sal_Bool View::GetExchangeList( List*& rpExchangeList, List* pBookmarkList, sal_uInt16 nType )
940*b1cdbd2cSJim Jagielski {
941*b1cdbd2cSJim Jagielski 	DBG_ASSERT( !rpExchangeList, "ExchangeList muss NULL sein!");
942*b1cdbd2cSJim Jagielski 
943*b1cdbd2cSJim Jagielski 	sal_Bool bListIdentical = sal_True; // BookmarkList und ExchangeList sind gleich
944*b1cdbd2cSJim Jagielski 	sal_Bool bNameOK = sal_True;		// Name ist eindeutig
945*b1cdbd2cSJim Jagielski 
946*b1cdbd2cSJim Jagielski 	rpExchangeList = new List();
947*b1cdbd2cSJim Jagielski 
948*b1cdbd2cSJim Jagielski 	if( pBookmarkList )
949*b1cdbd2cSJim Jagielski 	{
950*b1cdbd2cSJim Jagielski 		String* pString = (String*) pBookmarkList->First();
951*b1cdbd2cSJim Jagielski 
952*b1cdbd2cSJim Jagielski         while( pString && bNameOK )
953*b1cdbd2cSJim Jagielski 		{
954*b1cdbd2cSJim Jagielski 			String* pNewName = new String( *pString );
955*b1cdbd2cSJim Jagielski 
956*b1cdbd2cSJim Jagielski             if( nType == 0  || nType == 2 )
957*b1cdbd2cSJim Jagielski 				bNameOK = mpDocSh->CheckPageName (
958*b1cdbd2cSJim Jagielski                     mpViewSh->GetActiveWindow(), *pNewName);
959*b1cdbd2cSJim Jagielski 
960*b1cdbd2cSJim Jagielski             if( bNameOK && ( nType == 1  || nType == 2 ) )
961*b1cdbd2cSJim Jagielski             {
962*b1cdbd2cSJim Jagielski                 if( mpDoc->GetObj( *pNewName ) )
963*b1cdbd2cSJim Jagielski 	            {
964*b1cdbd2cSJim Jagielski                     String          aTitle( SdResId( STR_TITLE_NAMEGROUP ) );
965*b1cdbd2cSJim Jagielski                     String          aDesc( SdResId( STR_DESC_NAMEGROUP ) );
966*b1cdbd2cSJim Jagielski 					SvxAbstractDialogFactory* pFact = SvxAbstractDialogFactory::Create();
967*b1cdbd2cSJim Jagielski 					AbstractSvxNameDialog* pDlg = pFact ? pFact->CreateSvxNameDialog( mpViewSh->GetActiveWindow(), *pNewName, aDesc ) : 0;
968*b1cdbd2cSJim Jagielski 					if( pDlg )
969*b1cdbd2cSJim Jagielski 					{
970*b1cdbd2cSJim Jagielski 						pDlg->SetEditHelpId( HID_SD_NAMEDIALOG_OBJECT );
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski 						bNameOK = sal_False;
973*b1cdbd2cSJim Jagielski 						pDlg->SetText( aTitle );
974*b1cdbd2cSJim Jagielski 
975*b1cdbd2cSJim Jagielski 						while( !bNameOK && pDlg->Execute() == RET_OK )
976*b1cdbd2cSJim Jagielski 						{
977*b1cdbd2cSJim Jagielski 							pDlg->GetName( *pNewName );
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski 							if( !mpDoc->GetObj( *pNewName ) )
980*b1cdbd2cSJim Jagielski 								bNameOK = sal_True;
981*b1cdbd2cSJim Jagielski 						}
982*b1cdbd2cSJim Jagielski 
983*b1cdbd2cSJim Jagielski 						delete pDlg;
984*b1cdbd2cSJim Jagielski 					}
985*b1cdbd2cSJim Jagielski 	            }
986*b1cdbd2cSJim Jagielski             }
987*b1cdbd2cSJim Jagielski 
988*b1cdbd2cSJim Jagielski 			if( bListIdentical )
989*b1cdbd2cSJim Jagielski 				bListIdentical = ( *pString == *pNewName );
990*b1cdbd2cSJim Jagielski 
991*b1cdbd2cSJim Jagielski 			rpExchangeList->Insert( pNewName, LIST_APPEND );
992*b1cdbd2cSJim Jagielski 			pString = (String*) pBookmarkList->Next();
993*b1cdbd2cSJim Jagielski 		}
994*b1cdbd2cSJim Jagielski 	}
995*b1cdbd2cSJim Jagielski 
996*b1cdbd2cSJim Jagielski 	// ExchangeList ist mit BookmarkList identisch
997*b1cdbd2cSJim Jagielski 	if( rpExchangeList && bListIdentical )
998*b1cdbd2cSJim Jagielski 	{
999*b1cdbd2cSJim Jagielski 		String* pString = (String*) rpExchangeList->First();
1000*b1cdbd2cSJim Jagielski 		while( pString )
1001*b1cdbd2cSJim Jagielski 		{
1002*b1cdbd2cSJim Jagielski 			delete pString;
1003*b1cdbd2cSJim Jagielski 			pString = (String*) rpExchangeList->Next();
1004*b1cdbd2cSJim Jagielski 		}
1005*b1cdbd2cSJim Jagielski 		delete rpExchangeList;
1006*b1cdbd2cSJim Jagielski 		rpExchangeList = NULL;
1007*b1cdbd2cSJim Jagielski 	}
1008*b1cdbd2cSJim Jagielski 
1009*b1cdbd2cSJim Jagielski 	return( bNameOK );
1010*b1cdbd2cSJim Jagielski }
1011*b1cdbd2cSJim Jagielski 
1012*b1cdbd2cSJim Jagielski typedef std::vector< std::pair< sal_uInt32, sal_uInt32 > > PathSurrogateVector;
1013*b1cdbd2cSJim Jagielski typedef std::vector< SdrObject* > SdrObjectVector;
1014*b1cdbd2cSJim Jagielski 
ImplProcessObjectList(SdrObject * pObj,SdrObjectVector & rVector)1015*b1cdbd2cSJim Jagielski void ImplProcessObjectList(SdrObject* pObj, SdrObjectVector& rVector )
1016*b1cdbd2cSJim Jagielski {
1017*b1cdbd2cSJim Jagielski 	sal_Bool bIsGroup(pObj->IsGroupObject());
1018*b1cdbd2cSJim Jagielski 	if(bIsGroup && pObj->ISA(E3dObject) && !pObj->ISA(E3dScene))
1019*b1cdbd2cSJim Jagielski 		bIsGroup = sal_False;
1020*b1cdbd2cSJim Jagielski 
1021*b1cdbd2cSJim Jagielski 	rVector.push_back( pObj );
1022*b1cdbd2cSJim Jagielski 
1023*b1cdbd2cSJim Jagielski 	if(bIsGroup)
1024*b1cdbd2cSJim Jagielski 	{
1025*b1cdbd2cSJim Jagielski 		SdrObjList* pObjList = pObj->GetSubList();
1026*b1cdbd2cSJim Jagielski 		sal_uInt32 a;
1027*b1cdbd2cSJim Jagielski 		for( a = 0; a < pObjList->GetObjCount(); a++)
1028*b1cdbd2cSJim Jagielski 			ImplProcessObjectList(pObjList->GetObj(a), rVector);
1029*b1cdbd2cSJim Jagielski 	}
1030*b1cdbd2cSJim Jagielski }
1031*b1cdbd2cSJim Jagielski 
GetMarkedObjModel() const1032*b1cdbd2cSJim Jagielski SdrModel* View::GetMarkedObjModel() const
1033*b1cdbd2cSJim Jagielski {
1034*b1cdbd2cSJim Jagielski 	return FmFormView::GetMarkedObjModel();;
1035*b1cdbd2cSJim Jagielski }
1036*b1cdbd2cSJim Jagielski 
Paste(const SdrModel & rMod,const Point & rPos,SdrObjList * pLst,sal_uInt32 nOptions)1037*b1cdbd2cSJim Jagielski sal_Bool View::Paste(const SdrModel& rMod, const Point& rPos, SdrObjList* pLst /* =NULL */, sal_uInt32 nOptions /* =0 */)
1038*b1cdbd2cSJim Jagielski {
1039*b1cdbd2cSJim Jagielski 	return FmFormView::Paste( rMod, rPos, pLst,nOptions );;
1040*b1cdbd2cSJim Jagielski }
1041*b1cdbd2cSJim Jagielski 
1042*b1cdbd2cSJim Jagielski } // end of namespace sd
1043