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  pPageDesc = rInfo.pPageDesc;
44  pCharFormat = rInfo.pCharFormat;
51 
52  aFormat = rInfo.aFormat;
54  m_bEndNote = rInfo.m_bEndNote;
55  sPrefix = rInfo.sPrefix;
56  sSuffix = rInfo.sSuffix;
57  return *this;
58 }
59 
60 bool SwEndNoteInfo::operator==( const SwEndNoteInfo& rInfo ) const
61 {
62  return
64  pPageDesc == rInfo.pPageDesc &&
65  pCharFormat == rInfo.pCharFormat &&
66  pAnchorFormat == rInfo.pAnchorFormat &&
69  m_bEndNote == rInfo.m_bEndNote &&
70  sPrefix == rInfo.sPrefix &&
71  sSuffix == rInfo.sSuffix;
72 }
73 
75  SwClient(nullptr),
76  aDepends(*this),
77  pTextFormatColl(rInfo.pTextFormatColl),
78  pPageDesc(rInfo.pPageDesc),
79  pCharFormat(rInfo.pCharFormat),
80  pAnchorFormat(rInfo.pAnchorFormat),
81  sPrefix( rInfo.sPrefix ),
82  sSuffix( rInfo.sSuffix ),
83  m_bEndNote( true ),
84  aFormat( rInfo.aFormat ),
85  nFootnoteOffset( rInfo.nFootnoteOffset )
86 {
91 }
92 
94  SwClient(nullptr),
95  aDepends(*this),
96  pTextFormatColl(nullptr),
97  pPageDesc(nullptr),
98  pCharFormat(nullptr),
99  pAnchorFormat(nullptr),
100  m_bEndNote( true ),
101  nFootnoteOffset( 0 )
102 {
104 }
105 
107 {
108  if(!pPageDesc)
109  {
110  pPageDesc = rDoc.getIDocumentStylePoolAccess().GetPageDescFromPool( static_cast<sal_uInt16>(
113  }
114  return pPageDesc;
115 }
116 
118 {
119  return pPageDesc != nullptr;
120 }
121 
123 {
124  return pPageDesc == pDesc;
125 }
126 
128 {
130  pPageDesc = pDesc;
132 }
133 
135 {
137  pTextFormatColl = &rFormat;
139 }
140 
142 {
143  auto pCharFormatFromDoc = rDoc.getIDocumentStylePoolAccess().GetCharFormatFromPool( static_cast<sal_uInt16>(
145  if (pCharFormat != pCharFormatFromDoc)
146  {
148  aDepends.StartListening(pCharFormatFromDoc);
149  pCharFormat = pCharFormatFromDoc;
150  }
151  return 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(pAnchorFormat != pAnchorFormatFromDoc)
188  {
190  aDepends.StartListening(pAnchorFormatFromDoc);
191  pAnchorFormat = pAnchorFormatFromDoc;
192  }
193  return pAnchorFormat;
194 }
195 
197 {
198  lcl_ResetPoolIdForDocAndSync(
199  static_cast<sal_uInt16>(m_bEndNote
202  pFormat,
203  *this);
204 }
205 
207 {
208  return bAnchor
209  ? pAnchorFormat
210  : pCharFormat;
211 }
212 
213 void SwEndNoteInfo::SwClientNotify( const SwModify& rModify, const SfxHint& rHint)
214 {
215  if (auto pLegacyHint = dynamic_cast<const sw::LegacyModifyHint*>(&rHint))
216  {
217  const sal_uInt16 nWhich = pLegacyHint->m_pOld ? pLegacyHint->m_pOld->Which() : pLegacyHint->m_pNew ? pLegacyHint->m_pNew->Which() : 0 ;
218  if (RES_ATTRSET_CHG == nWhich || RES_FMT_CHG == nWhich)
219  {
220  auto pFormat = GetCurrentCharFormat(pCharFormat == nullptr);
221  if (!pFormat || !aDepends.IsListeningTo(pFormat) || pFormat->IsFormatInDTOR())
222  return;
223  SwDoc* pDoc = pFormat->GetDoc();
224  SwFootnoteIdxs& rFootnoteIdxs = pDoc->GetFootnoteIdxs();
225  for( size_t nPos = 0; nPos < rFootnoteIdxs.size(); ++nPos )
226  {
227  SwTextFootnote *pTextFootnote = rFootnoteIdxs[ nPos ];
228  const SwFormatFootnote &rFootnote = pTextFootnote->GetFootnote();
229  if ( rFootnote.IsEndNote() == m_bEndNote )
230  {
231  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rFootnote.GetNumStr());
232  }
233  }
234  }
235  else
236  CheckRegistration( pLegacyHint->m_pOld );
237  }
238  else if (auto pModifyChangedHint = dynamic_cast<const sw::ModifyChangedHint*>(&rHint))
239  {
240  auto pNew = const_cast<SwModify*>(pModifyChangedHint->m_pNew);
241  if(pAnchorFormat == &rModify)
242  pAnchorFormat = static_cast<SwCharFormat*>(pNew);
243  else if(pCharFormat == &rModify)
244  pCharFormat = static_cast<SwCharFormat*>(pNew);
245  else if(pPageDesc == &rModify)
246  pPageDesc = static_cast<SwPageDesc*>(pNew);
247  else if(pTextFormatColl == &rModify)
248  pTextFormatColl = static_cast<SwTextFormatColl*>(pNew);
249  }
250 }
251 
253 {
255  aQuoVadis = rInfo.aQuoVadis;
256  aErgoSum = rInfo.aErgoSum;
257  ePos = rInfo.ePos;
258  eNum = rInfo.eNum;
259  return *this;
260 }
261 
262 bool SwFootnoteInfo::operator==( const SwFootnoteInfo& rInfo ) const
263 {
264  return ePos == rInfo.ePos &&
265  eNum == rInfo.eNum &&
266  SwEndNoteInfo::operator==(rInfo) &&
267  aQuoVadis == rInfo.aQuoVadis &&
268  aErgoSum == rInfo.aErgoSum;
269 }
270 
272  SwEndNoteInfo( rInfo ),
273  aQuoVadis( rInfo.aQuoVadis ),
274  aErgoSum( rInfo.aErgoSum ),
275  ePos( rInfo.ePos ),
276  eNum( rInfo.eNum )
277 {
278  m_bEndNote = false;
279 }
280 
282  SwEndNoteInfo(),
283  ePos( FTNPOS_PAGE ),
284  eNum( FTNNUM_DOC )
285 {
287  m_bEndNote = false;
288 }
289 
291 {
293  if( GetFootnoteInfo() == rInfo )
294  return;
295 
296  const SwFootnoteInfo &rOld = GetFootnoteInfo();
297 
298  if (GetIDocumentUndoRedo().DoesUndo())
299  {
300  GetIDocumentUndoRedo().AppendUndo( std::make_unique<SwUndoFootNoteInfo>(rOld, this) );
301  }
302 
303  bool bFootnotePos = rInfo.ePos != rOld.ePos;
304  bool bFootnoteDesc = rOld.ePos == FTNPOS_CHAPTER &&
305  rInfo.GetPageDesc( *this ) != rOld.GetPageDesc( *this );
306  bool bExtra = rInfo.aQuoVadis != rOld.aQuoVadis ||
307  rInfo.aErgoSum != rOld.aErgoSum ||
308  rInfo.aFormat.GetNumberingType() != rOld.aFormat.GetNumberingType() ||
309  rInfo.GetPrefix() != rOld.GetPrefix() ||
310  rInfo.GetSuffix() != rOld.GetSuffix();
311  SwCharFormat *pOldChrFormat = rOld.GetCharFormat( *this ),
312  *pNewChrFormat = rInfo.GetCharFormat( *this );
313  bool bFootnoteChrFormats = pOldChrFormat != pNewChrFormat;
314 
315  *mpFootnoteInfo = rInfo;
316 
317  if (pTmpRoot)
318  {
319  std::set<SwRootFrame*> aAllLayouts = GetAllLayouts();
320  if ( bFootnotePos )
321  for( auto aLayout : aAllLayouts )
322  aLayout->AllRemoveFootnotes();
323  else
324  {
325  for( auto aLayout : aAllLayouts )
326  aLayout->UpdateFootnoteNums();
327  if ( bFootnoteDesc )
328  for( auto aLayout : aAllLayouts )
329  aLayout->CheckFootnotePageDescs(false);
330  if ( bExtra )
331  {
332  // For messages regarding ErgoSum etc. we save the extra code and use the
333  // available methods.
334  SwFootnoteIdxs& rFootnoteIdxs = GetFootnoteIdxs();
335  for( size_t nPos = 0; nPos < rFootnoteIdxs.size(); ++nPos )
336  {
337  SwTextFootnote *pTextFootnote = rFootnoteIdxs[ nPos ];
338  const SwFormatFootnote &rFootnote = pTextFootnote->GetFootnote();
339  if ( !rFootnote.IsEndNote() )
340  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rFootnote.GetNumStr());
341  }
342  }
343  }
344  }
345  if( FTNNUM_PAGE != rInfo.eNum )
347  else if( bFootnoteChrFormats )
348  {
349  SwFormatChg aOld( pOldChrFormat );
350  SwFormatChg aNew( pNewChrFormat );
351  mpFootnoteInfo->ModifyNotification( &aOld, &aNew );
352  }
353 
354  // #i81002# no update during loading
355  if ( !IsInReading() )
356  {
358  }
360 
361 }
362 
364 {
366  if( GetEndNoteInfo() == rInfo )
367  return;
368 
369  if(GetIDocumentUndoRedo().DoesUndo())
370  {
372  std::make_unique<SwUndoEndNoteInfo>( GetEndNoteInfo(), this ) );
373  }
374 
375  bool bNumChg = rInfo.nFootnoteOffset != GetEndNoteInfo().nFootnoteOffset;
376  // this seems to be an optimization: UpdateAllFootnote() is only called
377  // if the offset changes; if the offset is the same,
378  // but type/prefix/suffix changes, just set new numbers.
379  bool const bExtra = !bNumChg &&
380  ( (rInfo.aFormat.GetNumberingType() !=
382  || (rInfo.GetPrefix() != GetEndNoteInfo().GetPrefix())
383  || (rInfo.GetSuffix() != GetEndNoteInfo().GetSuffix())
384  );
385  bool bFootnoteDesc = rInfo.GetPageDesc( *this ) !=
386  GetEndNoteInfo().GetPageDesc( *this );
387  SwCharFormat *pOldChrFormat = GetEndNoteInfo().GetCharFormat( *this ),
388  *pNewChrFormat = rInfo.GetCharFormat( *this );
389  bool bFootnoteChrFormats = pOldChrFormat != pNewChrFormat;
390 
391  *mpEndNoteInfo = rInfo;
392 
393  if ( pTmpRoot )
394  {
395  if ( bFootnoteDesc )
396  {
397  for( auto aLayout : GetAllLayouts() )
398  aLayout->CheckFootnotePageDescs(true);
399  }
400  if ( bExtra )
401  {
402  // For messages regarding ErgoSum etc. we save the extra code and use the
403  // available methods.
404  SwFootnoteIdxs& rFootnoteIdxs = GetFootnoteIdxs();
405  for( size_t nPos = 0; nPos < rFootnoteIdxs.size(); ++nPos )
406  {
407  SwTextFootnote *pTextFootnote = rFootnoteIdxs[ nPos ];
408  const SwFormatFootnote &rFootnote = pTextFootnote->GetFootnote();
409  if ( rFootnote.IsEndNote() )
410  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rFootnote.GetNumStr());
411  }
412  }
413  }
414  if( bNumChg )
416  else if( bFootnoteChrFormats )
417  {
418  SwFormatChg aOld( pOldChrFormat );
419  SwFormatChg aNew( pNewChrFormat );
420  mpEndNoteInfo->ModifyNotification( &aOld, &aNew );
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  SwTextFootnote* pTextFootnote;
455  sal_uLong nIdx;
456  bool bChg = false;
457  bool bTypeChgd = false;
458  const size_t nPosSave = nPos;
459  while( nPos < rFootnoteArr.size() &&
460  (( nIdx = SwTextFootnote_GetIndex((pTextFootnote = rFootnoteArr[ nPos++ ] )))
461  < nEndNd || ( nIdx == nEndNd &&
462  nEndCnt >= pTextFootnote->GetStart() )) )
463  if( nIdx > nSttNd || ( nIdx == nSttNd &&
464  nSttCnt <= pTextFootnote->GetStart() ) )
465  {
466  const SwFormatFootnote& rFootnote = pTextFootnote->GetFootnote();
467  if( rFootnote.GetNumStr() != rNumStr ||
468  rFootnote.IsEndNote() != bIsEndNote )
469  {
470  bChg = true;
471  if ( pUndo )
472  {
473  pUndo->GetHistory().Add( *pTextFootnote );
474  }
475 
476  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rNumStr);
477  if( rFootnote.IsEndNote() != bIsEndNote )
478  {
479  const_cast<SwFormatFootnote&>(rFootnote).SetEndNote( bIsEndNote );
480  bTypeChgd = true;
481  pTextFootnote->CheckCondColl();
482  //#i11339# dispose UNO wrapper when a footnote is changed to an endnote or vice versa
483  const_cast<SwFormatFootnote&>(rFootnote).InvalidateFootnote();
484  }
485  }
486  }
487 
488  nPos = nPosSave; // There are more in the front!
489  while( nPos &&
490  (( nIdx = SwTextFootnote_GetIndex((pTextFootnote = rFootnoteArr[ --nPos ] )))
491  > nSttNd || ( nIdx == nSttNd &&
492  nSttCnt <= pTextFootnote->GetStart() )) )
493  if( nIdx < nEndNd || ( nIdx == nEndNd &&
494  nEndCnt >= pTextFootnote->GetStart() ) )
495  {
496  const SwFormatFootnote& rFootnote = pTextFootnote->GetFootnote();
497  if( rFootnote.GetNumStr() != rNumStr ||
498  rFootnote.IsEndNote() != bIsEndNote )
499  {
500  bChg = true;
501  if ( pUndo )
502  {
503  pUndo->GetHistory().Add( *pTextFootnote );
504  }
505 
506  pTextFootnote->SetNumber(rFootnote.GetNumber(), rFootnote.GetNumberRLHidden(), rNumStr);
507  if( rFootnote.IsEndNote() != bIsEndNote )
508  {
509  const_cast<SwFormatFootnote&>(rFootnote).SetEndNote( bIsEndNote );
510  bTypeChgd = true;
511  pTextFootnote->CheckCondColl();
512  }
513  }
514  }
515 
516  // Who needs to be triggered?
517  if( bChg )
518  {
519  if( pUndo )
520  {
521  GetIDocumentUndoRedo().AppendUndo(std::move(pUndo));
522  }
523 
524  if ( bTypeChgd )
525  rFootnoteArr.UpdateAllFootnote();
526  if( FTNNUM_PAGE != GetFootnoteInfo().eNum )
527  {
528  if ( !bTypeChgd )
529  rFootnoteArr.UpdateAllFootnote();
530  }
531  else if( pTmpRoot )
532  {
533  for( auto aLayout : GetAllLayouts() )
534  aLayout->UpdateFootnoteNums();
535  }
537  }
538  return bChg;
539 }
540 
541 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
virtual SwCharFormat * GetCharFormatFromPool(sal_uInt16 nId)=0
SvxNumType GetNumberingType() const
SwCharFormat * GetAnchorCharFormat(SwDoc &rDoc) const
Definition: docftn.cxx:183
sw::WriterMultiListener aDepends
Definition: ftninfo.hxx:34
void Add(SwClient *pDepend)
Definition: calbck.cxx:217
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:178
void SetFootnoteInfo(const SwFootnoteInfo &rInfo)
Definition: docftn.cxx:290
#define RES_ATTRSET_CHG
Definition: hintids.hxx:285
SwCharFormat * GetCurrentCharFormat(const bool bAnchor) const
Definition: docftn.cxx:206
SwFootnoteInfo & operator=(const SwFootnoteInfo &)
Definition: docftn.cxx:252
virtual const SwRootFrame * GetCurrentLayout() const =0
const OUString & GetSuffix() const
Definition: ftninfo.hxx:71
SwNodeIndex nNode
Definition: pam.hxx:37
virtual void SetModified()=0
Must be called manually at changes of format.
sal_uIntPtr sal_uLong
void CheckCondColl()
Definition: atrftn.cxx:552
SwEndNoteInfo & operator=(const SwEndNoteInfo &)
Definition: docftn.cxx:40
Definition: doc.hxx:185
sal_uInt16 sal_Char sal_Char * pDesc
bool IsEndNote() const
Definition: fmtftn.hxx:73
IDocumentUndoRedo & GetIDocumentUndoRedo()
Definition: doc.cxx:176
SwCharFormat * pCharFormat
Definition: ftninfo.hxx:37
The root element of a Writer document layout.
Definition: rootfrm.hxx:79
css::chart::ChartAxisLabelPosition ePos
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
Definition: doc.cxx:389
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:458
sal_uLong GetIndex() const
Definition: ndindex.hxx:151
SVX_NUM_ARABIC
sal_Int32 GetStart() const
Definition: txatbase.hxx:82
SwCharFormat * pAnchorFormat
Definition: ftninfo.hxx:38
SvxNumberType aFormat
Definition: ftninfo.hxx:46
SVX_NUM_ROMAN_LOWER
void EndListening(SwModify *pDepend)
Definition: calbck.cxx:351
const OUString & GetNumStr() const
Definition: fmtftn.hxx:70
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
SwTextFormatColl * pTextFormatColl
Definition: ftninfo.hxx:35
void SetNumber(sal_uInt16 nNumber, sal_uInt16 nNumberRLHidden, const OUString &sNumStr)
Definition: atrftn.cxx:341
bool IsFormatInDTOR() const
Definition: format.hxx:171
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
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:128
bool operator==(const SwFootnoteInfo &rInf) const
Definition: docftn.cxx:262
std::unique_ptr< SwEndNoteInfo > mpEndNoteInfo
Definition: doc.hxx:253
bool IsListeningTo(const SwModify *const pDepend) const
Definition: calbck.cxx:342
sal_uInt16 GetNumberRLHidden() const
Definition: fmtftn.hxx:72
bool DependsOn(const SwPageDesc *) const
Definition: docftn.cxx:122
IDocumentState const & getIDocumentState() const
Definition: doc.cxx:426
Endnote anchor.
Definition: poolfmt.hxx:129
std::set< SwRootFrame * > GetAllLayouts()
Definition: doclay.cxx:1673
#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
OUString aErgoSum
Definition: ftninfo.hxx:95
SwPageDesc * pPageDesc
Definition: ftninfo.hxx:36
#define RES_FMT_CHG
Definition: hintids.hxx:284
const SwFormatFootnote & GetFootnote() const
Definition: txatbase.hxx:200
bool IsInReading() const
Definition: doc.hxx:948
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
Definition: doc.cxx:437
const SwPosition * Start() const
Definition: pam.hxx:212
Endnote page.
Definition: poolfmt.hxx:179
const OUString & GetPrefix() const
Definition: ftninfo.hxx:70
void StartListening(SwModify *pDepend)
Definition: calbck.cxx:335
void SetEndNoteInfo(const SwEndNoteInfo &rInfo)
Definition: docftn.cxx:363
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
Definition: docftn.cxx:213
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:95
SwFootnoteNum eNum
Definition: ftninfo.hxx:97
sal_uInt16 nFootnoteOffset
Definition: ftninfo.hxx:47
const SwPosition * End() const
Definition: pam.hxx:217
OUString sSuffix
Definition: ftninfo.hxx:40
SwFootnoteIdxs & GetFootnoteIdxs()
Definition: doc.hxx:628
SwFootnotePos ePos
Definition: ftninfo.hxx:96
void SetNumberingType(SvxNumType nSet)
void UpdateAllFootnote()
Definition: ftnidx.cxx:267
std::unique_ptr< SwFootnoteInfo > mpFootnoteInfo
Definition: doc.hxx:252
OUString sPrefix
Definition: ftninfo.hxx:39
sal_Int32 nPos
sal_uInt16 GetNumber() const
Definition: fmtftn.hxx:71
const SwFootnoteInfo & GetFootnoteInfo() const
Definition: doc.hxx:624
const SwEndNoteInfo & GetEndNoteInfo() const
Definition: doc.hxx:626
OUString aQuoVadis
Definition: ftninfo.hxx:94
bool operator==(const SwEndNoteInfo &rInf) const
Definition: docftn.cxx:60