1*cdf0e10cSrcweir /*************************************************************************
2*cdf0e10cSrcweir  *
3*cdf0e10cSrcweir  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4*cdf0e10cSrcweir  *
5*cdf0e10cSrcweir  * Copyright 2000, 2010 Oracle and/or its affiliates.
6*cdf0e10cSrcweir  *
7*cdf0e10cSrcweir  * OpenOffice.org - a multi-platform office productivity suite
8*cdf0e10cSrcweir  *
9*cdf0e10cSrcweir  * This file is part of OpenOffice.org.
10*cdf0e10cSrcweir  *
11*cdf0e10cSrcweir  * OpenOffice.org is free software: you can redistribute it and/or modify
12*cdf0e10cSrcweir  * it under the terms of the GNU Lesser General Public License version 3
13*cdf0e10cSrcweir  * only, as published by the Free Software Foundation.
14*cdf0e10cSrcweir  *
15*cdf0e10cSrcweir  * OpenOffice.org is distributed in the hope that it will be useful,
16*cdf0e10cSrcweir  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17*cdf0e10cSrcweir  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18*cdf0e10cSrcweir  * GNU Lesser General Public License version 3 for more details
19*cdf0e10cSrcweir  * (a copy is included in the LICENSE file that accompanied this code).
20*cdf0e10cSrcweir  *
21*cdf0e10cSrcweir  * You should have received a copy of the GNU Lesser General Public License
22*cdf0e10cSrcweir  * version 3 along with OpenOffice.org.  If not, see
23*cdf0e10cSrcweir  * <http://www.openoffice.org/license.html>
24*cdf0e10cSrcweir  * for a copy of the LGPLv3 License.
25*cdf0e10cSrcweir  *
26*cdf0e10cSrcweir  ************************************************************************/
27*cdf0e10cSrcweir 
28*cdf0e10cSrcweir #ifndef __FRAMEWORK_DISPATCH_DISPATCHPROVIDER_HXX_
29*cdf0e10cSrcweir #define __FRAMEWORK_DISPATCH_DISPATCHPROVIDER_HXX_
30*cdf0e10cSrcweir 
31*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
32*cdf0e10cSrcweir //	my own includes
33*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
34*cdf0e10cSrcweir 
35*cdf0e10cSrcweir #include <services/frame.hxx>
36*cdf0e10cSrcweir 
37*cdf0e10cSrcweir #include <classes/protocolhandlercache.hxx>
38*cdf0e10cSrcweir #include <threadhelp/threadhelpbase.hxx>
39*cdf0e10cSrcweir 
40*cdf0e10cSrcweir #ifndef __FRAMEWORK_THREADHELP_TRANSACTIONBASE_HXX_
41*cdf0e10cSrcweir #include <threadhelp/transactionbase.hxx>
42*cdf0e10cSrcweir #endif
43*cdf0e10cSrcweir #include <macros/xinterface.hxx>
44*cdf0e10cSrcweir #include <macros/xtypeprovider.hxx>
45*cdf0e10cSrcweir #include <macros/debug.hxx>
46*cdf0e10cSrcweir #include <macros/generic.hxx>
47*cdf0e10cSrcweir #include <stdtypes.h>
48*cdf0e10cSrcweir 
49*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
50*cdf0e10cSrcweir //	interface includes
51*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
52*cdf0e10cSrcweir #include <com/sun/star/lang/XTypeProvider.hpp>
53*cdf0e10cSrcweir #include <com/sun/star/frame/XDispatchProvider.hpp>
54*cdf0e10cSrcweir #include <com/sun/star/util/URL.hpp>
55*cdf0e10cSrcweir #include <com/sun/star/frame/DispatchDescriptor.hpp>
56*cdf0e10cSrcweir #include <com/sun/star/beans/PropertyValue.hpp>
57*cdf0e10cSrcweir 
58*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
59*cdf0e10cSrcweir //	other includes
60*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
61*cdf0e10cSrcweir #include <cppuhelper/weak.hxx>
62*cdf0e10cSrcweir #include <cppuhelper/weakref.hxx>
63*cdf0e10cSrcweir 
64*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
65*cdf0e10cSrcweir //	namespace
66*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
67*cdf0e10cSrcweir 
68*cdf0e10cSrcweir namespace framework{
69*cdf0e10cSrcweir 
70*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
71*cdf0e10cSrcweir 
72*cdf0e10cSrcweir /**
73*cdf0e10cSrcweir     @descr          We know some special dispatch objects with diffrent functionality.
74*cdf0e10cSrcweir                     The can be created internaly by the following DispatchProvider.
75*cdf0e10cSrcweir                     Here we define some identifier to force creation of the right one.
76*cdf0e10cSrcweir */
77*cdf0e10cSrcweir enum EDispatchHelper
78*cdf0e10cSrcweir {
79*cdf0e10cSrcweir     E_DEFAULTDISPATCHER     ,
80*cdf0e10cSrcweir     E_MENUDISPATCHER        ,
81*cdf0e10cSrcweir     E_HELPAGENTDISPATCHER   ,
82*cdf0e10cSrcweir     E_CREATEDISPATCHER      ,
83*cdf0e10cSrcweir     E_BLANKDISPATCHER       ,
84*cdf0e10cSrcweir     E_SELFDISPATCHER        ,
85*cdf0e10cSrcweir     E_CLOSEDISPATCHER       ,
86*cdf0e10cSrcweir     E_STARTMODULEDISPATCHER
87*cdf0e10cSrcweir };
88*cdf0e10cSrcweir 
89*cdf0e10cSrcweir //_________________________________________________________________________________________________________________
90*cdf0e10cSrcweir 
91*cdf0e10cSrcweir /**
92*cdf0e10cSrcweir     @short          implement a helper for XDispatchProvider interface
93*cdf0e10cSrcweir     @descr          The result of a queryDispatch() call depends from the owner, which use an instance of this class.
94*cdf0e10cSrcweir                     (frame, desktop) All of them must provides different functionality.
95*cdf0e10cSrcweir                     E.g:    - task can be created by the desktop only
96*cdf0e10cSrcweir                             - a task can have a beamer as direct child
97*cdf0e10cSrcweir                             - a normal frame never can create a new one by himself
98*cdf0e10cSrcweir 
99*cdf0e10cSrcweir     @attention      Use this class as member only! Never use it as baseclass.
100*cdf0e10cSrcweir 					XInterface will be ambigous and we hold a weakreference to ouer OWNER - not to ouer SUPERCLASS!
101*cdf0e10cSrcweir 
102*cdf0e10cSrcweir 	@base			ThreadHelpBase
103*cdf0e10cSrcweir                         supports threadsafe mechanism
104*cdf0e10cSrcweir     @base           OWeakObject
105*cdf0e10cSrcweir                         provides ref count and weak mechanism
106*cdf0e10cSrcweir 
107*cdf0e10cSrcweir 	@devstatus		ready to use
108*cdf0e10cSrcweir     @threadsafe     yes
109*cdf0e10cSrcweir     @modified       17.05.2002 07:56, as96863
110*cdf0e10cSrcweir */
111*cdf0e10cSrcweir class DispatchProvider  :   // interfaces
112*cdf0e10cSrcweir                             public  css::lang::XTypeProvider            ,
113*cdf0e10cSrcweir                             public  css::frame::XDispatchProvider       ,
114*cdf0e10cSrcweir 							// baseclasses
115*cdf0e10cSrcweir 							// Order is neccessary for right initialization!
116*cdf0e10cSrcweir                             private ThreadHelpBase                      ,
117*cdf0e10cSrcweir                             private TransactionBase                     ,
118*cdf0e10cSrcweir                             public  ::cppu::OWeakObject
119*cdf0e10cSrcweir {
120*cdf0e10cSrcweir     /* member */
121*cdf0e10cSrcweir     private:
122*cdf0e10cSrcweir         /// reference to global service manager to create new services
123*cdf0e10cSrcweir         css::uno::Reference< css::lang::XMultiServiceFactory > m_xFactory;
124*cdf0e10cSrcweir         /// weakreference to owner frame (Don't use a hard reference. Owner can't delete us then!)
125*cdf0e10cSrcweir         css::uno::WeakReference< css::frame::XFrame > m_xFrame;
126*cdf0e10cSrcweir         /// different dispatcher to handle special dispatch calls, protocols or URLs (they will be created on demand.)
127*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > m_xMenuDispatcher     ;
128*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > m_xHelpAgentDispatcher;
129*cdf0e10cSrcweir /*      css::uno::Reference< css::frame::XDispatch > m_xBlankDispatcher    ;
130*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > m_xSelfDispatcher     ;
131*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > m_xDefaultDispatcher  ;*/
132*cdf0e10cSrcweir         /// cache of some other dispatch provider which are registered inside configuration to handle special URL protocols
133*cdf0e10cSrcweir         HandlerCache m_aProtocolHandlerCache;
134*cdf0e10cSrcweir 
135*cdf0e10cSrcweir     /* interface */
136*cdf0e10cSrcweir 	public:
137*cdf0e10cSrcweir 		FWK_DECLARE_XINTERFACE
138*cdf0e10cSrcweir 		FWK_DECLARE_XTYPEPROVIDER
139*cdf0e10cSrcweir 
140*cdf0e10cSrcweir         DispatchProvider( const css::uno::Reference< css::lang::XMultiServiceFactory >& xFactory ,
141*cdf0e10cSrcweir                           const css::uno::Reference< css::frame::XFrame >&              xFrame   );
142*cdf0e10cSrcweir 
143*cdf0e10cSrcweir         virtual css::uno::Reference< css::frame::XDispatch > SAL_CALL                       queryDispatch  ( const css::util::URL&                                       aURL             ,
144*cdf0e10cSrcweir                                                                                                              const ::rtl::OUString&                                      sTargetFrameName ,
145*cdf0e10cSrcweir                                                                                                                    sal_Int32                                             nSearchFlags     ) throw( css::uno::RuntimeException );
146*cdf0e10cSrcweir         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 );
147*cdf0e10cSrcweir 
148*cdf0e10cSrcweir     /* helper */
149*cdf0e10cSrcweir     protected:
150*cdf0e10cSrcweir         // Let him protected! So nobody can use us as base ...
151*cdf0e10cSrcweir         virtual ~DispatchProvider();
152*cdf0e10cSrcweir 
153*cdf0e10cSrcweir 	private:
154*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > implts_getOrCreateDispatchHelper   (       EDispatchHelper                            eHelper                       ,
155*cdf0e10cSrcweir                                                                                           const css::uno::Reference< css::frame::XFrame >& xOwner                        ,
156*cdf0e10cSrcweir                                                                                           const ::rtl::OUString&                           sTarget = ::rtl::OUString()   ,
157*cdf0e10cSrcweir                                                                                                 sal_Int32                                  nSearchFlags = 0              );
158*cdf0e10cSrcweir         sal_Bool                                     implts_isLoadableContent           ( const css::util::URL&                            aURL                          );
159*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > implts_queryDesktopDispatch        ( const css::uno::Reference< css::frame::XFrame >  xDesktop                      ,
160*cdf0e10cSrcweir                                                                                           const css::util::URL&                            aURL                          ,
161*cdf0e10cSrcweir                                                                                           const ::rtl::OUString&                           sTargetFrameName              ,
162*cdf0e10cSrcweir                                                                                                 sal_Int32                                  nSearchFlags                  );
163*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > implts_queryFrameDispatch          ( const css::uno::Reference< css::frame::XFrame >  xFrame                        ,
164*cdf0e10cSrcweir                                                                                           const css::util::URL&                            aURL                          ,
165*cdf0e10cSrcweir                                                                                           const ::rtl::OUString&                           sTargetFrameName              ,
166*cdf0e10cSrcweir                                                                                                 sal_Int32                                  nSearchFlags                  );
167*cdf0e10cSrcweir         css::uno::Reference< css::frame::XDispatch > implts_searchProtocolHandler       ( const css::util::URL&                            aURL                          );
168*cdf0e10cSrcweir 
169*cdf0e10cSrcweir }; // class DispatchProvider
170*cdf0e10cSrcweir 
171*cdf0e10cSrcweir } // namespace framework
172*cdf0e10cSrcweir 
173*cdf0e10cSrcweir #endif // #ifndef __FRAMEWORK_DISPATCH_DISPATCHPROVIDER_HXX_
174