Line data Source code
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>
31 : #include <IDocumentFieldsAccess.hxx>
32 : #include <IDocumentUndoRedo.hxx>
33 : #include <IDocumentState.hxx>
34 : #include <IDocumentLayoutAccess.hxx>
35 : #include <IDocumentStylePoolAccess.hxx>
36 : #include <ndtxt.hxx>
37 : #include <poolfmt.hxx>
38 : #include <ftninfo.hxx>
39 :
40 138 : SwEndNoteInfo& SwEndNoteInfo::operator=(const SwEndNoteInfo& rInfo)
41 : {
42 138 : if( rInfo.GetFtnTxtColl() )
43 28 : rInfo.GetFtnTxtColl()->Add(this);
44 110 : else if ( GetRegisteredIn())
45 0 : GetRegisteredInNonConst()->Remove(this);
46 :
47 138 : if ( rInfo.aPageDescDep.GetRegisteredIn() )
48 76 : ((SwModify*)rInfo.aPageDescDep.GetRegisteredIn())->Add( &aPageDescDep );
49 62 : else if ( aPageDescDep.GetRegisteredIn() )
50 0 : ((SwModify*)aPageDescDep.GetRegisteredIn())->Remove( &aPageDescDep );
51 :
52 138 : if ( rInfo.aCharFmtDep.GetRegisteredIn() )
53 136 : ((SwModify*)rInfo.aCharFmtDep.GetRegisteredIn())->Add( &aCharFmtDep );
54 2 : else if ( aCharFmtDep.GetRegisteredIn() )
55 0 : ((SwModify*)aCharFmtDep.GetRegisteredIn())->Remove( &aCharFmtDep );
56 :
57 138 : if ( rInfo.aAnchorCharFmtDep.GetRegisteredIn() )
58 54 : ((SwModify*)rInfo.aAnchorCharFmtDep.GetRegisteredIn())->Add(
59 108 : &aAnchorCharFmtDep );
60 84 : else if( aAnchorCharFmtDep.GetRegisteredIn() )
61 0 : ((SwModify*)aAnchorCharFmtDep.GetRegisteredIn())->Remove(
62 0 : &aAnchorCharFmtDep );
63 :
64 138 : aFmt = rInfo.aFmt;
65 138 : nFtnOffset = rInfo.nFtnOffset;
66 138 : m_bEndNote = rInfo.m_bEndNote;
67 138 : sPrefix = rInfo.sPrefix;
68 138 : sSuffix = rInfo.sSuffix;
69 138 : return *this;
70 : }
71 :
72 5944 : bool SwEndNoteInfo::operator==( const SwEndNoteInfo& rInfo ) const
73 : {
74 5944 : return aPageDescDep.GetRegisteredIn() ==
75 11882 : rInfo.aPageDescDep.GetRegisteredIn() &&
76 5938 : aCharFmtDep.GetRegisteredIn() ==
77 11840 : rInfo.aCharFmtDep.GetRegisteredIn() &&
78 5902 : aAnchorCharFmtDep.GetRegisteredIn() ==
79 11792 : rInfo.aAnchorCharFmtDep.GetRegisteredIn() &&
80 11774 : GetFtnTxtColl() == rInfo.GetFtnTxtColl() &&
81 11740 : aFmt.GetNumberingType() == rInfo.aFmt.GetNumberingType() &&
82 11708 : nFtnOffset == rInfo.nFtnOffset &&
83 11704 : m_bEndNote == rInfo.m_bEndNote &&
84 17640 : sPrefix == rInfo.sPrefix &&
85 11788 : sSuffix == rInfo.sSuffix;
86 : }
87 :
88 6008 : SwEndNoteInfo::SwEndNoteInfo(const SwEndNoteInfo& rInfo) :
89 6008 : SwClient( rInfo.GetFtnTxtColl() ),
90 : aPageDescDep( this, 0 ),
91 : aCharFmtDep( this, 0 ),
92 : aAnchorCharFmtDep( this, 0 ),
93 : sPrefix( rInfo.sPrefix ),
94 : sSuffix( rInfo.sSuffix ),
95 : m_bEndNote( true ),
96 : aFmt( rInfo.aFmt ),
97 6008 : nFtnOffset( rInfo.nFtnOffset )
98 : {
99 6008 : if( rInfo.aPageDescDep.GetRegisteredIn() )
100 198 : ((SwModify*)rInfo.aPageDescDep.GetRegisteredIn())->Add( &aPageDescDep );
101 :
102 6008 : if( rInfo.aCharFmtDep.GetRegisteredIn() )
103 412 : ((SwModify*)rInfo.aCharFmtDep.GetRegisteredIn())->Add( &aCharFmtDep );
104 :
105 6008 : if( rInfo.aAnchorCharFmtDep.GetRegisteredIn() )
106 166 : ((SwModify*)rInfo.aAnchorCharFmtDep.GetRegisteredIn())->Add(
107 332 : &aAnchorCharFmtDep );
108 6008 : }
109 :
110 10106 : SwEndNoteInfo::SwEndNoteInfo(SwTxtFmtColl *pFmt) :
111 : SwClient(pFmt),
112 : aPageDescDep( this, 0 ),
113 : aCharFmtDep( this, 0 ),
114 : aAnchorCharFmtDep( this, 0 ),
115 : m_bEndNote( true ),
116 10106 : nFtnOffset( 0 )
117 : {
118 10106 : aFmt.SetNumberingType(SVX_NUM_ROMAN_LOWER);
119 10106 : }
120 :
121 142 : SwPageDesc *SwEndNoteInfo::GetPageDesc( SwDoc &rDoc ) const
122 : {
123 142 : if ( !aPageDescDep.GetRegisteredIn() )
124 : {
125 82 : SwPageDesc *pDesc = rDoc.getIDocumentStylePoolAccess().GetPageDescFromPool( static_cast<sal_uInt16>(
126 82 : m_bEndNote ? RES_POOLPAGE_ENDNOTE : RES_POOLPAGE_FOOTNOTE ) );
127 82 : pDesc->Add( &((SwClient&)aPageDescDep) );
128 : }
129 :
130 142 : return (SwPageDesc*)( aPageDescDep.GetRegisteredIn() );
131 : }
132 :
133 124 : bool SwEndNoteInfo::KnowsPageDesc() const
134 : {
135 124 : return (aPageDescDep.GetRegisteredIn() != 0);
136 : }
137 :
138 21112 : bool SwEndNoteInfo::DependsOn( const SwPageDesc* pDesc ) const
139 : {
140 21112 : return ( aPageDescDep.GetRegisteredIn() == pDesc );
141 : }
142 :
143 18 : void SwEndNoteInfo::ChgPageDesc( SwPageDesc *pDesc )
144 : {
145 18 : pDesc->Add( &((SwClient&)aPageDescDep) );
146 18 : }
147 :
148 6 : void SwEndNoteInfo::SetFtnTxtColl(SwTxtFmtColl& rFmt)
149 : {
150 6 : rFmt.Add(this);
151 6 : }
152 :
153 600 : SwCharFmt* SwEndNoteInfo::GetCharFmt(SwDoc &rDoc) const
154 : {
155 600 : if ( !aCharFmtDep.GetRegisteredIn() )
156 : {
157 258 : SwCharFmt* pFmt = rDoc.getIDocumentStylePoolAccess().GetCharFmtFromPool( static_cast<sal_uInt16>(
158 258 : m_bEndNote ? RES_POOLCHR_ENDNOTE : RES_POOLCHR_FOOTNOTE ) );
159 258 : pFmt->Add( &((SwClient&)aCharFmtDep) );
160 : }
161 600 : return (SwCharFmt*)aCharFmtDep.GetRegisteredIn();
162 : }
163 :
164 36 : void SwEndNoteInfo::SetCharFmt( SwCharFmt* pChFmt )
165 : {
166 : OSL_ENSURE(pChFmt, "no CharFmt?");
167 36 : pChFmt->Add( &((SwClient&)aCharFmtDep) );
168 36 : }
169 :
170 870 : SwCharFmt* SwEndNoteInfo::GetAnchorCharFmt(SwDoc &rDoc) const
171 : {
172 870 : if( !aAnchorCharFmtDep.GetRegisteredIn() )
173 : {
174 120 : SwCharFmt* pFmt = rDoc.getIDocumentStylePoolAccess().GetCharFmtFromPool( static_cast<sal_uInt16>(
175 120 : m_bEndNote ? RES_POOLCHR_ENDNOTE_ANCHOR : RES_POOLCHR_FOOTNOTE_ANCHOR ) );
176 120 : pFmt->Add( &((SwClient&)aAnchorCharFmtDep) );
177 : }
178 870 : return (SwCharFmt*)aAnchorCharFmtDep.GetRegisteredIn();
179 : }
180 :
181 12 : void SwEndNoteInfo::SetAnchorCharFmt( SwCharFmt* pChFmt )
182 : {
183 : OSL_ENSURE(pChFmt, "no CharFmt?");
184 12 : pChFmt->Add( &((SwClient&)aAnchorCharFmtDep) );
185 12 : }
186 :
187 834 : void SwEndNoteInfo::Modify( const SfxPoolItem* pOld, const SfxPoolItem* pNew )
188 : {
189 834 : const sal_uInt16 nWhich = pOld ? pOld->Which() : pNew ? pNew->Which() : 0 ;
190 :
191 834 : if( RES_ATTRSET_CHG == nWhich ||
192 : RES_FMT_CHG == nWhich )
193 : {
194 : SwDoc* pDoc;
195 834 : if( aCharFmtDep.GetRegisteredIn() )
196 834 : pDoc = ((SwCharFmt*)aCharFmtDep.GetRegisteredIn())->GetDoc();
197 : else
198 0 : pDoc = ((SwCharFmt*)aAnchorCharFmtDep.GetRegisteredIn())->GetDoc();
199 834 : SwFtnIdxs& rFtnIdxs = pDoc->GetFtnIdxs();
200 1364 : for( size_t nPos = 0; nPos < rFtnIdxs.size(); ++nPos )
201 : {
202 530 : SwTxtFtn *pTxtFtn = rFtnIdxs[ nPos ];
203 530 : const SwFmtFtn &rFtn = pTxtFtn->GetFtn();
204 530 : if ( rFtn.IsEndNote() == m_bEndNote )
205 : {
206 424 : pTxtFtn->SetNumber(rFtn.GetNumber(), rFtn.GetNumStr());
207 : }
208 834 : }
209 : }
210 : else
211 0 : CheckRegistration( pOld, pNew );
212 834 : }
213 :
214 86 : SwFtnInfo& SwFtnInfo::operator=(const SwFtnInfo& rInfo)
215 : {
216 86 : SwEndNoteInfo::operator=(rInfo);
217 86 : aQuoVadis = rInfo.aQuoVadis;
218 86 : aErgoSum = rInfo.aErgoSum;
219 86 : ePos = rInfo.ePos;
220 86 : eNum = rInfo.eNum;
221 86 : return *this;
222 : }
223 :
224 3806 : bool SwFtnInfo::operator==( const SwFtnInfo& rInfo ) const
225 : {
226 7610 : return ePos == rInfo.ePos &&
227 7584 : eNum == rInfo.eNum &&
228 7506 : SwEndNoteInfo::operator==(rInfo) &&
229 11256 : aQuoVadis == rInfo.aQuoVadis &&
230 7530 : aErgoSum == rInfo.aErgoSum;
231 : }
232 :
233 3830 : SwFtnInfo::SwFtnInfo(const SwFtnInfo& rInfo) :
234 : SwEndNoteInfo( rInfo ),
235 : aQuoVadis( rInfo.aQuoVadis ),
236 : aErgoSum( rInfo.aErgoSum ),
237 : ePos( rInfo.ePos ),
238 3830 : eNum( rInfo.eNum )
239 : {
240 3830 : m_bEndNote = false;
241 3830 : }
242 :
243 5054 : SwFtnInfo::SwFtnInfo(SwTxtFmtColl *pFmt) :
244 : SwEndNoteInfo( pFmt ),
245 : ePos( FTNPOS_PAGE ),
246 5054 : eNum( FTNNUM_DOC )
247 : {
248 5054 : aFmt.SetNumberingType(SVX_NUM_ARABIC);
249 5054 : m_bEndNote = false;
250 5054 : }
251 :
252 3806 : void SwDoc::SetFtnInfo(const SwFtnInfo& rInfo)
253 : {
254 3806 : SwRootFrm* pTmpRoot = getIDocumentLayoutAccess().GetCurrentLayout();
255 3806 : if( !(GetFtnInfo() == rInfo) )
256 : {
257 84 : const SwFtnInfo &rOld = GetFtnInfo();
258 :
259 84 : if (GetIDocumentUndoRedo().DoesUndo())
260 : {
261 26 : GetIDocumentUndoRedo().AppendUndo( new SwUndoFootNoteInfo(rOld) );
262 : }
263 :
264 84 : bool bFtnPos = rInfo.ePos != rOld.ePos;
265 84 : bool bFtnDesc = rOld.ePos == FTNPOS_CHAPTER &&
266 84 : rInfo.GetPageDesc( *this ) != rOld.GetPageDesc( *this );
267 166 : bool bExtra = rInfo.aQuoVadis != rOld.aQuoVadis ||
268 162 : rInfo.aErgoSum != rOld.aErgoSum ||
269 158 : rInfo.aFmt.GetNumberingType() != rOld.aFmt.GetNumberingType() ||
270 234 : rInfo.GetPrefix() != rOld.GetPrefix() ||
271 156 : rInfo.GetSuffix() != rOld.GetSuffix();
272 84 : SwCharFmt *pOldChrFmt = rOld.GetCharFmt( *this ),
273 84 : *pNewChrFmt = rInfo.GetCharFmt( *this );
274 84 : bool bFtnChrFmts = pOldChrFmt != pNewChrFmt;
275 :
276 84 : *mpFtnInfo = rInfo;
277 :
278 84 : if (pTmpRoot)
279 : {
280 26 : std::set<SwRootFrm*> aAllLayouts = GetAllLayouts();
281 26 : if ( bFtnPos )
282 2 : std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::mem_fun(&SwRootFrm::AllRemoveFtns));
283 : else
284 : {
285 24 : std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::mem_fun(&SwRootFrm::UpdateFtnNums));
286 24 : if ( bFtnDesc )
287 0 : std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::bind2nd(std::mem_fun(&SwRootFrm::CheckFtnPageDescs), sal_False));
288 24 : if ( bExtra )
289 : {
290 : // For messages regarding ErgoSum etc. we save the extra code and use the
291 : // available methods.
292 14 : SwFtnIdxs& rFtnIdxs = GetFtnIdxs();
293 24 : for( size_t nPos = 0; nPos < rFtnIdxs.size(); ++nPos )
294 : {
295 10 : SwTxtFtn *pTxtFtn = rFtnIdxs[ nPos ];
296 10 : const SwFmtFtn &rFtn = pTxtFtn->GetFtn();
297 10 : if ( !rFtn.IsEndNote() )
298 10 : pTxtFtn->SetNumber(rFtn.GetNumber(), rFtn.GetNumStr());
299 : }
300 : }
301 26 : }
302 : }
303 84 : if( FTNNUM_PAGE != rInfo.eNum )
304 70 : GetFtnIdxs().UpdateAllFtn();
305 14 : else if( bFtnChrFmts )
306 : {
307 0 : SwFmtChg aOld( pOldChrFmt );
308 0 : SwFmtChg aNew( pNewChrFmt );
309 0 : mpFtnInfo->ModifyNotification( &aOld, &aNew );
310 : }
311 :
312 : // #i81002# no update during loading
313 84 : if ( !IsInReading() )
314 : {
315 26 : getIDocumentFieldsAccess().UpdateRefFlds(NULL);
316 : }
317 84 : getIDocumentState().SetModified();
318 : }
319 3806 : }
320 :
321 2164 : void SwDoc::SetEndNoteInfo(const SwEndNoteInfo& rInfo)
322 : {
323 2164 : SwRootFrm* pTmpRoot = getIDocumentLayoutAccess().GetCurrentLayout();
324 2164 : if( !(GetEndNoteInfo() == rInfo) )
325 : {
326 52 : if(GetIDocumentUndoRedo().DoesUndo())
327 : {
328 14 : SwUndo *const pUndo( new SwUndoEndNoteInfo( GetEndNoteInfo() ) );
329 14 : GetIDocumentUndoRedo().AppendUndo(pUndo);
330 : }
331 :
332 52 : bool bNumChg = rInfo.nFtnOffset != GetEndNoteInfo().nFtnOffset;
333 : // this seems to be an optimization: UpdateAllFtn() is only called
334 : // if the offset changes; if the offset is the same,
335 : // but type/prefix/suffix changes, just set new numbers.
336 132 : bool const bExtra = !bNumChg &&
337 50 : ( (rInfo.aFmt.GetNumberingType() !=
338 50 : GetEndNoteInfo().aFmt.GetNumberingType())
339 24 : || (rInfo.GetPrefix() != GetEndNoteInfo().GetPrefix())
340 22 : || (rInfo.GetSuffix() != GetEndNoteInfo().GetSuffix())
341 52 : );
342 52 : bool bFtnDesc = rInfo.GetPageDesc( *this ) !=
343 52 : GetEndNoteInfo().GetPageDesc( *this );
344 52 : SwCharFmt *pOldChrFmt = GetEndNoteInfo().GetCharFmt( *this ),
345 52 : *pNewChrFmt = rInfo.GetCharFmt( *this );
346 52 : bool bFtnChrFmts = pOldChrFmt != pNewChrFmt;
347 :
348 52 : *mpEndNoteInfo = rInfo;
349 :
350 52 : if ( pTmpRoot )
351 : {
352 14 : if ( bFtnDesc )
353 : {
354 2 : std::set<SwRootFrm*> aAllLayouts = GetAllLayouts();
355 2 : std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::bind2nd(std::mem_fun(&SwRootFrm::CheckFtnPageDescs), sal_True));
356 : }
357 14 : if ( bExtra )
358 : {
359 : // For messages regarding ErgoSum etc. we save the extra code and use the
360 : // available methods.
361 6 : SwFtnIdxs& rFtnIdxs = GetFtnIdxs();
362 12 : for( size_t nPos = 0; nPos < rFtnIdxs.size(); ++nPos )
363 : {
364 6 : SwTxtFtn *pTxtFtn = rFtnIdxs[ nPos ];
365 6 : const SwFmtFtn &rFtn = pTxtFtn->GetFtn();
366 6 : if ( rFtn.IsEndNote() )
367 6 : pTxtFtn->SetNumber(rFtn.GetNumber(), rFtn.GetNumStr());
368 : }
369 : }
370 : }
371 52 : if( bNumChg )
372 2 : GetFtnIdxs().UpdateAllFtn();
373 50 : else if( bFtnChrFmts )
374 : {
375 2 : SwFmtChg aOld( pOldChrFmt );
376 4 : SwFmtChg aNew( pNewChrFmt );
377 4 : mpEndNoteInfo->ModifyNotification( &aOld, &aNew );
378 : }
379 :
380 : // #i81002# no update during loading
381 52 : if ( !IsInReading() )
382 : {
383 14 : getIDocumentFieldsAccess().UpdateRefFlds(NULL);
384 : }
385 52 : getIDocumentState().SetModified();
386 : }
387 2164 : }
388 :
389 4 : bool SwDoc::SetCurFtn( const SwPaM& rPam, const OUString& rNumStr,
390 : sal_uInt16 nNumber, bool bIsEndNote )
391 : {
392 4 : SwFtnIdxs& rFtnArr = GetFtnIdxs();
393 4 : SwRootFrm* pTmpRoot = getIDocumentLayoutAccess().GetCurrentLayout();
394 :
395 4 : const SwPosition* pStt = rPam.Start(), *pEnd = rPam.End();
396 4 : const sal_uLong nSttNd = pStt->nNode.GetIndex();
397 4 : const sal_Int32 nSttCnt = pStt->nContent.GetIndex();
398 4 : const sal_uLong nEndNd = pEnd->nNode.GetIndex();
399 4 : const sal_Int32 nEndCnt = pEnd->nContent.GetIndex();
400 :
401 4 : size_t nPos = 0;
402 4 : rFtnArr.SeekEntry( pStt->nNode, &nPos );
403 :
404 4 : SwUndoChangeFootNote* pUndo = 0;
405 4 : if (GetIDocumentUndoRedo().DoesUndo())
406 : {
407 4 : GetIDocumentUndoRedo().ClearRedo(); // AppendUndo far below, so leave it
408 4 : pUndo = new SwUndoChangeFootNote( rPam, rNumStr, nNumber, bIsEndNote );
409 : }
410 :
411 : SwTxtFtn* pTxtFtn;
412 : sal_uLong nIdx;
413 4 : bool bChg = false;
414 4 : bool bTypeChgd = false;
415 4 : const size_t nPosSave = nPos;
416 24 : while( nPos < rFtnArr.size() &&
417 8 : (( nIdx = _SwTxtFtn_GetIndex((pTxtFtn = rFtnArr[ nPos++ ] )))
418 8 : < nEndNd || ( nIdx == nEndNd &&
419 4 : nEndCnt >= pTxtFtn->GetStart() )) )
420 8 : if( nIdx > nSttNd || ( nIdx == nSttNd &&
421 4 : nSttCnt <= pTxtFtn->GetStart() ) )
422 : {
423 4 : const SwFmtFtn& rFtn = pTxtFtn->GetFtn();
424 4 : if( rFtn.GetNumStr() != rNumStr ||
425 0 : rFtn.IsEndNote() != bIsEndNote )
426 : {
427 4 : bChg = true;
428 4 : if ( pUndo )
429 : {
430 4 : pUndo->GetHistory().Add( *pTxtFtn );
431 : }
432 :
433 4 : pTxtFtn->SetNumber( nNumber, rNumStr );
434 4 : if( rFtn.IsEndNote() != bIsEndNote )
435 : {
436 0 : ((SwFmtFtn&)rFtn).SetEndNote( bIsEndNote );
437 0 : bTypeChgd = true;
438 0 : pTxtFtn->CheckCondColl();
439 : //#i11339# dispose UNO wrapper when a footnote is changed to an endnote or vice versa
440 0 : const_cast<SwFmtFtn&>(rFtn).InvalidateFootnote();
441 : }
442 : }
443 : }
444 :
445 4 : nPos = nPosSave; // There are more in the front!
446 8 : while( nPos &&
447 0 : (( nIdx = _SwTxtFtn_GetIndex((pTxtFtn = rFtnArr[ --nPos ] )))
448 0 : > nSttNd || ( nIdx == nSttNd &&
449 0 : nSttCnt <= pTxtFtn->GetStart() )) )
450 0 : if( nIdx < nEndNd || ( nIdx == nEndNd &&
451 0 : nEndCnt >= pTxtFtn->GetStart() ) )
452 : {
453 0 : const SwFmtFtn& rFtn = pTxtFtn->GetFtn();
454 0 : if( rFtn.GetNumStr() != rNumStr ||
455 0 : rFtn.IsEndNote() != bIsEndNote )
456 : {
457 0 : bChg = true;
458 0 : if ( pUndo )
459 : {
460 0 : pUndo->GetHistory().Add( *pTxtFtn );
461 : }
462 :
463 0 : pTxtFtn->SetNumber( nNumber, rNumStr );
464 0 : if( rFtn.IsEndNote() != bIsEndNote )
465 : {
466 0 : ((SwFmtFtn&)rFtn).SetEndNote( bIsEndNote );
467 0 : bTypeChgd = true;
468 0 : pTxtFtn->CheckCondColl();
469 : }
470 : }
471 : }
472 :
473 : // Who needs to be triggered?
474 4 : if( bChg )
475 : {
476 4 : if( pUndo )
477 : {
478 4 : GetIDocumentUndoRedo().AppendUndo(pUndo);
479 : }
480 :
481 4 : if ( bTypeChgd )
482 0 : rFtnArr.UpdateAllFtn();
483 4 : if( FTNNUM_PAGE != GetFtnInfo().eNum )
484 : {
485 4 : if ( !bTypeChgd )
486 4 : rFtnArr.UpdateAllFtn();
487 : }
488 0 : else if( pTmpRoot )
489 : {
490 0 : std::set<SwRootFrm*> aAllLayouts = GetAllLayouts();
491 0 : std::for_each( aAllLayouts.begin(), aAllLayouts.end(),std::mem_fun(&SwRootFrm::UpdateFtnNums));
492 : }
493 4 : getIDocumentState().SetModified();
494 : }
495 : else
496 0 : delete pUndo;
497 4 : return bChg;
498 270 : }
499 :
500 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|