eventattachermgr.cxx (49b34792) | eventattachermgr.cxx (d75c37ae) |
---|---|
1/************************************************************** | 1/************************************************************** |
2 * | 2 * |
3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at | 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at |
10 * | 10 * |
11 * http://www.apache.org/licenses/LICENSE-2.0 | 11 * http://www.apache.org/licenses/LICENSE-2.0 |
12 * | 12 * |
13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. | 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. |
19 * | 19 * |
20 *************************************************************/ 21 22 23 24// MARKER(update_precomp.py): autogen include statement, do not remove 25#include "precompiled_comphelper.hxx" 26 27#include <deque> 28 | 20 *************************************************************/ 21 22 23 24// MARKER(update_precomp.py): autogen include statement, do not remove 25#include "precompiled_comphelper.hxx" 26 27#include <deque> 28 |
29#if defined( OS2 ) || defined( UNX ) | 29#if defined( OS2 ) || defined( UNX ) |
30#include <wchar.h> 31#endif 32#include <osl/mutex.hxx> 33#ifndef _VOS_DIAGNOSE_HXX_ 34#include <vos/diagnose.hxx> 35#endif 36#include <vos/macros.hxx> 37#include <comphelper/eventattachermgr.hxx> --- 28 unchanged lines hidden (view full) --- 66using namespace rtl; 67 68namespace comphelper 69{ 70 71//----------------------------------------------------------------------------- 72struct AttachedObject_Impl 73{ | 30#include <wchar.h> 31#endif 32#include <osl/mutex.hxx> 33#ifndef _VOS_DIAGNOSE_HXX_ 34#include <vos/diagnose.hxx> 35#endif 36#include <vos/macros.hxx> 37#include <comphelper/eventattachermgr.hxx> --- 28 unchanged lines hidden (view full) --- 66using namespace rtl; 67 68namespace comphelper 69{ 70 71//----------------------------------------------------------------------------- 72struct AttachedObject_Impl 73{ |
74 Reference< XInterface > xTarget; 75 Sequence< Reference< XEventListener > > aAttachedListenerSeq; 76 Any aHelper; | 74 Reference< XInterface > xTarget; 75 Sequence< Reference< XEventListener > > aAttachedListenerSeq; 76 Any aHelper; |
77 | 77 |
78 bool operator<( const AttachedObject_Impl & ) const; 79 bool operator==( const AttachedObject_Impl & ) const; | 78 bool operator<( const AttachedObject_Impl & ) const; 79 bool operator==( const AttachedObject_Impl & ) const; |
80}; 81 82struct AttacherIndex_Impl 83{ 84#ifdef DEQUE_OK | 80}; 81 82struct AttacherIndex_Impl 83{ 84#ifdef DEQUE_OK |
85 ::std::deque< ScriptEventDescriptor > aEventList; | 85 ::std::deque< ScriptEventDescriptor > aEventList; |
86#else | 86#else |
87 Sequence< ScriptEventDescriptor > aEventList; | 87 Sequence< ScriptEventDescriptor > aEventList; |
88#endif | 88#endif |
89 ::std::deque< AttachedObject_Impl > aObjList; | 89 ::std::deque< AttachedObject_Impl > aObjList; |
90 | 90 |
91 bool operator<( const AttacherIndex_Impl & ) const; 92 bool operator==( const AttacherIndex_Impl & ) const; | 91 bool operator<( const AttacherIndex_Impl & ) const; 92 bool operator==( const AttacherIndex_Impl & ) const; |
93}; 94 95#if 0 96bool AttachedObject_Impl::operator<( const AttachedObject_Impl & r ) const 97{ | 93}; 94 95#if 0 96bool AttachedObject_Impl::operator<( const AttachedObject_Impl & r ) const 97{ |
98 VOS_ENSHURE( FALSE, "not implemented" ); 99 return FALSE; 100 return this < &r; | 98 VOS_ENSHURE( FALSE, "not implemented" ); 99 return FALSE; 100 return this < &r; |
101} 102 103bool AttachedObject_Impl::operator==( const AttachedObject_Impl & r ) const 104{ | 101} 102 103bool AttachedObject_Impl::operator==( const AttachedObject_Impl & r ) const 104{ |
105 VOS_ENSHURE( FALSE, "not implemented" ); 106 return this == &r; | 105 VOS_ENSHURE( FALSE, "not implemented" ); 106 return this == &r; |
107} 108 109bool AttacherIndex_Impl::operator<( const AttacherIndex_Impl & r ) const 110{ | 107} 108 109bool AttacherIndex_Impl::operator<( const AttacherIndex_Impl & r ) const 110{ |
111 VOS_ENSHURE( FALSE, "not implemented" ); 112 return this < &r; | 111 VOS_ENSHURE( FALSE, "not implemented" ); 112 return this < &r; |
113} 114bool AttacherIndex_Impl::operator==( const AttacherIndex_Impl & r ) const 115{ | 113} 114bool AttacherIndex_Impl::operator==( const AttacherIndex_Impl & r ) const 115{ |
116 VOS_ENSHURE( FALSE, "not implemented" ); 117 return this == &r; | 116 VOS_ENSHURE( FALSE, "not implemented" ); 117 return this == &r; |
118} 119#endif 120 121//----------------------------------------------------------------------------- 122class ImplEventAttacherManager | 118} 119#endif 120 121//----------------------------------------------------------------------------- 122class ImplEventAttacherManager |
123 : public WeakImplHelper2< XEventAttacherManager, XPersistObject > | 123 : public WeakImplHelper2< XEventAttacherManager, XPersistObject > |
124{ | 124{ |
125 friend class AttacherAllListener_Impl; 126 ::std::deque< AttacherIndex_Impl > aIndex; 127 Mutex aLock; 128 // Container fuer die ScriptListener 129 OInterfaceContainerHelper aScriptListeners; 130 // EventAttacher-Instanz 131 Reference< XEventAttacher > xAttacher; | 125 friend class AttacherAllListener_Impl; 126 ::std::deque< AttacherIndex_Impl > aIndex; 127 Mutex aLock; 128 // Container fuer die ScriptListener 129 OInterfaceContainerHelper aScriptListeners; 130 // EventAttacher-Instanz 131 Reference< XEventAttacher > xAttacher; |
132 Reference< XMultiServiceFactory > mxSMgr; 133 Reference< XIdlReflection > mxCoreReflection; | 132 Reference< XMultiServiceFactory > mxSMgr; 133 Reference< XIdlReflection > mxCoreReflection; |
134 Reference< XIntrospection > mxIntrospection; 135 Reference< XTypeConverter > xConverter; 136 sal_Int16 nVersion; | 134 Reference< XIntrospection > mxIntrospection; 135 Reference< XTypeConverter > xConverter; 136 sal_Int16 nVersion; |
137public: | 137public: |
138 ImplEventAttacherManager( const Reference< XIntrospection > & rIntrospection, | 138 ImplEventAttacherManager( const Reference< XIntrospection > & rIntrospection, |
139 const Reference< XMultiServiceFactory > rSMgr ); | 139 const Reference< XMultiServiceFactory > rSMgr ); |
140 ~ImplEventAttacherManager(); | 140 ~ImplEventAttacherManager(); |
141 | 141 |
142 // Methoden von XEventAttacherManager 143 virtual void SAL_CALL registerScriptEvent(sal_Int32 Index, const ScriptEventDescriptor& ScriptEvent) 144 throw( IllegalArgumentException, RuntimeException ); 145 virtual void SAL_CALL registerScriptEvents(sal_Int32 Index, const Sequence< ScriptEventDescriptor >& ScriptEvents) 146 throw( IllegalArgumentException, RuntimeException ); 147 virtual void SAL_CALL revokeScriptEvent(sal_Int32 Index, const OUString& ListenerType, const OUString& EventMethod, const OUString& removeListenerParam) 148 throw( IllegalArgumentException, RuntimeException ); 149 virtual void SAL_CALL revokeScriptEvents(sal_Int32 Index) 150 throw( IllegalArgumentException, RuntimeException ); 151 virtual void SAL_CALL insertEntry(sal_Int32 Index) 152 throw( IllegalArgumentException, RuntimeException ); 153 virtual void SAL_CALL removeEntry(sal_Int32 Index) 154 throw( IllegalArgumentException, RuntimeException ); 155 virtual Sequence< ScriptEventDescriptor > SAL_CALL getScriptEvents(sal_Int32 Index) 156 throw( IllegalArgumentException, RuntimeException ); 157 virtual void SAL_CALL attach(sal_Int32 Index, const Reference< XInterface >& Object, const Any& Helper) 158 throw( IllegalArgumentException, ServiceNotRegisteredException, RuntimeException ); 159 virtual void SAL_CALL detach(sal_Int32 nIndex, const Reference< XInterface >& xObject) 160 throw( IllegalArgumentException, RuntimeException ); 161 virtual void SAL_CALL addScriptListener(const Reference< XScriptListener >& aListener) 162 throw( IllegalArgumentException, RuntimeException ); 163 virtual void SAL_CALL removeScriptListener(const Reference< XScriptListener >& Listener) 164 throw( IllegalArgumentException, RuntimeException ); | 142 // Methoden von XEventAttacherManager 143 virtual void SAL_CALL registerScriptEvent(sal_Int32 Index, const ScriptEventDescriptor& ScriptEvent) 144 throw( IllegalArgumentException, RuntimeException ); 145 virtual void SAL_CALL registerScriptEvents(sal_Int32 Index, const Sequence< ScriptEventDescriptor >& ScriptEvents) 146 throw( IllegalArgumentException, RuntimeException ); 147 virtual void SAL_CALL revokeScriptEvent(sal_Int32 Index, const OUString& ListenerType, const OUString& EventMethod, const OUString& removeListenerParam) 148 throw( IllegalArgumentException, RuntimeException ); 149 virtual void SAL_CALL revokeScriptEvents(sal_Int32 Index) 150 throw( IllegalArgumentException, RuntimeException ); 151 virtual void SAL_CALL insertEntry(sal_Int32 Index) 152 throw( IllegalArgumentException, RuntimeException ); 153 virtual void SAL_CALL removeEntry(sal_Int32 Index) 154 throw( IllegalArgumentException, RuntimeException ); 155 virtual Sequence< ScriptEventDescriptor > SAL_CALL getScriptEvents(sal_Int32 Index) 156 throw( IllegalArgumentException, RuntimeException ); 157 virtual void SAL_CALL attach(sal_Int32 Index, const Reference< XInterface >& Object, const Any& Helper) 158 throw( IllegalArgumentException, ServiceNotRegisteredException, RuntimeException ); 159 virtual void SAL_CALL detach(sal_Int32 nIndex, const Reference< XInterface >& xObject) 160 throw( IllegalArgumentException, RuntimeException ); 161 virtual void SAL_CALL addScriptListener(const Reference< XScriptListener >& aListener) 162 throw( IllegalArgumentException, RuntimeException ); 163 virtual void SAL_CALL removeScriptListener(const Reference< XScriptListener >& Listener) 164 throw( IllegalArgumentException, RuntimeException ); |
165 | 165 |
166 // Methoden von XPersistObject 167 virtual OUString SAL_CALL getServiceName(void) throw( RuntimeException ); 168 virtual void SAL_CALL write(const Reference< XObjectOutputStream >& OutStream) throw( IOException, RuntimeException ); 169 virtual void SAL_CALL read(const Reference< XObjectInputStream >& InStream) throw( IOException, RuntimeException ); | 166 // Methoden von XPersistObject 167 virtual OUString SAL_CALL getServiceName(void) throw( RuntimeException ); 168 virtual void SAL_CALL write(const Reference< XObjectOutputStream >& OutStream) throw( IOException, RuntimeException ); 169 virtual void SAL_CALL read(const Reference< XObjectInputStream >& InStream) throw( IOException, RuntimeException ); |
170 171private: 172 Reference< XIdlReflection > getReflection() throw( Exception ); 173 174 /** checks if <arg>_nIndex</arg> is a valid index, throws an <type>IllegalArgumentException</type> if not 175 @param _nIndex 176 the index to check 177 @return --- 5 unchanged lines hidden (view full) --- 183//======================================================================== 184//======================================================================== 185//======================================================================== 186 187// Implementation eines EventAttacher-bezogenen AllListeners, der 188// nur einzelne Events an einen allgemeinen AllListener weiterleitet 189class AttacherAllListener_Impl : public WeakImplHelper1< XAllListener > 190{ | 170 171private: 172 Reference< XIdlReflection > getReflection() throw( Exception ); 173 174 /** checks if <arg>_nIndex</arg> is a valid index, throws an <type>IllegalArgumentException</type> if not 175 @param _nIndex 176 the index to check 177 @return --- 5 unchanged lines hidden (view full) --- 183//======================================================================== 184//======================================================================== 185//======================================================================== 186 187// Implementation eines EventAttacher-bezogenen AllListeners, der 188// nur einzelne Events an einen allgemeinen AllListener weiterleitet 189class AttacherAllListener_Impl : public WeakImplHelper1< XAllListener > 190{ |
191 ImplEventAttacherManager* mpManager; 192 Reference< XEventAttacherManager > xManager; 193 OUString aScriptType; 194 OUString aScriptCode; 195 sal_Int16 nVersion; | 191 ImplEventAttacherManager* mpManager; 192 Reference< XEventAttacherManager > xManager; 193 OUString aScriptType; 194 OUString aScriptCode; 195 sal_Int16 nVersion; |
196 | 196 |
197 void convertToEventReturn( Any & rRet, const Type & rRetType ) 198 throw( CannotConvertException ); | 197 void convertToEventReturn( Any & rRet, const Type & rRetType ) 198 throw( CannotConvertException ); |
199public: | 199public: |
200 AttacherAllListener_Impl( ImplEventAttacherManager* pManager_, const OUString &rScriptType_, 201 const OUString & rScriptCode_ ); | 200 AttacherAllListener_Impl( ImplEventAttacherManager* pManager_, const OUString &rScriptType_, 201 const OUString & rScriptCode_ ); |
202 | 202 |
203 // Methoden von XAllListener 204 virtual void SAL_CALL firing(const AllEventObject& Event) throw( RuntimeException ); 205 virtual Any SAL_CALL approveFiring(const AllEventObject& Event) throw( InvocationTargetException, RuntimeException ); | 203 // Methoden von XAllListener 204 virtual void SAL_CALL firing(const AllEventObject& Event) throw( RuntimeException ); 205 virtual Any SAL_CALL approveFiring(const AllEventObject& Event) throw( InvocationTargetException, RuntimeException ); |
206 | 206 |
207 // Methoden von XEventListener 208 virtual void SAL_CALL disposing(const EventObject& Source) throw( RuntimeException ); | 207 // Methoden von XEventListener 208 virtual void SAL_CALL disposing(const EventObject& Source) throw( RuntimeException ); |
209}; 210 211//======================================================================== 212AttacherAllListener_Impl::AttacherAllListener_Impl 213( | 209}; 210 211//======================================================================== 212AttacherAllListener_Impl::AttacherAllListener_Impl 213( |
214 ImplEventAttacherManager* pManager_, 215 const OUString & rScriptType_, 216 const OUString & rScriptCode_ | 214 ImplEventAttacherManager* pManager_, 215 const OUString & rScriptType_, 216 const OUString & rScriptCode_ |
217) | 217) |
218 : mpManager( pManager_ ) 219 , xManager( pManager_ ) 220 , aScriptType( rScriptType_ ) 221 , aScriptCode( rScriptCode_ ) 222 , nVersion( 2 ) | 218 : mpManager( pManager_ ) 219 , xManager( pManager_ ) 220 , aScriptType( rScriptType_ ) 221 , aScriptCode( rScriptCode_ ) 222 , nVersion( 2 ) |
223{ 224} 225 226 227//======================================================================== 228// Methoden von XAllListener 229void SAL_CALL AttacherAllListener_Impl::firing(const AllEventObject& Event) | 223{ 224} 225 226 227//======================================================================== 228// Methoden von XAllListener 229void SAL_CALL AttacherAllListener_Impl::firing(const AllEventObject& Event) |
230 throw( RuntimeException ) | 230 throw( RuntimeException ) |
231{ | 231{ |
232 ScriptEvent aScriptEvent; 233 aScriptEvent.Source = (OWeakObject *)mpManager; // get correct XInterface 234 aScriptEvent.ListenerType = Event.ListenerType; 235 aScriptEvent.MethodName = Event.MethodName; 236 aScriptEvent.Arguments = Event.Arguments; 237 aScriptEvent.Helper = Event.Helper; 238 aScriptEvent.ScriptType = aScriptType; 239 aScriptEvent.ScriptCode = aScriptCode; | 232 ScriptEvent aScriptEvent; 233 aScriptEvent.Source = (OWeakObject *)mpManager; // get correct XInterface 234 aScriptEvent.ListenerType = Event.ListenerType; 235 aScriptEvent.MethodName = Event.MethodName; 236 aScriptEvent.Arguments = Event.Arguments; 237 aScriptEvent.Helper = Event.Helper; 238 aScriptEvent.ScriptType = aScriptType; 239 aScriptEvent.ScriptCode = aScriptCode; |
240 | 240 |
241 // ueber alle Listener iterieren und Events senden 242 OInterfaceIteratorHelper aIt( mpManager->aScriptListeners ); 243 while( aIt.hasMoreElements() ) 244 ((XScriptListener *)aIt.next())->firing( aScriptEvent ); | 241 // ueber alle Listener iterieren und Events senden 242 OInterfaceIteratorHelper aIt( mpManager->aScriptListeners ); 243 while( aIt.hasMoreElements() ) 244 ((XScriptListener *)aIt.next())->firing( aScriptEvent ); |
245} 246 247//======================================================================== 248// Convert to the standard event return 249void AttacherAllListener_Impl::convertToEventReturn( Any & rRet, const Type & rRetType ) | 245} 246 247//======================================================================== 248// Convert to the standard event return 249void AttacherAllListener_Impl::convertToEventReturn( Any & rRet, const Type & rRetType ) |
250 throw( CannotConvertException ) | 250 throw( CannotConvertException ) |
251{ | 251{ |
252 // no return value? Set to the specified values 253 if( rRet.getValueType().getTypeClass() == TypeClass_VOID ) 254 { 255 switch( rRetType.getTypeClass() ) 256 { 257 case TypeClass_INTERFACE: 258 { 259 rRet <<= Reference< XInterface >(); 260 } 261 break; | 252 // no return value? Set to the specified values 253 if( rRet.getValueType().getTypeClass() == TypeClass_VOID ) 254 { 255 switch( rRetType.getTypeClass() ) 256 { 257 case TypeClass_INTERFACE: 258 { 259 rRet <<= Reference< XInterface >(); 260 } 261 break; |
262 | 262 |
263 case TypeClass_BOOLEAN: 264 rRet <<= sal_True; 265 break; | 263 case TypeClass_BOOLEAN: 264 rRet <<= sal_True; 265 break; |
266 | 266 |
267 case TypeClass_STRING: 268 rRet <<= OUString(); 269 break; | 267 case TypeClass_STRING: 268 rRet <<= OUString(); 269 break; |
270 | 270 |
271 case TypeClass_FLOAT: rRet <<= float(0); break; 272 case TypeClass_DOUBLE: rRet <<= double(0.0); break; 273 case TypeClass_BYTE: rRet <<= sal_uInt8(0); break; | 271 case TypeClass_FLOAT: rRet <<= float(0); break; 272 case TypeClass_DOUBLE: rRet <<= double(0.0); break; 273 case TypeClass_BYTE: rRet <<= sal_uInt8(0); break; |
274 case TypeClass_SHORT: rRet <<= sal_Int16( 0 ); break; 275 case TypeClass_LONG: rRet <<= sal_Int32( 0 ); break; 276 case TypeClass_UNSIGNED_SHORT: rRet <<= sal_uInt16( 0 ); break; 277 case TypeClass_UNSIGNED_LONG: rRet <<= sal_uInt32( 0 ); break; 278 | 274 case TypeClass_SHORT: rRet <<= sal_Int16( 0 ); break; 275 case TypeClass_LONG: rRet <<= sal_Int32( 0 ); break; 276 case TypeClass_UNSIGNED_SHORT: rRet <<= sal_uInt16( 0 ); break; 277 case TypeClass_UNSIGNED_LONG: rRet <<= sal_uInt32( 0 ); break; 278 |
279 default: 280 OSL_ASSERT(false); 281 break; 282 } 283 } 284 else if( !rRet.getValueType().equals( rRetType ) ) 285 { 286 if( mpManager->xConverter.is() ) 287 rRet = mpManager->xConverter->convertTo( rRet, rRetType ); 288 else 289 throw CannotConvertException(); 290 } | 279 default: 280 OSL_ASSERT(false); 281 break; 282 } 283 } 284 else if( !rRet.getValueType().equals( rRetType ) ) 285 { 286 if( mpManager->xConverter.is() ) 287 rRet = mpManager->xConverter->convertTo( rRet, rRetType ); 288 else 289 throw CannotConvertException(); 290 } |
291} 292 293//======================================================================== 294// Methoden von XAllListener 295Any SAL_CALL AttacherAllListener_Impl::approveFiring( const AllEventObject& Event ) | 291} 292 293//======================================================================== 294// Methoden von XAllListener 295Any SAL_CALL AttacherAllListener_Impl::approveFiring( const AllEventObject& Event ) |
296 throw( InvocationTargetException, RuntimeException ) | 296 throw( InvocationTargetException, RuntimeException ) |
297{ | 297{ |
298 ScriptEvent aScriptEvent; 299 aScriptEvent.Source = (OWeakObject *)mpManager; // get correct XInterface 300 aScriptEvent.ListenerType = Event.ListenerType; 301 aScriptEvent.MethodName = Event.MethodName; 302 aScriptEvent.Arguments = Event.Arguments; 303 aScriptEvent.Helper = Event.Helper; 304 aScriptEvent.ScriptType = aScriptType; 305 aScriptEvent.ScriptCode = aScriptCode; | 298 ScriptEvent aScriptEvent; 299 aScriptEvent.Source = (OWeakObject *)mpManager; // get correct XInterface 300 aScriptEvent.ListenerType = Event.ListenerType; 301 aScriptEvent.MethodName = Event.MethodName; 302 aScriptEvent.Arguments = Event.Arguments; 303 aScriptEvent.Helper = Event.Helper; 304 aScriptEvent.ScriptType = aScriptType; 305 aScriptEvent.ScriptCode = aScriptCode; |
306 | 306 |
307 Any aRet; 308 // ueber alle Listener iterieren und Events senden 309 OInterfaceIteratorHelper aIt( mpManager->aScriptListeners ); 310 while( aIt.hasMoreElements() ) 311 { 312 aRet = ((XScriptListener *)aIt.next())->approveFiring( aScriptEvent ); 313 try 314 { | 307 Any aRet; 308 // ueber alle Listener iterieren und Events senden 309 OInterfaceIteratorHelper aIt( mpManager->aScriptListeners ); 310 while( aIt.hasMoreElements() ) 311 { 312 aRet = ((XScriptListener *)aIt.next())->approveFiring( aScriptEvent ); 313 try 314 { |
315 Reference< XIdlClass > xListenerType = mpManager->getReflection()-> 316 forName( Event.ListenerType.getTypeName() ); | 315 Reference< XIdlClass > xListenerType = mpManager->getReflection()-> 316 forName( Event.ListenerType.getTypeName() ); |
317 Reference< XIdlMethod > xMeth = xListenerType->getMethod( Event.MethodName ); 318 if( xMeth.is() ) 319 { 320 Reference< XIdlClass > xRetType = xMeth->getReturnType(); | 317 Reference< XIdlMethod > xMeth = xListenerType->getMethod( Event.MethodName ); 318 if( xMeth.is() ) 319 { 320 Reference< XIdlClass > xRetType = xMeth->getReturnType(); |
321 Type aRetType(xRetType->getTypeClass(), xRetType->getName()); | 321 Type aRetType(xRetType->getTypeClass(), xRetType->getName()); |
322 convertToEventReturn( aRet, aRetType ); 323 } | 322 convertToEventReturn( aRet, aRetType ); 323 } |
324 | 324 |
325 switch( aRet.getValueType().getTypeClass() ) 326 { 327 case TypeClass_INTERFACE: 328 { 329 // Interface not null, return 330 Reference< XInterface > x; | 325 switch( aRet.getValueType().getTypeClass() ) 326 { 327 case TypeClass_INTERFACE: 328 { 329 // Interface not null, return 330 Reference< XInterface > x; |
331 aRet >>= x; | 331 aRet >>= x; |
332 if( x.is() ) 333 return aRet; 334 } 335 break; | 332 if( x.is() ) 333 return aRet; 334 } 335 break; |
336 | 336 |
337 case TypeClass_BOOLEAN: 338 // FALSE -> Return 339 if( !(*(sal_Bool*)aRet.getValue()) ) 340 return aRet; 341 break; | 337 case TypeClass_BOOLEAN: 338 // FALSE -> Return 339 if( !(*(sal_Bool*)aRet.getValue()) ) 340 return aRet; 341 break; |
342 | 342 |
343 case TypeClass_STRING: 344 // none empty string -> return 345 if( ((OUString*)aRet.getValue())->isEmpty() == false ) 346 return aRet; 347 break; | 343 case TypeClass_STRING: 344 // none empty string -> return 345 if( ((OUString*)aRet.getValue())->isEmpty() == false ) 346 return aRet; 347 break; |
348 | 348 |
349 // none zero number -> return 350 case TypeClass_FLOAT: if( *((float*)aRet.getValue()) ) return aRet; break; 351 case TypeClass_DOUBLE: if( *((double*)aRet.getValue()) ) return aRet; break; 352 case TypeClass_BYTE: if( *((sal_uInt8*)aRet.getValue()) ) return aRet; break; 353 case TypeClass_SHORT: if( *((sal_Int16*)aRet.getValue()) ) return aRet; break; 354 case TypeClass_LONG: if( *((sal_Int32*)aRet.getValue()) ) return aRet; break; 355 case TypeClass_UNSIGNED_SHORT: if( *((sal_uInt16*)aRet.getValue()) ) return aRet; break; 356 case TypeClass_UNSIGNED_LONG: if( *((sal_uInt32*)aRet.getValue()) ) return aRet; break; | 349 // none zero number -> return 350 case TypeClass_FLOAT: if( *((float*)aRet.getValue()) ) return aRet; break; 351 case TypeClass_DOUBLE: if( *((double*)aRet.getValue()) ) return aRet; break; 352 case TypeClass_BYTE: if( *((sal_uInt8*)aRet.getValue()) ) return aRet; break; 353 case TypeClass_SHORT: if( *((sal_Int16*)aRet.getValue()) ) return aRet; break; 354 case TypeClass_LONG: if( *((sal_Int32*)aRet.getValue()) ) return aRet; break; 355 case TypeClass_UNSIGNED_SHORT: if( *((sal_uInt16*)aRet.getValue()) ) return aRet; break; 356 case TypeClass_UNSIGNED_LONG: if( *((sal_uInt32*)aRet.getValue()) ) return aRet; break; |
357 | 357 |
358 default: 359 OSL_ASSERT(false); 360 break; 361 } 362 } 363 catch( CannotConvertException& ) 364 { 365 // silent ignore conversions errors from a script call | 358 default: 359 OSL_ASSERT(false); 360 break; 361 } 362 } 363 catch( CannotConvertException& ) 364 { 365 // silent ignore conversions errors from a script call |
366 Reference< XIdlClass > xListenerType = mpManager->getReflection()-> 367 forName( Event.ListenerType.getTypeName() ); | 366 Reference< XIdlClass > xListenerType = mpManager->getReflection()-> 367 forName( Event.ListenerType.getTypeName() ); |
368 Reference< XIdlMethod > xMeth = xListenerType->getMethod( Event.MethodName ); 369 if( xMeth.is() ) 370 { 371 Reference< XIdlClass > xRetType = xMeth->getReturnType(); | 368 Reference< XIdlMethod > xMeth = xListenerType->getMethod( Event.MethodName ); 369 if( xMeth.is() ) 370 { 371 Reference< XIdlClass > xRetType = xMeth->getReturnType(); |
372 Type aRetType(xRetType->getTypeClass(), xRetType->getName()); | 372 Type aRetType(xRetType->getTypeClass(), xRetType->getName()); |
373 aRet.clear(); 374 convertToEventReturn( aRet, aRetType ); 375 } 376 } 377 } 378 return aRet; | 373 aRet.clear(); 374 convertToEventReturn( aRet, aRetType ); 375 } 376 } 377 } 378 return aRet; |
379} 380 381//======================================================================== 382// Methoden von XEventListener 383void SAL_CALL AttacherAllListener_Impl::disposing(const EventObject& ) | 379} 380 381//======================================================================== 382// Methoden von XEventListener 383void SAL_CALL AttacherAllListener_Impl::disposing(const EventObject& ) |
384 throw( RuntimeException ) | 384 throw( RuntimeException ) |
385{ | 385{ |
386 // It is up to the container to release the object | 386 // It is up to the container to release the object |
387} 388 389 390//======================================================================== 391//======================================================================== 392//======================================================================== 393 394// Create-Methode fuer EventAttacherManager 395Reference< XEventAttacherManager > createEventAttacherManager( const Reference< XIntrospection > & rIntrospection, 396 const Reference< XMultiServiceFactory > & rSMgr ) 397 throw( Exception ) 398{ | 387} 388 389 390//======================================================================== 391//======================================================================== 392//======================================================================== 393 394// Create-Methode fuer EventAttacherManager 395Reference< XEventAttacherManager > createEventAttacherManager( const Reference< XIntrospection > & rIntrospection, 396 const Reference< XMultiServiceFactory > & rSMgr ) 397 throw( Exception ) 398{ |
399 return new ImplEventAttacherManager( rIntrospection, rSMgr ); | 399 return new ImplEventAttacherManager( rIntrospection, rSMgr ); |
400} 401 402// Create-Methode fuer EventAttacherManager 403Reference< XEventAttacherManager > createEventAttacherManager( const Reference< XMultiServiceFactory > & rSMgr ) 404 throw( Exception ) 405{ 406 if ( rSMgr.is() ) 407 { 408 Reference< XInterface > xIFace( rSMgr->createInstance( OUString::createFromAscii("com.sun.star.beans.Introspection") ) ); 409 if ( xIFace.is() ) 410 { | 400} 401 402// Create-Methode fuer EventAttacherManager 403Reference< XEventAttacherManager > createEventAttacherManager( const Reference< XMultiServiceFactory > & rSMgr ) 404 throw( Exception ) 405{ 406 if ( rSMgr.is() ) 407 { 408 Reference< XInterface > xIFace( rSMgr->createInstance( OUString::createFromAscii("com.sun.star.beans.Introspection") ) ); 409 if ( xIFace.is() ) 410 { |
411 Reference< XIntrospection > xIntrospection( xIFace, UNO_QUERY); 412 return new ImplEventAttacherManager( xIntrospection, rSMgr ); | 411 Reference< XIntrospection > xIntrospection( xIFace, UNO_QUERY); 412 return new ImplEventAttacherManager( xIntrospection, rSMgr ); |
413 } 414 } 415 416 return Reference< XEventAttacherManager >(); 417} 418 419//----------------------------------------------------------------------------- 420ImplEventAttacherManager::ImplEventAttacherManager( const Reference< XIntrospection > & rIntrospection, 421 const Reference< XMultiServiceFactory > rSMgr ) | 413 } 414 } 415 416 return Reference< XEventAttacherManager >(); 417} 418 419//----------------------------------------------------------------------------- 420ImplEventAttacherManager::ImplEventAttacherManager( const Reference< XIntrospection > & rIntrospection, 421 const Reference< XMultiServiceFactory > rSMgr ) |
422 : aScriptListeners( aLock ) | 422 : aScriptListeners( aLock ) |
423 , mxSMgr( rSMgr ) | 423 , mxSMgr( rSMgr ) |
424 , mxIntrospection( rIntrospection ) | 424 , mxIntrospection( rIntrospection ) |
425{ 426 if ( rSMgr.is() ) 427 { | 425{ 426 if ( rSMgr.is() ) 427 { |
428 Reference< XInterface > xIFace( rSMgr->createInstance( OUString::createFromAscii("com.sun.star.script.EventAttacher") ) ); | 428 Reference< XInterface > xIFace( rSMgr->createInstance( OUString::createFromAscii("com.sun.star.script.EventAttacher") ) ); |
429 if ( xIFace.is() ) 430 { 431 xAttacher = Reference< XEventAttacher >::query( xIFace ); 432 } | 429 if ( xIFace.is() ) 430 { 431 xAttacher = Reference< XEventAttacher >::query( xIFace ); 432 } |
433 xIFace = rSMgr->createInstance( OUString::createFromAscii("com.sun.star.script.Converter") ); | 433 xIFace = rSMgr->createInstance( OUString::createFromAscii("com.sun.star.script.Converter") ); |
434 if ( xIFace.is() ) 435 { 436 xConverter = Reference< XTypeConverter >::query( xIFace ); 437 } 438 } 439 | 434 if ( xIFace.is() ) 435 { 436 xConverter = Reference< XTypeConverter >::query( xIFace ); 437 } 438 } 439 |
440 Reference< XInitialization > xInit( xAttacher, UNO_QUERY ); 441 if( xInit.is() ) 442 { 443 Sequence< Any > Arguments( 1 ); 444 Arguments[0] <<= rIntrospection; 445 xInit->initialize( Arguments ); 446 } | 440 Reference< XInitialization > xInit( xAttacher, UNO_QUERY ); 441 if( xInit.is() ) 442 { 443 Sequence< Any > Arguments( 1 ); 444 Arguments[0] <<= rIntrospection; 445 xInit->initialize( Arguments ); 446 } |
447} 448 449//----------------------------------------------------------------------------- 450ImplEventAttacherManager::~ImplEventAttacherManager() 451{ 452} 453 454Reference< XIdlReflection > ImplEventAttacherManager::getReflection() throw( Exception ) --- 8 unchanged lines hidden (view full) --- 463 return mxCoreReflection; 464} 465 466 467//----------------------------------------------------------------------------- 468::std::deque<AttacherIndex_Impl>::iterator ImplEventAttacherManager::implCheckIndex( sal_Int32 _nIndex ) SAL_THROW ( ( IllegalArgumentException ) ) 469{ 470 if (_nIndex < 0) | 447} 448 449//----------------------------------------------------------------------------- 450ImplEventAttacherManager::~ImplEventAttacherManager() 451{ 452} 453 454Reference< XIdlReflection > ImplEventAttacherManager::getReflection() throw( Exception ) --- 8 unchanged lines hidden (view full) --- 463 return mxCoreReflection; 464} 465 466 467//----------------------------------------------------------------------------- 468::std::deque<AttacherIndex_Impl>::iterator ImplEventAttacherManager::implCheckIndex( sal_Int32 _nIndex ) SAL_THROW ( ( IllegalArgumentException ) ) 469{ 470 if (_nIndex < 0) |
471 throw IllegalArgumentException(); | 471 throw IllegalArgumentException(); |
472 | 472 |
473 ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); 474 for ( sal_Int32 i = 0; (i < _nIndex) && (aIt != aIndex.end()); ++i, ++aIt ) | 473 ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); 474 for ( sal_Int32 i = 0; (i < _nIndex) && (aIt != aIndex.end()); ++i, ++aIt ) |
475 ; 476 | 475 ; 476 |
477 if( aIt == aIndex.end() ) 478 throw IllegalArgumentException(); | 477 if( aIt == aIndex.end() ) 478 throw IllegalArgumentException(); |
479 480 return aIt; 481} 482 483//----------------------------------------------------------------------------- 484void detachAll_Impl 485( | 479 480 return aIt; 481} 482 483//----------------------------------------------------------------------------- 484void detachAll_Impl 485( |
486 ImplEventAttacherManager * pMgr, 487 sal_Int32 nIdx, 488 ::std::deque< AttachedObject_Impl > & rList | 486 ImplEventAttacherManager * pMgr, 487 sal_Int32 nIdx, 488 ::std::deque< AttachedObject_Impl > & rList |
489) 490{ | 489) 490{ |
491 ::std::deque< AttachedObject_Impl >::iterator aObjIt = rList.begin(); 492 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = rList.end(); 493 while( aObjIt != aObjEnd ) 494 { 495 pMgr->detach( nIdx, (*aObjIt).xTarget ); 496 aObjIt++; 497 } | 491 ::std::deque< AttachedObject_Impl >::iterator aObjIt = rList.begin(); 492 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = rList.end(); 493 while( aObjIt != aObjEnd ) 494 { 495 pMgr->detach( nIdx, (*aObjIt).xTarget ); 496 aObjIt++; 497 } |
498} 499 500//----------------------------------------------------------------------------- 501void attachAll_Impl 502( | 498} 499 500//----------------------------------------------------------------------------- 501void attachAll_Impl 502( |
503 ImplEventAttacherManager * pMgr, 504 sal_Int32 nIdx, 505 ::std::deque< AttachedObject_Impl > & rList | 503 ImplEventAttacherManager * pMgr, 504 sal_Int32 nIdx, 505 ::std::deque< AttachedObject_Impl > & rList |
506) 507{ | 506) 507{ |
508 ::std::deque< AttachedObject_Impl >::iterator aObjIt = rList.begin(); 509 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = rList.end(); 510 while( aObjIt != aObjEnd ) 511 { 512 pMgr->attach( nIdx, (*aObjIt).xTarget, (*aObjIt).aHelper ); 513 aObjIt++; 514 } | 508 ::std::deque< AttachedObject_Impl >::iterator aObjIt = rList.begin(); 509 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = rList.end(); 510 while( aObjIt != aObjEnd ) 511 { 512 pMgr->attach( nIdx, (*aObjIt).xTarget, (*aObjIt).aHelper ); 513 aObjIt++; 514 } |
515} 516 517//----------------------------------------------------------------------------- 518//*** Methoden von XEventAttacherManager *** 519void SAL_CALL ImplEventAttacherManager::registerScriptEvent 520( | 515} 516 517//----------------------------------------------------------------------------- 518//*** Methoden von XEventAttacherManager *** 519void SAL_CALL ImplEventAttacherManager::registerScriptEvent 520( |
521 sal_Int32 nIndex, 522 const ScriptEventDescriptor& ScriptEvent | 521 sal_Int32 nIndex, 522 const ScriptEventDescriptor& ScriptEvent |
523) | 523) |
524 throw( IllegalArgumentException, RuntimeException ) | 524 throw( IllegalArgumentException, RuntimeException ) |
525{ | 525{ |
526 Guard< Mutex > aGuard( aLock ); 527 | 526 Guard< Mutex > aGuard( aLock ); 527 |
528 // Index pruefen und Array anpassen 529 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 530 | 528 // Index pruefen und Array anpassen 529 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 530 |
531 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; | 531 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; |
532 | 532 |
533 ScriptEventDescriptor aEvt = ScriptEvent; 534 const sal_Unicode* pLastDot = aEvt.ListenerType.getStr(); 535 pLastDot += rtl_ustr_lastIndexOfChar( pLastDot, '.' ); 536 if( pLastDot ) 537 aEvt.ListenerType = pLastDot +1; | 533 ScriptEventDescriptor aEvt = ScriptEvent; 534 const sal_Unicode* pLastDot = aEvt.ListenerType.getStr(); 535 pLastDot += rtl_ustr_lastIndexOfChar( pLastDot, '.' ); 536 if( pLastDot ) 537 aEvt.ListenerType = pLastDot +1; |
538#ifdef DEQUE_OK | 538#ifdef DEQUE_OK |
539 (*aIt).aEventList.push_back( aEvt ); | 539 (*aIt).aEventList.push_back( aEvt ); |
540#else | 540#else |
541 (*aIt).aEventList.realloc( (*aIt).aEventList.getLength() +1 ); 542 (*aIt).aEventList.getArray()[(*aIt).aEventList.getLength() -1] = aEvt; | 541 (*aIt).aEventList.realloc( (*aIt).aEventList.getLength() +1 ); 542 (*aIt).aEventList.getArray()[(*aIt).aEventList.getLength() -1] = aEvt; |
543#endif 544 | 543#endif 544 |
545 // register new new Event 546 ::std::deque< AttachedObject_Impl >::iterator aObjIt = (*aIt).aObjList.begin(); 547 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = (*aIt).aObjList.end(); 548 while( aObjIt != aObjEnd ) 549 { 550 // resize 551 sal_Int32 nPos = (*aObjIt).aAttachedListenerSeq.getLength(); 552 (*aObjIt).aAttachedListenerSeq.realloc( nPos + 1 ); 553 Reference< XEventListener > * pArray = (*aObjIt).aAttachedListenerSeq.getArray(); | 545 // register new new Event 546 ::std::deque< AttachedObject_Impl >::iterator aObjIt = (*aIt).aObjList.begin(); 547 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = (*aIt).aObjList.end(); 548 while( aObjIt != aObjEnd ) 549 { 550 // resize 551 sal_Int32 nPos = (*aObjIt).aAttachedListenerSeq.getLength(); 552 (*aObjIt).aAttachedListenerSeq.realloc( nPos + 1 ); 553 Reference< XEventListener > * pArray = (*aObjIt).aAttachedListenerSeq.getArray(); |
554 | 554 |
555 Reference< XAllListener > xAll = 556 new AttacherAllListener_Impl( this, ScriptEvent.ScriptType, ScriptEvent.ScriptCode ); 557 try 558 { 559 pArray[nPos] = xAttacher->attachSingleEventListener( (*aObjIt).xTarget, xAll, 560 (*aObjIt).aHelper, ScriptEvent.ListenerType, 561 ScriptEvent.AddListenerParam, ScriptEvent.EventMethod ); 562 } 563 catch( Exception& ) 564 { 565 } | 555 Reference< XAllListener > xAll = 556 new AttacherAllListener_Impl( this, ScriptEvent.ScriptType, ScriptEvent.ScriptCode ); 557 try 558 { 559 pArray[nPos] = xAttacher->attachSingleEventListener( (*aObjIt).xTarget, xAll, 560 (*aObjIt).aHelper, ScriptEvent.ListenerType, 561 ScriptEvent.AddListenerParam, ScriptEvent.EventMethod ); 562 } 563 catch( Exception& ) 564 { 565 } |
566 | 566 |
567 aObjIt++; 568 } | 567 aObjIt++; 568 } |
569} 570 571//----------------------------------------------------------------------------- 572void SAL_CALL ImplEventAttacherManager::registerScriptEvents 573( | 569} 570 571//----------------------------------------------------------------------------- 572void SAL_CALL ImplEventAttacherManager::registerScriptEvents 573( |
574 sal_Int32 nIndex, 575 const Sequence< ScriptEventDescriptor >& ScriptEvents | 574 sal_Int32 nIndex, 575 const Sequence< ScriptEventDescriptor >& ScriptEvents |
576) | 576) |
577 throw( IllegalArgumentException, RuntimeException ) | 577 throw( IllegalArgumentException, RuntimeException ) |
578{ | 578{ |
579 Guard< Mutex > aGuard( aLock ); | 579 Guard< Mutex > aGuard( aLock ); |
580 | 580 |
581 // Index pruefen und Array anpassen | 581 // Index pruefen und Array anpassen |
582 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 583 | 582 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 583 |
584 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 585 detachAll_Impl( this, nIndex, aList ); | 584 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 585 detachAll_Impl( this, nIndex, aList ); |
586 | 586 |
587 const ScriptEventDescriptor* pArray = ScriptEvents.getConstArray(); 588 sal_Int32 nLen = ScriptEvents.getLength(); 589 for( sal_Int32 i = 0 ; i < nLen ; i++ ) 590 registerScriptEvent( nIndex, pArray[ i ] ); | 587 const ScriptEventDescriptor* pArray = ScriptEvents.getConstArray(); 588 sal_Int32 nLen = ScriptEvents.getLength(); 589 for( sal_Int32 i = 0 ; i < nLen ; i++ ) 590 registerScriptEvent( nIndex, pArray[ i ] ); |
591 | 591 |
592 attachAll_Impl( this, nIndex, aList ); | 592 attachAll_Impl( this, nIndex, aList ); |
593} 594 595//----------------------------------------------------------------------------- 596void SAL_CALL ImplEventAttacherManager::revokeScriptEvent 597( | 593} 594 595//----------------------------------------------------------------------------- 596void SAL_CALL ImplEventAttacherManager::revokeScriptEvent 597( |
598 sal_Int32 nIndex, 599 const OUString& ListenerType, 600 const OUString& EventMethod, 601 const OUString& ToRemoveListenerParam | 598 sal_Int32 nIndex, 599 const OUString& ListenerType, 600 const OUString& EventMethod, 601 const OUString& ToRemoveListenerParam |
602) | 602) |
603 throw( IllegalArgumentException, RuntimeException ) | 603 throw( IllegalArgumentException, RuntimeException ) |
604{ | 604{ |
605 Guard< Mutex > aGuard( aLock ); | 605 Guard< Mutex > aGuard( aLock ); |
606 607 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 608 | 606 607 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 608 |
609 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 610 detachAll_Impl( this, nIndex, aList ); | 609 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 610 detachAll_Impl( this, nIndex, aList ); |
611 | 611 |
612 OUString aLstType = ListenerType; 613 const sal_Unicode * pLastDot = aLstType.getStr(); 614 pLastDot += rtl_ustr_lastIndexOfChar( pLastDot, '.' ); 615 if( pLastDot ) 616 aLstType = pLastDot +1; | 612 OUString aLstType = ListenerType; 613 const sal_Unicode * pLastDot = aLstType.getStr(); 614 pLastDot += rtl_ustr_lastIndexOfChar( pLastDot, '.' ); 615 if( pLastDot ) 616 aLstType = pLastDot +1; |
617 618#ifdef DEQUE_OK | 617 618#ifdef DEQUE_OK |
619 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = (*aIt).aEventList.begin(); 620 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = (*aIt).aEventList.end(); 621 while( aEvtIt != aEvtEnd ) 622 { 623 if( aLstType == (*aEvtIt).ListenerType 624 && EventMethod == (*aEvtIt).EventMethod 625 && ToRemoveListenerParam == (*aEvtIt).AddListenerParam ) 626 { 627 (*aIt).aEventList.erase( aEvtIt ); 628 break; 629 } | 619 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = (*aIt).aEventList.begin(); 620 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = (*aIt).aEventList.end(); 621 while( aEvtIt != aEvtEnd ) 622 { 623 if( aLstType == (*aEvtIt).ListenerType 624 && EventMethod == (*aEvtIt).EventMethod 625 && ToRemoveListenerParam == (*aEvtIt).AddListenerParam ) 626 { 627 (*aIt).aEventList.erase( aEvtIt ); 628 break; 629 } |
630 | 630 |
631 aEvtIt++; 632 } | 631 aEvtIt++; 632 } |
633#else 634 Sequence< ScriptEventDescriptor >& rEventList = (*aIt).aEventList; 635 636 ScriptEventDescriptor* pEventList = rEventList.getArray(); 637 const ScriptEventDescriptor* pEventListEnd = pEventList + rEventList.getLength(); | 633#else 634 Sequence< ScriptEventDescriptor >& rEventList = (*aIt).aEventList; 635 636 ScriptEventDescriptor* pEventList = rEventList.getArray(); 637 const ScriptEventDescriptor* pEventListEnd = pEventList + rEventList.getLength(); |
638 for( ; pEventList < pEventListEnd; ++pEventList ) 639 { 640 if ( (aLstType == pEventList->ListenerType ) 641 && (EventMethod == pEventList->EventMethod ) 642 && (ToRemoveListenerParam == pEventList->AddListenerParam) | 638 for( ; pEventList < pEventListEnd; ++pEventList ) 639 { 640 if ( (aLstType == pEventList->ListenerType ) 641 && (EventMethod == pEventList->EventMethod ) 642 && (ToRemoveListenerParam == pEventList->AddListenerParam) |
643 ) | 643 ) |
644 { | 644 { |
645 ScriptEventDescriptor* pMoveTo = pEventList; 646 const ScriptEventDescriptor* pMoveFrom = pMoveTo + 1; 647 while (pMoveFrom < pEventListEnd) 648 { 649 *pMoveTo++ = *pMoveFrom++; 650 } 651 rEventList.realloc( rEventList.getLength() - 1 ); | 645 ScriptEventDescriptor* pMoveTo = pEventList; 646 const ScriptEventDescriptor* pMoveFrom = pMoveTo + 1; 647 while (pMoveFrom < pEventListEnd) 648 { 649 *pMoveTo++ = *pMoveFrom++; 650 } 651 rEventList.realloc( rEventList.getLength() - 1 ); |
652 break; 653 } 654 } | 652 break; 653 } 654 } |
655#endif | 655#endif |
656 attachAll_Impl( this, nIndex, aList ); | 656 attachAll_Impl( this, nIndex, aList ); |
657} 658 659//----------------------------------------------------------------------------- 660void SAL_CALL ImplEventAttacherManager::revokeScriptEvents(sal_Int32 nIndex ) | 657} 658 659//----------------------------------------------------------------------------- 660void SAL_CALL ImplEventAttacherManager::revokeScriptEvents(sal_Int32 nIndex ) |
661 throw( IllegalArgumentException, RuntimeException ) | 661 throw( IllegalArgumentException, RuntimeException ) |
662{ | 662{ |
663 Guard< Mutex > aGuard( aLock ); | 663 Guard< Mutex > aGuard( aLock ); |
664 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 665 | 664 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 665 |
666 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 667 detachAll_Impl( this, nIndex, aList ); | 666 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 667 detachAll_Impl( this, nIndex, aList ); |
668#ifdef DEQUE_OK | 668#ifdef DEQUE_OK |
669 (*aIt).aEventList = ::std::deque< ScriptEventDescriptor >(); | 669 (*aIt).aEventList = ::std::deque< ScriptEventDescriptor >(); |
670#else | 670#else |
671 (*aIt).aEventList.realloc( 0 ); | 671 (*aIt).aEventList.realloc( 0 ); |
672#endif | 672#endif |
673 attachAll_Impl( this, nIndex, aList ); | 673 attachAll_Impl( this, nIndex, aList ); |
674} 675 676//----------------------------------------------------------------------------- 677void SAL_CALL ImplEventAttacherManager::insertEntry(sal_Int32 nIndex) | 674} 675 676//----------------------------------------------------------------------------- 677void SAL_CALL ImplEventAttacherManager::insertEntry(sal_Int32 nIndex) |
678 throw( IllegalArgumentException, RuntimeException ) | 678 throw( IllegalArgumentException, RuntimeException ) |
679{ | 679{ |
680 Guard< Mutex > aGuard( aLock ); 681 if( nIndex < 0 ) 682 throw IllegalArgumentException(); | 680 Guard< Mutex > aGuard( aLock ); 681 if( nIndex < 0 ) 682 throw IllegalArgumentException(); |
683 | 683 |
684// ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); 685// while( nIndex-- ) 686// aIt++; | 684// ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); 685// while( nIndex-- ) 686// aIt++; |
687 688 if ( static_cast< ::std::deque< AttacherIndex_Impl >::size_type>(nIndex) >= aIndex.size() ) 689 aIndex.resize(nIndex+1); 690 | 687 688 if ( static_cast< ::std::deque< AttacherIndex_Impl >::size_type>(nIndex) >= aIndex.size() ) 689 aIndex.resize(nIndex+1); 690 |
691 AttacherIndex_Impl aTmp; 692 aIndex.insert( aIndex.begin() + nIndex, aTmp ); | 691 AttacherIndex_Impl aTmp; 692 aIndex.insert( aIndex.begin() + nIndex, aTmp ); |
693} 694 695//----------------------------------------------------------------------------- 696void SAL_CALL ImplEventAttacherManager::removeEntry(sal_Int32 nIndex) | 693} 694 695//----------------------------------------------------------------------------- 696void SAL_CALL ImplEventAttacherManager::removeEntry(sal_Int32 nIndex) |
697 throw( IllegalArgumentException, RuntimeException ) | 697 throw( IllegalArgumentException, RuntimeException ) |
698{ | 698{ |
699 Guard< Mutex > aGuard( aLock ); | 699 Guard< Mutex > aGuard( aLock ); |
700 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 701 | 700 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 701 |
702 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 703 detachAll_Impl( this, nIndex, aList ); 704 aIndex.erase( aIt ); | 702 ::std::deque< AttachedObject_Impl > aList = (*aIt).aObjList; 703 detachAll_Impl( this, nIndex, aList ); 704 aIndex.erase( aIt ); |
705} 706 707//----------------------------------------------------------------------------- 708Sequence< ScriptEventDescriptor > SAL_CALL ImplEventAttacherManager::getScriptEvents(sal_Int32 nIndex) | 705} 706 707//----------------------------------------------------------------------------- 708Sequence< ScriptEventDescriptor > SAL_CALL ImplEventAttacherManager::getScriptEvents(sal_Int32 nIndex) |
709 throw( IllegalArgumentException, RuntimeException ) | 709 throw( IllegalArgumentException, RuntimeException ) |
710{ | 710{ |
711 Guard< Mutex > aGuard( aLock ); | 711 Guard< Mutex > aGuard( aLock ); |
712 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 713 714#ifdef DEQUE_OK | 712 ::std::deque<AttacherIndex_Impl>::iterator aIt = implCheckIndex( nIndex ); 713 714#ifdef DEQUE_OK |
715 Sequence< ScriptEventDescriptor > aSeq( (*aIt).aEventList.size() ); 716 ScriptEventDescriptor * pArray = aSeq.getArray(); | 715 Sequence< ScriptEventDescriptor > aSeq( (*aIt).aEventList.size() ); 716 ScriptEventDescriptor * pArray = aSeq.getArray(); |
717 | 717 |
718 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = (*aIt).aEventList.begin(); 719 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = (*aIt).aEventList.end(); 720 sal_Int32 i = 0; 721 while( aEvtIt != aEvtEnd ) 722 { 723 pArray[i++] = *aEvtIt; 724 aEvtIt++; 725 } 726 return aSeq; | 718 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = (*aIt).aEventList.begin(); 719 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = (*aIt).aEventList.end(); 720 sal_Int32 i = 0; 721 while( aEvtIt != aEvtEnd ) 722 { 723 pArray[i++] = *aEvtIt; 724 aEvtIt++; 725 } 726 return aSeq; |
727#else | 727#else |
728 return (*aIt).aEventList; | 728 return (*aIt).aEventList; |
729#endif 730} 731 732//----------------------------------------------------------------------------- 733void SAL_CALL ImplEventAttacherManager::attach(sal_Int32 nIndex, const Reference< XInterface >& xObject, const Any & Helper) | 729#endif 730} 731 732//----------------------------------------------------------------------------- 733void SAL_CALL ImplEventAttacherManager::attach(sal_Int32 nIndex, const Reference< XInterface >& xObject, const Any & Helper) |
734 throw( IllegalArgumentException, ServiceNotRegisteredException, RuntimeException ) | 734 throw( IllegalArgumentException, ServiceNotRegisteredException, RuntimeException ) |
735{ | 735{ |
736 Guard< Mutex > aGuard( aLock ); 737 if( nIndex < 0 || !xObject.is() ) 738 throw IllegalArgumentException(); | 736 Guard< Mutex > aGuard( aLock ); 737 if( nIndex < 0 || !xObject.is() ) 738 throw IllegalArgumentException(); |
739 | 739 |
740 if( static_cast< ::std::deque< AttacherIndex_Impl >::size_type>(nIndex) >= aIndex.size() ) 741 { 742 // alte Dateien lesen 743 if( nVersion == 1 ) 744 { 745 insertEntry( nIndex ); 746 attach( nIndex, xObject, Helper ); 747 return; 748 } 749 else 750 throw IllegalArgumentException(); 751 } | 740 if( static_cast< ::std::deque< AttacherIndex_Impl >::size_type>(nIndex) >= aIndex.size() ) 741 { 742 // alte Dateien lesen 743 if( nVersion == 1 ) 744 { 745 insertEntry( nIndex ); 746 attach( nIndex, xObject, Helper ); 747 return; 748 } 749 else 750 throw IllegalArgumentException(); 751 } |
752 753 ::std::deque< AttacherIndex_Impl >::iterator aCurrentPosition = aIndex.begin() + nIndex; 754 755 AttachedObject_Impl aTmp; | 752 753 ::std::deque< AttacherIndex_Impl >::iterator aCurrentPosition = aIndex.begin() + nIndex; 754 755 AttachedObject_Impl aTmp; |
756 aTmp.xTarget = xObject; 757 aTmp.aHelper = Helper; 758 aCurrentPosition->aObjList.push_back( aTmp ); | 756 aTmp.xTarget = xObject; 757 aTmp.aHelper = Helper; 758 aCurrentPosition->aObjList.push_back( aTmp ); |
759 | 759 |
760 //::std::deque< AttachedObject_Impl >::iterator aObjIt = (*aIt).aObjList.back(); 761 AttachedObject_Impl & rCurObj = aCurrentPosition->aObjList.back(); | 760 //::std::deque< AttachedObject_Impl >::iterator aObjIt = (*aIt).aObjList.back(); 761 AttachedObject_Impl & rCurObj = aCurrentPosition->aObjList.back(); |
762#ifdef DEQUE_OK | 762#ifdef DEQUE_OK |
763 rCurObj.aAttachedListenerSeq = Sequence< Reference< XEventListener > >( aCurrentPosition->aEventList.size() ); | 763 rCurObj.aAttachedListenerSeq = Sequence< Reference< XEventListener > >( aCurrentPosition->aEventList.size() ); |
764#else | 764#else |
765 rCurObj.aAttachedListenerSeq = Sequence< Reference< XEventListener > >( aCurrentPosition->aEventList.getLength() ); | 765 rCurObj.aAttachedListenerSeq = Sequence< Reference< XEventListener > >( aCurrentPosition->aEventList.getLength() ); |
766#endif | 766#endif |
767 Reference< XEventListener > * pArray = rCurObj.aAttachedListenerSeq.getArray(); | 767 Reference< XEventListener > * pArray = rCurObj.aAttachedListenerSeq.getArray(); |
768 769#ifdef DEQUE_OK | 768 769#ifdef DEQUE_OK |
770 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = aCurrentPosition->aEventList.begin(); 771 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = aCurrentPosition->aEventList.end(); 772 sal_Int32 i = 0; 773 while( aEvtIt != aEvtEnd ) 774 { 775 Reference< XAllListener > xAll = 776 new AttacherAllListener_Impl( this, (*aEvtIt).ScriptType, (*aEvtIt).ScriptCode ); 777 Reference< XEventListener > xAdapter; 778 try 779 { 780 xAdapter = xAttacher->attachSingleEventListener( rCurObj.xTarget, xAll, 781 rCurObj.aHelper, (*aEvtIt).ScriptType, 782 (*aEvtIt).AddListenerParam, (*aEvtIt).EventMethod ); 783 } 784 catch( Exception& ) 785 { 786 } | 770 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = aCurrentPosition->aEventList.begin(); 771 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = aCurrentPosition->aEventList.end(); 772 sal_Int32 i = 0; 773 while( aEvtIt != aEvtEnd ) 774 { 775 Reference< XAllListener > xAll = 776 new AttacherAllListener_Impl( this, (*aEvtIt).ScriptType, (*aEvtIt).ScriptCode ); 777 Reference< XEventListener > xAdapter; 778 try 779 { 780 xAdapter = xAttacher->attachSingleEventListener( rCurObj.xTarget, xAll, 781 rCurObj.aHelper, (*aEvtIt).ScriptType, 782 (*aEvtIt).AddListenerParam, (*aEvtIt).EventMethod ); 783 } 784 catch( Exception& ) 785 { 786 } |
787 | 787 |
788 pArray[i++] = xAdapter; 789 aEvtIt++; 790 } | 788 pArray[i++] = xAdapter; 789 aEvtIt++; 790 } |
791#else | 791#else |
792 sal_Int32 nLen = aCurrentPosition->aEventList.getLength(); 793 ScriptEventDescriptor * pEL = aCurrentPosition->aEventList.getArray(); 794 for(sal_Int32 i = 0; i < nLen; ++i ) 795 { 796 Reference< XAllListener > xAll = 797 new AttacherAllListener_Impl( this, pEL[i].ScriptType, pEL[i].ScriptCode ); 798 Reference< XEventListener > xAdapter; 799 try 800 { 801 xAdapter = xAttacher->attachSingleEventListener( rCurObj.xTarget, xAll, 802 rCurObj.aHelper, pEL[i].ListenerType, 803 pEL[i].AddListenerParam, pEL[i].EventMethod ); 804 } 805 catch( Exception& ) 806 { 807 } | 792 sal_Int32 nLen = aCurrentPosition->aEventList.getLength(); 793 ScriptEventDescriptor * pEL = aCurrentPosition->aEventList.getArray(); 794 for(sal_Int32 i = 0; i < nLen; ++i ) 795 { 796 Reference< XAllListener > xAll = 797 new AttacherAllListener_Impl( this, pEL[i].ScriptType, pEL[i].ScriptCode ); 798 Reference< XEventListener > xAdapter; 799 try 800 { 801 xAdapter = xAttacher->attachSingleEventListener( rCurObj.xTarget, xAll, 802 rCurObj.aHelper, pEL[i].ListenerType, 803 pEL[i].AddListenerParam, pEL[i].EventMethod ); 804 } 805 catch( Exception& ) 806 { 807 } |
808 | 808 |
809 pArray[i] = xAdapter; 810 } | 809 pArray[i] = xAdapter; 810 } |
811#endif 812} 813 814//----------------------------------------------------------------------------- 815void SAL_CALL ImplEventAttacherManager::detach(sal_Int32 nIndex, const Reference< XInterface >& xObject) | 811#endif 812} 813 814//----------------------------------------------------------------------------- 815void SAL_CALL ImplEventAttacherManager::detach(sal_Int32 nIndex, const Reference< XInterface >& xObject) |
816 throw( IllegalArgumentException, RuntimeException ) | 816 throw( IllegalArgumentException, RuntimeException ) |
817{ | 817{ |
818 Guard< Mutex > aGuard( aLock ); 819 //return; 820 if( nIndex < 0 || static_cast< ::std::deque< AttacherIndex_Impl >::size_type>(nIndex) >= aIndex.size() || !xObject.is() ) 821 throw IllegalArgumentException(); | 818 Guard< Mutex > aGuard( aLock ); 819 //return; 820 if( nIndex < 0 || static_cast< ::std::deque< AttacherIndex_Impl >::size_type>(nIndex) >= aIndex.size() || !xObject.is() ) 821 throw IllegalArgumentException(); |
822 823 ::std::deque< AttacherIndex_Impl >::iterator aCurrentPosition = aIndex.begin() + nIndex; | 822 823 ::std::deque< AttacherIndex_Impl >::iterator aCurrentPosition = aIndex.begin() + nIndex; |
824 ::std::deque< AttachedObject_Impl >::iterator aObjIt = aCurrentPosition->aObjList.begin(); 825 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = aCurrentPosition->aObjList.end(); 826 while( aObjIt != aObjEnd ) 827 { 828 if( (*aObjIt).xTarget == xObject ) 829 { 830 Reference< XEventListener > * pArray = (*aObjIt).aAttachedListenerSeq.getArray(); | 824 ::std::deque< AttachedObject_Impl >::iterator aObjIt = aCurrentPosition->aObjList.begin(); 825 ::std::deque< AttachedObject_Impl >::iterator aObjEnd = aCurrentPosition->aObjList.end(); 826 while( aObjIt != aObjEnd ) 827 { 828 if( (*aObjIt).xTarget == xObject ) 829 { 830 Reference< XEventListener > * pArray = (*aObjIt).aAttachedListenerSeq.getArray(); |
831#ifdef DEQUE_OK 832 | 831#ifdef DEQUE_OK 832 |
833 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = aCurrentPosition->aEventList.begin(); 834 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = aCurrentPosition->aEventList.end(); 835 sal_Int32 i = 0; 836 while( aEvtIt != aEvtEnd ) 837 { 838 if( pArray[i].is() ) 839 { 840 try 841 { 842 xAttacher->removeListener( (*aObjIt).xTarget, (*aEvtIt).ListenerType, 843 (*aEvtIt).AddListenerParam, pArray[i] ); 844 } 845 catch( Exception& ) 846 { 847 } 848 } 849 i++; 850 aEvtIt++; 851 } | 833 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = aCurrentPosition->aEventList.begin(); 834 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = aCurrentPosition->aEventList.end(); 835 sal_Int32 i = 0; 836 while( aEvtIt != aEvtEnd ) 837 { 838 if( pArray[i].is() ) 839 { 840 try 841 { 842 xAttacher->removeListener( (*aObjIt).xTarget, (*aEvtIt).ListenerType, 843 (*aEvtIt).AddListenerParam, pArray[i] ); 844 } 845 catch( Exception& ) 846 { 847 } 848 } 849 i++; 850 aEvtIt++; 851 } |
852#else | 852#else |
853 sal_Int32 nLen = aCurrentPosition->aEventList.getLength(); 854 ScriptEventDescriptor * pEL = aCurrentPosition->aEventList.getArray(); 855 for( sal_Int32 i = 0; i < nLen; i++ ) 856 { 857 if( pArray[i].is() ) 858 { 859 try 860 { 861 xAttacher->removeListener( (*aObjIt).xTarget, pEL[i].ListenerType, 862 pEL[i].AddListenerParam, pArray[i] ); 863 } 864 catch( Exception& ) 865 { 866 } 867 } 868 } | 853 sal_Int32 nLen = aCurrentPosition->aEventList.getLength(); 854 ScriptEventDescriptor * pEL = aCurrentPosition->aEventList.getArray(); 855 for( sal_Int32 i = 0; i < nLen; i++ ) 856 { 857 if( pArray[i].is() ) 858 { 859 try 860 { 861 xAttacher->removeListener( (*aObjIt).xTarget, pEL[i].ListenerType, 862 pEL[i].AddListenerParam, pArray[i] ); 863 } 864 catch( Exception& ) 865 { 866 } 867 } 868 } |
869#endif | 869#endif |
870 aCurrentPosition->aObjList.erase( aObjIt ); 871 break; 872 } 873 aObjIt++; 874 } | 870 aCurrentPosition->aObjList.erase( aObjIt ); 871 break; 872 } 873 aObjIt++; 874 } |
875} 876 877void SAL_CALL ImplEventAttacherManager::addScriptListener(const Reference< XScriptListener >& aListener) | 875} 876 877void SAL_CALL ImplEventAttacherManager::addScriptListener(const Reference< XScriptListener >& aListener) |
878 throw( IllegalArgumentException, RuntimeException ) | 878 throw( IllegalArgumentException, RuntimeException ) |
879{ | 879{ |
880 Guard< Mutex > aGuard( aLock ); 881 aScriptListeners.addInterface( aListener ); | 880 Guard< Mutex > aGuard( aLock ); 881 aScriptListeners.addInterface( aListener ); |
882} 883 884void SAL_CALL ImplEventAttacherManager::removeScriptListener(const Reference< XScriptListener >& aListener) | 882} 883 884void SAL_CALL ImplEventAttacherManager::removeScriptListener(const Reference< XScriptListener >& aListener) |
885 throw( IllegalArgumentException, RuntimeException ) | 885 throw( IllegalArgumentException, RuntimeException ) |
886{ | 886{ |
887 Guard< Mutex > aGuard( aLock ); 888 aScriptListeners.removeInterface( aListener ); | 887 Guard< Mutex > aGuard( aLock ); 888 aScriptListeners.removeInterface( aListener ); |
889} 890 891 892// Methoden von XPersistObject 893OUString SAL_CALL ImplEventAttacherManager::getServiceName(void) | 889} 890 891 892// Methoden von XPersistObject 893OUString SAL_CALL ImplEventAttacherManager::getServiceName(void) |
894 throw( RuntimeException ) | 894 throw( RuntimeException ) |
895{ | 895{ |
896 return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.script.EventAttacherManager") ); | 896 return OUString( RTL_CONSTASCII_USTRINGPARAM("com.sun.star.uno.script.EventAttacherManager") ); |
897} 898 899void SAL_CALL ImplEventAttacherManager::write(const Reference< XObjectOutputStream >& OutStream) | 897} 898 899void SAL_CALL ImplEventAttacherManager::write(const Reference< XObjectOutputStream >& OutStream) |
900 throw( IOException, RuntimeException ) | 900 throw( IOException, RuntimeException ) |
901{ | 901{ |
902 Guard< Mutex > aGuard( aLock ); 903 // Ohne XMarkableStream laeuft nichts 904 Reference< XMarkableStream > xMarkStream( OutStream, UNO_QUERY ); 905 if( !xMarkStream.is() ) 906 return; | 902 Guard< Mutex > aGuard( aLock ); 903 // Ohne XMarkableStream laeuft nichts 904 Reference< XMarkableStream > xMarkStream( OutStream, UNO_QUERY ); 905 if( !xMarkStream.is() ) 906 return; |
907 | 907 |
908 // Version schreiben 909 OutStream->writeShort( 2 ); | 908 // Version schreiben 909 OutStream->writeShort( 2 ); |
910 | 910 |
911 // Position fuer Laenge merken 912 sal_Int32 nObjLenMark = xMarkStream->createMark(); 913 OutStream->writeLong( 0L ); | 911 // Position fuer Laenge merken 912 sal_Int32 nObjLenMark = xMarkStream->createMark(); 913 OutStream->writeLong( 0L ); |
914 | 914 |
915 OutStream->writeLong( aIndex.size() ); | 915 OutStream->writeLong( aIndex.size() ); |
916 | 916 |
917 // Sequences schreiben 918 ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); 919 ::std::deque<AttacherIndex_Impl>::iterator aEnd = aIndex.end(); 920 while( aIt != aEnd ) 921 { | 917 // Sequences schreiben 918 ::std::deque<AttacherIndex_Impl>::iterator aIt = aIndex.begin(); 919 ::std::deque<AttacherIndex_Impl>::iterator aEnd = aIndex.end(); 920 while( aIt != aEnd ) 921 { |
922#ifdef DEQUE_OK | 922#ifdef DEQUE_OK |
923 // Laenge der Sequence und alle Descriptoren schreiben 924 OutStream->writeLong( (*aIt).aEventList.size() ); 925 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = (*aIt).aEventList.begin(); 926 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = (*aIt).aEventList.end(); 927 while( aEvtIt != aEvtEnd ) 928 { 929 const ScriptEventDescriptor& rDesc = (*aEvtIt); 930 OutStream->writeUTF( rDesc.ListenerType ); 931 OutStream->writeUTF( rDesc.EventMethod ); 932 OutStream->writeUTF( rDesc.AddListenerParam ); 933 OutStream->writeUTF( rDesc.ScriptType ); 934 OutStream->writeUTF( rDesc.ScriptCode ); | 923 // Laenge der Sequence und alle Descriptoren schreiben 924 OutStream->writeLong( (*aIt).aEventList.size() ); 925 ::std::deque< ScriptEventDescriptor >::iterator aEvtIt = (*aIt).aEventList.begin(); 926 ::std::deque< ScriptEventDescriptor >::iterator aEvtEnd = (*aIt).aEventList.end(); 927 while( aEvtIt != aEvtEnd ) 928 { 929 const ScriptEventDescriptor& rDesc = (*aEvtIt); 930 OutStream->writeUTF( rDesc.ListenerType ); 931 OutStream->writeUTF( rDesc.EventMethod ); 932 OutStream->writeUTF( rDesc.AddListenerParam ); 933 OutStream->writeUTF( rDesc.ScriptType ); 934 OutStream->writeUTF( rDesc.ScriptCode ); |
935 | 935 |
936 aEvtIt++; 937 } | 936 aEvtIt++; 937 } |
938#else | 938#else |
939 sal_Int32 nLen = (*aIt).aEventList.getLength(); 940 // Laenge der Sequence und alle Descriptoren schreiben 941 OutStream->writeLong( nLen ); 942 ScriptEventDescriptor * pEL = (*aIt).aEventList.getArray(); 943 for( sal_Int32 i = 0; i < nLen; i++ ) 944 { 945 const ScriptEventDescriptor& rDesc = pEL[i]; 946 OutStream->writeUTF( rDesc.ListenerType ); 947 OutStream->writeUTF( rDesc.EventMethod ); 948 OutStream->writeUTF( rDesc.AddListenerParam ); 949 OutStream->writeUTF( rDesc.ScriptType ); 950 OutStream->writeUTF( rDesc.ScriptCode ); 951 } | 939 sal_Int32 nLen = (*aIt).aEventList.getLength(); 940 // Laenge der Sequence und alle Descriptoren schreiben 941 OutStream->writeLong( nLen ); 942 ScriptEventDescriptor * pEL = (*aIt).aEventList.getArray(); 943 for( sal_Int32 i = 0; i < nLen; i++ ) 944 { 945 const ScriptEventDescriptor& rDesc = pEL[i]; 946 OutStream->writeUTF( rDesc.ListenerType ); 947 OutStream->writeUTF( rDesc.EventMethod ); 948 OutStream->writeUTF( rDesc.AddListenerParam ); 949 OutStream->writeUTF( rDesc.ScriptType ); 950 OutStream->writeUTF( rDesc.ScriptCode ); 951 } |
952#endif | 952#endif |
953 aIt++; 954 } | 953 aIt++; 954 } |
955 | 955 |
956 // Die jetzt bekannte Laenge eintragen 957 sal_Int32 nObjLen = xMarkStream->offsetToMark( nObjLenMark ) -4; 958 xMarkStream->jumpToMark( nObjLenMark ); 959 OutStream->writeLong( nObjLen ); 960 xMarkStream->jumpToFurthest(); 961 xMarkStream->deleteMark( nObjLenMark ); | 956 // Die jetzt bekannte Laenge eintragen 957 sal_Int32 nObjLen = xMarkStream->offsetToMark( nObjLenMark ) -4; 958 xMarkStream->jumpToMark( nObjLenMark ); 959 OutStream->writeLong( nObjLen ); 960 xMarkStream->jumpToFurthest(); 961 xMarkStream->deleteMark( nObjLenMark ); |
962} 963 964void SAL_CALL ImplEventAttacherManager::read(const Reference< XObjectInputStream >& InStream) | 962} 963 964void SAL_CALL ImplEventAttacherManager::read(const Reference< XObjectInputStream >& InStream) |
965 throw( IOException, RuntimeException ) | 965 throw( IOException, RuntimeException ) |
966{ | 966{ |
967 Guard< Mutex > aGuard( aLock ); 968 // Ohne XMarkableStream laeuft nichts 969 Reference< XMarkableStream > xMarkStream( InStream, UNO_QUERY ); 970 if( !xMarkStream.is() ) 971 return; | 967 Guard< Mutex > aGuard( aLock ); 968 // Ohne XMarkableStream laeuft nichts 969 Reference< XMarkableStream > xMarkStream( InStream, UNO_QUERY ); 970 if( !xMarkStream.is() ) 971 return; |
972 | 972 |
973 // Version lesen 974 nVersion = InStream->readShort(); | 973 // Version lesen 974 nVersion = InStream->readShort(); |
975 | 975 |
976 // Zunaechst kommen die Daten gemaess Version 1, 977 // muss auch bei hoeheren Versionen beibehalten werden 978 sal_Int32 nLen = InStream->readLong(); | 976 // Zunaechst kommen die Daten gemaess Version 1, 977 // muss auch bei hoeheren Versionen beibehalten werden 978 sal_Int32 nLen = InStream->readLong(); |
979 | 979 |
980 // Position fuer Vergleichszwecke 981 sal_Int32 nObjLenMark = xMarkStream->createMark(); | 980 // Position fuer Vergleichszwecke 981 sal_Int32 nObjLenMark = xMarkStream->createMark(); |
982 | 982 |
983 // Anzahl der zu lesenden Sequences 984 sal_Int32 nItemCount = InStream->readLong(); | 983 // Anzahl der zu lesenden Sequences 984 sal_Int32 nItemCount = InStream->readLong(); |
985 | 985 |
986 for( sal_Int32 i = 0 ; i < nItemCount ; i++ ) 987 { 988 insertEntry( i ); 989 // Laenge der Sequence lesen 990 sal_Int32 nSeqLen = InStream->readLong(); | 986 for( sal_Int32 i = 0 ; i < nItemCount ; i++ ) 987 { 988 insertEntry( i ); 989 // Laenge der Sequence lesen 990 sal_Int32 nSeqLen = InStream->readLong(); |
991 | 991 |
992 // Sequence anlegen und Descriptoren lesen 993 Sequence< ScriptEventDescriptor > aSEDSeq( nSeqLen ); 994 ScriptEventDescriptor* pArray = aSEDSeq.getArray(); 995 for( sal_Int32 j = 0 ; j < nSeqLen ; j++ ) 996 { 997 ScriptEventDescriptor& rDesc = pArray[ j ]; 998 rDesc.ListenerType = InStream->readUTF(); 999 rDesc.EventMethod = InStream->readUTF(); 1000 rDesc.AddListenerParam = InStream->readUTF(); 1001 rDesc.ScriptType = InStream->readUTF(); 1002 rDesc.ScriptCode = InStream->readUTF(); 1003 } 1004 registerScriptEvents( i, aSEDSeq ); 1005 } | 992 // Sequence anlegen und Descriptoren lesen 993 Sequence< ScriptEventDescriptor > aSEDSeq( nSeqLen ); 994 ScriptEventDescriptor* pArray = aSEDSeq.getArray(); 995 for( sal_Int32 j = 0 ; j < nSeqLen ; j++ ) 996 { 997 ScriptEventDescriptor& rDesc = pArray[ j ]; 998 rDesc.ListenerType = InStream->readUTF(); 999 rDesc.EventMethod = InStream->readUTF(); 1000 rDesc.AddListenerParam = InStream->readUTF(); 1001 rDesc.ScriptType = InStream->readUTF(); 1002 rDesc.ScriptCode = InStream->readUTF(); 1003 } 1004 registerScriptEvents( i, aSEDSeq ); 1005 } |
1006 | 1006 |
1007 // Haben wir die angegebene Laenge gelesen? 1008 sal_Int32 nRealLen = xMarkStream->offsetToMark( nObjLenMark ); 1009 if( nRealLen != nLen ) 1010 { 1011 // Nur wenn die StreamVersion > 1 ist und noch Daten folgen, kann das 1012 // Ganze richtig sein. Sonst ist etwas voellig daneben gegangen. 1013 if( nRealLen > nLen || nVersion == 1 ) 1014 { 1015 VOS_ENSHURE( sal_False, "ImplEventAttacherManager::read(): Fatal Error, wrong object length" ); 1016 } 1017 else 1018 { 1019 // TODO: Pruefen, ob Zwischen-Speicherung der Daten sinnvoll sein koennte | 1007 // Haben wir die angegebene Laenge gelesen? 1008 sal_Int32 nRealLen = xMarkStream->offsetToMark( nObjLenMark ); 1009 if( nRealLen != nLen ) 1010 { 1011 // Nur wenn die StreamVersion > 1 ist und noch Daten folgen, kann das 1012 // Ganze richtig sein. Sonst ist etwas voellig daneben gegangen. 1013 if( nRealLen > nLen || nVersion == 1 ) 1014 { 1015 VOS_ENSHURE( sal_False, "ImplEventAttacherManager::read(): Fatal Error, wrong object length" ); 1016 } 1017 else 1018 { 1019 // TODO: Pruefen, ob Zwischen-Speicherung der Daten sinnvoll sein koennte |
1020 | 1020 |
1021 // Vorerst einfach nur Skippen 1022 sal_Int32 nSkipCount = nLen - nRealLen; 1023 InStream->skipBytes( nSkipCount ); 1024 } 1025 } 1026 xMarkStream->jumpToFurthest(); 1027 xMarkStream->deleteMark( nObjLenMark ); | 1021 // Vorerst einfach nur Skippen 1022 sal_Int32 nSkipCount = nLen - nRealLen; 1023 InStream->skipBytes( nSkipCount ); 1024 } 1025 } 1026 xMarkStream->jumpToFurthest(); 1027 xMarkStream->deleteMark( nObjLenMark ); |
1028} 1029 1030} // namesapce comphelper | 1028} 1029 1030} // namesapce comphelper |
1031 1032 | |