LibreOffice Module sw (master)  1
docftn.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 <ftnidx.hxx>
21 #include <rootfrm.hxx>
22 #include <txtftn.hxx>
23 #include <fmtftn.hxx>
24 #include <pam.hxx>
25 #include <pagedesc.hxx>
26 #include <charfmt.hxx>
27 #include <UndoAttribute.hxx>
28 #include <rolbck.hxx>
29 #include <doc.hxx>
31 #include <IDocumentUndoRedo.hxx>
32 #include <IDocumentState.hxx>
35 #include <ndtxt.hxx>
36 #include <poolfmt.hxx>
37 #include <ftninfo.hxx>
38 
40 {
42  m_pPageDesc = rInfo.m_pPageDesc;
50 
51  m_aFormat = rInfo.m_aFormat;
53  m_bEndNote = rInfo.m_bEndNote;
54  m_sPrefix = rInfo.m_sPrefix;
55  m_sSuffix = rInfo.m_sSuffix;
56  return *this;
57 }
58 
59 bool SwEndNoteInfo::operator==( const SwEndNoteInfo& rInfo ) const
60 {
61  return
63  m_pPageDesc == rInfo.m_pPageDesc &&
64  m_pCharFormat == rInfo.m_pCharFormat &&
68  m_bEndNote == rInfo.m_bEndNote &&
69  m_sPrefix == rInfo.m_sPrefix &&
70  m_sSuffix == rInfo.m_sSuffix;
71 }
72 
74  SwClient(nullptr),
75  m_aDepends(*this),
76  m_pTextFormatColl(rInfo.m_pTextFormatColl),
77  m_pPageDesc(rInfo.m_pPageDesc),
78  m_pCharFormat(rInfo.m_pCharFormat),
79  m_pAnchorFormat(rInfo.m_pAnchorFormat),
80  m_sPrefix( rInfo.m_sPrefix ),
81  m_sSuffix( rInfo.m_sSuffix ),
82  m_bEndNote( true ),
83  m_aFormat( rInfo.m_aFormat ),
84  m_nFootnoteOffset( rInfo.m_nFootnoteOffset )
85 {
90 }
91 
93  SwClient(nullptr),
94  m_aDepends(*this),
95  m_pTextFormatColl(nullptr),
96  m_pPageDesc(nullptr),
97  m_pCharFormat(nullptr),
98  m_pAnchorFormat(nullptr),
99  m_bEndNote( true ),
100  m_nFootnoteOffset( 0 )
101 {
103 }
104 
106 {
107  if(!m_pPageDesc)
108  {
109  m_pPageDesc = rDoc.getIDocumentStylePoolAccess().GetPageDescFromPool( static_cast<sal_uInt16>(
112  }
113  return m_pPageDesc;
114 }
115 
117 {
118  return m_pPageDesc != nullptr;
119 }
120 
122 {
123  return m_pPageDesc == pDesc;
124 }
125 
127 {
129  m_pPageDesc = pDesc;
131 }
132 
134 {
136  m_pTextFormatColl = &rFormat;
138 }
139 
141 {
142  auto pCharFormatFromDoc = rDoc.getIDocumentStylePoolAccess().GetCharFormatFromPool( static_cast<sal_uInt16>(
144  if (m_pCharFormat != pCharFormatFromDoc)
145  {
147  m_aDepends.StartListening(pCharFormatFromDoc);
148  m_pCharFormat = pCharFormatFromDoc;
149  }
150  return m_pCharFormat;
151 }
152 
153 namespace
154 {
155  void lcl_ResetPoolIdForDocAndSync(const sal_uInt16 nId, SwCharFormat* pFormat, const SwEndNoteInfo& rInfo)
156  {
157  auto pDoc = pFormat->GetDoc();
158  if(!pDoc)
159  return;
160  for(auto pDocFormat : *pDoc->GetCharFormats())
161  {
162  if(pDocFormat == pFormat)
163  pDocFormat->SetPoolFormatId(nId);
164  else if(pDocFormat->GetPoolFormatId() == nId)
165  pDocFormat->SetPoolFormatId(0);
166  }
167  rInfo.GetCharFormat(*pDoc);
168  rInfo.GetAnchorCharFormat(*pDoc);
169  }
170 }
171 
173 {
174  lcl_ResetPoolIdForDocAndSync(
175  static_cast<sal_uInt16>(m_bEndNote
178  pFormat,
179  *this);
180 }
181 
183 {
184  auto pAnchorFormatFromDoc = rDoc.getIDocumentStylePoolAccess().GetCharFormatFromPool( static_cast<sal_uInt16>(
186  if(m_pAnchorFormat != pAnchorFormatFromDoc)
187  {
189  m_aDepends.StartListening(pAnchorFormatFromDoc);
190  m_pAnchorFormat = pAnchorFormatFromDoc;
191  }
192  return m_pAnchorFormat;
193 }
194 
196 {
197  lcl_ResetPoolIdForDocAndSync(
198  static_cast<sal_uInt16>(m_bEndNote
201  pFormat,
202  *this);
203 }
204 
206 {
207  return bAnchor
209  : m_pCharFormat;
210 }
211 
213 {
214  auto pFormat = GetCurrentCharFormat(m_pCharFormat == nullptr);
215  if (!pFormat || !m_aDepends.IsListeningTo(pFormat) || pFormat->IsFormatInDTOR())
216  return;
217  SwDoc* pDoc = pFormat->GetDoc();
218  SwFootnoteIdxs& rFootnoteIdxs = pDoc->GetFootnoteIdxs();
219  for(auto pTextFootnote : rFootnoteIdxs)
220  {
221  const SwFormatFootnote &rFootnote = pTextFootnote->GetFootnote();
222  if(rFootnote.IsEndNote() == m_bEndNote)
223  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rFootnote.GetNumStr());
224  }
225 }
226 
227 
228 void SwEndNoteInfo::SwClientNotify( const SwModify& rModify, const SfxHint& rHint)
229 {
230  if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
231  {
232  switch(pLegacyHint->GetWhich())
233  {
234  case RES_ATTRSET_CHG:
235  case RES_FMT_CHG:
237  break;
238  default:
239  CheckRegistration( pLegacyHint->m_pOld );
240  }
241  }
242  else if (auto pModifyChangedHint = dynamic_cast<const sw::ModifyChangedHint*>(&rHint))
243  {
244  auto pNew = const_cast<sw::BroadcastingModify*>(static_cast<const sw::BroadcastingModify*>(pModifyChangedHint->m_pNew));
245  if(m_pAnchorFormat == &rModify)
246  m_pAnchorFormat = static_cast<SwCharFormat*>(pNew);
247  else if(m_pCharFormat == &rModify)
248  m_pCharFormat = static_cast<SwCharFormat*>(pNew);
249  else if(m_pPageDesc == &rModify)
250  m_pPageDesc = static_cast<SwPageDesc*>(pNew);
251  else if(m_pTextFormatColl == &rModify)
252  m_pTextFormatColl = static_cast<SwTextFormatColl*>(pNew);
253  }
254 }
255 
257 {
259  m_aQuoVadis = rInfo.m_aQuoVadis;
260  m_aErgoSum = rInfo.m_aErgoSum;
261  m_ePos = rInfo.m_ePos;
262  m_eNum = rInfo.m_eNum;
263  return *this;
264 }
265 
266 bool SwFootnoteInfo::operator==( const SwFootnoteInfo& rInfo ) const
267 {
268  return m_ePos == rInfo.m_ePos &&
269  m_eNum == rInfo.m_eNum &&
270  SwEndNoteInfo::operator==(rInfo) &&
271  m_aQuoVadis == rInfo.m_aQuoVadis &&
272  m_aErgoSum == rInfo.m_aErgoSum;
273 }
274 
276  SwEndNoteInfo( rInfo ),
277  m_aQuoVadis( rInfo.m_aQuoVadis ),
278  m_aErgoSum( rInfo.m_aErgoSum ),
279  m_ePos( rInfo.m_ePos ),
280  m_eNum( rInfo.m_eNum )
281 {
282  m_bEndNote = false;
283 }
284 
286  SwEndNoteInfo(),
287  m_ePos( FTNPOS_PAGE ),
288  m_eNum( FTNNUM_DOC )
289 {
291  m_bEndNote = false;
292 }
293 
295 {
297  if( GetFootnoteInfo() == rInfo )
298  return;
299 
300  const SwFootnoteInfo &rOld = GetFootnoteInfo();
301 
302  if (GetIDocumentUndoRedo().DoesUndo())
303  {
304  GetIDocumentUndoRedo().AppendUndo( std::make_unique<SwUndoFootNoteInfo>(rOld, *this) );
305  }
306 
307  bool bFootnotePos = rInfo.m_ePos != rOld.m_ePos;
308  bool bFootnoteDesc = rOld.m_ePos == FTNPOS_CHAPTER &&
309  rInfo.GetPageDesc( *this ) != rOld.GetPageDesc( *this );
310  bool bExtra = rInfo.m_aQuoVadis != rOld.m_aQuoVadis ||
311  rInfo.m_aErgoSum != rOld.m_aErgoSum ||
313  rInfo.GetPrefix() != rOld.GetPrefix() ||
314  rInfo.GetSuffix() != rOld.GetSuffix();
315  SwCharFormat *pOldChrFormat = rOld.GetCharFormat( *this ),
316  *pNewChrFormat = rInfo.GetCharFormat( *this );
317  bool bFootnoteChrFormats = pOldChrFormat != pNewChrFormat;
318 
319  *mpFootnoteInfo = rInfo;
320 
321  if (pTmpRoot)
322  {
324  if ( bFootnotePos )
325  for( auto aLayout : aAllLayouts )
326  aLayout->AllRemoveFootnotes();
327  else
328  {
329  for( auto aLayout : aAllLayouts )
330  aLayout->UpdateFootnoteNums();
331  if ( bFootnoteDesc )
332  for( auto aLayout : aAllLayouts )
333  aLayout->CheckFootnotePageDescs(false);
334  if ( bExtra )
335  {
336  // For messages regarding ErgoSum etc. we save the extra code and use the
337  // available methods.
338  SwFootnoteIdxs& rFootnoteIdxs = GetFootnoteIdxs();
339  for( size_t nPos = 0; nPos < rFootnoteIdxs.size(); ++nPos )
340  {
341  SwTextFootnote *pTextFootnote = rFootnoteIdxs[ nPos ];
342  const SwFormatFootnote &rFootnote = pTextFootnote->GetFootnote();
343  if ( !rFootnote.IsEndNote() )
344  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rFootnote.GetNumStr());
345  }
346  }
347  }
348  }
349  if( FTNNUM_PAGE != rInfo.m_eNum )
351  else if( bFootnoteChrFormats )
352  {
353  mpFootnoteInfo->UpdateFormatOrAttr();
354  }
355 
356  // #i81002# no update during loading
357  if ( !IsInReading() )
358  {
360  }
362 
363 }
364 
366 {
368  if( GetEndNoteInfo() == rInfo )
369  return;
370 
371  if(GetIDocumentUndoRedo().DoesUndo())
372  {
374  std::make_unique<SwUndoEndNoteInfo>( GetEndNoteInfo(), *this ) );
375  }
376 
377  bool bNumChg = rInfo.m_nFootnoteOffset != GetEndNoteInfo().m_nFootnoteOffset;
378  // this seems to be an optimization: UpdateAllFootnote() is only called
379  // if the offset changes; if the offset is the same,
380  // but type/prefix/suffix changes, just set new numbers.
381  bool const bExtra = !bNumChg &&
382  ( (rInfo.m_aFormat.GetNumberingType() !=
384  || (rInfo.GetPrefix() != GetEndNoteInfo().GetPrefix())
385  || (rInfo.GetSuffix() != GetEndNoteInfo().GetSuffix())
386  );
387  bool bFootnoteDesc = rInfo.GetPageDesc( *this ) !=
388  GetEndNoteInfo().GetPageDesc( *this );
389  SwCharFormat *pOldChrFormat = GetEndNoteInfo().GetCharFormat( *this ),
390  *pNewChrFormat = rInfo.GetCharFormat( *this );
391  bool bFootnoteChrFormats = pOldChrFormat != pNewChrFormat;
392 
393  *mpEndNoteInfo = rInfo;
394 
395  if ( pTmpRoot )
396  {
397  if ( bFootnoteDesc )
398  {
399  for( auto aLayout : GetAllLayouts() )
400  aLayout->CheckFootnotePageDescs(true);
401  }
402  if ( bExtra )
403  {
404  // For messages regarding ErgoSum etc. we save the extra code and use the
405  // available methods.
406  SwFootnoteIdxs& rFootnoteIdxs = GetFootnoteIdxs();
407  for( size_t nPos = 0; nPos < rFootnoteIdxs.size(); ++nPos )
408  {
409  SwTextFootnote *pTextFootnote = rFootnoteIdxs[ nPos ];
410  const SwFormatFootnote &rFootnote = pTextFootnote->GetFootnote();
411  if ( rFootnote.IsEndNote() )
412  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rFootnote.GetNumStr());
413  }
414  }
415  }
416  if( bNumChg )
418  else if( bFootnoteChrFormats )
419  {
420  mpEndNoteInfo->UpdateFormatOrAttr();
421  }
422 
423  // #i81002# no update during loading
424  if ( !IsInReading() )
425  {
427  }
429 
430 }
431 
432 bool SwDoc::SetCurFootnote( const SwPaM& rPam, const OUString& rNumStr,
433  bool bIsEndNote)
434 {
435  SwFootnoteIdxs& rFootnoteArr = GetFootnoteIdxs();
437 
438  const SwPosition* pStt = rPam.Start(), *pEnd = rPam.End();
439  const sal_uLong nSttNd = pStt->nNode.GetIndex();
440  const sal_Int32 nSttCnt = pStt->nContent.GetIndex();
441  const sal_uLong nEndNd = pEnd->nNode.GetIndex();
442  const sal_Int32 nEndCnt = pEnd->nContent.GetIndex();
443 
444  size_t nPos = 0;
445  rFootnoteArr.SeekEntry( pStt->nNode, &nPos );
446 
447  std::unique_ptr<SwUndoChangeFootNote> pUndo;
448  if (GetIDocumentUndoRedo().DoesUndo())
449  {
450  GetIDocumentUndoRedo().ClearRedo(); // AppendUndo far below, so leave it
451  pUndo.reset(new SwUndoChangeFootNote( rPam, rNumStr, bIsEndNote ));
452  }
453 
454  bool bChg = false;
455  bool bTypeChgd = false;
456  const size_t nPosSave = nPos;
457  while( nPos < rFootnoteArr.size() )
458  {
459  SwTextFootnote* pTextFootnote = rFootnoteArr[ nPos++ ];
460  sal_uLong nIdx = SwTextFootnote_GetIndex(pTextFootnote);
461  if( nIdx >= nEndNd &&
462  ( nIdx != nEndNd || nEndCnt < pTextFootnote->GetStart() ) )
463  continue;
464  if( nIdx > nSttNd || ( nIdx == nSttNd &&
465  nSttCnt <= pTextFootnote->GetStart() ) )
466  {
467  const SwFormatFootnote& rFootnote = pTextFootnote->GetFootnote();
468  if( rFootnote.GetNumStr() != rNumStr ||
469  rFootnote.IsEndNote() != bIsEndNote )
470  {
471  bChg = true;
472  if ( pUndo )
473  {
474  pUndo->GetHistory().Add( *pTextFootnote );
475  }
476 
477  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rNumStr);
478  if( rFootnote.IsEndNote() != bIsEndNote )
479  {
480  const_cast<SwFormatFootnote&>(rFootnote).SetEndNote( bIsEndNote );
481  bTypeChgd = true;
482  pTextFootnote->CheckCondColl();
483  //#i11339# dispose UNO wrapper when a footnote is changed to an endnote or vice versa
484  const_cast<SwFormatFootnote&>(rFootnote).InvalidateFootnote();
485  }
486  }
487  }
488  }
489 
490  nPos = nPosSave; // There are more in the front!
491  while( nPos )
492  {
493  SwTextFootnote* pTextFootnote = rFootnoteArr[ --nPos ];
494  sal_uLong nIdx = SwTextFootnote_GetIndex(pTextFootnote);
495  if( nIdx <= nSttNd &&
496  ( nIdx != nSttNd || nSttCnt > pTextFootnote->GetStart() ) )
497  continue;
498  if( nIdx < nEndNd || ( nIdx == nEndNd &&
499  nEndCnt >= pTextFootnote->GetStart() ) )
500  {
501  const SwFormatFootnote& rFootnote = pTextFootnote->GetFootnote();
502  if( rFootnote.GetNumStr() != rNumStr ||
503  rFootnote.IsEndNote() != bIsEndNote )
504  {
505  bChg = true;
506  if ( pUndo )
507  {
508  pUndo->GetHistory().Add( *pTextFootnote );
509  }
510 
511  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rNumStr);
512  if( rFootnote.IsEndNote() != bIsEndNote )
513  {
514  const_cast<SwFormatFootnote&>(rFootnote).SetEndNote( bIsEndNote );
515  bTypeChgd = true;
516  pTextFootnote->CheckCondColl();
517  }
518  }
519  }
520  }
521 
522  // Who needs to be triggered?
523  if( bChg )
524  {
525  if( pUndo )
526  {
527  GetIDocumentUndoRedo().AppendUndo(std::move(pUndo));
528  }
529 
530  if ( bTypeChgd )
531  rFootnoteArr.UpdateAllFootnote();
532  if( FTNNUM_PAGE != GetFootnoteInfo().m_eNum )
533  {
534  if ( !bTypeChgd )
535  rFootnoteArr.UpdateAllFootnote();
536  }
537  else if( pTmpRoot )
538  {
539  for( auto aLayout : GetAllLayouts() )
540  aLayout->UpdateFootnoteNums();
541  }
543  }
544  return bChg;
545 }
546 
547 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual SwCharFormat * GetCharFormatFromPool(sal_uInt16 nId)=0
SvxNumType GetNumberingType() const
SwPageDesc * m_pPageDesc
Definition: ftninfo.hxx:36
SwCharFormat * GetAnchorCharFormat(SwDoc &rDoc) const
Definition: docftn.cxx:182
void Add(SwClient *pDepend)
Definition: calbck.cxx:171
Represents the style of a paragraph.
Definition: fmtcol.hxx:56
Marks a position in the document model.
Definition: pam.hxx:35
Footnote at end of document.
Definition: poolfmt.hxx:177
void SetFootnoteInfo(const SwFootnoteInfo &rInfo)
Definition: docftn.cxx:294
SwCharFormat * GetCurrentCharFormat(const bool bAnchor) const
Definition: docftn.cxx:205
SwFootnoteInfo & operator=(const SwFootnoteInfo &)
Definition: docftn.cxx:256
virtual const SwRootFrame * GetCurrentLayout() const =0
constexpr TypedWhichId< SwFormatChg > RES_FMT_CHG(162)
const OUString & GetSuffix() const
Definition: ftninfo.hxx:71
SwNodeIndex nNode
Definition: pam.hxx:37
sal_uInt16 char char * pDesc
virtual void SetModified()=0
Must be called manually at changes of format.
sal_uIntPtr sal_uLong
OUString m_sPrefix
Definition: ftninfo.hxx:39
void CheckCondColl()
Definition: atrftn.cxx:573
SwEndNoteInfo & operator=(const SwEndNoteInfo &)
Definition: docftn.cxx:39
Definition: doc.hxx:187
SwTextFormatColl * m_pTextFormatColl
Definition: ftninfo.hxx:35
OUString m_sSuffix
Definition: ftninfo.hxx:40
bool IsEndNote() const
Definition: fmtftn.hxx:71
IDocumentUndoRedo & GetIDocumentUndoRedo()
Definition: doc.cxx:144
The root element of a Writer document layout.
Definition: rootfrm.hxx:82
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
Definition: doc.cxx:357
bool m_bEndNote
Definition: ftninfo.hxx:42
void SetCharFormat(SwCharFormat *)
Definition: docftn.cxx:172
SwIndex nContent
Definition: pam.hxx:38
IDocumentStylePoolAccess const & getIDocumentStylePoolAccess() const
Definition: doc.cxx:426
SwCharFormat * m_pAnchorFormat
Definition: ftninfo.hxx:38
sal_uLong GetIndex() const
Definition: ndindex.hxx:152
SVX_NUM_ARABIC
sal_Int32 GetStart() const
Definition: txatbase.hxx:86
SVX_NUM_ROMAN_LOWER
void EndListening(SwModify *pDepend)
Definition: calbck.cxx:284
const OUString & GetNumStr() const
Definition: fmtftn.hxx:68
o3tl::sorted_vector< SwRootFrame * > GetAllLayouts()
Definition: doclay.cxx:1671
void SetAnchorCharFormat(SwCharFormat *)
Definition: docftn.cxx:195
size_type size() const
bool KnowsPageDesc() const
Definition: docftn.cxx:116
virtual SwPageDesc * GetPageDescFromPool(sal_uInt16 nId, bool bRegardLanguage=true)=0
Return required automatic page style.
void SetFootnoteTextColl(SwTextFormatColl &rColl)
Definition: docftn.cxx:133
void SetNumber(sal_uInt16 nNumber, sal_uInt16 nNumberRLHidden, const OUString &sNumStr)
Definition: atrftn.cxx:361
bool IsFormatInDTOR() const
Definition: format.hxx:175
bool SetCurFootnote(const SwPaM &rPam, const OUString &rNumStr, bool bIsEndNote)
change footnotes in range
Definition: docftn.cxx:432
PaM is Point and Mark: a selection of the document model.
Definition: pam.hxx:136
SwFootnoteNum m_eNum
Definition: ftninfo.hxx:98
virtual void UpdateRefFields()=0
virtual void AppendUndo(std::unique_ptr< SwUndo > pUndo)=0
Add new Undo action.
SwTextFootnote * SeekEntry(const SwNodeIndex &rIdx, size_t *pPos=nullptr) const
Definition: ftnidx.cxx:409
virtual void ClearRedo()=0
Delete all Redo actions.
std::unique_ptr< sw::ModifyChangedHint > CheckRegistration(const SfxPoolItem *pOldValue)
Definition: calbck.cxx:78
Footnote anchor.
Definition: poolfmt.hxx:127
bool operator==(const SwFootnoteInfo &rInf) const
Definition: docftn.cxx:266
std::unique_ptr< SwEndNoteInfo > mpEndNoteInfo
Definition: doc.hxx:255
bool IsListeningTo(const SwModify *const pDepend) const
Definition: calbck.cxx:275
sal_uInt16 m_nFootnoteOffset
Definition: ftninfo.hxx:47
SwCharFormat * m_pCharFormat
Definition: ftninfo.hxx:37
sal_uInt16 GetNumberRLHidden() const
Definition: fmtftn.hxx:70
bool DependsOn(const SwPageDesc *) const
Definition: docftn.cxx:121
constexpr TypedWhichId< SwAttrSetChg > RES_ATTRSET_CHG(163)
IDocumentState const & getIDocumentState() const
Definition: doc.cxx:394
SvxNumberType m_aFormat
Definition: ftninfo.hxx:46
Endnote anchor.
Definition: poolfmt.hxx:128
#define SwTextFootnote_GetIndex(pFIdx)
Definition: ftnidx.hxx:34
const SwDoc * GetDoc() const
The document is set in SwAttrPool now, therefore you always can access it.
Definition: format.hxx:123
const SwFormatFootnote & GetFootnote() const
Definition: txatbase.hxx:204
bool IsInReading() const
Definition: doc.hxx:955
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
Definition: doc.cxx:405
const SwPosition * Start() const
Definition: pam.hxx:212
Endnote page.
Definition: poolfmt.hxx:178
const OUString & GetPrefix() const
Definition: ftninfo.hxx:70
void StartListening(SwModify *pDepend)
Definition: calbck.cxx:268
void SetEndNoteInfo(const SwEndNoteInfo &rInfo)
Definition: docftn.cxx:365
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
Definition: docftn.cxx:228
SwCharFormat * GetCharFormat(SwDoc &rDoc) const
Definition: docftn.cxx:140
SwPageDesc * GetPageDesc(SwDoc &rDoc) const
Definition: docftn.cxx:105
void ChgPageDesc(SwPageDesc *pDesc)
Definition: docftn.cxx:126
sal_Int32 GetIndex() const
Definition: index.hxx:91
const SwPosition * End() const
Definition: pam.hxx:217
void SetNumber(const SwFormatFootnote &rFootnote)
Definition: fmtftn.hxx:76
void UpdateFormatOrAttr()
Definition: docftn.cxx:212
OUString m_aQuoVadis
Definition: ftninfo.hxx:95
SwFootnoteIdxs & GetFootnoteIdxs()
Definition: doc.hxx:633
SwFootnotePos m_ePos
Definition: ftninfo.hxx:97
void SetNumberingType(SvxNumType nSet)
void UpdateAllFootnote()
Definition: ftnidx.cxx:267
std::unique_ptr< SwFootnoteInfo > mpFootnoteInfo
Definition: doc.hxx:254
sal_uInt16 GetNumber() const
Definition: fmtftn.hxx:69
const SwFootnoteInfo & GetFootnoteInfo() const
Definition: doc.hxx:629
const SwEndNoteInfo & GetEndNoteInfo() const
Definition: doc.hxx:631
OUString m_aErgoSum
Definition: ftninfo.hxx:96
sal_uInt16 nPos
sw::WriterMultiListener m_aDepends
Definition: ftninfo.hxx:34
bool operator==(const SwEndNoteInfo &rInf) const
Definition: docftn.cxx:59