1  /**************************************************************
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
10   *
11   *   http://www.apache.org/licenses/LICENSE-2.0
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.
19   *
20   *************************************************************/
21  
22  
23  
24  // MARKER(update_precomp.py): autogen include statement, do not remove
25  #include "precompiled_sc.hxx"
26  #include "DrawModelBroadcaster.hxx"
27  #include <svx/svdmodel.hxx>
28  #include <svx/unomod.hxx>
29  #include <tools/debug.hxx>
30  
31  using namespace	::com::sun::star;
32  
ScDrawModelBroadcaster(SdrModel * pDrawModel)33  ScDrawModelBroadcaster::ScDrawModelBroadcaster( SdrModel *pDrawModel ) :
34  	maEventListeners( maListenerMutex ),
35  	mpDrawModel( pDrawModel )
36  {
37      if (mpDrawModel)
38  	    StartListening( *mpDrawModel );
39  }
40  
~ScDrawModelBroadcaster()41  ScDrawModelBroadcaster::~ScDrawModelBroadcaster()
42  {
43      if (mpDrawModel)
44  	    EndListening( *mpDrawModel );
45  }
46  
addEventListener(const uno::Reference<document::XEventListener> & xListener)47  void SAL_CALL ScDrawModelBroadcaster::addEventListener( const uno::Reference< document::XEventListener >& xListener )
48      throw (uno::RuntimeException)
49  {
50  	maEventListeners.addInterface( xListener );
51  }
52  
removeEventListener(const uno::Reference<document::XEventListener> & xListener)53  void SAL_CALL ScDrawModelBroadcaster::removeEventListener( const uno::Reference< document::XEventListener >& xListener )
54      throw (uno::RuntimeException)
55  {
56  	maEventListeners.removeInterface( xListener );
57  }
58  
Notify(SfxBroadcaster &,const SfxHint & rHint)59  void ScDrawModelBroadcaster::Notify( SfxBroadcaster&,
60  		const SfxHint& rHint )
61  {
62  	const SdrHint *pSdrHint = PTR_CAST( SdrHint, &rHint );
63  	if( !pSdrHint )
64  		return;
65  
66      document::EventObject aEvent;
67  	if( !SvxUnoDrawMSFactory::createEvent( mpDrawModel, pSdrHint, aEvent ) )
68  		return;
69  
70  	::cppu::OInterfaceIteratorHelper aIter( maEventListeners );
71  	while( aIter.hasMoreElements() )
72  	{
73          uno::Reference < document::XEventListener > xListener( aIter.next(), uno::UNO_QUERY );
74  		try
75  		{
76  			xListener->notifyEvent( aEvent );
77  		}
78  		catch( uno::RuntimeException& r )
79  		{
80              (void) r;
81  #if OSL_DEBUG_LEVEL > 1
82  			ByteString aError( "Runtime exception caught while notifying shape.:\n" );
83  			aError += ByteString( String( r.Message), RTL_TEXTENCODING_ASCII_US );
84  			DBG_ERROR( aError.GetBuffer() );
85  #endif
86  		}
87  	}
88  }
89