xref: /AOO41X/main/extensions/source/bibliography/loadlisteneradapter.hxx (revision 46dbaceef8c12a09e4905feda473ecab36e10d03)
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 #ifndef EXTENSIONS_BIB_LOADLISTENERADAPTER_HXX
25 #define EXTENSIONS_BIB_LOADLISTENERADAPTER_HXX
26 
27 #include <osl/mutex.hxx>
28 #include <com/sun/star/lang/XComponent.hpp>
29 #include <cppuhelper/implbase1.hxx>
30 #include <com/sun/star/form/XLoadable.hpp>
31 
32 //.........................................................................
33 namespace bib
34 {
35 //.........................................................................
36 
37     class OComponentAdapterBase;
38 
39     //=====================================================================
40     //= OComponentListener
41     //=====================================================================
42     class OComponentListener
43     {
44         friend class OComponentAdapterBase;
45 
46     private:
47         OComponentAdapterBase*  m_pAdapter;
48         ::osl::Mutex&           m_rMutex;
49     protected:
OComponentListener(::osl::Mutex & _rMutex)50         OComponentListener( ::osl::Mutex& _rMutex )
51             :m_pAdapter( NULL )
52             ,m_rMutex( _rMutex )
53         {
54         }
55 
56         virtual ~OComponentListener();
57 
58         // XEventListener equivalents
59         virtual void _disposing( const ::com::sun::star::lang::EventObject& _rSource ) throw( ::com::sun::star::uno::RuntimeException );
60 
61     protected:
62         void setAdapter( OComponentAdapterBase* _pAdapter );
63     };
64 
65     //=====================================================================
66     //= OComponentAdapterBase
67     //=====================================================================
68     class OComponentAdapterBase
69     {
70         friend class OComponentListener;
71 
72     private:
73         ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >
74                                             m_xComponent;
75         OComponentListener*                 m_pListener;
76         sal_Int32                           m_nLockCount;
77         sal_Bool                            m_bListening    : 1;
78         sal_Bool                            m_bAutoRelease  : 1;
79 
80         // impl method for dispose - virtual, 'cause you at least need to remove the listener from the broadcaster
81         virtual void disposing() = 0;
82 
83     protected:
84         // attribute access for derivees
85         const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >&
getComponent() const86                                 getComponent() const    { return m_xComponent; }
getListener()87         OComponentListener*     getListener()           { return m_pListener; }
88 
89         // to be called by derivees which started listening at the component
90         virtual void    startComponentListening() = 0;
91 
92         virtual ~OComponentAdapterBase();
93 
94     public:
95         OComponentAdapterBase(
96             const ::com::sun::star::uno::Reference< ::com::sun::star::lang::XComponent >& _rxComp,
97             sal_Bool _bAutoRelease = sal_True
98         );
99 
100         // late construction
101         // can be called from within you ctor, to have you're object fully initialized at the moment of
102         // the call (which would not be the case when calling this ctor)
103         void Init( OComponentListener* _pListener );
104 
105     // base for ref-counting, implemented by OComponentAdapter
106         virtual void SAL_CALL acquire(  ) throw () = 0;
107         virtual void SAL_CALL release(  ) throw () = 0;
108 
109     // helper
110         /// get the lock count
locked() const111         sal_Int32   locked() const { return m_nLockCount; }
112 
113         /// dispose the object - stop listening and such
114         void dispose();
115 
116     protected:
117     // XEventListener
118         virtual void SAL_CALL disposing( const  ::com::sun::star::lang::EventObject& Source ) throw( ::com::sun::star::uno::RuntimeException);
119     };
120 
121     //=====================================================================
122     //= OLoadListener
123     //=====================================================================
124     class OLoadListener : public OComponentListener
125     {
126         friend class OLoadListenerAdapter;
127 
128     protected:
OLoadListener(::osl::Mutex & _rMutex)129         OLoadListener( ::osl::Mutex& _rMutex ) : OComponentListener( _rMutex ) { }
130 
131     // XLoadListener equivalents
132         virtual void _loaded( const ::com::sun::star::lang::EventObject& aEvent ) = 0;
133         virtual void _unloading( const ::com::sun::star::lang::EventObject& aEvent ) = 0;
134         virtual void _unloaded( const ::com::sun::star::lang::EventObject& aEvent ) = 0;
135         virtual void _reloading( const ::com::sun::star::lang::EventObject& aEvent ) = 0;
136         virtual void _reloaded( const ::com::sun::star::lang::EventObject& aEvent ) = 0;
137     };
138 
139     //=====================================================================
140     //= OLoadListenerAdapter
141     //=====================================================================
142     typedef ::cppu::WeakImplHelper1< ::com::sun::star::form::XLoadListener >    OLoadListenerAdapter_Base;
143     class OLoadListenerAdapter
144         :public OLoadListenerAdapter_Base
145         ,public OComponentAdapterBase
146     {
147     protected:
getLoadListener()148         OLoadListener*      getLoadListener( )  { return static_cast< OLoadListener* >( getListener() ); }
149 
150     protected:
151         virtual void    disposing();
152         virtual void    startComponentListening();
153 
154     public:
155         OLoadListenerAdapter(
156             const ::com::sun::star::uno::Reference< ::com::sun::star::form::XLoadable >& _rxLoadable,
157             sal_Bool _bAutoRelease = sal_True
158         );
159 
160 
161         virtual void SAL_CALL acquire(  ) throw ();
162         virtual void SAL_CALL release(  ) throw ();
163 
164     protected:
165     // XEventListener
166         virtual void SAL_CALL disposing( const  ::com::sun::star::lang::EventObject& _rSource ) throw( ::com::sun::star::uno::RuntimeException);
167 
168     // XLoadListener
169         virtual void SAL_CALL loaded( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
170         virtual void SAL_CALL unloading( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
171         virtual void SAL_CALL unloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
172         virtual void SAL_CALL reloading( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
173         virtual void SAL_CALL reloaded( const ::com::sun::star::lang::EventObject& aEvent ) throw (::com::sun::star::uno::RuntimeException);
174     };
175 
176 //.........................................................................
177 }   // namespace bib
178 //.........................................................................
179 
180 #endif // EXTENSIONS_BIB_LOADLISTENERADAPTER_HXX
181 
182