LibreOffice Module sw (master)  1
section.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 <libxml/xmlstring.h>
21 #include <libxml/xmlwriter.h>
22 #include <stdlib.h>
23 #include <hintids.hxx>
24 #include <osl/diagnose.h>
25 #include <sot/exchange.hxx>
26 #include <svl/stritem.hxx>
27 #include <sfx2/docfile.hxx>
28 #include <editeng/protitem.hxx>
29 #include <sfx2/linkmgr.hxx>
30 #include <sfx2/sfxsids.hrc>
31 #include <docary.hxx>
32 #include <fmtcntnt.hxx>
33 #include <fmtpdsc.hxx>
34 #include <doc.hxx>
35 #include <IDocumentUndoRedo.hxx>
41 #include <IDocumentState.hxx>
43 #include <node.hxx>
44 #include <pam.hxx>
45 #include <frmatr.hxx>
46 #include <frmtool.hxx>
47 #include <editsh.hxx>
48 #include <hints.hxx>
49 #include <docsh.hxx>
50 #include <ndtxt.hxx>
51 #include <section.hxx>
52 #include <swserv.hxx>
53 #include <shellio.hxx>
54 #include <poolfmt.hxx>
55 #include <swbaslnk.hxx>
56 #include <mvsave.hxx>
57 #include <ftnidx.hxx>
58 #include <doctxm.hxx>
59 #include <fmteiro.hxx>
60 #include <unosection.hxx>
61 #include <calbck.hxx>
62 #include <fmtclds.hxx>
63 #include <algorithm>
64 #include "ndsect.hxx"
65 
66 using namespace ::com::sun::star;
67 
68 namespace {
69  class SwIntrnlSectRefLink : public SwBaseLink
70  {
71  SwSectionFormat& m_rSectFormat;
72 
73  public:
74  SwIntrnlSectRefLink(SwSectionFormat& rFormat, SfxLinkUpdateMode nUpdateType)
75  : SwBaseLink(nUpdateType, SotClipboardFormatId::RTF)
76  , m_rSectFormat(rFormat)
77  {}
78 
79  virtual void Closed() override;
80  virtual ::sfx2::SvBaseLink::UpdateResult DataChanged(
81  const OUString& rMimeType, const css::uno::Any & rValue ) override;
82 
83  virtual const SwNode* GetAnchor() const override;
84  virtual bool IsInRange( SwNodeOffset nSttNd, SwNodeOffset nEndNd ) const override;
85 
86  SwSectionNode* GetSectNode()
87  {
88  const SwNode* pSectNd( GetAnchor() );
89  return const_cast<SwSectionNode*>( dynamic_cast<const SwSectionNode*>( pSectNd ) );
90  }
91  };
92 }
93 
94 SwSectionData::SwSectionData(SectionType const eType, OUString const& rName)
95  : m_eType(eType)
96  , m_sSectionName(rName)
97  , m_bHiddenFlag(false)
98  , m_bProtectFlag(false)
99  , m_bEditInReadonlyFlag(false) // edit in readonly sections
100  , m_bHidden(false)
101  , m_bCondHiddenFlag(true)
102  , m_bConnectFlag(true)
103 {
104 }
105 
106 // this must have the same semantics as operator=()
108  : m_eType(rSection.GetType())
109  , m_sSectionName(rSection.GetSectionName())
110  , m_sCondition(rSection.GetCondition())
111  , m_sLinkFileName(rSection.GetLinkFileName())
112  , m_sLinkFilePassword(rSection.GetLinkFilePassword())
113  , m_Password(rSection.GetPassword())
114  , m_bHiddenFlag(rSection.IsHiddenFlag())
115  , m_bProtectFlag(rSection.IsProtect())
116  // edit in readonly sections
117  , m_bEditInReadonlyFlag(rSection.IsEditInReadonly())
118  , m_bHidden(rSection.IsHidden())
119  , m_bCondHiddenFlag(true)
120  , m_bConnectFlag(rSection.IsConnectFlag())
121 {
122 }
123 
124 // this must have the same semantics as operator=()
126  : m_eType(rOther.m_eType)
127  , m_sSectionName(rOther.m_sSectionName)
128  , m_sCondition(rOther.m_sCondition)
129  , m_sLinkFileName(rOther.m_sLinkFileName)
130  , m_sLinkFilePassword(rOther.m_sLinkFilePassword)
131  , m_Password(rOther.m_Password)
132  , m_bHiddenFlag(rOther.m_bHiddenFlag)
133  , m_bProtectFlag(rOther.m_bProtectFlag)
134  // edit in readonly sections
135  , m_bEditInReadonlyFlag(rOther.m_bEditInReadonlyFlag)
136  , m_bHidden(rOther.m_bHidden)
137  , m_bCondHiddenFlag(true)
138  , m_bConnectFlag(rOther.m_bConnectFlag)
139 {
140 }
141 
142 // the semantics here are weird for reasons of backward compatibility
144 {
145  m_eType = rOther.m_eType;
147  m_sCondition = rOther.m_sCondition;
151  m_Password = rOther.m_Password;
152 
155 
156  m_bHidden = rOther.m_bHidden;
157  // FIXME: old code did not assign m_bHiddenFlag ?
158  // FIXME: why should m_bCondHiddenFlag always default to true?
159  m_bCondHiddenFlag = true;
160 
161  return *this;
162 }
163 
164 // the semantics here are weird for reasons of backward compatibility
165 bool SwSectionData::operator==(SwSectionData const& rOther) const
166 {
167  return (m_eType == rOther.m_eType)
168  && (m_sSectionName == rOther.m_sSectionName)
169  && (m_sCondition == rOther.m_sCondition)
170  && (m_bHidden == rOther.m_bHidden)
171  && (m_bProtectFlag == rOther.m_bProtectFlag)
173  && (m_sLinkFileName == rOther.m_sLinkFileName)
175  && (m_Password == rOther.m_Password);
176  // FIXME: old code ignored m_bCondHiddenFlag m_bHiddenFlag m_bConnectFlag
177 }
178 
180  SectionType const eType, OUString const& rName, SwSectionFormat & rFormat)
181  : SwClient(& rFormat)
182  , m_Data(eType, rName)
183 {
184  StartListening(rFormat.GetNotifier());
185 
186  SwSection *const pParentSect = GetParent();
187  if( pParentSect )
188  {
189  // edit in readonly sections
190  m_Data.SetEditInReadonlyFlag( pParentSect->IsEditInReadonlyFlag() );
191  }
192 
194 
195  if (!m_Data.IsEditInReadonlyFlag()) // edit in readonly sections
196  {
198  }
199 }
200 
202 {
203  SwSectionFormat* pFormat = GetFormat();
204  if( !pFormat )
205  return;
206 
207  SwDoc* pDoc = pFormat->GetDoc();
208  if( pDoc->IsInDtor() )
209  {
210  // We reattach our Format to the default FrameFormat
211  // to not get any dependencies
212  if( pFormat->DerivedFrom() != pDoc->GetDfltFrameFormat() )
213  pFormat->RegisterToFormat( *pDoc->GetDfltFrameFormat() );
214  }
215  else
216  {
217  pFormat->Remove( this ); // remove
219 
221  {
223  }
224 
225  if (m_RefObj.is())
226  {
228  }
229 
230  // If the Section is the last Client in the Format we can delete it
231  pFormat->RemoveAllUnos();
232  if( !pFormat->HasWriterListeners() )
233  {
234  // Do not add to the Undo. This should've happened earlier.
235  ::sw::UndoGuard const undoGuard(pDoc->GetIDocumentUndoRedo());
236  pDoc->DelSectionFormat( pFormat );
237  }
238  }
239  if (m_RefObj.is())
240  {
241  m_RefObj->Closed();
242  }
243 }
244 
246 {
247  bool const bOldHidden( m_Data.IsHidden() );
248  m_Data = rData;
249  // The next two may actually overwrite the m_Data.m_bProtect or EditInReadonly Flag
250  // in Modify, which should result in same flag value as the old code!
251  SetProtect(m_Data.IsProtectFlag());
252  SetEditInReadonly(m_Data.IsEditInReadonlyFlag());
253  if (bOldHidden != m_Data.IsHidden()) // check if changed...
254  {
255  ImplSetHiddenFlag(m_Data.IsHidden(), m_Data.IsCondHidden());
256  }
257 }
258 
259 bool SwSection::DataEquals(SwSectionData const& rCmp) const
260 {
261  // note that the old code compared the flags of the parameter with the
262  // format attributes of this; the following mess should do the same...
263  (void) GetLinkFileName(); // updates m_sLinkFileName
264  bool const bProtect(m_Data.IsProtectFlag());
265  bool const bEditInReadonly(m_Data.IsEditInReadonlyFlag());
268  bool const bResult( m_Data == rCmp );
269  m_Data.SetProtectFlag(bProtect);
270  m_Data.SetEditInReadonlyFlag(bEditInReadonly);
271  return bResult;
272 }
273 
274 void SwSection::ImplSetHiddenFlag(bool const bTmpHidden, bool const bCondition)
275 {
276  SwSectionFormat* pFormat = GetFormat();
277  OSL_ENSURE(pFormat, "ImplSetHiddenFlag: no format?");
278  if( !pFormat )
279  return;
280 
281  const bool bHide = bTmpHidden && bCondition;
282 
283  if (bHide) // should be hidden
284  {
285  if (!m_Data.IsHiddenFlag()) // is not hidden
286  {
287  // Is the Parent hidden?
288  // This should be shown by the bHiddenFlag.
289 
290  // Tell all Children that they are hidden
291  const SwMsgPoolItem aMsgItem( RES_SECTION_HIDDEN );
292  pFormat->CallSwClientNotify(sw::LegacyModifyHint(&aMsgItem, &aMsgItem));
293 
294  // Delete all Frames
295  pFormat->DelFrames();
296  }
297  }
298  else if (m_Data.IsHiddenFlag()) // show Nodes again
299  {
300  // Show all Frames (Child Sections are accounted for by MakeFrames)
301  // Only if the Parent Section is not restricting us!
302  SwSection* pParentSect = pFormat->GetParentSection();
303  if( !pParentSect || !pParentSect->IsHiddenFlag() )
304  {
305  // Tell all Children that the Parent is not hidden anymore
306  const SwMsgPoolItem aMsgItem( RES_SECTION_NOT_HIDDEN );
307  pFormat->CallSwClientNotify(sw::LegacyModifyHint(&aMsgItem, &aMsgItem));
308 
309  pFormat->MakeFrames();
310  }
311  }
312 }
313 
315 {
316  const SwSection* pSect = this;
317  do {
318  if( pSect->IsHidden() && pSect->IsCondHidden() )
319  return true;
320  } while( nullptr != ( pSect = pSect->GetParent()) );
321 
322  return false;
323 }
324 
326 {
327  SwSectionFormat const *const pFormat( GetFormat() );
328  OSL_ENSURE(pFormat, "SwSection::IsProtect: no format?");
329  return pFormat
330  ? pFormat->GetProtect().IsContentProtected()
331  : IsProtectFlag();
332 }
333 
334 // edit in readonly sections
336 {
337  SwSectionFormat const *const pFormat( GetFormat() );
338  OSL_ENSURE(pFormat, "SwSection::IsEditInReadonly: no format?");
339  return pFormat
340  ? pFormat->GetEditInReadonly().GetValue()
342 }
343 
344 void SwSection::SetHidden(bool const bFlag)
345 {
346  if (!m_Data.IsHidden() == !bFlag)
347  return;
348 
349  m_Data.SetHidden(bFlag);
351 }
352 
353 void SwSection::SetProtect(bool const bFlag)
354 {
355  SwSectionFormat *const pFormat( GetFormat() );
356  OSL_ENSURE(pFormat, "SwSection::SetProtect: no format?");
357  if (pFormat)
358  {
359  SvxProtectItem aItem( RES_PROTECT );
360  aItem.SetContentProtect( bFlag );
361  pFormat->SetFormatAttr( aItem );
362  // note: this will call m_Data.SetProtectFlag via Modify!
363  }
364  else
365  {
366  m_Data.SetProtectFlag(bFlag);
367  }
368 }
369 
370 // edit in readonly sections
371 void SwSection::SetEditInReadonly(bool const bFlag)
372 {
373  SwSectionFormat *const pFormat( GetFormat() );
374  OSL_ENSURE(pFormat, "SwSection::SetEditInReadonly: no format?");
375  if (pFormat)
376  {
378  aItem.SetValue( bFlag );
379  pFormat->SetFormatAttr( aItem );
380  // note: this will call m_Data.SetEditInReadonlyFlag via Modify!
381  }
382  else
383  {
385  }
386 }
387 
388 void SwSection::SwClientNotify(const SwModify&, const SfxHint& rHint)
389 {
390  Notify(rHint);
391 }
392 
393 void SwSection::Notify(SfxHint const& rHint)
394 {
395  if (rHint.GetId() != SfxHintId::SwLegacyModify)
396  return;
397  auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
398  auto pOld = pLegacy->m_pOld;
399  auto pNew = pLegacy->m_pNew;
400  bool bUpdateFootnote = false;
401  switch(pLegacy->GetWhich())
402  {
403  case RES_ATTRSET_CHG:
404  if (pNew && pOld)
405  {
406  SfxItemSet* pNewSet = const_cast<SwAttrSetChg*>(static_cast<const SwAttrSetChg*>(pNew))->GetChgSet();
407  SfxItemSet* pOldSet = const_cast<SwAttrSetChg*>(static_cast<const SwAttrSetChg*>(pOld))->GetChgSet();
408 
409  if( const SvxProtectItem* pItem = pNewSet->GetItemIfSet(
410  RES_PROTECT, false ) )
411  {
412  m_Data.SetProtectFlag( pItem->IsContentProtected() );
413  pNewSet->ClearItem( RES_PROTECT );
414  pOldSet->ClearItem( RES_PROTECT );
415  }
416 
417  // --> edit in readonly sections
418  if( const SwFormatEditInReadonly* pItem = pNewSet->GetItemIfSet(
419  RES_EDIT_IN_READONLY, false ) )
420  {
421  m_Data.SetEditInReadonlyFlag(pItem->GetValue());
422  pNewSet->ClearItem( RES_EDIT_IN_READONLY );
423  pOldSet->ClearItem( RES_EDIT_IN_READONLY );
424  }
425 
426  if( SfxItemState::SET == pNewSet->GetItemState(
427  RES_FTN_AT_TXTEND, false ) ||
428  SfxItemState::SET == pNewSet->GetItemState(
429  RES_END_AT_TXTEND, false ))
430  {
431  bUpdateFootnote = true;
432  }
433 
434  if( !pNewSet->Count() )
435  return;
436  }
437  break;
438 
439  case RES_PROTECT:
440  if( pNew )
441  {
442  bool bNewFlag =
443  static_cast<const SvxProtectItem*>(pNew)->IsContentProtected();
444  // this used to inherit the flag from the parent, but then there is
445  // no way to turn it off in an inner section
446  m_Data.SetProtectFlag( bNewFlag );
447  }
448  return;
449  // edit in readonly sections
451  if( pNew )
452  {
453  const bool bNewFlag =
454  static_cast<const SwFormatEditInReadonly*>(pNew)->GetValue();
455  m_Data.SetEditInReadonlyFlag( bNewFlag );
456  }
457  return;
458 
459  case RES_SECTION_HIDDEN:
460  m_Data.SetHiddenFlag(true);
461  return;
462 
465  return;
466 
467  case RES_COL:
468  // Is handled by the Layout, if appropriate
469  break;
470 
471  case RES_FTN_AT_TXTEND:
472  if( pNew && pOld )
473  {
474  bUpdateFootnote = true;
475  }
476  break;
477 
478  case RES_END_AT_TXTEND:
479  if( pNew && pOld )
480  {
481  bUpdateFootnote = true;
482  }
483  break;
484 
485  default:
486  CheckRegistration( pOld );
487  break;
488  }
489 
490  if( bUpdateFootnote )
491  {
492  SwSectionNode* pSectNd = GetFormat()->GetSectionNode();
493  if( pSectNd )
494  pSectNd->GetDoc().GetFootnoteIdxs().UpdateFootnote(SwNodeIndex( *pSectNd ));
495  }
496 }
497 
499 {
500  m_RefObj = pObj;
501 }
502 
503 void SwSection::SetCondHidden(bool const bFlag)
504 {
505  if (!m_Data.IsCondHidden() == !bFlag)
506  return;
507 
508  m_Data.SetCondHidden(bFlag);
510 }
511 
512 // Set/remove the linked FileName
513 OUString const & SwSection::GetLinkFileName() const
514 {
515  if (m_RefLink.is())
516  {
517  OUString sTmp;
518  switch (m_Data.GetType())
519  {
521  sTmp = m_RefLink->GetLinkSourceName();
522  break;
523 
525  {
526  OUString sRange;
527  OUString sFilter;
528  if (m_RefLink->GetLinkManager() &&
530  m_RefLink.get(), nullptr, &sTmp, &sRange, &sFilter ))
531  {
532  sTmp += OUStringChar(sfx2::cTokenSeparator) + sFilter
533  + OUStringChar(sfx2::cTokenSeparator) + sRange;
534  }
535  else if( GetFormat() && !GetFormat()->GetSectionNode() )
536  {
537  // If the Section is in the UndoNodesArray, the LinkManager
538  // does not contain the Link, thus it cannot be queried for it.
539  // Thus return the current Name.
540  return m_Data.GetLinkFileName();
541  }
542  }
543  break;
544  default: break;
545  }
546  m_Data.SetLinkFileName(sTmp);
547  }
548  return m_Data.GetLinkFileName();
549 }
550 
551 void SwSection::SetLinkFileName(const OUString& rNew)
552 {
553  if (m_RefLink.is())
554  {
555  m_RefLink->SetLinkSourceName( rNew );
556  }
557  m_Data.SetLinkFileName(rNew);
558 }
559 
560 // If it was a Linked Section, we need to make all Child Links visible
562 {
563  const SwNode* pNd;
564  const ::sfx2::SvBaseLinks& rLnks = rSectNd.GetDoc().getIDocumentLinksAdministration().GetLinkManager().GetLinks();
565  for( auto n = rLnks.size(); n; )
566  {
567  sfx2::SvBaseLink& rBLnk = *rLnks[--n];
568  if (!rBLnk.IsVisible() && dynamic_cast<const SwBaseLink*>(&rBLnk) != nullptr
569  && nullptr != (pNd = static_cast<SwBaseLink&>(rBLnk).GetAnchor()))
570  {
571  pNd = pNd->StartOfSectionNode(); // If it's a SectionNode
572  const SwSectionNode* pParent;
573  while( nullptr != ( pParent = pNd->FindSectionNode() ) &&
574  ( SectionType::Content == pParent->GetSection().GetType()
575  || pNd == &rSectNd ))
576  pNd = pParent->StartOfSectionNode();
577 
578  // It's within a normal Section, so show again
579  if( !pParent )
580  rBLnk.SetVisible(true);
581  }
582  }
583 }
584 
586 {
587  const SwTOXBase* pRet = nullptr;
589  pRet = dynamic_cast<const SwTOXBaseSection*>(this);
590  return pRet;
591 }
592 
594  : SwFrameFormat( pDoc->GetAttrPool(), OUString(), pDrvdFrame )
595 {
596  LockModify();
598  UnlockModify();
599 }
600 
602 {
603  if( GetDoc()->IsInDtor() )
604  return;
605 
606  SwSectionNode* pSectNd;
607  const SwNodeIndex* pIdx = GetContent( false ).GetContentIdx();
608  if( pIdx && &GetDoc()->GetNodes() == &pIdx->GetNodes() &&
609  nullptr != (pSectNd = pIdx->GetNode().GetSectionNode() ))
610  {
611  SwSection& rSect = pSectNd->GetSection();
612  // If it was a linked Section, we need to make all Child Links
613  // visible again
614  if( rSect.IsConnected() )
616 
617  // Check whether we need to be visible, before deleting the Nodes
618  if( rSect.IsHiddenFlag() )
619  {
620  SwSection* pParentSect = rSect.GetParent();
621  if( !pParentSect || !pParentSect->IsHiddenFlag() )
622  {
623  // Make Nodes visible again
624  rSect.SetHidden(false);
625  }
626  }
627  // mba: test iteration; objects are removed while iterating
628  // use hint which allows to specify, if the content shall be saved or not
630 
631  // Raise the Section up
632  SwNodeRange aRg( *pSectNd, SwNodeOffset(0), *pSectNd->EndOfSectionNode() );
633  GetDoc()->GetNodes().SectionUp( &aRg );
634  }
635  LockModify();
637  UnlockModify();
638 }
639 
641 {
643 }
644 
645 // Do not destroy all Frames in aDepend (Frames are recognized with a dynamic_cast).
647 {
648  SwSectionNode* pSectNd;
649  const SwNodeIndex* pIdx = GetContent(false).GetContentIdx();
650  if( pIdx && &GetDoc()->GetNodes() == &pIdx->GetNodes() &&
651  nullptr != (pSectNd = pIdx->GetNode().GetSectionNode() ))
652  {
653  // First delete the <SwSectionFrame> of the <SwSectionFormat> instance
654  // mba: test iteration as objects are removed in iteration
655  // use hint which allows to specify, if the content shall be saved or not
657 
658  // Then delete frames of the nested <SwSectionFormat> instances
660  SwSectionFormat *pLast = aIter.First();
661  while ( pLast )
662  {
663  pLast->DelFrames();
664  pLast = aIter.Next();
665  }
666 
667  SwNodeOffset nEnd = pSectNd->EndOfSectionIndex();
668  SwNodeOffset nStart = pSectNd->GetIndex()+1;
669  sw_DeleteFootnote( pSectNd, nStart, nEnd );
670  }
671  if( !pIdx )
672  return;
673 
674  // Send Hint for PageDesc. Actually the Layout contained in the
675  // Paste of the Frame itself would need to do this. But that leads
676  // to subsequent errors, which we'd need to solve at run-time.
677  SwNodeIndex aNextNd( *pIdx );
678  SwContentNode* pCNd = GetDoc()->GetNodes().GoNextSection( &aNextNd, true, false );
679  if( pCNd )
680  {
681  const SfxPoolItem& rItem = pCNd->GetSwAttrSet().Get(RES_PAGEDESC);
682  pCNd->CallSwClientNotify(sw::LegacyModifyHint(&rItem, &rItem));
683  }
684 }
685 
686 // Create the Views
688 {
689  SwSectionNode* pSectNd;
690  const SwNodeIndex* pIdx = GetContent(false).GetContentIdx();
691 
692  if( pIdx && &GetDoc()->GetNodes() == &pIdx->GetNodes() &&
693  nullptr != (pSectNd = pIdx->GetNode().GetSectionNode() ))
694  {
695  SwNodeIndex aIdx( *pIdx );
696  pSectNd->MakeOwnFrames( &aIdx );
697  }
698 }
699 
700 void SwSectionFormat::SwClientNotify(const SwModify& rMod, const SfxHint& rHint)
701 {
702  if (rHint.GetId() != SfxHintId::SwLegacyModify)
703  return;
704  auto pLegacy = static_cast<const sw::LegacyModifyHint*>(&rHint);
705  sal_uInt16 nWhich = pLegacy->GetWhich();
706  auto pOld = pLegacy->m_pOld;
707  auto pNew = pLegacy->m_pNew;
708  switch( nWhich )
709  {
710  case RES_ATTRSET_CHG:
711  if (HasWriterListeners() && pOld && pNew)
712  {
713  SfxItemSet* pNewSet = const_cast<SwAttrSetChg*>(static_cast<const SwAttrSetChg*>(pNew))->GetChgSet();
714  SfxItemSet* pOldSet = const_cast<SwAttrSetChg*>(static_cast<const SwAttrSetChg*>(pOld))->GetChgSet();
715  const SfxPoolItem *pItem;
716  if( SfxItemState::SET == pNewSet->GetItemState(
717  RES_PROTECT, false, &pItem ))
718  {
719  GetNotifier().Broadcast(sw::LegacyModifyHint(pItem, pItem));
720  pNewSet->ClearItem( RES_PROTECT );
721  pOldSet->ClearItem( RES_PROTECT );
722  }
723 
724  // --> edit in readonly sections
725  if( SfxItemState::SET == pNewSet->GetItemState(
726  RES_EDIT_IN_READONLY, false, &pItem ) )
727  {
728  GetNotifier().Broadcast(sw::LegacyModifyHint(pItem, pItem));
729  pNewSet->ClearItem( RES_EDIT_IN_READONLY );
730  pOldSet->ClearItem( RES_EDIT_IN_READONLY );
731  }
732 
733  if( SfxItemState::SET == pNewSet->GetItemState(
734  RES_FTN_AT_TXTEND, false, &pItem ))
735  {
736  GetNotifier().Broadcast(sw::LegacyModifyHint(pItem, pItem));
737  pNewSet->ClearItem( RES_FTN_AT_TXTEND );
738  pOldSet->ClearItem( RES_FTN_AT_TXTEND );
739  }
740  if( SfxItemState::SET == pNewSet->GetItemState(
741  RES_END_AT_TXTEND, false, &pItem ))
742  {
743  GetNotifier().Broadcast(sw::LegacyModifyHint(pItem, pItem));
744  pNewSet->ClearItem( RES_END_AT_TXTEND );
745  pOldSet->ClearItem( RES_END_AT_TXTEND );
746  }
747  if( !static_cast<const SwAttrSetChg*>(pOld)->GetChgSet()->Count() )
748  return;
749  }
750  break;
751 
752  case RES_SECTION_HIDDEN:
754  {
755  auto pSect = GetSection();
756  if(!pSect || (RES_SECTION_HIDDEN == nWhich) == pSect->IsHiddenFlag()) // already at target state, skipping.
757  return;
758  }
759  [[fallthrough]];
760  case RES_FTN_AT_TXTEND:
761  case RES_END_AT_TXTEND:
763  return;
764  case RES_PROTECT:
765  case RES_EDIT_IN_READONLY: // edit in readonly sections
766  // Pass through these Messages until the End of the tree!
768  return; // That's it!
769 
770  case RES_OBJECTDYING:
771  if( !GetDoc()->IsInDtor() && pOld &&
772  static_cast<const SwPtrMsgPoolItem *>(pOld)->pObject == static_cast<void*>(GetRegisteredIn()) )
773  {
774  // My Parents will be destroyed, so get the Parent's Parent
775  // and update
776  SwFrameFormat::SwClientNotify(rMod, rHint);
777  UpdateParent();
778  return;
779  }
780  break;
781 
782  case RES_FMT_CHG:
783  if( !GetDoc()->IsInDtor() &&
784  static_cast<const SwFormatChg*>(pNew)->pChangedFormat == static_cast<void*>(GetRegisteredIn()) &&
785  dynamic_cast<const SwSectionFormat*>(static_cast<const SwFormatChg*>(pNew)->pChangedFormat) != nullptr )
786  {
787  // My Parent will be changed, thus I need to update
788  SwFrameFormat::SwClientNotify(rMod, rHint);
789  UpdateParent();
790  return;
791  }
792  break;
793  }
794  SwFrameFormat::SwClientNotify(rMod, rHint);
795 
796  if (pOld && (RES_REMOVE_UNO_OBJECT == pOld->Which()))
797  { // invalidate cached uno object
798  SetXTextSection(uno::Reference<text::XTextSection>(nullptr));
799  }
800 }
801 
802 // Get info from the Format
804 {
805  switch( rInfo.Which() )
806  {
807  case RES_FINDNEARESTNODE:
808  if( GetFormatAttr( RES_PAGEDESC ).GetPageDesc() )
809  {
810  const SwSectionNode* pNd = GetSectionNode();
811  if( pNd )
812  static_cast<SwFindNearestNode&>(rInfo).CheckNode( *pNd );
813  }
814  return true;
815 
816  case RES_CONTENT_VISIBLE:
817  {
818  SwFrame* pFrame = SwIterator<SwFrame,SwFormat>(*this).First();
819  // if the current section has no own frame search for the children
820  if(!pFrame)
821  {
823  SwSectionFormat* pChild = aFormatIter.First();
824  while(pChild && !pFrame)
825  {
826  pFrame = SwIterator<SwFrame,SwFormat>(*pChild).First();
827  pChild = aFormatIter.Next();
828  }
829  }
830  static_cast<SwPtrMsgPoolItem&>(rInfo).pObject = pFrame;
831  }
832  return false;
833  }
834  return sw::BroadcastingModify::GetInfo( rInfo );
835 }
836 
837 static bool lcl_SectionCmpPos( const SwSection *pFirst, const SwSection *pSecond)
838 {
839  const SwSectionFormat* pFSectFormat = pFirst->GetFormat();
840  const SwSectionFormat* pSSectFormat = pSecond->GetFormat();
841  OSL_ENSURE( pFSectFormat && pSSectFormat &&
842  pFSectFormat->GetContent(false).GetContentIdx() &&
843  pSSectFormat->GetContent(false).GetContentIdx(),
844  "Invalid sections" );
845  return pFSectFormat->GetContent(false).GetContentIdx()->GetIndex() <
846  pSSectFormat->GetContent(false).GetContentIdx()->GetIndex();
847 }
848 
849 // get all Sections that have been derived from this one
851  SectionSort eSort,
852  bool bAllSections ) const
853 {
854  rArr.clear();
855 
856  if( !HasWriterListeners() )
857  return;
858 
860  const SwNodeIndex* pIdx;
861  for( SwSectionFormat* pLast = aIter.First(); pLast; pLast = aIter.Next() )
862  if( bAllSections ||
863  ( nullptr != ( pIdx = pLast->GetContent(false).
864  GetContentIdx()) && &pIdx->GetNodes() == &GetDoc()->GetNodes() ))
865  {
866  SwSection* pDummy = pLast->GetSection();
867  rArr.push_back( pDummy );
868  }
869 
870  // Do we need any sorting?
871  if( 1 < rArr.size() )
872  switch( eSort )
873  {
874  case SectionSort::Pos:
875  std::sort( rArr.begin(), rArr.end(), lcl_SectionCmpPos );
876  break;
877  case SectionSort::Not: break;
878  }
879 }
880 
881 // See whether the Section is within the Nodes or the UndoNodes array
883 {
884  const SwNodeIndex* pIdx = GetContent(false).GetContentIdx();
885  return pIdx && &pIdx->GetNodes() == &GetDoc()->GetNodes();
886 }
887 
888 // Parent was changed
890 {
891  if(!HasWriterListeners())
892  return;
893 
894  const SwSection* pSection = GetSection();
895  const SvxProtectItem* pProtect = &GetProtect();
896  // edit in readonly sections
897  const SwFormatEditInReadonly* pEditInReadonly = &GetEditInReadonly();
898  bool bIsHidden = pSection->IsHidden();
899  if(GetRegisteredIn())
900  {
901  const SwSection* pPS = GetParentSection();
902  pProtect = &pPS->GetFormat()->GetProtect();
903  pEditInReadonly = &pPS->GetFormat()->GetEditInReadonly();
904  bIsHidden = pPS->IsHiddenFlag();
905  }
906  if(!pProtect->IsContentProtected() != !pSection->IsProtectFlag())
907  CallSwClientNotify(sw::LegacyModifyHint(pProtect, pProtect));
908 
909  // edit in readonly sections
910  if(!pEditInReadonly->GetValue() != !pSection->IsEditInReadonlyFlag())
911  CallSwClientNotify(sw::LegacyModifyHint(pEditInReadonly, pEditInReadonly));
912 
913  if(bIsHidden == pSection->IsHiddenFlag())
914  {
915  SwMsgPoolItem aMsgItem(o3tl::narrowing<sal_uInt16>(bIsHidden
918  CallSwClientNotify(sw::LegacyModifyHint(&aMsgItem, &aMsgItem));
919  }
920 }
921 
923 {
924  const SwNodeIndex* pIdx = GetContent(false).GetContentIdx();
925  if( pIdx && ( &pIdx->GetNodes() == &GetDoc()->GetNodes() ))
926  return pIdx->GetNode().GetSectionNode();
927  return nullptr;
928 }
929 
930 // Is this Section valid for the GlobalDocument?
932 {
933  const SwSectionNode* pNd = GetSectionNode();
934  if( pNd &&
935  ( SectionType::FileLink == pNd->GetSection().GetType() ||
937  pNd->GetIndex() > pNd->GetNodes().GetEndOfExtras().GetIndex() &&
938  !pNd->StartOfSectionNode()->IsSectionNode() &&
940  return &pNd->GetSection();
941  return nullptr;
942 }
943 
944 // sw::Metadatable
946 {
947  return GetDoc()->GetXmlIdRegistry();
948 }
949 
951 {
952  return GetDoc()->IsClipBoard();
953 }
954 
956 {
957  return !IsInNodesArr();
958 }
959 
961 {
962  SwNodeIndex const*const pIdx = GetContent(false).GetContentIdx();
963  OSL_ENSURE(pIdx, "SwSectionFormat::IsInContent: no index?");
964  return pIdx == nullptr || !GetDoc()->IsInHeaderFooter(*pIdx);
965 }
966 
967 // n.b.: if the section format represents an index, then there is both a
968 // SwXDocumentIndex and a SwXTextSection instance for this single core object.
969 // these two can both implement XMetadatable and forward to the same core
970 // section format. but here only one UNO object can be returned,
971 // so always return the text section.
972 uno::Reference< rdf::XMetadatable >
974 {
975  uno::Reference<rdf::XMetadatable> xMeta;
976  SwSection *const pSection( GetSection() );
977  if (pSection)
978  {
979  xMeta.set( SwXTextSection::CreateXTextSection(this,
980  SectionType::ToxHeader == pSection->GetType()),
981  uno::UNO_QUERY );
982  }
983  return xMeta;
984 }
985 
987 {
988  return false;
989 }
990 
992 {
993  (void)xmlTextWriterStartElement(pWriter, BAD_CAST("SwSectionFormat"));
994  (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
995  (void)xmlTextWriterWriteAttribute(pWriter, BAD_CAST("name"), BAD_CAST(GetName().toUtf8().getStr()));
996  GetAttrSet().dumpAsXml(pWriter);
997  (void)xmlTextWriterEndElement(pWriter);
998 }
999 
1001 {
1002  (void)xmlTextWriterStartElement(pWriter, BAD_CAST("SwSectionFormats"));
1003  for (size_t i = 0; i < size(); ++i)
1004  GetFormat(i)->dumpAsXml(pWriter);
1005  (void)xmlTextWriterEndElement(pWriter);
1006 }
1007 
1008 // Method to break section links inside a linked section
1009 static void lcl_BreakSectionLinksInSect( const SwSectionNode& rSectNd )
1010 {
1011  if ( !rSectNd.GetSection().IsConnected() )
1012  {
1013  OSL_FAIL( "method <lcl_RemoveSectionLinksInSect(..)> - no Link at Section of SectionNode" );
1014  return;
1015  }
1016  const ::sfx2::SvBaseLink* pOwnLink( &(rSectNd.GetSection().GetBaseLink() ) );
1017  const ::sfx2::SvBaseLinks& rLnks = rSectNd.GetDoc().getIDocumentLinksAdministration().GetLinkManager().GetLinks();
1018  for ( auto n = rLnks.size(); n > 0; )
1019  {
1020  SwIntrnlSectRefLink* pSectLnk = dynamic_cast<SwIntrnlSectRefLink*>(&(*rLnks[ --n ]));
1021  if ( pSectLnk && pSectLnk != pOwnLink &&
1022  pSectLnk->IsInRange( rSectNd.GetIndex(), rSectNd.EndOfSectionIndex() ) )
1023  {
1024  // break the link of the corresponding section.
1025  // the link is also removed from the link manager
1026  SwSectionNode* pSectNode = pSectLnk->GetSectNode();
1027  assert(pSectNode);
1028  pSectNode->GetSection().BreakLink();
1029 
1030  // for robustness, because link is removed from the link manager
1031  if ( n > rLnks.size() )
1032  {
1033  n = rLnks.size();
1034  }
1035  }
1036  }
1037 }
1038 
1039 static void lcl_UpdateLinksInSect( const SwBaseLink& rUpdLnk, SwSectionNode& rSectNd )
1040 {
1041  SwDoc& rDoc = rSectNd.GetDoc();
1042  SwDocShell* pDShell = rDoc.GetDocShell();
1043  if( !pDShell || !pDShell->GetMedium() )
1044  return ;
1045 
1046  const OUString sName( pDShell->GetMedium()->GetName() );
1047  const OUString sMimeType( SotExchange::GetFormatMimeType( SotClipboardFormatId::SIMPLE_FILE ));
1048  uno::Any aValue;
1049  aValue <<= sName; // Arbitrary name
1050 
1051  const ::sfx2::SvBaseLinks& rLnks = rDoc.getIDocumentLinksAdministration().GetLinkManager().GetLinks();
1052  for( auto n = rLnks.size(); n; )
1053  {
1054  ::sfx2::SvBaseLink* pLnk = &(*rLnks[ --n ]);
1055  if( pLnk == &rUpdLnk )
1056  continue;
1058  continue;
1059  SwBaseLink* pBLink = dynamic_cast<SwBaseLink*>( pLnk );
1060  if( pBLink && pBLink->IsInRange( rSectNd.GetIndex(),
1061  rSectNd.EndOfSectionIndex() ) )
1062  {
1063  // It's in the Section, so update. But only if it's not in the same File!
1064  OUString sFName;
1065  sfx2::LinkManager::GetDisplayNames( pBLink, nullptr, &sFName );
1066  if( sFName != sName )
1067  {
1068  pBLink->DataChanged( sMimeType, aValue );
1069 
1070  // If needed find the Link pointer to avoid skipping one or calling one twice
1071  if( n >= rLnks.size() && 0 != ( n = rLnks.size() ))
1072  --n;
1073 
1074  if( n && pLnk != &(*rLnks[ n ]) )
1075  {
1076  // Find - it can only precede it!
1077  while( n )
1078  if( pLnk == &(*rLnks[ --n ] ) )
1079  break;
1080  }
1081  }
1082  }
1083  }
1084 }
1085 
1086 ::sfx2::SvBaseLink::UpdateResult SwIntrnlSectRefLink::DataChanged(
1087  const OUString& rMimeType, const uno::Any & rValue )
1088 {
1089  SwSectionNode* pSectNd = m_rSectFormat.GetSectionNode();
1090  SwDoc* pDoc = m_rSectFormat.GetDoc();
1091 
1093 
1094  if( !pSectNd || !pDoc || pDoc->IsInDtor() || ChkNoDataFlag() ||
1095  sfx2::LinkManager::RegisterStatusInfoId() == nDataFormat )
1096  {
1097  // Should we be in the Undo already?
1098  return SUCCESS;
1099  }
1100 
1101  // #i38810# - Due to possible existing signatures, the
1102  // document has to be modified after updating a link.
1103  pDoc->getIDocumentState().SetModified();
1104  // set additional flag that links have been updated, in order to check this
1105  // during load.
1107 
1108  // Always switch off Undo
1109  bool const bWasUndo = pDoc->GetIDocumentUndoRedo().DoesUndo();
1110  pDoc->GetIDocumentUndoRedo().DoUndo(false);
1111  bool bWasVisibleLinks = pDoc->getIDocumentLinksAdministration().IsVisibleLinks();
1113 
1114  SwPaM* pPam;
1116  SwEditShell* pESh = pDoc->GetEditShell();
1118  {
1119  // Insert an empty TextNode at the Section's start
1120  SwNodeIndex aIdx( *pSectNd, +1 );
1121  SwNodeIndex aEndIdx( *pSectNd->EndOfSectionNode() );
1122  SwTextNode* pNewNd = pDoc->GetNodes().MakeTextNode( aIdx,
1124 
1125  if( pESh )
1126  pESh->StartAllAction();
1127  else if( pVSh )
1128  pVSh->StartAction();
1129 
1130  SwPosition aPos( aIdx, SwIndex( pNewNd, 0 ));
1131  --aPos.nNode;
1132  SwDoc::CorrAbs( aIdx, aEndIdx, aPos, true );
1133 
1134  pPam = new SwPaM( aPos );
1135 
1136  // Delete everything succeeding it
1137  --aIdx;
1138  DelFlyInRange( aIdx, aEndIdx );
1139  DelBookmarks(aIdx, aEndIdx);
1140  ++aIdx;
1141 
1142  pDoc->GetNodes().Delete( aIdx, aEndIdx.GetIndex() - aIdx.GetIndex() );
1143  }
1144 
1145  SwSection& rSection = pSectNd->GetSection();
1146  rSection.SetConnectFlag(false);
1147 
1148  Reader* pRead = nullptr;
1149  switch( nDataFormat )
1150  {
1151  case SotClipboardFormatId::STRING:
1152  pRead = ReadAscii;
1153  break;
1154 
1155  case SotClipboardFormatId::RICHTEXT:
1156  case SotClipboardFormatId::RTF:
1157  pRead = SwReaderWriter::GetRtfReader();
1158  break;
1159 
1160  case SotClipboardFormatId::SIMPLE_FILE:
1161  if ( rValue.hasValue() )
1162  {
1163  OUString sFileName;
1164  if ( !(rValue >>= sFileName) )
1165  break;
1166  OUString sFilter;
1167  OUString sRange;
1168  sfx2::LinkManager::GetDisplayNames( this, nullptr, &sFileName,
1169  &sRange, &sFilter );
1170 
1171  RedlineFlags eOldRedlineFlags = RedlineFlags::NONE;
1172  SfxObjectShellRef xDocSh;
1173  SfxObjectShellLock xLockRef;
1174  int nRet;
1175  if( sFileName.isEmpty() )
1176  {
1177  xDocSh = pDoc->GetDocShell();
1178  nRet = 1;
1179  }
1180  else
1181  {
1182  nRet = SwFindDocShell( xDocSh, xLockRef, sFileName,
1183  rSection.GetLinkFilePassword(),
1184  sFilter, 0, pDoc->GetDocShell() );
1185  if( nRet )
1186  {
1187  SwDoc* pSrcDoc = static_cast<SwDocShell*>( xDocSh.get() )->GetDoc();
1188  eOldRedlineFlags = pSrcDoc->getIDocumentRedlineAccess().GetRedlineFlags();
1190  }
1191  }
1192 
1193  if( nRet )
1194  {
1195  rSection.SetConnectFlag();
1196 
1197  SwNodeIndex aSave( pPam->GetPoint()->nNode, -1 );
1198  std::unique_ptr<SwNodeRange> pCpyRg;
1199 
1200  if( xDocSh->GetMedium() &&
1201  rSection.GetLinkFilePassword().isEmpty() )
1202  {
1203  if( const SfxStringItem* pItem = xDocSh->GetMedium()->GetItemSet()->
1204  GetItemIfSet( SID_PASSWORD, false ) )
1205  rSection.SetLinkFilePassword( pItem->GetValue() );
1206  }
1207 
1208  SwDoc* pSrcDoc = static_cast<SwDocShell*>( xDocSh.get() )->GetDoc();
1209 
1210  if( !sRange.isEmpty() )
1211  {
1212  // Catch recursion
1213  bool bRecursion = false;
1214  if( pSrcDoc == pDoc )
1215  {
1216  tools::SvRef<SwServerObject> refObj( static_cast<SwServerObject*>(
1218  if( refObj.is() )
1219  {
1220  bRecursion = refObj->IsLinkInServer( this ) ||
1221  ChkNoDataFlag();
1222  }
1223  }
1224 
1225  SwNodeIndex& rInsPos = pPam->GetPoint()->nNode;
1226 
1227  SwPaM* pCpyPam = nullptr;
1228  if( !bRecursion &&
1229  pSrcDoc->GetDocumentLinksAdministrationManager().SelectServerObj( sRange, pCpyPam, pCpyRg )
1230  && pCpyPam )
1231  {
1232  if( pSrcDoc != pDoc ||
1233  pCpyPam->Start()->nNode > rInsPos ||
1234  rInsPos >= pCpyPam->End()->nNode )
1235  {
1237  }
1238  delete pCpyPam;
1239  }
1240  if( pCpyRg && pSrcDoc == pDoc &&
1241  pCpyRg->aStart < rInsPos && rInsPos < pCpyRg->aEnd )
1242  {
1243  pCpyRg.reset();
1244  }
1245  }
1246  else if( pSrcDoc != pDoc )
1247  pCpyRg.reset(new SwNodeRange( pSrcDoc->GetNodes().GetEndOfExtras(), SwNodeOffset(2),
1248  pSrcDoc->GetNodes().GetEndOfContent() ));
1249 
1250  // #i81653#
1251  // Update links of extern linked document or extern linked
1252  // document section, if section is protected.
1253  if ( pSrcDoc != pDoc &&
1254  rSection.IsProtectFlag() )
1255  {
1256  pSrcDoc->getIDocumentLinksAdministration().GetLinkManager().UpdateAllLinks( false, false, nullptr );
1257  }
1258 
1259  if( pCpyRg )
1260  {
1261  SwNodeIndex& rInsPos = pPam->GetPoint()->nNode;
1262  bool bCreateFrame = rInsPos.GetIndex() <=
1263  pDoc->GetNodes().GetEndOfExtras().GetIndex() ||
1264  rInsPos.GetNode().FindTableNode();
1265 
1266  SwTableNumFormatMerge aTNFM( *pSrcDoc, *pDoc );
1267 
1268  pSrcDoc->GetDocumentContentOperationsManager().CopyWithFlyInFly(*pCpyRg, rInsPos, nullptr, bCreateFrame);
1269  ++aSave;
1270 
1271  if( !bCreateFrame )
1272  ::MakeFrames( pDoc, aSave, rInsPos );
1273 
1274  // Delete last Node, only if it was copied successfully
1275  // (the Section contains more than one Node)
1276  if( SwNodeOffset(2) < pSectNd->EndOfSectionIndex() - pSectNd->GetIndex() )
1277  {
1278  aSave = rInsPos;
1279  pPam->Move( fnMoveBackward, GoInNode );
1280  pPam->SetMark(); // Rewire both SwPositions
1281 
1282  pDoc->CorrAbs( aSave, *pPam->GetPoint(), 0, true );
1283  pDoc->GetNodes().Delete( aSave );
1284  }
1285  pCpyRg.reset();
1286  }
1287 
1288  lcl_BreakSectionLinksInSect( *pSectNd );
1289 
1290  // Update all Links in this Section
1291  lcl_UpdateLinksInSect( *this, *pSectNd );
1292  }
1293  if( xDocSh.is() )
1294  {
1295  if( 2 == nRet )
1296  xDocSh->DoClose();
1297  else if( static_cast<SwDocShell*>( xDocSh.get() )->GetDoc() )
1298  static_cast<SwDocShell*>( xDocSh.get() )->GetDoc()->getIDocumentRedlineAccess().SetRedlineFlags(
1299  eOldRedlineFlags );
1300  }
1301  }
1302  break;
1303  default: break;
1304  }
1305 
1306  // Only create DDE if Shell is available!
1307  uno::Sequence< sal_Int8 > aSeq;
1308  if( pRead && rValue.hasValue() && ( rValue >>= aSeq ) )
1309  {
1310  if( pESh )
1311  {
1312  pESh->Push();
1313  SwPaM* pCursor = pESh->GetCursor();
1314  *pCursor->GetPoint() = *pPam->GetPoint();
1315  delete pPam;
1316  pPam = pCursor;
1317  }
1318 
1319  SvMemoryStream aStrm( const_cast<sal_Int8 *>(aSeq.getConstArray()), aSeq.getLength(),
1320  StreamMode::READ );
1321  aStrm.Seek( 0 );
1322 
1323  // TODO/MBA: it's impossible to set a BaseURL here!
1324  SwReader aTmpReader( aStrm, OUString(), pDoc->GetDocShell()->GetMedium()->GetBaseURL(), *pPam );
1325 
1326  if( ! aTmpReader.Read( *pRead ).IsError() )
1327  {
1328  rSection.SetConnectFlag();
1329  }
1330 
1331  if( pESh )
1332  {
1334  pPam = nullptr; // pam was deleted earlier
1335  }
1336  }
1337 
1338  // remove all undo actions and turn undo on again
1340  pDoc->GetIDocumentUndoRedo().DoUndo(bWasUndo);
1341  pDoc->getIDocumentLinksAdministration().SetVisibleLinks( bWasVisibleLinks );
1342 
1345  pDoc->getIDocumentFieldsAccess().UpdateExpFields(nullptr, true);
1346 
1347  if( pESh )
1348  pESh->EndAllAction();
1349  else if( pVSh )
1350  pVSh->EndAction();
1351  delete pPam; // Was created at the start
1352 
1353  return SUCCESS;
1354 }
1355 
1356 void SwIntrnlSectRefLink::Closed()
1357 {
1358  SwDoc* pDoc = m_rSectFormat.GetDoc();
1359  if( pDoc && !pDoc->IsInDtor() )
1360  {
1361  // Advise says goodbye: mark the Section as not protected
1362  // and change the Flag
1363  const SwSectionFormats& rFormats = pDoc->GetSections();
1364  for( auto n = rFormats.size(); n; )
1365  if (rFormats[--n] == &m_rSectFormat)
1366  {
1368  SwEditShell* pESh = pDoc->GetEditShell();
1369 
1370  if( pESh )
1371  pESh->StartAllAction();
1372  else
1373  pSh->StartAction();
1374 
1375  SwSectionData aSectionData(*m_rSectFormat.GetSection());
1376  aSectionData.SetType( SectionType::Content );
1377  aSectionData.SetLinkFileName( OUString() );
1378  aSectionData.SetProtectFlag( false );
1379  // edit in readonly sections
1380  aSectionData.SetEditInReadonlyFlag( false );
1381 
1382  aSectionData.SetConnectFlag( false );
1383 
1384  pDoc->UpdateSection( n, aSectionData );
1385 
1386  // Make all Links within the Section visible again
1387  SwSectionNode* pSectNd = m_rSectFormat.GetSectionNode();
1388  if( pSectNd )
1390 
1391  if( pESh )
1392  pESh->EndAllAction();
1393  else
1394  pSh->EndAction();
1395  break;
1396  }
1397  }
1398  SvBaseLink::Closed();
1399 }
1400 
1402 {
1403  SwSectionFormat* pFormat = GetFormat();
1404  OSL_ENSURE(pFormat, "SwSection::CreateLink: no format?");
1405  if (!pFormat || (SectionType::Content == m_Data.GetType()))
1406  return ;
1407 
1408  SfxLinkUpdateMode nUpdateType = SfxLinkUpdateMode::ALWAYS;
1409 
1410  if (!m_RefLink.is())
1411  {
1412  // create BaseLink
1413  m_RefLink = new SwIntrnlSectRefLink( *pFormat, nUpdateType );
1414  }
1415  else
1416  {
1418  }
1419 
1420  SwIntrnlSectRefLink *const pLnk =
1421  static_cast<SwIntrnlSectRefLink*>( m_RefLink.get() );
1422 
1423  const OUString sCmd(m_Data.GetLinkFileName());
1424  pLnk->SetUpdateMode( nUpdateType );
1425  pLnk->SetVisible( pFormat->GetDoc()->getIDocumentLinksAdministration().IsVisibleLinks() );
1426 
1427  switch (m_Data.GetType())
1428  {
1429  case SectionType::DdeLink:
1430  pLnk->SetLinkSourceName( sCmd );
1432  break;
1433  case SectionType::FileLink:
1434  {
1435  pLnk->SetContentType( SotClipboardFormatId::SIMPLE_FILE );
1436  sal_Int32 nIndex = 0;
1437  const OUString sFile(sCmd.getToken( 0, sfx2::cTokenSeparator, nIndex ));
1438  const OUString sFltr(sCmd.getToken( 0, sfx2::cTokenSeparator, nIndex ));
1439  const OUString sRange(sCmd.getToken( 0, sfx2::cTokenSeparator, nIndex ));
1441  static_cast<sfx2::SvBaseLinkObjectType>(m_Data.GetType()),
1442  sFile,
1443  ( !sFltr.isEmpty() ? &sFltr : nullptr ),
1444  ( !sRange.isEmpty() ? &sRange : nullptr ) );
1445  }
1446  break;
1447  default:
1448  OSL_ENSURE( false, "What kind of Link is this?" );
1449  }
1450 
1451  switch( eCreateType )
1452  {
1453  case LinkCreateType::Connect: // Connect Link right away
1454  pLnk->Connect();
1455  break;
1456 
1457  case LinkCreateType::Update: // Connect Link and update
1458  pLnk->Update();
1459  break;
1460  case LinkCreateType::NONE: break;
1461  }
1462 }
1463 
1465 {
1466  const SectionType eCurrentType( GetType() );
1467  if ( eCurrentType == SectionType::Content ||
1468  eCurrentType == SectionType::ToxHeader ||
1469  eCurrentType == SectionType::ToxContent )
1470  {
1471  // nothing to do
1472  return;
1473  }
1474 
1475  // Release link, if it exists
1476  if (m_RefLink.is())
1477  {
1478  SwSectionFormat *const pFormat( GetFormat() );
1479  OSL_ENSURE(pFormat, "SwSection::BreakLink: no format?");
1480  if (pFormat)
1481  {
1483  }
1484  m_RefLink.clear();
1485  }
1486  // change type
1488  // reset linked file data
1489  SetLinkFileName( OUString() );
1490  SetLinkFilePassword( OUString() );
1491 }
1492 
1494 {
1495  (void)xmlTextWriterStartElement(pWriter, BAD_CAST("SwSection"));
1496  (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("ptr"), "%p", this);
1497  (void)xmlTextWriterWriteFormatAttribute(pWriter, BAD_CAST("registered-in"), "%p",
1498  GetRegisteredIn());
1499  (void)xmlTextWriterEndElement(pWriter);
1500 }
1501 
1502 const SwNode* SwIntrnlSectRefLink::GetAnchor() const { return m_rSectFormat.GetSectionNode(); }
1503 
1504 bool SwIntrnlSectRefLink::IsInRange( SwNodeOffset nSttNd, SwNodeOffset nEndNd ) const
1505 {
1506  SwStartNode* pSttNd = m_rSectFormat.GetSectionNode();
1507  return pSttNd &&
1508  nSttNd < pSttNd->GetIndex() &&
1509  pSttNd->EndOfSectionIndex() < nEndNd;
1510 }
1511 
1512 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
const SwAttrSet * GetChgSet() const
What has changed.
Definition: hints.hxx:299
void dumpAsXml(xmlTextWriterPtr pWriter) const
Definition: section.cxx:991
void BreakLink()
Definition: section.cxx:1464
SwSectionFormat(SwFrameFormat *pDrvdFrame, SwDoc *pDoc)
Definition: section.cxx:593
SwSectionNode * FindSectionNode()
Search section node, in which it is.
Definition: ndsect.cxx:985
bool GetValue() const
bool is() const
const SwEndNode * EndOfSectionNode() const
Definition: node.hxx:692
Starts a section of nodes in the document model.
Definition: node.hxx:313
constexpr TypedWhichId< SvxProtectItem > RES_PROTECT(100)
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
Definition: atrfrm.cxx:2588
Base class of the Writer layout elements.
Definition: frame.hxx:314
SAL_DLLPRIVATE void SetHiddenFlag(bool const bFlag)
Definition: section.hxx:101
constexpr TypedWhichId< SwFormatEndAtTextEnd > RES_END_AT_TXTEND(118)
constexpr TypedWhichId< SwFormatPageDesc > RES_PAGEDESC(93)
tools::SvRef< SwServerObject > m_RefObj
Definition: section.hxx:147
std::vector< SwSection * > SwSections
Definition: section.hxx:40
bool hasValue()
sal_Int32 nIndex
SwNodeOffset EndOfSectionIndex() const
Definition: node.hxx:687
const T * GetItemIfSet(TypedWhichId< T > nWhich, bool bSrchInParent=true) const
Marks a position in the document model.
Definition: pam.hxx:36
void dumpAsXml(xmlTextWriterPtr pWriter) const
void SetType(SectionType const eNew)
Definition: section.hxx:94
void SetType(SectionType const eType)
Definition: section.hxx:170
void DelBookmarks(const SwNodeIndex &rStt, const SwNodeIndex &rEnd, std::vector< SaveBookmark > *pSaveBkmk, const SwIndex *pSttIdx, const SwIndex *pEndIdx)
Definition: docbm.cxx:1900
bool IsSectionNode() const
Definition: node.hxx:654
sal_uInt16 GetWhich() const
Definition: calbck.hxx:74
bool IsInRange(const WhichRangesContainer &pRange, const sal_uInt16 nId)
check if ID is in range of attribute set IDs
Definition: swatrset.cxx:434
tools::SvRef< sfx2::SvBaseLink > m_RefLink
Definition: section.hxx:148
static bool lcl_SectionCmpPos(const SwSection *pFirst, const SwSection *pSecond)
Definition: section.cxx:837
void SetHidden(bool const bFlag)
Definition: section.hxx:97
SAL_DLLPRIVATE void SetProtectFlag(bool const bFlag)
Definition: section.hxx:104
virtual ::sfx2::IXmlIdRegistry & GetRegistry() override
Definition: section.cxx:945
void SetLinkFileName(OUString const &rNew)
Definition: section.hxx:116
SwDocShell * GetDocShell()
Definition: doc.hxx:1351
constexpr TypedWhichId< SwFormatEditInReadonly > RES_EDIT_IN_READONLY(112)
constexpr TypedWhichId< SwFormatChg > RES_FMT_CHG(162)
std::string GetValue
constexpr TypedWhichId< SwFormatCol > RES_COL(109)
constexpr TypedWhichId< SwPtrMsgPoolItem > RES_REMOVE_UNO_OBJECT(181)
void DelSectionFormat(SwSectionFormat *pFormat, bool bDelNodes=false)
Definition: ndsect.cxx:521
SwNodeIndex nNode
Definition: pam.hxx:38
SAL_DLLPRIVATE void UpdateParent()
Definition: section.cxx:889
SwSection(SectionType const eType, OUString const &rName, SwSectionFormat &rFormat)
Definition: section.cxx:179
virtual void SetLinksUpdated(const bool bNewLinksUpdated)=0
void InsertFileLink(sfx2::SvBaseLink &, SvBaseLinkObjectType nFileType, std::u16string_view rFileNm, const OUString *pFilterNm=nullptr, const OUString *pRange=nullptr)
const OUString & GetName() const
virtual void SetModified()=0
Must be called manually at changes of format.
void CreateLink(LinkCreateType eType)
Definition: section.cxx:1401
bool IsEditInReadonlyFlag() const
Definition: section.hxx:188
bool IsEditInReadonlyFlag() const
Definition: section.hxx:105
const sal_Unicode cTokenSeparator
sal_Int64 n
bool m_bEditInReadonlyFlag
Definition: section.hxx:77
Definition: doc.hxx:187
void SetEditInReadonly(bool const bFlag=true)
Definition: section.cxx:371
TElementType * Next()
Definition: calbck.hxx:364
bool m_bCondHiddenFlag
Hide condition evaluated `true'.
Definition: section.hxx:80
IDocumentLinksAdministration const & getIDocumentLinksAdministration() const
Definition: doc.cxx:260
bool IsConnected() const
Definition: section.hxx:223
SwSectionData(SectionType const eType, OUString const &rName)
Definition: section.cxx:94
SAL_DLLPRIVATE void SetXTextSection(css::uno::Reference< css::text::XTextSection > const &xTextSection)
Definition: section.hxx:322
sal_uInt64 Seek(sal_uInt64 nPos)
SwNode & GetNode() const
Definition: ndindex.hxx:119
int SwFindDocShell(SfxObjectShellRef &xDocSh, SfxObjectShellLock &xLockRef, std::u16string_view rFileName, const OUString &rPasswd, const OUString &rFilter, sal_Int16 nVersion, SwDocShell *pDestSh)
Find the right DocShell and create a new one: The return value specifies what should happen to the Sh...
Definition: docsh2.cxx:1687
SwSectionFormat * GetFormat()
Definition: section.hxx:336
SwSection * GetParent() const
Definition: section.hxx:346
IDocumentUndoRedo & GetIDocumentUndoRedo()
Definition: doc.cxx:144
SwClient * Remove(SwClient *pDepend)
Definition: calbck.cxx:225
OUString const & GetLinkFileName() const
Definition: section.cxx:513
IDocumentContentOperations const & getIDocumentContentOperations() const
Definition: doc.cxx:315
bool HasWriterListeners() const
Definition: calbck.hxx:202
EmbeddedObjectRef * pObject
void EndAllAction()
Definition: edws.cxx:97
virtual bool GetInfo(SfxPoolItem &) const override
Definition: calbck.cxx:161
SwSectionData m_Data
Definition: section.hxx:145
bool IsCondHidden() const
Definition: section.hxx:191
SfxHintId GetId() const
bool IsInHeaderFooter(const SwNodeIndex &rIdx) const
Definition: doclay.cxx:1550
SectionSort
Definition: section.hxx:267
LinkCreateType
Definition: section.hxx:51
virtual ~SwSection() override
Definition: section.cxx:201
static css::uno::Reference< css::text::XTextSection > CreateXTextSection(SwSectionFormat *const pFormat, const bool bIndexHeader=false)
Definition: unosect.cxx:194
virtual bool IsInUndo() const override
Definition: section.cxx:955
show all inserts
Array of Undo-history.
Definition: docary.hxx:191
virtual void LockExpFields()=0
const SwSection & GetSection() const
Definition: node.hxx:549
virtual void UpdateExpFields(SwTextField *pField, bool bUpdateRefFields)=0
const SwFormatEditInReadonly & GetEditInReadonly(bool=true) const
Definition: fmteiro.hxx:48
IDocumentFieldsAccess const & getIDocumentFieldsAccess() const
Definition: doc.cxx:357
void SetLinkFilePassword(OUString const &rS)
Definition: section.hxx:205
const ::sfx2::SvBaseLink & GetBaseLink() const
Definition: section.hxx:227
OUString m_sLinkFilePassword
Definition: section.hxx:66
SwSectionNode * GetSectionNode()
Definition: section.cxx:922
bool m_bConnectFlag
Definition: section.hxx:81
IDocumentStylePoolAccess const & getIDocumentStylePoolAccess() const
Definition: doc.cxx:426
check if target position is in fly anchored at source range
void MakeOwnFrames(SwNodeIndex *pIdxBehind, SwNodeIndex *pEnd=nullptr)
Creates the frms for the SectionNode (i.e.
Definition: ndsect.cxx:1173
const OUString & GetName() const
Definition: format.hxx:131
constexpr OUStringLiteral IsHidden(u"IsHidden")
void RemoveServer(SvLinkSource *rObj)
virtual void DelAllUndoObj()=0
Delete all Undo actions.
virtual bool IsExpFieldsLocked() const =0
virtual void DoUndo(bool const bDoUndo)=0
Enable/Disable Undo.
constexpr TypedWhichId< SwMsgPoolItem > RES_SECTION_HIDDEN(174)
virtual void MakeFrames() override
Creates the views.
Definition: section.cxx:687
::sfx2::IXmlIdRegistry & GetXmlIdRegistry()
Definition: docnew.cxx:814
bool IsProtectFlag() const
Definition: section.hxx:187
const SfxPoolItem * GetDfltAttr(sal_uInt16 nWhich)
Get the default attribute from corresponding default attribute table.
Definition: hints.cxx:153
SwNodeOffset GetIndex() const
Definition: ndindex.hxx:152
SotClipboardFormatId
virtual bool DoesUndo() const =0
Is Undo enabled?
const char * sName
void MakeFrames(SwDoc *pDoc, const SwNodeIndex &rSttIdx, const SwNodeIndex &rEndIdx)
Definition: frmtool.cxx:2014
constexpr TypedWhichId< SwFindNearestNode > RES_FINDNEARESTNODE(184)
std::optional< sw::ModifyChangedHint > CheckRegistration(const SfxPoolItem *pOldValue)
Definition: calbck.cxx:77
SwNode & GetEndOfContent() const
Regular ContentSection (i.e. the BodyText).
Definition: ndarr.hxx:162
bool m_bHidden
Section is hidden, unless condition evaluates `false'.
Definition: section.hxx:79
OUString m_sCondition
Hide condition.
Definition: section.hxx:64
static void lcl_UpdateLinksInSect(const SwBaseLink &rUpdLnk, SwSectionNode &rSectNd)
Definition: section.cxx:1039
void EndListeningAll()
PaM is Point and Mark: a selection of the document model.
Definition: pam.hxx:137
constexpr TypedWhichId< SwMsgPoolItem > RES_SECTION_NOT_HIDDEN(175)
bool Move(SwMoveFnCollection const &fnMove=fnMoveForward, SwGoInDoc fnGo=GoInContent)
Movement of cursor.
Definition: pam.cxx:502
T * get() const
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
const SwSection * GetGlobalDocSection() const
Definition: section.cxx:931
Style of a layout element.
Definition: frmfmt.hxx:59
void SetConnectFlag(bool const bFlag=true)
Definition: section.hxx:238
void Broadcast(const SfxHint &rHint)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
const SvBaseLinks & GetLinks() const
int i
bool GoInNode(SwPaM &rPam, SwMoveFnCollection const &fnMove)
Definition: pam.cxx:959
bool IsHidden() const
Definition: section.hxx:96
const SwStartNode * StartOfSectionNode() const
Definition: node.hxx:133
SwDoc & GetDoc()
Definition: node.hxx:213
const SwPosition * GetPoint() const
Definition: pam.hxx:208
virtual bool CopyRange(SwPaM &rPam, SwPosition &rPos, SwCopyFlags flags) const =0
Copy a selected content range to a position.
void SetCondHidden(bool const bFlag)
Definition: section.cxx:503
void Remove(SvBaseLink const *pLink)
void dumpAsXml(xmlTextWriterPtr pWriter) const
Definition: section.cxx:1000
bool IsProtect() const
Definition: section.cxx:325
SwEditShell const * GetEditShell() const
Definition: doccorr.cxx:328
OUString m_sSectionName
Definition: section.hxx:63
const SwTOXBase * GetTOXBase() const
Definition: section.cxx:585
void SetProtect(bool const bFlag=true)
Definition: section.cxx:353
bool IsHidden() const
Definition: section.hxx:177
void Push()
store a copy of the current cursor on the cursor stack
Definition: crsrsh.cxx:2248
css::uno::Sequence< sal_Int8 > m_Password
Definition: section.hxx:67
::sw::DocumentContentOperationsManager const & GetDocumentContentOperationsManager() const
Definition: doc.cxx:325
Text body.
Definition: poolfmt.hxx:251
Count
TElementType * First()
Definition: calbck.hxx:356
bool IsHiddenFlag() const
Definition: section.hxx:186
SwNodeOffset GetIndex() const
Definition: node.hxx:292
sal_uInt16 Count() const
bool IsProtectFlag() const
Definition: section.hxx:102
static void lcl_BreakSectionLinksInSect(const SwSectionNode &rSectNd)
Definition: section.cxx:1009
virtual css::uno::Reference< css::rdf::XMetadatable > MakeUnoObject() override
Definition: section.cxx:973
void StartAction()
Definition: viewsh.hxx:595
constexpr TypedWhichId< SwAttrSetChg > RES_ATTRSET_CHG(163)
Marks a character position inside a document model node.
Definition: index.hxx:33
void UnlockModify()
Definition: calbck.hxx:209
OUString GetBaseURL(bool bForSaving=false)
void SetCondHidden(bool const bFlag)
Definition: section.hxx:109
IDocumentState const & getIDocumentState() const
Definition: doc.cxx:394
void LockModify()
Definition: calbck.hxx:208
void SetHidden(bool const bFlag=true)
Definition: section.cxx:344
SfxItemSet * GetItemSet() const
bool IsContentProtected() const
Marks a node in the document model.
Definition: ndindex.hxx:30
SwNodes & GetNodes()
Node is in which nodes-array/doc?
Definition: node.hxx:703
SectionType
Definition: section.hxx:44
const SwDoc * GetDoc() const
The document is set in SwAttrPool now, therefore you always can access it.
Definition: format.hxx:139
bool StartListening(SvtBroadcaster &rBroadcaster)
virtual bool IsInClipboard() const override
Definition: section.cxx:950
bool IsEditInReadonly() const
Definition: section.cxx:335
static OUString GetFormatMimeType(SotClipboardFormatId nFormat)
bool SelectServerObj(std::u16string_view rStr, SwPaM *&rpPam, std::unique_ptr< SwNodeRange > &rpRange) const
IDocumentLayoutAccess const & getIDocumentLayoutAccess() const
Definition: doc.cxx:405
void SetLinkFileName(OUString const &rNew)
Definition: section.cxx:551
void SetValue(bool const bTheValue)
const SwPosition * Start() const
Definition: pam.hxx:213
constexpr TypedWhichId< SwFormatContent > RES_CNTNT(95)
Reader * ReadAscii
Definition: fltini.cxx:46
void EndAction(const bool bIdleEnd=false)
Definition: viewsh.hxx:600
const SwNodeIndex * GetContentIdx() const
Definition: fmtcntnt.hxx:46
const SwFrameFormat * GetDfltFrameFormat() const
Definition: doc.hxx:746
bool CalcHiddenFlag() const
Definition: section.cxx:314
virtual SwSectionFormat * GetFormat(size_t idx) const override
Definition: docary.hxx:158
virtual bool SetFormatAttr(const SfxPoolItem &rAttr)
Definition: format.cxx:448
void SetRefObject(SwServerObject *pObj)
Definition: section.cxx:498
SvtBroadcaster & GetNotifier()
Definition: calbck.hxx:101
void UpdateFootnote(const SwNodeIndex &rStt)
Definition: ftnidx.cxx:60
static bool GetDisplayNames(const SvBaseLink *, OUString *pType, OUString *pFile=nullptr, OUString *pLink=nullptr, OUString *pFilter=nullptr)
SwFormat * DerivedFrom() const
Definition: format.hxx:128
void InsertDDELink(SvBaseLink *, const OUString &rServer, std::u16string_view rTopic, std::u16string_view rItem)
SwTextNode is a paragraph in the document model.
Definition: ndtxt.hxx:79
const OUString & GetLinkFileName() const
Definition: section.hxx:115
virtual bool IsInContent() const override
Definition: section.cxx:960
virtual bool ResetFormatAttr(sal_uInt16 nWhich1, sal_uInt16 nWhich2=0)
Definition: format.cxx:619
IDocumentRedlineAccess const & getIDocumentRedlineAccess() const
Definition: doc.cxx:335
SwCursor * GetCursor(bool bMakeTableCursor=true) const
Return pointer to the current shell cursor.
Definition: crsrsh.cxx:195
void UpdateSection(size_t const nSect, SwSectionData &, SfxItemSet const *const =nullptr, bool const bPreventLinkUpdate=false)
Definition: ndsect.cxx:611
void CorrAbs(const SwNodeIndex &rOldNode, const SwPosition &rNewPos, const sal_Int32 nOffset=0, bool bMoveCursor=false)
Definition: doccorr.cxx:168
const SfxPoolItem & Get(sal_uInt16 nWhich, bool bSrchInParent=true) const
virtual const SwViewShell * GetCurrentViewShell() const =0
Returns the layout set at the document.
void UpdateAllLinks(bool bAskUpdate, bool bUpdateGrfLinks, weld::Window *pParentWin)
void CopyWithFlyInFly(const SwNodeRange &rRg, const SwNodeIndex &rInsPos, const std::pair< const SwPaM &, const SwPosition & > *pCopiedPaM=nullptr, bool bMakeNewFrames=true, bool bDelRedlines=true, bool bCopyFlyAtFly=false, SwCopyFlags flags=SwCopyFlags::Default) const
note: rRg/rInsPos exclude a partially selected start text node; pCopiedPaM includes a partially selec...
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
Definition: section.cxx:388
const SwNodes & GetNodes() const
Definition: ndindex.hxx:156
virtual void DelFrames() override
Destroys all Frames in aDepend (Frames are identified via dynamic_cast).
Definition: section.cxx:646
const SfxPoolItem * m_pOld
Definition: calbck.hxx:76
static SotClipboardFormatId GetFormatIdFromMimeType(const OUString &rMimeType)
void SectionUp(SwNodeRange *)
increase level of the given range
Definition: nodes.cxx:966
void SetEditInReadonlyFlag(bool const bFlag)
Definition: section.hxx:106
virtual void SetRedlineFlags(RedlineFlags eMode)=0
Set a new redline mode.
bool DataEquals(SwSectionData const &rCmp) const
Definition: section.cxx:259
bool IsClipBoard() const
Definition: doc.hxx:962
virtual ~SwSectionFormat() override
Definition: section.cxx:601
SwNodes & GetNodes()
Definition: doc.hxx:408
virtual SwTextFormatColl * GetTextCollFromPool(sal_uInt16 nId, bool bRegardLanguage=true)=0
Return "Auto-Collection with ID.
const SwPosition * End() const
Definition: pam.hxx:218
const SwModify * GetRegisteredIn() const
Definition: calbck.hxx:164
void Delete(const SwNodeIndex &rPos, SwNodeOffset nNodes=SwNodeOffset(1))
delete nodes
Definition: nodes.cxx:1085
bool IsHiddenFlag() const
Definition: section.hxx:99
const SfxPoolItem & GetFormatAttr(sal_uInt16 nWhich, bool bInParents=true) const
If bInParents is FALSE, search only in this format for attribute.
Definition: format.cxx:367
Sequence< sal_Int8 > aSeq
void RegisterToFormat(SwFormat &rFormat)
Definition: atrfrm.cxx:2688
o3tl::strong_int< sal_Int32, struct Tag_SwNodeOffset > SwNodeOffset
Definition: nodeoffset.hxx:16
SectionType GetType() const
Definition: section.hxx:93
bool m_bProtectFlag
Flags that correspond to attributes in the format: may have different value than format attribute: fo...
Definition: section.hxx:75
SwSection * GetParentSection() const
Definition: section.hxx:363
Reader * GetRtfReader()
Definition: fltini.cxx:149
const SwAttrSet & GetSwAttrSet() const
Does node has already its own auto-attributes? Access to SwAttrSet.
Definition: node.hxx:724
const SwFormatContent & GetContent(bool=true) const
Definition: fmtcntnt.hxx:55
virtual void CallSwClientNotify(const SfxHint &rHint) const override
Definition: calbck.cxx:325
SwMoveFnCollection const & fnMoveBackward
Definition: paminit.cxx:58
SwTableNode * FindTableNode()
Search table node, in which it is.
Definition: node.cxx:358
SectionType m_eType
Definition: section.hxx:61
void RemoveAllUnos()
Definition: format.cxx:758
void dumpAsXml(xmlTextWriterPtr pWriter) const
Definition: section.cxx:1493
virtual sfx2::LinkManager & GetLinkManager()=0
::sw::DocumentLinksAdministrationManager const & GetDocumentLinksAdministrationManager() const
Definition: doc.cxx:270
void sw_DeleteFootnote(SwSectionNode *pNd, SwNodeOffset nStt, SwNodeOffset nEnd)
Definition: ndsect.cxx:751
bool IsInDtor() const
Definition: doc.hxx:403
SwFootnoteIdxs & GetFootnoteIdxs()
Definition: doc.hxx:633
virtual RedlineFlags GetRedlineFlags() const =0
Query the currently set redline mode.
SwContentNode * GoNextSection(SwNodeIndex *, bool bSkipHidden=true, bool bSkipProtect=true) const
Go to next content-node that is not protected or hidden (Both set FALSE ==> GoNext/GoPrevious!!!).
Definition: nodes.cxx:1919
void DelFlyInRange(const SwNodeIndex &rMkNdIdx, const SwNodeIndex &rPtNdIdx, SwIndex const *const pMkIdx, SwIndex const *const pPtIdx)
Delete and move all Flys at the paragraph, that are within the selection.
Definition: docedt.cxx:203
const SvxProtectItem & GetProtect(bool=true) const
Definition: frmatr.hxx:82
struct _xmlTextWriter * xmlTextWriterPtr
void SetContentProtect(bool bNew)
virtual bool supportsFullDrawingLayerFillAttributeSet() const override
Definition: section.cxx:986
virtual ::sfx2::SvLinkSource * CreateLinkSource(const OUString &rItem)=0
void SetSectionData(SwSectionData const &rData)
Definition: section.cxx:245
SwSectionNode * GetSectionNode()
Definition: node.hxx:617
SAL_DLLPRIVATE void ImplSetHiddenFlag(bool const bHidden, bool const bCondition)
Definition: section.cxx:274
const EnumerationType m_eType
virtual bool GetInfo(SfxPoolItem &) const override
Definition: section.cxx:803
virtual void SetMark()
Unless this is called, the getter method of Mark will return Point.
Definition: pam.cxx:476
SectionType GetType() const
Definition: section.hxx:169
bool Pop(PopMode)
delete cursor
Definition: crsrsh.cxx:2270
const SwAttrSet & GetAttrSet() const
For querying the attribute array.
Definition: format.hxx:136
static SotClipboardFormatId RegisterStatusInfoId()
virtual void UnlockExpFields()=0
SwSection * GetSection() const
Definition: section.cxx:640
SwNode & GetEndOfExtras() const
This is the last EndNode of a special section.
Definition: ndarr.hxx:160
virtual void SetVisibleLinks(bool bFlag)=0
void StartAllAction()
For all views of this document.
Definition: edws.cxx:86
void GetChildSections(SwSections &rArr, SectionSort eSort=SectionSort::Not, bool bAllSections=true) const
Definition: section.cxx:850
SwSectionFormats & GetSections()
Definition: doc.hxx:1337
constexpr TypedWhichId< SwPtrMsgPoolItem > RES_CONTENT_VISIBLE(185)
bool operator==(SwSectionData const &) const
Definition: section.cxx:165
static void MakeChildLinksVisible(const SwSectionNode &rSectNd)
Definition: section.cxx:561
SwSectionData & operator=(SwSectionData const &)
Definition: section.cxx:143
OUString const & GetLinkFilePassword() const
Definition: section.hxx:203
constexpr TypedWhichId< SwFormatFootnoteAtTextEnd > RES_FTN_AT_TXTEND(117)
bool IsCondHidden() const
Definition: section.hxx:110
OUString m_sLinkFileName
Definition: section.hxx:65
sal_uInt16 Which() const
no RedlineFlags
SfxLinkUpdateMode
constexpr TypedWhichId< SwPtrMsgPoolItem > RES_OBJECTDYING(RES_MSG_BEGIN)
SwTextNode * MakeTextNode(const SwNodeIndex &rWhere, SwTextFormatColl *pColl, bool bNewFrames=true)
Implementations of "Make...Node" are in the given .cxx-files.
Definition: ndtxt.cxx:104
virtual void Notify(SfxHint const &rHint) override
Definition: section.cxx:393
bool m_bDetectedRangeSegmentation false
virtual void SwClientNotify(const SwModify &, const SfxHint &) override
Definition: section.cxx:700
virtual bool IsVisibleLinks() const =0
Insert links in-/visibly into LinkManager (linked ranges).
bool IsInNodesArr() const
Definition: section.cxx:882
Base class of the Writer document model elements.
Definition: node.hxx:81
typedef void(CALLTYPE *GetFuncDataPtr)(sal_uInt16 &nNo
SfxMedium * GetMedium() const