diff options
Diffstat (limited to 'svl')
-rw-r--r-- | svl/source/items/itemset.cxx | 108 | ||||
-rw-r--r-- | svl/source/items/poolitem.cxx | 9 | ||||
-rw-r--r-- | svl/source/items/voiditem.cxx | 3 |
3 files changed, 43 insertions, 77 deletions
diff --git a/svl/source/items/itemset.cxx b/svl/source/items/itemset.cxx index 17862d3ea71b..a7db03c68932 100644 --- a/svl/source/items/itemset.cxx +++ b/svl/source/items/itemset.cxx @@ -293,6 +293,11 @@ SfxPoolItem const* implCreateItemEntry(SfxItemPool& rPool, SfxPoolItem const* pS // just use pSource which equals INVALID_POOL_ITEM return pSource; + if (IsDisabledItem(pSource)) + // SfxItemState::DISABLED aka invalid item + // just use pSource which equals DISABLED_POOL_ITEM + return pSource; + // CAUTION: static default items are not *that* static as it seems // (or: should be). If they are freed with the Pool (see // ::ReleaseDefaults) they will be deleted. Same is true for @@ -306,7 +311,8 @@ SfxPoolItem const* implCreateItemEntry(SfxItemPool& rPool, SfxPoolItem const* pS if (0 == pSource->Which()) { - // These *should* be SfxVoidItem(0) the only Items with 0 == WhichID, + // There should be no Items with 0 == WhichID, but there are some + // constructed for dialog return values AKA result (look for SetReturnValue) // these need to be cloned (currently...) if (bPassingOwnership) return pSource; @@ -441,9 +447,15 @@ void implCleanupItemEntry(SfxPoolItem const* pSource) // nothing to do for invalid item entries return; + if (IsDisabledItem(pSource)) + // SfxItemState::DISABLED aka invalid item + // just use pSource which equals DISABLED_POOL_ITEM + return; + if (0 == pSource->Which()) { - // These *should* be SfxVoidItem(0) the only Items with 0 == WhichID + // There should be no Items with 0 == WhichID, but there are some + // constructed for dialog return values AKA result (look for SetReturnValue) // and need to be deleted delete pSource; return; @@ -612,8 +624,8 @@ void SfxItemSet::checkRemovePoolRegistration(const SfxPoolItem* pItem) // no Item, done return; - if (IsInvalidItem(pItem) || pItem->isVoidItem() || 0 == pItem->Which()) - // checks IsInvalidItem/SfxVoidItem(0) + if (IsInvalidItem(pItem) || IsDisabledItem(pItem)) + // checks IsInvalidItem/IsDisabledItem return; if (SfxItemPool::IsSlot(pItem->Which())) @@ -641,8 +653,8 @@ void SfxItemSet::checkAddPoolRegistration(const SfxPoolItem* pItem) // no Item, done return; - if (IsInvalidItem(pItem) || pItem->isVoidItem() || 0 == pItem->Which()) - // checks IsInvalidItem/SfxVoidItem(0) + if (IsInvalidItem(pItem) || IsDisabledItem(pItem)) + // checks IsInvalidItem/IsDisabledItem return; if (SfxItemPool::IsSlot(pItem->Which())) @@ -669,7 +681,7 @@ sal_uInt16 SfxItemSet::ClearSingleItem_ForOffset( sal_uInt16 nOffset ) { assert(nOffset < TotalCount()); const_iterator aEntry(begin() + nOffset); - assert(nullptr == *aEntry || IsInvalidItem(*aEntry) || (*aEntry)->isVoidItem() || 0 != (*aEntry)->Which()); + assert(nullptr == *aEntry || IsInvalidItem(*aEntry) || IsDisabledItem(*aEntry) || 0 != (*aEntry)->Which()); if (nullptr == *aEntry) // no entry, done @@ -789,7 +801,7 @@ SfxItemState SfxItemSet::GetItemState_ForOffset( sal_uInt16 nOffset, const SfxPo // Different ones are present return SfxItemState::DONTCARE; - if (pCandidate->isVoidItem()) + if (IsDisabledItem(pCandidate)) // Item is Disabled return SfxItemState::DISABLED; @@ -840,10 +852,9 @@ const SfxPoolItem* SfxItemSet::PutImplAsTargetWhich(const SfxPoolItem& rItem, sa const SfxPoolItem* SfxItemSet::PutImpl(const SfxPoolItem& rItem, bool bPassingOwnership) { - if (0 == rItem.Which()) + if (IsDisabledItem(&rItem)) { - // no action needed: this *should* be SfxVoidItem(0) the only Items - // with 0 == WhichID -> only to be used by SfxItemSet::DisableItem + // no action needed: IsDisabledItem if (bPassingOwnership) delete &rItem; return nullptr; @@ -933,7 +944,7 @@ bool SfxItemSet::Put(const SfxItemSet& rSource, bool bInvalidAsDefault) } else { - InvalidateItem_ForWhichID(nWhich); + DisableOrInvalidateItem_ForWhichID(false, nWhich); } } else @@ -998,7 +1009,7 @@ void SfxItemSet::PutExtended break; case SfxItemState::DONTCARE: - InvalidateItem_ForWhichID(nWhich); + DisableOrInvalidateItem_ForWhichID(false, nWhich); break; default: @@ -1025,7 +1036,7 @@ void SfxItemSet::PutExtended break; case SfxItemState::DONTCARE: - InvalidateItem_ForWhichID(nWhich); + DisableOrInvalidateItem_ForWhichID(false, nWhich); break; default: @@ -1264,7 +1275,7 @@ const SfxPoolItem& SfxItemSet::Get( sal_uInt16 nWhich, bool bSrchInParent) const return GetPool()->GetDefaultItem(nWhich); } #ifdef DBG_UTIL - if ((*aFoundOne)->isVoidItem()) + if (IsDisabledItem(*aFoundOne)) SAL_INFO("svl.items", "SFX_WARNING: Getting disabled Item"); #endif return **aFoundOne; @@ -1598,8 +1609,8 @@ void SfxItemSet::MergeValues( const SfxItemSet& rSet ) void SfxItemSet::MergeValue(const SfxPoolItem& rAttr, bool bIgnoreDefaults) { - if (0 == rAttr.Which()) - // seems to be SfxVoidItem(0), nothing to do + if (IsDisabledItem(&rAttr)) + // is IsDisabledItem, nothing to do return; const sal_uInt16 nOffset(GetRanges().getOffsetFromWhich(rAttr.Which())); @@ -1610,17 +1621,17 @@ void SfxItemSet::MergeValue(const SfxPoolItem& rAttr, bool bIgnoreDefaults) } } -void SfxItemSet::InvalidateItem_ForWhichID(sal_uInt16 nWhich) +void SfxItemSet::DisableOrInvalidateItem_ForWhichID(bool bDisable, sal_uInt16 nWhich) { const sal_uInt16 nOffset(GetRanges().getOffsetFromWhich(nWhich)); if (INVALID_WHICHPAIR_OFFSET != nOffset) { - InvalidateItem_ForOffset(nOffset); + DisableOrInvalidateItem_ForOffset(bDisable, nOffset); } } -void SfxItemSet::InvalidateItem_ForOffset(sal_uInt16 nOffset) +void SfxItemSet::DisableOrInvalidateItem_ForOffset(bool bDisable, sal_uInt16 nOffset) { // check and assert from invalid offset. The caller is responsible for // ensuring a valid offset (see callers, all checked & safe) @@ -1634,65 +1645,22 @@ void SfxItemSet::InvalidateItem_ForOffset(sal_uInt16 nOffset) } else { - // entry is set - if (IsInvalidItem(*aFoundOne)) - // already invalid item, done + if (bDisable && IsDisabledItem(*aFoundOne)) + // already disabled item, done return; - // cleanup entry - checkRemovePoolRegistration(*aFoundOne); - implCleanupItemEntry(*aFoundOne); - } - - // set new entry - *aFoundOne = INVALID_POOL_ITEM; -} - -void SfxItemSet::DisableItem_ForWhichID(sal_uInt16 nWhich) -{ - const sal_uInt16 nOffset(GetRanges().getOffsetFromWhich(nWhich)); - - if (INVALID_WHICHPAIR_OFFSET != nOffset) - { - DisableItem_ForOffset(nOffset); - } -} - -void SfxItemSet::DisableItem_ForOffset(sal_uInt16 nOffset) -{ - // check and assert from invalid offset. The caller is responsible for - // ensuring a valid offset (see callers, all checked & safe) - assert(nOffset < TotalCount()); - const_iterator aFoundOne(begin() + nOffset); - - if (nullptr == *aFoundOne) - { - // entry goes from nullptr -> invalid - ++m_nCount; - } - else - { - // entry is set - if ((*aFoundOne)->isVoidItem() && 0 == (*aFoundOne)->Which()) + if (!bDisable && IsInvalidItem(*aFoundOne)) // already invalid item, done return; - } - // prepare new entry - const SfxPoolItem* pNew(implCreateItemEntry(*GetPool(), new SfxVoidItem(0), true)); - // Notification-Callback - if(m_aCallback) - { - m_aCallback(*aFoundOne, pNew); + // cleanup entry + checkRemovePoolRegistration(*aFoundOne); + implCleanupItemEntry(*aFoundOne); } - // cleanup entry (remove only) - checkRemovePoolRegistration(*aFoundOne); - implCleanupItemEntry(*aFoundOne); - // set new entry - *aFoundOne = pNew; + *aFoundOne = bDisable ? DISABLED_POOL_ITEM : INVALID_POOL_ITEM; } sal_uInt16 SfxItemSet::GetWhichByOffset( sal_uInt16 nOffset ) const diff --git a/svl/source/items/poolitem.cxx b/svl/source/items/poolitem.cxx index 3b0ebd6fa882..60de354cdeba 100644 --- a/svl/source/items/poolitem.cxx +++ b/svl/source/items/poolitem.cxx @@ -494,7 +494,6 @@ SfxPoolItem::SfxPoolItem(sal_uInt16 const nWhich) #ifdef DBG_UTIL , m_nSerialNumber(nUsedSfxPoolItemCount) #endif - , m_bIsVoidItem(false) , m_bStaticDefault(false) , m_bPoolDefault(false) , m_bIsSetItem(false) @@ -642,7 +641,7 @@ bool SfxPoolItem::areSame(const SfxPoolItem* pItem1, const SfxPoolItem* pItem2) { if (pItem1 == pItem2) // pointer compare, this handles already - // nullptr, INVALID_POOL_ITEM, SfxVoidItem + // nullptr, INVALID_POOL_ITEM, DISABLED_POOL_ITEM // and if any Item is indeed handed over twice return true; @@ -689,14 +688,16 @@ bool SfxPoolItem::areSame(const SfxPoolItem& rItem1, const SfxPoolItem& rItem2) namespace { -class InvalidItem final : public SfxPoolItem +class InvalidOrDisabledItem final : public SfxPoolItem { virtual bool operator==(const SfxPoolItem&) const override { return true; } virtual SfxPoolItem* Clone(SfxItemPool*) const override { return nullptr; } }; -InvalidItem aInvalidItem; +InvalidOrDisabledItem aInvalidItem; +InvalidOrDisabledItem aDisabledItem; } SfxPoolItem const* const INVALID_POOL_ITEM = &aInvalidItem; +SfxPoolItem const* const DISABLED_POOL_ITEM = &aDisabledItem; /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/svl/source/items/voiditem.cxx b/svl/source/items/voiditem.cxx index 32057e1e2c75..2091359e7bb5 100644 --- a/svl/source/items/voiditem.cxx +++ b/svl/source/items/voiditem.cxx @@ -25,19 +25,16 @@ SfxPoolItem* SfxVoidItem::CreateDefault() { return new SfxVoidItem(0); } SfxVoidItem::SfxVoidItem(sal_uInt16 which) : SfxPoolItem(which) { - setIsVoidItem(); } SfxVoidItem::SfxVoidItem(const SfxVoidItem& rCopy) : SfxPoolItem(rCopy.Which()) { - setIsVoidItem(); } SfxVoidItem::SfxVoidItem(SfxVoidItem&& rOrig) : SfxPoolItem(rOrig) { - setIsVoidItem(); } bool SfxVoidItem::operator==(const SfxPoolItem& rCmp) const |