xref: /aoo4110/main/sd/source/ui/func/fudraw.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 #include <sot/object.hxx>
28*b1cdbd2cSJim Jagielski #include <editeng/eeitem.hxx>
29*b1cdbd2cSJim Jagielski #include <vcl/waitobj.hxx>
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <editeng/flditem.hxx>
32*b1cdbd2cSJim Jagielski #include <svx/svdogrp.hxx>
33*b1cdbd2cSJim Jagielski #include <tools/urlobj.hxx>
34*b1cdbd2cSJim Jagielski #include <vcl/help.hxx>
35*b1cdbd2cSJim Jagielski #include <svx/bmpmask.hxx>
36*b1cdbd2cSJim Jagielski #include <svx/svdotext.hxx>
37*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
38*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
39*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
40*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
41*b1cdbd2cSJim Jagielski #include <svtools/imapobj.hxx>
42*b1cdbd2cSJim Jagielski #include <svx/svxids.hrc>
43*b1cdbd2cSJim Jagielski #include <svx/obj3d.hxx>
44*b1cdbd2cSJim Jagielski #include <svx/polysc3d.hxx>
45*b1cdbd2cSJim Jagielski #include <svx/svdpagv.hxx>
46*b1cdbd2cSJim Jagielski 
47*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include "anminfo.hxx"
50*b1cdbd2cSJim Jagielski #include "anmdef.hxx"
51*b1cdbd2cSJim Jagielski #include "imapinfo.hxx"
52*b1cdbd2cSJim Jagielski #include "app.hrc"
53*b1cdbd2cSJim Jagielski #include "glob.hrc"
54*b1cdbd2cSJim Jagielski #include "strings.hrc"
55*b1cdbd2cSJim Jagielski #include "res_bmp.hrc"
56*b1cdbd2cSJim Jagielski 
57*b1cdbd2cSJim Jagielski #include "app.hxx"
58*b1cdbd2cSJim Jagielski #include "GraphicDocShell.hxx"
59*b1cdbd2cSJim Jagielski #include "fudraw.hxx"
60*b1cdbd2cSJim Jagielski #include "ViewShell.hxx"
61*b1cdbd2cSJim Jagielski #include "FrameView.hxx"
62*b1cdbd2cSJim Jagielski #include "View.hxx"
63*b1cdbd2cSJim Jagielski #ifndef SD_WINDOW_SHELL_HXX
64*b1cdbd2cSJim Jagielski #include "Window.hxx"
65*b1cdbd2cSJim Jagielski #endif
66*b1cdbd2cSJim Jagielski #include "drawdoc.hxx"
67*b1cdbd2cSJim Jagielski #include "DrawDocShell.hxx"
68*b1cdbd2cSJim Jagielski #include "Client.hxx"
69*b1cdbd2cSJim Jagielski #include "sdresid.hxx"
70*b1cdbd2cSJim Jagielski #include "drawview.hxx"
71*b1cdbd2cSJim Jagielski #include "fusel.hxx"
72*b1cdbd2cSJim Jagielski #include <svl/aeitem.hxx>
73*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
74*b1cdbd2cSJim Jagielski #include "slideshow.hxx"
75*b1cdbd2cSJim Jagielski #include <svx/sdrhittesthelper.hxx>
76*b1cdbd2cSJim Jagielski 
77*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
78*b1cdbd2cSJim Jagielski 
79*b1cdbd2cSJim Jagielski namespace sd {
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski TYPEINIT1( FuDraw, FuPoor );
82*b1cdbd2cSJim Jagielski 
83*b1cdbd2cSJim Jagielski /*************************************************************************
84*b1cdbd2cSJim Jagielski |*
85*b1cdbd2cSJim Jagielski |* Base-class for all drawmodul-specific functions
86*b1cdbd2cSJim Jagielski |*
87*b1cdbd2cSJim Jagielski \************************************************************************/
88*b1cdbd2cSJim Jagielski 
FuDraw(ViewShell * pViewSh,::sd::Window * pWin,::sd::View * pView,SdDrawDocument * pDoc,SfxRequest & rReq)89*b1cdbd2cSJim Jagielski FuDraw::FuDraw(ViewShell* pViewSh, ::sd::Window* pWin, ::sd::View* pView,
90*b1cdbd2cSJim Jagielski 			   SdDrawDocument* pDoc, SfxRequest& rReq) :
91*b1cdbd2cSJim Jagielski 	FuPoor(pViewSh, pWin, pView, pDoc, rReq),
92*b1cdbd2cSJim Jagielski 	bMBDown(sal_False),
93*b1cdbd2cSJim Jagielski 	bDragHelpLine(sal_False),
94*b1cdbd2cSJim Jagielski 	bPermanent(sal_False)
95*b1cdbd2cSJim Jagielski {
96*b1cdbd2cSJim Jagielski }
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski /*************************************************************************
99*b1cdbd2cSJim Jagielski |*
100*b1cdbd2cSJim Jagielski |* Destruktor
101*b1cdbd2cSJim Jagielski |*
102*b1cdbd2cSJim Jagielski \************************************************************************/
103*b1cdbd2cSJim Jagielski 
~FuDraw()104*b1cdbd2cSJim Jagielski FuDraw::~FuDraw()
105*b1cdbd2cSJim Jagielski {
106*b1cdbd2cSJim Jagielski 	mpView->BrkAction();
107*b1cdbd2cSJim Jagielski }
108*b1cdbd2cSJim Jagielski 
109*b1cdbd2cSJim Jagielski /*************************************************************************
110*b1cdbd2cSJim Jagielski |*
111*b1cdbd2cSJim Jagielski |* MouseButtonDown-event
112*b1cdbd2cSJim Jagielski |*
113*b1cdbd2cSJim Jagielski \************************************************************************/
114*b1cdbd2cSJim Jagielski 
MouseButtonDown(const MouseEvent & rMEvt)115*b1cdbd2cSJim Jagielski sal_Bool FuDraw::MouseButtonDown(const MouseEvent& rMEvt)
116*b1cdbd2cSJim Jagielski {
117*b1cdbd2cSJim Jagielski 	// #95491# remember button state for creation of own MouseEvents
118*b1cdbd2cSJim Jagielski 	SetMouseButtonCode(rMEvt.GetButtons());
119*b1cdbd2cSJim Jagielski 
120*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = sal_False;
121*b1cdbd2cSJim Jagielski 
122*b1cdbd2cSJim Jagielski 	bDragHelpLine = sal_False;
123*b1cdbd2cSJim Jagielski 
124*b1cdbd2cSJim Jagielski 	aMDPos = mpWindow->PixelToLogic( rMEvt.GetPosPixel() );
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski 	if ( rMEvt.IsLeft() )
127*b1cdbd2cSJim Jagielski 	{
128*b1cdbd2cSJim Jagielski 		FrameView* pFrameView = mpViewShell->GetFrameView();
129*b1cdbd2cSJim Jagielski 
130*b1cdbd2cSJim Jagielski //		  sal_Bool bOrtho = mpView->IsOrthoDesired() || pFrameView->IsOrtho();
131*b1cdbd2cSJim Jagielski //		  bOrtho = bOrtho != rMEvt.IsShift();
132*b1cdbd2cSJim Jagielski 		sal_Bool bOrtho = sal_False;
133*b1cdbd2cSJim Jagielski 
134*b1cdbd2cSJim Jagielski 		sal_Bool bRestricted = sal_True;
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski 		if (mpView->IsDragObj())
137*b1cdbd2cSJim Jagielski 		{
138*b1cdbd2cSJim Jagielski 			// object is dragged (move, resize,...)
139*b1cdbd2cSJim Jagielski 			const SdrHdl* pHdl = mpView->GetDragStat().GetHdl();
140*b1cdbd2cSJim Jagielski 
141*b1cdbd2cSJim Jagielski 			if (!pHdl || (!pHdl->IsCornerHdl() && !pHdl->IsVertexHdl()))
142*b1cdbd2cSJim Jagielski 			{
143*b1cdbd2cSJim Jagielski 				// Move
144*b1cdbd2cSJim Jagielski 				bRestricted = sal_False;
145*b1cdbd2cSJim Jagielski 			}
146*b1cdbd2cSJim Jagielski 		}
147*b1cdbd2cSJim Jagielski 
148*b1cdbd2cSJim Jagielski 		// #i33136#
149*b1cdbd2cSJim Jagielski 		if(bRestricted && doConstructOrthogonal())
150*b1cdbd2cSJim Jagielski 		{
151*b1cdbd2cSJim Jagielski 			// Restrict movement:
152*b1cdbd2cSJim Jagielski 			// rectangle->quadrat, ellipse->circle etc.
153*b1cdbd2cSJim Jagielski 			bOrtho = !rMEvt.IsShift();
154*b1cdbd2cSJim Jagielski 		}
155*b1cdbd2cSJim Jagielski 		else
156*b1cdbd2cSJim Jagielski 		{
157*b1cdbd2cSJim Jagielski 			bOrtho = rMEvt.IsShift() != pFrameView->IsOrtho();
158*b1cdbd2cSJim Jagielski 		}
159*b1cdbd2cSJim Jagielski 
160*b1cdbd2cSJim Jagielski 		if (!mpView->IsSnapEnabled())
161*b1cdbd2cSJim Jagielski 			mpView->SetSnapEnabled(sal_True);
162*b1cdbd2cSJim Jagielski 		sal_Bool bSnapModPressed = rMEvt.IsMod1();
163*b1cdbd2cSJim Jagielski 
164*b1cdbd2cSJim Jagielski 		sal_Bool bGridSnap = pFrameView->IsGridSnap();
165*b1cdbd2cSJim Jagielski 		bGridSnap = (bSnapModPressed != bGridSnap);
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski 		if (mpView->IsGridSnap() != bGridSnap)
168*b1cdbd2cSJim Jagielski 			mpView->SetGridSnap(bGridSnap);
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski 		sal_Bool bBordSnap = pFrameView->IsBordSnap();
171*b1cdbd2cSJim Jagielski 		bBordSnap = (bSnapModPressed != bBordSnap);
172*b1cdbd2cSJim Jagielski 
173*b1cdbd2cSJim Jagielski 		if (mpView->IsBordSnap() != bBordSnap)
174*b1cdbd2cSJim Jagielski 			mpView->SetBordSnap(bBordSnap);
175*b1cdbd2cSJim Jagielski 
176*b1cdbd2cSJim Jagielski 		sal_Bool bHlplSnap = pFrameView->IsHlplSnap();
177*b1cdbd2cSJim Jagielski 		bHlplSnap = (bSnapModPressed != bHlplSnap);
178*b1cdbd2cSJim Jagielski 
179*b1cdbd2cSJim Jagielski 		if (mpView->IsHlplSnap() != bHlplSnap)
180*b1cdbd2cSJim Jagielski 			mpView->SetHlplSnap(bHlplSnap);
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski 		sal_Bool bOFrmSnap = pFrameView->IsOFrmSnap();
183*b1cdbd2cSJim Jagielski 		bOFrmSnap = (bSnapModPressed != bOFrmSnap);
184*b1cdbd2cSJim Jagielski 
185*b1cdbd2cSJim Jagielski 		if (mpView->IsOFrmSnap() != bOFrmSnap)
186*b1cdbd2cSJim Jagielski 			mpView->SetOFrmSnap(bOFrmSnap);
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski 		sal_Bool bOPntSnap = pFrameView->IsOPntSnap();
189*b1cdbd2cSJim Jagielski 		bOPntSnap = (bSnapModPressed != bOPntSnap);
190*b1cdbd2cSJim Jagielski 
191*b1cdbd2cSJim Jagielski 		if (mpView->IsOPntSnap() != bOPntSnap)
192*b1cdbd2cSJim Jagielski 			mpView->SetOPntSnap(bOPntSnap);
193*b1cdbd2cSJim Jagielski 
194*b1cdbd2cSJim Jagielski 		sal_Bool bOConSnap = pFrameView->IsOConSnap();
195*b1cdbd2cSJim Jagielski 		bOConSnap = (bSnapModPressed != bOConSnap);
196*b1cdbd2cSJim Jagielski 
197*b1cdbd2cSJim Jagielski 		if (mpView->IsOConSnap() != bOConSnap)
198*b1cdbd2cSJim Jagielski 			mpView->SetOConSnap(bOConSnap);
199*b1cdbd2cSJim Jagielski 
200*b1cdbd2cSJim Jagielski 		sal_Bool bAngleSnap = rMEvt.IsShift() == !pFrameView->IsAngleSnapEnabled();
201*b1cdbd2cSJim Jagielski 
202*b1cdbd2cSJim Jagielski 		if (mpView->IsAngleSnapEnabled() != bAngleSnap)
203*b1cdbd2cSJim Jagielski 			mpView->SetAngleSnapEnabled(bAngleSnap);
204*b1cdbd2cSJim Jagielski 
205*b1cdbd2cSJim Jagielski 		if (mpView->IsOrtho() != bOrtho)
206*b1cdbd2cSJim Jagielski 			mpView->SetOrtho(bOrtho);
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 		sal_Bool bCenter = rMEvt.IsMod2();
209*b1cdbd2cSJim Jagielski 
210*b1cdbd2cSJim Jagielski 		if ( mpView->IsCreate1stPointAsCenter() != bCenter ||
211*b1cdbd2cSJim Jagielski 			 mpView->IsResizeAtCenter() != bCenter )
212*b1cdbd2cSJim Jagielski 		{
213*b1cdbd2cSJim Jagielski 			mpView->SetCreate1stPointAsCenter(bCenter);
214*b1cdbd2cSJim Jagielski 			mpView->SetResizeAtCenter(bCenter);
215*b1cdbd2cSJim Jagielski 		}
216*b1cdbd2cSJim Jagielski 
217*b1cdbd2cSJim Jagielski 		SdrPageView* pPV = 0;
218*b1cdbd2cSJim Jagielski 		sal_uInt16 nHitLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(HITPIX,0)).Width() );
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 		// #76572# look only for HelpLines when they are visible (!)
221*b1cdbd2cSJim Jagielski 		sal_Bool bHelpLine(sal_False);
222*b1cdbd2cSJim Jagielski 		if(mpView->IsHlplVisible())
223*b1cdbd2cSJim Jagielski 			bHelpLine = mpView->PickHelpLine(aMDPos, nHitLog, *mpWindow, nHelpLine, pPV);
224*b1cdbd2cSJim Jagielski 		sal_Bool bHitHdl = (mpView->PickHandle(aMDPos) != NULL);
225*b1cdbd2cSJim Jagielski 
226*b1cdbd2cSJim Jagielski 		if ( bHelpLine
227*b1cdbd2cSJim Jagielski 			&& !mpView->IsCreateObj()
228*b1cdbd2cSJim Jagielski 			&& ((mpView->GetEditMode() == SDREDITMODE_EDIT && !bHitHdl) || (rMEvt.IsShift() && bSnapModPressed)) )
229*b1cdbd2cSJim Jagielski 		{
230*b1cdbd2cSJim Jagielski 			mpWindow->CaptureMouse();
231*b1cdbd2cSJim Jagielski 			mpView->BegDragHelpLine(nHelpLine, pPV);
232*b1cdbd2cSJim Jagielski 			bDragHelpLine = mpView->IsDragHelpLine();
233*b1cdbd2cSJim Jagielski 			bReturn = sal_True;
234*b1cdbd2cSJim Jagielski 		}
235*b1cdbd2cSJim Jagielski 	}
236*b1cdbd2cSJim Jagielski 	ForcePointer(&rMEvt);
237*b1cdbd2cSJim Jagielski 
238*b1cdbd2cSJim Jagielski 	return bReturn;
239*b1cdbd2cSJim Jagielski }
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski /*************************************************************************
242*b1cdbd2cSJim Jagielski |*
243*b1cdbd2cSJim Jagielski |* MouseMove-event
244*b1cdbd2cSJim Jagielski |*
245*b1cdbd2cSJim Jagielski \************************************************************************/
246*b1cdbd2cSJim Jagielski 
MouseMove(const MouseEvent & rMEvt)247*b1cdbd2cSJim Jagielski sal_Bool FuDraw::MouseMove(const MouseEvent& rMEvt)
248*b1cdbd2cSJim Jagielski {
249*b1cdbd2cSJim Jagielski 	FrameView* pFrameView = mpViewShell->GetFrameView();
250*b1cdbd2cSJim Jagielski 	Point aPos = mpWindow->PixelToLogic( rMEvt.GetPosPixel() );
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski //	  sal_Bool bOrtho = mpView->IsOrthoDesired() || pFrameView->IsOrtho();
253*b1cdbd2cSJim Jagielski //	  bOrtho = bOrtho != rMEvt.IsShift();
254*b1cdbd2cSJim Jagielski 	sal_Bool bOrtho = sal_False;
255*b1cdbd2cSJim Jagielski 
256*b1cdbd2cSJim Jagielski 	sal_Bool bRestricted = sal_True;
257*b1cdbd2cSJim Jagielski 
258*b1cdbd2cSJim Jagielski 	if (mpView->IsDragObj())
259*b1cdbd2cSJim Jagielski 	{
260*b1cdbd2cSJim Jagielski 		// object is dragged (move, resize, ...)
261*b1cdbd2cSJim Jagielski 		const SdrHdl* pHdl = mpView->GetDragStat().GetHdl();
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski 		if (!pHdl || (!pHdl->IsCornerHdl() && !pHdl->IsVertexHdl()))
264*b1cdbd2cSJim Jagielski 		{
265*b1cdbd2cSJim Jagielski 			// Move
266*b1cdbd2cSJim Jagielski 			bRestricted = sal_False;
267*b1cdbd2cSJim Jagielski 		}
268*b1cdbd2cSJim Jagielski 	}
269*b1cdbd2cSJim Jagielski 
270*b1cdbd2cSJim Jagielski 	if (mpView->IsAction())
271*b1cdbd2cSJim Jagielski 	{
272*b1cdbd2cSJim Jagielski 		// #i33136#
273*b1cdbd2cSJim Jagielski 		if(bRestricted && doConstructOrthogonal())
274*b1cdbd2cSJim Jagielski 		{
275*b1cdbd2cSJim Jagielski 			// Restrict movement:
276*b1cdbd2cSJim Jagielski 			// rectangle->quadrat, ellipse->circle etc.
277*b1cdbd2cSJim Jagielski 			bOrtho = !rMEvt.IsShift();
278*b1cdbd2cSJim Jagielski 		}
279*b1cdbd2cSJim Jagielski 		else
280*b1cdbd2cSJim Jagielski 		{
281*b1cdbd2cSJim Jagielski 			bOrtho = rMEvt.IsShift() != pFrameView->IsOrtho();
282*b1cdbd2cSJim Jagielski 		}
283*b1cdbd2cSJim Jagielski 
284*b1cdbd2cSJim Jagielski 		sal_Bool bSnapModPressed = rMEvt.IsMod2();
285*b1cdbd2cSJim Jagielski 		mpView->SetDragWithCopy(rMEvt.IsMod1() && pFrameView->IsDragWithCopy());
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski 		sal_Bool bGridSnap = pFrameView->IsGridSnap();
288*b1cdbd2cSJim Jagielski 		bGridSnap = (bSnapModPressed != bGridSnap);
289*b1cdbd2cSJim Jagielski 
290*b1cdbd2cSJim Jagielski 		if (mpView->IsGridSnap() != bGridSnap)
291*b1cdbd2cSJim Jagielski 			mpView->SetGridSnap(bGridSnap);
292*b1cdbd2cSJim Jagielski 
293*b1cdbd2cSJim Jagielski 		sal_Bool bBordSnap = pFrameView->IsBordSnap();
294*b1cdbd2cSJim Jagielski 		bBordSnap = (bSnapModPressed != bBordSnap);
295*b1cdbd2cSJim Jagielski 
296*b1cdbd2cSJim Jagielski 		if (mpView->IsBordSnap() != bBordSnap)
297*b1cdbd2cSJim Jagielski 			mpView->SetBordSnap(bBordSnap);
298*b1cdbd2cSJim Jagielski 
299*b1cdbd2cSJim Jagielski 		sal_Bool bHlplSnap = pFrameView->IsHlplSnap();
300*b1cdbd2cSJim Jagielski 		bHlplSnap = (bSnapModPressed != bHlplSnap);
301*b1cdbd2cSJim Jagielski 
302*b1cdbd2cSJim Jagielski 		if (mpView->IsHlplSnap() != bHlplSnap)
303*b1cdbd2cSJim Jagielski 			mpView->SetHlplSnap(bHlplSnap);
304*b1cdbd2cSJim Jagielski 
305*b1cdbd2cSJim Jagielski 		sal_Bool bOFrmSnap = pFrameView->IsOFrmSnap();
306*b1cdbd2cSJim Jagielski 		bOFrmSnap = (bSnapModPressed != bOFrmSnap);
307*b1cdbd2cSJim Jagielski 
308*b1cdbd2cSJim Jagielski 		if (mpView->IsOFrmSnap() != bOFrmSnap)
309*b1cdbd2cSJim Jagielski 			mpView->SetOFrmSnap(bOFrmSnap);
310*b1cdbd2cSJim Jagielski 
311*b1cdbd2cSJim Jagielski 		sal_Bool bOPntSnap = pFrameView->IsOPntSnap();
312*b1cdbd2cSJim Jagielski 		bOPntSnap = (bSnapModPressed != bOPntSnap);
313*b1cdbd2cSJim Jagielski 
314*b1cdbd2cSJim Jagielski 		if (mpView->IsOPntSnap() != bOPntSnap)
315*b1cdbd2cSJim Jagielski 			mpView->SetOPntSnap(bOPntSnap);
316*b1cdbd2cSJim Jagielski 
317*b1cdbd2cSJim Jagielski 		sal_Bool bOConSnap = pFrameView->IsOConSnap();
318*b1cdbd2cSJim Jagielski 		bOConSnap = (bSnapModPressed != bOConSnap);
319*b1cdbd2cSJim Jagielski 
320*b1cdbd2cSJim Jagielski 		if (mpView->IsOConSnap() != bOConSnap)
321*b1cdbd2cSJim Jagielski 			mpView->SetOConSnap(bOConSnap);
322*b1cdbd2cSJim Jagielski 
323*b1cdbd2cSJim Jagielski 		sal_Bool bAngleSnap = rMEvt.IsShift() == !pFrameView->IsAngleSnapEnabled();
324*b1cdbd2cSJim Jagielski 
325*b1cdbd2cSJim Jagielski 		if (mpView->IsAngleSnapEnabled() != bAngleSnap)
326*b1cdbd2cSJim Jagielski 			mpView->SetAngleSnapEnabled(bAngleSnap);
327*b1cdbd2cSJim Jagielski 
328*b1cdbd2cSJim Jagielski 		if (mpView->IsOrtho() != bOrtho)
329*b1cdbd2cSJim Jagielski 			mpView->SetOrtho(bOrtho);
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski 		sal_Bool bCenter = rMEvt.IsMod2();
332*b1cdbd2cSJim Jagielski 
333*b1cdbd2cSJim Jagielski 		if ( mpView->IsCreate1stPointAsCenter() != bCenter ||
334*b1cdbd2cSJim Jagielski 			 mpView->IsResizeAtCenter() != bCenter )
335*b1cdbd2cSJim Jagielski 		{
336*b1cdbd2cSJim Jagielski 			mpView->SetCreate1stPointAsCenter(bCenter);
337*b1cdbd2cSJim Jagielski 			mpView->SetResizeAtCenter(bCenter);
338*b1cdbd2cSJim Jagielski 		}
339*b1cdbd2cSJim Jagielski 
340*b1cdbd2cSJim Jagielski 		if ( mpView->IsDragHelpLine() )
341*b1cdbd2cSJim Jagielski 			mpView->MovDragHelpLine(aPos);
342*b1cdbd2cSJim Jagielski 	}
343*b1cdbd2cSJim Jagielski 
344*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = mpView->MouseMove(rMEvt, mpWindow);
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski 	if (mpView->IsAction())
347*b1cdbd2cSJim Jagielski 	{
348*b1cdbd2cSJim Jagielski 		// Because the flag set back if necessary in MouseMove
349*b1cdbd2cSJim Jagielski 		if (mpView->IsOrtho() != bOrtho)
350*b1cdbd2cSJim Jagielski 			mpView->SetOrtho(bOrtho);
351*b1cdbd2cSJim Jagielski 	}
352*b1cdbd2cSJim Jagielski 
353*b1cdbd2cSJim Jagielski 	ForcePointer(&rMEvt);
354*b1cdbd2cSJim Jagielski 
355*b1cdbd2cSJim Jagielski 	return bReturn;
356*b1cdbd2cSJim Jagielski }
357*b1cdbd2cSJim Jagielski 
358*b1cdbd2cSJim Jagielski /*************************************************************************
359*b1cdbd2cSJim Jagielski |*
360*b1cdbd2cSJim Jagielski |* MouseButtonUp-event
361*b1cdbd2cSJim Jagielski |*
362*b1cdbd2cSJim Jagielski \************************************************************************/
363*b1cdbd2cSJim Jagielski 
MouseButtonUp(const MouseEvent & rMEvt)364*b1cdbd2cSJim Jagielski sal_Bool FuDraw::MouseButtonUp(const MouseEvent& rMEvt)
365*b1cdbd2cSJim Jagielski {
366*b1cdbd2cSJim Jagielski 	if ( mpView->IsDragHelpLine() )
367*b1cdbd2cSJim Jagielski 		mpView->EndDragHelpLine();
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 	if ( bDragHelpLine )
370*b1cdbd2cSJim Jagielski 	{
371*b1cdbd2cSJim Jagielski 		Rectangle aOutputArea(Point(0,0), mpWindow->GetOutputSizePixel());
372*b1cdbd2cSJim Jagielski 
373*b1cdbd2cSJim Jagielski 		if ( !aOutputArea.IsInside(rMEvt.GetPosPixel()) )
374*b1cdbd2cSJim Jagielski 			mpView->GetSdrPageView()->DeleteHelpLine(nHelpLine);
375*b1cdbd2cSJim Jagielski 
376*b1cdbd2cSJim Jagielski 		mpWindow->ReleaseMouse();
377*b1cdbd2cSJim Jagielski 	}
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski 	FrameView* pFrameView = mpViewShell->GetFrameView();
380*b1cdbd2cSJim Jagielski 	mpView->SetOrtho( pFrameView->IsOrtho() );
381*b1cdbd2cSJim Jagielski 	mpView->SetAngleSnapEnabled( pFrameView->IsAngleSnapEnabled() );
382*b1cdbd2cSJim Jagielski 	mpView->SetSnapEnabled(sal_True);
383*b1cdbd2cSJim Jagielski 	mpView->SetCreate1stPointAsCenter(sal_False);
384*b1cdbd2cSJim Jagielski 	mpView->SetResizeAtCenter(sal_False);
385*b1cdbd2cSJim Jagielski 	mpView->SetDragWithCopy(pFrameView->IsDragWithCopy());
386*b1cdbd2cSJim Jagielski 	mpView->SetGridSnap(pFrameView->IsGridSnap());
387*b1cdbd2cSJim Jagielski 	mpView->SetBordSnap(pFrameView->IsBordSnap());
388*b1cdbd2cSJim Jagielski 	mpView->SetHlplSnap(pFrameView->IsHlplSnap());
389*b1cdbd2cSJim Jagielski 	mpView->SetOFrmSnap(pFrameView->IsOFrmSnap());
390*b1cdbd2cSJim Jagielski 	mpView->SetOPntSnap(pFrameView->IsOPntSnap());
391*b1cdbd2cSJim Jagielski 	mpView->SetOConSnap(pFrameView->IsOConSnap());
392*b1cdbd2cSJim Jagielski 
393*b1cdbd2cSJim Jagielski 	bIsInDragMode = sal_False;
394*b1cdbd2cSJim Jagielski 	ForcePointer(&rMEvt);
395*b1cdbd2cSJim Jagielski 	FuPoor::MouseButtonUp(rMEvt);
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski 	return sal_False;
398*b1cdbd2cSJim Jagielski }
399*b1cdbd2cSJim Jagielski 
400*b1cdbd2cSJim Jagielski /*************************************************************************
401*b1cdbd2cSJim Jagielski |*
402*b1cdbd2cSJim Jagielski |* Process keyboard-events
403*b1cdbd2cSJim Jagielski |*
404*b1cdbd2cSJim Jagielski |* When processing a KeyEvent the returnvalue is sal_True, otherwise sal_False.
405*b1cdbd2cSJim Jagielski |*
406*b1cdbd2cSJim Jagielski \************************************************************************/
407*b1cdbd2cSJim Jagielski 
KeyInput(const KeyEvent & rKEvt)408*b1cdbd2cSJim Jagielski sal_Bool FuDraw::KeyInput(const KeyEvent& rKEvt)
409*b1cdbd2cSJim Jagielski {
410*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = sal_False;
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 	switch ( rKEvt.GetKeyCode().GetCode() )
413*b1cdbd2cSJim Jagielski 	{
414*b1cdbd2cSJim Jagielski 		case KEY_ESCAPE:
415*b1cdbd2cSJim Jagielski 		{
416*b1cdbd2cSJim Jagielski 			bReturn = FuDraw::cancel();
417*b1cdbd2cSJim Jagielski 		}
418*b1cdbd2cSJim Jagielski 		break;
419*b1cdbd2cSJim Jagielski 
420*b1cdbd2cSJim Jagielski 		case KEY_DELETE:
421*b1cdbd2cSJim Jagielski 		case KEY_BACKSPACE:
422*b1cdbd2cSJim Jagielski 		{
423*b1cdbd2cSJim Jagielski 			if (!mpDocSh->IsReadOnly())
424*b1cdbd2cSJim Jagielski 			{
425*b1cdbd2cSJim Jagielski 				if ( mpView && mpView->IsPresObjSelected(sal_False, sal_True, sal_False, sal_True) )
426*b1cdbd2cSJim Jagielski 				{
427*b1cdbd2cSJim Jagielski 					InfoBox(mpWindow, String(SdResId(STR_ACTION_NOTPOSSIBLE) ) ).Execute();
428*b1cdbd2cSJim Jagielski 				}
429*b1cdbd2cSJim Jagielski 				else
430*b1cdbd2cSJim Jagielski 				{
431*b1cdbd2cSJim Jagielski 					// Falls IP-Client aktiv, werden die Pointer
432*b1cdbd2cSJim Jagielski 					// auf das OLE- und das alte Graphic-Object
433*b1cdbd2cSJim Jagielski 					// am SdClient zurueckgesetzt, damit bei
434*b1cdbd2cSJim Jagielski 					// ::SelectionHasChanged nach dem Loeschen
435*b1cdbd2cSJim Jagielski 					// nicht mehr versucht wird, ein Grafik-Objekt
436*b1cdbd2cSJim Jagielski 					// zu restaurieren, das gar nicht mehr existiert.
437*b1cdbd2cSJim Jagielski 					// Alle anderen OLE-Objekte sind davon nicht
438*b1cdbd2cSJim Jagielski 					// betroffen (KA 06.10.95)
439*b1cdbd2cSJim Jagielski                     OSL_ASSERT (mpViewShell->GetViewShell()!=NULL);
440*b1cdbd2cSJim Jagielski 					Client* pIPClient = static_cast<Client*>(
441*b1cdbd2cSJim Jagielski                         mpViewShell->GetViewShell()->GetIPClient());
442*b1cdbd2cSJim Jagielski                     if (pIPClient && pIPClient->IsObjectInPlaceActive())
443*b1cdbd2cSJim Jagielski 						pIPClient->SetSdrGrafObj(NULL);
444*b1cdbd2cSJim Jagielski 
445*b1cdbd2cSJim Jagielski 					// wait-mousepointer while deleting object
446*b1cdbd2cSJim Jagielski 					WaitObject aWait( (Window*)mpViewShell->GetActiveWindow() );
447*b1cdbd2cSJim Jagielski 					// delete object
448*b1cdbd2cSJim Jagielski 					mpView->DeleteMarked();
449*b1cdbd2cSJim Jagielski 				}
450*b1cdbd2cSJim Jagielski 			}
451*b1cdbd2cSJim Jagielski 			bReturn = sal_True;
452*b1cdbd2cSJim Jagielski 		}
453*b1cdbd2cSJim Jagielski 		break;
454*b1cdbd2cSJim Jagielski 
455*b1cdbd2cSJim Jagielski 		case KEY_TAB:
456*b1cdbd2cSJim Jagielski 		{
457*b1cdbd2cSJim Jagielski 			KeyCode aCode = rKEvt.GetKeyCode();
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski 			if ( !aCode.IsMod1() && !aCode.IsMod2() )
460*b1cdbd2cSJim Jagielski 			{
461*b1cdbd2cSJim Jagielski 				// #105336# Moved next line which was a bugfix itself into
462*b1cdbd2cSJim Jagielski 				// the scope which really does the object selection travel
463*b1cdbd2cSJim Jagielski 				// and thus is allowed to call SelectionHasChanged().
464*b1cdbd2cSJim Jagielski 
465*b1cdbd2cSJim Jagielski 				// Switch to FuSelect.
466*b1cdbd2cSJim Jagielski 				mpViewShell->GetViewFrame()->GetDispatcher()->Execute(
467*b1cdbd2cSJim Jagielski 					SID_OBJECT_SELECT,
468*b1cdbd2cSJim Jagielski 					SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
469*b1cdbd2cSJim Jagielski 
470*b1cdbd2cSJim Jagielski 				// changeover to the next object
471*b1cdbd2cSJim Jagielski 				if(!mpView->MarkNextObj( !aCode.IsShift() ))
472*b1cdbd2cSJim Jagielski 				{
473*b1cdbd2cSJim Jagielski 					//If there is only one object, don't do the UnmarkAlllObj() & MarkNextObj().
474*b1cdbd2cSJim Jagielski 					if ( mpView->GetMarkableObjCount() > 1 && mpView->AreObjectsMarked() )
475*b1cdbd2cSJim Jagielski 					{
476*b1cdbd2cSJim Jagielski 						// #97016# No next object: go over open end and
477*b1cdbd2cSJim Jagielski 						// get first from the other side
478*b1cdbd2cSJim Jagielski 						mpView->UnmarkAllObj();
479*b1cdbd2cSJim Jagielski 						mpView->MarkNextObj(!aCode.IsShift());
480*b1cdbd2cSJim Jagielski 					}
481*b1cdbd2cSJim Jagielski 				}
482*b1cdbd2cSJim Jagielski 
483*b1cdbd2cSJim Jagielski 				// #97016# II
484*b1cdbd2cSJim Jagielski 				if(mpView->AreObjectsMarked())
485*b1cdbd2cSJim Jagielski 					mpView->MakeVisible(mpView->GetAllMarkedRect(), *mpWindow);
486*b1cdbd2cSJim Jagielski 
487*b1cdbd2cSJim Jagielski 				bReturn = sal_True;
488*b1cdbd2cSJim Jagielski 			}
489*b1cdbd2cSJim Jagielski 		}
490*b1cdbd2cSJim Jagielski 		break;
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski 		case KEY_END:
493*b1cdbd2cSJim Jagielski 		{
494*b1cdbd2cSJim Jagielski 			KeyCode aCode = rKEvt.GetKeyCode();
495*b1cdbd2cSJim Jagielski 
496*b1cdbd2cSJim Jagielski 			if ( aCode.IsMod1() )
497*b1cdbd2cSJim Jagielski 			{
498*b1cdbd2cSJim Jagielski 				// #97016# mark last object
499*b1cdbd2cSJim Jagielski 				mpView->UnmarkAllObj();
500*b1cdbd2cSJim Jagielski 				mpView->MarkNextObj(sal_False);
501*b1cdbd2cSJim Jagielski 
502*b1cdbd2cSJim Jagielski 				// #97016# II
503*b1cdbd2cSJim Jagielski 				if(mpView->AreObjectsMarked())
504*b1cdbd2cSJim Jagielski 					mpView->MakeVisible(mpView->GetAllMarkedRect(), *mpWindow);
505*b1cdbd2cSJim Jagielski 
506*b1cdbd2cSJim Jagielski 				bReturn = sal_True;
507*b1cdbd2cSJim Jagielski 			}
508*b1cdbd2cSJim Jagielski 		}
509*b1cdbd2cSJim Jagielski 		break;
510*b1cdbd2cSJim Jagielski 
511*b1cdbd2cSJim Jagielski 		case KEY_HOME:
512*b1cdbd2cSJim Jagielski 		{
513*b1cdbd2cSJim Jagielski 			KeyCode aCode = rKEvt.GetKeyCode();
514*b1cdbd2cSJim Jagielski 
515*b1cdbd2cSJim Jagielski 			if ( aCode.IsMod1() )
516*b1cdbd2cSJim Jagielski 			{
517*b1cdbd2cSJim Jagielski 				// #97016# mark first object
518*b1cdbd2cSJim Jagielski 				mpView->UnmarkAllObj();
519*b1cdbd2cSJim Jagielski 				mpView->MarkNextObj(sal_True);
520*b1cdbd2cSJim Jagielski 
521*b1cdbd2cSJim Jagielski 				// #97016# II
522*b1cdbd2cSJim Jagielski 				if(mpView->AreObjectsMarked())
523*b1cdbd2cSJim Jagielski 					mpView->MakeVisible(mpView->GetAllMarkedRect(), *mpWindow);
524*b1cdbd2cSJim Jagielski 
525*b1cdbd2cSJim Jagielski 				bReturn = sal_True;
526*b1cdbd2cSJim Jagielski 			}
527*b1cdbd2cSJim Jagielski 		}
528*b1cdbd2cSJim Jagielski 		break;
529*b1cdbd2cSJim Jagielski 
530*b1cdbd2cSJim Jagielski 		default:
531*b1cdbd2cSJim Jagielski 		break;
532*b1cdbd2cSJim Jagielski 	}
533*b1cdbd2cSJim Jagielski 
534*b1cdbd2cSJim Jagielski 	if (!bReturn)
535*b1cdbd2cSJim Jagielski 	{
536*b1cdbd2cSJim Jagielski 		bReturn = FuPoor::KeyInput(rKEvt);
537*b1cdbd2cSJim Jagielski 	}
538*b1cdbd2cSJim Jagielski 	else
539*b1cdbd2cSJim Jagielski 	{
540*b1cdbd2cSJim Jagielski 		mpWindow->ReleaseMouse();
541*b1cdbd2cSJim Jagielski 	}
542*b1cdbd2cSJim Jagielski 
543*b1cdbd2cSJim Jagielski 	return (bReturn);
544*b1cdbd2cSJim Jagielski }
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski /*************************************************************************
547*b1cdbd2cSJim Jagielski |*
548*b1cdbd2cSJim Jagielski |* Fade out the selection-presentation before scrolling
549*b1cdbd2cSJim Jagielski |*
550*b1cdbd2cSJim Jagielski \************************************************************************/
551*b1cdbd2cSJim Jagielski 
ScrollStart()552*b1cdbd2cSJim Jagielski void FuDraw::ScrollStart()
553*b1cdbd2cSJim Jagielski {
554*b1cdbd2cSJim Jagielski }
555*b1cdbd2cSJim Jagielski 
556*b1cdbd2cSJim Jagielski /*************************************************************************
557*b1cdbd2cSJim Jagielski |*
558*b1cdbd2cSJim Jagielski |* After scrolling show the selection-presentation again
559*b1cdbd2cSJim Jagielski |*
560*b1cdbd2cSJim Jagielski \************************************************************************/
561*b1cdbd2cSJim Jagielski 
ScrollEnd()562*b1cdbd2cSJim Jagielski void FuDraw::ScrollEnd()
563*b1cdbd2cSJim Jagielski {
564*b1cdbd2cSJim Jagielski }
565*b1cdbd2cSJim Jagielski 
566*b1cdbd2cSJim Jagielski /*************************************************************************
567*b1cdbd2cSJim Jagielski |*
568*b1cdbd2cSJim Jagielski |* Aktivate function
569*b1cdbd2cSJim Jagielski |*
570*b1cdbd2cSJim Jagielski \************************************************************************/
571*b1cdbd2cSJim Jagielski 
Activate()572*b1cdbd2cSJim Jagielski void FuDraw::Activate()
573*b1cdbd2cSJim Jagielski {
574*b1cdbd2cSJim Jagielski 	FuPoor::Activate();
575*b1cdbd2cSJim Jagielski 	ForcePointer();
576*b1cdbd2cSJim Jagielski }
577*b1cdbd2cSJim Jagielski 
578*b1cdbd2cSJim Jagielski /*************************************************************************
579*b1cdbd2cSJim Jagielski |*
580*b1cdbd2cSJim Jagielski |* Deaktivate function
581*b1cdbd2cSJim Jagielski |*
582*b1cdbd2cSJim Jagielski \************************************************************************/
583*b1cdbd2cSJim Jagielski 
Deactivate()584*b1cdbd2cSJim Jagielski void FuDraw::Deactivate()
585*b1cdbd2cSJim Jagielski {
586*b1cdbd2cSJim Jagielski 	FuPoor::Deactivate();
587*b1cdbd2cSJim Jagielski }
588*b1cdbd2cSJim Jagielski 
589*b1cdbd2cSJim Jagielski 
590*b1cdbd2cSJim Jagielski /*************************************************************************
591*b1cdbd2cSJim Jagielski |*
592*b1cdbd2cSJim Jagielski |* Toggle mouse-pointer
593*b1cdbd2cSJim Jagielski |*
594*b1cdbd2cSJim Jagielski \************************************************************************/
595*b1cdbd2cSJim Jagielski 
ForcePointer(const MouseEvent * pMEvt)596*b1cdbd2cSJim Jagielski void FuDraw::ForcePointer(const MouseEvent* pMEvt)
597*b1cdbd2cSJim Jagielski {
598*b1cdbd2cSJim Jagielski 	Point aPnt;
599*b1cdbd2cSJim Jagielski 	sal_uInt16 nModifier = 0;
600*b1cdbd2cSJim Jagielski 	sal_Bool bLeftDown = sal_False;
601*b1cdbd2cSJim Jagielski 	sal_Bool bDefPointer = sal_True;
602*b1cdbd2cSJim Jagielski 
603*b1cdbd2cSJim Jagielski 	if (pMEvt)
604*b1cdbd2cSJim Jagielski 	{
605*b1cdbd2cSJim Jagielski 		aPnt = mpWindow->PixelToLogic(pMEvt->GetPosPixel());
606*b1cdbd2cSJim Jagielski 		nModifier = pMEvt->GetModifier();
607*b1cdbd2cSJim Jagielski 		bLeftDown = pMEvt->IsLeft();
608*b1cdbd2cSJim Jagielski 	}
609*b1cdbd2cSJim Jagielski 	else
610*b1cdbd2cSJim Jagielski 	{
611*b1cdbd2cSJim Jagielski 		aPnt = mpWindow->PixelToLogic(mpWindow->GetPointerPosPixel());
612*b1cdbd2cSJim Jagielski 	}
613*b1cdbd2cSJim Jagielski 
614*b1cdbd2cSJim Jagielski 	if (mpView->IsDragObj())
615*b1cdbd2cSJim Jagielski 	{
616*b1cdbd2cSJim Jagielski 		if (SD_MOD()->GetWaterCan() && !mpView->PickHandle(aPnt))
617*b1cdbd2cSJim Jagielski 		{
618*b1cdbd2cSJim Jagielski 			/******************************************************************
619*b1cdbd2cSJim Jagielski 			* Giesskannenmodus
620*b1cdbd2cSJim Jagielski 			******************************************************************/
621*b1cdbd2cSJim Jagielski 			bDefPointer = sal_False;
622*b1cdbd2cSJim Jagielski 			mpWindow->SetPointer(Pointer(POINTER_FILL));
623*b1cdbd2cSJim Jagielski 		}
624*b1cdbd2cSJim Jagielski 	}
625*b1cdbd2cSJim Jagielski 	else
626*b1cdbd2cSJim Jagielski 	{
627*b1cdbd2cSJim Jagielski 		SdrHdl* pHdl = mpView->PickHandle(aPnt);
628*b1cdbd2cSJim Jagielski 
629*b1cdbd2cSJim Jagielski 		if (SD_MOD()->GetWaterCan() && !pHdl)
630*b1cdbd2cSJim Jagielski 		{
631*b1cdbd2cSJim Jagielski 			/******************************************************************
632*b1cdbd2cSJim Jagielski 			* Giesskannenmodus
633*b1cdbd2cSJim Jagielski 			******************************************************************/
634*b1cdbd2cSJim Jagielski 			bDefPointer = sal_False;
635*b1cdbd2cSJim Jagielski 			mpWindow->SetPointer(Pointer(POINTER_FILL));
636*b1cdbd2cSJim Jagielski 		}
637*b1cdbd2cSJim Jagielski 		else if (!pHdl &&
638*b1cdbd2cSJim Jagielski 				 mpViewShell->GetViewFrame()->HasChildWindow(SvxBmpMaskChildWindow::GetChildWindowId()))
639*b1cdbd2cSJim Jagielski 		{
640*b1cdbd2cSJim Jagielski 			/******************************************************************
641*b1cdbd2cSJim Jagielski 			* Pipettenmodus
642*b1cdbd2cSJim Jagielski 			******************************************************************/
643*b1cdbd2cSJim Jagielski 			SvxBmpMask* pMask = (SvxBmpMask*) mpViewShell->GetViewFrame()->GetChildWindow(SvxBmpMaskChildWindow::GetChildWindowId())->GetWindow();
644*b1cdbd2cSJim Jagielski 
645*b1cdbd2cSJim Jagielski 			if (pMask && pMask->IsEyedropping())
646*b1cdbd2cSJim Jagielski 			{
647*b1cdbd2cSJim Jagielski 				bDefPointer = sal_False;
648*b1cdbd2cSJim Jagielski 				mpWindow->SetPointer(Pointer(POINTER_REFHAND));
649*b1cdbd2cSJim Jagielski 			}
650*b1cdbd2cSJim Jagielski 		}
651*b1cdbd2cSJim Jagielski 		else if (!mpView->IsAction())
652*b1cdbd2cSJim Jagielski 		{
653*b1cdbd2cSJim Jagielski 			SdrObject* pObj = NULL;
654*b1cdbd2cSJim Jagielski 			SdrPageView* pPV = NULL;
655*b1cdbd2cSJim Jagielski 			SdrViewEvent aVEvt;
656*b1cdbd2cSJim Jagielski 			SdrHitKind eHit = SDRHIT_NONE;
657*b1cdbd2cSJim Jagielski 			SdrDragMode eDragMode = mpView->GetDragMode();
658*b1cdbd2cSJim Jagielski 
659*b1cdbd2cSJim Jagielski 			if (pMEvt)
660*b1cdbd2cSJim Jagielski 			{
661*b1cdbd2cSJim Jagielski 				eHit = mpView->PickAnything(*pMEvt, SDRMOUSEMOVE, aVEvt);
662*b1cdbd2cSJim Jagielski 			}
663*b1cdbd2cSJim Jagielski 
664*b1cdbd2cSJim Jagielski 			if ((eDragMode == SDRDRAG_ROTATE) && (eHit == SDRHIT_MARKEDOBJECT))
665*b1cdbd2cSJim Jagielski 			{
666*b1cdbd2cSJim Jagielski 				// The goal of this request is show always the rotation-arrow for 3D-objects at rotation-modus
667*b1cdbd2cSJim Jagielski 				// Independent of the settings at Extras->Optionen->Grafik "Objekte immer verschieben"
668*b1cdbd2cSJim Jagielski 				// 2D-objects acquit in an other way. Otherwise, the rotation of 3d-objects around any axises
669*b1cdbd2cSJim Jagielski 				// wouldn't be possible per default.
670*b1cdbd2cSJim Jagielski 				const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
671*b1cdbd2cSJim Jagielski 				SdrObject* pObject = rMarkList.GetMark(0)->GetMarkedSdrObj();
672*b1cdbd2cSJim Jagielski 				if ((pObject->ISA(E3dObject)) && (rMarkList.GetMarkCount() == 1))
673*b1cdbd2cSJim Jagielski 				{
674*b1cdbd2cSJim Jagielski 					mpWindow->SetPointer(Pointer(POINTER_ROTATE));
675*b1cdbd2cSJim Jagielski 					bDefPointer = sal_False;     // Otherwise it'll be calles Joes routine and the mousepointer will reconfigurate again
676*b1cdbd2cSJim Jagielski 				}
677*b1cdbd2cSJim Jagielski 			}
678*b1cdbd2cSJim Jagielski 
679*b1cdbd2cSJim Jagielski 			if (eHit == SDRHIT_NONE)
680*b1cdbd2cSJim Jagielski 			{
681*b1cdbd2cSJim Jagielski 				// found nothing -> look after at the masterpage
682*b1cdbd2cSJim Jagielski 				mpView->PickObj(aPnt, mpView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER);
683*b1cdbd2cSJim Jagielski 			}
684*b1cdbd2cSJim Jagielski 			else if (eHit == SDRHIT_UNMARKEDOBJECT)
685*b1cdbd2cSJim Jagielski 			{
686*b1cdbd2cSJim Jagielski 				pObj = aVEvt.pObj;
687*b1cdbd2cSJim Jagielski 			}
688*b1cdbd2cSJim Jagielski 			else if (eHit == SDRHIT_TEXTEDITOBJ && this->ISA(FuSelection))
689*b1cdbd2cSJim Jagielski 			{
690*b1cdbd2cSJim Jagielski 				sal_uInt16 nSdrObjKind = aVEvt.pObj->GetObjIdentifier();
691*b1cdbd2cSJim Jagielski 
692*b1cdbd2cSJim Jagielski 				if ( nSdrObjKind != OBJ_TEXT		&&
693*b1cdbd2cSJim Jagielski 					 nSdrObjKind != OBJ_TITLETEXT	&&
694*b1cdbd2cSJim Jagielski 					 nSdrObjKind != OBJ_OUTLINETEXT &&
695*b1cdbd2cSJim Jagielski 					 aVEvt.pObj->IsEmptyPresObj() )
696*b1cdbd2cSJim Jagielski 				{
697*b1cdbd2cSJim Jagielski 					pObj = NULL;
698*b1cdbd2cSJim Jagielski 					bDefPointer = sal_False;
699*b1cdbd2cSJim Jagielski 					mpWindow->SetPointer(Pointer(POINTER_ARROW));
700*b1cdbd2cSJim Jagielski 				}
701*b1cdbd2cSJim Jagielski 			}
702*b1cdbd2cSJim Jagielski 
703*b1cdbd2cSJim Jagielski 			if (pObj && pMEvt && !pMEvt->IsMod2() && this->ISA(FuSelection))
704*b1cdbd2cSJim Jagielski 			{
705*b1cdbd2cSJim Jagielski 				// Auf Animation oder ImageMap pruefen
706*b1cdbd2cSJim Jagielski 				bDefPointer = !SetPointer(pObj, aPnt);
707*b1cdbd2cSJim Jagielski 
708*b1cdbd2cSJim Jagielski 				if (bDefPointer && (pObj->ISA(SdrObjGroup) || pObj->ISA(E3dPolyScene)))
709*b1cdbd2cSJim Jagielski 				{
710*b1cdbd2cSJim Jagielski 					// In die Gruppe hineinschauen
711*b1cdbd2cSJim Jagielski 					if (mpView->PickObj(aPnt, mpView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER | SDRSEARCH_DEEP))
712*b1cdbd2cSJim Jagielski 						bDefPointer = !SetPointer(pObj, aPnt);
713*b1cdbd2cSJim Jagielski 				}
714*b1cdbd2cSJim Jagielski 			}
715*b1cdbd2cSJim Jagielski 		}
716*b1cdbd2cSJim Jagielski 	}
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski 	if (bDefPointer)
719*b1cdbd2cSJim Jagielski 	{
720*b1cdbd2cSJim Jagielski 		mpWindow->SetPointer(mpView->GetPreferedPointer(
721*b1cdbd2cSJim Jagielski 							aPnt, mpWindow, nModifier, bLeftDown));
722*b1cdbd2cSJim Jagielski 	}
723*b1cdbd2cSJim Jagielski }
724*b1cdbd2cSJim Jagielski 
725*b1cdbd2cSJim Jagielski /*************************************************************************
726*b1cdbd2cSJim Jagielski |*
727*b1cdbd2cSJim Jagielski |* Set cursor for animaton or imagemap
728*b1cdbd2cSJim Jagielski |*
729*b1cdbd2cSJim Jagielski \************************************************************************/
730*b1cdbd2cSJim Jagielski 
SetPointer(SdrObject * pObj,const Point & rPos)731*b1cdbd2cSJim Jagielski sal_Bool FuDraw::SetPointer(SdrObject* pObj, const Point& rPos)
732*b1cdbd2cSJim Jagielski {
733*b1cdbd2cSJim Jagielski 	sal_Bool bSet = sal_False;
734*b1cdbd2cSJim Jagielski 
735*b1cdbd2cSJim Jagielski 	sal_Bool bAnimationInfo = (!mpDocSh->ISA(GraphicDocShell) &&
736*b1cdbd2cSJim Jagielski 						  mpDoc->GetAnimationInfo(pObj)) ? sal_True:sal_False;
737*b1cdbd2cSJim Jagielski 
738*b1cdbd2cSJim Jagielski 	sal_Bool bImageMapInfo = sal_False;
739*b1cdbd2cSJim Jagielski 
740*b1cdbd2cSJim Jagielski 	if (!bAnimationInfo)
741*b1cdbd2cSJim Jagielski 		bImageMapInfo = mpDoc->GetIMapInfo(pObj) ? sal_True:sal_False;
742*b1cdbd2cSJim Jagielski 
743*b1cdbd2cSJim Jagielski 	if (bAnimationInfo || bImageMapInfo)
744*b1cdbd2cSJim Jagielski 	{
745*b1cdbd2cSJim Jagielski 		const SetOfByte* pVisiLayer = &mpView->GetSdrPageView()->GetVisibleLayers();
746*b1cdbd2cSJim Jagielski 		sal_uInt16 nHitLog(sal_uInt16 (mpWindow->PixelToLogic(Size(HITPIX,0)).Width()));
747*b1cdbd2cSJim Jagielski 		long  n2HitLog(nHitLog * 2);
748*b1cdbd2cSJim Jagielski 		Point aHitPosR(rPos);
749*b1cdbd2cSJim Jagielski 		Point aHitPosL(rPos);
750*b1cdbd2cSJim Jagielski 		Point aHitPosT(rPos);
751*b1cdbd2cSJim Jagielski 		Point aHitPosB(rPos);
752*b1cdbd2cSJim Jagielski 
753*b1cdbd2cSJim Jagielski 		aHitPosR.X() += n2HitLog;
754*b1cdbd2cSJim Jagielski 		aHitPosL.X() -= n2HitLog;
755*b1cdbd2cSJim Jagielski 		aHitPosT.Y() += n2HitLog;
756*b1cdbd2cSJim Jagielski 		aHitPosB.Y() -= n2HitLog;
757*b1cdbd2cSJim Jagielski 
758*b1cdbd2cSJim Jagielski 		if ( !pObj->IsClosedObj() ||
759*b1cdbd2cSJim Jagielski             ( SdrObjectPrimitiveHit(*pObj, aHitPosR, nHitLog, *mpView->GetSdrPageView(), pVisiLayer, false) &&
760*b1cdbd2cSJim Jagielski 			  SdrObjectPrimitiveHit(*pObj, aHitPosL, nHitLog, *mpView->GetSdrPageView(), pVisiLayer, false) &&
761*b1cdbd2cSJim Jagielski 			  SdrObjectPrimitiveHit(*pObj, aHitPosT, nHitLog, *mpView->GetSdrPageView(), pVisiLayer, false) &&
762*b1cdbd2cSJim Jagielski 			  SdrObjectPrimitiveHit(*pObj, aHitPosB, nHitLog, *mpView->GetSdrPageView(), pVisiLayer, false)))
763*b1cdbd2cSJim Jagielski 		{
764*b1cdbd2cSJim Jagielski 			/**********************************************************
765*b1cdbd2cSJim Jagielski 			* hit inside the object (without margin) or open object
766*b1cdbd2cSJim Jagielski 			********************************************************/
767*b1cdbd2cSJim Jagielski 
768*b1cdbd2cSJim Jagielski 			if (bAnimationInfo)
769*b1cdbd2cSJim Jagielski 			{
770*b1cdbd2cSJim Jagielski 				/******************************************************
771*b1cdbd2cSJim Jagielski 				* Click-Action
772*b1cdbd2cSJim Jagielski 				******************************************************/
773*b1cdbd2cSJim Jagielski 				SdAnimationInfo* pInfo = mpDoc->GetAnimationInfo(pObj);
774*b1cdbd2cSJim Jagielski 
775*b1cdbd2cSJim Jagielski 				if ((mpView->ISA(DrawView) &&
776*b1cdbd2cSJim Jagielski 					  (pInfo->meClickAction == presentation::ClickAction_BOOKMARK  ||
777*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_DOCUMENT  ||
778*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_PREVPAGE  ||
779*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_NEXTPAGE  ||
780*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_FIRSTPAGE ||
781*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_LASTPAGE  ||
782*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_VERB      ||
783*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_PROGRAM   ||
784*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_MACRO     ||
785*b1cdbd2cSJim Jagielski 					   pInfo->meClickAction == presentation::ClickAction_SOUND))
786*b1cdbd2cSJim Jagielski 																	||
787*b1cdbd2cSJim Jagielski 					(mpView->ISA(DrawView) &&
788*b1cdbd2cSJim Jagielski 						SlideShow::IsRunning( mpViewShell->GetViewShellBase() )   &&
789*b1cdbd2cSJim Jagielski 						 (pInfo->meClickAction == presentation::ClickAction_VANISH    		  ||
790*b1cdbd2cSJim Jagielski 						  pInfo->meClickAction == presentation::ClickAction_INVISIBLE 		  ||
791*b1cdbd2cSJim Jagielski 						  pInfo->meClickAction == presentation::ClickAction_STOPPRESENTATION ||
792*b1cdbd2cSJim Jagielski 						 (pInfo->mbActive &&
793*b1cdbd2cSJim Jagielski 						  ( pInfo->meEffect != presentation::AnimationEffect_NONE ||
794*b1cdbd2cSJim Jagielski 							pInfo->meTextEffect != presentation::AnimationEffect_NONE )))))
795*b1cdbd2cSJim Jagielski 					{
796*b1cdbd2cSJim Jagielski 						// Animations-Objekt
797*b1cdbd2cSJim Jagielski 						bSet = sal_True;
798*b1cdbd2cSJim Jagielski 						mpWindow->SetPointer(Pointer(POINTER_REFHAND));
799*b1cdbd2cSJim Jagielski 					}
800*b1cdbd2cSJim Jagielski 			}
801*b1cdbd2cSJim Jagielski 			else if (bImageMapInfo &&
802*b1cdbd2cSJim Jagielski 					 mpDoc->GetHitIMapObject(pObj, rPos, *mpWindow))
803*b1cdbd2cSJim Jagielski 			{
804*b1cdbd2cSJim Jagielski 				/******************************************************
805*b1cdbd2cSJim Jagielski 				* ImageMap
806*b1cdbd2cSJim Jagielski 				******************************************************/
807*b1cdbd2cSJim Jagielski 				bSet = sal_True;
808*b1cdbd2cSJim Jagielski 				mpWindow->SetPointer(Pointer(POINTER_REFHAND));
809*b1cdbd2cSJim Jagielski 			}
810*b1cdbd2cSJim Jagielski 		}
811*b1cdbd2cSJim Jagielski 	}
812*b1cdbd2cSJim Jagielski 
813*b1cdbd2cSJim Jagielski 	return bSet;
814*b1cdbd2cSJim Jagielski }
815*b1cdbd2cSJim Jagielski 
816*b1cdbd2cSJim Jagielski 
817*b1cdbd2cSJim Jagielski 
818*b1cdbd2cSJim Jagielski /*************************************************************************
819*b1cdbd2cSJim Jagielski |*
820*b1cdbd2cSJim Jagielski |* Response of doubleclick
821*b1cdbd2cSJim Jagielski |*
822*b1cdbd2cSJim Jagielski \************************************************************************/
823*b1cdbd2cSJim Jagielski 
DoubleClick(const MouseEvent & rMEvt)824*b1cdbd2cSJim Jagielski void FuDraw::DoubleClick(const MouseEvent& rMEvt)
825*b1cdbd2cSJim Jagielski {
826*b1cdbd2cSJim Jagielski 	sal_uInt16 nHitLog = sal_uInt16 ( mpWindow->PixelToLogic(Size(HITPIX,0)).Width() );
827*b1cdbd2cSJim Jagielski 
828*b1cdbd2cSJim Jagielski 	if ( mpView->AreObjectsMarked() )
829*b1cdbd2cSJim Jagielski 	{
830*b1cdbd2cSJim Jagielski 		const SdrMarkList& rMarkList = mpView->GetMarkedObjectList();
831*b1cdbd2cSJim Jagielski 
832*b1cdbd2cSJim Jagielski 		if (rMarkList.GetMarkCount() == 1)
833*b1cdbd2cSJim Jagielski 		{
834*b1cdbd2cSJim Jagielski 			SdrMark* pMark = rMarkList.GetMark(0);
835*b1cdbd2cSJim Jagielski 			SdrObject* pObj = pMark->GetMarkedSdrObj();
836*b1cdbd2cSJim Jagielski 
837*b1cdbd2cSJim Jagielski 			sal_uInt32 nInv = pObj->GetObjInventor();
838*b1cdbd2cSJim Jagielski 			sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier();
839*b1cdbd2cSJim Jagielski 
840*b1cdbd2cSJim Jagielski 			if (nInv == SdrInventor && nSdrObjKind == OBJ_OLE2)
841*b1cdbd2cSJim Jagielski 			{
842*b1cdbd2cSJim Jagielski 				DrawDocShell* pDocSh = mpDoc->GetDocSh();
843*b1cdbd2cSJim Jagielski 
844*b1cdbd2cSJim Jagielski 				if ( !pDocSh->IsUIActive() )
845*b1cdbd2cSJim Jagielski 				{
846*b1cdbd2cSJim Jagielski 					/**********************************************************
847*b1cdbd2cSJim Jagielski 					* aktivate OLE-object
848*b1cdbd2cSJim Jagielski 					**********************************************************/
849*b1cdbd2cSJim Jagielski 					//HMHmpView->HideMarkHdl();
850*b1cdbd2cSJim Jagielski 					mpViewShell->ActivateObject( (SdrOle2Obj*) pObj, 0);
851*b1cdbd2cSJim Jagielski 				}
852*b1cdbd2cSJim Jagielski 			}
853*b1cdbd2cSJim Jagielski 			else if (nInv == SdrInventor &&  nSdrObjKind == OBJ_GRAF && pObj->IsEmptyPresObj() )
854*b1cdbd2cSJim Jagielski 			{
855*b1cdbd2cSJim Jagielski 				mpViewShell->GetViewFrame()->
856*b1cdbd2cSJim Jagielski 					GetDispatcher()->Execute( SID_INSERT_GRAPHIC,
857*b1cdbd2cSJim Jagielski 											  SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD );
858*b1cdbd2cSJim Jagielski 			}
859*b1cdbd2cSJim Jagielski 			else if ( ( pObj->ISA(SdrTextObj) || pObj->ISA(SdrObjGroup) ) &&
860*b1cdbd2cSJim Jagielski 					  !SD_MOD()->GetWaterCan()                            &&
861*b1cdbd2cSJim Jagielski 					  mpViewShell->GetFrameView()->IsDoubleClickTextEdit() &&
862*b1cdbd2cSJim Jagielski 					  !mpDocSh->IsReadOnly())
863*b1cdbd2cSJim Jagielski 			{
864*b1cdbd2cSJim Jagielski 				SfxUInt16Item aItem(SID_TEXTEDIT, 2);
865*b1cdbd2cSJim Jagielski 				mpViewShell->GetViewFrame()->GetDispatcher()->
866*b1cdbd2cSJim Jagielski 								 Execute(SID_TEXTEDIT, SFX_CALLMODE_ASYNCHRON |
867*b1cdbd2cSJim Jagielski 										 SFX_CALLMODE_RECORD, &aItem, 0L);
868*b1cdbd2cSJim Jagielski 			}
869*b1cdbd2cSJim Jagielski 			else if (nInv == SdrInventor &&  nSdrObjKind == OBJ_GRUP)
870*b1cdbd2cSJim Jagielski 			{
871*b1cdbd2cSJim Jagielski 				// hit group -> select subobject
872*b1cdbd2cSJim Jagielski 				mpView->UnMarkAll();
873*b1cdbd2cSJim Jagielski 				mpView->MarkObj(aMDPos, nHitLog, rMEvt.IsShift(), sal_True);
874*b1cdbd2cSJim Jagielski 			}
875*b1cdbd2cSJim Jagielski 		}
876*b1cdbd2cSJim Jagielski 	}
877*b1cdbd2cSJim Jagielski 	else
878*b1cdbd2cSJim Jagielski 		mpViewShell->GetViewFrame()->GetDispatcher()->Execute(SID_OBJECT_SELECT, SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
879*b1cdbd2cSJim Jagielski }
880*b1cdbd2cSJim Jagielski 
881*b1cdbd2cSJim Jagielski /*************************************************************************
882*b1cdbd2cSJim Jagielski |*
883*b1cdbd2cSJim Jagielski |* Help-event
884*b1cdbd2cSJim Jagielski |*
885*b1cdbd2cSJim Jagielski \************************************************************************/
886*b1cdbd2cSJim Jagielski 
RequestHelp(const HelpEvent & rHEvt)887*b1cdbd2cSJim Jagielski sal_Bool FuDraw::RequestHelp(const HelpEvent& rHEvt)
888*b1cdbd2cSJim Jagielski {
889*b1cdbd2cSJim Jagielski 	sal_Bool bReturn = sal_False;
890*b1cdbd2cSJim Jagielski 
891*b1cdbd2cSJim Jagielski 	if (Help::IsBalloonHelpEnabled() || Help::IsQuickHelpEnabled())
892*b1cdbd2cSJim Jagielski 	{
893*b1cdbd2cSJim Jagielski 		SdrViewEvent aVEvt;
894*b1cdbd2cSJim Jagielski 
895*b1cdbd2cSJim Jagielski 		MouseEvent aMEvt(mpWindow->GetPointerPosPixel(), 1, 0, MOUSE_LEFT);
896*b1cdbd2cSJim Jagielski 
897*b1cdbd2cSJim Jagielski 		SdrHitKind eHit = mpView->PickAnything(aMEvt, SDRMOUSEBUTTONDOWN, aVEvt);
898*b1cdbd2cSJim Jagielski 
899*b1cdbd2cSJim Jagielski 		SdrObject* pObj = aVEvt.pObj;
900*b1cdbd2cSJim Jagielski 
901*b1cdbd2cSJim Jagielski 		if (eHit != SDRHIT_NONE && pObj != NULL)
902*b1cdbd2cSJim Jagielski 		{
903*b1cdbd2cSJim Jagielski 			Point aPosPixel = rHEvt.GetMousePosPixel();
904*b1cdbd2cSJim Jagielski 
905*b1cdbd2cSJim Jagielski 			bReturn = SetHelpText(pObj, aPosPixel, aVEvt);
906*b1cdbd2cSJim Jagielski 
907*b1cdbd2cSJim Jagielski 			if (!bReturn && (pObj->ISA(SdrObjGroup) || pObj->ISA(E3dPolyScene)))
908*b1cdbd2cSJim Jagielski 			{
909*b1cdbd2cSJim Jagielski 				// In die Gruppe hineinschauen
910*b1cdbd2cSJim Jagielski 				SdrPageView* pPV = NULL;
911*b1cdbd2cSJim Jagielski 
912*b1cdbd2cSJim Jagielski 				Point aPos(mpWindow->PixelToLogic(mpWindow->ScreenToOutputPixel(aPosPixel)));
913*b1cdbd2cSJim Jagielski 
914*b1cdbd2cSJim Jagielski 				if (mpView->PickObj(aPos, mpView->getHitTolLog(), pObj, pPV, SDRSEARCH_ALSOONMASTER | SDRSEARCH_DEEP))
915*b1cdbd2cSJim Jagielski 					bReturn = SetHelpText(pObj, aPosPixel, aVEvt);
916*b1cdbd2cSJim Jagielski 			}
917*b1cdbd2cSJim Jagielski 		}
918*b1cdbd2cSJim Jagielski 	}
919*b1cdbd2cSJim Jagielski 
920*b1cdbd2cSJim Jagielski 	if (!bReturn)
921*b1cdbd2cSJim Jagielski 	{
922*b1cdbd2cSJim Jagielski 		bReturn = FuPoor::RequestHelp(rHEvt);
923*b1cdbd2cSJim Jagielski 	}
924*b1cdbd2cSJim Jagielski 
925*b1cdbd2cSJim Jagielski 	return(bReturn);
926*b1cdbd2cSJim Jagielski }
927*b1cdbd2cSJim Jagielski 
928*b1cdbd2cSJim Jagielski 
929*b1cdbd2cSJim Jagielski 
930*b1cdbd2cSJim Jagielski /*************************************************************************
931*b1cdbd2cSJim Jagielski |*
932*b1cdbd2cSJim Jagielski |* Command-event
933*b1cdbd2cSJim Jagielski |*
934*b1cdbd2cSJim Jagielski \************************************************************************/
935*b1cdbd2cSJim Jagielski 
SetHelpText(SdrObject * pObj,const Point & rPosPixel,const SdrViewEvent & rVEvt)936*b1cdbd2cSJim Jagielski sal_Bool FuDraw::SetHelpText(SdrObject* pObj, const Point& rPosPixel, const SdrViewEvent& rVEvt)
937*b1cdbd2cSJim Jagielski {
938*b1cdbd2cSJim Jagielski 	sal_Bool bSet = sal_False;
939*b1cdbd2cSJim Jagielski 	String aHelpText;
940*b1cdbd2cSJim Jagielski 	Point aPos(mpWindow->PixelToLogic(mpWindow->ScreenToOutputPixel(rPosPixel)));
941*b1cdbd2cSJim Jagielski 
942*b1cdbd2cSJim Jagielski 	// URL fuer IMapObject unter Pointer ist Hilfetext
943*b1cdbd2cSJim Jagielski 	if ( mpDoc->GetIMapInfo(pObj) )
944*b1cdbd2cSJim Jagielski 	{
945*b1cdbd2cSJim Jagielski 		IMapObject* pIMapObj = mpDoc->GetHitIMapObject(pObj, aPos, *mpWindow );
946*b1cdbd2cSJim Jagielski 
947*b1cdbd2cSJim Jagielski 		if ( pIMapObj )
948*b1cdbd2cSJim Jagielski 		{
949*b1cdbd2cSJim Jagielski 			// show name
950*b1cdbd2cSJim Jagielski 			aHelpText = pIMapObj->GetAltText();
951*b1cdbd2cSJim Jagielski 
952*b1cdbd2cSJim Jagielski 			if (aHelpText.Len() == 0)
953*b1cdbd2cSJim Jagielski 			{
954*b1cdbd2cSJim Jagielski 				// show url if no name is available
955*b1cdbd2cSJim Jagielski 				aHelpText = INetURLObject::decode( pIMapObj->GetURL(), '%', INetURLObject::DECODE_WITH_CHARSET );
956*b1cdbd2cSJim Jagielski 			}
957*b1cdbd2cSJim Jagielski 		}
958*b1cdbd2cSJim Jagielski 	}
959*b1cdbd2cSJim Jagielski 	else if (!mpDocSh->ISA(GraphicDocShell) && mpDoc->GetAnimationInfo(pObj))
960*b1cdbd2cSJim Jagielski 	{
961*b1cdbd2cSJim Jagielski 		SdAnimationInfo* pInfo = mpDoc->GetAnimationInfo(pObj);
962*b1cdbd2cSJim Jagielski 
963*b1cdbd2cSJim Jagielski 		switch (pInfo->meClickAction)
964*b1cdbd2cSJim Jagielski 		{
965*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_PREVPAGE:
966*b1cdbd2cSJim Jagielski 			{
967*b1cdbd2cSJim Jagielski 				// jump to the prior page
968*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_PREVPAGE));
969*b1cdbd2cSJim Jagielski 			}
970*b1cdbd2cSJim Jagielski 			break;
971*b1cdbd2cSJim Jagielski 
972*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_NEXTPAGE:
973*b1cdbd2cSJim Jagielski 			{
974*b1cdbd2cSJim Jagielski 				// jump to the next page
975*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_NEXTPAGE));
976*b1cdbd2cSJim Jagielski 			}
977*b1cdbd2cSJim Jagielski 			break;
978*b1cdbd2cSJim Jagielski 
979*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_FIRSTPAGE:
980*b1cdbd2cSJim Jagielski 			{
981*b1cdbd2cSJim Jagielski 				// jump to the first page
982*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_FIRSTPAGE));
983*b1cdbd2cSJim Jagielski 			}
984*b1cdbd2cSJim Jagielski 			break;
985*b1cdbd2cSJim Jagielski 
986*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_LASTPAGE:
987*b1cdbd2cSJim Jagielski 			{
988*b1cdbd2cSJim Jagielski 				// jump to the last page
989*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_LASTPAGE));
990*b1cdbd2cSJim Jagielski 			}
991*b1cdbd2cSJim Jagielski 			break;
992*b1cdbd2cSJim Jagielski 
993*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_BOOKMARK:
994*b1cdbd2cSJim Jagielski 			{
995*b1cdbd2cSJim Jagielski 				// jump to object/page
996*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_BOOKMARK));
997*b1cdbd2cSJim Jagielski 				aHelpText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
998*b1cdbd2cSJim Jagielski 				aHelpText.Append( String(INetURLObject::decode( pInfo->GetBookmark(), '%', INetURLObject::DECODE_WITH_CHARSET ) ));
999*b1cdbd2cSJim Jagielski 			}
1000*b1cdbd2cSJim Jagielski 			break;
1001*b1cdbd2cSJim Jagielski 
1002*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_DOCUMENT:
1003*b1cdbd2cSJim Jagielski 			{
1004*b1cdbd2cSJim Jagielski 				// jump to document (object/page)
1005*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_DOCUMENT));
1006*b1cdbd2cSJim Jagielski 				aHelpText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1007*b1cdbd2cSJim Jagielski 				aHelpText.Append( String(INetURLObject::decode( pInfo->GetBookmark(), '%', INetURLObject::DECODE_WITH_CHARSET ) ));
1008*b1cdbd2cSJim Jagielski 			}
1009*b1cdbd2cSJim Jagielski 			break;
1010*b1cdbd2cSJim Jagielski 
1011*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_PROGRAM:
1012*b1cdbd2cSJim Jagielski 			{
1013*b1cdbd2cSJim Jagielski 				// execute program
1014*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_PROGRAM));
1015*b1cdbd2cSJim Jagielski 				aHelpText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1016*b1cdbd2cSJim Jagielski 				aHelpText.Append( String(INetURLObject::decode( pInfo->GetBookmark(), '%', INetURLObject::DECODE_WITH_CHARSET ) ));
1017*b1cdbd2cSJim Jagielski 			}
1018*b1cdbd2cSJim Jagielski 			break;
1019*b1cdbd2cSJim Jagielski 
1020*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_MACRO:
1021*b1cdbd2cSJim Jagielski 			{
1022*b1cdbd2cSJim Jagielski 				// execute program
1023*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_MACRO));
1024*b1cdbd2cSJim Jagielski 				aHelpText.AppendAscii( RTL_CONSTASCII_STRINGPARAM( ": " ) );
1025*b1cdbd2cSJim Jagielski 
1026*b1cdbd2cSJim Jagielski 				if ( SfxApplication::IsXScriptURL( pInfo->GetBookmark() ) )
1027*b1cdbd2cSJim Jagielski 				{
1028*b1cdbd2cSJim Jagielski 					aHelpText.Append( pInfo->GetBookmark() );
1029*b1cdbd2cSJim Jagielski 				}
1030*b1cdbd2cSJim Jagielski 				else
1031*b1cdbd2cSJim Jagielski 				{
1032*b1cdbd2cSJim Jagielski                     String sBookmark( pInfo->GetBookmark() );
1033*b1cdbd2cSJim Jagielski 					sal_Unicode cToken = '.';
1034*b1cdbd2cSJim Jagielski 					aHelpText.Append( sBookmark.GetToken( 2, cToken ) );
1035*b1cdbd2cSJim Jagielski 					aHelpText.Append( cToken );
1036*b1cdbd2cSJim Jagielski 					aHelpText.Append( sBookmark.GetToken( 1, cToken ) );
1037*b1cdbd2cSJim Jagielski 					aHelpText.Append( cToken );
1038*b1cdbd2cSJim Jagielski 					aHelpText.Append( sBookmark.GetToken( 0, cToken ) );
1039*b1cdbd2cSJim Jagielski 				}
1040*b1cdbd2cSJim Jagielski 			}
1041*b1cdbd2cSJim Jagielski 			break;
1042*b1cdbd2cSJim Jagielski 
1043*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_SOUND:
1044*b1cdbd2cSJim Jagielski 			{
1045*b1cdbd2cSJim Jagielski 				// play-back sound
1046*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_SOUND));
1047*b1cdbd2cSJim Jagielski 			}
1048*b1cdbd2cSJim Jagielski 			break;
1049*b1cdbd2cSJim Jagielski 
1050*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_VERB:
1051*b1cdbd2cSJim Jagielski 			{
1052*b1cdbd2cSJim Jagielski 				// execute OLE-verb
1053*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_VERB));
1054*b1cdbd2cSJim Jagielski 			}
1055*b1cdbd2cSJim Jagielski 			break;
1056*b1cdbd2cSJim Jagielski 
1057*b1cdbd2cSJim Jagielski 			case presentation::ClickAction_STOPPRESENTATION:
1058*b1cdbd2cSJim Jagielski 			{
1059*b1cdbd2cSJim Jagielski 				// quit presentation
1060*b1cdbd2cSJim Jagielski 				aHelpText = String(SdResId(STR_CLICK_ACTION_STOPPRESENTATION));
1061*b1cdbd2cSJim Jagielski 			}
1062*b1cdbd2cSJim Jagielski 			break;
1063*b1cdbd2cSJim Jagielski 			default:
1064*b1cdbd2cSJim Jagielski 				break;
1065*b1cdbd2cSJim Jagielski 		}
1066*b1cdbd2cSJim Jagielski 	}
1067*b1cdbd2cSJim Jagielski 	else if (rVEvt.pURLField)
1068*b1cdbd2cSJim Jagielski 	{
1069*b1cdbd2cSJim Jagielski 		/**************************************************************
1070*b1cdbd2cSJim Jagielski 		* URL-Field
1071*b1cdbd2cSJim Jagielski 		**************************************************************/
1072*b1cdbd2cSJim Jagielski 		aHelpText = INetURLObject::decode( rVEvt.pURLField->GetURL(), '%', INetURLObject::DECODE_WITH_CHARSET );
1073*b1cdbd2cSJim Jagielski 	}
1074*b1cdbd2cSJim Jagielski 
1075*b1cdbd2cSJim Jagielski 	if (aHelpText.Len())
1076*b1cdbd2cSJim Jagielski 	{
1077*b1cdbd2cSJim Jagielski 		bSet = sal_True;
1078*b1cdbd2cSJim Jagielski 		Rectangle aLogicPix = mpWindow->LogicToPixel(pObj->GetLogicRect());
1079*b1cdbd2cSJim Jagielski 		Rectangle aScreenRect(mpWindow->OutputToScreenPixel(aLogicPix.TopLeft()),
1080*b1cdbd2cSJim Jagielski 							  mpWindow->OutputToScreenPixel(aLogicPix.BottomRight()));
1081*b1cdbd2cSJim Jagielski 
1082*b1cdbd2cSJim Jagielski 		if (Help::IsBalloonHelpEnabled())
1083*b1cdbd2cSJim Jagielski 			Help::ShowBalloon( (Window*)mpWindow, rPosPixel, aScreenRect, aHelpText);
1084*b1cdbd2cSJim Jagielski 		else if (Help::IsQuickHelpEnabled())
1085*b1cdbd2cSJim Jagielski 			Help::ShowQuickHelp( (Window*)mpWindow, aScreenRect, aHelpText);
1086*b1cdbd2cSJim Jagielski 	}
1087*b1cdbd2cSJim Jagielski 
1088*b1cdbd2cSJim Jagielski 	return bSet;
1089*b1cdbd2cSJim Jagielski }
1090*b1cdbd2cSJim Jagielski 
1091*b1cdbd2cSJim Jagielski 
1092*b1cdbd2cSJim Jagielski /** is called when the currenct function should be aborted. <p>
1093*b1cdbd2cSJim Jagielski 	This is used when a function gets a KEY_ESCAPE but can also
1094*b1cdbd2cSJim Jagielski 	be called directly.
1095*b1cdbd2cSJim Jagielski 
1096*b1cdbd2cSJim Jagielski 	@returns true if a active function was aborted
1097*b1cdbd2cSJim Jagielski */
cancel()1098*b1cdbd2cSJim Jagielski bool FuDraw::cancel()
1099*b1cdbd2cSJim Jagielski {
1100*b1cdbd2cSJim Jagielski 	bool bReturn = false;
1101*b1cdbd2cSJim Jagielski 
1102*b1cdbd2cSJim Jagielski 	if ( mpView->IsAction() )
1103*b1cdbd2cSJim Jagielski 	{
1104*b1cdbd2cSJim Jagielski 		mpView->BrkAction();
1105*b1cdbd2cSJim Jagielski 		bReturn = true;
1106*b1cdbd2cSJim Jagielski 	}
1107*b1cdbd2cSJim Jagielski 	else if ( mpView->IsTextEdit() )
1108*b1cdbd2cSJim Jagielski 	{
1109*b1cdbd2cSJim Jagielski 		mpView->SdrEndTextEdit();
1110*b1cdbd2cSJim Jagielski 		bReturn = true;
1111*b1cdbd2cSJim Jagielski 
1112*b1cdbd2cSJim Jagielski 		SfxBindings& rBindings = mpViewShell->GetViewFrame()->GetBindings();
1113*b1cdbd2cSJim Jagielski 		rBindings.Invalidate( SID_PARASPACE_INCREASE );
1114*b1cdbd2cSJim Jagielski 		rBindings.Invalidate( SID_PARASPACE_DECREASE );
1115*b1cdbd2cSJim Jagielski 	}
1116*b1cdbd2cSJim Jagielski 	else if ( mpView->AreObjectsMarked() )
1117*b1cdbd2cSJim Jagielski 	{
1118*b1cdbd2cSJim Jagielski 		// #97016# II
1119*b1cdbd2cSJim Jagielski 		const SdrHdlList& rHdlList = mpView->GetHdlList();
1120*b1cdbd2cSJim Jagielski 		SdrHdl* pHdl = rHdlList.GetFocusHdl();
1121*b1cdbd2cSJim Jagielski 
1122*b1cdbd2cSJim Jagielski 		if(pHdl)
1123*b1cdbd2cSJim Jagielski 		{
1124*b1cdbd2cSJim Jagielski 			((SdrHdlList&)rHdlList).ResetFocusHdl();
1125*b1cdbd2cSJim Jagielski 		}
1126*b1cdbd2cSJim Jagielski 		else
1127*b1cdbd2cSJim Jagielski 		{
1128*b1cdbd2cSJim Jagielski 			mpView->UnmarkAll();
1129*b1cdbd2cSJim Jagielski 		}
1130*b1cdbd2cSJim Jagielski 
1131*b1cdbd2cSJim Jagielski         // Switch to FuSelect.
1132*b1cdbd2cSJim Jagielski         mpViewShell->GetViewFrame()->GetDispatcher()->Execute(
1133*b1cdbd2cSJim Jagielski             SID_OBJECT_SELECT,
1134*b1cdbd2cSJim Jagielski             SFX_CALLMODE_ASYNCHRON | SFX_CALLMODE_RECORD);
1135*b1cdbd2cSJim Jagielski 
1136*b1cdbd2cSJim Jagielski 		bReturn = true;
1137*b1cdbd2cSJim Jagielski 	}
1138*b1cdbd2cSJim Jagielski 
1139*b1cdbd2cSJim Jagielski 	return bReturn;
1140*b1cdbd2cSJim Jagielski }
1141*b1cdbd2cSJim Jagielski 
1142*b1cdbd2cSJim Jagielski } // end of namespace sd
1143