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 
39 namespace cppu
40 {
41 
42 
43 /*************************************************************************
44 *************************************************************************/
45 
46 
51 {
52 public:
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 
79  virtual sal_Bool SAL_CALL fillPropertyMembersByHandle(
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 {
118 public:
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 
190 protected:
193  void * m_pReserved;
194 
195 private:
196  void init( sal_Bool bSorted );
197 
199  css::uno::Sequence< css::beans::Property > aInfos;
200 
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 {
228 public:
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 
246  OMultiTypeInterfaceContainerHelperInt32( ::osl::Mutex & rMutex );
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;
297 private:
298  void * m_pMap;
299  ::osl::Mutex & rMutex;
300 
302  OMultiTypeInterfaceContainerHelperInt32 & operator = ( const OMultiTypeInterfaceContainerHelperInt32 & )SAL_DELETED_FUNCTION;
303 };
304 
305 
309 {
310 public:
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
337 protected:
338 #elif defined __clang__
339 #pragma clang diagnostic push
340 #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
341 #endif
343  // avoid warnings about virtual members and non-virtual dtor
344 #if defined _MSC_VER && defined __clang__
345 #pragma clang diagnostic pop
346 #endif
347 };
348 
349 
363  public css::beans::XMultiPropertySet,
364  public css::beans::XFastPropertySet,
365  public css::beans::XPropertySet
366 {
367 public:
374  OPropertySetHelper( OBroadcastHelper & rBHelper );
375 
395  OBroadcastHelper & rBHelper, bool bIgnoreRuntimeExceptionsWhileFiring );
396 
419  OBroadcastHelper & rBHelper,
420  IEventNotificationHook *i_pFireEvents,
421  bool bIgnoreRuntimeExceptionsWhileFiring = false);
422 
427  virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) SAL_OVERRIDE;
428 
433  css::uno::Sequence< css::uno::Type > getTypes();
434 
441  void SAL_CALL disposing();
442 
448  virtual void SAL_CALL setPropertyValue( const ::rtl::OUString& rPropertyName, const css::uno::Any& aValue ) SAL_OVERRIDE;
453  virtual css::uno::Any SAL_CALL getPropertyValue(const ::rtl::OUString& aPropertyName) SAL_OVERRIDE;
455  virtual void SAL_CALL addPropertyChangeListener(
456  const ::rtl::OUString& aPropertyName,
457  const css::uno::Reference< css::beans::XPropertyChangeListener >& aListener) SAL_OVERRIDE;
458 
460  virtual void SAL_CALL removePropertyChangeListener(
461  const ::rtl::OUString& aPropertyName,
462  const css::uno::Reference < css::beans::XPropertyChangeListener >& aListener) SAL_OVERRIDE;
463 
465  virtual void SAL_CALL addVetoableChangeListener(
466  const ::rtl::OUString& aPropertyName,
467  const css::uno::Reference< css::beans::XVetoableChangeListener >& aListener) SAL_OVERRIDE;
468 
470  virtual void SAL_CALL removeVetoableChangeListener(
471  const ::rtl::OUString& aPropertyName,
472  const css::uno::Reference< css::beans::XVetoableChangeListener > & aListener ) SAL_OVERRIDE;
473 
481  virtual void SAL_CALL setFastPropertyValue( sal_Int32 nHandle, const css::uno::Any& rValue ) SAL_OVERRIDE;
482 
487  virtual css::uno::Any SAL_CALL getFastPropertyValue( sal_Int32 nHandle ) SAL_OVERRIDE;
488 
489  // XMultiPropertySet
490  virtual void SAL_CALL setPropertyValues(
491  const css::uno::Sequence< ::rtl::OUString >& PropertyNames,
492  const css::uno::Sequence< css::uno::Any >& Values ) SAL_OVERRIDE;
493 
494  virtual css::uno::Sequence< css::uno::Any > SAL_CALL getPropertyValues(
495  const css::uno::Sequence< ::rtl::OUString >& PropertyNames ) SAL_OVERRIDE;
496 
497  virtual void SAL_CALL addPropertiesChangeListener(
498  const css::uno::Sequence< ::rtl::OUString >& PropertyNames,
499  const css::uno::Reference< css::beans::XPropertiesChangeListener >& Listener ) SAL_OVERRIDE;
500 
501  virtual void SAL_CALL removePropertiesChangeListener(
502  const css::uno::Reference< css::beans::XPropertiesChangeListener >& Listener ) SAL_OVERRIDE;
503 
504  virtual void SAL_CALL firePropertiesChangeEvent(
505  const css::uno::Sequence< ::rtl::OUString >& PropertyNames,
506  const css::uno::Reference< css::beans::XPropertiesChangeListener > & Listener ) SAL_OVERRIDE;
507 
511  static css::uno::Reference < css::beans::XPropertySetInfo > SAL_CALL
512  createPropertySetInfo( IPropertyArrayHelper & rProperties );
513 protected:
523  void SAL_CALL fire(
524  sal_Int32 * pnHandles,
525  const css::uno::Any * pNewValues,
526  const css::uno::Any * pOldValues,
527  sal_Int32 nCount,
528  sal_Bool bVetoable );
529 
539  void SAL_CALL setFastPropertyValues(
540  sal_Int32 nSeqLen,
541  sal_Int32 * pHandles,
542  const css::uno::Any * pValues,
543  sal_Int32 nHitCount );
544 
549  virtual IPropertyArrayHelper & SAL_CALL getInfoHelper() = 0;
550 
566  virtual sal_Bool SAL_CALL convertFastPropertyValue(
567  css::uno::Any & rConvertedValue,
568  css::uno::Any & rOldValue,
569  sal_Int32 nHandle,
570  const css::uno::Any& rValue ) = 0;
571 
591  virtual void SAL_CALL setFastPropertyValue_NoBroadcast(
592  sal_Int32 nHandle,
593  const css::uno::Any& rValue ) = 0;
599  virtual void SAL_CALL getFastPropertyValue(
600  css::uno::Any& rValue,
601  sal_Int32 nHandle ) const = 0;
602 
621  void setDependentFastPropertyValue(
622  sal_Int32 i_handle,
623  const css::uno::Any& i_value
624  );
625 
636 
637  class Impl;
638 
641  Impl * const m_pReserved;
642 
643 private:
644  OPropertySetHelper( const OPropertySetHelper & ) SAL_DELETED_FUNCTION;
645  OPropertySetHelper & operator = ( const OPropertySetHelper & )
646  SAL_DELETED_FUNCTION;
647 
651  void impl_fireAll(
652  sal_Int32* i_handles,
653  const css::uno::Any * i_newValues,
654  const css::uno::Any * i_oldValues,
655  sal_Int32 i_count
656  );
657 
658 #if defined _MSC_VER // public -> protected changes mangled names there
659 public:
660 #else
661 protected:
662 #endif
663 // Suppress warning about virtual functions but non-virtual destructor:
664 #if defined _MSC_VER
665 #if defined __clang__
666 #pragma clang diagnostic push
667 #pragma clang diagnostic ignored "-Wnon-virtual-dtor"
668 #endif
669 #endif
670 
674 };
675 #if defined _MSC_VER
676 #if defined __clang__
677 #pragma clang diagnostic pop
678 #endif
679 #endif
680 
689  public css::beans::XPropertySetOption
690 {
691 public:
696  explicit OPropertySetHelper2(
697  OBroadcastHelper & rBHelper,
698  IEventNotificationHook *i_pFireEvents = NULL,
699  bool bIgnoreRuntimeExceptionsWhileFiring = false);
700 
701  // XInterface
702  virtual css::uno::Any SAL_CALL queryInterface( const css::uno::Type & rType ) SAL_OVERRIDE;
703 
704  // XPropertySetOption
705  virtual void SAL_CALL enableChangeListenerNotification( sal_Bool bEnable ) SAL_OVERRIDE;
706 
707 
708 private:
709  OPropertySetHelper2( const OPropertySetHelper2 & ) SAL_DELETED_FUNCTION;
710  OPropertySetHelper2 & operator = ( const OPropertySetHelper2 & )
711  SAL_DELETED_FUNCTION;
712 
713 #if defined _MSC_VER // public -> protected changes mangled names there
714 public:
715 #else
716 protected:
717 #endif
718 // Suppress warning about virtual functions but non-virtual destructor:
722  virtual ~OPropertySetHelper2();
723 };
724 
725 } // end namespace cppuhelper
726 #endif
727 
728 
729 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
OPropertySetHelper plus XPropertySetOption.
Definition: propshlp.hxx:688
An interface to extend event notification actions.
Definition: propshlp.hxx:308
This interface is used by the OPropertyHelper, to access the property description.
Definition: propshlp.hxx:50
const char * pPropName
sal_Bool bRightOrdered
True, If the values of the handles are sorted in the same way as the names and the highest handle val...
Definition: propshlp.hxx:205
bool operator()(const sal_Int32 &i1, const sal_Int32 &i2) const
Definition: propshlp.hxx:213
OMultiTypeInterfaceContainerHelperInt32 aVetoableLC
Container for the XPropertyVetoableListener.
Definition: propshlp.hxx:635
css::uno::Any const & rValue
return NULL
css::uno::Sequence< css::beans::Property > aInfos
The sequence generated from the pProperties array.
Definition: propshlp.hxx:199
bool getPropertyValue(ValueType &rValue, css::uno::Reference< css::beans::XPropertySet > const &xPropSet, OUString const &propName)
int nCount
sal_Int32 nElements
sal_Int32 nHandle
You can use this helper class to map a XPropertySet-Interface to a XFast- or a XMultiPropertySet inte...
Definition: propshlp.hxx:116
size_t operator()(const sal_Int32 &i) const
Definition: propshlp.hxx:219
unsigned char sal_Bool
This struct contains the standard variables of a broadcaster.
bool setPropertyValue(uno::Sequence< beans::PropertyValue > &aProp, const OUString &aName, const uno::Any &aValue)
OBroadcastHelper & rBHelper
The common data of a broadcaster.
Definition: propshlp.hxx:627
#define SAL_WARN_UNUSED
const PropertyValue * pValues
A container of interfaces.
FILE * init(int, char **)
Specialized class for key type sal_Int32, without explicit usage of STL symbols.
Definition: propshlp.hxx:226
OMultiTypeInterfaceContainerHelperInt32 aBoundLC
Container for the XPropertyChangedListener.
Definition: propshlp.hxx:631
Impl *const m_pReserved
reserved for future use.
Definition: propshlp.hxx:637
This abstract class maps the methods of the interfaces XMultiPropertySet, XFastPropertySet and XPrope...
Definition: propshlp.hxx:362
#define CPPUHELPER_DLLPUBLIC
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)
Compares demanded type to given template argument types.
void * m_pReserved
reserved for future use.
Definition: propshlp.hxx:193