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