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