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