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