/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * This file incorporates work covered by the following license notice: * * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed * with this work for additional information regarding copyright * ownership. The ASF licenses this file to you under the Apache * License, Version 2.0 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.apache.org/licenses/LICENSE-2.0 .
*/
// flag definitions to be used for _nItemInfoFlags // in SfxItemInfo #define SFX_ITEMINFOFLAG_NONE 0x0000
// Defines if this Item needs to be registered at the pool // to make it accessible for the GetItemSurrogates call. It // will not be included when this flag is not set, but also // needs no registration. There are SAL_INFO calls in the // GetItemSurrogates impl that will mention that #define SFX_ITEMINFOFLAG_SUPPORT_SURROGATE 0x0001
class SfxItemSet;
class SVL_DLLPUBLIC ItemInfo
{
sal_uInt16 m_nWhich;
sal_uInt16 m_nSlotID;
sal_uInt16 m_nItemInfoFlags;
class SVL_DLLPUBLIC ItemInfoPackage
{ protected: // this is needed for on-demand creation of static entries in constructors // derived from ItemInfoPackage or implementations of ::getItemInfo(). This // takes ownership of the item staticvoid setItemAtItemInfoStatic(SfxPoolItem* pItem, ItemInfoStatic& rItemInfo) { rItemInfo.setItem(pItem); }
/** Base class for providers of defaults of SfxPoolItems. * * The derived classes hold the concrete (const) instances which are referenced in several places * (usually within a single document). * This helps to lower the amount of calls to lifecycle methods, speeds up comparisons within a document * and facilitates loading and saving of attributes.
*/ class SVL_DLLPUBLIC SfxItemPool : public salhelper::SimpleReferenceObject
{ friendclass SfxItemSet; friendclass SfxPoolItemHolder; friendclass SfxAllItemSet;
// place to register all NameOrIndex Items that are either set in an // SfxItemSet or SfxPolItemHolder for this Model/Pool
registeredNameOrIndex maRegisteredNameOrIndex;
// UserDefaults: Every PoolDefault can be 'overloaded' with a user-defined // default. This is then owned by the pool. The read access is limited // to check the UserDefaults, so it *will* return nullptr if none is set void SetUserDefaultItem( const SfxPoolItem& ); const SfxPoolItem* GetUserDefaultItem( sal_uInt16 nWhich ) const; template<class T> const T* GetUserDefaultItem( TypedWhichId<T> nWhich ) const
{ returnstatic_cast<const T*>(GetUserDefaultItem(sal_uInt16(nWhich))); } void ResetUserDefaultItem( sal_uInt16 nWhich );
// PoolDefaults: Owned by the pool. The read access will only return // nullptr if the WhichID asked for is not in the range of the pool, // making the request invalid. const SfxPoolItem * GetPoolDefaultItem(sal_uInt16 nWhich) const; template<class T> const T* GetPoolDefaultItem( TypedWhichId<T> nWhich ) const
{ returnstatic_cast<const T*>(GetPoolDefaultItem(sal_uInt16(nWhich))); }
// UserOrPoolDefaults: Combination of UserDefaults and PoolDefaults. // UserDefaults will be preferred. If none is set for that WhichID, // the PoolDefault will be returned. // Note that read access will return a reference, but this will lead // to an asserted error when the given WhichID is not in the range of // the pool. const SfxPoolItem& GetUserOrPoolDefaultItem( sal_uInt16 nWhich ) const; template<class T> const T& GetUserOrPoolDefaultItem( TypedWhichId<T> nWhich ) const
{ returnstatic_cast<const T&>(GetUserOrPoolDefaultItem(sal_uInt16(nWhich))); }
// read-access to Item virtualconst SfxPoolItem& getItem() const = 0;
// write-access when Item needs to be modified virtualconst SfxPoolItem* setItem(std::unique_ptr<SfxPoolItem>) = 0;
};
// Iterate using a lambda/callback with read/write access to registered SfxPoolItems. // If you use this (look for current usages) inside the callback you may // return true; // to continue callback (like 'continue') // return false; // to end callbacks (like 'break') void iterateItemSurrogates(
sal_uInt16 nWhich, const std::function<bool(SfxItemPool::SurrogateData& rData)>& rItemCallback) const;
// Read-only access to registered SfxPoolItems // NOTE: In *no* case use const_cast and change those Items (!) // Read commit text for more information
ItemSurrogates GetItemSurrogates(sal_uInt16 nWhich) const;
// special version for read-only itemSurrogates for NameOrIndex Items
ItemSurrogates GetItemSurrogatesForItem(const SfxPoolItem& rItem) const;
ItemSurrogates GetItemSurrogatesForItem(SfxItemType eItemType) const;
void SetSecondaryPool( SfxItemPool *pPool );
SfxItemPool* GetSecondaryPool() const { return mpSecondary.get(); } /* get the last pool by following the GetSecondaryPool chain */
SfxItemPool* GetLastPoolInChain();
SfxItemPool* GetMasterPool() const { return mpMaster; } void sendShutdownHint();
// syntactical sugar: direct call to not have to use the flag define // and make the intention clearer bool NeedsSurrogateSupport(sal_uInt16 nWhich) const
{ return CheckItemInfoFlag(nWhich, SFX_ITEMINFOFLAG_SUPPORT_SURROGATE); }
// tries to translate back from SlotID to WhichID. // If none is defined, return nSlot. // If nSlot is not a SlotID, return nSlot.
sal_uInt16 GetWhichIDFromSlotID(sal_uInt16 nSlot, bool bDeep = true) const; template<class T> TypedWhichId<T> GetWhichIDFromSlotID(TypedWhichId<T> nSlot, bool bDeep = true) const
{ return TypedWhichId<T>(GetWhichIDFromSlotID(sal_uInt16(nSlot), bDeep)); }
// get SlotID that may be registered in the SfxItemInfo for // the given WhichID. // If none is defined, return nWhich. // If nWhich is not a WhichID, return nWhich.
sal_uInt16 GetSlotId( sal_uInt16 nWhich ) const;
// same as GetWhichIDFromSlotID, but returns 0 in error cases, so: // If none is defined, return 0. // If nSlot is not a SlotID, return 0.
sal_uInt16 GetTrueWhichIDFromSlotID( sal_uInt16 nSlot, bool bDeep = true ) const;
// same as GetSlotId, but returns 0 in error cases, so: // If none is defined, return 0. // If nWhich is not a WhichID, return 0.
sal_uInt16 GetTrueSlotId( sal_uInt16 nWhich ) const;
staticbool IsWhich(sal_uInt16 nId) { return nId && nId <= SFX_WHICH_MAX; } staticbool IsSlot(sal_uInt16 nId) { return nId && nId > SFX_WHICH_MAX; }
//IDs below or equal are Which IDs, IDs above slot IDs staticconst sal_uInt16 SFX_WHICH_MAX = 4999;
};
// only the pool may manipulate the reference counts inlinevoid SfxItemPool::AddRef(const SfxPoolItem& rItem)
{
rItem.AddRef();
}
// only the pool may manipulate the reference counts inline sal_uInt32 SfxItemPool::ReleaseRef(const SfxPoolItem& rItem, sal_uInt32 n)
{ return rItem.ReleaseRef(n);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.