xref: /AOO41X/main/framework/inc/dispatch/basedispatcher.hxx (revision f8e07b45f7e1fb69563504f404bb0b75210f0be6)
1*f8e07b45SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*f8e07b45SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*f8e07b45SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*f8e07b45SAndrew Rist  * distributed with this work for additional information
6*f8e07b45SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*f8e07b45SAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*f8e07b45SAndrew Rist  * "License"); you may not use this file except in compliance
9*f8e07b45SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
11*f8e07b45SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
13*f8e07b45SAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*f8e07b45SAndrew Rist  * software distributed under the License is distributed on an
15*f8e07b45SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*f8e07b45SAndrew Rist  * KIND, either express or implied.  See the License for the
17*f8e07b45SAndrew Rist  * specific language governing permissions and limitations
18*f8e07b45SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
20*f8e07b45SAndrew Rist  *************************************************************/
21*f8e07b45SAndrew Rist 
22*f8e07b45SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir #ifndef __FRAMEWORK_DISPATCH_BASEDISPATCHER_HXX_
25cdf0e10cSrcweir #define __FRAMEWORK_DISPATCH_BASEDISPATCHER_HXX_
26cdf0e10cSrcweir 
27cdf0e10cSrcweir //_________________________________________________________________________________________________________________
28cdf0e10cSrcweir //	my own includes
29cdf0e10cSrcweir //_________________________________________________________________________________________________________________
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <classes/taskcreator.hxx>
32cdf0e10cSrcweir #include <threadhelp/resetableguard.hxx>
33cdf0e10cSrcweir #include <threadhelp/threadhelpbase.hxx>
34cdf0e10cSrcweir 
35cdf0e10cSrcweir #ifndef __FRAMEWORK_THREADHELP_TRANSACTIONBASE_HXX_
36cdf0e10cSrcweir #include <threadhelp/transactionbase.hxx>
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #include <macros/xinterface.hxx>
39cdf0e10cSrcweir #include <macros/xtypeprovider.hxx>
40cdf0e10cSrcweir #include <macros/debug.hxx>
41cdf0e10cSrcweir #include <macros/generic.hxx>
42cdf0e10cSrcweir #include <stdtypes.h>
43cdf0e10cSrcweir 
44cdf0e10cSrcweir //_________________________________________________________________________________________________________________
45cdf0e10cSrcweir //	interface includes
46cdf0e10cSrcweir //_________________________________________________________________________________________________________________
47cdf0e10cSrcweir #include <com/sun/star/lang/XTypeProvider.hpp>
48cdf0e10cSrcweir #include <com/sun/star/frame/XNotifyingDispatch.hpp>
49cdf0e10cSrcweir #include <com/sun/star/util/URL.hpp>
50cdf0e10cSrcweir #include <com/sun/star/frame/DispatchDescriptor.hpp>
51cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
52cdf0e10cSrcweir #include <com/sun/star/frame/XDispatchResultListener.hpp>
53cdf0e10cSrcweir #include <com/sun/star/frame/XFrameLoader.hpp>
54cdf0e10cSrcweir #include <com/sun/star/frame/XLoadEventListener.hpp>
55cdf0e10cSrcweir #include <com/sun/star/frame/XDesktop.hpp>
56cdf0e10cSrcweir #include <com/sun/star/frame/FeatureStateEvent.hpp>
57cdf0e10cSrcweir #include <com/sun/star/lang/XMultiServiceFactory.hpp>
58cdf0e10cSrcweir 
59cdf0e10cSrcweir //_________________________________________________________________________________________________________________
60cdf0e10cSrcweir //	other includes
61cdf0e10cSrcweir //_________________________________________________________________________________________________________________
62cdf0e10cSrcweir #include <cppuhelper/weak.hxx>
63cdf0e10cSrcweir #include <cppuhelper/weakref.hxx>
64cdf0e10cSrcweir #include <cppuhelper/interfacecontainer.h>
65cdf0e10cSrcweir /*DRAFT
66cdf0e10cSrcweir #include <unotools/historyoptions.hxx>
67cdf0e10cSrcweir */
68cdf0e10cSrcweir 
69cdf0e10cSrcweir //_________________________________________________________________________________________________________________
70cdf0e10cSrcweir //	namespace
71cdf0e10cSrcweir //_________________________________________________________________________________________________________________
72cdf0e10cSrcweir 
73cdf0e10cSrcweir namespace framework{
74cdf0e10cSrcweir 
75cdf0e10cSrcweir //_________________________________________________________________________________________________________________
76cdf0e10cSrcweir //	exported const
77cdf0e10cSrcweir //_________________________________________________________________________________________________________________
78cdf0e10cSrcweir 
79cdf0e10cSrcweir //_________________________________________________________________________________________________________________
80cdf0e10cSrcweir //	exported definitions
81cdf0e10cSrcweir //_________________________________________________________________________________________________________________
82cdf0e10cSrcweir 
83cdf0e10cSrcweir /*-************************************************************************************************************//**
84cdf0e10cSrcweir     @descr      We must support loading of different URLs with different handler or loader into different tasks simultaniously.
85cdf0e10cSrcweir                 They call us back to return state of operation. We need some informations to distinguish
86cdf0e10cSrcweir                 between these different "loading threads".
87cdf0e10cSrcweir                 This is the reason to implement this dynamicly list.
88cdf0e10cSrcweir 
89cdf0e10cSrcweir     @attention  I maked class LoaderThreads threadsafe! Using will be easier in a multithreaded environment.
90cdf0e10cSrcweir                 struct DispatchBinding doesn't need that!
91cdf0e10cSrcweir *//*-*************************************************************************************************************/
92cdf0e10cSrcweir struct LoadBinding
93cdf0e10cSrcweir {
94cdf0e10cSrcweir     //-------------------------------------------------------------------------------------------------------------
95cdf0e10cSrcweir     public:
96cdf0e10cSrcweir 
97cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
LoadBindingframework::LoadBinding98cdf0e10cSrcweir         inline LoadBinding()
99cdf0e10cSrcweir         {
100cdf0e10cSrcweir             free();
101cdf0e10cSrcweir         }
102cdf0e10cSrcweir 
103cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
104cdf0e10cSrcweir         // use to initialize struct for asynchronous dispatching by using handler
LoadBindingframework::LoadBinding105cdf0e10cSrcweir         inline LoadBinding( const css::util::URL&                                   aNewURL         ,
106cdf0e10cSrcweir                             const css::uno::Sequence< css::beans::PropertyValue >   lNewDescriptor  ,
107cdf0e10cSrcweir                             const css::uno::Reference< css::frame::XDispatch >&     xNewHandler     ,
108cdf0e10cSrcweir                             const css::uno::Any&                                    aNewAsyncInfo   )
109cdf0e10cSrcweir         {
110cdf0e10cSrcweir             free();
111cdf0e10cSrcweir             xHandler    = xNewHandler   ;
112cdf0e10cSrcweir             aURL        = aNewURL       ;
113cdf0e10cSrcweir             lDescriptor = lNewDescriptor;
114cdf0e10cSrcweir             aAsyncInfo  = aNewAsyncInfo ;
115cdf0e10cSrcweir         }
116cdf0e10cSrcweir 
117cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
118cdf0e10cSrcweir         // use to initialize struct for asynchronous loading by using frame loader
LoadBindingframework::LoadBinding119cdf0e10cSrcweir         inline LoadBinding( const css::util::URL&                                   aNewURL         ,
120cdf0e10cSrcweir                             const css::uno::Sequence< css::beans::PropertyValue >   lNewDescriptor  ,
121cdf0e10cSrcweir                             const css::uno::Reference< css::frame::XFrame >&        xNewFrame       ,
122cdf0e10cSrcweir                             const css::uno::Reference< css::frame::XFrameLoader >&  xNewLoader      ,
123cdf0e10cSrcweir                             const css::uno::Any&                                    aNewAsyncInfo   )
124cdf0e10cSrcweir         {
125cdf0e10cSrcweir             free();
126cdf0e10cSrcweir             xLoader     = xNewLoader    ;
127cdf0e10cSrcweir             xFrame      = xNewFrame     ;
128cdf0e10cSrcweir             aURL        = aNewURL       ;
129cdf0e10cSrcweir             lDescriptor = lNewDescriptor;
130cdf0e10cSrcweir             aAsyncInfo  = aNewAsyncInfo ;
131cdf0e10cSrcweir         }
132cdf0e10cSrcweir 
133cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
134cdf0e10cSrcweir         // dont forget toe release used references
~LoadBindingframework::LoadBinding135cdf0e10cSrcweir         inline ~LoadBinding()
136cdf0e10cSrcweir         {
137cdf0e10cSrcweir             free();
138cdf0e10cSrcweir         }
139cdf0e10cSrcweir 
140cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
freeframework::LoadBinding141cdf0e10cSrcweir         inline void free()
142cdf0e10cSrcweir         {
143cdf0e10cSrcweir             xHandler    = css::uno::Reference< css::frame::XDispatch >()   ;
144cdf0e10cSrcweir             xLoader     = css::uno::Reference< css::frame::XFrameLoader >();
145cdf0e10cSrcweir             xFrame      = css::uno::Reference< css::frame::XFrame >()      ;
146cdf0e10cSrcweir             aURL        = css::util::URL()                                 ;
147cdf0e10cSrcweir             lDescriptor = css::uno::Sequence< css::beans::PropertyValue >();
148cdf0e10cSrcweir             aAsyncInfo  = css::uno::Any()                                  ;
149cdf0e10cSrcweir         }
150cdf0e10cSrcweir 
151cdf0e10cSrcweir     //-------------------------------------------------------------------------------------------------------------
152cdf0e10cSrcweir     public:
153cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch >        xHandler    ;   // if handler was used, this reference will be valid
154cdf0e10cSrcweir         css::uno::Reference< css::frame::XFrameLoader >     xLoader     ;   // if loader was used, this reference will be valid
155cdf0e10cSrcweir         css::uno::Reference< css::frame::XFrame >           xFrame      ;   // Target of loading
156cdf0e10cSrcweir         css::util::URL                                      aURL        ;   // dispatched URL - neccessary to find listener for status event!
157cdf0e10cSrcweir         css::uno::Sequence< css::beans::PropertyValue >     lDescriptor ;   // dispatched arguments - neccessary for "reactForLoadingState()"!
158cdf0e10cSrcweir         css::uno::Any                                       aAsyncInfo  ;   // superclasses could use them to save her own user specific data for these asynchron call-info
159cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatchResultListener > xListener;
160cdf0e10cSrcweir };
161cdf0e10cSrcweir 
162cdf0e10cSrcweir //*****************************************************************************************************************
163cdf0e10cSrcweir class LoaderThreads : private ::std::vector< LoadBinding >
164cdf0e10cSrcweir                     , private ThreadHelpBase
165cdf0e10cSrcweir {
166cdf0e10cSrcweir     //-------------------------------------------------------------------------------------------------------------
167cdf0e10cSrcweir     public:
168cdf0e10cSrcweir 
169cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
LoaderThreads()170cdf0e10cSrcweir         inline LoaderThreads()
171cdf0e10cSrcweir                 : ThreadHelpBase()
172cdf0e10cSrcweir         {
173cdf0e10cSrcweir         }
174cdf0e10cSrcweir 
175cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
append(const LoadBinding & aBinding)176cdf0e10cSrcweir         inline void append( const LoadBinding& aBinding )
177cdf0e10cSrcweir         {
178cdf0e10cSrcweir             ResetableGuard aGuard( m_aLock );
179cdf0e10cSrcweir             push_back( aBinding );
180cdf0e10cSrcweir         }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
183cdf0e10cSrcweir         /// search for handler thread in list wich match given parameter and delete it
searchAndForget(const css::uno::Reference<css::frame::XDispatchResultListener> & rListener,LoadBinding & aBinding)184cdf0e10cSrcweir         inline sal_Bool searchAndForget( const css::uno::Reference < css::frame::XDispatchResultListener >& rListener, LoadBinding& aBinding )
185cdf0e10cSrcweir         {
186cdf0e10cSrcweir             ResetableGuard aGuard( m_aLock );
187cdf0e10cSrcweir             sal_Bool bFound = sal_False;
188cdf0e10cSrcweir             for( iterator pItem=begin(); pItem!=end(); ++pItem )
189cdf0e10cSrcweir             {
190cdf0e10cSrcweir                 if( pItem->xListener == rListener )
191cdf0e10cSrcweir                 {
192cdf0e10cSrcweir                     aBinding = *pItem;
193cdf0e10cSrcweir                     erase( pItem );
194cdf0e10cSrcweir                     bFound = sal_True;
195cdf0e10cSrcweir                     break;
196cdf0e10cSrcweir                 }
197cdf0e10cSrcweir             }
198cdf0e10cSrcweir             return bFound;
199cdf0e10cSrcweir         }
200cdf0e10cSrcweir 
201cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
202cdf0e10cSrcweir         /// search for loader thread in list wich match given parameter and delete it
searchAndForget(const css::uno::Reference<css::frame::XFrameLoader> xLoader,LoadBinding & aBinding)203cdf0e10cSrcweir         inline sal_Bool searchAndForget( const css::uno::Reference< css::frame::XFrameLoader > xLoader, LoadBinding& aBinding )
204cdf0e10cSrcweir         {
205cdf0e10cSrcweir             ResetableGuard aGuard( m_aLock );
206cdf0e10cSrcweir             sal_Bool bFound = sal_False;
207cdf0e10cSrcweir             for( iterator pItem=begin(); pItem!=end(); ++pItem )
208cdf0e10cSrcweir             {
209cdf0e10cSrcweir                 if( pItem->xLoader == xLoader )
210cdf0e10cSrcweir                 {
211cdf0e10cSrcweir                     aBinding = *pItem;
212cdf0e10cSrcweir                     erase( pItem );
213cdf0e10cSrcweir                     bFound = sal_True;
214cdf0e10cSrcweir                     break;
215cdf0e10cSrcweir                 }
216cdf0e10cSrcweir             }
217cdf0e10cSrcweir             return bFound;
218cdf0e10cSrcweir         }
219cdf0e10cSrcweir 
220cdf0e10cSrcweir         //---------------------------------------------------------------------------------------------------------
221cdf0e10cSrcweir         // free ALL memory ... I hope it
free()222cdf0e10cSrcweir         inline void free()
223cdf0e10cSrcweir         {
224cdf0e10cSrcweir             ResetableGuard aGuard( m_aLock );
225cdf0e10cSrcweir             LoaderThreads().swap( *this );
226cdf0e10cSrcweir         }
227cdf0e10cSrcweir };
228cdf0e10cSrcweir 
229cdf0e10cSrcweir /*-************************************************************************************************************//**
230cdf0e10cSrcweir     @short          base class for dispatcher implementations
231cdf0e10cSrcweir     @descr          Most of our dispatch implementations do everytime the same. They try to handle or load
232cdf0e10cSrcweir                     somethinmg into a target ... normaly a frame/task/pluginframe!
233cdf0e10cSrcweir                     They must do it synchron or sometimes asynchron. They must wait for callbacks and
234cdf0e10cSrcweir                     notify registered listener with right status events.
235cdf0e10cSrcweir                     All these things are implemented by this baseclass. You should override some methods
236cdf0e10cSrcweir                     to change something.
237cdf0e10cSrcweir 
238cdf0e10cSrcweir                     "dispatch()"                =>  should be you dispatch algorithm
239cdf0e10cSrcweir                     "reactForLoadingState()"    =>  do something depending from loading state ...
240cdf0e10cSrcweir 
241cdf0e10cSrcweir 	@implements		XInterface
242cdf0e10cSrcweir 					XDispatch
243cdf0e10cSrcweir                     XLoadEventListener
244cdf0e10cSrcweir 					XEventListener
245cdf0e10cSrcweir 
246cdf0e10cSrcweir 	@base			ThreadHelpBase
247cdf0e10cSrcweir                     TransactionBase
248cdf0e10cSrcweir 					OWeakObject
249cdf0e10cSrcweir 
250cdf0e10cSrcweir 	@devstatus		ready to use
251cdf0e10cSrcweir     @threadsafe     yes
252cdf0e10cSrcweir *//*-*************************************************************************************************************/
253cdf0e10cSrcweir class BaseDispatcher    :   // interfaces
254cdf0e10cSrcweir                             public    css::lang::XTypeProvider                 ,
255cdf0e10cSrcweir                             public    css::frame::XNotifyingDispatch           ,
256cdf0e10cSrcweir                             public    css::frame::XLoadEventListener           ,   // => XEventListener too!
257cdf0e10cSrcweir                             // baseclasses
258cdf0e10cSrcweir                             // Order is neccessary for right initialization!
259cdf0e10cSrcweir                             protected ThreadHelpBase                           ,
260cdf0e10cSrcweir                             protected TransactionBase                          ,
261cdf0e10cSrcweir                             public    ::cppu::OWeakObject
262cdf0e10cSrcweir {
263cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
264cdf0e10cSrcweir 	//	public methods
265cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
266cdf0e10cSrcweir 	public:
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 		//	constructor / destructor
269cdf0e10cSrcweir         BaseDispatcher( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory    ,
270cdf0e10cSrcweir                         const css::uno::Reference< css::frame::XFrame >&              xOwnerFrame );
271cdf0e10cSrcweir 
272cdf0e10cSrcweir         void dispatchFinished ( const css::frame::DispatchResultEvent& aEvent, const css::uno::Reference < css::frame::XDispatchResultListener >& rListener );
273cdf0e10cSrcweir 
274cdf0e10cSrcweir 		//	XInterface
275cdf0e10cSrcweir 		DECLARE_XINTERFACE
276cdf0e10cSrcweir 		DECLARE_XTYPEPROVIDER
277cdf0e10cSrcweir 
278cdf0e10cSrcweir         //  XNotifyingDispatch
279cdf0e10cSrcweir         virtual void SAL_CALL dispatchWithNotification ( const css::util::URL& aURL,
280cdf0e10cSrcweir                                                       const css::uno::Sequence< css::beans::PropertyValue >& aArgs,
281cdf0e10cSrcweir                                                       const css::uno::Reference< css::frame::XDispatchResultListener >& Listener ) throw ( css::uno::RuntimeException);
282cdf0e10cSrcweir 
283cdf0e10cSrcweir         //  XDispatch
284cdf0e10cSrcweir         virtual void SAL_CALL dispatch              ( const css::util::URL&                                     aURL       ,
285cdf0e10cSrcweir                                                       const css::uno::Sequence< css::beans::PropertyValue >&    lArguments ) throw( css::uno::RuntimeException ) = 0;
286cdf0e10cSrcweir         virtual void SAL_CALL addStatusListener     ( const css::uno::Reference< css::frame::XStatusListener >& xListener  ,
287cdf0e10cSrcweir                                                       const css::util::URL&                                     aURL       ) throw( css::uno::RuntimeException );
288cdf0e10cSrcweir         virtual void SAL_CALL removeStatusListener  ( const css::uno::Reference< css::frame::XStatusListener >& xListener  ,
289cdf0e10cSrcweir                                                       const css::util::URL&                                     aURL       ) throw( css::uno::RuntimeException );
290cdf0e10cSrcweir 
291cdf0e10cSrcweir         //   XLoadEventListener
292cdf0e10cSrcweir         virtual void SAL_CALL loadFinished          ( const css::uno::Reference< css::frame::XFrameLoader >&    xLoader    ) throw( css::uno::RuntimeException );
293cdf0e10cSrcweir         virtual void SAL_CALL loadCancelled         ( const css::uno::Reference< css::frame::XFrameLoader >&    xLoader    ) throw( css::uno::RuntimeException );
294cdf0e10cSrcweir 
295cdf0e10cSrcweir 		//	 XEventListener
296cdf0e10cSrcweir         virtual void SAL_CALL disposing             ( const css::lang::EventObject&                             aEvent     ) throw( css::uno::RuntimeException );
297cdf0e10cSrcweir 
298cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
299cdf0e10cSrcweir 	//	protected methods
300cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
301cdf0e10cSrcweir 	protected:
302cdf0e10cSrcweir         virtual ~BaseDispatcher();
303cdf0e10cSrcweir 
304cdf0e10cSrcweir         /*-****************************************************************************************************//**
305cdf0e10cSrcweir             @short      you should react for successfully or failed load/handle operations.
306cdf0e10cSrcweir             @descr      These baseclass implement handling of dispatched URLs and synchronous/asynchronous loading
307cdf0e10cSrcweir                         of it into a target frame. It implement the complete listener mechanism to get events from
308cdf0e10cSrcweir                         used loader or handler and sending of status events to registered listener too!
309cdf0e10cSrcweir                         But we couldn't react for this events in all cases.
310cdf0e10cSrcweir                         May be - you wish to reactivate suspended controllers or wish to delete a new created
311cdf0e10cSrcweir                         task if operation failed ...!?
312cdf0e10cSrcweir                         By overwriting these pure virtual methods it's possible to do such things.
313cdf0e10cSrcweir                         We call you with all available informations ... you should react for it.
314cdf0e10cSrcweir                         BUT - don't send any status events to your listener! We will do it everytime.
315cdf0e10cSrcweir                         (other listener could be informed as well!)
316cdf0e10cSrcweir 
317cdf0e10cSrcweir                         You will called back in: a) "reactForLoadingState()" , if URL was loaded into a frame
318cdf0e10cSrcweir                                                  b) "reactForHandlingState()", if URL was handled by a registered content handler
319cdf0e10cSrcweir                                                                                (without using a target frame!)
320cdf0e10cSrcweir 
321cdf0e10cSrcweir             @seealso    method statusChanged()
322cdf0e10cSrcweir             @seealso    method loadFinished()
323cdf0e10cSrcweir             @seealso    method loadCancelled()
324cdf0e10cSrcweir 
325cdf0e10cSrcweir             @param      "aURL"         , original dispatched URL
326cdf0e10cSrcweir             @param      "lDescriptor"  , original dispatched arguments
327cdf0e10cSrcweir             @param      "xTarget"      , target of operation (could be NULL if URL was handled not loaded!)
328cdf0e10cSrcweir             @param      "bState"       , state of operation
329cdf0e10cSrcweir             @return     -
330cdf0e10cSrcweir 
331cdf0e10cSrcweir             @onerror    -
332cdf0e10cSrcweir             @threadsafe -
333cdf0e10cSrcweir         *//*-*****************************************************************************************************/
334cdf0e10cSrcweir         virtual void SAL_CALL reactForLoadingState ( const css::util::URL&                                  aURL          ,
335cdf0e10cSrcweir                                                      const css::uno::Sequence< css::beans::PropertyValue >& lDescriptor   ,
336cdf0e10cSrcweir                                                      const css::uno::Reference< css::frame::XFrame >&       xTarget       ,
337cdf0e10cSrcweir                                                            sal_Bool                                         bState        ,
338cdf0e10cSrcweir                                                      const css::uno::Any&                                   aAsyncInfo    ) = 0;
339cdf0e10cSrcweir 
340cdf0e10cSrcweir         virtual void SAL_CALL reactForHandlingState( const css::util::URL&                                  aURL          ,
341cdf0e10cSrcweir                                                      const css::uno::Sequence< css::beans::PropertyValue >& lDescriptor   ,
342cdf0e10cSrcweir                                                            sal_Bool                                         bState        ,
343cdf0e10cSrcweir                                                      const css::uno::Any&                                   aAsyncInfo    ) = 0;
344cdf0e10cSrcweir 
345cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
346cdf0e10cSrcweir     //  protected methods
347cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
348cdf0e10cSrcweir     protected:
349cdf0e10cSrcweir         ::rtl::OUString implts_detectType           ( const css::util::URL&                                   aURL            ,
350cdf0e10cSrcweir                                                             css::uno::Sequence< css::beans::PropertyValue >&  lDescriptor     ,
351cdf0e10cSrcweir                                                             sal_Bool                                          bDeep           );
352cdf0e10cSrcweir         sal_Bool        implts_handleIt             ( const css::util::URL&                                   aURL            ,
353cdf0e10cSrcweir                                                             css::uno::Sequence< css::beans::PropertyValue >&  lDescriptor     ,
354cdf0e10cSrcweir                                                       const ::rtl::OUString&                                  sTypeName       ,
355cdf0e10cSrcweir                                                       const css::uno::Any&                                    aAsyncInfo      = css::uno::Any() );
356cdf0e10cSrcweir         sal_Bool        implts_loadIt               ( const css::util::URL&                                   aURL            ,
357cdf0e10cSrcweir                                                             css::uno::Sequence< css::beans::PropertyValue >&  lDescriptor     ,
358cdf0e10cSrcweir                                                       const ::rtl::OUString&                                  sTypeName       ,
359cdf0e10cSrcweir                                                       const css::uno::Reference< css::frame::XFrame >&        xTarget         ,
360cdf0e10cSrcweir                                                       const css::uno::Any&                                    aAsyncInfo      = css::uno::Any() );
361cdf0e10cSrcweir         void            implts_enableFrame          ( const css::uno::Reference< css::frame::XFrame >&        xFrame          ,
362cdf0e10cSrcweir                                                       const css::uno::Sequence< css::beans::PropertyValue >&  lDescriptor     );
363cdf0e10cSrcweir         void            implts_disableFrame         ( const css::uno::Reference< css::frame::XFrame >&        xFrame          );
364cdf0e10cSrcweir         sal_Bool        implts_deactivateController ( const css::uno::Reference< css::frame::XController >&   xController     );
365cdf0e10cSrcweir         sal_Bool        implts_reactivateController ( const css::uno::Reference< css::frame::XController >&   xController     );
366cdf0e10cSrcweir         void            implts_sendResultEvent      ( const css::uno::Reference< css::frame::XFrame >&        xEventSource    ,
367cdf0e10cSrcweir                                                       const ::rtl::OUString&                                  sURL            ,
368cdf0e10cSrcweir                                                             sal_Bool                                          bLoadState      );
369cdf0e10cSrcweir 
370cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
371cdf0e10cSrcweir 	//	variables
372cdf0e10cSrcweir     //  - should be private normaly ...
373cdf0e10cSrcweir     //  - but some super classes need access to some of them => protected!
374cdf0e10cSrcweir 	//-------------------------------------------------------------------------------------------------------------
375cdf0e10cSrcweir     protected:
376cdf0e10cSrcweir         css::uno::Reference< css::lang::XMultiServiceFactory >      m_xFactory            ;   /// global uno service manager to create new services
377cdf0e10cSrcweir         css::uno::WeakReference< css::frame::XFrame >               m_xOwner              ;   /// weakreference to owner (Don't use a hard reference. Owner can't delete us then!)
378cdf0e10cSrcweir 
379cdf0e10cSrcweir     private:
380cdf0e10cSrcweir         LoaderThreads                                               m_aLoaderThreads      ;   /// list of bindings between handler/loader, tasks and loaded URLs
381cdf0e10cSrcweir         ListenerHash                                                m_aListenerContainer  ;   /// hash table for listener at specified URLs
382cdf0e10cSrcweir 
383cdf0e10cSrcweir };      //  class BaseDispatcher
384cdf0e10cSrcweir 
385cdf0e10cSrcweir }		//	namespace framework
386cdf0e10cSrcweir 
387cdf0e10cSrcweir #endif  //  #ifndef __FRAMEWORK_DISPATCH_BASEDISPATCHER_HXX_
388