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;
267  if( nullptr != ( pCharFormat = const_cast<SwFormatDrop*>(static_cast<const SwFormatDrop*>(pItem))->GetCharFormat() )
268  && GetPool() != pCharFormat->GetAttrSet().GetPool() )
269  {
270  pCharFormat = GetDoc()->CopyCharFormat( *pCharFormat );
271  const_cast<SwFormatDrop*>(static_cast<const SwFormatDrop*>(pItem))->SetCharFormat( pCharFormat );
272  }
273  const_cast<SwFormatDrop*>(static_cast<const SwFormatDrop*>(pItem))->ChgDefinedIn( pModify );
274  bSet = true;
275  }
276 
277  if( SfxItemState::SET == GetItemState( RES_BOXATR_FORMULA, false, &pItem ) &&
278  static_cast<const SwTableBoxFormula*>(pItem)->GetDefinedIn() != pModify )
279  {
280  const_cast<SwTableBoxFormula*>(static_cast<const SwTableBoxFormula*>(pItem))->ChgDefinedIn( pModify );
281  bSet = true;
282  }
283 
284  return bSet;
285 }
286 
288 {
289  // copy attributes across multiple documents if needed
290  SwContentNode* pCNd = dynamic_cast<SwContentNode*>( &rMod );
291  SwFormat* pFormat = dynamic_cast<SwFormat*>( &rMod );
292 
293  if( pCNd || pFormat )
294  {
295  if( Count() )
296  {
297  // #i92811#
298  std::unique_ptr<SfxStringItem> pNewListIdItem;
299 
300  const SfxPoolItem* pItem;
301  const SwDoc *pSrcDoc = GetDoc();
302  SwDoc *pDstDoc = pCNd ? pCNd->GetDoc() : pFormat->GetDoc();
303 
304  // Does the NumRule has to be copied?
305  if( pSrcDoc != pDstDoc &&
306  SfxItemState::SET == GetItemState( RES_PARATR_NUMRULE, false, &pItem ) )
307  {
308  const OUString& rNm = static_cast<const SwNumRuleItem*>(pItem)->GetValue();
309  if( !rNm.isEmpty() )
310  {
311  SwNumRule* pDestRule = pDstDoc->FindNumRulePtr( rNm );
312  if( pDestRule )
313  pDestRule->SetInvalidRule( true );
314  else
315  pDstDoc->MakeNumRule( rNm, pSrcDoc->FindNumRulePtr( rNm ) );
316  }
317  }
318 
319  // copy list and if needed also the corresponding list style
320  // for text nodes
321  if ( pSrcDoc != pDstDoc &&
322  pCNd && pCNd->IsTextNode() &&
323  GetItemState( RES_PARATR_LIST_ID, false, &pItem ) == SfxItemState::SET )
324  {
325  auto pStrItem = dynamic_cast<const SfxStringItem*>(pItem);
326  assert(pStrItem);
327  const OUString& sListId = pStrItem->GetValue();
328  if ( !sListId.isEmpty() &&
329  !pDstDoc->getIDocumentListsAccess().getListByName( sListId ) )
330  {
331  const SwList* pList = pSrcDoc->getIDocumentListsAccess().getListByName( sListId );
332  // copy list style, if needed
333  const OUString& sDefaultListStyleName =
334  pList->GetDefaultListStyleName();
335  // #i92811#
336  const SwNumRule* pDstDocNumRule =
337  pDstDoc->FindNumRulePtr( sDefaultListStyleName );
338  if ( !pDstDocNumRule )
339  {
340  pDstDoc->MakeNumRule( sDefaultListStyleName,
341  pSrcDoc->FindNumRulePtr( sDefaultListStyleName ) );
342  }
343  else
344  {
345  const SwNumRule* pSrcDocNumRule =
346  pSrcDoc->FindNumRulePtr( sDefaultListStyleName );
347  // If list id of text node equals the list style's
348  // default list id in the source document, the same
349  // should be hold in the destination document.
350  // Thus, create new list id item.
351  if (pSrcDocNumRule && sListId == pSrcDocNumRule->GetDefaultListId())
352  {
353  pNewListIdItem.reset(new SfxStringItem (
355  pDstDocNumRule->GetDefaultListId() ));
356  }
357  }
358  // check again, if list exist, because <SwDoc::MakeNumRule(..)>
359  // could have also created it.
360  if ( pNewListIdItem == nullptr &&
361  !pDstDoc->getIDocumentListsAccess().getListByName( sListId ) )
362  {
363  // copy list
364  pDstDoc->getIDocumentListsAccess().createList( sListId, sDefaultListStyleName );
365  }
366  }
367  }
368 
369  std::unique_ptr< SfxItemSet > tmpSet;
370 
371  const SwPageDesc* pPgDesc;
372  if( pSrcDoc != pDstDoc && SfxItemState::SET == GetItemState(
373  RES_PAGEDESC, false, &pItem ) &&
374  nullptr != ( pPgDesc = static_cast<const SwFormatPageDesc*>(pItem)->GetPageDesc()) )
375  {
376  tmpSet.reset(new SfxItemSet(*this));
377 
378  SwPageDesc* pDstPgDesc = pDstDoc->FindPageDesc(pPgDesc->GetName());
379  if( !pDstPgDesc )
380  {
381  pDstPgDesc = pDstDoc->MakePageDesc(pPgDesc->GetName());
382  pDstDoc->CopyPageDesc( *pPgDesc, *pDstPgDesc );
383  }
384  SwFormatPageDesc aDesc( pDstPgDesc );
385  aDesc.SetNumOffset( static_cast<const SwFormatPageDesc*>(pItem)->GetNumOffset() );
386  tmpSet->Put( aDesc );
387  }
388 
389  if( pSrcDoc != pDstDoc && SfxItemState::SET == GetItemState( RES_ANCHOR, false, &pItem )
390  && static_cast< const SwFormatAnchor* >( pItem )->GetContentAnchor() != nullptr )
391  {
392  if( !tmpSet )
393  tmpSet.reset( new SfxItemSet( *this ));
394  // Anchors at any node position cannot be copied to another document, because the SwPosition
395  // would still point to the old document. It needs to be fixed up explicitly.
396  tmpSet->ClearItem( RES_ANCHOR );
397  }
398 
399  if (pSrcDoc != pDstDoc &&
400  SfxItemState::SET == GetItemState(RES_PARATR_LIST_AUTOFMT, false, &pItem))
401  {
402  SfxItemSet const& rAutoStyle(*static_cast<SwFormatAutoFormat const&>(*pItem).GetStyleHandle());
403  std::shared_ptr<SfxItemSet> const pNewSet(
404  rAutoStyle.SfxItemSet::Clone(true, &pDstDoc->GetAttrPool()));
406  // TODO: for ODF export we'd need to add it to the autostyle pool
407  item.SetStyleHandle(pNewSet);
408  if (!tmpSet)
409  {
410  tmpSet.reset(new SfxItemSet(*this));
411  }
412  tmpSet->Put(item);
413  }
414 
415  if( tmpSet )
416  {
417  if( pCNd )
418  {
419  // #i92811#
420  if ( pNewListIdItem != nullptr )
421  {
422  tmpSet->Put( *pNewListIdItem );
423  }
424  pCNd->SetAttr( *tmpSet );
425  }
426  else
427  {
428  pFormat->SetFormatAttr( *tmpSet );
429  }
430  }
431  else if( pCNd )
432  {
433  // #i92811#
434  if ( pNewListIdItem != nullptr )
435  {
436  SfxItemSet aTmpSet( *this );
437  aTmpSet.Put( *pNewListIdItem );
438  pCNd->SetAttr( aTmpSet );
439  }
440  else
441  {
442  pCNd->SetAttr( *this );
443  }
444  }
445  else
446  {
447  pFormat->SetFormatAttr( *this );
448  }
449  }
450  }
451 #if OSL_DEBUG_LEVEL > 0
452  else
453  OSL_FAIL("neither Format nor ContentNode - no Attributes copied");
454 #endif
455 }
456 
458 bool IsInRange( const sal_uInt16* pRange, const sal_uInt16 nId )
459 {
460  while( *pRange )
461  {
462  if( *pRange <= nId && nId <= *(pRange+1) )
463  return true;
464  pRange += 2;
465  }
466  return false;
467 }
468 
469 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void ChgDefinedIn(const SwModify *pNew)
Definition: fmtpdsc.hxx:70
Pagedescriptor Client of SwPageDesc that is "described" by the attribute.
Definition: fmtpdsc.hxx:35
SW_DLLPUBLIC const OUString & GetDefaultListStyleName() const
Definition: list.cxx:233
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
const OUString & GetDefaultListId() const
Definition: numrule.hxx:191
Definition: list.hxx:35
void SetStyleHandle(const std::shared_ptr< SfxItemSet > &pHandle)
Definition: fmtautofmt.hxx:48
Definition: doc.hxx:185
sal_uInt16 FirstWhich()
#define RES_PARATR_LIST_ID
Definition: hintids.hxx:186
void Delete()
void FreezeIdRanges()
void ChgDefinedIn(const SwModify *pNew)
Definition: paratr.hxx:106
sal_uInt16 NextWhich()
const OUString & GetName() const
Definition: pagedesc.hxx:187
#define POOLATTR_END
Definition: hintids.hxx:65
void PutChgd(const SfxPoolItem &rI)
Definition: swatrset.hxx:169
bool Put_BC(const SfxPoolItem &rAttr, SwAttrSet *pOld, SwAttrSet *pNew)
Definition: swatrset.cxx:179
const sal_uInt16 * GetFrozenIdRanges() const
bool SetModifyAtAttr(const SwModify *pModify)
special treatment for some attributes
Definition: swatrset.cxx:249
void removeAndDeleteSecondaryPools()
Definition: swatrset.cxx:102
void SetNumOffset(const ::boost::optional< sal_uInt16 > &oNum)
Definition: fmtpdsc.hxx:66
bool IsInRange(const sal_uInt16 *pRange, const sal_uInt16 nId)
check if ID is in range of attribute set IDs
Definition: swatrset.cxx:458
#define RES_PARATR_NUMRULE
Definition: hintids.hxx:171
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:822
Base class for various Writer styles.
Definition: format.hxx:43
SwAttrSet * m_pNewSet
Definition: swatrset.hxx:164
#define POOLATTR_BEGIN
Definition: hintids.hxx:64
SwNumRule * FindNumRulePtr(const OUString &rName) const
Definition: docnum.cxx:2414
virtual SwList * getListByName(const OUString &rListId) const =0
sal_uInt16 ClearItem(sal_uInt16 nWhich=0)
#define RES_ANCHOR
Definition: hintids.hxx:211
SfxItemState GetItemState(sal_uInt16 nWhich, bool bSrchInParent=true, const SfxPoolItem **ppItem=nullptr) const
void CopyToModify(SwModify &rMod) const
Definition: swatrset.cxx:287
SwPageDesc * MakePageDesc(const OUString &rName, const SwPageDesc *pCpy=nullptr, bool bRegardLanguage=true, bool bBroadcast=false)
Definition: docdesc.cxx:639
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)
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:1399
static void Free(SfxItemPool *pPool)
void SetInvalidRule(bool bFlag)
Definition: number.cxx:855
virtual bool SetAttr(const SfxPoolItem &)
made virtual
Definition: node.cxx:1484
SfxItemInfo aSlotTab[]
Definition: init.cxx:269
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:1148
#define RES_PARATR_LIST_AUTOFMT
Definition: hintids.hxx:191
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:2448
SwAttrSet * m_pOldSet
Definition: swatrset.hxx:164
SwAttrSet(SwAttrPool &, sal_uInt16 nWhich1, sal_uInt16 nWhich2)
Definition: swatrset.cxx:131
const sal_uInt16 * GetRanges() const
#define RES_PARATR_DROP
Definition: hintids.hxx:169
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
#define RES_PAGEDESC
Definition: hintids.hxx:200
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
void SetSecondaryPool(SfxItemPool *pPool)
void SetCharFormat(SwCharFormat *pNew)
Definition: paratr.cxx:66
const SwAttrPool & GetAttrPool() const
Definition: doc.hxx:1309
SdrMetricItem makeSdrShadowXDistItem(long nDist)
void SetPoolDefaultItem(const SfxPoolItem &)
#define RES_BOXATR_FORMULA
Definition: hintids.hxx:264