LibreOffice Module sw (master)  1
AnnotationWin.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 <config_wasm_strip.h>
21 
22 #include <AnnotationWin.hxx>
23 
24 #include <PostItMgr.hxx>
25 
26 #include <strings.hrc>
27 
28 #include <uiobject.hxx>
29 
30 #include <vcl/svapp.hxx>
31 #include <vcl/uitest/logger.hxx>
33 
34 #include <svl/undo.hxx>
36 #include <unotools/syslocale.hxx>
37 #include <svl/languageoptions.hxx>
38 #include <osl/diagnose.h>
39 
40 #include <editeng/eeitem.hxx>
41 #include <editeng/postitem.hxx>
42 #include <editeng/fhgtitem.hxx>
43 #include <editeng/langitem.hxx>
44 
45 #include <editeng/editview.hxx>
46 #include <editeng/outliner.hxx>
47 #include <editeng/editeng.hxx>
48 #include <editeng/editobj.hxx>
49 #include <editeng/outlobj.hxx>
50 
51 #include <comphelper/lok.hxx>
52 #include <docufld.hxx>
53 #include <txtfld.hxx>
54 #include <ndtxt.hxx>
55 #include <view.hxx>
56 #include <viewopt.hxx>
57 #include <wrtsh.hxx>
58 #include <docsh.hxx>
59 #include <doc.hxx>
60 #include <IDocumentUndoRedo.hxx>
61 #include <SwUndoField.hxx>
62 #include <edtwin.hxx>
63 #include "ShadowOverlayObject.hxx"
64 #include "AnchorOverlayObject.hxx"
65 #include "OverlayRanges.hxx"
66 #include "SidebarTxtControl.hxx"
67 #include "SidebarWinAcc.hxx"
68 
69 #include <memory>
70 
71 namespace{
72 
73 void collectUIInformation( const OUString& aevent , const OUString& aID )
74 {
75  EventDescription aDescription;
76  aDescription.aID = aID;
77  aDescription.aParameters = {{"" , ""}};
78  aDescription.aAction = aevent;
79  aDescription.aParent = "MainWindow";
80  aDescription.aKeyWord = "SwEditWinUIObject";
81  UITestLogger::getInstance().logEvent(aDescription);
82 }
83 
84 }
85 
86 namespace sw::annotation {
87 
88 // see AnnotationContents in sd for something similar
90  SwPostItMgr& aMgr,
91  SwSidebarItem& rSidebarItem,
92  SwFormatField* aField )
93  : InterimItemWindow(&rEditWin, "modules/swriter/ui/annotation.ui", "Annotation")
94  , mrMgr(aMgr)
95  , mrView(rEditWin.GetView())
96  , mnDeleteEventId(nullptr)
97  , meSidebarPosition(sw::sidebarwindows::SidebarPosition::NONE)
98  , mPageBorder(0)
99  , mbAnchorRectChanged(false)
100  , mbResolvedStateUpdated(false)
101  , mbMouseOver(false)
102  , mLayoutStatus(SwPostItHelper::INVISIBLE)
103  , mbReadonly(false)
104  , mbIsFollow(false)
105  , mrSidebarItem(rSidebarItem)
106  , mpAnchorFrame(rSidebarItem.maLayoutInfo.mpAnchorFrame)
107  , mpFormatField(aField)
108  , mpField( static_cast<SwPostItField*>(aField->GetField()))
109 {
110  set_id("Comment"+OUString::number(mpField->GetPostItId()));
111 
112  m_xContainer->connect_mouse_move(LINK(this, SwAnnotationWin, MouseMoveHdl));
113 
115  if ( mpShadow )
116  {
117  mpShadow->setVisible(false);
118  }
119 
120 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
123  *this );
124 #endif
125 
127  // When double-buffering, allow parents to paint on our area. That's
128  // necessary when parents paint the complete buffer.
129  SetParentClipMode(ParentClipMode::NoClip);
130 }
131 
133 {
134  disposeOnce();
135 }
136 
138 {
139 #if !ENABLE_WASM_STRIP_ACCESSIBILITY
141  *this );
142 #endif
143  Disable();
144 
145  mxSidebarTextControlWin.reset();
146  mxSidebarTextControl.reset();
147 
148  mxMetadataAuthor.reset();
149  mxMetadataResolved.reset();
150  mxMetadataDate.reset();
151  mxVScrollbar.reset();
152 
153  mpAnchor.reset();
154  mpShadow.reset();
155 
156  mpTextRangeOverlay.reset();
157 
158  mxMenuButton.reset();
159 
160  if (mnDeleteEventId)
162 
163  mpOutliner.reset();
164  mpOutlinerView.reset();
165 
167 }
168 
170 {
171  //If the cursor was visible, then make it visible again after
172  //changing text, e.g. fdo#33599
174  bool bCursorVisible = pCursor && pCursor->IsVisible();
175 
176  //If the new text is the same as the old text, keep the same insertion
177  //point .e.g. fdo#33599
178  mpField = static_cast<SwPostItField*>(mpFormatField->GetField());
179  OUString sNewText = mpField->GetPar2();
180  bool bTextUnchanged = sNewText == mpOutliner->GetEditEngine().GetText();
181  ESelection aOrigSelection(GetOutlinerView()->GetEditView().GetSelection());
182 
183  // get text from SwPostItField and insert into our textview
184  mpOutliner->SetModifyHdl( Link<LinkParamNone*,void>() );
185  mpOutliner->EnableUndo( false );
186  if( mpField->GetTextObject() )
187  mpOutliner->SetText( *mpField->GetTextObject() );
188  else
189  {
190  mpOutliner->Clear();
192  GetOutlinerView()->InsertText(sNewText);
193  }
194 
195  mpOutliner->ClearModifyFlag();
196  mpOutliner->GetUndoManager().Clear();
197  mpOutliner->EnableUndo( true );
198  mpOutliner->SetModifyHdl( LINK( this, SwAnnotationWin, ModifyHdl ) );
199  if (bTextUnchanged)
200  GetOutlinerView()->GetEditView().SetSelection(aOrigSelection);
201  if (bCursorVisible)
203  Invalidate();
204 }
205 
206 void SwAnnotationWin::SetResolved(bool resolved)
207 {
208  bool oldState = IsResolved();
209  static_cast<SwPostItField*>(mpFormatField->GetField())->SetResolved(resolved);
210  const SwViewOption* pVOpt = mrView.GetWrtShellPtr()->GetViewOptions();
212 
213  mpTextRangeOverlay.reset();
214 
215  if(IsResolved())
216  mxMetadataResolved->show();
217  else
218  mxMetadataResolved->hide();
219 
220  if(IsResolved() != oldState)
221  mbResolvedStateUpdated = true;
222  UpdateData();
223  Invalidate();
224  collectUIInformation("SETRESOLVED",get_id());
225 }
226 
228 {
230 }
231 
233 {
237 }
238 
240 {
241  // Go to the top and delete each comment one by one
242  SwAnnotationWin *current, *topNote;
243  current = topNote = GetTopReplyNote();
245 
246  while(next && next->GetTopReplyNote() == topNote)
247  {
248  current->mnDeleteEventId = Application::PostUserEvent( LINK( current, SwAnnotationWin, DeleteHdl), nullptr, true );
249  current = next;
250  next = mrMgr.GetNextPostIt(KEY_PAGEDOWN, current);
251  }
252  current->mnDeleteEventId = Application::PostUserEvent( LINK( current, SwAnnotationWin, DeleteHdl), nullptr, true );
253 }
254 
256 {
257  return static_cast<SwPostItField*>(mpFormatField->GetField())->GetResolved();
258 }
259 
261 {
263  // then iterate downwards checking resolved status
264  SwAnnotationWin *pTopNote, *TopNote;
265  pTopNote = TopNote = GetTopReplyNote();
266  if (!pTopNote->IsResolved())
267  return false;
268 
269  SwAnnotationWin* pSidebarWin = mrMgr.GetNextPostIt(KEY_PAGEDOWN, pTopNote);
270 
271  while (pSidebarWin && pSidebarWin->GetTopReplyNote() == TopNote)
272  {
273  pTopNote = pSidebarWin;
274  if (!pTopNote->IsResolved())
275  return false;
276  pSidebarWin = mrMgr.GetNextPostIt(KEY_PAGEDOWN, pSidebarWin);
277  }
278  return true;
279 }
280 
282 {
283  if ( mpOutliner->IsModified() || mbResolvedStateUpdated )
284  {
285  IDocumentUndoRedo & rUndoRedo(
287  std::unique_ptr<SwField> pOldField;
288  if (rUndoRedo.DoesUndo())
289  {
290  pOldField = mpField->Copy();
291  }
292  mpField->SetPar2(mpOutliner->GetEditEngine().GetText());
293  mpField->SetTextObject(mpOutliner->CreateParaObject());
294  if (rUndoRedo.DoesUndo())
295  {
296  SwTextField *const pTextField = mpFormatField->GetTextField();
297  SwPosition aPosition( pTextField->GetTextNode() );
298  aPosition.nContent = pTextField->GetStart();
299  rUndoRedo.AppendUndo(
300  std::make_unique<SwUndoFieldFromDoc>(aPosition, *pOldField, *mpField, nullptr, true));
301  }
302  // so we get a new layout of notes (anchor position is still the same and we would otherwise not get one)
303  mrMgr.SetLayout();
304  // #i98686# if we have several views, all notes should update their text
307  else
310  }
311  mpOutliner->ClearModifyFlag();
312  mpOutliner->GetUndoManager().Clear();
313  mbResolvedStateUpdated = false;
314 }
315 
317 {
318  collectUIInformation("DELETE",get_id());
320  return;
321 
322  if ( mrMgr.GetActiveSidebarWin() == this)
323  {
324  mrMgr.SetActiveSidebarWin(nullptr);
325  // if the note is empty, the previous line will send a delete event, but we are already there
326  if (mnDeleteEventId)
327  {
329  mnDeleteEventId = nullptr;
330  }
331  }
332  // we delete the field directly, the Mgr cleans up the PostIt by listening
336 }
337 
339 {
341 }
342 
344 {
345  // if this is an answer, do not skip over all following ones, but insert directly behind the current one
346  // but when just leaving a note, skip all following ones as well to continue typing
347  return mrMgr.IsAnswer()
348  ? 1
349  : 1 + CountFollowing();
350 }
351 
352 // returns a non-zero postit parent id, if exists, otherwise 0 for root comments
354 {
355  SwTextField* pTextField = mpFormatField->GetTextField();
356  SwPosition aPosition( pTextField->GetTextNode() );
357  aPosition.nContent = pTextField->GetStart();
358  SwTextAttr * const pTextAttr =
359  pTextField->GetTextNode().GetTextAttrForCharAt(
360  aPosition.nContent.GetIndex() - 1,
362  const SwField* pField = pTextAttr ? pTextAttr->GetFormatField().GetField() : nullptr;
363  sal_uInt32 nParentId = 0;
364  if (pField && pField->Which() == SwFieldIds::Postit)
365  {
366  const SwPostItField* pPostItField = static_cast<const SwPostItField*>(pField);
367  nParentId = pPostItField->GetPostItId();
368  }
369  return nParentId;
370 }
371 
372 // counts how many SwPostItField we have right after the current one
374 {
375  sal_uInt32 aCount = 1; // we start with 1, so we have to subtract one at the end again
376  SwTextField* pTextField = mpFormatField->GetTextField();
377  SwPosition aPosition( pTextField->GetTextNode() );
378  aPosition.nContent = pTextField->GetStart();
379 
380  SwTextAttr * pTextAttr = pTextField->GetTextNode().GetTextAttrForCharAt(
381  aPosition.nContent.GetIndex() + 1,
383  SwField* pField = pTextAttr
384  ? const_cast<SwField*>(pTextAttr->GetFormatField().GetField())
385  : nullptr;
386  while ( pField && ( pField->Which()== SwFieldIds::Postit ) )
387  {
388  aCount++;
389  pTextAttr = pTextField->GetTextNode().GetTextAttrForCharAt(
390  aPosition.nContent.GetIndex() + aCount,
392  pField = pTextAttr
393  ? const_cast<SwField*>(pTextAttr->GetFormatField().GetField())
394  : nullptr;
395  }
396  return aCount - 1;
397 }
398 
400 {
401  // If tiled annotations is off in lok case, skip adding additional reply text.
403  return;
404 
405  //collect our old meta data
407  if (!pWin)
408  return;
409 
410  const SvtSysLocale aSysLocale;
411  const LocaleDataWrapper& rLocalData = aSysLocale.GetLocaleData();
412  SwRewriter aRewriter;
413  aRewriter.AddRule(UndoArg1, pWin->GetAuthor());
414  const OUString aText = aRewriter.Apply(SwResId(STR_REPLY))
415  + " (" + rLocalData.getDate( pWin->GetDate())
416  + ", " + rLocalData.getTime( pWin->GetTime(), false)
417  + "): \"";
418  GetOutlinerView()->InsertText(aText);
419 
420  // insert old, selected text or "..."
421  // TODO: iterate over all paragraphs, not only first one to find out if it is empty
422  if (!rText.GetTextObject().GetText(0).isEmpty())
424  else
425  GetOutlinerView()->InsertText("...");
426  GetOutlinerView()->InsertText("\"\n");
427 
429  SfxItemSet aAnswerSet( mrView.GetDocShell()->GetPool() );
430  aAnswerSet.Put(SvxFontHeightItem(200,80,EE_CHAR_FONTHEIGHT));
432  GetOutlinerView()->SetAttribs(aAnswerSet);
434 
435  //remove all attributes and reset our standard ones
438  // lets insert an undo step so the initial text can be easily deleted
439  // but do not use UpdateData() directly, would set modified state again and reentrance into Mgr
440  mpOutliner->SetModifyHdl( Link<LinkParamNone*,void>() );
441  IDocumentUndoRedo & rUndoRedo(
443  std::unique_ptr<SwField> pOldField;
444  if (rUndoRedo.DoesUndo())
445  {
446  pOldField = mpField->Copy();
447  }
448  mpField->SetPar2(mpOutliner->GetEditEngine().GetText());
449  mpField->SetTextObject(mpOutliner->CreateParaObject());
450  if (rUndoRedo.DoesUndo())
451  {
452  SwTextField *const pTextField = mpFormatField->GetTextField();
453  SwPosition aPosition( pTextField->GetTextNode() );
454  aPosition.nContent = pTextField->GetStart();
455  rUndoRedo.AppendUndo(
456  std::make_unique<SwUndoFieldFromDoc>(aPosition, *pOldField, *mpField, nullptr, true));
457  }
458  mpOutliner->SetModifyHdl( LINK( this, SwAnnotationWin, ModifyHdl ) );
459  mpOutliner->ClearModifyFlag();
460  mpOutliner->GetUndoManager().Clear();
461 }
462 
463 void SwAnnotationWin::UpdateText(const OUString& aText)
464 {
465  mpOutliner->Clear();
466  GetOutlinerView()->InsertText(aText);
467  UpdateData();
468 }
469 
471 {
472  // set initial language for outliner
474  sal_uInt16 nLangWhichId = 0;
475  switch (nScriptType)
476  {
477  case SvtScriptType::LATIN : nLangWhichId = EE_CHAR_LANGUAGE ; break;
478  case SvtScriptType::ASIAN : nLangWhichId = EE_CHAR_LANGUAGE_CJK; break;
479  case SvtScriptType::COMPLEX : nLangWhichId = EE_CHAR_LANGUAGE_CTL; break;
480  default: OSL_FAIL("GetLanguage: wrong script type");
481  }
482  return SvxLanguageItem(mpField->GetLanguage(),nLangWhichId);
483 }
484 
486 {
487  return mbReadonly ||
490 }
491 
493 {
494  return mpField->GetPar1();
495 }
496 
498 {
499  return mpField->GetDate();
500 }
501 
503 {
504  return mpField->GetTime();
505 }
506 
508 {
510 }
511 
512 } // end of namespace sw::annotation
513 
514 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
std::unique_ptr< weld::Label > mxMetadataDate
Date GetDate() const
Definition: docufld.hxx:481
std::unique_ptr< weld::ScrolledWindow > mxVScrollbar
virtual void SetModified(bool=true) override
Definition: docsh2.cxx:1419
Marks a position in the document model.
Definition: pam.hxx:36
const SwField * GetField() const
Definition: fmtfld.hxx:116
std::unique_ptr< weld::Label > mxMetadataResolved
void InsertText(const OUString &rNew, bool bSelect=false)
LanguageType GetLanguage() const
Language at field position.
Definition: fldbas.hxx:408
const SwFrame * mpAnchorFrame
SwPostItHelper::SwLayoutStatus GetLayoutStatus() const
OutlinerParaObject * IsAnswer()
Definition: PostItMgr.hxx:257
void GetSelection(struct ESelection &rSel, SvxTextForwarder const *pForwarder) noexcept
bool IsProtect() const
Definition: atrfld.cxx:425
void ShowCursor(bool bGotoCursor=true, bool bActivate=false)
Base class of all fields.
Definition: fldbas.hxx:291
virtual void SetPar2(const OUString &rStr) override
set the PostIt's text
Definition: docufld.cxx:1805
std::function< std::unique_ptr< UIObject >vcl::Window *)> FactoryFunction
tools::Time GetTime() const
Definition: docufld.hxx:482
std::unique_ptr< sw::sidebarwindows::ShadowOverlayObject > mpShadow
constexpr TypedWhichId< SvxPostureItem > EE_CHAR_ITALIC(EE_CHAR_START+7)
SwAnnotationWin(SwEditWin &rEditWin, SwPostItMgr &aMgr, SwSidebarItem &rSidebarItem, SwFormatField *aField)
virtual OUString GetPar1() const override
Author.
Definition: docufld.cxx:1799
static ImplSVEvent * PostUserEvent(const Link< void *, void > &rLink, void *pCaller=nullptr, bool bReferenceLink=false)
void SetParentClipMode(ParentClipMode nMode=ParentClipMode::NONE)
void SetActiveSidebarWin(sw::annotation::SwAnnotationWin *p)
Definition: PostItMgr.cxx:2194
Dialog to specify the properties of date form field.
IDocumentUndoRedo & GetIDocumentUndoRedo()
Definition: doc.cxx:144
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE_CJK(EE_CHAR_START+15)
constexpr TypedWhichId< SvxFontHeightItem > EE_CHAR_FONTHEIGHT(EE_CHAR_START+2)
bool DelRight()
Definition: delete.cxx:294
SwTextAttr * GetTextAttrForCharAt(const sal_Int32 nIndex, const sal_uInt16 nWhich=RES_TXTATR_END) const
get the text attribute at position nIndex which owns the dummy character CH_TXTATR_* at that position...
Definition: ndtxt.cxx:3068
OUString SwResId(TranslateId aId)
Definition: swmodule.cxx:164
static UITestLogger & getInstance()
SvtScriptType
SvxLanguageItem GetLanguage() const
void logEvent(const EventDescription &rDescription)
const LocaleDataWrapper & GetLocaleData() const
const OUString & get_id() const
NONE
std::unique_ptr< weld::MenuButton > mxMenuButton
std::unique_ptr< sw::overlay::OverlayRanges > mpTextRangeOverlay
void DisconnectSidebarWinFromFrame(const SwFrame &rFrame, sw::annotation::SwAnnotationWin &rSidebarWin)
Definition: PostItMgr.cxx:2435
SwIndex nContent
Definition: pam.hxx:39
const SwTextField * GetTextField() const
Definition: fmtfld.hxx:134
vcl::Cursor * GetCursor() const
A wrapper around SfxPoolItem to store the start position of (usually) a text portion, with an optional end.
Definition: txatbase.hxx:43
constexpr sal_uInt16 KEY_PAGEUP
sal_Int32 GetStart() const
Definition: txatbase.hxx:88
const SwFormatField & GetFormatField() const
Definition: txatbase.hxx:199
EditView & GetEditView() const
SfxItemPool & GetPool() const
virtual FactoryFunction GetUITestFactory() const override
std::unique_ptr< Outliner > mpOutliner
static void RemoveUserEvent(ImplSVEvent *nUserEvent)
virtual ~SwAnnotationWin() override
SwDoc * GetDoc()
returns Doc. But be careful!
Definition: docsh.hxx:204
void ConnectSidebarWinToFrame(const SwFrame &rFrame, const SwFormatField &rFormatField, sw::annotation::SwAnnotationWin &rSidebarWin)
Definition: PostItMgr.cxx:2418
sal_uInt32 GetPostItId() const
Definition: docufld.hxx:483
const EditTextObject & GetTextObject() const
virtual std::unique_ptr< SwField > Copy() const override
Definition: docufld.cxx:1780
std::unique_ptr< OutlinerView > mpOutlinerView
void SetAttribs(const SfxItemSet &)
SwAnnotationWin * GetTopReplyNote()
Find the first annotation for the thread which this annotation is in.
#define EE_PARA_ALL
static std::unique_ptr< UIObject > create(vcl::Window *pWindow)
Definition: uiobject.cxx:210
Window class for the Writer edit area, this is the one handling mouse and keyboard events and doing t...
Definition: edtwin.hxx:59
OUString Apply(const OUString &rStr) const
Definition: SwRewriter.cxx:39
bool IsResolvedPostIts() const
Definition: viewopt.hxx:278
virtual void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
virtual OUString GetText(sal_Int32 nPara) const =0
const SwFrame * mpAnchorFrame
static std::unique_ptr< ShadowOverlayObject > CreateShadowOverlayObject(SwView const &rDocView)
void AddRule(SwUndoArg eWhat, const OUString &rWith)
Definition: SwRewriter.cxx:25
constexpr sal_uInt16 KEY_PAGEDOWN
SvtScriptType GetScriptTypeOfLanguage(LanguageType nLang)
SwWrtShell * GetWrtShell()
Access to the SwWrtShell belonging to SwView.
Definition: docsh.hxx:225
void GrabFocusToDocument()
void UpdateText(const OUString &aText)
sal_uInt32 CalcParent()
Calculate parent postit id of current annotation window.
SwDocShell * GetDocShell()
Definition: view.cxx:1131
void Disable(bool bChild=true)
SwLayoutInfo maLayoutInfo
void InsertText(const OUString &rNew, bool bSelect=false, bool bLOKShowSelect=true)
void LayoutPostIts()
Definition: PostItMgr.cxx:695
constexpr TypedWhichId< SwFormatField > RES_TXTATR_ANNOTATION(60)
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE_CTL(EE_CHAR_START+16)
OUString getDate(const Date &rDate) const
void set_id(const OUString &rID)
std::unique_ptr< weld::CustomWeld > mxSidebarTextControlWin
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
void Broadcast(const SfxHint &rHint)
void SetSelection(const ESelection &)
const OutlinerParaObject * GetTextObject() const
Definition: docufld.hxx:497
void InitAnswer(OutlinerParaObject const &rText)
SwWrtShell * GetWrtShellPtr() const
Definition: view.hxx:414
bool GotoField(const SwFormatField &rField)
Definition: wrtsh3.cxx:71
SwFieldIds Which() const
ResId.
Definition: fldbas.cxx:250
std::unique_ptr< weld::Container > m_xContainer
std::unique_ptr< sw::sidebarwindows::AnchorOverlayObject > mpAnchor
ITALIC_NORMAL
const SwViewOption * GetViewOptions() const
Definition: viewsh.hxx:428
void SetLayout()
Definition: PostItMgr.hxx:201
virtual void dispose() override
SlideSorterView & mrView
void UpdateResolvedStatus(const sw::annotation::SwAnnotationWin *topNote)
Definition: PostItMgr.cxx:2499
#define EE_TEXTPOS_MAX_COUNT
constexpr TypedWhichId< SvxLanguageItem > EE_CHAR_LANGUAGE(EE_CHAR_START+14)
void ClearMark()
Definition: crsrsh.cxx:939
bool IsVisible() const
sw::annotation::SwAnnotationWin * GetActiveSidebarWin()
Definition: PostItMgr.hxx:235
void SetSelection(const ESelection &rNewSel)
sw::annotation::SwAnnotationWin * GetNextPostIt(sal_uInt16 aDirection, sw::annotation::SwAnnotationWin *aPostIt)
Definition: PostItMgr.cxx:1802
virtual OUString GetPar2() const override
Text.
Definition: docufld.cxx:1811
OUString getTime(const tools::Time &rTime, bool bSec=true, bool b100Sec=false) const
std::map< OUString, OUString > aParameters
SwTextNode & GetTextNode() const
Definition: txtfld.hxx:53
#define EE_PARA_MAX_COUNT
bool SupportsDoubleBuffering() const
virtual const SwFormatField & GetFormatField() const =0
virtual void dispose() override
void RemoveAttribsKeepLanguages(bool bRemoveParaAttribs)
#define EE_TEXTPOS_ALL
std::unique_ptr< sw::sidebarwindows::SidebarTextControl > mxSidebarTextControl
std::unique_ptr< weld::Label > mxMetadataAuthor
bool m_bDetectedRangeSegmentation false
void SetTextObject(std::optional< OutlinerParaObject > pText)
Definition: docufld.cxx:1823