24 #include <osl/diagnose.h>
26 #include <com/sun/star/beans/PropertyAttribute.hpp>
30 #include <unordered_set>
47 const Property* lcl_findPropertyByName(
const std::vector< Property >& _rProps,
const OUString& _rName )
50 auto pResult = std::lower_bound(_rProps.begin(), _rProps.end(), aNameProp, PropertyCompareByName());
51 if ( pResult == _rProps.end() || pResult->Name != _rName )
59 const Sequence< Property >& _rProperties,
const Sequence< Property >& _rAggProperties,
64 m_aProperties.insert( m_aProperties.end(), _rProperties.begin(), _rProperties.end() );
65 m_aProperties.insert( m_aProperties.end(), _rAggProperties.begin(), _rAggProperties.end() );
67 m_aProperties.erase( std::unique(m_aProperties.begin(), m_aProperties.end(),
68 [](
const css::beans::Property&
x,
const css::beans::Property&
y ) ->
bool {
return x.Name ==
y.Name; } ),
69 m_aProperties.end() );
70 m_aProperties.shrink_to_fit();
74 std::unordered_set< OUString > aDelegatorProps;
75 aDelegatorProps.reserve( _rProperties.getLength() );
76 for(
auto &delegateProp: _rProperties )
78 const auto inserted = aDelegatorProps.insert( delegateProp.Name );
80 "OPropertyArrayAggregationHelper::OPropertyArrayAggregationHelper: duplicate delegatee property!" );
83 std::unordered_set< sal_Int32 > existingHandles;
84 existingHandles.reserve( m_aProperties.size() );
85 sal_Int32 nAggregateHandle = _nFirstAggregateId;
86 for ( sal_Int32 nMPLoop = 0; nMPLoop < static_cast< sal_Int32 >( m_aProperties.size() ); ++nMPLoop )
88 auto &prop = m_aProperties[ nMPLoop ];
89 if ( aDelegatorProps.find( prop.Name ) != aDelegatorProps.end() )
92 existingHandles.insert( prop.Handle );
102 if ( ( -1 == nHandle ) || ( existingHandles.find( nHandle ) != existingHandles.end() ) )
106 nHandle = nAggregateHandle++;
110 existingHandles.insert( nHandle );
114 m_aPropertyAccessors[ nHandle ] =
OPropertyAccessor( prop.Handle, nMPLoop,
true );
115 prop.Handle = nHandle;
125 const Property* pPropertyDescriptor = lcl_findPropertyByName( m_aProperties, _rName );
126 if ( pPropertyDescriptor )
130 OSL_ENSURE( m_aPropertyAccessors.end() != aPos,
"OPropertyArrayAggregationHelper::classifyProperty: should have this handle in my map!" );
131 if ( m_aPropertyAccessors.end() != aPos )
133 eOrigin = aPos->second.bAggregate ? PropertyOrigin::Aggregate : PropertyOrigin::Delegator;
142 const Property* pProperty = findPropertyByName( _rPropertyName );
145 throw UnknownPropertyException(_rPropertyName);
153 return nullptr != findPropertyByName( _rPropertyName );
159 return lcl_findPropertyByName( m_aProperties, _rName );
165 const Property* pProperty = findPropertyByName( _rPropertyName );
166 return pProperty ? pProperty->Handle : -1;
171 OUString* _pPropName, sal_Int16* _pAttributes, sal_Int32 _nHandle)
174 bool bRet = i != m_aPropertyAccessors.end();
177 const css::beans::Property& rProperty = m_aProperties[(*i).second.nPos];
179 *_pPropName = rProperty.Name;
181 *_pAttributes = rProperty.Attributes;
190 if ( pos != m_aPropertyAccessors.end() )
192 _rProperty = m_aProperties[ pos->second.nPos ];
200 OUString* _pPropName, sal_Int32* _pOriginalHandle, sal_Int32 _nHandle)
const
203 bool bRet = i != m_aPropertyAccessors.end() && (*i).second.bAggregate;
206 if (_pOriginalHandle)
207 *_pOriginalHandle = (*i).second.nOriginalHandle;
210 OSL_ENSURE((*i).second.nPos < static_cast<sal_Int32>(m_aProperties.size()),
"Invalid index for sequence!");
211 const css::beans::Property& rProperty = m_aProperties[(*i).second.nPos];
212 *_pPropName = rProperty.Name;
226 sal_Int32* _pHandles,
const css::uno::Sequence< OUString >& _rPropNames )
228 sal_Int32 nHitCount = 0;
229 const OUString* pReqProps = _rPropNames.getConstArray();
230 sal_Int32 nReqLen = _rPropNames.getLength();
233 for( sal_Int32
i = 0;
i < nReqLen; ++
i )
235 aNameProp.Name = pReqProps[
i];
236 auto findIter = std::lower_bound(m_aProperties.begin(), m_aProperties.end(), aNameProp,
PropertyCompareByName());
237 if ( findIter != m_aProperties.end() && findIter->Name == pReqProps[
i] )
239 _pHandles[
i] = findIter->Handle;
256 explicit PropertyForwarder( OPropertySetAggregationHelper& _rAggregationHelper );
263 void takeResponsibilityFor( sal_Int32 _nHandle );
267 bool isResponsibleFor( sal_Int32 _nHandle );
272 void doForward( sal_Int32 _nHandle,
const Any& _rValue );
279 :m_rAggregationHelper( _rAggregationHelper )
280 ,m_nCurrentlyForwarding( -1 )
299 OSL_ENSURE(
m_rAggregationHelper.m_xAggregateSet.is(),
"PropertyForwarder::doForward: no property set!" );
326 :OPropertyStateHelper( rBHlp )
327 ,m_bListening( false )
333 OPropertySetAggregationHelper::~OPropertySetAggregationHelper()
338 css::uno::Any SAL_CALL OPropertySetAggregationHelper::queryInterface(
const css::uno::Type& _rType)
340 css::uno::Any aReturn = OPropertyStateHelper::queryInterface(_rType);
342 if ( !aReturn.hasValue() )
344 ,static_cast< css::beans::XPropertiesChangeListener*>(
this)
345 ,
static_cast< css::beans::XVetoableChangeListener*
>(
this)
346 ,static_cast< css::lang::XEventListener*>(static_cast< css::beans::XPropertiesChangeListener*>(
this))
353 void OPropertySetAggregationHelper::disposing()
355 osl::MutexGuard aGuard(rBHelper.rMutex);
357 if ( m_xAggregateSet.is() && m_bListening )
360 m_xAggregateMultiSet->removePropertiesChangeListener(
this);
361 m_xAggregateSet->removeVetoableChangeListener(OUString(),
this);
362 m_bListening =
false;
365 OPropertyStateHelper::disposing();
369 void SAL_CALL OPropertySetAggregationHelper::disposing(
const css::lang::EventObject& _rSource)
371 OSL_ENSURE(m_xAggregateSet.is(),
"OPropertySetAggregationHelper::disposing : don't have an aggregate anymore !");
372 if (_rSource.Source == m_xAggregateSet)
373 m_bListening =
false;
377 void SAL_CALL OPropertySetAggregationHelper::propertiesChange(
const css::uno::Sequence< css::beans::PropertyChangeEvent>& _rEvents)
379 OSL_ENSURE(m_xAggregateSet.is(),
"OPropertySetAggregationHelper::propertiesChange : have no aggregate !");
381 sal_Int32 nLen = _rEvents.getLength();
386 const css::beans::PropertyChangeEvent& evt = _rEvents.getConstArray()[0];
387 OSL_ENSURE(!evt.PropertyName.isEmpty(),
"OPropertySetAggregationHelper::propertiesChange : invalid event !");
396 if ( ( nHandle != -1 ) && !isCurrentlyForwardingProperty( nHandle ) )
397 fire(&nHandle, &evt.NewValue, &evt.OldValue, 1,
false);
401 std::unique_ptr<sal_Int32[]> pHandles(
new sal_Int32[nLen]);
402 std::unique_ptr< css::uno::Any[]> pNewValues(
new css::uno::Any[nLen]);
403 std::unique_ptr< css::uno::Any[]> pOldValues(
new css::uno::Any[nLen]);
406 for (
const css::beans::PropertyChangeEvent& rEvent : _rEvents)
409 if ( ( nHandle != -1 ) && !isCurrentlyForwardingProperty( nHandle ) )
411 pHandles[nDest] = nHandle;
412 pNewValues[nDest] = rEvent.NewValue;
413 pOldValues[nDest] = rEvent.OldValue;
419 fire(pHandles.get(), pNewValues.get(), pOldValues.get(), nDest,
false);
424 void SAL_CALL OPropertySetAggregationHelper::vetoableChange(
const css::beans::PropertyChangeEvent& _rEvent)
426 OSL_ENSURE(m_xAggregateSet.is(),
"OPropertySetAggregationHelper::vetoableChange : have no aggregate !");
430 sal_Int32 nHandle = rPH.getHandleByName(_rEvent.PropertyName);
431 fire(&nHandle, &_rEvent.NewValue, &_rEvent.OldValue, 1,
true);
435 void OPropertySetAggregationHelper::setAggregation(
const css::uno::Reference< css::uno::XInterface >& _rxDelegate)
437 osl::MutexGuard aGuard(rBHelper.rMutex);
439 if (m_bListening && m_xAggregateSet.is())
441 m_xAggregateMultiSet->removePropertiesChangeListener(
this);
442 m_xAggregateSet->removeVetoableChangeListener(OUString(),
this);
443 m_bListening =
false;
446 m_xAggregateState.set(_rxDelegate, css::uno::UNO_QUERY);
447 m_xAggregateSet.set(_rxDelegate, css::uno::UNO_QUERY);
448 m_xAggregateMultiSet.set(_rxDelegate, css::uno::UNO_QUERY);
449 m_xAggregateFastSet.set(_rxDelegate, css::uno::UNO_QUERY);
452 if ( m_xAggregateSet.is() && !m_xAggregateMultiSet.is() )
453 throw css::lang::IllegalArgumentException();
457 void OPropertySetAggregationHelper::startListening()
459 osl::MutexGuard aGuard(rBHelper.rMutex);
461 if (!m_bListening && m_xAggregateSet.is())
464 css::uno::Sequence< OUString > aPropertyNames;
465 m_xAggregateMultiSet->addPropertiesChangeListener(aPropertyNames,
this);
466 m_xAggregateSet->addVetoableChangeListener(OUString(),
this);
473 void SAL_CALL OPropertySetAggregationHelper::addVetoableChangeListener(
const OUString& _rPropertyName,
474 const css::uno::Reference< css::beans::XVetoableChangeListener>& _rxListener)
476 OPropertySetHelper::addVetoableChangeListener(_rPropertyName, _rxListener);
482 void SAL_CALL OPropertySetAggregationHelper::addPropertyChangeListener(
const OUString& _rPropertyName,
483 const css::uno::Reference< css::beans::XPropertyChangeListener>& _rxListener)
485 OPropertySetHelper::addPropertyChangeListener(_rPropertyName, _rxListener);
491 void SAL_CALL OPropertySetAggregationHelper::addPropertiesChangeListener(
const css::uno::Sequence< OUString >& _rPropertyNames,
492 const css::uno::Reference< css::beans::XPropertiesChangeListener>& _rxListener)
494 OPropertySetHelper::addPropertiesChangeListener(_rPropertyNames, _rxListener);
500 sal_Int32 OPropertySetAggregationHelper::getOriginalHandle(sal_Int32 nHandle)
const
502 OPropertyArrayAggregationHelper& rPH =
static_cast<OPropertyArrayAggregationHelper&
>(
const_cast<OPropertySetAggregationHelper*
>(
this)->getInfoHelper() );
503 sal_Int32 nOriginalHandle = -1;
504 (
void)rPH.fillAggregatePropertyInfoByHandle(
nullptr, &nOriginalHandle, nHandle);
505 return nOriginalHandle;
509 OUString OPropertySetAggregationHelper::getPropertyName( sal_Int32 _nHandle )
const
511 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>(
const_cast<OPropertySetAggregationHelper*
>(
this)->getInfoHelper() );
513 OSL_VERIFY( rPH.getPropertyByHandle( _nHandle, aProperty ) );
514 return aProperty.Name;
518 void SAL_CALL OPropertySetAggregationHelper::setFastPropertyValue(sal_Int32 _nHandle,
const css::uno::Any& _rValue)
520 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
522 sal_Int32 nOriginalHandle = -1;
525 if (rPH.fillAggregatePropertyInfoByHandle(&aPropName, &nOriginalHandle, _nHandle))
526 if (m_xAggregateFastSet.is())
527 m_xAggregateFastSet->setFastPropertyValue(nOriginalHandle, _rValue);
529 m_xAggregateSet->setPropertyValue(aPropName, _rValue);
531 OPropertySetHelper::setFastPropertyValue(_nHandle, _rValue);
535 void OPropertySetAggregationHelper::getFastPropertyValue( css::uno::Any& rValue, sal_Int32 nHandle)
const
537 OPropertyArrayAggregationHelper& rPH =
static_cast<OPropertyArrayAggregationHelper&
>(
const_cast<OPropertySetAggregationHelper*
>(
this)->getInfoHelper() );
539 sal_Int32 nOriginalHandle = -1;
541 if (rPH.fillAggregatePropertyInfoByHandle(&aPropName, &nOriginalHandle, nHandle))
543 if (m_xAggregateFastSet.is())
544 rValue = m_xAggregateFastSet->getFastPropertyValue(nOriginalHandle);
546 rValue = m_xAggregateSet->getPropertyValue(aPropName);
548 else if ( m_pForwarder->isResponsibleFor( nHandle ) )
552 rValue = m_xAggregateSet->getPropertyValue(
getPropertyName( nHandle ) );
557 css::uno::Any SAL_CALL OPropertySetAggregationHelper::getFastPropertyValue(sal_Int32 nHandle)
559 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
561 sal_Int32 nOriginalHandle = -1;
562 css::uno::Any aValue;
564 if (rPH.fillAggregatePropertyInfoByHandle(&aPropName, &nOriginalHandle, nHandle))
566 if (m_xAggregateFastSet.is())
567 aValue = m_xAggregateFastSet->getFastPropertyValue(nOriginalHandle);
569 aValue = m_xAggregateSet->getPropertyValue(aPropName);
572 aValue = OPropertySetHelper::getFastPropertyValue(nHandle);
578 void SAL_CALL OPropertySetAggregationHelper::setPropertyValues(
581 OSL_ENSURE( !rBHelper.bInDispose,
"OPropertySetAggregationHelper::setPropertyValues : do not use within the dispose call !");
582 OSL_ENSURE( !rBHelper.bDisposed,
"OPropertySetAggregationHelper::setPropertyValues : object is disposed" );
585 if (!m_xAggregateSet.is())
586 OPropertySetHelper::setPropertyValues(_rPropertyNames, _rValues);
587 else if (_rPropertyNames.getLength() == 1)
593 catch(
const UnknownPropertyException& )
596 SAL_WARN(
"comphelper",
"OPropertySetAggregationHelper::setPropertyValues: unknown property: '"
597 << _rPropertyNames[0] <<
"', implementation: " <<
typeid( *this ).name() );
602 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
605 sal_Int32 nAggCount(0);
606 sal_Int32 nLen(_rPropertyNames.getLength());
608 for (
const OUString& rName : _rPropertyNames )
612 throw WrappedTargetException( OUString(), static_cast< XMultiPropertySet* >(
this ),
Any( UnknownPropertyException( ) ) );
621 if (nAggCount == nLen)
622 m_xAggregateMultiSet->setPropertyValues(_rPropertyNames, _rValues);
625 else if (nAggCount == 0)
626 OPropertySetHelper::setPropertyValues(_rPropertyNames, _rValues);
631 const css::uno::Any*
pValues = _rValues.getConstArray();
637 OUString* pAggNames = AggPropertyNames.getArray();
639 Sequence< Any > AggValues( nAggCount );
640 Any* pAggValues = AggValues.getArray();
644 OUString* pDelNames = DelPropertyNames.getArray();
647 Sequence< Any > DelValues( nLen - nAggCount );
648 Any* pDelValues = DelValues.getArray();
650 for (
const OUString& rName : _rPropertyNames )
654 *pAggNames++ = rName;
655 *pAggValues++ = *pValues++;
659 *pDelNames++ = rName;
660 *pDelValues++ = *pValues++;
665 pDelValues = DelValues.getArray();
667 std::unique_ptr<sal_Int32[]> pHandles(
new sal_Int32[ nLen - nAggCount ]);
673 sal_Int32 nHitCount = rPH2.
fillHandles( pHandles.get(), DelPropertyNames );
676 std::unique_ptr< css::uno::Any[]> pConvertedValues(
new css::uno::Any[ nHitCount ]);
677 std::unique_ptr< css::uno::Any[]> pOldValues(
new css::uno::Any[ nHitCount ]);
683 osl::MutexGuard aGuard( rBHelper.rMutex );
684 for( i = 0; i < (nLen - nAggCount); ++i )
686 if( pHandles[i] != -1 )
690 if( nAttributes & css::beans::PropertyAttribute::READONLY )
691 throw css::beans::PropertyVetoException();
693 if( convertFastPropertyValue( pConvertedValues[ nHitCount ], pOldValues[nHitCount],
694 pHandles[i], pDelValues[i] ) )
697 pHandles[nHitCount] = pHandles[i];
706 fire( pHandles.get(), pConvertedValues.get(), pOldValues.get(), nHitCount, true );
709 m_xAggregateMultiSet->setPropertyValues(AggPropertyNames, AggValues);
713 osl::MutexGuard aGuard( rBHelper.rMutex );
715 for( i = 0; i < nHitCount; i++ )
718 setFastPropertyValue_NoBroadcast( pHandles[i], pConvertedValues[i] );
724 fire( pHandles.get(), pConvertedValues.get(), pOldValues.get(), nHitCount, false );
727 m_xAggregateMultiSet->setPropertyValues(AggPropertyNames, AggValues);
734 css::beans::PropertyState SAL_CALL OPropertySetAggregationHelper::getPropertyState(
const OUString& _rPropertyName)
736 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
737 sal_Int32 nHandle = rPH.getHandleByName( _rPropertyName );
741 throw css::beans::UnknownPropertyException(_rPropertyName);
745 sal_Int32 nOriginalHandle = -1;
746 if (rPH.fillAggregatePropertyInfoByHandle(&aPropName, &nOriginalHandle, nHandle))
748 if (m_xAggregateState.is())
749 return m_xAggregateState->getPropertyState(_rPropertyName);
751 return css::beans::PropertyState_DIRECT_VALUE;
754 return getPropertyStateByHandle(nHandle);
758 void SAL_CALL OPropertySetAggregationHelper::setPropertyToDefault(
const OUString& _rPropertyName)
760 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
761 sal_Int32 nHandle = rPH.getHandleByName(_rPropertyName);
764 throw css::beans::UnknownPropertyException(_rPropertyName);
768 sal_Int32 nOriginalHandle = -1;
769 if (rPH.fillAggregatePropertyInfoByHandle(&aPropName, &nOriginalHandle, nHandle))
771 if (m_xAggregateState.is())
772 m_xAggregateState->setPropertyToDefault(_rPropertyName);
778 setPropertyToDefaultByHandle( nHandle );
780 catch(
const UnknownPropertyException& ) {
throw; }
782 catch(
const Exception& )
784 OSL_FAIL(
"OPropertySetAggregationHelper::setPropertyToDefault: caught an exception which is not allowed to leave here!" );
790 css::uno::Any SAL_CALL OPropertySetAggregationHelper::getPropertyDefault(
const OUString& aPropertyName)
792 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
793 sal_Int32 nHandle = rPH.getHandleByName( aPropertyName );
796 throw css::beans::UnknownPropertyException(aPropertyName);
799 sal_Int32 nOriginalHandle = -1;
800 if (rPH.fillAggregatePropertyInfoByHandle(&aPropName, &nOriginalHandle, nHandle))
802 if (m_xAggregateState.is())
803 return m_xAggregateState->getPropertyDefault(aPropertyName);
805 return css::uno::Any();
808 return getPropertyDefaultByHandle(nHandle);
811 sal_Bool SAL_CALL OPropertySetAggregationHelper::convertFastPropertyValue( Any& _rConvertedValue, Any& _rOldValue, sal_Int32 _nHandle,
const Any& _rValue )
813 bool bModified =
false;
815 OSL_ENSURE( m_pForwarder->isResponsibleFor( _nHandle ),
"OPropertySetAggregationHelper::convertFastPropertyValue: this is no forwarded property - did you use declareForwardedProperty for it?" );
816 if ( m_pForwarder->isResponsibleFor( _nHandle ) )
819 OPropertyArrayAggregationHelper& rPH =
static_cast< OPropertyArrayAggregationHelper&
>( getInfoHelper() );
821 OSL_VERIFY( rPH.getPropertyByHandle( _nHandle, aProperty ) );
824 getFastPropertyValue( aCurrentValue, _nHandle );
825 bModified =
tryPropertyValue( _rConvertedValue, _rOldValue, _rValue, aCurrentValue, aProperty.Type );
831 void SAL_CALL OPropertySetAggregationHelper::setFastPropertyValue_NoBroadcast( sal_Int32 _nHandle,
const Any& _rValue )
833 OSL_ENSURE( m_pForwarder->isResponsibleFor( _nHandle ),
"OPropertySetAggregationHelper::setFastPropertyValue_NoBroadcast: this is no forwarded property - did you use declareForwardedProperty for it?" );
834 if ( m_pForwarder->isResponsibleFor( _nHandle ) )
835 m_pForwarder->doForward( _nHandle, _rValue );
839 void OPropertySetAggregationHelper::declareForwardedProperty( sal_Int32 _nHandle )
841 OSL_ENSURE( !m_pForwarder->isResponsibleFor( _nHandle ),
"OPropertySetAggregationHelper::declareForwardedProperty: already declared!" );
842 m_pForwarder->takeResponsibilityFor( _nHandle );
846 void OPropertySetAggregationHelper::forwardingPropertyValue( sal_Int32 )
852 void OPropertySetAggregationHelper::forwardedPropertyValue( sal_Int32 )
858 bool OPropertySetAggregationHelper::isCurrentlyForwardingProperty( sal_Int32 _nHandle )
const
860 return m_pForwarder->getCurrentlyForwardedProperty() == _nHandle;
PropertyForwarder(OPropertySetAggregationHelper &_rAggregationHelper)
virtual sal_Int32 SAL_CALL getHandleByName(const OUString &_rPropertyName) override
inherited from IPropertyArrayHelper
virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() override
inherited from IPropertyArrayHelper
virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(OUString *_pPropName, sal_Int16 *_pAttributes, sal_Int32 _nHandle) override
inherited from IPropertyArrayHelper
const_iterator find(const Value &x) const
o3tl::sorted_vector< sal_Int32 > m_aProperties
sal_Int32 m_nCurrentlyForwarding
PropertyAccessorMap::const_iterator ConstPropertyAccessorMapIterator
bool fillAggregatePropertyInfoByHandle(OUString *_pPropName, sal_Int32 *_pOriginalHandle, sal_Int32 _nHandle) const
returns information about a property of the aggregate.
used as callback for an OPropertyArrayAggregationHelper
virtual sal_Int32 getPreferredPropertyId(const OUString &_rName)=0
get the preferred handle for the given property
virtual sal_Int32 SAL_CALL fillHandles(sal_Int32 *_pHandles, const css::uno::Sequence< OUString > &_rPropNames) override
inherited from IPropertyArrayHelper
void doForward(sal_Int32 _nHandle, const Any &_rValue)
actually forwards a property value to the aggregate
virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(::rtl::OUString *pPropName, sal_Int16 *pAttributes, sal_Int32 nHandle)=0
void takeResponsibilityFor(sal_Int32 _nHandle)
declares that the forwarder should be responsible for the given property
DECL_LISTENERMULTIPLEXER_END void SAL_CALL inserted(::sal_Int32 ID) override
const_iterator end() const
bool setPropertyValue(uno::Sequence< beans::PropertyValue > &aProp, const OUString &aName, const uno::Any &aValue)
bool getPropertyByHandle(sal_Int32 _nHandle, css::beans::Property &_rProperty) const
returns information about a property given by handle
const PropertyValue * pValues
virtual sal_Bool SAL_CALL hasPropertyByName(const OUString &_rPropertyName) override
inherited from IPropertyArrayHelper
virtual sal_Int32 SAL_CALL fillHandles(sal_Int32 *pHandles, const css::uno::Sequence< ::rtl::OUString > &rPropNames)=0
css::uno::Sequence< DstElementType > containerToSequence(const SrcType &i_Container)
Copy from a container into a Sequence.
PropertyOrigin classifyProperty(const OUString &_rName)
prefer this one over the XPropertySetInfo of the aggregate!
sal_Int32 getCurrentlyForwardedProperty() const
bool tryPropertyValue(Any &_rConvertedValue, Any &_rOldValue, const Any &_rValueToSet, const Any &_rCurrentValue, const Type &_rExpectedType)
bool isResponsibleFor(sal_Int32 _nHandle)
checks whether the forwarder is responsible for the given property
OUString getPropertyName(sal_Int32 nPropertyType)
#define SAL_WARN(area, stream)
const css::beans::Property * findPropertyByName(const OUString &_rName) const
std::pair< const_iterator, bool > insert(Value &&x)
OPropertyArrayAggregationHelper(const css::uno::Sequence< css::beans::Property > &_rProperties, const css::uno::Sequence< css::beans::Property > &_rAggProperties, IPropertyInfoService *_pInfoService=nullptr, sal_Int32 _nFirstAggregateId=DEFAULT_AGGREGATE_PROPERTY_ID)
construct the object.
virtual sal_Int32 SAL_CALL getHandleByName(const ::rtl::OUString &rPropertyName)=0
virtual css::beans::Property SAL_CALL getPropertyByName(const OUString &_rPropertyName) override
inherited from IPropertyArrayHelper
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)
OPropertySetAggregationHelper & m_rAggregationHelper