LibreOffice Module sc (master)  1
fusel.cxx
Go to the documentation of this file.
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  * This file is part of the LibreOffice project.
4  *
5  * This Source Code Form is subject to the terms of the Mozilla Public
6  * License, v. 2.0. If a copy of the MPL was not distributed with this
7  * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8  *
9  * This file incorporates work covered by the following license notice:
10  *
11  * Licensed to the Apache Software Foundation (ASF) under one or more
12  * contributor license agreements. See the NOTICE file distributed
13  * with this work for additional information regarding copyright
14  * ownership. The ASF licenses this file to you under the Apache
15  * License, Version 2.0 (the "License"); you may not use this file
16  * except in compliance with the License. You may obtain a copy of
17  * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18  */
19 
20 #include <com/sun/star/embed/EmbedVerbs.hpp>
21 #include <editeng/flditem.hxx>
22 #include <svx/svddrgmt.hxx>
23 #include <svx/svdoole2.hxx>
24 #include <svx/svdotext.hxx>
25 #include <sfx2/dispatch.hxx>
26 #include <vcl/imapobj.hxx>
27 #include <svx/svdouno.hxx>
28 #include <svx/svdomedia.hxx>
29 #include <svx/svdpagv.hxx>
30 #include <svx/ImageMapInfo.hxx>
31 #include <editeng/outlobj.hxx>
32 #include <sfx2/app.hxx>
33 #include <sfx2/ipclient.hxx>
34 #include <sfx2/viewfrm.hxx>
35 
36 #include <fusel.hxx>
37 #include <sc.hrc>
38 #include <fudraw.hxx>
39 #include <futext.hxx>
40 #include <drawview.hxx>
41 #include <tabvwsh.hxx>
42 #include <drwlayer.hxx>
43 #include <userdat.hxx>
44 #include <scmod.hxx>
45 #include <charthelper.hxx>
46 #include <docuno.hxx>
47 #include <docsh.hxx>
48 
49 // maximal permitted mouse movement to start Drag&Drop
51 #define SC_MAXDRAGMOVE 3
52 // Min necessary mouse motion for normal dragging
53 #define SC_MINDRAGMOVE 2
54 
55 using namespace com::sun::star;
56 
58  SdrModel* pDoc, const SfxRequest& rReq)
59  : FuDraw(rViewSh, pWin, pViewP, pDoc, rReq)
60 {
61 }
62 
64 {
65 }
66 
68 {
69  // remember button state for creation of own MouseEvents
71  const bool bSelectionOnly = rMEvt.IsRight();
72  if ( pView->IsAction() )
73  {
74  if ( bSelectionOnly )
75  pView->BckAction();
76  return true;
77  }
78 
79  bIsInDragMode = false; // somewhere it has to be reset (#50033#)
80 
81  bool bReturn = FuDraw::MouseButtonDown(rMEvt);
82  auto aLogicPosition = rMEvt.getLogicPosition();
83  if (aLogicPosition)
84  aMDPos = *aLogicPosition;
85  else
87 
88  if ( rMEvt.IsLeft() )
89  {
90  SdrHdl* pHdl = pView->PickHandle(aMDPos);
91 
92  if ( pHdl!=nullptr || pView->IsMarkedHit(aMDPos) )
93  {
94  // Determine if this is the tail of a SdrCaptionObj i.e.
95  // we need to disable the drag option on the tail of a note
96  // object. Also, disable the ability to use the circular
97  // drag of a note object.
98  bool bDrag = false;
99  const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
100  if( rMarkList.GetMarkCount() == 1 )
101  {
102  SdrObject* pMarkedObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
103  if( ScDrawLayer::IsNoteCaption( pMarkedObj ) )
104  {
105  // move using the valid caption handles for note text box.
106  if(pHdl && (pHdl->GetKind() != SdrHdlKind::Poly && pHdl->GetKind() != SdrHdlKind::Circle))
107  bDrag = true;
108  // move the complete note box.
109  else if(!pHdl)
110  bDrag = true;
111  }
112  else
113  bDrag = true; // different object
114  }
115  else
116  bDrag = true; // several objects
117 
118  if ( bDrag )
119  {
120  aDragTimer.Start();
121  if (pView->BegDragObj(aMDPos, nullptr, pHdl))
123  bReturn = true;
124  }
125  }
126  else
127  {
128  SdrPageView* pPV = nullptr;
129  bool bAlt = rMEvt.IsMod2();
130  SdrObject* pObj = !bAlt ? pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::PICKMACRO) : nullptr;
131  if (pObj)
132  {
133  pView->BegMacroObj(aMDPos, pObj, pPV, pWindow);
134  bReturn = true;
135  }
136  else
137  {
138  OUString sURL, sTarget;
139  pObj = !bAlt ? pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::ALSOONMASTER) : nullptr;
140  if (pObj)
141  {
142  // Support for imported Excel docs
143  // Excel is of course not consistent and allows
144  // a hyperlink to be assigned for an object group
145  // and even though the hyperlink is exported in the Escher layer
146  // its never used, when dealing with a group object the link
147  // associated with the clicked object is used only
148 
149  // additionally you can also select a macro in Excel for a grouped
150  // objects and this *usually* results in the macro being set
151  // for the elements in the group and no macro is exported
152  // for the group itself ( this however is not always true )
153  // if a macro and hlink are defined favour the hlink
154  // If a group object has no hyperlink use the hyperlink of the
155  // object clicked
156 
157  if ( pObj->IsGroupObject() )
158  {
159  ScMacroInfo* pTmpInfo = ScDrawLayer::GetMacroInfo( pObj );
160  if ( !pTmpInfo || pTmpInfo->GetMacro().isEmpty() )
161  {
162  SdrObject* pHit = pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::DEEP);
163  if (pHit)
164  pObj = pHit;
165  }
166  }
167 
168  ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( pObj, true );
169  // For interoperability favour links over macros if both are defined
170  if ( !pInfo->GetHlink().isEmpty() )
171  {
172  sURL = pInfo->GetHlink();
173  }
174  else if ( !pInfo->GetMacro().isEmpty() )
175  {
177  if ( pObjSh && SfxApplication::IsXScriptURL( pInfo->GetMacro() ) )
178  {
179  uno::Reference< beans::XPropertySet > xProps( pObj->getUnoShape(), uno::UNO_QUERY );
180  uno::Any aCaller;
181  if ( xProps.is() )
182  {
183  try
184  {
185  aCaller = xProps->getPropertyValue("Name");
186  }
187  catch( uno::Exception& ) {}
188  }
189  uno::Any aRet;
190  uno::Sequence< sal_Int16 > aOutArgsIndex;
191  uno::Sequence< uno::Any > aOutArgs;
192  uno::Sequence< uno::Any > aInArgs;
193  pObjSh->CallXScript( pInfo->GetMacro(),
194  aInArgs, aRet, aOutArgsIndex, aOutArgs, true, &aCaller );
196  return true; // no CaptureMouse etc.
197  }
198  }
199  }
200 
201  // URL / ImageMap
202 
203  SdrViewEvent aVEvt;
204  if ( !bAlt &&
205  pView->PickAnything( rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt ) != SdrHitKind::NONE &&
206  aVEvt.pObj != nullptr )
207  {
208  if ( SvxIMapInfo::GetIMapInfo( aVEvt.pObj ) ) // ImageMap
209  {
210  const IMapObject* pIMapObj =
212  if ( pIMapObj && !pIMapObj->GetURL().isEmpty() )
213  {
214  sURL = pIMapObj->GetURL();
215  sTarget = pIMapObj->GetTarget();
216  }
217  }
218  if ( aVEvt.eEvent == SdrEventKind::ExecuteUrl && aVEvt.pURLField ) // URL
219  {
220  sURL = aVEvt.pURLField->GetURL();
221  sTarget = aVEvt.pURLField->GetTargetFrame();
222  }
223  }
224 
225  // open hyperlink, if found at object or in object's text
226  if ( !sURL.isEmpty() && ScGlobal::ShouldOpenURL() )
227  {
228  ScGlobal::OpenURL( sURL, sTarget );
230  return true; // no CaptureMouse etc.
231  }
232 
233  // Is another object being edited in this view?
234  // (Editing is ended in MarkListHasChanged - test before UnmarkAll)
236  bool bWasOleActive = ( pClient && pClient->IsObjectInPlaceActive() );
237 
238  // Selection
239 
240  // do not allow multiselection with note caption
241  bool bCaptionClicked = IsNoteCaptionClicked( aMDPos );
242  if ( !rMEvt.IsShift() || bCaptionClicked || IsNoteCaptionMarked() )
243  pView->UnmarkAll();
244 
245  /* Unlock internal layer, if a note caption is clicked. The
246  layer will be relocked in ScDrawView::MarkListHasChanged(). */
247  if( bCaptionClicked )
249 
250  // try to select the clicked object
251  if ( pView->MarkObj( aMDPos, -2, false, rMEvt.IsMod1() ) )
252  {
253 
254  // move object
255 
256  if (pView->IsMarkedHit(aMDPos))
257  {
258  // Don't start drag timer if inplace editing of an OLE object
259  // was just ended with this mouse click - the view will be moved
260  // (different tool bars) and the object that was clicked on would
261  // be moved unintentionally.
262  if ( !bWasOleActive )
263  aDragTimer.Start();
264 
265  pHdl=pView->PickHandle(aMDPos);
266  pView->BegDragObj(aMDPos, nullptr, pHdl);
267  bReturn = true;
268  }
269  else // object at the edge
271  bReturn = true;
272  }
273  else
274  {
276  {
277 
278  // select object
279 
281  bReturn = true;
282  }
283  }
284  }
285  }
286 
287  }
288 
289  if (!bIsInDragMode)
290  {
291  // VC calls CaptureMouse itself
293  ForcePointer(&rMEvt);
294  }
295 
296  return bReturn;
297 }
298 
300 {
301  bool bReturn = FuDraw::MouseMove(rMEvt);
302 
303  if (aDragTimer.IsActive() )
304  {
305  Point aOldPixel = pWindow->LogicToPixel( aMDPos );
306  Point aNewPixel = rMEvt.GetPosPixel();
307  if ( std::abs( aOldPixel.X() - aNewPixel.X() ) > SC_MAXDRAGMOVE ||
308  std::abs( aOldPixel.Y() - aNewPixel.Y() ) > SC_MAXDRAGMOVE )
309  aDragTimer.Stop();
310  }
311 
312  if ( pView->IsAction() )
313  {
314  Point aPix(rMEvt.GetPosPixel());
315  Point aPnt(pWindow->PixelToLogic(aPix));
316 
317  ForceScroll(aPix);
318  pView->MovAction(aPnt);
319  bReturn = true;
320  }
321 
322  ForcePointer(&rMEvt);
323 
324  return bReturn;
325 }
326 
328 {
329  // remember button state for creation of own MouseEvents
331 
332  bool bReturn = FuDraw::MouseButtonUp(rMEvt);
333  bool bOle = rViewShell.GetViewFrame()->GetFrame().IsInPlace();
334 
335  SdrObject* pObj = nullptr;
336  if (aDragTimer.IsActive() )
337  {
338  aDragTimer.Stop();
339  }
340 
341  sal_uInt16 nDrgLog = sal_uInt16 ( pWindow->PixelToLogic(Size(SC_MINDRAGMOVE,0)).Width() );
342  auto aLogicPosition = rMEvt.getLogicPosition();
343  Point aPnt(aLogicPosition ? *aLogicPosition : pWindow->PixelToLogic(rMEvt.GetPosPixel()));
344 
345  bool bCopy = false;
346  ScViewData& rViewData = rViewShell.GetViewData();
347  ScDocument& rDocument = rViewData.GetDocument();
348  SdrPageView* pPageView = ( pView ? pView->GetSdrPageView() : nullptr );
349  SdrPage* pPage = ( pPageView ? pPageView->GetPage() : nullptr );
350  ::std::vector< OUString > aExcludedChartNames;
351  ScRangeListVector aProtectedChartRangesVector;
352 
353  if (pView && rMEvt.IsLeft())
354  {
355  if ( pView->IsDragObj() )
356  {
357  // object was moved
358  if ( rMEvt.IsMod1() )
359  {
360  if ( pPage )
361  {
362  ScChartHelper::GetChartNames( aExcludedChartNames, pPage );
363  }
364  if ( pView )
365  {
366  const SdrMarkList& rSdrMarkList = pView->GetMarkedObjectList();
367  const size_t nMarkCount = rSdrMarkList.GetMarkCount();
368  for ( size_t i = 0; i < nMarkCount; ++i )
369  {
370  SdrMark* pMark = rSdrMarkList.GetMark( i );
371  pObj = ( pMark ? pMark->GetMarkedSdrObj() : nullptr );
372  if ( pObj )
373  {
374  ScChartHelper::AddRangesIfProtectedChart( aProtectedChartRangesVector, rDocument, pObj );
375  }
376  }
377  }
378  bCopy = true;
379  }
380 
381  if (!rMEvt.IsShift() && !rMEvt.IsMod1() && !rMEvt.IsMod2() &&
382  std::abs(aPnt.X() - aMDPos.X()) < nDrgLog &&
383  std::abs(aPnt.Y() - aMDPos.Y()) < nDrgLog)
384  {
385  /* If a user wants to click on an object in front of a marked
386  one, he releases the mouse button immediately */
387  SdrPageView* pPV = nullptr;
388  pObj = pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK);
389  if (pObj)
390  {
391  pView->UnmarkAllObj();
392  pView->MarkObj(pObj,pPV);
393  return true;
394  }
395  }
396  pView->EndDragObj( rMEvt.IsMod1() );
398 
399  bReturn = true;
400  }
401  else if (pView->IsAction() )
402  {
403  // unlock internal layer to include note captions
405  pView->EndAction();
406  if ( pView->AreObjectsMarked() )
407  {
408  bReturn = true;
409 
410  /* if multi-selection contains a note caption object, remove
411  all other objects from selection. */
412  const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
413  const size_t nCount = rMarkList.GetMarkCount();
414  if( nCount > 1 )
415  {
416  bool bFound = false;
417  for( size_t nIdx = 0; !bFound && (nIdx < nCount); ++nIdx )
418  {
419  pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj();
420  bFound = ScDrawLayer::IsNoteCaption( pObj );
421  if( bFound )
422  {
423  pView->UnMarkAll();
424  pView->MarkObj( pObj, pView->GetSdrPageView() );
425  }
426  }
427  }
428  }
429  }
430  }
431 
432  // maybe consider OLE object
433  SfxInPlaceClient* pIPClient = rViewShell.GetIPClient();
434 
435  if (pIPClient)
436  {
437  ScModule* pScMod = SC_MOD();
438  bool bUnoRefDialog = pScMod->IsRefDialogOpen() && pScMod->GetCurRefDlgId() == WID_SIMPLE_REF;
439 
440  if ( pIPClient->IsObjectInPlaceActive() && !bUnoRefDialog )
441  pIPClient->DeactivateObject();
442  }
443 
444  sal_uInt16 nClicks = rMEvt.GetClicks();
445  if (pView && nClicks == 2 && rMEvt.IsLeft())
446  {
447  if ( pView->AreObjectsMarked() )
448  {
449  const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
450  if (rMarkList.GetMarkCount() == 1)
451  {
452  SdrMark* pMark = rMarkList.GetMark(0);
453  pObj = pMark->GetMarkedSdrObj();
454 
455  // only activate, when the mouse also is over the selected object
456 
457  SdrViewEvent aVEvt;
458  SdrHitKind eHit = pView->PickAnything( rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt );
459  if (eHit != SdrHitKind::NONE && aVEvt.pObj == pObj)
460  {
461  sal_uInt16 nSdrObjKind = pObj->GetObjIdentifier();
462 
463  // OLE: activate
464 
465  if (nSdrObjKind == OBJ_OLE2)
466  {
467  if (!bOle)
468  {
469  if (static_cast<SdrOle2Obj*>(pObj)->GetObjRef().is())
470  {
471  rViewShell.ActivateObject(static_cast<SdrOle2Obj*>(pObj), css::embed::EmbedVerbs::MS_OLEVERB_PRIMARY);
472  }
473  }
474  }
475 
476  // Edit text
477  // not in UNO controls
478  // #i32352# not in media objects
479 
480  else if ( dynamic_cast<const SdrTextObj*>( pObj) != nullptr && dynamic_cast<const SdrUnoObj*>( pObj) == nullptr && dynamic_cast<const SdrMediaObj*>( pObj) == nullptr )
481  {
483  bool bVertical = ( pOPO && pOPO->IsVertical() );
484  sal_uInt16 nTextSlotId = bVertical ? SID_DRAW_TEXT_VERTICAL : SID_DRAW_TEXT;
485 
487  Execute(nTextSlotId, SfxCallMode::SYNCHRON | SfxCallMode::RECORD);
488 
489  // Get the created FuText now and change into EditMode
491  if ( pPoor && pPoor->GetSlotID() == nTextSlotId ) // has no RTTI
492  {
493  FuText* pText = static_cast<FuText*>(pPoor);
494  Point aMousePixel = rMEvt.GetPosPixel();
495  pText->SetInEditMode( pObj, &aMousePixel );
496  }
497  bReturn = true;
498  }
499  }
500  }
501  }
502  else if ( TestDetective( pView->GetSdrPageView(), aPnt ) )
503  bReturn = true;
504  }
505 
506  ForcePointer(&rMEvt);
507 
508  if (pWindow->IsMouseCaptured())
510 
511  // command handler for context menu follows after MouseButtonUp,
512  // therefore here the hard IsLeft call
513  if ( !bReturn && rMEvt.IsLeft() )
516  Execute(SID_OBJECT_SELECT, SfxCallMode::SLOT | SfxCallMode::RECORD);
517 
518  if ( bCopy && pPage )
519  {
520  ScDocShell* pDocShell = rViewData.GetDocShell();
521  ScModelObj* pModelObj = ( pDocShell ? comphelper::getUnoTunnelImplementation<ScModelObj>( pDocShell->GetModel() ) : nullptr );
522  if ( pModelObj )
523  {
524  SCTAB nTab = rViewData.GetTabNo();
525  ScChartHelper::CreateProtectedChartListenersAndNotify( rDocument, pPage, pModelObj, nTab,
526  aProtectedChartRangesVector, aExcludedChartNames );
527  }
528  }
529 
530  return bReturn;
531 }
532 
533 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
SfxViewFrame * GetViewFrame() const
void UnmarkAllObj(SdrPageView const *pPV=nullptr)
const OUString & GetTarget() const
static bool IsXScriptURL(const OUString &rScriptURL)
void CaptureMouse()
bool IsDrawSelMode() const
Definition: tabview.hxx:316
ScDocShell * GetDocShell() const
Definition: viewdata.hxx:353
size_t GetMarkCount() const
bool bIsInDragMode
Definition: fupoor.hxx:56
void SetShiftPressed(bool bShiftPressed)
const OUString & GetMacro() const
Definition: userdat.hxx:82
bool IsObjectInPlaceActive() const
virtual bool MouseMove(const MouseEvent &rMEvt) override
Definition: fusel.cxx:299
virtual ~FuSelection() override
Definition: fusel.cxx:63
bool IsVertical() const
bool IsNoteCaptionClicked(const Point &rPos) const
Definition: fusel2.cxx:117
bool AreObjectsMarked() const
static ScMacroInfo * GetMacroInfo(SdrObject *pObj, bool bCreate=false)
Definition: drwlayer.cxx:2630
bool EndDragObj(bool bCopy=false)
static void OpenURL(const OUString &rURL, const OUString &rTarget, bool bIgnoreSettings=false)
Open the specified URL.
Definition: global.cxx:759
bool IsShift() const
SCTAB GetTabNo() const
Definition: viewdata.hxx:394
ScSplitPos GetActivePart() const
Definition: viewdata.hxx:397
SdrMark * GetMark(size_t nNum) const
ScDocument & GetDocument() const
Definition: viewdata.hxx:379
static bool ShouldOpenURL()
Whether the URL can be opened according to current security options (Click/Ctrl-Click) ...
Definition: global.cxx:824
static SfxObjectShell * Current()
Base class for all Drawmodule specific functions.
Definition: fudraw.hxx:27
css::uno::Reference< css::frame::XModel > GetModel() const
SdrHitKind PickAnything(const MouseEvent &rMEvt, SdrMouseEventKind nMouseDownOrMoveOrUp, SdrViewEvent &rVEvt) const
virtual SdrObjKind GetObjIdentifier() const
const OUString & GetTargetFrame() const
static void CreateProtectedChartListenersAndNotify(ScDocument &rDoc, const SdrPage *pPage, ScModelObj *pModelObj, SCTAB nTab, const ScRangeListVector &rRangesVector, const ::std::vector< OUString > &rExcludedChartNames, bool bSameDoc=true)
#define SC_MAXDRAGMOVE
fusel,fuconstr,futext - combine them!
Definition: fusel.cxx:51
bool IsActive() const
sal_uInt16 GetClicks() const
virtual void MovAction(const Point &rPnt) override
FuSelection(ScTabViewShell &rViewSh, vcl::Window *pWin, ScDrawView *pView, SdrModel *pDoc, const SfxRequest &rReq)
Definition: fusel.cxx:57
virtual css::uno::Reference< css::uno::XInterface > getUnoShape()
sal_uInt16 GetButtons() const
void SetMouseButtonCode(sal_uInt16 nNew)
Definition: fupoor.hxx:70
static IMapObject * GetHitIMapObject(const SdrObject *pObj, const Point &rWinPoint, const OutputDevice *pCmpWnd=nullptr)
SfxFrame & GetFrame() const
int nCount
virtual bool MouseMove(const MouseEvent &rMEvt) override
Definition: fudraw.cxx:137
const SvxURLField * pURLField
ScTabViewShell & rViewShell
Definition: fupoor.hxx:43
bool IsMarkedHit(const Point &rPnt, short nTol=-2) const
Timer aDragTimer
Definition: fupoor.hxx:53
void UnmarkAll()
void ForceScroll(const Point &aPixPos)
Definition: fupoor.cxx:70
void BegMacroObj(const Point &rPnt, short nTol, SdrObject *pObj, SdrPageView *pPV, vcl::Window *pWin)
static void AddRangesIfProtectedChart(ScRangeListVector &rRangesVector, const ScDocument &rDocument, SdrObject *pObject)
ScViewData & GetViewData()
Definition: tabview.hxx:333
sal_uInt16 GetSlotID() const
Definition: fupoor.hxx:90
Base class for Text functions.
Definition: futext.hxx:27
SdrObject * GetMarkedSdrObj() const
SdrHitKind
SdrObject * PickObj(const Point &rPnt, short nTol, SdrPageView *&rpPV, SdrSearchOptions nOptions, SdrObject **ppRootObj, bool *pbHitPassDirect=nullptr) const
static void GetChartNames(::std::vector< OUString > &rChartNames, const SdrPage *pPage)
SdrDragMethod * GetDragMethod() const
sal_uInt16 GetCurRefDlgId() const
Definition: scmod.hxx:228
int i
bool IsMod2() const
#define SC_MOD()
Definition: scmod.hxx:249
void FakeButtonUp(ScSplitPos eWhich)
Definition: tabview3.cxx:212
SdrEventKind eEvent
const SdrMarkList & GetMarkedObjectList() const
bool TestDetective(const SdrPageView *pPV, const Point &rPos)
Definition: fusel2.cxx:44
SdrHdl * PickHandle(const Point &rPnt) const
ErrCode CallXScript(const OUString &rScriptURL, const css::uno::Sequence< css::uno::Any > &aParams, css::uno::Any &aRet, css::uno::Sequence< sal_Int16 > &aOutParamIndex, css::uno::Sequence< css::uno::Any > &aOutParam, bool bRaiseError=true, const css::uno::Any *aCaller=nullptr)
virtual void Start() override
bool IsGroupObject() const
void BegMarkObj(const Point &rPnt, bool bUnmark=false)
bool IsNoteCaptionMarked() const
Definition: fusel2.cxx:103
bool IsMouseCaptured() const
Base class for all functions.
Definition: fupoor.hxx:39
Point aMDPos
Definition: fupoor.hxx:57
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
Definition: fusel.cxx:327
void DeactivateObject()
const std::optional< Point > & getLogicPosition() const
ScDBFunc * GetView() const
Definition: viewdata.cxx:853
const OUString & GetURL() const
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
void ActivateObject(SdrOle2Obj *pObj, sal_Int32 nVerb)
Definition: tabvwshb.cxx:145
::std::vector< ScRangeList > ScRangeListVector
Definition: charthelper.hxx:29
void ReleaseMouse()
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: fusel.cxx:67
virtual bool IsAction() const override
void UnlockInternalLayer()
Unlocks the internal layer that contains caption objects of cell notes.
Definition: drawview.hxx:137
SfxInPlaceClient * GetIPClient() const
void Stop()
bool IsInPlace() const
SdrPage * GetPage() const
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: fudraw.cxx:128
bool IsLeft() const
SfxDispatcher & GetDispatcher()
Definition: viewdata.cxx:3041
FuPoor * GetDrawFuncPtr()
Definition: tabview.hxx:321
ScDrawView * pView
Definition: fupoor.hxx:42
const Point & GetPosPixel() const
SdrObject * pObj
SdrPageView * GetSdrPageView() const
bool IsDragObj() const
static bool IsNoteCaption(SdrObject *pObj)
Returns true, if the passed object is the caption of a cell note.
Definition: drwlayer.cxx:2618
void SetInEditMode(SdrObject *pObj=nullptr, const Point *pMousePixel=nullptr, bool bCursorToEnd=false, const KeyEvent *pInitialKey=nullptr)
Definition: futext.cxx:534
const OUString & GetHlink() const
Definition: userdat.hxx:85
bool MarkObj(const Point &rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false)
bool IsRight() const
virtual bool BegDragObj(const Point &rPnt, OutputDevice *pOut, SdrHdl *pHdl, short nMinMov=-3, SdrDragMethod *pForcedMeth=nullptr) override
bool IsRefDialogOpen()
Definition: scmod.cxx:1606
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
Definition: fudraw.cxx:147
sal_uInt16 getHitTolLog() const
OBJ_OLE2
virtual void BckAction() override
virtual OutlinerParaObject * GetOutlinerParaObject() const
const OUString & GetURL() const
void UnMarkAll(SdrPageView const *pPV=nullptr)
VclPtr< vcl::Window > pWindow
Definition: fupoor.hxx:44
sal_Int16 SCTAB
Definition: types.hxx:22
SdrHdlKind GetKind() const
virtual void ForcePointer(const MouseEvent *pMEvt)
Definition: fudraw.cxx:668
void ForceMarkedToAnotherPage()
virtual void EndAction() override
bool IsMod1() const
#define SC_MINDRAGMOVE
Definition: fusel.cxx:53
static SvxIMapInfo * GetIMapInfo(const SdrObject *pObject)