LibreOffice Module svx (master)  1
svdedxv.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_SVDEDXV_HXX
21 #define INCLUDED_SVX_SVDEDXV_HXX
22 
23 #include <rtl/ref.hxx>
24 #include <svl/languageoptions.hxx>
25 #include <svx/svxdllapi.h>
26 #include <svx/svdglev.hxx>
28 #include <editeng/editview.hxx>
29 #include <memory>
30 
31 class SdrOutliner;
32 class OutlinerView;
33 class EditStatus;
34 class EditFieldInfo;
35 class ImpSdrEditPara;
36 struct PasteOrDropInfos;
37 class SdrUndoManager;
39 
40 namespace com { namespace sun { namespace star { namespace uno {
41  class Any;
42 } } } }
43 
44 namespace sdr {
45  class SelectionController;
46 }
47 
49 {
50  Unchanged, // textobject unchanged
51  Changed, // textobject changed
52  Deleted, // textobject implicitly deleted
53  ShouldBeDeleted // for writer: textobject should be deleted
54 };
55 
56 // - general edit for objectspecific properties
57 // - textedit for all drawobjects, inherited from SdrTextObj
58 // - macromode
59 
60 
62 {
63  friend class SdrPageView;
64  friend class ImpSdrEditPara;
65 
66  // Now derived from EditViewCallbacks and overriding these callbacks to
67  // allow own EditText visualization
68  virtual void EditViewInvalidate(const tools::Rectangle& rRect) const override;
69  virtual void EditViewSelectionChange() const override;
70  virtual OutputDevice& EditViewOutputDevice() const override;
71 
72  // The OverlayObjects used for visualizing active TextEdit (currently
73  // using TextEditOverlayObject, but not limited to it
75 
76 protected:
77  // TextEdit
79  mxTextEditObj; // current object in TextEdit
81  std::unique_ptr<SdrOutliner> pTextEditOutliner; // outliner for the TextEdit
82  OutlinerView* pTextEditOutlinerView; // current view of the outliners
83  VclPtr<vcl::Window> pTextEditWin; // matching window to pTextEditOutlinerView
84  vcl::Cursor* pTextEditCursorBuffer; // to restore the cursor in each window
88 
93 
94  sal_uInt16 nMacroTol;
95 
96  bool bTextEditDontDelete : 1; // do not delete outliner and view of SdrEndTextEdit (f. spellchecking)
97  bool bTextEditOnlyOneView : 1; // a single OutlinerView (f. spellchecking)
98  bool bTextEditNewObj : 1; // current edited object was just recreated
99  bool bQuickTextEditMode : 1; // persistent(->CrtV). Default=TRUE
100  bool bMacroDown : 1;
101 
104 
105 private:
107 
109 
110 protected:
111  // central method to get an SdrUndoManager for enhanced TextEdit. Default will
112  // try to return a dynamic_casted GetModel()->GetSdrUndoManager(). Applications
113  // which want to use this feature will need to override this virtual method,
114  // provide their document UndoManager and derive it from SdrUndoManager.
115  virtual SdrUndoManager* getSdrUndoManagerForEnhancedTextEdit() const;
116 
117  void ImpMoveCursorAfterChainingEvent(TextChainCursorManager *pCursorManager);
118  TextChainCursorManager *ImpHandleMotionThroughBoxesKeyInput(const KeyEvent& rKEvt, bool *bOutHandled);
119 
120 
121  OutlinerView* ImpFindOutlinerView(vcl::Window const * pWin) const;
122 
123  // Create a new OutlinerView at the heap and initialize all required parameters.
124  // pTextEditObj, pTextEditPV and pTextEditOutliner have to be initialized
125  OutlinerView* ImpMakeOutlinerView(vcl::Window* pWin, OutlinerView* pGivenView, SfxViewShell* pViewShell = nullptr) const;
126  void ImpPaintOutlinerView(OutlinerView& rOutlView, const tools::Rectangle& rRect, OutputDevice& rTargetDevice) const;
127  void ImpInvalidateOutlinerView(OutlinerView const & rOutlView) const;
128 
129  // Chaining
130  void ImpChainingEventHdl();
131  DECL_LINK(ImpAfterCutOrPasteChainingEventHdl, LinkParamNone*, void);
132 
133 
134  // Check if the whole text is selected.
135  // Still returns sal_True if there is no text present.
136  bool ImpIsTextEditAllSelected() const;
137  void ImpMakeTextCursorAreaVisible();
138 
139  // handler for AutoGrowing text with active Outliner
140  DECL_LINK(ImpOutlinerStatusEventHdl, EditStatus&, void);
141  DECL_LINK(ImpOutlinerCalcFieldValueHdl, EditFieldInfo*, void);
142 
143  // link for EndTextEditHdl
144  DECL_LINK(EndTextEditHdl, SdrUndoManager*, void);
145 
146  void ImpMacroUp(const Point& rUpPos);
147  void ImpMacroDown(const Point& rDownPos);
148 
149  DECL_LINK( BeginPasteOrDropHdl, PasteOrDropInfos*, void );
150  DECL_LINK( EndPasteOrDropHdl, PasteOrDropInfos*, void );
151 
152 protected:
153  // #i71538# make constructors of SdrView sub-components protected to avoid incomplete incarnations which may get casted to SdrView
155  SdrModel& rSdrModel,
156  OutputDevice* pOut);
157 
158  virtual ~SdrObjEditView() override;
159 
160 public:
161 
162  // used to call the old ImpPaintOutlinerView. Will be replaced when the
163  // outliner will be displayed on the overlay in edit mode.
164  void TextEditDrawing(SdrPaintWindow& rPaintWindow) const;
165 
166  // Actionhandling for macromode
167  virtual bool IsAction() const override;
168  virtual void MovAction(const Point& rPnt) override;
169  virtual void EndAction() override;
170  virtual void BrkAction() override;
171  virtual void BckAction() override;
172  virtual void TakeActionRect(tools::Rectangle& rRect) const override;
173 
174  SdrPageView* ShowSdrPage(SdrPage* pPage) override;
175  void HideSdrPage() override;
176 
177  virtual void Notify(SfxBroadcaster& rBC, const SfxHint& rHint) override;
178  virtual void ModelHasChanged() override;
179 
180 
181  // TextEdit over an outliner
182 
183  // QuickTextEditMode = edit the text straight after selection. Default=TRUE. Persistent.
184  void SetQuickTextEditMode(bool bOn) { bQuickTextEditMode=bOn; }
185  bool IsQuickTextEditMode() const { return bQuickTextEditMode; }
186 
187  // Start the TextEditMode. If pWin==NULL, use the first window, which is logged at the View.
188  // The cursor of the currently edited window is stored with SdrBeginTextEdit()
189  // and restored with SdrEndTextEdit().
190  // The app has to ensure, that the BegEdit of the window logged cursor is still valid,
191  // when SdrEndTextEdit is called.
192  // With the parameter pEditOutliner, the app has the possibility to specify his own outliner,
193  // which is used for editing. After the SdrBeginTextEdit call, the outliner belongs to
194  // SdrObjEditView, and is also later destroyed by this via delete (if bDontDeleteOutliner=sal_False).
195  // Afterwards the SdrObjEditView sets the modflag (EditEngine/Outliner) at this instance and also the
196  // StatusEventHdl.
197  // Similarly a specific OutlinerView can be specified.
198 
199  virtual bool SdrBeginTextEdit(SdrObject* pObj, SdrPageView* pPV = nullptr, vcl::Window* pWin = nullptr, bool bIsNewObj = false,
200  SdrOutliner* pGivenOutliner = nullptr, OutlinerView* pGivenOutlinerView = nullptr,
201  bool bDontDeleteOutliner = false, bool bOnlyOneView = false, bool bGrabFocus = true);
202  // bDontDeleteReally is a special parameter for writer
203  // If this flag is set, then a maybe empty textobject is not deleted.
204  // Instead you get a return code SdrEndTextEditKind::ShouldBeDeleted
205  // (in place of SDRENDTEXTEDIT_BEDELETED), which says, the obj should be
206  // deleted.
207  virtual SdrEndTextEditKind SdrEndTextEdit(bool bDontDeleteReally = false);
208  virtual bool IsTextEdit() const final override;
209 
210  // This method returns sal_True, if the point rHit is inside the
211  // objectspace or the OutlinerView.
212  bool IsTextEditHit(const Point& rHit) const;
213 
214  // This method returns sal_True, if the point rHit is inside the
215  // handle-thick frame, which surrounds the OutlinerView at TextFrames.
216  bool IsTextEditFrameHit(const Point& rHit) const;
217 
218  // At active selection, between MouseButtonDown and
219  // MouseButtonUp, this method always returns TRUE.
220  bool IsTextEditInSelectionMode() const;
221 
222  // If sb needs the object out of the TextEdit:
223  SdrTextObj* GetTextEditObject() const { return mxTextEditObj.get(); }
224 
225  // info about TextEditPageView. Default is 0L.
226  SdrPageView* GetTextEditPageView() const;
227 
228  // Current window of the outliners.
229  void SetTextEditWin(vcl::Window* pWin);
230 
231  // Now at this outliner, events can be send, attributes can be set,
232  // call Cut/Copy/Paste, call Undo/Redo, and so on...
233  const SdrOutliner* GetTextEditOutliner() const { return pTextEditOutliner.get(); }
234  SdrOutliner* GetTextEditOutliner() { return pTextEditOutliner.get(); }
235  const OutlinerView* GetTextEditOutlinerView() const { return pTextEditOutlinerView; }
236  OutlinerView* GetTextEditOutlinerView() { return pTextEditOutlinerView; }
237 
238  virtual bool KeyInput(const KeyEvent& rKEvt, vcl::Window* pWin) override;
239  virtual bool MouseButtonDown(const MouseEvent& rMEvt, OutputDevice* pWin) override;
240  virtual bool MouseButtonUp(const MouseEvent& rMEvt, OutputDevice* pWin) override;
241  virtual bool MouseMove(const MouseEvent& rMEvt, OutputDevice* pWin) override;
242  virtual bool Command(const CommandEvent& rCEvt, vcl::Window* pWin) override;
243 
244  // #97766# make virtual to change implementation e.g. for SdOutlineView
245  virtual SvtScriptType GetScriptType() const;
246 
247  /* new interface src537 */
248  void GetAttributes(SfxItemSet& rTargetSet, bool bOnlyHardAttr) const;
249 
250  bool SetAttributes(const SfxItemSet& rSet, bool bReplaceAll);
251  SfxStyleSheet* GetStyleSheet() const; // SfxStyleSheet* GetStyleSheet(bool& rOk) const;
252  void SetStyleSheet(SfxStyleSheet* pStyleSheet, bool bDontRemoveHardAttr);
253 
254  // Intern: at mounting new OutlinerView...
255  virtual void AddWindowToPaintView(OutputDevice* pNewWin, vcl::Window* pWindow) override;
256  virtual void DeleteWindowFromPaintView(OutputDevice* pOldWin) override;
257 
258  sal_uInt16 GetSelectionLevel() const;
259 
260 
261  // Object MacroMode (e.g. rect as button or sth. like that):
262 
263  void BegMacroObj(const Point& rPnt, short nTol, SdrObject* pObj, SdrPageView* pPV, vcl::Window* pWin);
264  void BegMacroObj(const Point& rPnt, SdrObject* pObj, SdrPageView* pPV, vcl::Window* pWin) { BegMacroObj(rPnt,-2,pObj,pPV,pWin); }
265  void MovMacroObj(const Point& rPnt);
266  void BrkMacroObj();
267  bool EndMacroObj();
268  bool IsMacroObj() const { return pMacroObj!=nullptr; }
269 
272  void getTextSelection( css::uno::Any& rSelection );
273 
274  virtual void MarkListHasChanged() override;
275 
276  const rtl::Reference< sdr::SelectionController >& getSelectionController() const { return mxSelectionController; }
277 
279  static bool SupportsFormatPaintbrush( SdrInventor nObjectInventor, sal_uInt16 nObjectIdentifier );
280 
282  void TakeFormatPaintBrush( std::shared_ptr< SfxItemSet >& rFormatSet );
283 
288  void ApplyFormatPaintBrush( SfxItemSet& rFormatSet, bool bNoCharacterFormats, bool bNoParagraphFormats );
289 
291  static void ApplyFormatPaintBrushToText( SfxItemSet const & rFormatSet, SdrTextObj& rTextObj, SdrText* pText, bool bNoCharacterFormats, bool bNoParagraphFormats );
292 
293 protected:
294  virtual void OnBeginPasteOrDrop( PasteOrDropInfos* pInfo );
295  virtual void OnEndPasteOrDrop( PasteOrDropInfos* pInfo );
296 
297 };
298 
299 #endif // INCLUDED_SVX_SVDEDXV_HXX
300 
301 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual bool MouseButtonUp(const MouseEvent &, OutputDevice *)
Definition: svdpntv.hxx:460
virtual bool IsTextEdit() const
Definition: svdpntv.cxx:314
void GetAttributes(SfxItemSet &rTargetSet, bool bOnlyHardAttr) const
Definition: svdedtv1.cxx:1321
OString OOO_DLLPUBLIC_TEST getTextSelection(const css::uno::Reference< css::datatransfer::XTransferable > &xTransferable, OString mimeType)
std::unique_ptr< SdrOutliner > pTextEditOutliner
Definition: svdedxv.hxx:81
bool IsMacroObj() const
Definition: svdedxv.hxx:268
rtl::Reference< sdr::SelectionController > mxLastSelectionController
Definition: svdedxv.hxx:103
virtual void DeleteWindowFromPaintView(OutputDevice *pOldWin)
Definition: svdpntv.cxx:411
tools::Rectangle aMinTextEditArea
Definition: svdedxv.hxx:90
SdrEndTextEditKind
Definition: svdedxv.hxx:48
virtual void BckAction() override
Definition: svdmrkv.cxx:299
SdrInventor
Definition: svdobj.hxx:152
SdrOutliner * GetTextEditOutliner()
Definition: svdedxv.hxx:234
virtual void BrkAction() override
Definition: svdmrkv.cxx:307
virtual bool MouseButtonDown(const MouseEvent &, OutputDevice *)
Definition: svdpntv.hxx:459
virtual bool MouseMove(const MouseEvent &rMEvt, OutputDevice *pWin) override
handle mouse over effects for handles
Definition: svdmrkv.cxx:1403
tools::Rectangle aTextEditArea
Definition: svdedxv.hxx:89
virtual void ModelHasChanged() override
Definition: svdedtv.cxx:360
virtual void EditViewInvalidate(const tools::Rectangle &rRect) const =0
SfxStyleSheet * GetStyleSheet() const
Definition: svdedtv1.cxx:1342
void SetAttributes(const SfxItemSet &rSet, bool bReplaceAll)
Definition: svdedtv1.cxx:1333
virtual bool KeyInput(const KeyEvent &rKEvt, vcl::Window *pWin)
Definition: svdpntv.cxx:794
sdr::overlay::OverlayObjectList maTEOverlayGroup
Definition: svdedxv.hxx:74
SVX_DLLPRIVATE void ImpClearVars()
Definition: svdedtv.cxx:86
const SdrOutliner * GetTextEditOutliner() const
Definition: svdedxv.hxx:233
SvtScriptType
VclPtr< vcl::Window > pTextEditWin
Definition: svdedxv.hxx:83
virtual void MarkListHasChanged() override
Definition: svdedtv.cxx:354
tools::WeakReference< SdrTextObj > mxTextEditObj
Definition: svdedxv.hxx:79
VclPtr< vcl::Window > pMacroWin
Definition: svdedxv.hxx:87
virtual void MovAction(const Point &rPnt) override
Definition: svdmrkv.cxx:263
SdrPageView * pTextEditPV
Definition: svdedxv.hxx:80
void SetQuickTextEditMode(bool bOn)
Definition: svdedxv.hxx:184
virtual bool IsAction() const override
Definition: svdmrkv.cxx:258
virtual void EditViewSelectionChange() const =0
Link< EditFieldInfo *, void > aOldCalcFieldValueLink
Definition: svdedxv.hxx:91
OutlinerView * GetTextEditOutlinerView()
Definition: svdedxv.hxx:236
const OutlinerView * GetTextEditOutlinerView() const
Definition: svdedxv.hxx:235
virtual SdrPageView * ShowSdrPage(SdrPage *pPage)
Definition: svdpntv.cxx:373
const rtl::Reference< sdr::SelectionController > & getSelectionController() const
Definition: svdedxv.hxx:276
virtual bool Command(const CommandEvent &, vcl::Window *)
Definition: svdpntv.hxx:463
virtual void AddWindowToPaintView(OutputDevice *pNewWin, vcl::Window *pWindow)
Definition: svdpntv.cxx:399
Abstract DrawObject.
Definition: svdobj.hxx:312
DECL_LINK(ImpComeBackHdl, Timer *, void)
sal_uInt16 nMacroTol
Definition: svdedxv.hxx:94
virtual OutputDevice & EditViewOutputDevice() const =0
void SetStyleSheet(SfxStyleSheet *pStyleSheet, bool bDontRemoveHardAttr)
Definition: svdedtv1.cxx:1351
virtual void Notify(SfxBroadcaster &rBC, const SfxHint &rHint) override
Definition: svdmrkv.cxx:181
virtual void TakeActionRect(tools::Rectangle &rRect) const override
Definition: svdmrkv.cxx:315
vcl::Cursor * pTextEditCursorBuffer
Definition: svdedxv.hxx:84
OutlinerView * pTextEditOutlinerView
Definition: svdedxv.hxx:82
bool IsQuickTextEditMode() const
Definition: svdedxv.hxx:185
SdrPageView * pMacroPV
Definition: svdedxv.hxx:86
#define SVXCORE_DLLPUBLIC
Definition: svxdllapi.h:35
SfxUndoManager * mpOldTextEditUndoManager
Definition: svdedxv.hxx:106
Point aMacroDownPos
Definition: svdedxv.hxx:92
A SdrPage contains exactly one SdrObjList and a description of the physical page dimensions (size / m...
Definition: svdpage.hxx:366
void BegMacroObj(const Point &rPnt, SdrObject *pObj, SdrPageView *pPV, vcl::Window *pWin)
Definition: svdedxv.hxx:264
rtl::Reference< sdr::SelectionController > mxSelectionController
Definition: svdedxv.hxx:102
#define SVX_DLLPRIVATE
Definition: svxdllapi.h:30
virtual void HideSdrPage() override
Definition: svdmrkv.cxx:334
SdrObject * pMacroObj
Definition: svdedxv.hxx:85