diff options
author | Oliver-Rainer Wittmann <orw@apache.org> | 2013-04-10 08:20:16 +0000 |
---|---|---|
committer | Oliver-Rainer Wittmann <orw@apache.org> | 2013-04-10 08:20:16 +0000 |
commit | 0a0a9b32aa5bf1ce2554ad37cbba3c7a105db2b5 (patch) | |
tree | f5c258d25d3719c8f719a944043b5220377e9f9c /framework/source | |
parent | bcfee75544246db6788715d98efd6d33c12f933d (diff) |
121420: merge sidebar feature from branch into trunk
Notes
Notes:
merged as: d50ce284c9674c45acd40d017cc44c260da722a2
Diffstat (limited to 'framework/source')
-rw-r--r-- | framework/source/register/registerservices.cxx | 38 | ||||
-rw-r--r-- | framework/source/services/ContextChangeEventMultiplexer.cxx | 389 | ||||
-rw-r--r-- | framework/source/services/EventMultiplexer.cxx | 270 |
3 files changed, 662 insertions, 35 deletions
diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx index d8cfd95c1eff..813cf48981c6 100644 --- a/framework/source/register/registerservices.cxx +++ b/framework/source/register/registerservices.cxx @@ -53,26 +53,14 @@ #include <services/tabwindowservice.hxx> #include <services/frame.hxx> #include <services/modulemanager.hxx> -//#include <dispatch/oxt_handler.hxx> #include <jobs/jobexecutor.hxx> -//#include <recording/dispatchrecordersupplier.hxx> -//#include <recording/dispatchrecorder.hxx> -//#include <dispatch/mailtodispatcher.hxx> -//#include <dispatch/servicehandler.hxx> #include <jobs/jobdispatch.hxx> #include <services/backingcomp.hxx> -//#include <services/dispatchhelper.hxx> #include <services/layoutmanager.hxx> -//#include <services/license.hxx> #include <uifactory/uielementfactorymanager.hxx> #include <uifactory/popupmenucontrollerfactory.hxx> -//#include <uielement/fontmenucontroller.hxx> -//#include <uielement/fontsizemenucontroller.hxx> #include <uielement/objectmenucontroller.hxx> -//#include <uielement/headermenucontroller.hxx> -//#include <uielement/footermenucontroller.hxx> #include <uielement/controlmenucontroller.hxx> -//#include <uielement/macrosmenucontroller.hxx> #include <uielement/uicommanddescription.hxx> #include <uiconfiguration/uiconfigurationmanager.hxx> #include <uiconfiguration/moduleuicfgsupplier.hxx> @@ -84,7 +72,6 @@ #include <uifactory/toolboxfactory.hxx> #include <uifactory/addonstoolboxfactory.hxx> #include "uiconfiguration/windowstateconfiguration.hxx" -//#include <uielement/toolbarsmenucontroller.hxx> #include "uifactory/toolbarcontrollerfactory.hxx" #include "uifactory/statusbarcontrollerfactory.hxx" #include <services/autorecovery.hxx> @@ -93,42 +80,27 @@ #include <uifactory/statusbarfactory.hxx> #include <uiconfiguration/uicategorydescription.hxx> #include <services/sessionlistener.hxx> -//#include <uielement/newmenucontroller.hxx> #include <services/taskcreatorsrv.hxx> -//#include <services/uriabbreviation.hxx> - #include <uielement/langselectionstatusbarcontroller.hxx> -//#include <uielement/langselectionmenucontroller.hxx> #include <uiconfiguration/imagemanager.hxx> #include <uifactory/windowcontentfactorymanager.hxx> #include <services/substitutepathvars.hxx> #include <services/pathsettings.hxx> +#include <services/ContextChangeEventMultiplexer.hxx> COMPONENTGETIMPLEMENTATIONENVIRONMENT COMPONENTGETFACTORY ( IFFACTORY( ::framework::URLTransformer ) else IFFACTORY( ::framework::Desktop ) else IFFACTORY( ::framework::Frame ) else - //IFFACTORY( ::framework::Oxt_Handler ) else IFFACTORY( ::framework::JobExecutor ) else - //IFFACTORY( ::framework::DispatchRecorderSupplier ) else - //IFFACTORY( ::framework::DispatchRecorder ) else - //IFFACTORY( ::framework::MailToDispatcher ) else - //IFFACTORY( ::framework::ServiceHandler ) else IFFACTORY( ::framework::JobDispatch ) else IFFACTORY( ::framework::BackingComp ) else - //IFFACTORY( ::framework::DispatchHelper ) else IFFACTORY( ::framework::LayoutManager ) else - //IFFACTORY( ::framework::License ) else IFFACTORY( ::framework::UIElementFactoryManager ) else IFFACTORY( ::framework::PopupMenuControllerFactory ) else - //IFFACTORY( ::framework::FontMenuController ) else - //IFFACTORY( ::framework::FontSizeMenuController ) else IFFACTORY( ::framework::ObjectMenuController ) else - //IFFACTORY( ::framework::HeaderMenuController ) else - //IFFACTORY( ::framework::FooterMenuController ) else IFFACTORY( ::framework::ControlMenuController ) else - //IFFACTORY( ::framework::MacrosMenuController ) else IFFACTORY( ::framework::UICommandDescription ) else IFFACTORY( ::framework::ModuleManager ) else IFFACTORY( ::framework::UIConfigurationManager ) else @@ -142,7 +114,6 @@ COMPONENTGETFACTORY ( IFFACTORY( ::framework::URLTransformer IFFACTORY( ::framework::AddonsToolBoxFactory ) else IFFACTORY( ::framework::WindowStateConfiguration ) else IFFACTORY( ::framework::ToolbarControllerFactory ) else - //IFFACTORY( ::framework::ToolbarsMenuController ) else IFFACTORY( ::framework::AutoRecovery ) else IFFACTORY( ::framework::StatusIndicatorFactory ) else IFFACTORY( ::framework::RecentFilesMenuController ) else @@ -152,15 +123,12 @@ COMPONENTGETFACTORY ( IFFACTORY( ::framework::URLTransformer IFFACTORY( ::framework::StatusbarControllerFactory ) else IFFACTORY( ::framework::SessionListener ) else IFFACTORY( ::framework::TaskCreatorService ) else - //IFFACTORY( ::framework::NewMenuController ) else - //IFFACTORY( ::framework::UriAbbreviation ) else - //IFFACTORY( ::framework::PopupMenuDispatcher ) else IFFACTORY( ::framework::ImageManager ) else IFFACTORY( ::framework::LangSelectionStatusbarController ) else - //IFFACTORY( ::framework::LanguageSelectionMenuController ) else IFFACTORY( ::framework::WindowContentFactoryManager ) else IFFACTORY( ::framework::TabWindowService ) else IFFACTORY( ::framework::SubstitutePathVariables ) else - IFFACTORY( ::framework::PathSettings ) + IFFACTORY( ::framework::PathSettings ) else + IFFACTORY( ::framework::ContextChangeEventMultiplexer ) ) diff --git a/framework/source/services/ContextChangeEventMultiplexer.cxx b/framework/source/services/ContextChangeEventMultiplexer.cxx new file mode 100644 index 000000000000..f3861a607d10 --- /dev/null +++ b/framework/source/services/ContextChangeEventMultiplexer.cxx @@ -0,0 +1,389 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_framework.hxx" + +#include "services/ContextChangeEventMultiplexer.hxx" +#include "services.h" + +using ::rtl::OUString; + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) + +using namespace css; +using namespace cssu; + +namespace framework { + +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer" +#define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer" +#define SINGLETON_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexerSigleton" + + +ContextChangeEventMultiplexer::ContextChangeEventMultiplexer ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + : ContextChangeEventMultiplexerInterfaceBase(m_aMutex), + maListeners() +{ + (void)rxContext; +} + + + + +ContextChangeEventMultiplexer::~ContextChangeEventMultiplexer (void) +{ +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::disposing (void) +{ + ListenerMap aListeners; + aListeners.swap(maListeners); + + cssu::Reference<cssu::XInterface> xThis (static_cast<XWeak*>(this)); + css::lang::EventObject aEvent (xThis); + for (ListenerMap::const_iterator iContainer(aListeners.begin()), iEnd(aListeners.end()); + iContainer!=iEnd; + ++iContainer) + { + // Unregister from the focus object. + Reference<lang::XComponent> xComponent (iContainer->first, UNO_QUERY); + if (xComponent.is()) + xComponent->removeEventListener(this); + + // Tell all listeners that we are being disposed. + const FocusDescriptor& rFocusDescriptor (iContainer->second); + for (ListenerContainer::const_iterator + iListener(rFocusDescriptor.maListeners.begin()), + iContainerEnd(rFocusDescriptor.maListeners.end()); + iListener!=iContainerEnd; + ++iListener) + { + (*iListener)->disposing(aEvent); + } + } +} + + + + +// XContextChangeEventMultiplexer + +void SAL_CALL ContextChangeEventMultiplexer::addContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw css::lang::IllegalArgumentException( + A2S("can not add an empty reference"), + static_cast<XWeak*>(this), + 0); + + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true); + if (pFocusDescriptor != NULL) + { + ListenerContainer& rContainer (pFocusDescriptor->maListeners); + if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end()) + rContainer.push_back(rxListener); + else + { + // The listener was added for the same event focus + // previously. That is an error. + throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0); + } + } + + // Send out an initial event that informs the new listener about + // the current context. + if (rxEventFocus.is() && pFocusDescriptor!=NULL) + { + css::ui::ContextChangeEventObject aEvent ( + NULL, + pFocusDescriptor->msCurrentApplicationName, + pFocusDescriptor->msCurrentContextName); + rxListener->notifyContextChangeEvent(aEvent); + } +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::removeContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException( + A2S("can not remove an empty reference"), + static_cast<XWeak*>(this), 0); + + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false); + if (pFocusDescriptor != NULL) + { + ListenerContainer& rContainer (pFocusDescriptor->maListeners); + const ListenerContainer::iterator iListener ( + ::std::find(rContainer.begin(), rContainer.end(), rxListener)); + if (iListener != rContainer.end()) + { + rContainer.erase(iListener); + + // We hold on to the focus descriptor even when the last listener has been removed. + // This allows us to keep track of the current context and send it to new listeners. + } + } + +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::removeAllContextChangeEventListeners ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException( + A2S("can not remove an empty reference"), + static_cast<XWeak*>(this), 0); + + for (ListenerMap::iterator + iContainer(maListeners.begin()), + iEnd(maListeners.end()); + iContainer!=iEnd; + ++iContainer) + { + const ListenerContainer::iterator iListener ( + ::std::find(iContainer->second.maListeners.begin(), iContainer->second.maListeners.end(), rxListener)); + if (iListener != iContainer->second.maListeners.end()) + { + iContainer->second.maListeners.erase(iListener); + + // We hold on to the focus descriptor even when the last listener has been removed. + // This allows us to keep track of the current context and send it to new listeners. + } + } +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::broadcastContextChangeEvent ( + const css::ui::ContextChangeEventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException) +{ + // Remember the current context. + if (rxEventFocus.is()) + { + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true); + if (pFocusDescriptor != NULL) + { + pFocusDescriptor->msCurrentApplicationName = rEventObject.ApplicationName; + pFocusDescriptor->msCurrentContextName = rEventObject.ContextName; + } + } + + BroadcastEventToSingleContainer(rEventObject, rxEventFocus); + if (rxEventFocus.is()) + BroadcastEventToSingleContainer(rEventObject, NULL); +} + + + + +void ContextChangeEventMultiplexer::BroadcastEventToSingleContainer ( + const css::ui::ContextChangeEventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) +{ + FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false); + if (pFocusDescriptor != NULL) + { + // Create a copy of the listener container to avoid problems + // when one of the called listeners calls add... or remove... + ListenerContainer aContainer (pFocusDescriptor->maListeners); + for (ListenerContainer::const_iterator + iListener(aContainer.begin()), + iEnd(aContainer.end()); + iListener!=iEnd; + ++iListener) + { + (*iListener)->notifyContextChangeEvent(rEventObject); + } + } +} + + + + +ContextChangeEventMultiplexer::FocusDescriptor* ContextChangeEventMultiplexer::GetFocusDescriptor ( + const cssu::Reference<cssu::XInterface>& rxEventFocus, + const bool bCreateWhenMissing) +{ + ListenerMap::iterator iDescriptor (maListeners.find(rxEventFocus)); + if (iDescriptor == maListeners.end() && bCreateWhenMissing) + { + // Listen for the focus being disposed. + Reference<lang::XComponent> xComponent (rxEventFocus, UNO_QUERY); + if (xComponent.is()) + xComponent->addEventListener(this); + + // Create a new listener container for the event focus. + iDescriptor = maListeners.insert( + ListenerMap::value_type( + rxEventFocus, + FocusDescriptor())).first; + } + if (iDescriptor != maListeners.end()) + return &iDescriptor->second; + else + return NULL; +} + + + + +// XSingleComponentFactory + +cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + (void)rxContext; + return cssu::Reference<cssu::XInterface>(); +} + + + + +cssu::Reference<cssu::XInterface > SAL_CALL ContextChangeEventMultiplexer::createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + (void)rArguments; + (void)rxContext; + return cssu::Reference<cssu::XInterface>(); +} + + + + +// XServiceInfo + +::rtl::OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName (void) + throw(cssu::RuntimeException) +{ + return impl_getStaticImplementationName(); +} + + + + + +sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException) +{ + return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0; +} + + + + +cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames (void) + throw (cssu::RuntimeException) +{ + return static_GetSupportedServiceNames(); +} + + + + +void SAL_CALL ContextChangeEventMultiplexer::disposing ( + const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException) +{ + ListenerMap::iterator iDescriptor (maListeners.find(rEvent.Source)); + + if (iDescriptor == maListeners.end()) + { + OSL_ASSERT(iDescriptor != maListeners.end()); + return; + } + + // Should we notify the remaining listeners? + + maListeners.erase(iDescriptor); +} + + + + +// Local and static methods. + +OUString SAL_CALL ContextChangeEventMultiplexer::impl_getStaticImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + + + +cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::static_GetSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (2); + aServiceNames[0] = A2S(SERVICE_NAME); + aServiceNames[1] = A2S(SINGLETON_NAME); + return aServiceNames; +} + + + + +cssu::Reference<cssu::XInterface> ContextChangeEventMultiplexer::impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager) +{ + (void)rxServiceManager; + return cppu::createSingleComponentFactory( + ContextChangeEventMultiplexer::static_CreateInstance, + ContextChangeEventMultiplexer::impl_getStaticImplementationName(), + ContextChangeEventMultiplexer::static_GetSupportedServiceNames() + ); +} + + + + +cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception) +{ + ContextChangeEventMultiplexer* pObject = new ContextChangeEventMultiplexer(rxComponentContext); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY); + return xService; +} + +} // end of namespace framework diff --git a/framework/source/services/EventMultiplexer.cxx b/framework/source/services/EventMultiplexer.cxx new file mode 100644 index 000000000000..9f5b05dabe16 --- /dev/null +++ b/framework/source/services/EventMultiplexer.cxx @@ -0,0 +1,270 @@ +/************************************************************** + * + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + * + *************************************************************/ + +#include "precompiled_framework.hxx" + +#include "services/EventMultiplexer.hxx" +#include "services.h" + +using ::rtl::OUString; + +#define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s)) + +namespace framework { + +#define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.EventMultiplexer" +#define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer" +#define SINGLETON_NAME "org.apache.openoffice.comp.framework.EventMultiplexer" + + +EventMultiplexer::EventMultiplexer (const cssu::Reference<css::uno::XComponentContext>& rxContext) + : EventMultiplexerInterfaceBase(m_aMutex), + maListeners() +{ + (void)rxContext; +} + + + + +EventMultiplexer::~EventMultiplexer (void) +{ + maListeners.clear(); +} + + + + +// XEventMultiplexer + +void SAL_CALL EventMultiplexer::addEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw css::lang::IllegalArgumentException(A2S("can not add an empty reference"), static_cast<XWeak*>(this), 0); + + ListenerMap::iterator iListenerContainer (maListeners.find(rxEventFocus)); + if (iListenerContainer == maListeners.end()) + { + // Create a new listener container for the event focus. + iListenerContainer = maListeners.insert( + ListenerMap::value_type( + rxEventFocus, + ListenerContainer())).first; + } + if (iListenerContainer != maListeners.end()) + { + ListenerContainer& rContainer (iListenerContainer->second); + if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end()) + rContainer.push_back(rxListener); + else + { + // The listener was added for the same event focus + // previously. That is an error. + throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0); + } + } +} + + + + +void SAL_CALL EventMultiplexer::removeEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException(A2S("can not remove an empty reference"), static_cast<XWeak*>(this), 0); + + ListenerMap::iterator iListenerContainer (maListeners.find(rxEventFocus)); + if (iListenerContainer != maListeners.end()) + { + ListenerContainer& rContainer (iListenerContainer->second); + const ListenerContainer::iterator iListener (::std::find(rContainer.begin(), rContainer.end(), rxListener)); + if (iListener != rContainer.end()) + rContainer.erase(iListener); + } + +} + + + + +void SAL_CALL EventMultiplexer::removeAllEventListeners ( + const cssu::Reference<css::util::XEventListener>& rxListener) + throw(cssu::RuntimeException,cssl::IllegalArgumentException) +{ + if ( ! rxListener.is()) + throw cssl::IllegalArgumentException(A2S("can not remove an empty reference"), static_cast<XWeak*>(this), 0); + + for (ListenerMap::iterator + iContainer(maListeners.begin()), + iEnd(maListeners.end()); + iContainer!=iEnd; + ++iContainer) + { + const ListenerContainer::iterator iListener (::std::find(iContainer->second.begin(), iContainer->second.end(), rxListener)); + if (iListener != iContainer->second.end()) + iContainer->second.erase(iListener); + } +} + + + + + +void SAL_CALL EventMultiplexer::broadcastEvent ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException) +{ + BroadcastEventToSingleContainer(rEventObject, rxEventFocus); + if (rxEventFocus.is()) + BroadcastEventToSingleContainer(rEventObject, NULL); +} + + + + +void EventMultiplexer::BroadcastEventToSingleContainer ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) +{ + ListenerMap::iterator iListenerContainer (maListeners.find(rxEventFocus)); + if (iListenerContainer != maListeners.end()) + { + // Create a copy of the listener container to avoid problems + // when one of the called listeners calls add... or remove... + ListenerContainer aContainer (iListenerContainer->second); + for (ListenerContainer::const_iterator + iListener(aContainer.begin()), + iEnd(aContainer.end()); + iListener!=iEnd; + ++iListener) + { + (*iListener)->notifyEvent(rEventObject); + } + } +} + + + + +// XSingleComponentFactory +cssu::Reference<cssu::XInterface> SAL_CALL EventMultiplexer::createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + return cssu::Reference<cssu::XInterface>(); +} + + + + +cssu::Reference<cssu::XInterface > SAL_CALL EventMultiplexer::createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException) +{ + return cssu::Reference<cssu::XInterface>(); +} + + + + +// XServiceInfo + +::rtl::OUString SAL_CALL EventMultiplexer::getImplementationName (void) + throw(cssu::RuntimeException) +{ + return impl_getStaticImplementationName(); +} + + + + + +sal_Bool SAL_CALL EventMultiplexer::supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException) +{ + return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0; +} + + + + +cssu::Sequence<OUString> SAL_CALL EventMultiplexer::getSupportedServiceNames (void) + throw (cssu::RuntimeException) +{ + return static_GetSupportedServiceNames(); +} + + + + +// Local and static methods. + +OUString SAL_CALL EventMultiplexer::impl_getStaticImplementationName (void) +{ + return A2S(IMPLEMENTATION_NAME); +} + + + + +cssu::Sequence<OUString> SAL_CALL EventMultiplexer::static_GetSupportedServiceNames (void) +{ + cssu::Sequence<OUString> aServiceNames (2); + aServiceNames[0] = A2S(SERVICE_NAME); + aServiceNames[1] = A2S(SINGLETON_NAME); + return aServiceNames; +} + + + + +cssu::Reference<cssu::XInterface> EventMultiplexer::impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager) +{ + return cppu::createSingleComponentFactory( + EventMultiplexer::static_CreateInstance, + EventMultiplexer::impl_getStaticImplementationName(), + EventMultiplexer::static_GetSupportedServiceNames() + ); +} + + + + +cssu::Reference<cssu::XInterface> SAL_CALL EventMultiplexer::static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception) +{ + EventMultiplexer* pObject = new EventMultiplexer(rxComponentContext); + cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY); + return xService; +} + +} // end of namespace framework |