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 #include <comphelper/lok.hxx>
36 
37 #include <fusel.hxx>
38 #include <sc.hrc>
39 #include <fudraw.hxx>
40 #include <futext.hxx>
41 #include <drawview.hxx>
42 #include <tabvwsh.hxx>
43 #include <drwlayer.hxx>
44 #include <userdat.hxx>
45 #include <scmod.hxx>
46 #include <charthelper.hxx>
47 #include <docuno.hxx>
48 #include <docsh.hxx>
49 
50 // maximal permitted mouse movement to start Drag&Drop
52 #define SC_MAXDRAGMOVE 3
53 // Min necessary mouse motion for normal dragging
54 #define SC_MINDRAGMOVE 2
55 
56 using namespace com::sun::star;
57 
59  SdrModel* pDoc, const SfxRequest& rReq)
60  : FuDraw(rViewSh, pWin, pViewP, pDoc, rReq)
61 {
62 }
63 
65 {
66 }
67 
69 {
70  // remember button state for creation of own MouseEvents
72  const bool bSelectionOnly = rMEvt.IsRight();
73  if ( pView->IsAction() )
74  {
75  if ( bSelectionOnly )
76  pView->BckAction();
77  return true;
78  }
79 
80  bIsInDragMode = false; // somewhere it has to be reset (#50033#)
81 
82  bool bReturn = FuDraw::MouseButtonDown(rMEvt);
83  auto aLogicPosition = rMEvt.getLogicPosition();
84  if (aLogicPosition)
85  aMDPos = *aLogicPosition;
86  else
88 
90  {
91  ScViewData& rViewData = rViewShell.GetViewData();
92  ScDocument& rDocument = rViewData.GetDocument();
93  if (rDocument.IsNegativePage(rViewData.GetTabNo()))
94  aMDPos.setX(-aMDPos.X());
95  }
96 
97  if ( rMEvt.IsLeft() )
98  {
99  SdrHdl* pHdl = pView->PickHandle(aMDPos);
100 
101  if ( pHdl!=nullptr || pView->IsMarkedHit(aMDPos) )
102  {
103  // Determine if this is the tail of a SdrCaptionObj i.e.
104  // we need to disable the drag option on the tail of a note
105  // object. Also, disable the ability to use the circular
106  // drag of a note object.
107  bool bDrag = false;
108  const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
109  if( rMarkList.GetMarkCount() == 1 )
110  {
111  SdrObject* pMarkedObj = rMarkList.GetMark( 0 )->GetMarkedSdrObj();
112  if( ScDrawLayer::IsNoteCaption( pMarkedObj ) )
113  {
114  // move using the valid caption handles for note text box.
115  if(pHdl && (pHdl->GetKind() != SdrHdlKind::Poly && pHdl->GetKind() != SdrHdlKind::Circle))
116  bDrag = true;
117  // move the complete note box.
118  else if(!pHdl)
119  bDrag = true;
120  }
121  else
122  bDrag = true; // different object
123  }
124  else
125  bDrag = true; // several objects
126 
127  if ( bDrag )
128  {
129  aDragTimer.Start();
130  if (pView->BegDragObj(aMDPos, nullptr, pHdl))
132  bReturn = true;
133  }
134  }
135  else
136  {
137  SdrPageView* pPV = nullptr;
138  bool bAlt = rMEvt.IsMod2();
139  SdrObject* pObj = !bAlt ? pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::PICKMACRO) : nullptr;
140  if (pObj)
141  {
142  pView->BegMacroObj(aMDPos, pObj, pPV, pWindow);
143  bReturn = true;
144  }
145  else
146  {
147  OUString sURL, sTarget;
148  pObj = !bAlt ? pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::ALSOONMASTER) : nullptr;
149  if (pObj)
150  {
151  // Support for imported Excel docs
152  // Excel is of course not consistent and allows
153  // a hyperlink to be assigned for an object group
154  // and even though the hyperlink is exported in the Escher layer
155  // its never used, when dealing with a group object the link
156  // associated with the clicked object is used only
157 
158  // additionally you can also select a macro in Excel for a grouped
159  // objects and this *usually* results in the macro being set
160  // for the elements in the group and no macro is exported
161  // for the group itself ( this however is not always true )
162  // if a macro and hlink are defined favour the hlink
163  // If a group object has no hyperlink use the hyperlink of the
164  // object clicked
165 
166  if ( pObj->IsGroupObject() )
167  {
168  ScMacroInfo* pTmpInfo = ScDrawLayer::GetMacroInfo( pObj );
169  if ( !pTmpInfo || pTmpInfo->GetMacro().isEmpty() )
170  {
171  SdrObject* pHit = pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::DEEP);
172  if (pHit)
173  pObj = pHit;
174  }
175  }
176 
177  ScMacroInfo* pInfo = ScDrawLayer::GetMacroInfo( pObj, true );
178  // For interoperability favour links over macros if both are defined
179  if ( !pObj->getHyperlink().isEmpty() )
180  {
181  sURL = pObj->getHyperlink();
182  }
183  else if ( !pInfo->GetMacro().isEmpty() )
184  {
186  if ( pObjSh && SfxApplication::IsXScriptURL( pInfo->GetMacro() ) )
187  {
188  uno::Reference< beans::XPropertySet > xProps( pObj->getUnoShape(), uno::UNO_QUERY );
189  uno::Any aCaller;
190  if ( xProps.is() )
191  {
192  try
193  {
194  aCaller = xProps->getPropertyValue("Name");
195  }
196  catch( uno::Exception& ) {}
197  }
198  uno::Any aRet;
199  uno::Sequence< sal_Int16 > aOutArgsIndex;
200  uno::Sequence< uno::Any > aOutArgs;
201  uno::Sequence< uno::Any > aInArgs;
202  pObjSh->CallXScript( pInfo->GetMacro(),
203  aInArgs, aRet, aOutArgsIndex, aOutArgs, true, &aCaller );
205  return true; // no CaptureMouse etc.
206  }
207  }
208  }
209 
210  // URL / ImageMap
211 
212  SdrViewEvent aVEvt;
213  if ( !bAlt &&
214  pView->PickAnything( rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt ) != SdrHitKind::NONE &&
215  aVEvt.mpObj != nullptr )
216  {
217  if ( SvxIMapInfo::GetIMapInfo( aVEvt.mpObj ) ) // ImageMap
218  {
219  const IMapObject* pIMapObj =
221  if ( pIMapObj && !pIMapObj->GetURL().isEmpty() )
222  {
223  sURL = pIMapObj->GetURL();
224  sTarget = pIMapObj->GetTarget();
225  }
226  }
227  if ( aVEvt.meEvent == SdrEventKind::ExecuteUrl && aVEvt.mpURLField ) // URL
228  {
229  sURL = aVEvt.mpURLField->GetURL();
230  sTarget = aVEvt.mpURLField->GetTargetFrame();
231  }
232  }
233 
234  // open hyperlink, if found at object or in object's text
235  // Fragments pointing into the current document should be always opened.
236  if ( !sURL.isEmpty() && (ScGlobal::ShouldOpenURL() || sURL.startsWith("#")) )
237  {
238  ScGlobal::OpenURL( sURL, sTarget );
240  return true; // no CaptureMouse etc.
241  }
242 
243  // Is another object being edited in this view?
244  // (Editing is ended in MarkListHasChanged - test before UnmarkAll)
246  bool bWasOleActive = ( pClient && pClient->IsObjectInPlaceActive() );
247 
248  // Selection
249 
250  // do not allow multiselection with note caption
251  bool bCaptionClicked = IsNoteCaptionClicked( aMDPos );
252  if ( !rMEvt.IsShift() || bCaptionClicked || IsNoteCaptionMarked() )
253  pView->UnmarkAll();
254 
255  /* Unlock internal layer, if a note caption is clicked. The
256  layer will be relocked in ScDrawView::MarkListHasChanged(). */
257  if( bCaptionClicked )
259 
260  // try to select the clicked object
261  if ( pView->MarkObj( aMDPos, -2, false, rMEvt.IsMod1() ) )
262  {
263 
264  // move object
265 
266  if (pView->IsMarkedHit(aMDPos))
267  {
268  // Don't start drag timer if inplace editing of an OLE object
269  // was just ended with this mouse click - the view will be moved
270  // (different tool bars) and the object that was clicked on would
271  // be moved unintentionally.
272  if ( !bWasOleActive )
273  aDragTimer.Start();
274 
275  pHdl=pView->PickHandle(aMDPos);
276  pView->BegDragObj(aMDPos, nullptr, pHdl);
277  bReturn = true;
278  }
279  else // object at the edge
281  bReturn = true;
282  }
283  else
284  {
286  {
287 
288  // select object
289 
291  bReturn = true;
292  }
293  }
294  }
295  }
296 
297  }
298 
299  if (!bIsInDragMode)
300  {
301  // VC calls CaptureMouse itself
303  ForcePointer(&rMEvt);
304  }
305 
306  return bReturn;
307 }
308 
310 {
311  bool bReturn = FuDraw::MouseMove(rMEvt);
312 
313  if (aDragTimer.IsActive() )
314  {
315  Point aOldPixel = pWindow->LogicToPixel( aMDPos );
316  Point aNewPixel = rMEvt.GetPosPixel();
317  if ( std::abs( aOldPixel.X() - aNewPixel.X() ) > SC_MAXDRAGMOVE ||
318  std::abs( aOldPixel.Y() - aNewPixel.Y() ) > SC_MAXDRAGMOVE )
319  aDragTimer.Stop();
320  }
321 
322  if ( pView->IsAction() )
323  {
324  Point aPix(rMEvt.GetPosPixel());
325  Point aPnt(pWindow->PixelToLogic(aPix));
326 
327  ForceScroll(aPix);
328  pView->MovAction(aPnt);
329  bReturn = true;
330  }
331 
332  ForcePointer(&rMEvt);
333 
334  return bReturn;
335 }
336 
338 {
339  // remember button state for creation of own MouseEvents
341 
342  bool bReturn = FuDraw::MouseButtonUp(rMEvt);
343  bool bOle = rViewShell.GetViewFrame()->GetFrame().IsInPlace();
344 
345  SdrObject* pObj = nullptr;
346  if (aDragTimer.IsActive() )
347  {
348  aDragTimer.Stop();
349  }
350 
351  sal_uInt16 nDrgLog = sal_uInt16 ( pWindow->PixelToLogic(Size(SC_MINDRAGMOVE,0)).Width() );
352  auto aLogicPosition = rMEvt.getLogicPosition();
353  Point aPnt(aLogicPosition ? *aLogicPosition : pWindow->PixelToLogic(rMEvt.GetPosPixel()));
354 
355  bool bCopy = false;
356  ScViewData& rViewData = rViewShell.GetViewData();
357  ScDocument& rDocument = rViewData.GetDocument();
358  SdrPageView* pPageView = ( pView ? pView->GetSdrPageView() : nullptr );
359  SdrPage* pPage = ( pPageView ? pPageView->GetPage() : nullptr );
360  ::std::vector< OUString > aExcludedChartNames;
361  ScRangeListVector aProtectedChartRangesVector;
362 
363  if (comphelper::LibreOfficeKit::isActive() && rDocument.IsNegativePage(rViewData.GetTabNo()))
364  aPnt.setX(-aPnt.X());
365 
366  if (pView && rMEvt.IsLeft())
367  {
368  if ( pView->IsDragObj() )
369  {
370  // object was moved
371  if ( rMEvt.IsMod1() )
372  {
373  if ( pPage )
374  {
375  ScChartHelper::GetChartNames( aExcludedChartNames, pPage );
376  }
377  if ( pView )
378  {
379  const SdrMarkList& rSdrMarkList = pView->GetMarkedObjectList();
380  const size_t nMarkCount = rSdrMarkList.GetMarkCount();
381  for ( size_t i = 0; i < nMarkCount; ++i )
382  {
383  SdrMark* pMark = rSdrMarkList.GetMark( i );
384  pObj = ( pMark ? pMark->GetMarkedSdrObj() : nullptr );
385  if ( pObj )
386  {
387  ScChartHelper::AddRangesIfProtectedChart( aProtectedChartRangesVector, rDocument, pObj );
388  }
389  }
390  }
391  bCopy = true;
392  }
393 
394  if (!rMEvt.IsShift() && !rMEvt.IsMod1() && !rMEvt.IsMod2() &&
395  std::abs(aPnt.X() - aMDPos.X()) < nDrgLog &&
396  std::abs(aPnt.Y() - aMDPos.Y()) < nDrgLog)
397  {
398  /* If a user wants to click on an object in front of a marked
399  one, he releases the mouse button immediately */
400  SdrPageView* pPV = nullptr;
401  pObj = pView->PickObj(aMDPos, pView->getHitTolLog(), pPV, SdrSearchOptions::ALSOONMASTER | SdrSearchOptions::BEFOREMARK);
402  if (pObj)
403  {
404  pView->UnmarkAllObj();
405  pView->MarkObj(pObj,pPV);
406  return true;
407  }
408  }
409  pView->EndDragObj( rMEvt.IsMod1() );
411 
412  bReturn = true;
413  }
414  else if (pView->IsAction() )
415  {
416  // unlock internal layer to include note captions
418  pView->EndAction();
419  if ( pView->AreObjectsMarked() )
420  {
421  bReturn = true;
422 
423  /* if multi-selection contains a note caption object, remove
424  all other objects from selection. */
425  const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
426  const size_t nCount = rMarkList.GetMarkCount();
427  if( nCount > 1 )
428  {
429  bool bFound = false;
430  for( size_t nIdx = 0; !bFound && (nIdx < nCount); ++nIdx )
431  {
432  pObj = rMarkList.GetMark( nIdx )->GetMarkedSdrObj();
433  bFound = ScDrawLayer::IsNoteCaption( pObj );
434  if( bFound )
435  {
436  pView->UnMarkAll();
437  pView->MarkObj( pObj, pView->GetSdrPageView() );
438  }
439  }
440  }
441  }
442  }
443  }
444 
445  // maybe consider OLE object
446  SfxInPlaceClient* pIPClient = rViewShell.GetIPClient();
447 
448  if (pIPClient)
449  {
450  ScModule* pScMod = SC_MOD();
451  bool bUnoRefDialog = pScMod->IsRefDialogOpen() && pScMod->GetCurRefDlgId() == WID_SIMPLE_REF;
452 
453  if ( pIPClient->IsObjectInPlaceActive() && !bUnoRefDialog )
454  pIPClient->DeactivateObject();
455  }
456 
457  sal_uInt16 nClicks = rMEvt.GetClicks();
458  if (pView && nClicks == 2 && rMEvt.IsLeft())
459  {
460  if ( pView->AreObjectsMarked() )
461  {
462  const SdrMarkList& rMarkList = pView->GetMarkedObjectList();
463  if (rMarkList.GetMarkCount() == 1)
464  {
465  SdrMark* pMark = rMarkList.GetMark(0);
466  pObj = pMark->GetMarkedSdrObj();
467 
468  // only activate, when the mouse also is over the selected object
469 
470  SdrViewEvent aVEvt;
471  SdrHitKind eHit = pView->PickAnything( rMEvt, SdrMouseEventKind::BUTTONDOWN, aVEvt );
472  if (eHit != SdrHitKind::NONE && aVEvt.mpObj == pObj)
473  {
474  SdrObjKind nSdrObjKind = pObj->GetObjIdentifier();
475 
476  // OLE: activate
477 
478  if (nSdrObjKind == SdrObjKind::OLE2)
479  {
480  if (!bOle)
481  {
482  if (static_cast<SdrOle2Obj*>(pObj)->GetObjRef().is())
483  {
484  rViewShell.ActivateObject(static_cast<SdrOle2Obj*>(pObj), css::embed::EmbedVerbs::MS_OLEVERB_PRIMARY);
485  }
486  }
487  }
488 
489  // Edit text
490  // not in UNO controls
491  // #i32352# not in media objects
492 
493  else if ( dynamic_cast<const SdrTextObj*>( pObj) != nullptr && dynamic_cast<const SdrUnoObj*>( pObj) == nullptr && dynamic_cast<const SdrMediaObj*>( pObj) == nullptr )
494  {
496  bool bVertical = ( pOPO && pOPO->IsEffectivelyVertical() );
497  sal_uInt16 nTextSlotId = bVertical ? SID_DRAW_TEXT_VERTICAL : SID_DRAW_TEXT;
498 
500  Execute(nTextSlotId, SfxCallMode::SYNCHRON | SfxCallMode::RECORD);
501 
502  // Get the created FuText now and change into EditMode
504  if ( pPoor && pPoor->GetSlotID() == nTextSlotId ) // has no RTTI
505  {
506  FuText* pText = static_cast<FuText*>(pPoor);
507  Point aMousePixel = rMEvt.GetPosPixel();
508  pText->SetInEditMode( pObj, &aMousePixel );
509  }
510  bReturn = true;
511  }
512  }
513  }
514  }
515  else if ( TestDetective( pView->GetSdrPageView(), aPnt ) )
516  bReturn = true;
517  }
518 
519  ForcePointer(&rMEvt);
520 
521  if (pWindow->IsMouseCaptured())
523 
524  // command handler for context menu follows after MouseButtonUp,
525  // therefore here the hard IsLeft call
526  if ( !bReturn && rMEvt.IsLeft() )
529  Execute(SID_OBJECT_SELECT, SfxCallMode::SLOT | SfxCallMode::RECORD);
530 
531  if ( bCopy && pPage )
532  {
533  ScDocShell* pDocShell = rViewData.GetDocShell();
534  ScModelObj* pModelObj = ( pDocShell ? comphelper::getFromUnoTunnel<ScModelObj>( pDocShell->GetModel() ) : nullptr );
535  if ( pModelObj )
536  {
537  SCTAB nTab = rViewData.GetTabNo();
538  ScChartHelper::CreateProtectedChartListenersAndNotify( rDocument, pPage, pModelObj, nTab,
539  aProtectedChartRangesVector, aExcludedChartNames );
540  }
541  }
542 
543  return bReturn;
544 }
545 
546 /* 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:354
size_t GetMarkCount() const
bool bIsInDragMode
Definition: fupoor.hxx:56
void SetShiftPressed(bool bShiftPressed)
SC_DLLPUBLIC bool IsNegativePage(SCTAB nTab) const
Definition: document.cxx:997
const OUString & GetMacro() const
Definition: userdat.hxx:82
bool IsObjectInPlaceActive() const
virtual bool MouseMove(const MouseEvent &rMEvt) override
Definition: fusel.cxx:309
virtual ~FuSelection() override
Definition: fusel.cxx:64
bool IsNoteCaptionClicked(const Point &rPos) const
Definition: fusel2.cxx:117
bool AreObjectsMarked() const
static ScMacroInfo * GetMacroInfo(SdrObject *pObj, bool bCreate=false)
Definition: drwlayer.cxx:2641
bool EndDragObj(bool bCopy=false)
css::uno::Reference< css::frame::XModel3 > GetModel() const
const ::avmedia::MediaItem * Execute(const SdrMarkView *pSdrView, SfxRequest const &rReq)
static void OpenURL(const OUString &rURL, const OUString &rTarget, bool bIgnoreSettings=false)
Open the specified URL.
Definition: global.cxx:770
bool IsShift() const
SCTAB GetTabNo() const
Definition: viewdata.hxx:395
ScSplitPos GetActivePart() const
Definition: viewdata.hxx:398
const OUString & getHyperlink() const
SdrMark * GetMark(size_t nNum) const
ScDocument & GetDocument() const
Definition: viewdata.hxx:380
static bool ShouldOpenURL()
Whether the URL can be opened according to current security options (Click/Ctrl-Click) ...
Definition: global.cxx:836
static SfxObjectShell * Current()
Base class for all Drawmodule specific functions.
Definition: fudraw.hxx:27
const SvxURLField * mpURLField
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:52
SdrObjKind
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:58
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
virtual css::uno::Reference< css::drawing::XShape > getUnoShape()
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:72
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
Point LogicToPixel(const Point &rLogicPt) const
int i
bool IsMod2() const
#define SC_MOD()
Definition: scmod.hxx:249
void FakeButtonUp(ScSplitPos eWhich)
Definition: tabview3.cxx:214
const SdrMarkList & GetMarkedObjectList() const
bool TestDetective(const SdrPageView *pPV, const Point &rPos)
Definition: fusel2.cxx:44
virtual void Start(bool bStartTimer=true) override
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)
bool IsGroupObject() const
void BegMarkObj(const Point &rPnt, bool bUnmark=false)
bool IsNoteCaptionMarked() const
Definition: fusel2.cxx:103
bool IsMouseCaptured() const
Point PixelToLogic(const Point &rDevicePt) 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:337
void DeactivateObject()
const std::optional< Point > & getLogicPosition() const
ScDBFunc * GetView() const
Definition: viewdata.cxx:863
const OUString & GetURL() const
void ActivateObject(SdrOle2Obj *pObj, sal_Int32 nVerb)
Definition: tabvwshb.cxx:152
::std::vector< ScRangeList > ScRangeListVector
Definition: charthelper.hxx:29
void ReleaseMouse()
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: fusel.cxx:68
virtual bool IsAction() const override
void UnlockInternalLayer()
Unlocks the internal layer that contains caption objects of cell notes.
Definition: drawview.hxx:137
bool IsEffectivelyVertical() const
SfxInPlaceClient * GetIPClient() const
void Stop()
bool IsInPlace() const
SdrObject * mpObj
SdrPage * GetPage() const
virtual bool MouseButtonDown(const MouseEvent &rMEvt) override
Definition: fudraw.cxx:128
::OutputDevice const * GetOutDev() const
bool IsLeft() const
SfxDispatcher & GetDispatcher()
Definition: viewdata.cxx:3129
FuPoor * GetDrawFuncPtr()
Definition: tabview.hxx:321
ScDrawView * pView
Definition: fupoor.hxx:42
const Point & GetPosPixel() const
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:2629
void SetInEditMode(SdrObject *pObj=nullptr, const Point *pMousePixel=nullptr, bool bCursorToEnd=false, const KeyEvent *pInitialKey=nullptr)
Definition: futext.cxx:533
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
SdrEventKind meEvent
bool IsRefDialogOpen()
Definition: scmod.cxx:1662
virtual bool MouseButtonUp(const MouseEvent &rMEvt) override
Definition: fudraw.cxx:147
sal_uInt16 getHitTolLog() const
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:669
void ForceMarkedToAnotherPage()
virtual void EndAction() override
bool IsMod1() const
#define SC_MINDRAGMOVE
Definition: fusel.cxx:54
static SvxIMapInfo * GetIMapInfo(const SdrObject *pObject)