LibreOffice Module svx (master)  1
svdmrkv.hxx
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 #ifndef INCLUDED_SVX_SVDMRKV_HXX
21 #define INCLUDED_SVX_SVDMRKV_HXX
22 
23 #include <svx/svdmark.hxx>
24 #include <svx/svdhdl.hxx>
25 #include <svx/svdsnpv.hxx>
26 #include <svx/svdtypes.hxx>
27 #include <svx/svxdllapi.h>
28 #include <o3tl/typed_flags_set.hxx>
30 
31 
32 class SfxViewShell;
33 
34 // The following is not yet implemented, or just partially:
35 enum class SdrSearchOptions
36 {
37  NONE = 0x0000,
38  DEEP = 0x0001, /* recursive into group objects */
39  ALSOONMASTER = 0x0002, /* MasterPages are also scanned */
40  WHOLEPAGE = 0x0004, /* Not just the ObjList of PageView */
41  TESTMARKABLE = 0x0008, /* just markable objects/points/handles/... */
42  TESTMACRO = 0x0010, /* Just objects with macro */
43  TESTTEXTEDIT = 0x0020, /* Just TextEdit-enabled objects */
44  MARKED = 0x0040, /* Just marked objects/points/... */
45  PASS2BOUND = 0x0080, /* In case of empty search results, then 2nd. try with BoundRectHit */
46  BEFOREMARK = 0x0100, /* if one marked one found, ignore all behind that */
47 
48  IMPISMASTER = 0x0200, /* MasterPage is being searched right now */
52 };
53 namespace o3tl
54 {
55  template<> struct typed_flags<SdrSearchOptions> : is_typed_flags<SdrSearchOptions, 0x03ff> {};
56 }
57 
58 enum class SdrHitKind
59 {
60  NONE, // No hit
61  Object, // Hit
62  Handle, // Marking handle
63  HelpLine, // Reference line
64  Gluepoint, // Glue point
65  TextEdit, // Open OutlinerView was hit
66  TextEditObj, // Object for SdrBeginTextEdit (Textbereich)
67  UrlField, // Field in TextObj was hit (while it is currently not edited)
68  Macro, // Object for BegMacroObj
69  MarkedObject, // Marked object (e.g. for dragging)
70  UnmarkedObject, // non-marked Object (e.g. for marking)
71  Cell // hit on a cell inside a table shape (outside of the cells text area)
72 };
73 
74 enum class SdrViewEditMode {
75  Edit, // Also known as arrow or pointer mode
76  Create, // Tool for object creation
77  GluePointEdit // Glue point editing mode
78 };
79 
82 {
83  NONE = 0,
84  POINTS = 1,
85  GLUEPOINTS = 2,
86 };
87 
88 class ImplMarkingOverlay;
90 
92 {
93  friend class SdrPageView;
94 
95  // #114409#-3 Migrate selections
96  std::unique_ptr<ImplMarkingOverlay> mpMarkObjOverlay;
97  std::unique_ptr<ImplMarkingOverlay> mpMarkPointsOverlay;
98  std::unique_ptr<ImplMarkingOverlay> mpMarkGluePointsOverlay;
99 
100  std::unique_ptr<MarkingSubSelectionOverlay> mpMarkingSubSelectionOverlay;
101 
102 protected:
103  SdrObject* mpMarkedObj; // If not just one object ( i.e. More than one object ) is marked.
104  SdrPageView* mpMarkedPV; // If all marked objects are situated on the same PageView.
105 
106  Point maRef1; // Persistent - Rotation center / axis of reflection
107  Point maRef2; // Persistent
109 
110  sdr::ViewSelection maSdrViewSelection;
111 
112  std::vector<basegfx::B2DRectangle> maSubSelectionList;
116 
117  static constexpr sal_uInt16 mnFrameHandlesLimit = 50;
118 
119  SdrDragMode meDragMode; // Persistent
122 
123  bool mbDesignMode : 1; // DesignMode for SdrUnoObj
124  bool mbForceFrameHandles : 1; // Persistent - FrameDrag also for single objects
125  bool mbPlusHdlAlways : 1; // Persistent
126  bool mbInsPolyPoint : 1; // at this time InsPolyPointDragging
127  bool mbMarkedObjRectDirty : 1;
128  bool mbMrkPntDirty : 1;
129  bool mbMarkedPointsRectsDirty : 1;
130 
131  // flag to completely disable handles at the view
132  bool mbMarkHandlesHidden : 1;
133 
134  // Helper to get a possible GridOffset from SdrObject
135  bool getPossibleGridOffsetForSdrObject(
136  basegfx::B2DVector& rOffset,
137  const SdrObject* pObj,
138  const SdrPageView* pPV) const;
139 
140  // Helper to get a possible GridOffset from Position
141  bool getPossibleGridOffsetForPosition(
142  basegfx::B2DVector& rOffset,
143  const basegfx::B2DPoint& rPoint,
144  const SdrPageView* pPV) const;
145 
146 private:
147  SVX_DLLPRIVATE void ImpSetPointsRects() const;
148  void UndirtyMrkPnt() const;
149 
150  void SetMarkHandlesForLOKit(tools::Rectangle const & rRect, const SfxViewShell* pOtherShell);
151 
152 protected:
153  virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
154  virtual void ModelHasChanged() override; // Is called by the PaintView
155  virtual void SetMarkHandles(SfxViewShell* pOtherShell); // maHdlList - fill (List of handles)
156  void SetMarkRects(); // Rects at the PageViews
157  void CheckMarked(); // Scan MarkList after Del and Lock Layer ...
158  void AddDragModeHdl(SdrDragMode eMode);
159  virtual bool MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) override;
160  virtual bool RequestHelp(const HelpEvent& rHEvt) override;
161 
162  // add custom handles (used by other apps, e.g. AnchorPos)
163  virtual void AddCustomHdl();
164 
165  void ForceRefToMarked();
166  void ForceUndirtyMrkPnt() const { if (mbMrkPntDirty) UndirtyMrkPnt(); }
167 
168  virtual SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObject* pObj, SdrPageView* pPV, SdrSearchOptions nOptions, const SdrLayerIDSet* pMVisLay) const;
169  SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList const * pOL, SdrPageView* pPV, SdrSearchOptions nOptions, const SdrLayerIDSet* pMVisLay, SdrObject*& rpRootObj) const;
170  SdrObject* CheckSingleSdrObjectHit(const Point& rPnt, sal_uInt16 nTol, SdrObjList const * pOL, SdrPageView* pPV, SdrSearchOptions nOptions, const SdrLayerIDSet* pMVisLay, SdrObject*& rpRootObj,const SdrMarkList * pMarkList) const;
171  bool ImpIsFrameHandles() const;
172  OUString ImpGetDescriptionString(const char* pStrCacheID, ImpGetDescriptionOptions nOpt=ImpGetDescriptionOptions::NONE) const;
173 
174  // Generates a string including degrees symbol, from an angel specification in 1/100deg
175  bool ImpMarkPoint(SdrHdl* pHdl, SdrMark* pMark, bool bUnmark);
176  virtual bool MarkPoints(const tools::Rectangle* pRect, bool bUnmark);
177  bool MarkGluePoints(const tools::Rectangle* pRect, bool bUnmark);
178 
179  void SetMoveOutside(bool bOn);
180  bool MarkableObjectsExceed( int n ) const;
181 
182 protected:
183  // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
184  SdrMarkView(
185  SdrModel& rSdrModel,
186  OutputDevice* pOut);
187 
188  virtual ~SdrMarkView() override;
189 
190 public:
191  virtual bool IsAction() const override;
192  virtual void MovAction(const Point& rPnt) override;
193  virtual void EndAction() override;
194  virtual void BckAction() override;
195  virtual void BrkAction() override;
196  virtual void TakeActionRect(tools::Rectangle& rRect) const override;
197 
198  virtual void ClearPageView() override;
199  virtual void HideSdrPage() override;
200  bool IsObjMarkable(SdrObject const * pObj, SdrPageView const * pPV) const;
201 
202  // Returns sal_True if objects, points or glue points are selected by drawing a frame
203  // (as long as the frame is drawn).
204  bool IsMarking() const { return IsMarkObj() || IsMarkPoints() || IsMarkGluePoints(); }
205 
206  // Marking objects by drawing of a selection frame
207  void BegMarkObj(const Point& rPnt, bool bUnmark = false);
208  void MovMarkObj(const Point& rPnt);
209  bool EndMarkObj();
210  void BrkMarkObj();
211  bool IsMarkObj() const { return (nullptr != mpMarkObjOverlay); }
212 
213  // DragModes: SDRDRAG_CREATE,SdrDragMode::Move,SdrDragMode::Resize,SdrDragMode::Rotate,SdrDragMode::Mirror,SdrDragMode::Shear,SdrDragMode::Crook
214  // Move==Resize
215  // The interface might maybe be changed in the future because of Ortho-Drag
216  void SetDragMode(SdrDragMode eMode);
217  SdrDragMode GetDragMode() const { return meDragMode; }
218  void SetFrameHandles(bool bOn);
219  bool IsFrameHandles() const { return mbForceFrameHandles; }
220 
221  // returns true if number of markable objects is greater than 1
222  bool HasMultipleMarkableObjects() const { return MarkableObjectsExceed(1); };
223 
224  void SetEditMode(SdrViewEditMode eMode);
225  SdrViewEditMode GetEditMode() const { return meEditMode; }
226 
228  bool IsEditMode() const { return meEditMode==SdrViewEditMode::Edit; }
229  void SetCreateMode(bool bOn) { SetEditMode(bOn?SdrViewEditMode::Create:SdrViewEditMode::Edit); }
230  bool IsCreateMode() const { return meEditMode==SdrViewEditMode::Create; }
231  void SetGluePointEditMode(bool bOn) { SetEditMode(bOn?SdrViewEditMode::GluePointEdit:meEditMode0); }
232  bool IsGluePointEditMode() const { return meEditMode==SdrViewEditMode::GluePointEdit; }
233 
234  void SetDesignMode(bool bOn = true);
235  bool IsDesignMode() const { return mbDesignMode; }
236 
237  void SetFrameDragSingles(bool bOn=true) { SetFrameHandles(bOn); }
238  bool IsFrameDragSingles() const { return IsFrameHandles(); }
239 
240  bool HasMarkableObj() const { return MarkableObjectsExceed(0); };
241 
242 
243 // migrate selections
244 
245 protected:
246  // all available changing methods
247  SdrMarkList& GetMarkedObjectListWriteAccess() { return maSdrViewSelection.GetMarkedObjectListWriteAccess(); }
248 
249 public:
250  // all available const methods for read access to selection
251  const SdrMarkList& GetMarkedObjectList() const { return maSdrViewSelection.GetMarkedObjectList(); }
252  // returns SAL_MAX_SIZE if not found
253  size_t TryToFindMarkedObject(const SdrObject* pObj) const { return GetMarkedObjectList().FindObject(pObj); }
254  SdrPageView* GetSdrPageViewOfMarkedByIndex(size_t nNum) const { return GetMarkedObjectList().GetMark(nNum)->GetPageView(); }
255  SdrMark* GetSdrMarkByIndex(size_t nNum) const { return GetMarkedObjectList().GetMark(nNum); }
256  SdrObject* GetMarkedObjectByIndex(size_t nNum) const { return GetMarkedObjectList().GetMark(nNum)->GetMarkedSdrObj(); }
257  size_t GetMarkedObjectCount() const { return GetMarkedObjectList().GetMarkCount(); }
258  void SortMarkedObjects() const { GetMarkedObjectList().ForceSort(); }
259  bool AreObjectsMarked() const { return 0 != GetMarkedObjectList().GetMarkCount(); }
260  OUString const & GetDescriptionOfMarkedObjects() const { return GetMarkedObjectList().GetMarkDescription(); }
261  OUString const & GetDescriptionOfMarkedPoints() const { return GetMarkedObjectList().GetPointMarkDescription(); }
262  OUString const & GetDescriptionOfMarkedGluePoints() const { return GetMarkedObjectList().GetGluePointMarkDescription(); }
263 
264  // Get a list of all those links which are connected to marked nodes,
265  // but which are not marked themselves.
266  const SdrMarkList& GetEdgesOfMarkedNodes() const { return maSdrViewSelection.GetEdgesOfMarkedNodes(); }
267  const SdrMarkList& GetMarkedEdgesOfMarkedNodes() const { return maSdrViewSelection.GetMarkedEdgesOfMarkedNodes(); }
268  const std::vector<SdrObject*>& GetTransitiveHullOfMarkedObjects() const { return maSdrViewSelection.GetAllMarkedObjects(); }
269 
270 
271  // mechanism to complete disable handles at the view. Handles will be hidden and deleted
272  // when set, no new ones created, no interaction allowed. Handles will be recreated and shown
273  // when reset. Default is false.
274  void hideMarkHandles();
275  void showMarkHandles();
276  bool areMarkHandlesHidden() const { return mbMarkHandlesHidden; }
277 
278  bool IsMarkedHit(const Point& rPnt, short nTol=-2) const { return IsMarkedObjHit(rPnt,nTol); }
279  bool IsMarkedObjHit(const Point& rPnt, short nTol=-2) const;
280 
281  SdrHdl* PickHandle(const Point& rPnt) const;
282 
283  // Pick: Supported options for nOptions are:
284  // SdrSearchOptions::DEEP SdrSearchOptions::ALSOONMASTER SdrSearchOptions::TESTMARKABLE SdrSearchOptions::TESTTEXTEDIT
285  // SdrSearchOptions::MARKED
286  // SdrSearchOptions::WHOLEPAGE
287  SdrObject* PickObj(const Point& rPnt, short nTol, SdrPageView*& rpPV, SdrSearchOptions nOptions, SdrObject** ppRootObj, bool* pbHitPassDirect=nullptr) const;
288  SdrObject* PickObj(const Point& rPnt, short nTol, SdrPageView*& rpPV, SdrSearchOptions nOptions=SdrSearchOptions::NONE) const;
289  bool MarkObj(const Point& rPnt, short nTol=-2, bool bToggle=false, bool bDeep=false);
290 
291  // Pick: Supported options for nOptions are SdrSearchOptions::PASS2BOUND
292  bool PickMarkedObj(const Point& rPnt, SdrObject*& rpObj, SdrPageView*& rpPV, SdrSearchOptions nOptions) const;
293 
294  // Selects the most upper of the marked objects (O1) and scans from there
295  // towards bottom direction, selecting the first non-marked object (O2).
296  // In case of success the marking of O1 is deleted, a marking is created at
297  // O2 and TRUE is returned. With the parameter bPrev=sal_True the scan
298  // direction is turned to the other direction.
299  bool MarkNextObj(bool bPrev=false);
300 
301  // Selects the most upper of the marked objects which is hit by rPnt/nTol
302  // and scans from there to bottom direction, selecting the first non-marked
303  // object (O2). In case of success the marking of O1 is deleted, a marking
304  // is created at O2 and sal_True is returned. With the parameter
305  // bPrev=sal_True the scan direction is turned to the other direction.
306  bool MarkNextObj(const Point& rPnt, short nTol, bool bPrev);
307 
308  // Mark all objects within a rectangular area
309  // Just objects are marked which are inclosed completely
310  void MarkObj(const tools::Rectangle& rRect, bool bUnmark);
311  void MarkObj(SdrObject* pObj, SdrPageView* pPV, bool bUnmark = false, bool bDoNoSetMarkHdl = false,
312  std::vector<basegfx::B2DRectangle> const & rSubSelections = std::vector<basegfx::B2DRectangle>());
313  void MarkAllObj(SdrPageView* pPV=nullptr); // pPage=NULL => all displayed pages
314  void UnmarkAllObj(SdrPageView const * pPV=nullptr); // pPage=NULL => all displayed pages
315 
316  // This function is time-consuming intensive, as the MarkList has to be scanned.
317  bool IsObjMarked(SdrObject const * pObj) const;
318  void UnMarkAll(SdrPageView const * pPV=nullptr) { UnmarkAllObj(pPV); }
319 
320  // Request/set the size of the marking handles. Declaration in Pixel.
321  // The value is meant to be the edge length ( link length ).
322  // Pair values are round up to impair values: 3->3, 4->5, 5->5, 6->7, 7->7, ...
323  // Default value is 7, minimum value is 3 Pixels.
324  sal_uInt16 GetMarkHdlSizePixel() const;
325  void SetMarkHdlSizePixel(sal_uInt16 nSiz);
326 
327  virtual bool HasMarkablePoints() const;
328  virtual sal_Int32 GetMarkablePointCount() const;
329  virtual bool HasMarkedPoints() const;
330 
331  // There might be points which can't be marked:
332  bool IsPointMarkable(const SdrHdl& rHdl) const;
333  virtual bool MarkPoint(SdrHdl& rHdl, bool bUnmark=false);
334 
336  bool MarkPointHelper(SdrHdl* pHdl, SdrMark* pMark, bool bUnmark);
337 
338  bool UnmarkPoint(SdrHdl& rHdl) { return MarkPoint(rHdl,true); }
339  bool IsPointMarked(const SdrHdl& rHdl) const { ForceUndirtyMrkPnt(); return rHdl.IsSelected(); }
340  bool MarkAllPoints() { return MarkPoints(nullptr,false); }
341  bool UnmarkAllPoints() { return MarkPoints(nullptr,true); }
342 
343  // Selects the first marked point (P1) which is hit by rPnt
344  // and from there it searches the first non-marked point(P2).
345  // In case of success the marking of
346  // P1 is deleted, a mark is set at P2.
347  void MarkNextPoint();
348 
349  // Search for the number of the suitable handle. In case of empty search result,
350  // SAL_MAX_SIZE is returned.
351  size_t GetHdlNum(SdrHdl const * pHdl) const { return maHdlList.GetHdlNum(pHdl); }
352  SdrHdl* GetHdl(size_t nHdlNum) const { return maHdlList.GetHdl(nHdlNum); }
353  const SdrHdlList& GetHdlList() const { return maHdlList; }
354 
355  // Draw a selection frame for marking of points.
356  // This routine will just be started in case that HasMarkablePoints() returns sal_True.
357  bool BegMarkPoints(const Point& rPnt, bool bUnmark = false);
358  void MovMarkPoints(const Point& rPnt);
359  bool EndMarkPoints();
360  void BrkMarkPoints();
361  bool IsMarkPoints() const { return (nullptr != mpMarkPointsOverlay); }
362 
363  // Select that additional handles are displayed permanently.
364  void SetPlusHandlesAlwaysVisible(bool bOn);
365  bool IsPlusHandlesAlwaysVisible() const { return mbPlusHdlAlways; }
366 
367  bool HasMarkableGluePoints() const;
368  bool HasMarkedGluePoints() const;
369 
370  // A gluepoint is clearly identified by the SdrObject
371  // (to which it belongs) as well as by a sal_uInt16 nId (as each SdrObject may consist of
372  // several glue points. Here at the View there is an additional
373  // SdrPageView, which should be defined correctly always.
374  // Alternatively a gluepoint may be characterized by a SdrHdl.
375  // In this case the SdrHdl instance consists of all required information.
376  // And in this case, the glue point are always is marked by enforcement
377  // (Handlers are just situated at marked gluepoints )
378  // Attention: With each change of the glue point status the handle list is re-calculated.
379  // All previously saved SdrHdl* became invalid by this, the same with the point IDs!
380  bool PickGluePoint(const Point& rPnt, SdrObject*& rpObj, sal_uInt16& rnId, SdrPageView*& rpPV) const;
381  bool MarkGluePoint(const SdrObject* pObj, sal_uInt16 nId, bool bUnmark);
382  void UnmarkGluePoint(const SdrObject* pObj, sal_uInt16 nId) { MarkGluePoint(pObj,nId,true); }
383  bool IsGluePointMarked(const SdrObject* pObj, sal_uInt16 nId) const;
384 
385  // Get the Hdl (handle) of a marked GluePoint. Non-marked
386  // GluePoints don`t have handles
387  SdrHdl* GetGluePointHdl(const SdrObject* pObj, sal_uInt16 nId) const;
388 
389  // Mark all points within this rectangular (View coordinates)
390  bool MarkAllGluePoints() { return MarkGluePoints(nullptr,false); }
391  bool UnmarkAllGluePoints() { return MarkGluePoints(nullptr,true); }
392 
393  // Selects the first marked point (P1) which is hit by rPnt
394  // and from there it searches the first non-marked point(P2).
395  // In case of success the marking of
396  // P1 is deleted, a mark is set at P2.
397  void MarkNextGluePoint();
398 
399  // Draw a selection frame for glue point marking.
400  // This routine will just be started in case that HasMarkablePoints() returns sal_True.
401  // The GlueEditMode sal_True is disregarded.
402  // bool BegMarkGluePoints(const Point& rPnt, OutputDevice* pOut);
403  bool BegMarkGluePoints(const Point& rPnt, bool bUnmark = false);
404  void MovMarkGluePoints(const Point& rPnt);
405  void EndMarkGluePoints();
406  void BrkMarkGluePoints();
407  bool IsMarkGluePoints() const { return (nullptr != mpMarkGluePointsOverlay); }
408 
409  // bRestraintPaint=sal_False causes the handles not to be drawn immediately.
410  // AdjustMarkHdl is just called in case of changes; usually this causes an Invalidate
411  // At the end of a redraw the handles are drawn automatically.
412  // The purpose is to avoid unnecessary flickering. -> This does not yet work, that's why sal_True!
413  void AdjustMarkHdl(SfxViewShell* pOtherShell = nullptr); //HMHBOOL bRestraintPaint=sal_True);
414 
415  const tools::Rectangle& GetMarkedObjRect() const; // SnapRects of Objects, without line width
416  tools::Rectangle GetMarkedObjBoundRect() const; // incl. line width, overlapping rags, ...
417  const tools::Rectangle& GetMarkedPointsRect() const; // Enclosing rectangle of all marked points
418  const tools::Rectangle& GetMarkedGluePointsRect() const; // Enclosing rectangle of all marked glue points
419  const tools::Rectangle& GetAllMarkedRect() const { return GetMarkedObjRect(); }
420  tools::Rectangle GetAllMarkedBoundRect() const { return GetMarkedObjBoundRect(); }
421 
422  // Will be always called, if the list of marked objects might be changed.
423  // If you override this method, be sure that you call the
424  // methods of the base class!
425  virtual void MarkListHasChanged();
426 
427  // Entering (Editing) of a maybe marked object group. If there are several
428  // object groups marked, the most upper group is selected. After that
429  // all member objects of the group are directly accessible. All other
430  // objects may not be processed in the meantime (until the next
431  // LeaveGroup()). With markings which overlaps pages, every page is processed
432  // separately. The method returns sal_True, if at least one group was entered.
433  void EnterMarkedGroup();
434 
435  // Rotation center point and start point of the axis of reflection, respectively
436  const Point& GetRef1() const { return maRef1; }
437  void SetRef1(const Point& rPt);
438 
439  // End point of the axis of reflection
440  const Point& GetRef2() const { return maRef2; }
441  void SetRef2(const Point& rPt);
443  virtual SfxViewShell* GetSfxViewShell() const;
444 };
445 
446 
447 // - Hit tolerances:
448 // It has to be declared in logical coordinates. So please translate the
449 // wanted pixel value with PixelToLogic in Logical values.
450 // Taking as example a logical value of 100:
451 // - For a horizontal hairline (Object with height 0), the generated data is +/-100, i.e.
452 // a vertical area of 200 logical units is sensitive.
453 // - For a polygon, a rectangular of the size (200,200) is generated and a
454 // touch test between Poly and this Rect is processed.
455 // - Objects which respond SdrObject::HasEdit()==TRUE ( e.g. a text frame ),
456 // are specially treated: An additional sensitive area with a width of
457 // 2*Tol (200 units for this example) is created around the object.
458 // When an object is directly hit, the Edit method is called.
459 // In opposite, a hit in the surrounding sensitive area enables Dragging.
460 
461 
462 #endif // INCLUDED_SVX_SVDMRKV_HXX
463 
464 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual void HideSdrPage()
Definition: svdpntv.cxx:371
bool UnmarkPoint(SdrHdl &rHdl)
Definition: svdmrkv.hxx:338
size_t GetHdlNum(const SdrHdl *pHdl) const
Definition: svdhdl.cxx:2277
size_t GetHdlNum(SdrHdl const *pHdl) const
Definition: svdmrkv.hxx:351
tools::Rectangle maMarkedGluePointsRect
Definition: svdmrkv.hxx:115
void SortMarkedObjects() const
Definition: svdmrkv.hxx:258
tools::Rectangle GetAllMarkedBoundRect() const
Definition: svdmrkv.hxx:420
bool UnmarkAllGluePoints()
Definition: svdmrkv.hxx:391
bool HasMarkableObj() const
Definition: svdmrkv.hxx:240
std::unique_ptr< ImplMarkingOverlay > mpMarkObjOverlay
Definition: svdmrkv.hxx:96
virtual void ModelHasChanged()
Definition: svdpntv.cxx:252
void UnmarkGluePoint(const SdrObject *pObj, sal_uInt16 nId)
Definition: svdmrkv.hxx:382
bool AreObjectsMarked() const
Definition: svdmrkv.hxx:259
SdrSearchOptions
Definition: svdmrkv.hxx:35
sdr::ViewSelection maSdrViewSelection
Definition: svdmrkv.hxx:110
bool IsDesignMode() const
Definition: svdmrkv.hxx:235
SdrViewEditMode
Definition: svdmrkv.hxx:74
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Definition: svdpntv.cxx:192
OUString const & GetDescriptionOfMarkedGluePoints() const
Definition: svdmrkv.hxx:262
OUString const & GetDescriptionOfMarkedPoints() const
Definition: svdmrkv.hxx:261
SdrPageView * GetSdrPageViewOfMarkedByIndex(size_t nNum) const
Definition: svdmrkv.hxx:254
size_t TryToFindMarkedObject(const SdrObject *pObj) const
Definition: svdmrkv.hxx:253
void SetFrameDragSingles(bool bOn=true)
Definition: svdmrkv.hxx:237
void SetEditMode(bool bOn)
Definition: svdmrkv.hxx:227
SdrDragMode GetDragMode() const
Definition: svdmrkv.hxx:217
void SetGluePointEditMode(bool bOn)
Definition: svdmrkv.hxx:231
void SetCreateMode(bool bOn)
Definition: svdmrkv.hxx:229
virtual void BrkAction() override
Definition: svdsnpv.cxx:237
bool MarkAllPoints()
Definition: svdmrkv.hxx:340
bool IsEditMode() const
Definition: svdmrkv.hxx:228
virtual void TakeActionRect(tools::Rectangle &rRect) const override
Definition: svdsnpv.cxx:244
bool HasMultipleMarkableObjects() const
Definition: svdmrkv.hxx:222
SdrHdl * GetHdl(size_t nHdlNum) const
Definition: svdmrkv.hxx:352
virtual bool MouseMove(const MouseEvent &, OutputDevice *)
Definition: svdpntv.hxx:454
virtual bool RequestHelp(const HelpEvent &)
Definition: svdpntv.hxx:455
void ForceUndirtyMrkPnt() const
Definition: svdmrkv.hxx:166
bool IsMarkedHit(const Point &rPnt, short nTol=-2) const
Definition: svdmrkv.hxx:278
bool IsMarkGluePoints() const
Definition: svdmrkv.hxx:407
Point maRef1
Definition: svdmrkv.hxx:106
bool MarkAllGluePoints()
Definition: svdmrkv.hxx:390
Point maRef2
Definition: svdmrkv.hxx:107
SdrHitKind
Definition: svdmrkv.hxx:58
Everything a View needs to know about a selected object.
Definition: svdmark.hxx:44
virtual void ClearPageView()
Definition: svdpntv.cxx:343
SdrDragMode meDragMode
Definition: svdmrkv.hxx:119
bool IsMarkObj() const
Definition: svdmrkv.hxx:211
std::vector< basegfx::B2DRectangle > maSubSelectionList
Definition: svdmrkv.hxx:112
size_t GetMarkedObjectCount() const
Definition: svdmrkv.hxx:257
OUString const & GetDescriptionOfMarkedObjects() const
Definition: svdmrkv.hxx:260
bool IsSelected() const
Definition: svdhdl.hxx:206
const SdrMarkList & GetMarkedObjectList() const
Definition: svdmrkv.hxx:251
virtual bool IsAction() const override
Definition: svdsnpv.cxx:203
bool IsGluePointEditMode() const
Definition: svdmrkv.hxx:232
const SdrMarkList & GetEdgesOfMarkedNodes() const
Definition: svdmrkv.hxx:266
SdrPageView * mpMarkedPV
Definition: svdmrkv.hxx:104
Abstract DrawObject.
Definition: svdobj.hxx:313
bool IsCreateMode() const
Definition: svdmrkv.hxx:230
const tools::Rectangle & GetAllMarkedRect() const
Definition: svdmrkv.hxx:419
SdrObject * mpMarkedObj
Definition: svdmrkv.hxx:103
const SdrMarkList & GetMarkedEdgesOfMarkedNodes() const
Definition: svdmrkv.hxx:267
SdrViewEditMode meEditMode
Definition: svdmrkv.hxx:120
SdrHdl * GetHdl(size_t nNum) const
Definition: svdhdl.hxx:462
SdrViewEditMode meEditMode0
Definition: svdmrkv.hxx:121
bool IsMarkPoints() const
Definition: svdmrkv.hxx:361
bool IsFrameHandles() const
Definition: svdmrkv.hxx:219
bool UnmarkAllPoints()
Definition: svdmrkv.hxx:341
const Point & GetRef2() const
Definition: svdmrkv.hxx:440
SdrDragMode
Definition: svdtypes.hxx:34
virtual void MovAction(const Point &rPnt) override
Definition: svdsnpv.cxx:208
std::unique_ptr< MarkingSubSelectionOverlay > mpMarkingSubSelectionOverlay
Definition: svdmrkv.hxx:100
virtual void BckAction() override
Definition: svdsnpv.cxx:230
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
bool IsFrameDragSingles() const
Definition: svdmrkv.hxx:238
bool IsPointMarked(const SdrHdl &rHdl) const
Definition: svdmrkv.hxx:339
virtual void EndAction() override
Definition: svdsnpv.cxx:219
void SetDesignMode(bool _bDesignMode) const
Sets all elements in the view which support a design and an alive mode into the given mode...
Definition: svdpagv.cxx:339
bool areMarkHandlesHidden() const
Definition: svdmrkv.hxx:276
SdrObject * GetMarkedObjectByIndex(size_t nNum) const
Definition: svdmrkv.hxx:256
SdrViewEditMode GetEditMode() const
Definition: svdmrkv.hxx:225
ImpGetDescriptionOptions
options for ImpGetDescriptionString()
Definition: svdmrkv.hxx:81
bool IsPlusHandlesAlwaysVisible() const
Definition: svdmrkv.hxx:365
tools::Rectangle maMarkedPointsRect
Definition: svdmrkv.hxx:114
const std::vector< SdrObject * > & GetTransitiveHullOfMarkedObjects() const
Definition: svdmrkv.hxx:268
SdrHdlList maHdlList
Definition: svdmrkv.hxx:108
std::unique_ptr< ImplMarkingOverlay > mpMarkGluePointsOverlay
Definition: svdmrkv.hxx:98
const SdrHdlList & GetHdlList() const
Definition: svdmrkv.hxx:353
SdrMark * GetSdrMarkByIndex(size_t nNum) const
Definition: svdmrkv.hxx:255
tools::Rectangle maMarkedObjRect
Definition: svdmrkv.hxx:113
bool IsMarking() const
Definition: svdmrkv.hxx:204
#define SVX_DLLPRIVATE
Definition: svxdllapi.h:30
SdrMarkList & GetMarkedObjectListWriteAccess()
Definition: svdmrkv.hxx:247
std::unique_ptr< ImplMarkingOverlay > mpMarkPointsOverlay
Definition: svdmrkv.hxx:97
void UnMarkAll(SdrPageView const *pPV=nullptr)
Definition: svdmrkv.hxx:318
bool IsObjMarkable(SdrObject const *pObj) const
At least one member must be visible for the Group object and it must not be locked.
Definition: svdpagv.cxx:580
const Point & GetRef1() const
Definition: svdmrkv.hxx:436