122de8995SAndre Fischer /************************************************************** 222de8995SAndre Fischer * 322de8995SAndre Fischer * Licensed to the Apache Software Foundation (ASF) under one 422de8995SAndre Fischer * or more contributor license agreements. See the NOTICE file 522de8995SAndre Fischer * distributed with this work for additional information 622de8995SAndre Fischer * regarding copyright ownership. The ASF licenses this file 722de8995SAndre Fischer * to you under the Apache License, Version 2.0 (the 822de8995SAndre Fischer * "License"); you may not use this file except in compliance 922de8995SAndre Fischer * with the License. You may obtain a copy of the License at 1022de8995SAndre Fischer * 1122de8995SAndre Fischer * http://www.apache.org/licenses/LICENSE-2.0 1222de8995SAndre Fischer * 1322de8995SAndre Fischer * Unless required by applicable law or agreed to in writing, 1422de8995SAndre Fischer * software distributed under the License is distributed on an 1522de8995SAndre Fischer * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1622de8995SAndre Fischer * KIND, either express or implied. See the License for the 1722de8995SAndre Fischer * specific language governing permissions and limitations 1822de8995SAndre Fischer * under the License. 1922de8995SAndre Fischer * 2022de8995SAndre Fischer *************************************************************/ 2122de8995SAndre Fischer 2222de8995SAndre Fischer 2322de8995SAndre Fischer 2422de8995SAndre Fischer #ifndef __FRAMEWORK_SERVICES_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ 2522de8995SAndre Fischer #define __FRAMEWORK_SERVICES_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ 2622de8995SAndre Fischer 2722de8995SAndre Fischer #include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp> 2822de8995SAndre Fischer 2922de8995SAndre Fischer #include <cppuhelper/compbase3.hxx> 3022de8995SAndre Fischer #include <cppuhelper/basemutex.hxx> 3122de8995SAndre Fischer 3222de8995SAndre Fischer #include "macros/xserviceinfo.hxx" 3322de8995SAndre Fischer 34*95a18594SAndre Fischer #include <map> 35*95a18594SAndre Fischer #include <boost/noncopyable.hpp> 36*95a18594SAndre Fischer 37*95a18594SAndre Fischer 3822de8995SAndre Fischer namespace 3922de8995SAndre Fischer { 4022de8995SAndre Fischer typedef ::cppu::WeakComponentImplHelper3 < 4122de8995SAndre Fischer css::ui::XContextChangeEventMultiplexer, 4222de8995SAndre Fischer css::lang::XSingleComponentFactory, 4322de8995SAndre Fischer css::lang::XServiceInfo 4422de8995SAndre Fischer > ContextChangeEventMultiplexerInterfaceBase; 4522de8995SAndre Fischer } 4622de8995SAndre Fischer 4722de8995SAndre Fischer 4822de8995SAndre Fischer namespace css = ::com::sun::star; 4922de8995SAndre Fischer namespace cssu = ::com::sun::star::uno; 5022de8995SAndre Fischer namespace cssl = ::com::sun::star::lang; 5122de8995SAndre Fischer 5222de8995SAndre Fischer namespace framework { 5322de8995SAndre Fischer 5422de8995SAndre Fischer class ContextChangeEventMultiplexer 5522de8995SAndre Fischer : private ::boost::noncopyable, 5622de8995SAndre Fischer private ::cppu::BaseMutex, 5722de8995SAndre Fischer public ContextChangeEventMultiplexerInterfaceBase 5822de8995SAndre Fischer { 5922de8995SAndre Fischer public: 6022de8995SAndre Fischer ContextChangeEventMultiplexer(const cssu::Reference<css::uno::XComponentContext>& rxContext); 6122de8995SAndre Fischer virtual ~ContextChangeEventMultiplexer (void); 62b9e67834SAndre Fischer 63b9e67834SAndre Fischer virtual void SAL_CALL disposing (void); 64b9e67834SAndre Fischer 6522de8995SAndre Fischer // XContextChangeEventMultiplexer 6622de8995SAndre Fischer virtual void SAL_CALL addContextChangeEventListener ( 6722de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, 6822de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 6922de8995SAndre Fischer throw(cssu::RuntimeException, cssl::IllegalArgumentException); 7022de8995SAndre Fischer virtual void SAL_CALL removeContextChangeEventListener ( 7122de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, 7222de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 7322de8995SAndre Fischer throw(cssu::RuntimeException, cssl::IllegalArgumentException); 7422de8995SAndre Fischer virtual void SAL_CALL removeAllContextChangeEventListeners ( 7522de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener) 7622de8995SAndre Fischer throw(cssu::RuntimeException, cssl::IllegalArgumentException); 7722de8995SAndre Fischer virtual void SAL_CALL broadcastContextChangeEvent ( 7822de8995SAndre Fischer const css::ui::ContextChangeEventObject& rContextChangeEventObject, 7922de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus) 8022de8995SAndre Fischer throw(cssu::RuntimeException); 8122de8995SAndre Fischer 8222de8995SAndre Fischer // XSingleComponentFactory 8322de8995SAndre Fischer virtual cssu::Reference<cssu::XInterface> SAL_CALL createInstanceWithContext ( 8422de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext) 8522de8995SAndre Fischer throw (cssu::Exception, cssu::RuntimeException); 8622de8995SAndre Fischer virtual cssu::Reference<cssu::XInterface > SAL_CALL createInstanceWithArgumentsAndContext ( 8722de8995SAndre Fischer const cssu::Sequence<cssu::Any>& rArguments, 8822de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext) 8922de8995SAndre Fischer throw (cssu::Exception, cssu::RuntimeException); 9022de8995SAndre Fischer 9122de8995SAndre Fischer // XServiceInfo 9222de8995SAndre Fischer virtual ::rtl::OUString SAL_CALL getImplementationName (void) 9322de8995SAndre Fischer throw (cssu::RuntimeException); 9422de8995SAndre Fischer virtual sal_Bool SAL_CALL supportsService ( 9522de8995SAndre Fischer const ::rtl::OUString& rsServiceName) 9622de8995SAndre Fischer throw (cssu::RuntimeException); 9722de8995SAndre Fischer virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) 9822de8995SAndre Fischer throw (cssu::RuntimeException); 9922de8995SAndre Fischer 10022de8995SAndre Fischer static ::rtl::OUString SAL_CALL impl_getStaticImplementationName (void); 10122de8995SAndre Fischer static cssu::Reference<cssu::XInterface> SAL_CALL impl_createFactory ( 10222de8995SAndre Fischer const cssu::Reference<cssl::XMultiServiceFactory>& xServiceManager); 10322de8995SAndre Fischer 10422de8995SAndre Fischer private: 10522de8995SAndre Fischer typedef ::std::vector<cssu::Reference<css::ui::XContextChangeEventListener> > ListenerContainer; 106*95a18594SAndre Fischer class FocusDescriptor 107*95a18594SAndre Fischer { 108*95a18594SAndre Fischer public: 109*95a18594SAndre Fischer ListenerContainer maListeners; 110*95a18594SAndre Fischer ::rtl::OUString msCurrentApplicationName; 111*95a18594SAndre Fischer ::rtl::OUString msCurrentContextName; 112*95a18594SAndre Fischer }; 113*95a18594SAndre Fischer typedef ::std::map<cssu::Reference<cssu::XInterface>, FocusDescriptor> ListenerMap; 11422de8995SAndre Fischer ListenerMap maListeners; 11522de8995SAndre Fischer 11622de8995SAndre Fischer /** Notify all listeners in the container that is associated with 11722de8995SAndre Fischer the given event focus. 11822de8995SAndre Fischer 11922de8995SAndre Fischer Typically called twice from broadcastEvent(), once for the 12022de8995SAndre Fischer given event focus and onece for NULL. 12122de8995SAndre Fischer */ 12222de8995SAndre Fischer void BroadcastEventToSingleContainer ( 12322de8995SAndre Fischer const css::ui::ContextChangeEventObject& rEventObject, 12422de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus); 12522de8995SAndre Fischer 12622de8995SAndre Fischer static cssu::Sequence< ::rtl::OUString > SAL_CALL static_GetSupportedServiceNames (void); 12722de8995SAndre Fischer static cssu::Reference<cssu::XInterface> SAL_CALL static_CreateInstance ( 12822de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxComponentContext) 12922de8995SAndre Fischer throw (cssu::Exception); 13022de8995SAndre Fischer }; 13122de8995SAndre Fischer 13222de8995SAndre Fischer } // end of namespace framework 13322de8995SAndre Fischer 13422de8995SAndre Fischer #endif 13522de8995SAndre Fischer 136