LibreOffice Module sw (master)  1
edtwin2.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 <hintids.hxx>
21 
22 #include <doc.hxx>
23 #include <osl/thread.h>
24 #include <vcl/help.hxx>
25 #include <svl/stritem.hxx>
27 #include <tools/urlobj.hxx>
28 #include <txtrfmrk.hxx>
29 #include <fmtrfmrk.hxx>
30 #include <editeng/flditem.hxx>
31 #include <svl/urihelper.hxx>
32 #include <svx/svdotext.hxx>
33 #include <editeng/outliner.hxx>
34 #include <sfx2/sfxhelp.hxx>
35 #include <svl/itemiter.hxx>
36 #include <svx/svdview.hxx>
37 #include <svx/svdpagv.hxx>
38 #include <swmodule.hxx>
39 #include <modcfg.hxx>
40 #include <view.hxx>
41 #include <wrtsh.hxx>
42 #include <docsh.hxx>
43 #include <edtwin.hxx>
44 #include <dpage.hxx>
45 #include <shellres.hxx>
46 #include <docufld.hxx>
47 #include <dbfld.hxx>
48 #include <reffld.hxx>
49 #include <cellatr.hxx>
50 #include <shdwcrsr.hxx>
51 #include <fmtcol.hxx>
52 #include <charfmt.hxx>
53 #include <fmtftn.hxx>
54 #include <redline.hxx>
55 #include <tox.hxx>
56 #include <txttxmrk.hxx>
57 #include <uitool.hxx>
58 #include <viewopt.hxx>
59 #include <strings.hrc>
60 
61 #include <PostItMgr.hxx>
62 #include <fmtfld.hxx>
63 
64 #include <IDocumentMarkAccess.hxx>
65 #include <txtfrm.hxx>
66 #include <ndtxt.hxx>
67 
68 static OUString lcl_GetRedlineHelp( const SwRangeRedline& rRedl, bool bBalloon )
69 {
70  const char* pResId = nullptr;
71  switch( rRedl.GetType() )
72  {
73  case RedlineType::Insert: pResId = STR_REDLINE_INSERT; break;
74  case RedlineType::Delete: pResId = STR_REDLINE_DELETE; break;
75  case RedlineType::Format: pResId = STR_REDLINE_FORMAT; break;
76  case RedlineType::Table: pResId = STR_REDLINE_TABLE; break;
77  case RedlineType::FmtColl: pResId = STR_REDLINE_FMTCOLL; break;
78  case RedlineType::ParagraphFormat: pResId = STR_REDLINE_PARAGRAPH_FORMAT; break;
79  case RedlineType::TableRowInsert: pResId = STR_REDLINE_TABLE_ROW_INSERT; break;
80  case RedlineType::TableRowDelete: pResId = STR_REDLINE_TABLE_ROW_DELETE; break;
81  case RedlineType::TableCellInsert: pResId = STR_REDLINE_TABLE_CELL_INSERT; break;
82  case RedlineType::TableCellDelete: pResId = STR_REDLINE_TABLE_CELL_DELETE; break;
83  default: break;
84  }
85 
86  OUStringBuffer sBuf;
87  if (pResId)
88  {
89  sBuf.append(SwResId(pResId));
90  sBuf.append(": ");
91  sBuf.append(rRedl.GetAuthorString());
92  sBuf.append(" - ");
93  sBuf.append(GetAppLangDateTimeString(rRedl.GetTimeStamp()));
94  if( bBalloon && !rRedl.GetComment().isEmpty() )
95  sBuf.append('\n').append(rRedl.GetComment());
96  }
97  return sBuf.makeStringAndClear();
98 }
99 
100 OUString SwEditWin::ClipLongToolTip(const OUString& rText)
101 {
102  OUString sDisplayText(rText);
103  long nTextWidth = GetTextWidth(sDisplayText);
104  long nMaxWidth = GetDesktopRectPixel().GetWidth() * 2 / 3;
105  nMaxWidth = PixelToLogic(Size(nMaxWidth, 0)).Width();
106  if (nTextWidth > nMaxWidth)
107  sDisplayText = GetEllipsisString(sDisplayText, nMaxWidth, DrawTextFlags::CenterEllipsis);
108  return sDisplayText;
109 }
110 
112 {
113  SwWrtShell &rSh = m_rView.GetWrtShell();
114  bool bQuickBalloon = bool(rEvt.GetMode() & ( HelpEventMode::QUICK | HelpEventMode::BALLOON ));
115  if(bQuickBalloon && !rSh.GetViewOptions()->IsShowContentTips())
116  return;
117  bool bContinue = true;
118  SET_CURR_SHELL(&rSh);
119  OUString sText;
121  bool bBalloon = bool(rEvt.GetMode() & HelpEventMode::BALLOON);
122 
123  SdrView *pSdrView = rSh.GetDrawView();
124 
125  if( bQuickBalloon && pSdrView )
126  {
127  SdrPageView* pPV = pSdrView->GetSdrPageView();
128  SwDPage* pPage = pPV ? static_cast<SwDPage*>(pPV->GetPage()) : nullptr;
129  bContinue = pPage && pPage->RequestHelp(this, pSdrView, rEvt);
130  }
131 
132  if( bContinue && bQuickBalloon)
133  {
134  SwRect aFieldRect;
135  SwContentAtPos aContentAtPos( IsAttrAtPos::Field |
142 #ifdef DBG_UTIL
144  ( bBalloon ? IsAttrAtPos::CurrAttrs : IsAttrAtPos::NONE) |
145 #endif
147 
148  if( rSh.GetContentAtPos( aPos, aContentAtPos, false, &aFieldRect ) )
149  {
150  QuickHelpFlags nStyle = QuickHelpFlags::NONE; // style of quick help
151  switch( aContentAtPos.eContentAtPos )
152  {
153  case IsAttrAtPos::TableBoxFml:
154  sText = "= ";
155  sText += static_cast<const SwTableBoxFormula*>(aContentAtPos.aFnd.pAttr)->GetFormula();
156  break;
157 #ifdef DBG_UTIL
159  {
160  sText = OStringToOUString(OString::number(
161  static_cast<const SwTableBoxValue*>(aContentAtPos.aFnd.pAttr)->GetValue()),
162  osl_getThreadTextEncoding());
163  break;
164  }
166  sText = aContentAtPos.sStr;
167  break;
168 #endif
169 
171  {
172  sText = static_cast<const SwFormatINetFormat*>(aContentAtPos.aFnd.pAttr)->GetValue();
173  sText = URIHelper::removePassword( sText,
176  //#i63832# remove the link target type
177  sal_Int32 nFound = sText.indexOf(cMarkSeparator);
178  if( nFound != -1 && (++nFound) < sText.getLength() )
179  {
180  OUString sSuffix( sText.copy(nFound) );
181  if( sSuffix == "table" ||
182  sSuffix == "frame" ||
183  sSuffix == "region" ||
184  sSuffix == "outline" ||
185  sSuffix == "text" ||
186  sSuffix == "graphic" ||
187  sSuffix == "ole" )
188  sText = sText.copy( 0, nFound - 1);
189  }
190  // #i104300#
191  // special handling if target is a cross-reference bookmark
192  {
193  OUString sTmpSearchStr = sText.copy( 1 );
194  IDocumentMarkAccess* pMarkAccess = rSh.getIDocumentMarkAccess();
196  pMarkAccess->findBookmark( sTmpSearchStr );
197  if ( ppBkmk != pMarkAccess->getBookmarksEnd() &&
200  {
201  SwTextNode* pTextNode = (*ppBkmk)->GetMarkStart().nNode.GetNode().GetTextNode();
202  if ( pTextNode )
203  {
204  sText = sw::GetExpandTextMerged(rSh.GetLayout(), *pTextNode, true, false, ExpandMode(0));
205 
206  if( !sText.isEmpty() )
207  {
208  OUStringBuffer sTmp(sText.replaceAll(OUStringLiteral1(0xad), ""));
209  for (sal_Int32 i = 0; i < sTmp.getLength(); ++i)
210  {
211  if (sTmp[i] < 0x20)
212  sTmp[i] = 0x20;
213  else if (sTmp[i] == 0x2011)
214  sTmp[i] = '-';
215  }
216  sText = sTmp.makeStringAndClear();
217  }
218  }
219  }
220  }
221  // #i80029#
222  bool bExecHyperlinks = m_rView.GetDocShell()->IsReadOnly();
223  if ( !bExecHyperlinks )
224  {
225  sText = SfxHelp::GetURLHelpText(sText);
226  }
227  break;
228  }
230  {
231  vcl::KeyCode aCode( KEY_SPACE );
232  vcl::KeyCode aModifiedCode( KEY_SPACE, KEY_MOD1 );
233  OUString aModStr( aModifiedCode.GetName() );
234  aModStr = aModStr.replaceFirst(aCode.GetName(), "");
235  aModStr = aModStr.replaceAll("+", "");
236  sText = SwResId(STR_SMARTTAG_CLICK).replaceAll("%s", aModStr);
237  break;
238  }
239 
240  case IsAttrAtPos::Ftn:
241  if( aContentAtPos.pFndTextAttr && aContentAtPos.aFnd.pAttr )
242  {
243  const SwFormatFootnote* pFootnote = static_cast<const SwFormatFootnote*>(aContentAtPos.aFnd.pAttr);
244  OUString sTmp(pFootnote->GetFootnoteText(*rSh.GetLayout()));
245  sText = SwResId( pFootnote->IsEndNote()
246  ? STR_ENDNOTE : STR_FTNNOTE ) + sTmp;
247  bBalloon = true;
248  if( aContentAtPos.IsInRTLText() )
249  nStyle |= QuickHelpFlags::BiDiRtl;
250  }
251  break;
252 
254  {
256  const bool bShowInlineTooltips = rSh.GetViewOptions()->IsShowInlineTooltips();
257  if ( bShowTrackChanges && bShowInlineTooltips )
258  sText = lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, bBalloon);
259  break;
260  }
261 
263  sText = aContentAtPos.sStr;
264  if( !sText.isEmpty() && aContentAtPos.pFndTextAttr )
265  {
266  const SwTOXType* pTType = aContentAtPos.pFndTextAttr->
267  GetTOXMark().GetTOXType();
268  if( pTType && !pTType->GetTypeName().isEmpty() )
269  {
270  sText = ": " + sText;
271  sText = pTType->GetTypeName() + sText;
272  }
273  }
274  break;
275 
277  if(aContentAtPos.aFnd.pAttr)
278  {
279  sText = SwResId(STR_CONTENT_TYPE_SINGLE_REFERENCE);
280  sText += ": ";
281  sText += static_cast<const SwFormatRefMark*>(aContentAtPos.aFnd.pAttr)->GetRefName();
282  }
283  break;
284 
285  default:
286  {
287  SwModuleOptions* pModOpt = SW_MOD()->GetModuleConfig();
288  if(!pModOpt->IsHideFieldTips())
289  {
290  const SwField* pField = aContentAtPos.aFnd.pField;
291  switch( pField->Which() )
292  {
293  case SwFieldIds::SetExp:
294  case SwFieldIds::Table:
295  case SwFieldIds::GetExp:
296  {
297  sal_uInt16 nOldSubType = pField->GetSubType();
298  const_cast<SwField*>(pField)->SetSubType(nsSwExtendedSubType::SUB_CMD);
299  sText = pField->ExpandField(true, rSh.GetLayout());
300  const_cast<SwField*>(pField)->SetSubType(nOldSubType);
301  }
302  break;
303 
304  case SwFieldIds::Postit:
305  {
306  break;
307  }
308  case SwFieldIds::Input: // BubbleHelp, because the suggestion could be quite long
309  bBalloon = true;
310  [[fallthrough]];
313  sText = pField->GetPar2();
314  break;
315 
317  sText = pField->GetFieldName();
318  break;
319 
320  case SwFieldIds::User:
322  sText = pField->GetPar1();
323  break;
324 
325  case SwFieldIds::DocStat:
326  break;
327 
328  case SwFieldIds::Macro:
329  sText = static_cast<const SwMacroField*>(pField)->GetMacro();
330  break;
331 
332  case SwFieldIds::GetRef:
333  {
334  // #i85090#
335  const SwGetRefField* pRefField( dynamic_cast<const SwGetRefField*>(pField) );
336  OSL_ENSURE( pRefField,
337  "<SwEditWin::RequestHelp(..)> - unexpected type of <pField>" );
338  if ( pRefField )
339  {
340  if ( pRefField->IsRefToHeadingCrossRefBookmark() ||
341  pRefField->IsRefToNumItemCrossRefBookmark() )
342  {
343  sText = pRefField->GetExpandedTextOfReferencedTextNode(*rSh.GetLayout());
344  if ( sText.getLength() > 80 )
345  {
346  sText = sText.copy(0, 80) + "...";
347  }
348  }
349  else
350  {
351  sText = static_cast<const SwGetRefField*>(pField)->GetSetRefName();
352  }
353  }
354  break;
355  }
356 
357  default: break;
358  }
359  }
360 
361  if( sText.isEmpty() )
362  {
364  const bool bShowInlineTooltips = rSh.GetViewOptions()->IsShowInlineTooltips();
365  if ( bShowTrackChanges && bShowInlineTooltips )
366  {
367  aContentAtPos.eContentAtPos = IsAttrAtPos::Redline;
368  if( rSh.GetContentAtPos( aPos, aContentAtPos, false, &aFieldRect ) )
369  sText = lcl_GetRedlineHelp(*aContentAtPos.aFnd.pRedl, bBalloon);
370  }
371  }
372  }
373  }
374  if (!sText.isEmpty())
375  {
376  tools::Rectangle aRect( aFieldRect.SVRect() );
377  Point aPt( OutputToScreenPixel( LogicToPixel( aRect.TopLeft() )));
378  aRect.SetLeft( aPt.X() );
379  aRect.SetTop( aPt.Y() );
380  aPt = OutputToScreenPixel( LogicToPixel( aRect.BottomRight() ));
381  aRect.SetRight( aPt.X() );
382  aRect.SetBottom( aPt.Y() );
383 
384  if( bBalloon )
385  Help::ShowBalloon( this, rEvt.GetMousePosPixel(), aRect, sText );
386  else
387  {
388  // the show the help
389  OUString sDisplayText(ClipLongToolTip(sText));
390  Help::ShowQuickHelp(this, aRect, sDisplayText, nStyle);
391  }
392  }
393 
394  bContinue = false;
395  }
396 
397  }
398 
399  if( bContinue )
400  Window::RequestHelp( rEvt );
401 }
402 
403 void SwEditWin::PrePaint(vcl::RenderContext& /*rRenderContext*/)
404 {
405  SwWrtShell* pWrtShell = GetView().GetWrtShellPtr();
406 
407  if(pWrtShell)
408  {
409  pWrtShell->PrePaint();
410  }
411 }
412 
413 void SwEditWin::Paint(vcl::RenderContext& rRenderContext, const tools::Rectangle& rRect)
414 {
415  SwWrtShell* pWrtShell = GetView().GetWrtShellPtr();
416  if(!pWrtShell)
417  return;
418  bool bPaintShadowCursor = false;
419  if( m_pShadCursor )
420  {
421  tools::Rectangle aRect( m_pShadCursor->GetRect());
422  // fully resides inside?
423  if( rRect.IsInside( aRect ) )
424  {
425  // then cancel
426  m_pShadCursor.reset();
427  }
428  else if( rRect.IsOver( aRect ))
429  {
430  // resides somewhat above, then everything is clipped outside
431  // and we have to make the "inner part" at the end of the
432  // Paint visible again. Otherwise Paint errors occur!
433  bPaintShadowCursor = true;
434  }
435  }
436 
437  if ( GetView().GetVisArea().GetWidth() <= 0 ||
438  GetView().GetVisArea().GetHeight() <= 0 )
439  Invalidate( rRect );
440  else
441  {
442  pWrtShell->setOutputToWindow(true);
443  pWrtShell->Paint(rRenderContext, rRect);
444  pWrtShell->setOutputToWindow(false);
445  }
446 
447  if( bPaintShadowCursor )
448  m_pShadCursor->Paint();
449 }
450 
451 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
bool IsInRTLText() const
Definition: crstrvl.cxx:1901
void setOutputToWindow(bool bOutputToWindow)
Definition: viewsh.cxx:135
OUString GetEllipsisString(const OUString &rStr, long nMaxWidth, DrawTextFlags nStyle=DrawTextFlags::EndEllipsis) const
long GetWidth() const
OUString GetExpandedTextOfReferencedTextNode(SwRootFrame const &rLayout) const
Definition: reffld.cxx:405
long GetHeight() const
SdrView * GetDrawView()
Definition: vnew.cxx:376
OUString ClipLongToolTip(const OUString &rText)
fdo#55546 cut very long tooltips to 2/3 of the width of the screen via center ellipsis ...
Definition: edtwin2.cxx:100
#define KEY_SPACE
OUString const & GetAuthorString(sal_uInt16 nPos=0) const
Definition: docredln.cxx:1704
bool IsShowContentTips() const
Definition: viewopt.hxx:500
std::string GetValue
const SwView & GetView() const
Definition: edtwin.hxx:241
bool IsHideFieldTips() const
Definition: modcfg.hxx:364
wrapper iterator: wraps iterator of implementation while hiding MarkBase class; only IMark instances ...
static SW_DLLPUBLIC MarkType GetType(const ::sw::mark::IMark &rMark)
Returns the MarkType used to create the mark.
Definition: docbm.cxx:483
const SfxPoolItem * pAttr
Definition: crsrsh.hxx:100
Base class of all fields.
Definition: fldbas.hxx:279
Provides access to the marks of a document.
void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect) override
Definition: crsrsh.cxx:1399
SVL_DLLPUBLIC OUString removePassword(OUString const &rURI, INetURLObject::EncodeMechanism eEncodeMechanism, INetURLObject::DecodeMechanism eDecodeMechanism=INetURLObject::DecodeMechanism::ToIUri, rtl_TextEncoding eCharset=RTL_TEXTENCODING_UTF8)
#define KEY_MOD1
bool IsOver(const tools::Rectangle &rRect) const
tools::Rectangle GetDesktopRectPixel() const
bool IsEndNote() const
Definition: fmtftn.hxx:73
Of course Writer needs its own rectangles.
Definition: swrect.hxx:34
OUString GetAppLangDateTimeString(const DateTime &)
Definition: uitool.cxx:819
For old documents the Field-Which IDs must be preserved !!!
HelpEventMode GetMode() const
static bool IsShowChanges(const RedlineFlags eM)
virtual void RequestHelp(const HelpEvent &rEvt) override
Definition: edtwin2.cxx:111
SwWrtShell & GetWrtShell() const
Definition: view.hxx:400
Used by the UI to modify the document model.
Definition: wrtsh.hxx:88
virtual OUString GetPar1() const
Definition: fldbas.cxx:271
void PrePaint()
Definition: viewsh.cxx:172
const DateTime & GetTimeStamp(sal_uInt16 nPos=0) const
Definition: docredln.cxx:1709
virtual void PrePaint(vcl::RenderContext &rRenderContext) override
Definition: edtwin2.cxx:403
IsAttrAtPos eContentAtPos
Definition: crsrsh.hxx:105
only for debugging
OUString sStr
Definition: crsrsh.hxx:107
const IDocumentMarkAccess * getIDocumentMarkAccess() const
Provides access to the document bookmark interface.
Definition: viewsh.cxx:2591
const Point & GetMousePosPixel() const
SwDoc * GetDoc()
returns Doc. But be careful!
Definition: docsh.hxx:203
virtual const_iterator_t getBookmarksEnd() const =0
returns a STL-like random access iterator to the end of the sequence of IBookmarks.
bool IsRefToNumItemCrossRefBookmark() const
Definition: reffld.cxx:389
OUString GetExpandTextMerged(SwRootFrame const *const pLayout, SwTextNode const &rNode, bool const bWithNumber, bool const bWithSpacesForLevel, ExpandMode const i_mode)
#define SW_MOD()
Definition: swmodule.hxx:256
const SwField * pField
Definition: crsrsh.hxx:99
const SwExtendedSubType SUB_CMD
Show command.
Definition: fldbas.hxx:204
std::unique_ptr< SwShadowCursor, o3tl::default_delete< SwShadowCursor > > m_pShadCursor
Definition: edtwin.hxx:94
int i
OUString GetFootnoteText(SwRootFrame const &rLayout) const
Definition: atrftn.cxx:182
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
QuickHelpFlags
const OUString & GetTypeName() const
Definition: tox.hxx:660
OUString GetName(vcl::Window *pWindow=nullptr) const
#define SET_CURR_SHELL(shell)
Definition: swtypes.hxx:101
bool IsInside(const Point &rPOINT) const
virtual const_iterator_t findBookmark(const OUString &rMark) const =0
Finds a bookmark by name.
OUString SwResId(const char *pId)
Definition: swmodule.cxx:191
virtual OUString GetPar2() const
Definition: fldbas.cxx:276
const sal_Unicode cMarkSeparator
Definition: swtypes.hxx:137
const SwTextAttr * pFndTextAttr
Definition: crsrsh.hxx:108
Point ScreenToOutputPixel(const Point &rPos) const
static void ShowQuickHelp(vcl::Window *pParent, const tools::Rectangle &rScreenRect, const OUString &rHelpText, QuickHelpFlags nStyle=QuickHelpFlags::NONE)
virtual sal_uInt16 GetSubType() const
Definition: fldbas.cxx:292
SwDocShell * GetDocShell()
Definition: view.cxx:1127
bool IsReadOnly() const
Point PixelToLogic(const Point &rDevicePt) const
Point LogicToPixel(const Point &rLogicPt) const
const OUString & GetComment(sal_uInt16 nPos=0) const
Definition: docredln.cxx:1719
bool RequestHelp(vcl::Window *pWindow, SdrView const *pView, const HelpEvent &rEvt)
Definition: dpage.cxx:152
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:79
ExpandMode
Some helpers for converting model strings to view strings.
OUString ExpandField(bool bCached, SwRootFrame const *pLayout) const
expand the field.
Definition: fldbas.cxx:412
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
Definition: doc.cxx:367
SwWrtShell * GetWrtShellPtr() const
Definition: view.hxx:401
SwFieldIds Which() const
ResId.
Definition: fldbas.cxx:202
tools::Rectangle SVRect() const
Definition: swrect.hxx:282
bool IsShowInlineTooltips() const
Definition: viewopt.hxx:271
bool IsRefToHeadingCrossRefBookmark() const
Definition: reffld.cxx:383
SdrPage * GetPage() const
const SwViewOption * GetViewOptions() const
Definition: viewsh.hxx:426
RedlineType GetType(sal_uInt16 nPos=0) const
Definition: docredln.cxx:1714
virtual OUString GetFieldName() const
get name or content
Definition: fldbas.cxx:255
long GetTextWidth(const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, vcl::TextLayoutCache const *=nullptr, SalLayoutGlyphs const *const pLayoutCache=nullptr) const
const SwRangeRedline * pRedl
Definition: crsrsh.hxx:101
SwView & m_rView
Definition: edtwin.hxx:97
const tools::Rectangle & GetVisArea() const
Definition: view.hxx:413
virtual RedlineFlags GetRedlineFlags() const =0
Query the currently set redline mode.
Point OutputToScreenPixel(const Point &rPos) const
bool GetContentAtPos(const Point &rPt, SwContentAtPos &rContentAtPos, bool bSetCursor=false, SwRect *pFieldRect=nullptr)
Definition: crstrvl.cxx:1268
virtual void Paint(vcl::RenderContext &rRenderContext, const tools::Rectangle &rRect) override
Definition: edtwin2.cxx:413
SwRootFrame * GetLayout() const
Definition: viewsh.cxx:2071
static OUString GetURLHelpText(const OUString &)
static OUString lcl_GetRedlineHelp(const SwRangeRedline &rRedl, bool bBalloon)
Definition: edtwin2.cxx:68
only for debugging
SwTextNode * GetTextNode()
Inline methods from Node.hxx.
Definition: ndtxt.hxx:843
static void ShowBalloon(vcl::Window *pParent, const Point &rScreenPos, const tools::Rectangle &, const OUString &rHelpText)
union SwContentAtPos::@25 aFnd