summaryrefslogtreecommitdiff
path: root/binfilter/bf_svx/source/svdraw/svx_svdoattr.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'binfilter/bf_svx/source/svdraw/svx_svdoattr.cxx')
-rw-r--r--binfilter/bf_svx/source/svdraw/svx_svdoattr.cxx1049
1 files changed, 1049 insertions, 0 deletions
diff --git a/binfilter/bf_svx/source/svdraw/svx_svdoattr.cxx b/binfilter/bf_svx/source/svdraw/svx_svdoattr.cxx
new file mode 100644
index 000000000000..9fa4811a2937
--- /dev/null
+++ b/binfilter/bf_svx/source/svdraw/svx_svdoattr.cxx
@@ -0,0 +1,1049 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include "xpool.hxx"
+#include "svdio.hxx"
+#include "svdmodel.hxx"
+#include "svdpage.hxx"
+#include "svdpool.hxx"
+#include "svdocapt.hxx"
+
+#include <bf_svtools/smplhint.hxx>
+
+#include "xlnstwit.hxx"
+
+#include "xlnedwit.hxx"
+
+#include <eeitemid.hxx>
+
+#include "eeitem.hxx"
+
+#include <xlnstcit.hxx>
+
+#include <xlnwtit.hxx>
+
+
+#include <bf_svtools/style.hxx>
+
+#include <bf_svtools/whiter.hxx>
+
+
+#include <xflclit.hxx>
+
+
+#include <xfltrit.hxx>
+
+#include <xlnedcit.hxx>
+
+#include <adjitem.hxx>
+
+#include "xflbckit.hxx"
+
+
+#include "xbtmpit.hxx"
+#include "xlndsit.hxx"
+#include "xlnedit.hxx"
+#include "xflftrit.hxx"
+#include "xflhtit.hxx"
+#include "xlnstit.hxx"
+#include "xoutx.hxx"
+namespace binfilter {
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/*N*/ TYPEINIT1(SdrAttrObj,SdrObject);
+
+/*N*/ SdrAttrObj::SdrAttrObj()
+/*N*/ : mpStyleSheet(NULL),
+/*N*/ mpObjectItemSet(NULL)
+/*N*/ {
+/*N*/ }
+
+/*N*/ SdrAttrObj::~SdrAttrObj()
+/*N*/ {
+/*N*/ ImpDeleteItemSet();
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ImpDeleteItemSet()
+/*N*/ {
+/*N*/ if(mpObjectItemSet)
+/*N*/ {
+/*N*/ if(GetStyleSheet())
+/*N*/ RemoveStyleSheet();
+/*N*/
+/*N*/ delete mpObjectItemSet;
+/*N*/ mpObjectItemSet = 0L;
+/*N*/ }
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ImpForceItemSet()
+/*N*/ {
+/*N*/ if(!mpObjectItemSet)
+/*N*/ {
+/*N*/ SfxItemPool* pPool = GetItemPool();
+/*N*/ mpObjectItemSet = CreateNewItemSet(*pPool);
+/*N*/ ForceDefaultAttr();
+/*N*/ }
+/*N*/ }
+
+/*N*/ const Rectangle& SdrAttrObj::GetSnapRect() const
+/*N*/ {
+/*N*/ if(bSnapRectDirty)
+/*N*/ {
+/*N*/ ((SdrAttrObj*)this)->RecalcSnapRect();
+/*N*/ ((SdrAttrObj*)this)->bSnapRectDirty = FALSE;
+/*N*/ }
+/*N*/ return maSnapRect;
+/*N*/ }
+
+/*N*/ void SdrAttrObj::operator=(const SdrObject& rObj)
+/*N*/ {
+/*N*/ // call parent
+/*N*/ SdrObject::operator=(rObj);
+/*N*/
+/*N*/ SdrAttrObj* pAO = PTR_CAST(SdrAttrObj, (SdrObject*)&rObj);
+/*N*/ if(pAO)
+/*N*/ {
+/*N*/ ImpDeleteItemSet();
+/*N*/
+/*N*/ if(pAO->mpObjectItemSet)
+/*N*/ mpObjectItemSet = pAO->mpObjectItemSet->Clone(TRUE);
+/*N*/
+/*N*/ if(pAO->GetStyleSheet())
+/*?*/ AddStyleSheet(pAO->GetStyleSheet(), TRUE);
+/*N*/ }
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ReadData(const SdrObjIOHeader& rHead, SvStream& rIn)
+/*N*/ {
+/*N*/ if(rIn.GetError())
+/*N*/ return;
+/*N*/
+/*N*/ // call parent
+/*N*/ SdrObject::ReadData(rHead, rIn);
+/*N*/
+/*N*/ SdrDownCompat aCompat(rIn, STREAM_READ);
+/*N*/ #ifdef DBG_UTIL
+/*N*/ aCompat.SetID("SdrAttrObj");
+/*N*/ #endif
+/*N*/ SfxItemPool* pPool = GetItemPool();
+/*N*/
+/*N*/ if(pPool)
+/*N*/ {
+/*N*/ sal_uInt16 nSetID;
+/*N*/
+/*N*/ // #89025# if mpObjectItemSet is set and contains items, it is because of ForceDefaultAttr()
+/*N*/ // and the items need to be deleted.
+/*N*/ if(mpObjectItemSet && mpObjectItemSet->Count())
+/*N*/ mpObjectItemSet->ClearItem(0);
+/*N*/
+/*N*/ // Do this initialization AFTER the above fix
+/*N*/ SfxItemSet aNewSet(GetItemSet());
+/*N*/
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ { sal_uInt16 nWhichDum; rIn >> nWhichDum; }
+/*N*/ nSetID = XATTRSET_LINE;
+/*N*/ const XLineAttrSetItem* pLineAttr = (const XLineAttrSetItem*)pPool->LoadSurrogate(rIn, nSetID, 0);
+/*N*/ if(pLineAttr)
+/*N*/ aNewSet.Put(pLineAttr->GetItemSet());
+/*N*/
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ { sal_uInt16 nWhichDum; rIn >> nWhichDum; }
+/*N*/ nSetID = XATTRSET_FILL;
+/*N*/ const XFillAttrSetItem* pFillAttr = (const XFillAttrSetItem*)pPool->LoadSurrogate(rIn, nSetID, 0);
+/*N*/ if(pFillAttr)
+/*N*/ aNewSet.Put(pFillAttr->GetItemSet());
+/*N*/
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ { sal_uInt16 nWhichDum; rIn >> nWhichDum; }
+/*N*/ nSetID = XATTRSET_TEXT;
+/*N*/ const XTextAttrSetItem* pTextAttr = (const XTextAttrSetItem*)pPool->LoadSurrogate(rIn, nSetID, 0);
+/*N*/ if(pTextAttr)
+/*N*/ aNewSet.Put(pTextAttr->GetItemSet());
+/*N*/
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ { sal_uInt16 nWhichDum; rIn >> nWhichDum; }
+/*N*/ nSetID = SDRATTRSET_SHADOW;
+/*N*/ const SdrShadowSetItem* pShadAttr = (const SdrShadowSetItem*)pPool->LoadSurrogate(rIn, nSetID, 0);
+/*N*/ if(pShadAttr)
+/*N*/ aNewSet.Put(pShadAttr->GetItemSet());
+/*N*/
+/*N*/ if(rHead.GetVersion() >= 5)
+/*N*/ {
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ { sal_uInt16 nWhichDum; rIn >> nWhichDum; }
+/*N*/ nSetID = SDRATTRSET_OUTLINER;
+/*N*/ const SdrOutlinerSetItem* pOutlAttr = (const SdrOutlinerSetItem*)pPool->LoadSurrogate(rIn, nSetID, 0);
+/*N*/ if(pOutlAttr)
+/*N*/ aNewSet.Put(pOutlAttr->GetItemSet());
+/*N*/ }
+/*N*/
+/*N*/ if(rHead.GetVersion() >= 6)
+/*N*/ {
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ { sal_uInt16 nWhichDum; rIn >> nWhichDum; }
+/*N*/ nSetID = SDRATTRSET_MISC;
+/*N*/ const SdrMiscSetItem* pMiscAttr = (const SdrMiscSetItem*)pPool->LoadSurrogate(rIn, nSetID, 0);
+/*N*/ if(pMiscAttr)
+/*N*/ aNewSet.Put(pMiscAttr->GetItemSet());
+/*N*/ }
+/*N*/
+/*N*/ SetItemSet(aNewSet);
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ // an den Surrogaten und ggf. auch Whiches vorbeiseeken
+/*N*/ // ganz zu anfang waren es 4 SetItems
+/*N*/ sal_uInt16 nAnz(4);
+/*N*/
+/*N*/ if(rHead.GetVersion() >= 5)
+/*N*/ nAnz++;
+/*N*/
+/*N*/ if(rHead.GetVersion() >= 6)
+/*N*/ nAnz++;
+/*N*/
+/*N*/ nAnz *= sizeof(sal_uInt16);
+/*N*/
+/*N*/ if(rHead.GetVersion() < 11)
+/*N*/ nAnz *= 2;
+/*N*/
+/*N*/ rIn.SeekRel(nAnz);
+/*N*/ }
+/*N*/
+/*N*/ // TextToContour: altes Format(Flag) in neues Format(Item) wandeln
+/*N*/ if(rHead.GetVersion() <= 4 && pPool)
+/*N*/ {
+/*?*/ SetItem(XFormTextStyleItem(XFT_NONE));
+/*N*/ }
+/*N*/
+ // Fuer die StyleSheetgeschichte gehoert eigentlich auch noch eine
+ // Versionsabfrage hierher.
+ // Name und Familie des StyleSheet einlesen, in Pointer auf StyleSheet
+ // umwandeln lassen (SB)
+/*N*/ XubString aStyleSheetName;
+/*N*/ SfxStyleFamily eFamily;
+/*N*/ sal_uInt16 nRead;
+/*N*/
+/*N*/ // UNICODE: rIn>>aStyleSheetName;
+/*N*/ rIn.ReadByteString(aStyleSheetName);
+/*N*/
+/*N*/ if(aStyleSheetName.Len())
+/*N*/ {
+/*N*/ rIn >> nRead;
+/*N*/ eFamily = (SfxStyleFamily)(int)nRead;
+/*N*/
+/*N*/ // ab Version 1 wird der CharacterSet gelesen, ab V11 nicht mehr
+/*N*/ if(rHead.GetVersion() > 0 && rHead.GetVersion() < 11)
+/*N*/ {
+/*N*/ sal_Int16 nCharSet;
+/*N*/ rIn >> nCharSet;
+/*N*/ //aStyleSheetName.Convert((CharSet)nCharSet);
+/*N*/ // nicht mehr noetig, da ab Vers 11 der CharSet bereits am
+/*N*/ // Stream gesetzt wird.
+/*N*/ }
+/*N*/
+/*N*/ DBG_ASSERT(pModel, "SdrAttrObj::ReadData(): pModel=NULL, StyleSheet kann nicht gesetzt werden!");
+/*N*/ if(pModel)
+/*N*/ {
+/*N*/ SfxStyleSheetBasePool *pPool = pModel->GetStyleSheetPool();
+/*N*/ if(pPool)
+/*N*/ {
+/*N*/ SfxStyleSheet *pTmpStyleSheet = (SfxStyleSheet*)pPool->Find(aStyleSheetName, eFamily);
+/*N*/ DBG_ASSERT(pTmpStyleSheet, "SdrAttrObj::ReadData(): StyleSheet nicht gefunden");
+/*N*/
+/*N*/ if(pTmpStyleSheet)
+/*N*/ AddStyleSheet(pTmpStyleSheet, TRUE);
+/*N*/ }
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// pre- and postprocessing for objects for saving
+
+/*N*/ void SdrAttrObj::PreSave()
+/*N*/ {
+/*N*/ // call parent
+/*N*/ SdrObject::PreSave();
+/*N*/
+/*N*/ // prepare SetItems for storage
+/*N*/ const SfxItemSet& rSet = GetUnmergedItemSet();
+/*N*/ const SfxItemSet* pParent = GetStyleSheet() ? &GetStyleSheet()->GetItemSet() : 0L;
+/*N*/
+/*N*/ XLineAttrSetItem aLineAttr(rSet.GetPool());
+/*N*/ aLineAttr.GetItemSet().Put(rSet);
+/*N*/ aLineAttr.GetItemSet().SetParent(pParent);
+/*N*/ mpObjectItemSet->Put(aLineAttr);
+/*N*/
+/*N*/ XFillAttrSetItem aFillAttr(rSet.GetPool());
+/*N*/ aFillAttr.GetItemSet().Put(rSet);
+/*N*/ aFillAttr.GetItemSet().SetParent(pParent);
+/*N*/ mpObjectItemSet->Put(aFillAttr);
+/*N*/
+/*N*/ XTextAttrSetItem aTextAttr(rSet.GetPool());
+/*N*/ aTextAttr.GetItemSet().Put(rSet);
+/*N*/ aTextAttr.GetItemSet().SetParent(pParent);
+/*N*/ mpObjectItemSet->Put(aTextAttr);
+/*N*/
+/*N*/ SdrShadowSetItem aShadAttr(rSet.GetPool());
+/*N*/ aShadAttr.GetItemSet().Put(rSet);
+/*N*/ aShadAttr.GetItemSet().SetParent(pParent);
+/*N*/ mpObjectItemSet->Put(aShadAttr);
+/*N*/
+/*N*/ SdrOutlinerSetItem aOutlAttr(rSet.GetPool());
+/*N*/ aOutlAttr.GetItemSet().Put(rSet);
+/*N*/ aOutlAttr.GetItemSet().SetParent(pParent);
+/*N*/ mpObjectItemSet->Put(aOutlAttr);
+/*N*/
+/*N*/ SdrMiscSetItem aMiscAttr(rSet.GetPool());
+/*N*/ aMiscAttr.GetItemSet().Put(rSet);
+/*N*/ aMiscAttr.GetItemSet().SetParent(pParent);
+/*N*/ mpObjectItemSet->Put(aMiscAttr);
+/*N*/ }
+
+/*N*/ void SdrAttrObj::PostSave()
+/*N*/ {
+/*N*/ // call parent
+/*N*/ SdrObject::PostSave();
+/*N*/
+/*N*/ // remove SetItems from local itemset
+/*N*/ ((SdrAttrObj*)this)->ImpForceItemSet();
+/*N*/ mpObjectItemSet->ClearItem(XATTRSET_LINE);
+/*N*/ mpObjectItemSet->ClearItem(XATTRSET_FILL);
+/*N*/ mpObjectItemSet->ClearItem(XATTRSET_TEXT);
+/*N*/ mpObjectItemSet->ClearItem(SDRATTRSET_SHADOW);
+/*N*/ mpObjectItemSet->ClearItem(SDRATTRSET_OUTLINER);
+/*N*/ mpObjectItemSet->ClearItem(SDRATTRSET_MISC);
+/*N*/ }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/*N*/ void SdrAttrObj::WriteData(SvStream& rOut) const
+/*N*/ {
+/*N*/ // call parent
+/*N*/ SdrObject::WriteData(rOut);
+/*N*/
+/*N*/ // Fuer Abwaertskompatibilitaet (Lesen neuer Daten mit altem Code)
+/*N*/ SdrDownCompat aCompat(rOut, STREAM_WRITE);
+/*N*/ #ifdef DBG_UTIL
+/*N*/ aCompat.SetID("SdrAttrObj");
+/*N*/ #endif
+/*N*/ SfxItemPool* pPool = GetItemPool();
+/*N*/
+/*N*/ if(pPool)
+/*N*/ {
+/*N*/ const SfxItemSet& rSet = GetUnmergedItemSet();
+/*N*/
+/*N*/ pPool->StoreSurrogate(rOut, &rSet.Get(XATTRSET_LINE));
+/*N*/ pPool->StoreSurrogate(rOut, &rSet.Get(XATTRSET_FILL));
+/*N*/ pPool->StoreSurrogate(rOut, &rSet.Get(XATTRSET_TEXT));
+/*N*/ pPool->StoreSurrogate(rOut, &rSet.Get(SDRATTRSET_SHADOW));
+/*N*/ pPool->StoreSurrogate(rOut, &rSet.Get(SDRATTRSET_OUTLINER));
+/*N*/ pPool->StoreSurrogate(rOut, &rSet.Get(SDRATTRSET_MISC));
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*?*/ rOut << sal_uInt16(SFX_ITEMS_NULL);
+/*?*/ rOut << sal_uInt16(SFX_ITEMS_NULL);
+/*?*/ rOut << sal_uInt16(SFX_ITEMS_NULL);
+/*?*/ rOut << sal_uInt16(SFX_ITEMS_NULL);
+/*?*/ rOut << sal_uInt16(SFX_ITEMS_NULL);
+/*?*/ rOut << sal_uInt16(SFX_ITEMS_NULL);
+/*N*/ }
+
+ // StyleSheet-Pointer als Name, Familie abspeichern
+ // wenn kein StyleSheet vorhanden: leeren String speichern
+/*N*/ if(GetStyleSheet())
+/*N*/ {
+/*N*/ // UNICODE: rOut << pStyleSheet->GetName();
+/*N*/ rOut.WriteByteString(GetStyleSheet()->GetName());
+/*N*/ rOut << (sal_uInt16)(int)(GetStyleSheet()->GetFamily());
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ // UNICODE: rOut << String();
+/*N*/ rOut.WriteByteString(String());
+/*N*/ }
+/*N*/ }
+
+
+/*N*/ void SdrAttrObj::SetModel(SdrModel* pNewModel)
+/*N*/ {
+/*N*/ SdrModel* pOldModel = pModel;
+/*N*/
+/*N*/ // test for correct pool in ItemSet; move to new pool if necessary
+/*N*/ if(pNewModel && mpObjectItemSet && mpObjectItemSet->GetPool() != &pNewModel->GetItemPool())
+/*N*/ MigrateItemPool(mpObjectItemSet->GetPool(), &pNewModel->GetItemPool(), pNewModel);
+/*N*/
+/*N*/ // call parent
+/*N*/ SdrObject::SetModel(pNewModel);
+/*N*/
+/*N*/ if(pOldModel != pNewModel && pNewModel && !pNewModel->IsLoading())
+/*N*/ {
+/*N*/
+/*N*/ // fuer ein bereits "lebendes" Model die Attribute von einem Pool in den anderen schieben
+/*N*/ if(pOldModel)
+/*N*/ {DBG_BF_ASSERT(0, "STRIP"); //STRIP001
+/*N*/ }
+/*N*/
+/*N*/ // Jedes Objekt bekommt initial den DefaultStyleSheet
+/*N*/ // des Model, falls noch kein StyleSheet gesetzt.
+/*N*/ if(mpObjectItemSet && !GetStyleSheet() && pModel && !pModel->IsLoading())
+/*N*/ NbcSetStyleSheet(pModel->GetDefaultStyleSheet(), TRUE);
+
+/* this code was removed because NbcSetStyleSheet called with TRUE does not
+ alter the hard attributes. So they don't need to be restored, a useless
+ process that cost us up to 20% for xml import. Also there is a memory
+ leek with aSet.Put( *pItem->Clone() );
+ {
+ SfxStyleSheet* pDefSS = pModel->GetDefaultStyleSheet();
+
+ if(pDefSS)
+ {
+ SfxItemPool* pPool = GetItemPool();
+ if ( pPool )
+ {
+ // Take hard attributes
+ SfxItemSet aSet(*pPool,
+ SDRATTR_START,SDRATTR_NOTPERSIST_FIRST-1,
+ SDRATTR_NOTPERSIST_LAST+1, SDRATTR_END,
+ EE_ITEMS_START,EE_ITEMS_END,
+ 0,0);
+
+ const SfxItemSet& rItemSet = GetItemSet();
+
+ SfxWhichIter aIter( rItemSet );
+ sal_uInt16 nWhich( aIter.FirstWhich() );
+ const SfxPoolItem* pItem = NULL;
+
+ while( nWhich )
+ {
+ if( SFX_ITEM_SET == rItemSet.GetItemState( nWhich, FALSE, &pItem ) )
+ aSet.Put( *pItem->Clone() );
+ nWhich = aIter.NextWhich();
+ }
+ // Set the StyleSheet
+ NbcSetStyleSheet(pDefSS, TRUE);
+
+ // Set the hard attributes
+ SetItemSet( aSet );
+ }
+ else
+ NbcSetStyleSheet(pDefSS, TRUE);
+ }
+ }
+*/
+/*N*/ }
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ForceDefaultAttr()
+/*N*/ {
+/*N*/ SdrTextObj* pText = PTR_CAST(SdrTextObj, this);
+/*N*/ BOOL bTextFrame(pText && pText->IsTextFrame());
+/*N*/
+/*N*/ ImpForceItemSet();
+/*N*/ if(bTextFrame)
+/*N*/ {
+/*N*/ SdrCaptionObj* pCapt = PTR_CAST(SdrCaptionObj, this);
+/*N*/ BOOL bCaption(pCapt != 0L);
+/*N*/
+/*N*/ if(!bCaption)
+/*N*/ mpObjectItemSet->Put(XLineStyleItem(XLINE_NONE));
+/*N*/
+/*N*/ mpObjectItemSet->Put(XFillColorItem(String(), Color(COL_WHITE)));
+/*N*/ mpObjectItemSet->Put(XFillStyleItem(XFILL_NONE));
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ mpObjectItemSet->Put(SvxAdjustItem(SVX_ADJUST_CENTER));
+/*N*/ mpObjectItemSet->Put(SdrTextHorzAdjustItem(SDRTEXTHORZADJUST_CENTER));
+/*N*/ mpObjectItemSet->Put(SdrTextVertAdjustItem(SDRTEXTVERTADJUST_CENTER));
+/*N*/ }
+/*N*/ }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// ItemSet access
+
+/*N*/ const SfxItemSet& SdrAttrObj::GetItemSet() const
+/*N*/ {
+/*N*/ ((SdrAttrObj*)this)->ImpForceItemSet();
+/*N*/ return *mpObjectItemSet;
+/*N*/ }
+
+/*N*/ SfxItemSet* SdrAttrObj::CreateNewItemSet(SfxItemPool& rPool)
+/*N*/ {
+/*N*/ // include ALL items, 2D and 3D
+/*N*/ return new SfxItemSet(rPool,
+/*N*/ // ranges from SdrAttrObj
+/*N*/ SDRATTR_START, SDRATTRSET_SHADOW,
+/*N*/ SDRATTRSET_OUTLINER, SDRATTRSET_MISC,
+/*N*/ SDRATTR_TEXTDIRECTION, SDRATTR_TEXTDIRECTION,
+/*N*/
+/*N*/ // outliner and end
+/*N*/ EE_ITEMS_START, EE_ITEMS_END,
+/*N*/ 0, 0);
+/*N*/ }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// syntactical sugar for ItemSet accesses
+
+/*N*/ const SfxItemSet& SdrAttrObj::GetUnmergedItemSet() const
+/*N*/ {
+/*N*/ return SdrAttrObj::GetItemSet();
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem)
+/*N*/ {
+/*N*/ if(pNewItem)
+/*N*/ {
+/*N*/ const SfxPoolItem* pItem = pNewItem;
+/*N*/
+/*N*/ switch( nWhich )
+/*N*/ {
+/*N*/ case XATTR_FILLBITMAP:
+/*N*/ pItem = ((XFillBitmapItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ case XATTR_LINEDASH:
+/*N*/ pItem = ((XLineDashItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ case XATTR_LINESTART:
+/*N*/ pItem = ((XLineStartItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ case XATTR_LINEEND:
+/*N*/ pItem = ((XLineEndItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ case XATTR_FILLGRADIENT:
+/*N*/ pItem = ((XFillGradientItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ case XATTR_FILLFLOATTRANSPARENCE:
+/*N*/ // #85953# allow all kinds of XFillFloatTransparenceItem to be set
+/*N*/ pItem = ((XFillFloatTransparenceItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ case XATTR_FILLHATCH:
+/*N*/ pItem = ((XFillHatchItem*)pItem)->checkForUniqueItem( pModel );
+/*N*/ break;
+/*N*/ }
+/*N*/
+/*N*/ // set item
+/*N*/ if( pItem )
+/*N*/ {
+/*N*/ ((SdrAttrObj*)this)->ImpForceItemSet();
+/*N*/ mpObjectItemSet->Put(*pItem);
+/*N*/
+/*N*/ // delete item if it was a generated one
+/*N*/ if( pItem != pNewItem)
+/*N*/ delete (SfxPoolItem*)pItem;
+/*N*/ }
+/*N*/ }
+/*N*/ else
+/*N*/ {
+/*N*/ // clear item
+/*N*/ if(mpObjectItemSet)
+/*N*/ {
+/*N*/ mpObjectItemSet->ClearItem(nWhich);
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ItemSetChanged(const SfxItemSet& rSet)
+/*N*/ {
+/*N*/ // call parent
+/*N*/ SdrObject::ItemSetChanged(rSet);
+/*N*/
+/*N*/ // own modifications
+/*N*/ bBoundRectDirty = TRUE;
+/*N*/ SetRectsDirty(TRUE);
+/*N*/ SetChanged();
+/*N*/ }
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+
+/*N*/ void __EXPORT SdrAttrObj::SFX_NOTIFY(SfxBroadcaster& rBC, const TypeId& rBCType,
+/*N*/ const SfxHint& rHint, const TypeId& rHintType)
+/*N*/ {
+/*N*/ SfxSimpleHint *pSimple = PTR_CAST(SfxSimpleHint, &rHint);
+/*N*/ BOOL bDataChg(pSimple && SFX_HINT_DATACHANGED == pSimple->GetId());
+/*N*/ SfxStyleSheetHint *pStyleHint = PTR_CAST(SfxStyleSheetHint, &rHint);
+/*N*/ BOOL bDying(pStyleHint
+/*N*/ && pStyleHint->GetStyleSheet() == GetStyleSheet()
+/*N*/ && ( SFX_STYLESHEET_INDESTRUCTION == pStyleHint->GetHint() ||
+/*N*/ SFX_STYLESHEET_ERASED == pStyleHint->GetHint() ));
+/*N*/
+/*N*/ if(bDataChg || bDying)
+/*N*/ {
+/*N*/ Rectangle aBoundRect0;
+/*N*/
+/*N*/ if(pUserCall)
+/*N*/ aBoundRect0 = GetBoundRect();
+/*N*/
+/*N*/ SfxStyleSheet* pNewStSh = NULL;
+/*N*/ BOOL bBoundRectDirty0 = bBoundRectDirty;
+/*N*/
+/*N*/ if(bDying)
+/*N*/ {
+/*N*/ // wenn es einen Parent gibt, wird jetzt der genommen
+/*N*/ if(pModel && HAS_BASE(SfxStyleSheet, GetStyleSheet()))
+/*N*/ {
+/*N*/ // Sonst ist pStyleSheet schon zu weit weggestorben
+/*N*/ pNewStSh = (SfxStyleSheet*)pModel->GetStyleSheetPool()->Find(
+/*N*/ GetStyleSheet()->GetParent(), GetStyleSheet()->GetFamily());
+/*N*/ }
+/*N*/
+/*N*/ // wenn es keinen Parent gibt, nehmen wir die Standardvorlage
+/*N*/ if(!pNewStSh && pModel)
+/*N*/ pNewStSh = pModel->GetDefaultStyleSheet();
+/*N*/
+/*N*/ // alten StyleSheet vor SendRepaintBroadcast entfernen #42276#
+/*N*/ RemoveStyleSheet(); // setzt bBoundRectDirty=TRUE
+/*N*/ }
+/*N*/
+/*N*/ if(!bBoundRectDirty0)
+/*N*/ {
+/*N*/ bBoundRectDirty = FALSE; // fuer Broadcast mit dem alten Rect
+/*N*/
+/*N*/ if(pPage && pPage->IsInserted())
+/*N*/ SendRepaintBroadcast(); // Erstmal mit dem alten Rect
+/*N*/
+/*N*/ bBoundRectDirty = TRUE;
+/*N*/ SetRectsDirty(TRUE); // Durch Vorlagenloeschung evtl. andere Linienbreite
+/*N*/ }
+/*N*/
+/*N*/ if(pNewStSh && !bDying)
+/*N*/ AddStyleSheet(pNewStSh, TRUE);
+/*N*/
+/*N*/ if(pPage && pPage->IsInserted())
+/*N*/ SendRepaintBroadcast();
+/*N*/
+/*N*/ SendUserCall(SDRUSERCALL_CHGATTR, aBoundRect0);
+/*N*/ }
+/*N*/ }
+
+/*N*/ SfxStyleSheet* SdrAttrObj::GetStyleSheet() const
+/*N*/ {
+/*N*/ return mpStyleSheet;
+/*N*/ }
+
+/*N*/ void SdrAttrObj::RemoveStyleSheet()
+/*N*/ {
+/*N*/ // Typ checken, weil bei dying sich der Typ abbaut (bis zum Broadcaster runter)
+/*N*/ if(GetStyleSheet() && HAS_BASE(SfxStyleSheet, mpStyleSheet))
+/*N*/ {
+/*N*/ EndListening(*mpStyleSheet);
+/*N*/ EndListening(mpStyleSheet->GetPool());
+/*N*/
+/*N*/ // das ItemSet der Vorlage ist jetzt nicht mehr Parent der
+/*N*/ // eigenen ItemSets
+/*N*/ if(mpObjectItemSet)
+/*N*/ mpObjectItemSet->SetParent(NULL);
+/*N*/
+/*N*/ bBoundRectDirty = TRUE;
+/*N*/ SetRectsDirty(TRUE);
+/*N*/ }
+/*N*/ mpStyleSheet = NULL;
+/*N*/ }
+
+/*N*/ void SdrAttrObj::AddStyleSheet(SfxStyleSheet* pNewStyleSheet, FASTBOOL bDontRemoveHardAttr)
+/*N*/ {
+/*N*/ // old StyleSheet is deleted
+/*N*/ DBG_ASSERT(!mpStyleSheet, "Old style sheet not deleted before setting new one (?)");
+/*N*/
+/*N*/ if(pNewStyleSheet)
+/*N*/ {
+/*N*/ mpStyleSheet = pNewStyleSheet;
+/*N*/
+/*N*/ // ItemSet is needed here, force it
+/*N*/ ImpForceItemSet();
+/*N*/
+/*N*/ // als Listener anmelden
+/*N*/ StartListening(pNewStyleSheet->GetPool());
+/*N*/ StartListening(*pNewStyleSheet);
+/*N*/
+/*N*/ // harte Attributierung dort loeschen, wo was in der Vorlage steht
+/*N*/ if(!bDontRemoveHardAttr)
+/*N*/ {
+/*N*/ const SfxItemSet& rStyle = pNewStyleSheet->GetItemSet();
+/*N*/ SfxWhichIter aIter(rStyle);
+/*N*/ sal_uInt16 nWhich = aIter.FirstWhich();
+/*N*/
+/*N*/ while(nWhich)
+/*N*/ {
+/*N*/ if(SFX_ITEM_SET == rStyle.GetItemState(nWhich))
+/*N*/ mpObjectItemSet->ClearItem(nWhich);
+/*N*/ nWhich = aIter.NextWhich();
+/*N*/ }
+/*N*/ }
+/*N*/
+/*N*/ // set new stylesheet as parent
+/*N*/ mpObjectItemSet->SetParent(&pNewStyleSheet->GetItemSet());
+/*N*/ }
+/*N*/ }
+
+/*N*/ void SdrAttrObj::NbcSetStyleSheet(SfxStyleSheet* pNewStyleSheet, FASTBOOL bDontRemoveHardAttr)
+/*N*/ {
+/*N*/ RemoveStyleSheet();
+/*N*/ AddStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
+/*N*/ bBoundRectDirty = TRUE;
+/*N*/ SetRectsDirty(TRUE);
+/*N*/ }
+
+/*N*/ void SdrAttrObj::SetStyleSheet(SfxStyleSheet* pNewStyleSheet, FASTBOOL bDontRemoveHardAttr)
+/*N*/ {
+/*N*/ Rectangle aBoundRect0;
+/*N*/
+/*N*/ if(pUserCall)
+/*N*/ aBoundRect0 = GetBoundRect();
+/*N*/
+/*N*/ SendRepaintBroadcast();
+/*N*/ NbcSetStyleSheet(pNewStyleSheet, bDontRemoveHardAttr);
+/*N*/ SetChanged();
+/*N*/ SendRepaintBroadcast();
+/*N*/ SendUserCall(SDRUSERCALL_CHGATTR, aBoundRect0);
+/*N*/ }
+
+/*N*/ INT32 SdrAttrObj::ImpGetLineWdt() const
+/*N*/ {
+/*N*/ const SfxItemSet& rSet = GetItemSet();
+/*N*/ XLineStyle eLine = ((XLineStyleItem&)(rSet.Get(XATTR_LINESTYLE))).GetValue();
+/*N*/
+/*N*/ if(XLINE_NONE == eLine)
+/*N*/ return 0; // Garkeine Linie da.
+/*N*/
+/*N*/ sal_Int32 nWdt = ((XLineWidthItem&)(rSet.Get(XATTR_LINEWIDTH))).GetValue();
+/*N*/
+/*N*/ return nWdt;
+/*N*/ }
+
+/*N*/ INT32 SdrAttrObj::ImpGetLineEndAdd() const
+/*N*/ {
+/*N*/ const SfxItemSet& rSet = GetItemSet();
+/*N*/ BOOL bStartSet(TRUE);
+/*N*/ BOOL bEndSet(TRUE);
+/*N*/
+/*N*/ if(SFX_ITEM_DONTCARE != rSet.GetItemState(XATTR_LINESTART))
+/*N*/ {
+/*N*/ String aStr(((const XLineStartItem&)rSet.Get(XATTR_LINESTART)).GetName());
+/*N*/ if(!aStr.Len())
+/*N*/ bStartSet = FALSE;
+/*N*/ }
+/*N*/
+/*N*/ if(rSet.GetItemState(XATTR_LINEEND) != SFX_ITEM_DONTCARE)
+/*N*/ {
+/*N*/ String aStr(((const XLineEndItem&)rSet.Get(XATTR_LINEEND)).GetName());
+/*N*/ if(!aStr.Len())
+/*N*/ bEndSet = FALSE;
+/*N*/ }
+/*N*/
+/*N*/ BOOL bLineEndSet = bStartSet || bEndSet;
+/*N*/ XLineStyle eLine = ((XLineStyleItem&)(rSet.Get(XATTR_LINESTYLE))).GetValue();
+/*N*/
+/*N*/ if(XLINE_NONE == eLine)
+/*N*/ return 0; // Garkeine Linie da.
+/*N*/
+/*N*/ // Strichstaerke
+/*N*/ sal_Int32 nLineWdt = ((XLineWidthItem&)(rSet.Get(XATTR_LINEWIDTH))).GetValue();
+/*N*/ sal_Int32 nSttWdt = ((const XLineStartWidthItem&)(rSet.Get(XATTR_LINESTARTWIDTH))).GetValue();
+/*N*/
+/*N*/ if(nSttWdt < 0)
+/*N*/ nSttWdt = -nLineWdt * nSttWdt / 100;
+/*N*/
+/*N*/ if(!bLineEndSet)
+/*N*/ nSttWdt = 0;
+
+/*N*/ BOOL bSttCenter = ((const XLineStartCenterItem&)(rSet.Get(XATTR_LINESTARTCENTER))).GetValue();
+/*N*/ sal_Int32 nSttHgt = 0;
+/*N*/
+/*N*/ if(bSttCenter)
+/*N*/ {
+/*N*/ // Linienende steht um die Haelfe ueber
+/*N*/ XPolygon aSttPoly(((const XLineStartItem&)(rSet.Get(XATTR_LINESTART))).GetValue());
+/*N*/ nSttHgt = XOutputDevice::InitLineStartEnd(aSttPoly, nSttWdt, bSttCenter);
+/*N*/ // InitLineStartEnd liefert bei bCenter=TRUE die halbe Hoehe
+/*N*/ }
+/*N*/
+/*N*/ nSttWdt++;
+/*N*/ nSttWdt /= 2;
+/*N*/
+/*N*/ // Lieber etwas mehr, dafuer keine Wurzel ziehen
+/*N*/ sal_Int32 nSttAdd = Max(nSttWdt, nSttHgt);
+/*N*/ nSttAdd *= 3;
+/*N*/ nSttAdd /= 2;
+/*N*/
+/*N*/ sal_Int32 nEndWdt = ((const XLineEndWidthItem&)(rSet.Get(XATTR_LINEENDWIDTH))).GetValue();
+/*N*/
+/*N*/ if(nEndWdt < 0)
+/*N*/ nEndWdt = -nLineWdt * nEndWdt / 100; // <0 = relativ
+/*N*/
+/*N*/ if(!bLineEndSet)
+/*N*/ nEndWdt = 0;
+/*N*/
+/*N*/ BOOL bEndCenter = ((const XLineEndCenterItem&)(rSet.Get(XATTR_LINEENDCENTER))).GetValue();
+/*N*/ sal_Int32 nEndHgt = 0;
+/*N*/
+/*N*/ if(bEndCenter)
+/*N*/ {
+/*N*/ // Linienende steht um die Haelfe ueber
+/*N*/ XPolygon aEndPoly(((const XLineEndItem&)(rSet.Get(XATTR_LINEEND))).GetValue());
+/*N*/ nEndHgt = XOutputDevice::InitLineStartEnd(aEndPoly, nEndWdt, bEndCenter);
+/*N*/ // InitLineStartEnd liefert bei bCenter=TRUE die halbe Hoehe
+/*N*/ }
+/*N*/
+/*N*/ nEndWdt++;
+/*N*/ nEndWdt /= 2;
+/*N*/
+/*N*/ // Lieber etwas mehr, dafuer keine Wurzel ziehen
+/*N*/ sal_Int32 nEndAdd = Max(nEndWdt, nEndHgt);
+/*N*/ nEndAdd *= 3;
+/*N*/ nEndAdd /= 2;
+/*N*/
+/*N*/ return Max(nSttAdd, nEndAdd);
+/*N*/ }
+
+//////////////////////////////////////////////////////////////////////////////
+
+
+/*N*/ FASTBOOL SdrAttrObj::ImpGetShadowDist(sal_Int32& nXDist, sal_Int32& nYDist) const
+/*N*/ {
+/*N*/ const SfxItemSet& rSet = GetItemSet();
+/*N*/
+/*N*/ nXDist = 0L;
+/*N*/ nYDist = 0L;
+/*N*/
+/*N*/ BOOL bShadOn = ((SdrShadowItem&)(rSet.Get(SDRATTR_SHADOW))).GetValue();
+/*N*/ if(bShadOn)
+/*N*/ {
+/*N*/ nXDist = ((SdrShadowXDistItem&)(rSet.Get(SDRATTR_SHADOWXDIST))).GetValue();
+/*N*/ nYDist = ((SdrShadowYDistItem&)(rSet.Get(SDRATTR_SHADOWYDIST))).GetValue();
+/*N*/ return TRUE;
+/*N*/ }
+/*N*/
+/*N*/ return FALSE;
+/*N*/ }
+
+/*N*/ void SdrAttrObj::ImpAddShadowToBoundRect()
+/*N*/ {
+/*N*/ sal_Int32 nXDist;
+/*N*/ sal_Int32 nYDist;
+/*N*/
+/*N*/ if(ImpGetShadowDist(nXDist, nYDist))
+/*N*/ {
+/*N*/ if(nXDist > 0)
+/*N*/ aOutRect.Right() += nXDist;
+/*N*/ else
+/*?*/ aOutRect.Left() += nXDist;
+/*N*/
+/*N*/ if(nYDist > 0)
+/*N*/ aOutRect.Bottom() += nYDist;
+/*N*/ else
+/*?*/ aOutRect.Top() += nYDist;
+/*N*/ }
+/*N*/ }
+
+/*N*/ FASTBOOL SdrAttrObj::ImpSetShadowAttributes( const SfxItemSet& rSet, SfxItemSet& rShadowSet ) const
+/*N*/ {
+/*N*/ BOOL bShadOn=((SdrShadowItem&)(rSet.Get(SDRATTR_SHADOW))).GetValue();
+/*N*/
+/*N*/ if(bShadOn)
+/*?*/ {
+// LineAttr for shadow no longer necessary, lines and line shadows are drawn in Paint()
+// routines individually (grep for CreateLinePoly())
+//
+// if (pLineAttr!=NULL) {
+// XLineAttrSetItem aL(*pLineAttr);
+// aL.GetItemSet().Put(XLineColorItem(String(),aShadCol));
+// aL.GetItemSet().Put(XLineTransparenceItem(nTransp));
+// rXOut.SetLineAttr(aL);
+// }
+
+// #103692# Caller must now handle noFill case
+// if(!bNoFill)
+// {
+
+/*?*/ const SdrShadowColorItem& rShadColItem = ((const SdrShadowColorItem&)(rSet.Get(SDRATTR_SHADOWCOLOR)));
+/*?*/ Color aShadCol(rShadColItem.GetValue());
+/*?*/ sal_uInt16 nTransp = ((const SdrShadowTransparenceItem&)(rSet.Get(SDRATTR_SHADOWTRANSPARENCE))).GetValue();
+/*?*/ XFillStyle eStyle = ((const XFillStyleItem&)(rSet.Get(XATTR_FILLSTYLE))).GetValue();
+/*?*/ BOOL bFillBackground = ((const XFillBackgroundItem&)(rSet.Get(XATTR_FILLBACKGROUND))).GetValue();
+/*?*/
+/*?*/ if(eStyle==XFILL_HATCH && !bFillBackground)
+/*?*/ {
+/*?*/ // #41666#
+/*?*/ XHatch aHatch = ((XFillHatchItem&)(rSet.Get(XATTR_FILLHATCH))).GetValue();
+/*?*/ aHatch.SetColor(aShadCol);
+/*?*/ rShadowSet.Put(XFillHatchItem(String(), aHatch));
+/*?*/ }
+/*?*/ else
+/*?*/ {
+/*?*/ if(eStyle != XFILL_NONE && eStyle != XFILL_SOLID)
+/*?*/ {
+/*?*/ // also fuer Gradient und Bitmap
+/*?*/ rShadowSet.Put(XFillStyleItem(XFILL_SOLID));
+/*?*/ }
+/*?*/
+/*?*/ rShadowSet.Put(XFillColorItem(String(),aShadCol));
+/*?*/
+/*?*/ // #92183# set XFillTransparenceItem only when no FloatTransparence is used,
+/*?*/ // else the OutDev will use the wrong method
+/*?*/ if(nTransp)
+/*?*/ {
+/*?*/ const XFillFloatTransparenceItem& rFillFloatTransparence =
+/*?*/ (const XFillFloatTransparenceItem&)rSet.Get(XATTR_FILLFLOATTRANSPARENCE);
+/*?*/ if(!rFillFloatTransparence.IsEnabled())
+/*?*/ rShadowSet.Put(XFillTransparenceItem(nTransp));
+/*?*/ }
+/*?*/ }
+/*?*/
+/*?*/ return TRUE;
+/*N*/ }
+/*N*/
+/*N*/ return FALSE;
+/*N*/ }
+
+// ItemPool fuer dieses Objekt wechseln
+/*N*/ void SdrAttrObj::MigrateItemPool(SfxItemPool* pSrcPool, SfxItemPool* pDestPool, SdrModel* pNewModel)
+/*N*/ {
+/*N*/ if(pSrcPool && pDestPool && (pSrcPool != pDestPool))
+/*N*/ {
+/*N*/ // call parent
+/*N*/ SdrObject::MigrateItemPool(pSrcPool, pDestPool, pNewModel);
+/*N*/
+/*N*/ if(mpObjectItemSet)
+/*N*/ {
+/*N*/ // migrate ItemSet to new pool. Scaling is NOT necessary
+/*N*/ // because this functionality is used by UNDO only. Thus
+/*N*/ // objects and ItemSets would be moved back to their original
+/*N*/ // pool before usage.
+/*N*/
+/*N*/ SfxItemSet* pOldSet = mpObjectItemSet;
+/*N*/ SfxStyleSheet* pStySheet = GetStyleSheet();
+/*N*/
+/*N*/ if(GetStyleSheet())
+/*?*/ RemoveStyleSheet();
+/*N*/
+/*N*/ mpObjectItemSet = CreateNewItemSet(*pDestPool);
+/*N*/
+/*N*/ GetModel()->MigrateItemSet( pOldSet, mpObjectItemSet, pNewModel );
+/*N*/
+/*N*/ // set stylesheet (if used)
+/*N*/ if(pStySheet)
+/*?*/ AddStyleSheet(pStySheet, TRUE);
+/*N*/
+/*N*/ delete pOldSet;
+/*N*/ }
+/*N*/ }
+/*N*/ }
+
+/*N*/ BOOL SdrAttrObj::HasFill() const
+/*N*/ {
+/*N*/ return (!bClosedObj) ? FALSE
+/*N*/ : ((XFillStyleItem&)(GetItem(XATTR_FILLSTYLE))).GetValue()!=XFILL_NONE;
+/*N*/ }
+
+/*N*/ BOOL SdrAttrObj::HasLine() const
+/*N*/ {
+/*N*/ return ((XLineStyleItem&)(GetItem(XATTR_LINESTYLE))).GetValue()!=XLINE_NONE;
+/*N*/ }
+
+// #94547# Have to re-activate more performant, but corrected version.
+// This is necessary since SetItemSet() of the old implementation calls
+// ItemSetChanged() which replaces in textobjects all text items which
+// is wrong behaviour for BurnInStyleSheet.
+
+// #91695# back to corrected old version. Have to check new version again for later builds.
+//void SdrAttrObj::BurnInStyleSheetAttributes( BOOL bPseudoSheetsOnly )
+//{
+// SfxItemPool* pPool = GetItemPool();
+// if ( pPool && mpStyleSheet )
+// {
+// // Get StyleSheet attributes
+// SfxItemSet aSet(*pPool,
+// SDRATTR_START, SDRATTR_NOTPERSIST_FIRST-1,
+// SDRATTR_NOTPERSIST_LAST+1, SDRATTR_END,
+// EE_ITEMS_START,EE_ITEMS_END,
+// 0,0);
+//
+// SfxWhichIter aIter( mpStyleSheet->GetItemSet() );
+// sal_uInt16 nWhich( aIter.FirstWhich() );
+// const SfxPoolItem* pItem = NULL;
+//
+// while( nWhich )
+// {
+// if( SFX_ITEM_SET == mpStyleSheet->GetItemSet().GetItemState(nWhich, TRUE, &pItem) )
+// aSet.Put( *pItem );
+//
+// nWhich = aIter.NextWhich();
+// }
+//
+// SfxWhichIter aHardAttrIter( GetItemSet() );
+// nWhich = aHardAttrIter.FirstWhich();
+//
+// while( nWhich )
+// {
+// if( SFX_ITEM_SET == GetItemSet().GetItemState(nWhich, FALSE, &pItem) )
+// aSet.Put( *pItem );
+//
+// nWhich = aHardAttrIter.NextWhich();
+// }
+//
+// // Set StyleSheet attributes as hard attributes
+// SetItemSet( aSet );
+// }
+//}
+
+/*
+void SdrAttrObj::BurnInStyleSheetAttributes( BOOL bPseudoSheetsOnly )
+{
+ // #89025# Added more performant implementation
+ if(mpStyleSheet)
+ {
+ const SfxItemSet& rSet = mpStyleSheet->GetItemSet();
+ SfxWhichIter aIter(rSet);
+ sal_uInt16 nWhich(aIter.FirstWhich());
+ const SfxPoolItem *pItem = NULL;
+
+ ImpForceItemSet();
+ const SfxItemSet* pParentSet = mpObjectItemSet->GetParent();
+ if(pParentSet != 0L)
+ mpObjectItemSet->SetParent(0L);
+
+ while(nWhich)
+ {
+ if(SFX_ITEM_SET == rSet.GetItemState(nWhich, TRUE, &pItem))
+ mpObjectItemSet->Put(*pItem);
+ nWhich = aIter.NextWhich();
+ }
+
+ if(pParentSet != 0L)
+ mpObjectItemSet->SetParent(pParentSet);
+ }
+}
+*/
+
+
+}
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */