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