LibreOffice Module sw (master)  1
swatrset.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 <memory>
21 
22 #include <cellatr.hxx>
23 #include <charfmt.hxx>
24 #include <doc.hxx>
25 #include <IDocumentListsAccess.hxx>
26 #include <editeng/editeng.hxx>
27 #include <fmtanchr.hxx>
28 #include <fmtpdsc.hxx>
29 #include <fmtautofmt.hxx>
30 #include <hintids.hxx>
31 #include <list.hxx>
32 #include <node.hxx>
33 #include <numrule.hxx>
34 #include <pagedesc.hxx>
35 #include <paratr.hxx>
36 #include <osl/diagnose.h>
37 #include <svl/whiter.hxx>
38 
39 #include <svx/svdpool.hxx>
40 #include <svx/sxenditm.hxx>
41 #include <svx/sdsxyitm.hxx>
42 
44  : SfxItemPool( "SWG",
46  aSlotTab, &aAttrTab ),
47  m_pDoc( pD )
48 {
49  // create secondary pools immediately
51 }
52 
54 {
55  // cleanup secondary pools first
57 }
58 
60 {
61  const SfxItemPool* pCheckAlreadySet = GetSecondaryPool();
62 
63  if(pCheckAlreadySet)
64  {
65  OSL_ENSURE(false, "SwAttrPool already has a secondary pool (!)");
66  return;
67  }
68 
69  // create SfxItemPool and EditEngine pool and add these in a chain. These
70  // belong us and will be removed/destroyed in removeAndDeleteSecondaryPools() used from
71  // the destructor
72  SfxItemPool *pSdrPool = new SdrItemPool(this);
73 
74  // #75371# change DefaultItems for the SdrEdgeObj distance items
75  // to TWIPS.
76  // 1/100th mm in twips
77  const long nDefEdgeDist = (500 * 72) / 127;
78 
79  pSdrPool->SetPoolDefaultItem(SdrEdgeNode1HorzDistItem(nDefEdgeDist));
80  pSdrPool->SetPoolDefaultItem(SdrEdgeNode1VertDistItem(nDefEdgeDist));
81  pSdrPool->SetPoolDefaultItem(SdrEdgeNode2HorzDistItem(nDefEdgeDist));
82  pSdrPool->SetPoolDefaultItem(SdrEdgeNode2VertDistItem(nDefEdgeDist));
83 
84  // #i33700# // Set shadow distance defaults as PoolDefaultItems
85  pSdrPool->SetPoolDefaultItem(makeSdrShadowXDistItem((300 * 72) / 127));
86  pSdrPool->SetPoolDefaultItem(makeSdrShadowYDistItem((300 * 72) / 127));
87 
88  SfxItemPool *pEEgPool = EditEngine::CreatePool();
89 
90  pSdrPool->SetSecondaryPool(pEEgPool);
91 
92  if(!GetFrozenIdRanges())
93  {
95  }
96  else
97  {
98  pSdrPool->FreezeIdRanges();
99  }
100 }
101 
103 {
104  SfxItemPool *pSdrPool = GetSecondaryPool();
105 
106  if(!pSdrPool)
107  {
108  OSL_ENSURE(false, "SwAttrPool has no secondary pool, it's missing (!)");
109  return;
110  }
111 
112  SfxItemPool *pEEgPool = pSdrPool->GetSecondaryPool();
113 
114  if(!pEEgPool)
115  {
116  OSL_ENSURE(false, "i don't accept additional pools");
117  return;
118  }
119 
120  // first delete the items, then break the linking
121  pSdrPool->Delete();
122 
123  SetSecondaryPool(nullptr);
124  pSdrPool->SetSecondaryPool(nullptr);
125 
126  // final cleanup of secondary pool(s)
127  SfxItemPool::Free(pSdrPool);
128  SfxItemPool::Free(pEEgPool);
129 }
130 
131 SwAttrSet::SwAttrSet( SwAttrPool& rPool, sal_uInt16 nWh1, sal_uInt16 nWh2 )
132  : SfxItemSet( rPool, {{nWh1, nWh2}} ), m_pOldSet( nullptr ), m_pNewSet( nullptr )
133 {
134 }
135 
136 SwAttrSet::SwAttrSet( SwAttrPool& rPool, const sal_uInt16* nWhichPairTable )
137  : SfxItemSet( rPool, nWhichPairTable ), m_pOldSet( nullptr ), m_pNewSet( nullptr )
138 {
139 }
140 
142  : SfxItemSet( rSet ), m_pOldSet( nullptr ), m_pNewSet( nullptr )
143 {
144 }
145 
146 std::unique_ptr<SfxItemSet> SwAttrSet::Clone( bool bItems, SfxItemPool *pToPool ) const
147 {
148  if ( pToPool && pToPool != GetPool() )
149  {
150  SwAttrPool* pAttrPool = dynamic_cast< SwAttrPool* >(pToPool);
151  std::unique_ptr<SfxItemSet> pTmpSet;
152  if ( !pAttrPool )
153  pTmpSet = SfxItemSet::Clone( bItems, pToPool );
154  else
155  {
156  pTmpSet.reset(new SwAttrSet( *pAttrPool, GetRanges() ));
157  if ( bItems )
158  {
159  SfxWhichIter aIter(*pTmpSet);
160  sal_uInt16 nWhich = aIter.FirstWhich();
161  while ( nWhich )
162  {
163  const SfxPoolItem* pItem;
164  if ( SfxItemState::SET == GetItemState( nWhich, false, &pItem ) )
165  pTmpSet->Put( *pItem );
166  nWhich = aIter.NextWhich();
167  }
168  }
169  }
170  return pTmpSet;
171  }
172  else
173  return std::unique_ptr<SfxItemSet>(
174  bItems
175  ? new SwAttrSet( *this )
176  : new SwAttrSet( *GetPool(), GetRanges() ));
177 }
178 
179 bool SwAttrSet::Put_BC( const SfxPoolItem& rAttr,
180  SwAttrSet* pOld, SwAttrSet* pNew )
181 {
182  m_pNewSet = pNew;
183  m_pOldSet = pOld;
184  bool bRet = nullptr != SfxItemSet::Put( rAttr );
185  m_pOldSet = m_pNewSet = nullptr;
186  return bRet;
187 }
188 
189 bool SwAttrSet::Put_BC( const SfxItemSet& rSet,
190  SwAttrSet* pOld, SwAttrSet* pNew )
191 {
192  m_pNewSet = pNew;
193  m_pOldSet = pOld;
194  bool bRet = SfxItemSet::Put( rSet );
195  m_pOldSet = m_pNewSet = nullptr;
196  return bRet;
197 }
198 
199 sal_uInt16 SwAttrSet::ClearItem_BC( sal_uInt16 nWhich,
200  SwAttrSet* pOld, SwAttrSet* pNew )
201 {
202  m_pNewSet = pNew;
203  m_pOldSet = pOld;
204  sal_uInt16 nRet = SfxItemSet::ClearItem( nWhich );
205  m_pOldSet = m_pNewSet = nullptr;
206  return nRet;
207 }
208 
209 sal_uInt16 SwAttrSet::ClearItem_BC( sal_uInt16 nWhich1, sal_uInt16 nWhich2,
210  SwAttrSet* pOld, SwAttrSet* pNew )
211 {
212  OSL_ENSURE( nWhich1 <= nWhich2, "no valid range" );
213  m_pNewSet = pNew;
214  m_pOldSet = pOld;
215  sal_uInt16 nRet = 0;
216  for( ; nWhich1 <= nWhich2; ++nWhich1 )
217  nRet = nRet + SfxItemSet::ClearItem( nWhich1 );
218  m_pOldSet = m_pNewSet = nullptr;
219  return nRet;
220 }
221 
223  SwAttrSet* pOld, SwAttrSet* pNew )
224 {
225  m_pNewSet = pNew;
226  m_pOldSet = pOld;
227  SfxItemSet::Intersect( rSet );
228  m_pOldSet = m_pNewSet = nullptr;
229  return pNew ? pNew->Count() : ( pOld ? pOld->Count() : 0 );
230 }
231 
233 void SwAttrSet::Changed( const SfxPoolItem& rOld, const SfxPoolItem& rNew )
234 {
235  if( m_pOldSet )
236  m_pOldSet->PutChgd( rOld );
237  if( m_pNewSet )
238  m_pNewSet->PutChgd( rNew );
239 }
240 
249 bool SwAttrSet::SetModifyAtAttr( const SwModify* pModify )
250 {
251  bool bSet = false;
252 
253  const SfxPoolItem* pItem;
254  if( SfxItemState::SET == GetItemState( RES_PAGEDESC, false, &pItem ) &&
255  static_cast<const SwFormatPageDesc*>(pItem)->GetDefinedIn() != pModify )
256  {
257  const_cast<SwFormatPageDesc*>(static_cast<const SwFormatPageDesc*>(pItem))->ChgDefinedIn( pModify );
258  bSet = true;
259  }
260 
261  if( SfxItemState::SET == GetItemState( RES_PARATR_DROP, false, &pItem ) &&
262  static_cast<const SwFormatDrop*>(pItem)->GetDefinedIn() != pModify )
263  {
264  // If CharFormat is set and it is set in different attribute pools then
265  // the CharFormat has to be copied.
266  SwCharFormat* pCharFormat = const_cast<SwFormatDrop*>(static_cast<const SwFormatDrop*>(pItem))->GetCharFormat();
267  if( pCharFormat && GetPool() != pCharFormat->GetAttrSet().GetPool() )
268  {
269  pCharFormat = GetDoc()->CopyCharFormat( *pCharFormat );
270  const_cast<SwFormatDrop*>(static_cast<const SwFormatDrop*>(pItem))->SetCharFormat( pCharFormat );
271  }
272  const_cast<SwFormatDrop*>(static_cast<const SwFormatDrop*>(pItem))->ChgDefinedIn( pModify );
273  bSet = true;
274  }
275 
276  if( SfxItemState::SET == GetItemState( RES_BOXATR_FORMULA, false, &pItem ) &&
277  static_cast<const SwTableBoxFormula*>(pItem)->GetDefinedIn() != pModify )
278  {
279  const_cast<SwTableBoxFormula*>(static_cast<const SwTableBoxFormula*>(pItem))->ChgDefinedIn( pModify );
280  bSet = true;
281  }
282 
283  return bSet;
284 }
285 
287 {
288  // copy attributes across multiple documents if needed
289  SwContentNode* pCNd = dynamic_cast<SwContentNode*>( &rMod );
290  SwFormat* pFormat = dynamic_cast<SwFormat*>( &rMod );
291 
292  if( pCNd || pFormat )
293  {
294  if( Count() )
295  {
296  // #i92811#
297  std::unique_ptr<SfxStringItem> pNewListIdItem;
298 
299  const SfxPoolItem* pItem;
300  const SwDoc *pSrcDoc = GetDoc();
301  SwDoc *pDstDoc = pCNd ? pCNd->GetDoc() : pFormat->GetDoc();
302 
303  // Does the NumRule has to be copied?
304  if( pSrcDoc != pDstDoc &&
305  SfxItemState::SET == GetItemState( RES_PARATR_NUMRULE, false, &pItem ) )
306  {
307  const OUString& rNm = static_cast<const SwNumRuleItem*>(pItem)->GetValue();
308  if( !rNm.isEmpty() )
309  {
310  SwNumRule* pDestRule = pDstDoc->FindNumRulePtr( rNm );
311  if( pDestRule )
312  pDestRule->SetInvalidRule( true );
313  else
314  pDstDoc->MakeNumRule( rNm, pSrcDoc->FindNumRulePtr( rNm ) );
315  }
316  }
317 
318  // copy list and if needed also the corresponding list style
319  // for text nodes
320  if ( pSrcDoc != pDstDoc &&
321  pCNd && pCNd->IsTextNode() &&
322  GetItemState( RES_PARATR_LIST_ID, false, &pItem ) == SfxItemState::SET )
323  {
324  auto pStrItem = dynamic_cast<const SfxStringItem*>(pItem);
325  assert(pStrItem);
326  const OUString& sListId = pStrItem->GetValue();
327  if ( !sListId.isEmpty() &&
328  !pDstDoc->getIDocumentListsAccess().getListByName( sListId ) )
329  {
330  const SwList* pList = pSrcDoc->getIDocumentListsAccess().getListByName( sListId );
331  // copy list style, if needed
332  const OUString& sDefaultListStyleName =
333  pList->GetDefaultListStyleName();
334  // #i92811#
335  const SwNumRule* pDstDocNumRule =
336  pDstDoc->FindNumRulePtr( sDefaultListStyleName );
337  if ( !pDstDocNumRule )
338  {
339  pDstDoc->MakeNumRule( sDefaultListStyleName,
340  pSrcDoc->FindNumRulePtr( sDefaultListStyleName ) );
341  }
342  else
343  {
344  const SwNumRule* pSrcDocNumRule =
345  pSrcDoc->FindNumRulePtr( sDefaultListStyleName );
346  // If list id of text node equals the list style's
347  // default list id in the source document, the same
348  // should be hold in the destination document.
349  // Thus, create new list id item.
350  if (pSrcDocNumRule && sListId == pSrcDocNumRule->GetDefaultListId())
351  {
352  pNewListIdItem.reset(new SfxStringItem (
354  pDstDocNumRule->GetDefaultListId() ));
355  }
356  }
357  // check again, if list exist, because <SwDoc::MakeNumRule(..)>
358  // could have also created it.
359  if ( pNewListIdItem == nullptr &&
360  !pDstDoc->getIDocumentListsAccess().getListByName( sListId ) )
361  {
362  // copy list
363  pDstDoc->getIDocumentListsAccess().createList( sListId, sDefaultListStyleName );
364  }
365  }
366  }
367 
368  std::unique_ptr< SfxItemSet > tmpSet;
369 
370  const SwPageDesc* pPgDesc;
371  if( pSrcDoc != pDstDoc && SfxItemState::SET == GetItemState(
372  RES_PAGEDESC, false, &pItem ))
373  {
374  pPgDesc = static_cast<const SwFormatPageDesc*>(pItem)->GetPageDesc();
375  if( pPgDesc )
376  {
377  tmpSet.reset(new SfxItemSet(*this));
378 
379  SwPageDesc* pDstPgDesc = pDstDoc->FindPageDesc(pPgDesc->GetName());
380  if( !pDstPgDesc )
381  {
382  pDstPgDesc = pDstDoc->MakePageDesc(pPgDesc->GetName());
383  pDstDoc->CopyPageDesc( *pPgDesc, *pDstPgDesc );
384  }
385  SwFormatPageDesc aDesc( pDstPgDesc );
386  aDesc.SetNumOffset( static_cast<const SwFormatPageDesc*>(pItem)->GetNumOffset() );
387  tmpSet->Put( aDesc );
388  }
389  }
390 
391  if( pSrcDoc != pDstDoc && SfxItemState::SET == GetItemState( RES_ANCHOR, false, &pItem )
392  && static_cast< const SwFormatAnchor* >( pItem )->GetContentAnchor() != nullptr )
393  {
394  if( !tmpSet )
395  tmpSet.reset( new SfxItemSet( *this ));
396  // Anchors at any node position cannot be copied to another document, because the SwPosition
397  // would still point to the old document. It needs to be fixed up explicitly.
398  tmpSet->ClearItem( RES_ANCHOR );
399  }
400 
401  if (pSrcDoc != pDstDoc &&
402  SfxItemState::SET == GetItemState(RES_PARATR_LIST_AUTOFMT, false, &pItem))
403  {
404  SfxItemSet const& rAutoStyle(*static_cast<SwFormatAutoFormat const&>(*pItem).GetStyleHandle());
405  std::shared_ptr<SfxItemSet> const pNewSet(
406  rAutoStyle.SfxItemSet::Clone(true, &pDstDoc->GetAttrPool()));
408  // TODO: for ODF export we'd need to add it to the autostyle pool
409  item.SetStyleHandle(pNewSet);
410  if (!tmpSet)
411  {
412  tmpSet.reset(new SfxItemSet(*this));
413  }
414  tmpSet->Put(item);
415  }
416 
417  if( tmpSet )
418  {
419  if( pCNd )
420  {
421  // #i92811#
422  if ( pNewListIdItem != nullptr )
423  {
424  tmpSet->Put( *pNewListIdItem );
425  }
426  pCNd->SetAttr( *tmpSet );
427  }
428  else
429  {
430  pFormat->SetFormatAttr( *tmpSet );
431  }
432  }
433  else if( pCNd )
434  {
435  // #i92811#
436  if ( pNewListIdItem != nullptr )
437  {
438  SfxItemSet aTmpSet( *this );
439  aTmpSet.Put( *pNewListIdItem );
440  pCNd->SetAttr( aTmpSet );
441  }
442  else
443  {
444  pCNd->SetAttr( *this );
445  }
446  }
447  else
448  {
449  pFormat->SetFormatAttr( *this );
450  }
451  }
452  }
453 #if OSL_DEBUG_LEVEL > 0
454  else
455  OSL_FAIL("neither Format nor ContentNode - no Attributes copied");
456 #endif
457 }
458 
460 bool IsInRange( const sal_uInt16* pRange, const sal_uInt16 nId )
461 {
462  while( *pRange )
463  {
464  if( *pRange <= nId && nId <= *(pRange+1) )
465  return true;
466  pRange += 2;
467  }
468  return false;
469 }
470 
471 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void ChgDefinedIn(const SwModify *pNew)
Definition: fmtpdsc.hxx:70
constexpr TypedWhichId< SwFormatPageDesc > RES_PAGEDESC(93)
Pagedescriptor Client of SwPageDesc that is "described" by the attribute.
Definition: fmtpdsc.hxx:35
SW_DLLPUBLIC const OUString & GetDefaultListStyleName() const
Definition: list.cxx:232
virtual void Changed(const SfxPoolItem &rOld, const SfxPoolItem &rNew) override
Notification callback.
Definition: swatrset.cxx:233
std::string GetValue
SfxItemSet(const SfxItemSet &)
SwAttrPool(SwDoc *pDoc)
Definition: swatrset.cxx:43
virtual SwList * createList(const OUString &rListId, const OUString &rDefaultListStyleName)=0
constexpr TypedWhichId< SwNumRuleItem > RES_PARATR_NUMRULE(72)
const OUString & GetDefaultListId() const
Definition: numrule.hxx:192
Definition: list.hxx:35
void SetStyleHandle(const std::shared_ptr< SfxItemSet > &pHandle)
Definition: fmtautofmt.hxx:48
Definition: doc.hxx:184
sal_uInt16 FirstWhich()
void Delete()
void FreezeIdRanges()
void ChgDefinedIn(const SwModify *pNew)
Definition: paratr.hxx:106
sal_uInt16 NextWhich()
const OUString & GetName() const
Definition: pagedesc.hxx:187
SwDoc * m_pDoc
Definition: docbm.cxx:1190
void PutChgd(const SfxPoolItem &rI)
Definition: swatrset.hxx:169
bool Put_BC(const SfxPoolItem &rAttr, SwAttrSet *pOld, SwAttrSet *pNew)
Definition: swatrset.cxx:179
const BorderLinePrimitive2D *pCandidateB assert(pCandidateA)
const sal_uInt16 * GetFrozenIdRanges() const
constexpr TypedWhichId< SwFormatDrop > RES_PARATR_DROP(70)
constexpr sal_uInt16 POOLATTR_BEGIN(HINT_BEGIN)
bool SetModifyAtAttr(const SwModify *pModify)
special treatment for some attributes
Definition: swatrset.cxx:249
void removeAndDeleteSecondaryPools()
Definition: swatrset.cxx:102
bool IsInRange(const sal_uInt16 *pRange, const sal_uInt16 nId)
check if ID is in range of attribute set IDs
Definition: swatrset.cxx:460
void Intersect(const SfxItemSet &rSet)
SwAttrPool * GetPool() const
Definition: swatrset.hxx:190
virtual std::unique_ptr< SfxItemSet > Clone(bool bItems=true, SfxItemPool *pToPool=nullptr) const override
Definition: swatrset.cxx:146
SwPageDesc * FindPageDesc(const OUString &rName, size_t *pPos=nullptr) const
Definition: docdesc.cxx:825
Base class for various Writer styles.
Definition: format.hxx:43
SwAttrSet * m_pNewSet
Definition: swatrset.hxx:164
SwNumRule * FindNumRulePtr(const OUString &rName) const
Definition: docnum.cxx:2416
virtual SwList * getListByName(const OUString &rListId) const =0
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
void CopyToModify(SwModify &rMod) const
Definition: swatrset.cxx:286
SwPageDesc * MakePageDesc(const OUString &rName, const SwPageDesc *pCpy=nullptr, bool bRegardLanguage=true, bool bBroadcast=false)
Definition: docdesc.cxx:642
sal_uInt16 Count() const
SwDoc * GetDoc()
Definition: node.hxx:702
void createAndAddSecondaryPools()
Definition: swatrset.cxx:59
const SwDoc * GetDoc() const
The document is set in SwAttrPool now, therefore you always can access it.
Definition: format.hxx:119
void ChgDefinedIn(const SwModify *pNew)
Definition: cellatr.hxx:65
int Intersect_BC(const SfxItemSet &rSet, SwAttrSet *pOld, SwAttrSet *pNew)
Definition: swatrset.cxx:222
SdrMetricItem makeSdrShadowYDistItem(long nDist)
constexpr sal_uInt16 POOLATTR_END(RES_UNKNOWNATR_END)
static SfxItemPool * CreatePool()
virtual bool SetFormatAttr(const SfxPoolItem &rAttr)
Definition: format.cxx:458
SfxItemPool * GetSecondaryPool() const
const SfxPoolItem * Put(const SfxPoolItem &rItem, sal_uInt16 nWhich)
void CopyPageDesc(const SwPageDesc &rSrcDesc, SwPageDesc &rDstDesc, bool bCopyPoolIds=true)
Copy the complete PageDesc - beyond document and "deep"! Optionally copying of PoolFormatId, -HlpId can be prevented.
Definition: docfmt.cxx:1408
static void Free(SfxItemPool *pPool)
constexpr TypedWhichId< SwTableBoxFormula > RES_BOXATR_FORMULA(149)
void SetInvalidRule(bool bFlag)
Definition: number.cxx:907
virtual bool SetAttr(const SfxPoolItem &)
made virtual
Definition: node.cxx:1540
SfxItemInfo aSlotTab[]
Definition: init.cxx:268
virtual ~SwAttrPool() override
Definition: swatrset.cxx:53
virtual std::unique_ptr< SfxItemSet > Clone(bool bItems=true, SfxItemPool *pToPool=nullptr) const
SwCharFormat * CopyCharFormat(const SwCharFormat &)
copy the char format
Definition: docfmt.cxx:1156
SwDfltAttrTab aAttrTab
const SwFormatPageDesc & GetPageDesc(bool=true) const
Definition: fmtpdsc.hxx:76
const SwDoc * GetDoc() const
Definition: swatrset.hxx:204
sal_uInt16 MakeNumRule(const OUString &rName, const SwNumRule *pCpy=nullptr, bool bBroadcast=false, const SvxNumberFormat::SvxNumPositionAndSpaceMode eDefaultNumberFormatPositionAndSpaceMode=SvxNumberFormat::LABEL_WIDTH_AND_POSITION)
Definition: docnum.cxx:2450
SwAttrSet * m_pOldSet
Definition: swatrset.hxx:164
SwAttrSet(SwAttrPool &, sal_uInt16 nWhich1, sal_uInt16 nWhich2)
Definition: swatrset.cxx:131
const sal_uInt16 * GetRanges() const
constexpr TypedWhichId< SwFormatAutoFormat > RES_PARATR_LIST_AUTOFMT(87)
const SwCharFormat * GetCharFormat() const
Definition: paratr.hxx:98
void SetNumOffset(const ::std::optional< sal_uInt16 > &oNum)
Definition: fmtpdsc.hxx:66
const SwAttrSet & GetAttrSet() const
For querying the attribute array.
Definition: format.hxx:116
If SwFormatDrop is a Client, it is the CharFormat that describes the font for the DropCaps...
Definition: paratr.hxx:50
IDocumentListsAccess const & getIDocumentListsAccess() const
Definition: doc.cxx:292
bool IsTextNode() const
Definition: node.hxx:636
sal_uInt16 ClearItem_BC(sal_uInt16 nWhich, SwAttrSet *pOld, SwAttrSet *pNew)
Definition: swatrset.cxx:199
constexpr TypedWhichId< SfxStringItem > RES_PARATR_LIST_ID(RES_PARATR_LIST_BEGIN)
void SetSecondaryPool(SfxItemPool *pPool)
void SetCharFormat(SwCharFormat *pNew)
Definition: paratr.cxx:64
constexpr TypedWhichId< SwFormatAnchor > RES_ANCHOR(104)
const SwAttrPool & GetAttrPool() const
Definition: doc.hxx:1315
SdrMetricItem makeSdrShadowXDistItem(long nDist)
void SetPoolDefaultItem(const SfxPoolItem &)