LibreOffice Module cppuhelper (master) 1
propshlp.hxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
20/*
21 * This file is part of LibreOffice published API.
22 */
23
24#ifndef INCLUDED_CPPUHELPER_PROPSHLP_HXX
25#define INCLUDED_CPPUHELPER_PROPSHLP_HXX
26
27#include "rtl/alloc.h"
28
30
31#include "com/sun/star/beans/XPropertySet.hpp"
32#include "com/sun/star/beans/XPropertySetOption.hpp"
33#include "com/sun/star/beans/XMultiPropertySet.hpp"
34#include "com/sun/star/beans/XFastPropertySet.hpp"
35
37
38
39namespace cppu
40{
41
42
43/*************************************************************************
44*************************************************************************/
45
46
51{
52public:
53 // these are here to force memory de/allocation to sal lib.
54 static void * SAL_CALL operator new( size_t nSize )
55 { return ::rtl_allocateMemory( nSize ); }
56 static void SAL_CALL operator delete( void * pMem )
57 { ::rtl_freeMemory( pMem ); }
58 static void * SAL_CALL operator new( size_t, void * pMem )
59 { return pMem; }
60 static void SAL_CALL operator delete( void *, void * )
61 {}
62
66 virtual ~IPropertyArrayHelper();
67
80 ::rtl::OUString * pPropName, sal_Int16 * pAttributes, sal_Int32 nHandle ) = 0;
84 virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() = 0;
90 virtual css::beans::Property SAL_CALL getPropertyByName(
91 const ::rtl::OUString& rPropertyName ) = 0;
96 virtual sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString& rPropertyName) = 0;
102 virtual sal_Int32 SAL_CALL getHandleByName( const ::rtl::OUString & rPropertyName ) = 0;
108 virtual sal_Int32 SAL_CALL fillHandles(
109 /*out*/ sal_Int32 * pHandles, const css::uno::Sequence< ::rtl::OUString > & rPropNames ) = 0;
110};
111
117{
118public:
128 css::beans::Property *pProps,
129 sal_Int32 nElements ,
130 sal_Bool bSorted = true );
131
139 const css::uno::Sequence< css::beans::Property > & aProps,
140 sal_Bool bSorted = true );
141
145 sal_Int32 SAL_CALL getCount() const;
158 virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(
159 ::rtl::OUString * pPropName, sal_Int16 * pAttributes, sal_Int32 nHandle ) SAL_OVERRIDE;
163 virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties() SAL_OVERRIDE;
169 virtual css::beans::Property SAL_CALL getPropertyByName(
170 const ::rtl::OUString& rPropertyName ) SAL_OVERRIDE;
175 virtual sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString& rPropertyName) SAL_OVERRIDE;
181 virtual sal_Int32 SAL_CALL getHandleByName( const ::rtl::OUString & rPropertyName ) SAL_OVERRIDE;
187 virtual sal_Int32 SAL_CALL fillHandles(
188 /*out*/sal_Int32 * pHandles, const css::uno::Sequence< ::rtl::OUString > & rPropNames ) SAL_OVERRIDE;
189
190protected:
193 void * m_pReserved;
194
195private:
196 void init( sal_Bool bSorted );
197
199 css::uno::Sequence< css::beans::Property > aInfos;
200
205 sal_Bool bRightOrdered;
206};
207
208
209// helper defines needed for an interface container with a 32 bit key values
210
212{
213 bool operator()(const sal_Int32 & i1 , const sal_Int32 & i2) const
214 { return i1 == i2; }
215};
216
218{
219 size_t operator()(const sal_Int32 & i) const
220 { return i; }
221};
222
227{
228public:
229 // these are here to force memory de/allocation to sal lib.
230 static void * SAL_CALL operator new( size_t nSize )
231 { return ::rtl_allocateMemory( nSize ); }
232 static void SAL_CALL operator delete( void * pMem )
233 { ::rtl_freeMemory( pMem ); }
234 static void * SAL_CALL operator new( size_t, void * pMem )
235 { return pMem; }
236 static void SAL_CALL operator delete( void *, void * )
237 {}
238
251
255 css::uno::Sequence< sal_Int32 > SAL_CALL getContainedTypes() const;
256
262 OInterfaceContainerHelper * SAL_CALL getContainer( const sal_Int32 & rKey ) const;
263
271 sal_Int32 SAL_CALL addInterface(
272 const sal_Int32 & rKey,
273 const css::uno::Reference< css::uno::XInterface > & r );
274
282 sal_Int32 SAL_CALL removeInterface(
283 const sal_Int32 & rKey,
284 const css::uno::Reference< css::uno::XInterface > & rxIFace );
285
290 void SAL_CALL disposeAndClear( const css::lang::EventObject & rEvt );
294 void SAL_CALL clear();
295
296 typedef sal_Int32 keyType;
297private:
298 void * m_pMap;
299 ::osl::Mutex & rMutex;
300
303};
304
305
309{
310public:
330 virtual void fireEvents(
331 sal_Int32 * pnHandles,
332 sal_Int32 nCount,
333 sal_Bool bVetoable,
334 bool bIgnoreRuntimeExceptionsWhileFiring) = 0;
335
336#if !defined _MSC_VER // public -> protected changes mangled names there
337protected:
338#endif
340 // avoid warnings about virtual members and non-virtual dtor
341};
342
343
357 public css::beans::XMultiPropertySet,
358 public css::beans::XFastPropertySet,
359 public css::beans::XPropertySet
360{
361public:
369
389 OBroadcastHelper & rBHelper, bool bIgnoreRuntimeExceptionsWhileFiring );
390
413 OBroadcastHelper & rBHelper,
414 IEventNotificationHook *i_pFireEvents,
415 bool bIgnoreRuntimeExceptionsWhileFiring = false);
416
421 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) SAL_OVERRIDE;
422
427 css::uno::Sequence< css::uno::Type > getTypes();
428
435 void SAL_CALL disposing();
436
442 virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& rPropertyName, const css::uno::Any& aValue ) SAL_OVERRIDE;
447 virtual css::uno::Any SAL_CALL getPropertyValue(const ::rtl::OUString& aPropertyName) SAL_OVERRIDE;
449 virtual void SAL_CALL addPropertyChangeListener(
450 const ::rtl::OUString& aPropertyName,
451 const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener) SAL_OVERRIDE;
452
454 virtual void SAL_CALL removePropertyChangeListener(
455 const ::rtl::OUString& aPropertyName,
456 const css::uno::Reference < css::beans::XPropertyChangeListener >& aListener) SAL_OVERRIDE;
457
459 virtual void SAL_CALL addVetoableChangeListener(
460 const ::rtl::OUString& aPropertyName,
461 const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener) SAL_OVERRIDE;
462
464 virtual void SAL_CALL removeVetoableChangeListener(
465 const ::rtl::OUString& aPropertyName,
466 const css::uno::Reference< css::beans::XVetoableChangeListener > & aListener ) SAL_OVERRIDE;
467
475 virtual void SAL_CALL setFastPropertyValue( sal_Int32 nHandle, const css::uno::Any& rValue ) SAL_OVERRIDE;
476
481 virtual css::uno::Any SAL_CALL getFastPropertyValue( sal_Int32 nHandle ) SAL_OVERRIDE;
482
483 // XMultiPropertySet
484 virtual void SAL_CALL setPropertyValues(
485 const css::uno::Sequence< ::rtl::OUString >& PropertyNames,
486 const css::uno::Sequence< css::uno::Any >& Values ) SAL_OVERRIDE;
487
488 virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues(
489 const css::uno::Sequence< ::rtl::OUString >& PropertyNames ) SAL_OVERRIDE;
490
491 virtual void SAL_CALL addPropertiesChangeListener(
492 const css::uno::Sequence< ::rtl::OUString >& PropertyNames,
493 const css::uno::Reference< css::beans::XPropertiesChangeListener >& Listener ) SAL_OVERRIDE;
494
495 virtual void SAL_CALL removePropertiesChangeListener(
496 const css::uno::Reference< css::beans::XPropertiesChangeListener >& Listener ) SAL_OVERRIDE;
497
498 virtual void SAL_CALL firePropertiesChangeEvent(
499 const css::uno::Sequence< ::rtl::OUString >& PropertyNames,
500 const css::uno::Reference< css::beans::XPropertiesChangeListener > & Listener ) SAL_OVERRIDE;
501
505 static css::uno::Reference < css::beans::XPropertySetInfo > SAL_CALL
506 createPropertySetInfo( IPropertyArrayHelper & rProperties );
507protected:
517 void SAL_CALL fire(
518 sal_Int32 * pnHandles,
519 const css::uno::Any * pNewValues,
520 const css::uno::Any * pOldValues,
521 sal_Int32 nCount,
522 sal_Bool bVetoable );
523
534 sal_Int32 nSeqLen,
535 sal_Int32 * pHandles,
536 const css::uno::Any * pValues,
537 sal_Int32 nHitCount );
538
543 virtual IPropertyArrayHelper & SAL_CALL getInfoHelper() = 0;
544
561 css::uno::Any & rConvertedValue,
562 css::uno::Any & rOldValue,
563 sal_Int32 nHandle,
564 const css::uno::Any& rValue ) = 0;
565
585 virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
586 sal_Int32 nHandle,
587 const css::uno::Any& rValue ) = 0;
593 virtual void SAL_CALL getFastPropertyValue(
594 css::uno::Any& rValue,
595 sal_Int32 nHandle ) const = 0;
596
615 void setDependentFastPropertyValue(
616 sal_Int32 i_handle,
617 const css::uno::Any& i_value
618 );
619
630
631 class Impl;
632
636
637private:
638 OPropertySetHelper( const OPropertySetHelper & ) SAL_DELETED_FUNCTION;
639 OPropertySetHelper & operator = ( const OPropertySetHelper & )
640 SAL_DELETED_FUNCTION;
641
646 sal_Int32* i_handles,
647 const css::uno::Any * i_newValues,
648 const css::uno::Any * i_oldValues,
649 sal_Int32 i_count
650 );
651
652#if defined _MSC_VER // public -> protected changes mangled names there
653public:
654#else
655protected:
656#endif
661};
662
671 public css::beans::XPropertySetOption
672{
673public:
678 explicit OPropertySetHelper2(
679 OBroadcastHelper & rBHelper,
680 IEventNotificationHook *i_pFireEvents = NULL,
681 bool bIgnoreRuntimeExceptionsWhileFiring = false);
682
683 // XInterface
684 virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) SAL_OVERRIDE;
685
686 // XPropertySetOption
687 virtual void SAL_CALL enableChangeListenerNotification( sal_Bool bEnable ) SAL_OVERRIDE;
688
689
690private:
691 OPropertySetHelper2( const OPropertySetHelper2 & ) SAL_DELETED_FUNCTION;
693 SAL_DELETED_FUNCTION;
694
695#if defined _MSC_VER // public -> protected changes mangled names there
696public:
697#else
698protected:
699#endif
700// Suppress warning about virtual functions but non-virtual destructor:
704 virtual ~OPropertySetHelper2();
705};
706
707} // end namespace cppuhelper
708#endif
709
710
711/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
An interface to extend event notification actions.
Definition: propshlp.hxx:309
virtual void fireEvents(sal_Int32 *pnHandles, sal_Int32 nCount, sal_Bool bVetoable, bool bIgnoreRuntimeExceptionsWhileFiring)=0
Method to be called by OPropertySetHelper::fire.
This interface is used by the OPropertyHelper, to access the property description.
Definition: propshlp.hxx:51
virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(::rtl::OUString *pPropName, sal_Int16 *pAttributes, sal_Int32 nHandle)=0
Return the property members Name and Attribute from the handle nHandle.
virtual sal_Int32 SAL_CALL fillHandles(sal_Int32 *pHandles, const css::uno::Sequence< ::rtl::OUString > &rPropNames)=0
Fill the array with the handles of the properties.
virtual sal_Bool SAL_CALL hasPropertyByName(const ::rtl::OUString &rPropertyName)=0
Return true if the property with the name rPropertyName exist, otherwise false.
virtual sal_Int32 SAL_CALL getHandleByName(const ::rtl::OUString &rPropertyName)=0
Return the handle of the property with the name rPropertyName.
virtual css::uno::Sequence< css::beans::Property > SAL_CALL getProperties()=0
Return the sequence of properties.
virtual css::beans::Property SAL_CALL getPropertyByName(const ::rtl::OUString &rPropertyName)=0
Return the property with the name rPropertyName.
A container of interfaces.
Specialized class for key type sal_Int32, without explicit usage of STL symbols.
Definition: propshlp.hxx:227
OMultiTypeInterfaceContainerHelperInt32(::osl::Mutex &rMutex)
Create a container of interface containers.
OMultiTypeInterfaceContainerHelperInt32(const OMultiTypeInterfaceContainerHelperInt32 &) SAL_DELETED_FUNCTION
You can use this helper class to map a XPropertySet-Interface to a XFast- or a XMultiPropertySet inte...
Definition: propshlp.hxx:117
OPropertyArrayHelper(const css::uno::Sequence< css::beans::Property > &aProps, sal_Bool bSorted=true)
Create an object which supports the common property interfaces.
OPropertyArrayHelper(css::beans::Property *pProps, sal_Int32 nElements, sal_Bool bSorted=true)
Create an object which supports the common property interfaces.
OPropertySetHelper plus XPropertySetOption.
Definition: propshlp.hxx:672
OPropertySetHelper2(const OPropertySetHelper2 &) SAL_DELETED_FUNCTION
This abstract class maps the methods of the interfaces XMultiPropertySet, XFastPropertySet and XPrope...
Definition: propshlp.hxx:360
virtual void SAL_CALL addVetoableChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not constrained.
virtual void SAL_CALL addPropertyChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not bound.
void SAL_CALL setFastPropertyValues(sal_Int32 nSeqLen, sal_Int32 *pHandles, const css::uno::Any *pValues, sal_Int32 nHitCount)
Set multiple properties with the handles.
virtual void SAL_CALL removeVetoableChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XVetoableChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not constrained.
virtual void SAL_CALL setFastPropertyValue(sal_Int32 nHandle, const css::uno::Any &rValue) SAL_OVERRIDE
Throw UnknownPropertyException or PropertyVetoException if the property with the name rPropertyName d...
Impl *const m_pReserved
reserved for future use.
Definition: propshlp.hxx:631
virtual void SAL_CALL setPropertyValue(const ::rtl::OUString &rPropertyName, const css::uno::Any &aValue) SAL_OVERRIDE
Throw UnknownPropertyException or PropertyVetoException if the property with the name rPropertyName d...
virtual IPropertyArrayHelper &SAL_CALL getInfoHelper()=0
This abstract method must return the name to index table.
OPropertySetHelper(const OPropertySetHelper &) SAL_DELETED_FUNCTION
OMultiTypeInterfaceContainerHelperInt32 aBoundLC
Container for the XPropertyChangedListener.
Definition: propshlp.hxx:625
virtual void SAL_CALL setFastPropertyValue_NoBroadcast(sal_Int32 nHandle, const css::uno::Any &rValue)=0
The same as setFastPropertyValue; nHandle is always valid.
virtual void SAL_CALL addPropertiesChangeListener(const css::uno::Sequence< ::rtl::OUString > &PropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener > &Listener) SAL_OVERRIDE
virtual css::uno::Any SAL_CALL getPropertyValue(const ::rtl::OUString &aPropertyName) SAL_OVERRIDE
Throw UnknownPropertyException if the property with the name rPropertyName does not exist.
OBroadcastHelper & rBHelper
The common data of a broadcaster.
Definition: propshlp.hxx:621
OMultiTypeInterfaceContainerHelperInt32 aVetoableLC
Container for the XPropertyVetoableListener.
Definition: propshlp.hxx:629
virtual void SAL_CALL removePropertiesChangeListener(const css::uno::Reference< css::beans::XPropertiesChangeListener > &Listener) SAL_OVERRIDE
void impl_fireAll(sal_Int32 *i_handles, const css::uno::Any *i_newValues, const css::uno::Any *i_oldValues, sal_Int32 i_count)
notifies the given changes in property's values, plus all property changes collected during recent |s...
virtual sal_Bool SAL_CALL convertFastPropertyValue(css::uno::Any &rConvertedValue, css::uno::Any &rOldValue, sal_Int32 nHandle, const css::uno::Any &rValue)=0
Converted the value rValue and return the result in rConvertedValue and the old value in rOldValue.
void SAL_CALL fire(sal_Int32 *pnHandles, const css::uno::Any *pNewValues, const css::uno::Any *pOldValues, sal_Int32 nCount, sal_Bool bVetoable)
This method fire events to all registered property listeners.
virtual void SAL_CALL firePropertiesChangeEvent(const css::uno::Sequence< ::rtl::OUString > &PropertyNames, const css::uno::Reference< css::beans::XPropertiesChangeListener > &Listener) SAL_OVERRIDE
virtual void SAL_CALL setPropertyValues(const css::uno::Sequence< ::rtl::OUString > &PropertyNames, const css::uno::Sequence< css::uno::Any > &Values) SAL_OVERRIDE
virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues(const css::uno::Sequence< ::rtl::OUString > &PropertyNames) SAL_OVERRIDE
virtual void SAL_CALL removePropertyChangeListener(const ::rtl::OUString &aPropertyName, const css::uno::Reference< css::beans::XPropertyChangeListener > &aListener) SAL_OVERRIDE
Ignored if the property is not bound.
virtual void SAL_CALL getFastPropertyValue(css::uno::Any &rValue, sal_Int32 nHandle) const =0
The same as getFastPropertyValue, but return the value through rValue and nHandle is always valid.
#define CPPUHELPER_DLLPUBLIC
return NULL
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)
Compares demanded type to given template argument types.
int i
Sequence< Property > aInfos
Definition: propshlp.cxx:76
This struct contains the standard variables of a broadcaster.
bool operator()(const sal_Int32 &i1, const sal_Int32 &i2) const
Definition: propshlp.hxx:213
size_t operator()(const sal_Int32 &i) const
Definition: propshlp.hxx:219
unsigned char sal_Bool
#define SAL_WARN_UNUSED