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