Update ooo320-m1
[ooovba.git] / svtools / source / notify / broadcast.cxx
blob63efdd0cf498b3b78fac909441867f5524131e21
1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: broadcast.cxx,v $
10 * $Revision: 1.6 $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svtools.hxx"
34 #ifndef GCC
35 #endif
36 #include <tools/debug.hxx>
38 #include "listener.hxx"
39 #include "listeneriter.hxx"
40 #include "broadcast.hxx"
41 #include <svtools/smplhint.hxx>
44 //====================================================================
45 TYPEINIT0(SvtBroadcaster);
47 //====================================================================
49 // simple ctor of class SvtBroadcaster
51 SvtBroadcaster::SvtBroadcaster()
52 : pRoot( 0 )
56 //--------------------------------------------------------------------
58 // copy ctor of class SvtBroadcaster
60 SvtBroadcaster::SvtBroadcaster( const SvtBroadcaster &rBC )
61 : pRoot( 0 )
63 SvtListenerIter aIter( (SvtBroadcaster&)rBC );
64 SvtListener* pLast = aIter.GoStart();
65 if( pLast )
66 do {
67 pLast->StartListening( *this );
68 } while( 0 != ( pLast = aIter.GoNext() ));
71 //--------------------------------------------------------------------
73 // unregister all listeners
75 SvtBroadcaster::~SvtBroadcaster()
77 Broadcast( SfxSimpleHint(SFX_HINT_DYING) );
79 SvtListenerIter aIter( *this );
80 SvtListener* pLast = aIter.GoStart();
81 if( pLast )
82 do {
83 pLast->EndListening( *this );
84 if( !HasListeners() ) // all gone ??
85 break;
86 } while( 0 != ( pLast = aIter.GoNext() ));
89 //--------------------------------------------------------------------
91 // broadcast immedeately
93 void SvtBroadcaster::Broadcast( const SfxHint &rHint )
95 // is anybody to notify?
96 if( HasListeners() /* && !IsModifyLocked()*/ )
98 // LockModify();
99 // bInModify = TRUE;
101 SvtListenerIter aIter( *this );
102 SvtListener* pLast = aIter.GoStart();
103 if( pLast )
104 do {
105 pLast->Notify( *this, rHint );
106 if( !HasListeners() ) // all gone ??
107 break;
108 } while( 0 != ( pLast = aIter.GoNext() ));
110 // bInModify = FALSE;
111 // UnlockModify();
115 //--------------------------------------------------------------------
118 // called, if no more listeners exists
120 void SvtBroadcaster::ListenersGone()
124 //--------------------------------------------------------------------
126 // forward a notification to all registered listeners
128 void SvtBroadcaster::Forward( SvtBroadcaster& rBC, const SfxHint& rHint )
130 // is anybody to notify?
131 if( rBC.HasListeners() /* && !IsModifyLocked()*/ )
133 // LockModify();
134 // bInModify = TRUE;
136 SvtListenerIter aIter( rBC );
137 SvtListener* pLast = aIter.GoStart();
138 if( pLast )
139 do {
140 pLast->Notify( rBC, rHint );
141 if( !rBC.HasListeners() ) // all gone ??
142 break;
143 } while( 0 != ( pLast = aIter.GoNext() ));
145 // bInModify = FALSE;
146 // UnlockModify();