22 #include <com/sun/star/frame/UntitledNumbersConst.hpp>
23 #include <com/sun/star/lang/IllegalArgumentException.hpp>
31 : ::
cppu::BaseMutex ()
32 , m_sUntitledPrefix ()
71 if ( ! xComponent.is ())
72 throw css::lang::IllegalArgumentException(ERRMSG_INVALID_COMPONENT_PARAM,
m_xOwner.get(), 1);
74 sal_IntPtr pComponent =
reinterpret_cast<sal_IntPtr
>( xComponent.get() );
75 TNumberedItemHash::const_iterator pIt =
m_lComponents.find (pComponent);
79 return pIt->second.nNumber;
86 if (nFreeNumber == css::frame::UntitledNumbersConst::INVALID_NUMBER)
87 return css::frame::UntitledNumbersConst::INVALID_NUMBER;
91 aItem.
xItem = css::uno::WeakReference< css::uno::XInterface >(xComponent);
106 if (nNumber == css::frame::UntitledNumbersConst::INVALID_NUMBER)
107 throw css::lang::IllegalArgumentException (
"Special valkud INVALID_NUMBER not allowed as input parameter.",
m_xOwner.get(), 1);
110 TNumberedItemHash::iterator pComponent;
117 const css::uno::Reference< css::uno::XInterface > xItem = rItem.
xItem.get();
121 lDeadItems.push_back(pComponent->first);
143 if ( ! xComponent.is ())
144 throw css::lang::IllegalArgumentException(ERRMSG_INVALID_COMPONENT_PARAM,
m_xOwner.get(), 1);
146 sal_IntPtr pComponent =
reinterpret_cast<sal_IntPtr
>( xComponent.get() );
147 TNumberedItemHash::iterator pIt =
m_lComponents.find (pComponent);
186 std::vector< ::sal_Int32 > lPossibleNumbers;
187 ::sal_Int32 c =
static_cast<::sal_Int32
>(
m_lComponents.size ());
195 lPossibleNumbers.push_back (i);
204 const css::uno::Reference< css::uno::XInterface > xItem = rItem.xItem.get();
208 lDeadItems.push_back(rComponent);
212 std::vector< ::sal_Int32 >::iterator pPossible =
std::find(lPossibleNumbers.begin (), lPossibleNumbers.end (), rItem.nNumber);
213 if (pPossible != lPossibleNumbers.end ())
214 lPossibleNumbers.erase (pPossible);
220 if (lPossibleNumbers.empty())
221 return css::frame::UntitledNumbersConst::INVALID_NUMBER;
224 return *(lPossibleNumbers.begin ());
232 for (
const sal_IntPtr& rDeadItem : lDeadItems)
234 lItems.erase(rDeadItem);
virtual ~NumberedCollection() override
free all internally used resources.
::sal_Int32 impl_searchFreeNumber()
tries to find a unique number not already used within this collection.
mutable::osl::Mutex m_aMutex
std::unordered_map< sal_IntPtr, TNumberedItem > TNumberedItemHash
virtual void SAL_CALL releaseNumberForComponent(const css::uno::Reference< css::uno::XInterface > &xComponent) override
css::uno::WeakReference< css::uno::XInterface > m_xOwner
used as source of broadcasted messages or exceptions (can be null !)
virtual OUString SAL_CALL getUntitledPrefix() override
css::uno::WeakReference< css::uno::XInterface > xItem
constexpr OUStringLiteral ERRMSG_INVALID_COMPONENT_PARAM
virtual ::sal_Int32 SAL_CALL leaseNumber(const css::uno::Reference< css::uno::XInterface > &xComponent) override
static void impl_cleanUpDeadItems(TNumberedItemHash &lItems, const TDeadItemList &lDeadItems)
static PropertyMapEntry const * find(rtl::Reference< PropertySetInfo > &mxInfo, const OUString &aName)
OUString m_sUntitledPrefix
localized string to be used for untitled components
TNumberedItemHash m_lComponents
cache of all "leased numbers" and its bound components
::std::vector< sal_IntPtr > TDeadItemList
void setOwner(const css::uno::Reference< css::uno::XInterface > &xOwner)
set an outside component which uses this container and must be set as source of all broadcasted messa...
NumberedCollection()
lightweight constructor.
void setUntitledPrefix(const OUString &sPrefix)
set the localized prefix to be used for untitled components.
virtual void SAL_CALL releaseNumber(::sal_Int32 nNumber) override