1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski #ifndef _CPPUHELPER_COMPBASE2_HXX_ 24*b1cdbd2cSJim Jagielski #define _CPPUHELPER_COMPBASE2_HXX_ 25*b1cdbd2cSJim Jagielski 26*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase2.hxx> 27*b1cdbd2cSJim Jagielski #include <cppuhelper/compbase_ex.hxx> 28*b1cdbd2cSJim Jagielski /* 29*b1cdbd2cSJim Jagielski __DEF_COMPIMPLHELPER_EX( 2 ) 30*b1cdbd2cSJim Jagielski */ 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski namespace cppu 33*b1cdbd2cSJim Jagielski { 34*b1cdbd2cSJim Jagielski 35*b1cdbd2cSJim Jagielski // Suppress warnings about hidden functions in case any of the IfcN has 36*b1cdbd2cSJim Jagielski // functions named dispose, addEventListener, or removeEventListener: 37*b1cdbd2cSJim Jagielski #if defined __SUNPRO_CC 38*b1cdbd2cSJim Jagielski #pragma disable_warn 39*b1cdbd2cSJim Jagielski #endif 40*b1cdbd2cSJim Jagielski 41*b1cdbd2cSJim Jagielski /** Implementation helper supporting ::com::sun::star::lang::XTypeProvider and 42*b1cdbd2cSJim Jagielski ::com::sun::star::lang::XComponent. 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski Upon disposing objects of this class, sub-classes receive a disposing() 45*b1cdbd2cSJim Jagielski call. Objects of this class can be held weakly, i.e. by a 46*b1cdbd2cSJim Jagielski ::com::sun::star::uno::WeakReference. 47*b1cdbd2cSJim Jagielski 48*b1cdbd2cSJim Jagielski @attention 49*b1cdbd2cSJim Jagielski The life-cycle of the passed mutex reference has to be longer than objects of this class. 50*b1cdbd2cSJim Jagielski 51*b1cdbd2cSJim Jagielski @derive 52*b1cdbd2cSJim Jagielski Inherit from this class giving your interface(s) to be implemented as template argument(s). 53*b1cdbd2cSJim Jagielski Your sub class defines method implementations for these interface(s). 54*b1cdbd2cSJim Jagielski */ 55*b1cdbd2cSJim Jagielski template< class Ifc1, class Ifc2 > 56*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE WeakComponentImplHelper2 57*b1cdbd2cSJim Jagielski : public WeakComponentImplHelperBase 58*b1cdbd2cSJim Jagielski , public ::com::sun::star::lang::XTypeProvider 59*b1cdbd2cSJim Jagielski , public Ifc1, public Ifc2 60*b1cdbd2cSJim Jagielski { 61*b1cdbd2cSJim Jagielski /** @internal */ 62*b1cdbd2cSJim Jagielski struct cd : public rtl::StaticAggregate< class_data, ImplClassData2 < Ifc1, Ifc2, WeakComponentImplHelper2<Ifc1, Ifc2> > > {}; 63*b1cdbd2cSJim Jagielski public: WeakComponentImplHelper2(::osl::Mutex & rMutex)64*b1cdbd2cSJim Jagielski inline WeakComponentImplHelper2( ::osl::Mutex & rMutex ) throw () 65*b1cdbd2cSJim Jagielski : WeakComponentImplHelperBase( rMutex ) 66*b1cdbd2cSJim Jagielski {} queryInterface(::com::sun::star::uno::Type const & rType)67*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) 68*b1cdbd2cSJim Jagielski { return WeakComponentImplHelper_query( rType, cd::get(), this, (WeakComponentImplHelperBase *)this ); } acquire()69*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () 70*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::acquire(); } release()71*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () 72*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::release(); } dispose()73*b1cdbd2cSJim Jagielski virtual void SAL_CALL dispose()throw (::com::sun::star::uno::RuntimeException) 74*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::dispose(); } addEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & xListener)75*b1cdbd2cSJim Jagielski virtual void SAL_CALL addEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & xListener)throw (::com::sun::star::uno::RuntimeException) 76*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::addEventListener(xListener); } removeEventListener(const::com::sun::star::uno::Reference<::com::sun::star::lang::XEventListener> & xListener)77*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeEventListener(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > & xListener)throw (::com::sun::star::uno::RuntimeException) 78*b1cdbd2cSJim Jagielski { WeakComponentImplHelperBase::removeEventListener(xListener); } getTypes()79*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) 80*b1cdbd2cSJim Jagielski { return WeakComponentImplHelper_getTypes( cd::get() ); } getImplementationId()81*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) 82*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( cd::get() ); } 83*b1cdbd2cSJim Jagielski }; 84*b1cdbd2cSJim Jagielski 85*b1cdbd2cSJim Jagielski #if defined __SUNPRO_CC 86*b1cdbd2cSJim Jagielski #pragma enable_warn 87*b1cdbd2cSJim Jagielski #endif 88*b1cdbd2cSJim Jagielski 89*b1cdbd2cSJim Jagielski /** Implementation helper supporting ::com::sun::star::lang::XTypeProvider and 90*b1cdbd2cSJim Jagielski ::com::sun::star::lang::XComponent. 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski Upon disposing objects of this class, sub-classes receive a disposing() 93*b1cdbd2cSJim Jagielski call. Objects of this class can be held weakly, i.e. by a 94*b1cdbd2cSJim Jagielski ::com::sun::star::uno::WeakReference. Object of this class can be 95*b1cdbd2cSJim Jagielski aggregated, i.e. incoming queryInterface() calls are delegated. 96*b1cdbd2cSJim Jagielski 97*b1cdbd2cSJim Jagielski @attention 98*b1cdbd2cSJim Jagielski The life-cycle of the passed mutex reference has to be longer than objects of this class. 99*b1cdbd2cSJim Jagielski 100*b1cdbd2cSJim Jagielski @derive 101*b1cdbd2cSJim Jagielski Inherit from this class giving your interface(s) to be implemented as template argument(s). 102*b1cdbd2cSJim Jagielski Your sub class defines method implementations for these interface(s). 103*b1cdbd2cSJim Jagielski 104*b1cdbd2cSJim Jagielski @deprecated 105*b1cdbd2cSJim Jagielski */ 106*b1cdbd2cSJim Jagielski template< class Ifc1, class Ifc2 > 107*b1cdbd2cSJim Jagielski class SAL_NO_VTABLE WeakAggComponentImplHelper2 108*b1cdbd2cSJim Jagielski : public WeakAggComponentImplHelperBase 109*b1cdbd2cSJim Jagielski , public ::com::sun::star::lang::XTypeProvider 110*b1cdbd2cSJim Jagielski , public Ifc1, public Ifc2 111*b1cdbd2cSJim Jagielski { 112*b1cdbd2cSJim Jagielski /** @internal */ 113*b1cdbd2cSJim Jagielski struct cd : public rtl::StaticAggregate< class_data, ImplClassData2 < Ifc1, Ifc2, WeakAggComponentImplHelper2<Ifc1, Ifc2> > > {}; 114*b1cdbd2cSJim Jagielski public: WeakAggComponentImplHelper2(::osl::Mutex & rMutex)115*b1cdbd2cSJim Jagielski inline WeakAggComponentImplHelper2( ::osl::Mutex & rMutex ) throw () 116*b1cdbd2cSJim Jagielski : WeakAggComponentImplHelperBase( rMutex ) 117*b1cdbd2cSJim Jagielski {} queryInterface(::com::sun::star::uno::Type const & rType)118*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryInterface( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) 119*b1cdbd2cSJim Jagielski { return WeakAggComponentImplHelperBase::queryInterface( rType ); } queryAggregation(::com::sun::star::uno::Type const & rType)120*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation( ::com::sun::star::uno::Type const & rType ) throw (::com::sun::star::uno::RuntimeException) 121*b1cdbd2cSJim Jagielski { return WeakAggComponentImplHelper_queryAgg( rType, cd::get(), this, (WeakAggComponentImplHelperBase *)this ); } acquire()122*b1cdbd2cSJim Jagielski virtual void SAL_CALL acquire() throw () 123*b1cdbd2cSJim Jagielski { WeakAggComponentImplHelperBase::acquire(); } release()124*b1cdbd2cSJim Jagielski virtual void SAL_CALL release() throw () 125*b1cdbd2cSJim Jagielski { WeakAggComponentImplHelperBase::release(); } getTypes()126*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes() throw (::com::sun::star::uno::RuntimeException) 127*b1cdbd2cSJim Jagielski { return WeakAggComponentImplHelper_getTypes( cd::get() ); } getImplementationId()128*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() throw (::com::sun::star::uno::RuntimeException) 129*b1cdbd2cSJim Jagielski { return ImplHelper_getImplementationId( cd::get() ); } 130*b1cdbd2cSJim Jagielski }; 131*b1cdbd2cSJim Jagielski } 132*b1cdbd2cSJim Jagielski 133*b1cdbd2cSJim Jagielski #endif 134