diff options
author | Christian Lippka <cl@openoffice.org> | 2002-04-05 11:43:42 +0000 |
---|---|---|
committer | Christian Lippka <cl@openoffice.org> | 2002-04-05 11:43:42 +0000 |
commit | 302ceb92375c5e1dcf24e91423f64ba8c36c7c06 (patch) | |
tree | cbb7e53fe8070e75c54c804f4acb6b7a6b6ce8c7 /svx/source/svdraw/svdoattr.cxx | |
parent | 142bb97c1b02d61190ec5ba12f4c4ae7d5a876fb (diff) |
#98532# migrate NameOrIndex items on model change correctly
Diffstat (limited to 'svx/source/svdraw/svdoattr.cxx')
-rw-r--r-- | svx/source/svdraw/svdoattr.cxx | 72 |
1 files changed, 64 insertions, 8 deletions
diff --git a/svx/source/svdraw/svdoattr.cxx b/svx/source/svdraw/svdoattr.cxx index 3ca4369835b8..1f64f962f423 100644 --- a/svx/source/svdraw/svdoattr.cxx +++ b/svx/source/svdraw/svdoattr.cxx @@ -2,9 +2,9 @@ * * $RCSfile: svdoattr.cxx,v $ * - * $Revision: 1.33 $ + * $Revision: 1.34 $ * - * last change: $Author: cl $ $Date: 2001-11-22 13:55:22 $ + * last change: $Author: cl $ $Date: 2002-04-05 12:43:42 $ * * The Contents of this file are made available subject to the terms of * either of the following licenses @@ -568,13 +568,75 @@ static void ImpScaleItemSet(SfxItemSet& rSet, const Fraction& rScale) } } +void SdrAttrObj::ImplMigrateUniqueItems(SdrModel* pNewModel) +{ + if( mpObjectItemSet ) + { + static sal_uInt16 ImplUniqueItemsWhichId[] = + { + XATTR_FILLBITMAP, XATTR_LINEDASH, XATTR_LINESTART, + XATTR_LINEEND, XATTR_FILLGRADIENT, XATTR_FILLFLOATTRANSPARENCE, + XATTR_FILLHATCH, 0 + }; + + sal_uInt16* pWhich = ImplUniqueItemsWhichId; + + const SfxPoolItem *pPoolItem; + + while(*pWhich) + { + if(SFX_ITEM_SET == mpObjectItemSet->GetItemState(*pWhich, FALSE, &pPoolItem)) + { + const SfxPoolItem* pItem = pPoolItem; + + switch( *pWhich ) + { + case XATTR_FILLBITMAP: + pItem = ((XFillBitmapItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + case XATTR_LINEDASH: + pItem = ((XLineDashItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + case XATTR_LINESTART: + pItem = ((XLineStartItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + case XATTR_LINEEND: + pItem = ((XLineEndItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + case XATTR_FILLGRADIENT: + pItem = ((XFillGradientItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + case XATTR_FILLFLOATTRANSPARENCE: + // #85953# allow all kinds of XFillFloatTransparenceItem to be set + pItem = ((XFillFloatTransparenceItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + case XATTR_FILLHATCH: + pItem = ((XFillHatchItem*)pItem)->checkForUniqueItem( pNewModel ); + break; + } + + // set item + if( (NULL != pItem) && (pItem != pPoolItem) ) + { + mpObjectItemSet->Put(*pItem); + delete (SfxPoolItem*)pItem; + } + } + pWhich++; + } + } +} + void SdrAttrObj::SetModel(SdrModel* pNewModel) { SdrModel* pOldModel = pModel; // test for correct pool in ItemSet; move to new pool if necessary if(pNewModel && mpObjectItemSet && mpObjectItemSet->GetPool() != &pNewModel->GetItemPool()) + { + ImplMigrateUniqueItems( pNewModel ); MigrateItemPool(mpObjectItemSet->GetPool(), &pNewModel->GetItemPool()); + } // call parent SdrObject::SetModel(pNewModel); @@ -840,11 +902,6 @@ void SdrAttrObj::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem { if(pNewItem) { -#ifdef SVX_LIGHT - // set item - ((SdrAttrObj*)this)->ImpForceItemSet(); - mpObjectItemSet->Put(*pNewItem); -#else const SfxPoolItem* pItem = pNewItem; switch( nWhich ) @@ -883,7 +940,6 @@ void SdrAttrObj::ItemChange(const sal_uInt16 nWhich, const SfxPoolItem* pNewItem if( pItem != pNewItem) delete (SfxPoolItem*)pItem; } -#endif } else { |