1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_DISPATCH_DISPATCHPROVIDER_HXX_
25*b1cdbd2cSJim Jagielski #define __FRAMEWORK_DISPATCH_DISPATCHPROVIDER_HXX_
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
28*b1cdbd2cSJim Jagielski //	my own includes
29*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
30*b1cdbd2cSJim Jagielski 
31*b1cdbd2cSJim Jagielski #include <services/frame.hxx>
32*b1cdbd2cSJim Jagielski 
33*b1cdbd2cSJim Jagielski #include <classes/protocolhandlercache.hxx>
34*b1cdbd2cSJim Jagielski #include <threadhelp/threadhelpbase.hxx>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #ifndef __FRAMEWORK_THREADHELP_TRANSACTIONBASE_HXX_
37*b1cdbd2cSJim Jagielski #include <threadhelp/transactionbase.hxx>
38*b1cdbd2cSJim Jagielski #endif
39*b1cdbd2cSJim Jagielski #include <macros/xinterface.hxx>
40*b1cdbd2cSJim Jagielski #include <macros/xtypeprovider.hxx>
41*b1cdbd2cSJim Jagielski #include <macros/debug.hxx>
42*b1cdbd2cSJim Jagielski #include <macros/generic.hxx>
43*b1cdbd2cSJim Jagielski #include <stdtypes.h>
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
46*b1cdbd2cSJim Jagielski //	interface includes
47*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
48*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XTypeProvider.hpp>
49*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchProvider.hpp>
50*b1cdbd2cSJim Jagielski #include <com/sun/star/util/URL.hpp>
51*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/DispatchDescriptor.hpp>
52*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/PropertyValue.hpp>
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
55*b1cdbd2cSJim Jagielski //	other includes
56*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
57*b1cdbd2cSJim Jagielski #include <cppuhelper/weak.hxx>
58*b1cdbd2cSJim Jagielski #include <cppuhelper/weakref.hxx>
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
61*b1cdbd2cSJim Jagielski //	namespace
62*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
63*b1cdbd2cSJim Jagielski 
64*b1cdbd2cSJim Jagielski namespace framework{
65*b1cdbd2cSJim Jagielski 
66*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
67*b1cdbd2cSJim Jagielski 
68*b1cdbd2cSJim Jagielski /**
69*b1cdbd2cSJim Jagielski     @descr          We know some special dispatch objects with diffrent functionality.
70*b1cdbd2cSJim Jagielski                     The can be created internaly by the following DispatchProvider.
71*b1cdbd2cSJim Jagielski                     Here we define some identifier to force creation of the right one.
72*b1cdbd2cSJim Jagielski */
73*b1cdbd2cSJim Jagielski enum EDispatchHelper
74*b1cdbd2cSJim Jagielski {
75*b1cdbd2cSJim Jagielski     E_DEFAULTDISPATCHER     ,
76*b1cdbd2cSJim Jagielski     E_MENUDISPATCHER        ,
77*b1cdbd2cSJim Jagielski     E_HELPAGENTDISPATCHER   ,
78*b1cdbd2cSJim Jagielski     E_CREATEDISPATCHER      ,
79*b1cdbd2cSJim Jagielski     E_BLANKDISPATCHER       ,
80*b1cdbd2cSJim Jagielski     E_SELFDISPATCHER        ,
81*b1cdbd2cSJim Jagielski     E_CLOSEDISPATCHER       ,
82*b1cdbd2cSJim Jagielski     E_STARTMODULEDISPATCHER
83*b1cdbd2cSJim Jagielski };
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski //_________________________________________________________________________________________________________________
86*b1cdbd2cSJim Jagielski 
87*b1cdbd2cSJim Jagielski /**
88*b1cdbd2cSJim Jagielski     @short          implement a helper for XDispatchProvider interface
89*b1cdbd2cSJim Jagielski     @descr          The result of a queryDispatch() call depends from the owner, which use an instance of this class.
90*b1cdbd2cSJim Jagielski                     (frame, desktop) All of them must provides different functionality.
91*b1cdbd2cSJim Jagielski                     E.g:    - task can be created by the desktop only
92*b1cdbd2cSJim Jagielski                             - a task can have a beamer as direct child
93*b1cdbd2cSJim Jagielski                             - a normal frame never can create a new one by himself
94*b1cdbd2cSJim Jagielski 
95*b1cdbd2cSJim Jagielski     @attention      Use this class as member only! Never use it as baseclass.
96*b1cdbd2cSJim Jagielski 					XInterface will be ambigous and we hold a weakreference to ouer OWNER - not to ouer SUPERCLASS!
97*b1cdbd2cSJim Jagielski 
98*b1cdbd2cSJim Jagielski 	@base			ThreadHelpBase
99*b1cdbd2cSJim Jagielski                         supports threadsafe mechanism
100*b1cdbd2cSJim Jagielski     @base           OWeakObject
101*b1cdbd2cSJim Jagielski                         provides ref count and weak mechanism
102*b1cdbd2cSJim Jagielski 
103*b1cdbd2cSJim Jagielski 	@devstatus		ready to use
104*b1cdbd2cSJim Jagielski     @threadsafe     yes
105*b1cdbd2cSJim Jagielski     @modified       17.05.2002 07:56, as96863
106*b1cdbd2cSJim Jagielski */
107*b1cdbd2cSJim Jagielski class DispatchProvider  :   // interfaces
108*b1cdbd2cSJim Jagielski                             public  css::lang::XTypeProvider            ,
109*b1cdbd2cSJim Jagielski                             public  css::frame::XDispatchProvider       ,
110*b1cdbd2cSJim Jagielski 							// baseclasses
111*b1cdbd2cSJim Jagielski 							// Order is neccessary for right initialization!
112*b1cdbd2cSJim Jagielski                             private ThreadHelpBase                      ,
113*b1cdbd2cSJim Jagielski                             private TransactionBase                     ,
114*b1cdbd2cSJim Jagielski                             public  ::cppu::OWeakObject
115*b1cdbd2cSJim Jagielski {
116*b1cdbd2cSJim Jagielski     /* member */
117*b1cdbd2cSJim Jagielski     private:
118*b1cdbd2cSJim Jagielski         /// reference to global service manager to create new services
119*b1cdbd2cSJim Jagielski         css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory;
120*b1cdbd2cSJim Jagielski         /// weakreference to owner frame (Don't use a hard reference. Owner can't delete us then!)
121*b1cdbd2cSJim Jagielski         css::uno::WeakReference< css::frame::XFrame > m_xFrame;
122*b1cdbd2cSJim Jagielski         /// different dispatcher to handle special dispatch calls, protocols or URLs (they will be created on demand.)
123*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > m_xMenuDispatcher     ;
124*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > m_xHelpAgentDispatcher;
125*b1cdbd2cSJim Jagielski /*      css::uno::Reference< css::frame::XDispatch > m_xBlankDispatcher    ;
126*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > m_xSelfDispatcher     ;
127*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > m_xDefaultDispatcher  ;*/
128*b1cdbd2cSJim Jagielski         /// cache of some other dispatch provider which are registered inside configuration to handle special URL protocols
129*b1cdbd2cSJim Jagielski         HandlerCache m_aProtocolHandlerCache;
130*b1cdbd2cSJim Jagielski 
131*b1cdbd2cSJim Jagielski     /* interface */
132*b1cdbd2cSJim Jagielski 	public:
133*b1cdbd2cSJim Jagielski 		FWK_DECLARE_XINTERFACE
134*b1cdbd2cSJim Jagielski 		FWK_DECLARE_XTYPEPROVIDER
135*b1cdbd2cSJim Jagielski 
136*b1cdbd2cSJim Jagielski         DispatchProvider( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory ,
137*b1cdbd2cSJim Jagielski                           const css::uno::Reference< css::frame::XFrame >&              xFrame   );
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski         virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL                       queryDispatch  ( const css::util::URL&                                       aURL             ,
140*b1cdbd2cSJim Jagielski                                                                                                              const ::rtl::OUString&                                      sTargetFrameName ,
141*b1cdbd2cSJim Jagielski                                                                                                                    sal_Int32                                             nSearchFlags     ) throw( css::uno::RuntimeException );
142*b1cdbd2cSJim Jagielski         virtual css::uno::Sequence< css::uno::Reference< css::frame::XDispatch > > SAL_CALL queryDispatches( const css::uno::Sequence< css::frame::DispatchDescriptor >& lDescriptions    ) throw( css::uno::RuntimeException );
143*b1cdbd2cSJim Jagielski 
144*b1cdbd2cSJim Jagielski     /* helper */
145*b1cdbd2cSJim Jagielski     protected:
146*b1cdbd2cSJim Jagielski         // Let him protected! So nobody can use us as base ...
147*b1cdbd2cSJim Jagielski         virtual ~DispatchProvider();
148*b1cdbd2cSJim Jagielski 
149*b1cdbd2cSJim Jagielski 	private:
150*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > implts_getOrCreateDispatchHelper   (       EDispatchHelper                            eHelper                       ,
151*b1cdbd2cSJim Jagielski                                                                                           const css::uno::Reference< css::frame::XFrame >& xOwner                        ,
152*b1cdbd2cSJim Jagielski                                                                                           const ::rtl::OUString&                           sTarget = ::rtl::OUString()   ,
153*b1cdbd2cSJim Jagielski                                                                                                 sal_Int32                                  nSearchFlags = 0              );
154*b1cdbd2cSJim Jagielski         sal_Bool                                     implts_isLoadableContent           ( const css::util::URL&                            aURL                          );
155*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > implts_queryDesktopDispatch        ( const css::uno::Reference< css::frame::XFrame >  xDesktop                      ,
156*b1cdbd2cSJim Jagielski                                                                                           const css::util::URL&                            aURL                          ,
157*b1cdbd2cSJim Jagielski                                                                                           const ::rtl::OUString&                           sTargetFrameName              ,
158*b1cdbd2cSJim Jagielski                                                                                                 sal_Int32                                  nSearchFlags                  );
159*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > implts_queryFrameDispatch          ( const css::uno::Reference< css::frame::XFrame >  xFrame                        ,
160*b1cdbd2cSJim Jagielski                                                                                           const css::util::URL&                            aURL                          ,
161*b1cdbd2cSJim Jagielski                                                                                           const ::rtl::OUString&                           sTargetFrameName              ,
162*b1cdbd2cSJim Jagielski                                                                                                 sal_Int32                                  nSearchFlags                  );
163*b1cdbd2cSJim Jagielski         css::uno::Reference< css::frame::XDispatch > implts_searchProtocolHandler       ( const css::util::URL&                            aURL                          );
164*b1cdbd2cSJim Jagielski 
165*b1cdbd2cSJim Jagielski }; // class DispatchProvider
166*b1cdbd2cSJim Jagielski 
167*b1cdbd2cSJim Jagielski } // namespace framework
168*b1cdbd2cSJim Jagielski 
169*b1cdbd2cSJim Jagielski #endif // #ifndef __FRAMEWORK_DISPATCH_DISPATCHPROVIDER_HXX_
170