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 24*b1cdbd2cSJim Jagielski #ifndef _FRM_INTERFACE_CONTAINER_HXX_ 25*b1cdbd2cSJim Jagielski #define _FRM_INTERFACE_CONTAINER_HXX_ 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <hash_map> 28*b1cdbd2cSJim Jagielski #include <comphelper/stl_types.hxx> 29*b1cdbd2cSJim Jagielski #include <comphelper/types.hxx> 30*b1cdbd2cSJim Jagielski #include <comphelper/uno3.hxx> 31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameReplace.hpp> 32*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexReplace.hpp> 33*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp> 34*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XEventListener.hpp> 35*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/EventObject.hpp> 36*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XEnumerationAccess.hpp> 37*b1cdbd2cSJim Jagielski #include <com/sun/star/io/XPersistObject.hpp> 38*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XFormComponent.hpp> 39*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertyChangeListener.hpp> 40*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyChangeEvent.hpp> 41*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp> 42*b1cdbd2cSJim Jagielski #include <com/sun/star/script/XEventAttacherManager.hpp> 43*b1cdbd2cSJim Jagielski #include <com/sun/star/script/ScriptEvent.hpp> 44*b1cdbd2cSJim Jagielski #include <com/sun/star/script/ScriptEventDescriptor.hpp> 45*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XContainer.hpp> 46*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XIndexContainer.hpp> 47*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp> 48*b1cdbd2cSJim Jagielski #include <com/sun/star/form/XFormComponent.hpp> 49*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCloneable.hpp> 50*b1cdbd2cSJim Jagielski #include <osl/mutex.hxx> 51*b1cdbd2cSJim Jagielski #include <cppuhelper/interfacecontainer.hxx> 52*b1cdbd2cSJim Jagielski #include <cppuhelper/component.hxx> 53*b1cdbd2cSJim Jagielski #include <cppuhelper/implbase8.hxx> 54*b1cdbd2cSJim Jagielski 55*b1cdbd2cSJim Jagielski using namespace comphelper; 56*b1cdbd2cSJim Jagielski 57*b1cdbd2cSJim Jagielski //......................................................................... 58*b1cdbd2cSJim Jagielski namespace frm 59*b1cdbd2cSJim Jagielski { 60*b1cdbd2cSJim Jagielski //......................................................................... 61*b1cdbd2cSJim Jagielski 62*b1cdbd2cSJim Jagielski 63*b1cdbd2cSJim Jagielski //================================================================== 64*b1cdbd2cSJim Jagielski struct ElementDescription 65*b1cdbd2cSJim Jagielski { 66*b1cdbd2cSJim Jagielski public: 67*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xInterface; 68*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet > xPropertySet; 69*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::container::XChild > xChild; 70*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Any aElementTypeInterface; 71*b1cdbd2cSJim Jagielski 72*b1cdbd2cSJim Jagielski public: 73*b1cdbd2cSJim Jagielski ElementDescription( ); 74*b1cdbd2cSJim Jagielski virtual ~ElementDescription(); 75*b1cdbd2cSJim Jagielski 76*b1cdbd2cSJim Jagielski private: 77*b1cdbd2cSJim Jagielski ElementDescription( const ElementDescription& ); // never implemented 78*b1cdbd2cSJim Jagielski ElementDescription& operator=( const ElementDescription& ); // never implemented 79*b1cdbd2cSJim Jagielski }; 80*b1cdbd2cSJim Jagielski 81*b1cdbd2cSJim Jagielski typedef ::std::vector<InterfaceRef> OInterfaceArray; 82*b1cdbd2cSJim Jagielski typedef ::std::hash_multimap< ::rtl::OUString, InterfaceRef, ::comphelper::UStringHash, ::comphelper::UStringEqual> OInterfaceMap; 83*b1cdbd2cSJim Jagielski 84*b1cdbd2cSJim Jagielski //================================================================== 85*b1cdbd2cSJim Jagielski // OInterfaceContainer 86*b1cdbd2cSJim Jagielski // implements a container for form components 87*b1cdbd2cSJim Jagielski //================================================================== 88*b1cdbd2cSJim Jagielski typedef ::cppu::ImplHelper8 < ::com::sun::star::container::XNameContainer 89*b1cdbd2cSJim Jagielski , ::com::sun::star::container::XIndexContainer 90*b1cdbd2cSJim Jagielski , ::com::sun::star::container::XContainer 91*b1cdbd2cSJim Jagielski , ::com::sun::star::container::XEnumerationAccess 92*b1cdbd2cSJim Jagielski , ::com::sun::star::script::XEventAttacherManager 93*b1cdbd2cSJim Jagielski , ::com::sun::star::beans::XPropertyChangeListener 94*b1cdbd2cSJim Jagielski , ::com::sun::star::io::XPersistObject 95*b1cdbd2cSJim Jagielski , ::com::sun::star::util::XCloneable 96*b1cdbd2cSJim Jagielski > OInterfaceContainer_BASE; 97*b1cdbd2cSJim Jagielski 98*b1cdbd2cSJim Jagielski class OInterfaceContainer : public OInterfaceContainer_BASE 99*b1cdbd2cSJim Jagielski { 100*b1cdbd2cSJim Jagielski protected: 101*b1cdbd2cSJim Jagielski ::osl::Mutex& m_rMutex; 102*b1cdbd2cSJim Jagielski 103*b1cdbd2cSJim Jagielski OInterfaceArray m_aItems; 104*b1cdbd2cSJim Jagielski OInterfaceMap m_aMap; 105*b1cdbd2cSJim Jagielski ::cppu::OInterfaceContainerHelper m_aContainerListeners; 106*b1cdbd2cSJim Jagielski 107*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Type m_aElementType; 108*b1cdbd2cSJim Jagielski 109*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory> m_xServiceFactory; 110*b1cdbd2cSJim Jagielski 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski // EventManager 113*b1cdbd2cSJim Jagielski ::com::sun::star::uno::Reference< ::com::sun::star::script::XEventAttacherManager> m_xEventAttacher; 114*b1cdbd2cSJim Jagielski 115*b1cdbd2cSJim Jagielski public: 116*b1cdbd2cSJim Jagielski OInterfaceContainer( 117*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory, 118*b1cdbd2cSJim Jagielski ::osl::Mutex& _rMutex, 119*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Type& _rElementType); 120*b1cdbd2cSJim Jagielski 121*b1cdbd2cSJim Jagielski OInterfaceContainer( ::osl::Mutex& _rMutex, const OInterfaceContainer& _cloneSource ); 122*b1cdbd2cSJim Jagielski 123*b1cdbd2cSJim Jagielski // late constructor for cloning 124*b1cdbd2cSJim Jagielski void clonedFrom( const OInterfaceContainer& _cloneSource ); 125*b1cdbd2cSJim Jagielski 126*b1cdbd2cSJim Jagielski protected: 127*b1cdbd2cSJim Jagielski virtual ~OInterfaceContainer(); 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski public: 130*b1cdbd2cSJim Jagielski // ::com::sun::star::io::XPersistObject 131*b1cdbd2cSJim Jagielski virtual ::rtl::OUString SAL_CALL getServiceName( ) throw(::com::sun::star::uno::RuntimeException) = 0; 132*b1cdbd2cSJim Jagielski virtual void SAL_CALL write( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream >& OutStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); 133*b1cdbd2cSJim Jagielski virtual void SAL_CALL read( const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream >& InStream ) throw(::com::sun::star::io::IOException, ::com::sun::star::uno::RuntimeException); 134*b1cdbd2cSJim Jagielski 135*b1cdbd2cSJim Jagielski // ::com::sun::star::lang::XEventListener 136*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(const ::com::sun::star::lang::EventObject& _rSource) throw(::com::sun::star::uno::RuntimeException); 137*b1cdbd2cSJim Jagielski 138*b1cdbd2cSJim Jagielski // ::com::sun::star::beans::XPropertyChangeListener 139*b1cdbd2cSJim Jagielski virtual void SAL_CALL propertyChange(const ::com::sun::star::beans::PropertyChangeEvent& evt) throw (::com::sun::star::uno::RuntimeException); 140*b1cdbd2cSJim Jagielski 141*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XElementAccess 142*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Type SAL_CALL getElementType() throw(::com::sun::star::uno::RuntimeException) ; 143*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL hasElements() throw(::com::sun::star::uno::RuntimeException); 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XEnumerationAccess 146*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::container::XEnumeration> SAL_CALL createEnumeration() throw(::com::sun::star::uno::RuntimeException); 147*b1cdbd2cSJim Jagielski 148*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XNameAccess 149*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL getByName( const ::rtl::OUString& aName ) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 150*b1cdbd2cSJim Jagielski virtual StringSequence SAL_CALL getElementNames( ) throw(::com::sun::star::uno::RuntimeException); 151*b1cdbd2cSJim Jagielski virtual sal_Bool SAL_CALL hasByName( const ::rtl::OUString& aName ) throw(::com::sun::star::uno::RuntimeException); 152*b1cdbd2cSJim Jagielski 153*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XNameReplace 154*b1cdbd2cSJim Jagielski virtual void SAL_CALL replaceByName(const ::rtl::OUString& Name, const ::com::sun::star::uno::Any& _rElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 155*b1cdbd2cSJim Jagielski 156*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XNameContainer 157*b1cdbd2cSJim Jagielski virtual void SAL_CALL insertByName(const ::rtl::OUString& Name, const ::com::sun::star::uno::Any& _rElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::container::ElementExistException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 158*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeByName(const ::rtl::OUString& Name) throw(::com::sun::star::container::NoSuchElementException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XIndexAccess 161*b1cdbd2cSJim Jagielski virtual sal_Int32 SAL_CALL getCount() throw(::com::sun::star::uno::RuntimeException); 162*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL getByIndex(sal_Int32 _nIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 163*b1cdbd2cSJim Jagielski 164*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XIndexReplace 165*b1cdbd2cSJim Jagielski virtual void SAL_CALL replaceByIndex(sal_Int32 _nIndex, const ::com::sun::star::uno::Any& _rElement) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 166*b1cdbd2cSJim Jagielski 167*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XIndexContainer 168*b1cdbd2cSJim Jagielski virtual void SAL_CALL insertByIndex(sal_Int32 _nIndex, const ::com::sun::star::uno::Any& Element) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 169*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeByIndex(sal_Int32 _nIndex) throw(::com::sun::star::lang::IndexOutOfBoundsException, ::com::sun::star::lang::WrappedTargetException, ::com::sun::star::uno::RuntimeException); 170*b1cdbd2cSJim Jagielski 171*b1cdbd2cSJim Jagielski // ::com::sun::star::container::XContainer 172*b1cdbd2cSJim Jagielski virtual void SAL_CALL addContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); 173*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeContainerListener(const ::com::sun::star::uno::Reference< ::com::sun::star::container::XContainerListener>& _rxListener) throw(::com::sun::star::uno::RuntimeException); 174*b1cdbd2cSJim Jagielski 175*b1cdbd2cSJim Jagielski // ::com::sun::star::script::XEventAttacherManager 176*b1cdbd2cSJim Jagielski virtual void SAL_CALL registerScriptEvent( sal_Int32 nIndex, const ::com::sun::star::script::ScriptEventDescriptor& aScriptEvent ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 177*b1cdbd2cSJim Jagielski virtual void SAL_CALL registerScriptEvents( sal_Int32 nIndex, const ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor >& aScriptEvents ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 178*b1cdbd2cSJim Jagielski virtual void SAL_CALL revokeScriptEvent( sal_Int32 nIndex, const ::rtl::OUString& aListenerType, const ::rtl::OUString& aEventMethod, const ::rtl::OUString& aRemoveListenerParam ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 179*b1cdbd2cSJim Jagielski virtual void SAL_CALL revokeScriptEvents( sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 180*b1cdbd2cSJim Jagielski virtual void SAL_CALL insertEntry( sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 181*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeEntry( sal_Int32 nIndex ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 182*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::script::ScriptEventDescriptor > SAL_CALL getScriptEvents( sal_Int32 Index ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 183*b1cdbd2cSJim Jagielski virtual void SAL_CALL attach( sal_Int32 nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xObject, const ::com::sun::star::uno::Any& aHelper ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::lang::ServiceNotRegisteredException, ::com::sun::star::uno::RuntimeException); 184*b1cdbd2cSJim Jagielski virtual void SAL_CALL detach( sal_Int32 nIndex, const ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface >& xObject ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 185*b1cdbd2cSJim Jagielski virtual void SAL_CALL addScriptListener( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& xListener ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 186*b1cdbd2cSJim Jagielski virtual void SAL_CALL removeScriptListener( const ::com::sun::star::uno::Reference< ::com::sun::star::script::XScriptListener >& Listener ) throw(::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski protected: 189*b1cdbd2cSJim Jagielski // helper 190*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(); 191*b1cdbd2cSJim Jagielski virtual void removeElementsNoEvents(sal_Int32 nIndex); 192*b1cdbd2cSJim Jagielski 193*b1cdbd2cSJim Jagielski /** to be overridden if elements which are to be inserted into the container shall be checked 194*b1cdbd2cSJim Jagielski 195*b1cdbd2cSJim Jagielski <p>the ElementDescription given can be used to cache information about the object - it will be passed 196*b1cdbd2cSJim Jagielski later on to implInserted/implReplaced.</p> 197*b1cdbd2cSJim Jagielski */ 198*b1cdbd2cSJim Jagielski virtual void approveNewElement( 199*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject, 200*b1cdbd2cSJim Jagielski ElementDescription* _pElement 201*b1cdbd2cSJim Jagielski ); 202*b1cdbd2cSJim Jagielski 203*b1cdbd2cSJim Jagielski virtual ElementDescription* createElementMetaData( ); 204*b1cdbd2cSJim Jagielski 205*b1cdbd2cSJim Jagielski /** inserts an object into our internal structures 206*b1cdbd2cSJim Jagielski 207*b1cdbd2cSJim Jagielski @param _nIndex 208*b1cdbd2cSJim Jagielski the index at which position it should be inserted 209*b1cdbd2cSJim Jagielski @param _bEvents 210*b1cdbd2cSJim Jagielski if <TRUE/>, event knittings will be done 211*b1cdbd2cSJim Jagielski @param _pApprovalResult 212*b1cdbd2cSJim Jagielski must contain the result of an approveNewElement call. Can be <NULL/>, in this case, the approval 213*b1cdbd2cSJim Jagielski is done within implInsert. 214*b1cdbd2cSJim Jagielski @param _bFire 215*b1cdbd2cSJim Jagielski if <TRUE/>, a notification about the insertion will be fired 216*b1cdbd2cSJim Jagielski */ 217*b1cdbd2cSJim Jagielski void implInsert( 218*b1cdbd2cSJim Jagielski sal_Int32 _nIndex, 219*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Reference< ::com::sun::star::beans::XPropertySet >& _rxObject, 220*b1cdbd2cSJim Jagielski sal_Bool _bEvents /* = sal_True */, 221*b1cdbd2cSJim Jagielski ElementDescription* _pApprovalResult /* = NULL */ , 222*b1cdbd2cSJim Jagielski sal_Bool _bFire /* = sal_True */ 223*b1cdbd2cSJim Jagielski ) throw(::com::sun::star::lang::IllegalArgumentException); 224*b1cdbd2cSJim Jagielski 225*b1cdbd2cSJim Jagielski // called after the object is inserted, but before the "real listeners" are notified 226*b1cdbd2cSJim Jagielski virtual void implInserted( const ElementDescription* _pElement ); 227*b1cdbd2cSJim Jagielski // called after the object is removed, but before the "real listeners" are notified 228*b1cdbd2cSJim Jagielski virtual void implRemoved(const InterfaceRef& _rxObject); 229*b1cdbd2cSJim Jagielski 230*b1cdbd2cSJim Jagielski /** called after an object was replaced. The default implementation notifies our listeners, after releasing 231*b1cdbd2cSJim Jagielski the instance lock. 232*b1cdbd2cSJim Jagielski */ 233*b1cdbd2cSJim Jagielski virtual void impl_replacedElement( 234*b1cdbd2cSJim Jagielski const ::com::sun::star::container::ContainerEvent& _rEvent, 235*b1cdbd2cSJim Jagielski ::osl::ClearableMutexGuard& _rInstanceLock 236*b1cdbd2cSJim Jagielski ); 237*b1cdbd2cSJim Jagielski 238*b1cdbd2cSJim Jagielski void SAL_CALL writeEvents(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectOutputStream>& _rxOutStream); 239*b1cdbd2cSJim Jagielski void SAL_CALL readEvents(const ::com::sun::star::uno::Reference< ::com::sun::star::io::XObjectInputStream>& _rxInStream); 240*b1cdbd2cSJim Jagielski 241*b1cdbd2cSJim Jagielski /** replace an element, specified by position 242*b1cdbd2cSJim Jagielski 243*b1cdbd2cSJim Jagielski @precond <arg>_nIndex</arg> is a valid index 244*b1cdbd2cSJim Jagielski @precond our mutex is locked exactly once, by the guard specified with <arg>_rClearBeforeNotify</arg> 245*b1cdbd2cSJim Jagielski 246*b1cdbd2cSJim Jagielski */ 247*b1cdbd2cSJim Jagielski void implReplaceByIndex( 248*b1cdbd2cSJim Jagielski const sal_Int32 _nIndex, 249*b1cdbd2cSJim Jagielski const ::com::sun::star::uno::Any& _rNewElement, 250*b1cdbd2cSJim Jagielski ::osl::ClearableMutexGuard& _rClearBeforeNotify 251*b1cdbd2cSJim Jagielski ); 252*b1cdbd2cSJim Jagielski 253*b1cdbd2cSJim Jagielski /** removes an element, specified by position 254*b1cdbd2cSJim Jagielski 255*b1cdbd2cSJim Jagielski @precond <arg>_nIndex</arg> is a valid index 256*b1cdbd2cSJim Jagielski @precond our mutex is locked exactly once, by the guard specified with <arg>_rClearBeforeNotify</arg> 257*b1cdbd2cSJim Jagielski 258*b1cdbd2cSJim Jagielski */ 259*b1cdbd2cSJim Jagielski void implRemoveByIndex( 260*b1cdbd2cSJim Jagielski const sal_Int32 _nIndex, 261*b1cdbd2cSJim Jagielski ::osl::ClearableMutexGuard& _rClearBeforeNotify 262*b1cdbd2cSJim Jagielski ); 263*b1cdbd2cSJim Jagielski 264*b1cdbd2cSJim Jagielski /** validates the given index 265*b1cdbd2cSJim Jagielski @throws ::com::sun::star::lang::IndexOutOfBoundsException 266*b1cdbd2cSJim Jagielski if the given index does not denote a valid position in our childs array 267*b1cdbd2cSJim Jagielski */ 268*b1cdbd2cSJim Jagielski void implCheckIndex( const sal_Int32 _nIndex ) SAL_THROW( ( ::com::sun::star::lang::IndexOutOfBoundsException ) ); 269*b1cdbd2cSJim Jagielski 270*b1cdbd2cSJim Jagielski private: 271*b1cdbd2cSJim Jagielski // hack for Vba Events 272*b1cdbd2cSJim Jagielski void impl_addVbEvents_nolck_nothrow( const sal_Int32 i_nIndex ); 273*b1cdbd2cSJim Jagielski 274*b1cdbd2cSJim Jagielski // the runtime event format has changed from version SO5.2 to OOo 275*b1cdbd2cSJim Jagielski enum EventFormat 276*b1cdbd2cSJim Jagielski { 277*b1cdbd2cSJim Jagielski efVersionSO5x, 278*b1cdbd2cSJim Jagielski efVersionSO6x 279*b1cdbd2cSJim Jagielski }; 280*b1cdbd2cSJim Jagielski void transformEvents( const EventFormat _eTargetFormat ); 281*b1cdbd2cSJim Jagielski 282*b1cdbd2cSJim Jagielski void impl_createEventAttacher_nothrow(); 283*b1cdbd2cSJim Jagielski }; 284*b1cdbd2cSJim Jagielski 285*b1cdbd2cSJim Jagielski //================================================================== 286*b1cdbd2cSJim Jagielski //= OFormComponents 287*b1cdbd2cSJim Jagielski //================================================================== 288*b1cdbd2cSJim Jagielski typedef ::cppu::ImplHelper1< ::com::sun::star::form::XFormComponent> OFormComponents_BASE; 289*b1cdbd2cSJim Jagielski typedef ::cppu::OComponentHelper FormComponentsBase; 290*b1cdbd2cSJim Jagielski // else MSVC kills itself on some statements 291*b1cdbd2cSJim Jagielski class OFormComponents :public FormComponentsBase 292*b1cdbd2cSJim Jagielski ,public OInterfaceContainer 293*b1cdbd2cSJim Jagielski ,public OFormComponents_BASE 294*b1cdbd2cSJim Jagielski { 295*b1cdbd2cSJim Jagielski protected: 296*b1cdbd2cSJim Jagielski ::osl::Mutex m_aMutex; 297*b1cdbd2cSJim Jagielski ::comphelper::InterfaceRef m_xParent; 298*b1cdbd2cSJim Jagielski 299*b1cdbd2cSJim Jagielski public: 300*b1cdbd2cSJim Jagielski OFormComponents(const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory>& _rxFactory); 301*b1cdbd2cSJim Jagielski OFormComponents( const OFormComponents& _cloneSource ); 302*b1cdbd2cSJim Jagielski virtual ~OFormComponents(); 303*b1cdbd2cSJim Jagielski 304*b1cdbd2cSJim Jagielski DECLARE_UNO3_AGG_DEFAULTS(OFormComponents, FormComponentsBase); 305*b1cdbd2cSJim Jagielski 306*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Any SAL_CALL queryAggregation(const ::com::sun::star::uno::Type& _rType) throw(::com::sun::star::uno::RuntimeException); 307*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Sequence< ::com::sun::star::uno::Type > SAL_CALL getTypes( ) throw(::com::sun::star::uno::RuntimeException); 308*b1cdbd2cSJim Jagielski 309*b1cdbd2cSJim Jagielski // OComponentHelper 310*b1cdbd2cSJim Jagielski virtual void SAL_CALL disposing(); 311*b1cdbd2cSJim Jagielski 312*b1cdbd2cSJim Jagielski // ::com::sun::star::form::XFormComponent 313*b1cdbd2cSJim Jagielski virtual ::comphelper::InterfaceRef SAL_CALL getParent() throw(::com::sun::star::uno::RuntimeException); 314*b1cdbd2cSJim Jagielski virtual void SAL_CALL setParent(const ::comphelper::InterfaceRef& Parent) throw(::com::sun::star::lang::NoSupportException, ::com::sun::star::uno::RuntimeException); 315*b1cdbd2cSJim Jagielski 316*b1cdbd2cSJim Jagielski // XEventListener 317*b1cdbd2cSJim Jagielski using OInterfaceContainer::disposing; 318*b1cdbd2cSJim Jagielski }; 319*b1cdbd2cSJim Jagielski //......................................................................... 320*b1cdbd2cSJim Jagielski } // namespace frm 321*b1cdbd2cSJim Jagielski //......................................................................... 322*b1cdbd2cSJim Jagielski 323*b1cdbd2cSJim Jagielski #endif // _FRM_INTERFACE_CONTAINER_HXX_ 324*b1cdbd2cSJim Jagielski 325