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 #include "precompiled_framework.hxx"
2322de8995SAndre Fischer
2422de8995SAndre Fischer #include "services/ContextChangeEventMultiplexer.hxx"
2522de8995SAndre Fischer #include "services.h"
2622de8995SAndre Fischer
2722de8995SAndre Fischer using ::rtl::OUString;
2822de8995SAndre Fischer
2922de8995SAndre Fischer #define A2S(s) ::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(s))
3022de8995SAndre Fischer
31*7a32b0c8SAndre Fischer using namespace css;
32*7a32b0c8SAndre Fischer using namespace cssu;
33*7a32b0c8SAndre Fischer
3422de8995SAndre Fischer namespace framework {
3522de8995SAndre Fischer
3622de8995SAndre Fischer #define IMPLEMENTATION_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer"
3722de8995SAndre Fischer #define SERVICE_NAME "com.sun.star.ui.ContextChangeEventMultiplexer"
3822de8995SAndre Fischer #define SINGLETON_NAME "org.apache.openoffice.comp.framework.ContextChangeEventMultiplexerSigleton"
3922de8995SAndre Fischer
4022de8995SAndre Fischer
ContextChangeEventMultiplexer(const cssu::Reference<cssu::XComponentContext> & rxContext)4122de8995SAndre Fischer ContextChangeEventMultiplexer::ContextChangeEventMultiplexer (
42b9e67834SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext)
4322de8995SAndre Fischer : ContextChangeEventMultiplexerInterfaceBase(m_aMutex),
4422de8995SAndre Fischer maListeners()
4522de8995SAndre Fischer {
4622de8995SAndre Fischer (void)rxContext;
4722de8995SAndre Fischer }
4822de8995SAndre Fischer
4922de8995SAndre Fischer
5022de8995SAndre Fischer
5122de8995SAndre Fischer
~ContextChangeEventMultiplexer(void)5222de8995SAndre Fischer ContextChangeEventMultiplexer::~ContextChangeEventMultiplexer (void)
5322de8995SAndre Fischer {
54b9e67834SAndre Fischer }
55b9e67834SAndre Fischer
56b9e67834SAndre Fischer
57b9e67834SAndre Fischer
58b9e67834SAndre Fischer
disposing(void)59b9e67834SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::disposing (void)
60b9e67834SAndre Fischer {
61b9e67834SAndre Fischer ListenerMap aListeners;
62b9e67834SAndre Fischer aListeners.swap(maListeners);
63b9e67834SAndre Fischer
6495a18594SAndre Fischer cssu::Reference<cssu::XInterface> xThis (static_cast<XWeak*>(this));
6595a18594SAndre Fischer css::lang::EventObject aEvent (xThis);
66b9e67834SAndre Fischer for (ListenerMap::const_iterator iContainer(aListeners.begin()), iEnd(aListeners.end());
67b9e67834SAndre Fischer iContainer!=iEnd;
68b9e67834SAndre Fischer ++iContainer)
69b9e67834SAndre Fischer {
70*7a32b0c8SAndre Fischer // Unregister from the focus object.
71*7a32b0c8SAndre Fischer Reference<lang::XComponent> xComponent (iContainer->first, UNO_QUERY);
72*7a32b0c8SAndre Fischer if (xComponent.is())
73*7a32b0c8SAndre Fischer xComponent->removeEventListener(this);
74*7a32b0c8SAndre Fischer
75*7a32b0c8SAndre Fischer // Tell all listeners that we are being disposed.
76*7a32b0c8SAndre Fischer const FocusDescriptor& rFocusDescriptor (iContainer->second);
77b9e67834SAndre Fischer for (ListenerContainer::const_iterator
78*7a32b0c8SAndre Fischer iListener(rFocusDescriptor.maListeners.begin()),
79*7a32b0c8SAndre Fischer iContainerEnd(rFocusDescriptor.maListeners.end());
80b9e67834SAndre Fischer iListener!=iContainerEnd;
81b9e67834SAndre Fischer ++iListener)
82b9e67834SAndre Fischer {
83b9e67834SAndre Fischer (*iListener)->disposing(aEvent);
84b9e67834SAndre Fischer }
85b9e67834SAndre Fischer }
8622de8995SAndre Fischer }
8722de8995SAndre Fischer
8822de8995SAndre Fischer
8922de8995SAndre Fischer
9022de8995SAndre Fischer
9122de8995SAndre Fischer // XContextChangeEventMultiplexer
9222de8995SAndre Fischer
addContextChangeEventListener(const cssu::Reference<css::ui::XContextChangeEventListener> & rxListener,const cssu::Reference<cssu::XInterface> & rxEventFocus)9322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::addContextChangeEventListener (
9422de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
9522de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus)
9622de8995SAndre Fischer throw(cssu::RuntimeException,cssl::IllegalArgumentException)
9722de8995SAndre Fischer {
9822de8995SAndre Fischer if ( ! rxListener.is())
9922de8995SAndre Fischer throw css::lang::IllegalArgumentException(
10022de8995SAndre Fischer A2S("can not add an empty reference"),
10122de8995SAndre Fischer static_cast<XWeak*>(this),
10222de8995SAndre Fischer 0);
10322de8995SAndre Fischer
104*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true);
105*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL)
10622de8995SAndre Fischer {
107*7a32b0c8SAndre Fischer ListenerContainer& rContainer (pFocusDescriptor->maListeners);
10822de8995SAndre Fischer if (::std::find(rContainer.begin(), rContainer.end(), rxListener) == rContainer.end())
10922de8995SAndre Fischer rContainer.push_back(rxListener);
11022de8995SAndre Fischer else
11122de8995SAndre Fischer {
11222de8995SAndre Fischer // The listener was added for the same event focus
11322de8995SAndre Fischer // previously. That is an error.
11422de8995SAndre Fischer throw cssl::IllegalArgumentException(A2S("listener added twice"), static_cast<XWeak*>(this), 0);
11522de8995SAndre Fischer }
11622de8995SAndre Fischer }
11795a18594SAndre Fischer
11895a18594SAndre Fischer // Send out an initial event that informs the new listener about
11995a18594SAndre Fischer // the current context.
120*7a32b0c8SAndre Fischer if (rxEventFocus.is() && pFocusDescriptor!=NULL)
12195a18594SAndre Fischer {
12295a18594SAndre Fischer css::ui::ContextChangeEventObject aEvent (
12395a18594SAndre Fischer NULL,
124*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentApplicationName,
125*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentContextName);
12695a18594SAndre Fischer rxListener->notifyContextChangeEvent(aEvent);
12795a18594SAndre Fischer }
12822de8995SAndre Fischer }
12922de8995SAndre Fischer
13022de8995SAndre Fischer
13122de8995SAndre Fischer
13222de8995SAndre Fischer
removeContextChangeEventListener(const cssu::Reference<css::ui::XContextChangeEventListener> & rxListener,const cssu::Reference<cssu::XInterface> & rxEventFocus)13322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::removeContextChangeEventListener (
13422de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener,
13522de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus)
13622de8995SAndre Fischer throw(cssu::RuntimeException,cssl::IllegalArgumentException)
13722de8995SAndre Fischer {
13822de8995SAndre Fischer if ( ! rxListener.is())
13995a18594SAndre Fischer throw cssl::IllegalArgumentException(
14095a18594SAndre Fischer A2S("can not remove an empty reference"),
14195a18594SAndre Fischer static_cast<XWeak*>(this), 0);
14222de8995SAndre Fischer
143*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false);
144*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL)
14522de8995SAndre Fischer {
146*7a32b0c8SAndre Fischer ListenerContainer& rContainer (pFocusDescriptor->maListeners);
14795a18594SAndre Fischer const ListenerContainer::iterator iListener (
14895a18594SAndre Fischer ::std::find(rContainer.begin(), rContainer.end(), rxListener));
14922de8995SAndre Fischer if (iListener != rContainer.end())
150b9e67834SAndre Fischer {
15122de8995SAndre Fischer rContainer.erase(iListener);
152b9e67834SAndre Fischer
153*7a32b0c8SAndre Fischer // We hold on to the focus descriptor even when the last listener has been removed.
154*7a32b0c8SAndre Fischer // This allows us to keep track of the current context and send it to new listeners.
155b9e67834SAndre Fischer }
15622de8995SAndre Fischer }
15722de8995SAndre Fischer
15822de8995SAndre Fischer }
15922de8995SAndre Fischer
16022de8995SAndre Fischer
16122de8995SAndre Fischer
16222de8995SAndre Fischer
removeAllContextChangeEventListeners(const cssu::Reference<css::ui::XContextChangeEventListener> & rxListener)16322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::removeAllContextChangeEventListeners (
16422de8995SAndre Fischer const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener)
16522de8995SAndre Fischer throw(cssu::RuntimeException,cssl::IllegalArgumentException)
16622de8995SAndre Fischer {
16722de8995SAndre Fischer if ( ! rxListener.is())
16895a18594SAndre Fischer throw cssl::IllegalArgumentException(
16995a18594SAndre Fischer A2S("can not remove an empty reference"),
17095a18594SAndre Fischer static_cast<XWeak*>(this), 0);
17122de8995SAndre Fischer
17222de8995SAndre Fischer for (ListenerMap::iterator
17322de8995SAndre Fischer iContainer(maListeners.begin()),
17422de8995SAndre Fischer iEnd(maListeners.end());
17522de8995SAndre Fischer iContainer!=iEnd;
17622de8995SAndre Fischer ++iContainer)
17722de8995SAndre Fischer {
17895a18594SAndre Fischer const ListenerContainer::iterator iListener (
17995a18594SAndre Fischer ::std::find(iContainer->second.maListeners.begin(), iContainer->second.maListeners.end(), rxListener));
18095a18594SAndre Fischer if (iListener != iContainer->second.maListeners.end())
181b9e67834SAndre Fischer {
18295a18594SAndre Fischer iContainer->second.maListeners.erase(iListener);
183b9e67834SAndre Fischer
184*7a32b0c8SAndre Fischer // We hold on to the focus descriptor even when the last listener has been removed.
185*7a32b0c8SAndre Fischer // This allows us to keep track of the current context and send it to new listeners.
186b9e67834SAndre Fischer }
187b9e67834SAndre Fischer }
18822de8995SAndre Fischer }
18922de8995SAndre Fischer
19022de8995SAndre Fischer
19122de8995SAndre Fischer
19222de8995SAndre Fischer
broadcastContextChangeEvent(const css::ui::ContextChangeEventObject & rEventObject,const cssu::Reference<cssu::XInterface> & rxEventFocus)19322de8995SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::broadcastContextChangeEvent (
19422de8995SAndre Fischer const css::ui::ContextChangeEventObject& rEventObject,
19522de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus)
19622de8995SAndre Fischer throw(cssu::RuntimeException)
19722de8995SAndre Fischer {
19895a18594SAndre Fischer // Remember the current context.
19995a18594SAndre Fischer if (rxEventFocus.is())
20095a18594SAndre Fischer {
201*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, true);
202*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL)
20395a18594SAndre Fischer {
204*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentApplicationName = rEventObject.ApplicationName;
205*7a32b0c8SAndre Fischer pFocusDescriptor->msCurrentContextName = rEventObject.ContextName;
20695a18594SAndre Fischer }
20795a18594SAndre Fischer }
20895a18594SAndre Fischer
20922de8995SAndre Fischer BroadcastEventToSingleContainer(rEventObject, rxEventFocus);
21022de8995SAndre Fischer if (rxEventFocus.is())
21122de8995SAndre Fischer BroadcastEventToSingleContainer(rEventObject, NULL);
21222de8995SAndre Fischer }
21322de8995SAndre Fischer
21422de8995SAndre Fischer
21522de8995SAndre Fischer
21622de8995SAndre Fischer
BroadcastEventToSingleContainer(const css::ui::ContextChangeEventObject & rEventObject,const cssu::Reference<cssu::XInterface> & rxEventFocus)21722de8995SAndre Fischer void ContextChangeEventMultiplexer::BroadcastEventToSingleContainer (
21822de8995SAndre Fischer const css::ui::ContextChangeEventObject& rEventObject,
21922de8995SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus)
22022de8995SAndre Fischer {
221*7a32b0c8SAndre Fischer FocusDescriptor* pFocusDescriptor = GetFocusDescriptor(rxEventFocus, false);
222*7a32b0c8SAndre Fischer if (pFocusDescriptor != NULL)
22322de8995SAndre Fischer {
22422de8995SAndre Fischer // Create a copy of the listener container to avoid problems
22522de8995SAndre Fischer // when one of the called listeners calls add... or remove...
226*7a32b0c8SAndre Fischer ListenerContainer aContainer (pFocusDescriptor->maListeners);
22722de8995SAndre Fischer for (ListenerContainer::const_iterator
22822de8995SAndre Fischer iListener(aContainer.begin()),
22922de8995SAndre Fischer iEnd(aContainer.end());
23022de8995SAndre Fischer iListener!=iEnd;
23122de8995SAndre Fischer ++iListener)
23222de8995SAndre Fischer {
23322de8995SAndre Fischer (*iListener)->notifyContextChangeEvent(rEventObject);
23422de8995SAndre Fischer }
23522de8995SAndre Fischer }
23622de8995SAndre Fischer }
23722de8995SAndre Fischer
23822de8995SAndre Fischer
23922de8995SAndre Fischer
24022de8995SAndre Fischer
GetFocusDescriptor(const cssu::Reference<cssu::XInterface> & rxEventFocus,const bool bCreateWhenMissing)241*7a32b0c8SAndre Fischer ContextChangeEventMultiplexer::FocusDescriptor* ContextChangeEventMultiplexer::GetFocusDescriptor (
242*7a32b0c8SAndre Fischer const cssu::Reference<cssu::XInterface>& rxEventFocus,
243*7a32b0c8SAndre Fischer const bool bCreateWhenMissing)
244*7a32b0c8SAndre Fischer {
245*7a32b0c8SAndre Fischer ListenerMap::iterator iDescriptor (maListeners.find(rxEventFocus));
246*7a32b0c8SAndre Fischer if (iDescriptor == maListeners.end() && bCreateWhenMissing)
247*7a32b0c8SAndre Fischer {
248*7a32b0c8SAndre Fischer // Listen for the focus being disposed.
249*7a32b0c8SAndre Fischer Reference<lang::XComponent> xComponent (rxEventFocus, UNO_QUERY);
250*7a32b0c8SAndre Fischer if (xComponent.is())
251*7a32b0c8SAndre Fischer xComponent->addEventListener(this);
252*7a32b0c8SAndre Fischer
253*7a32b0c8SAndre Fischer // Create a new listener container for the event focus.
254*7a32b0c8SAndre Fischer iDescriptor = maListeners.insert(
255*7a32b0c8SAndre Fischer ListenerMap::value_type(
256*7a32b0c8SAndre Fischer rxEventFocus,
257*7a32b0c8SAndre Fischer FocusDescriptor())).first;
258*7a32b0c8SAndre Fischer }
259*7a32b0c8SAndre Fischer if (iDescriptor != maListeners.end())
260*7a32b0c8SAndre Fischer return &iDescriptor->second;
261*7a32b0c8SAndre Fischer else
262*7a32b0c8SAndre Fischer return NULL;
263*7a32b0c8SAndre Fischer }
264*7a32b0c8SAndre Fischer
265*7a32b0c8SAndre Fischer
266*7a32b0c8SAndre Fischer
267*7a32b0c8SAndre Fischer
26822de8995SAndre Fischer // XSingleComponentFactory
26922de8995SAndre Fischer
createInstanceWithContext(const cssu::Reference<cssu::XComponentContext> & rxContext)27022de8995SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::createInstanceWithContext (
27122de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext)
27222de8995SAndre Fischer throw (cssu::Exception, cssu::RuntimeException)
27322de8995SAndre Fischer {
27422de8995SAndre Fischer (void)rxContext;
27522de8995SAndre Fischer return cssu::Reference<cssu::XInterface>();
27622de8995SAndre Fischer }
27722de8995SAndre Fischer
27822de8995SAndre Fischer
27922de8995SAndre Fischer
28022de8995SAndre Fischer
createInstanceWithArgumentsAndContext(const cssu::Sequence<cssu::Any> & rArguments,const cssu::Reference<cssu::XComponentContext> & rxContext)28122de8995SAndre Fischer cssu::Reference<cssu::XInterface > SAL_CALL ContextChangeEventMultiplexer::createInstanceWithArgumentsAndContext (
28222de8995SAndre Fischer const cssu::Sequence<cssu::Any>& rArguments,
28322de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxContext)
28422de8995SAndre Fischer throw (cssu::Exception, cssu::RuntimeException)
28522de8995SAndre Fischer {
28622de8995SAndre Fischer (void)rArguments;
28722de8995SAndre Fischer (void)rxContext;
28822de8995SAndre Fischer return cssu::Reference<cssu::XInterface>();
28922de8995SAndre Fischer }
29022de8995SAndre Fischer
29122de8995SAndre Fischer
29222de8995SAndre Fischer
29322de8995SAndre Fischer
29422de8995SAndre Fischer // XServiceInfo
29522de8995SAndre Fischer
getImplementationName(void)29622de8995SAndre Fischer ::rtl::OUString SAL_CALL ContextChangeEventMultiplexer::getImplementationName (void)
29722de8995SAndre Fischer throw(cssu::RuntimeException)
29822de8995SAndre Fischer {
29922de8995SAndre Fischer return impl_getStaticImplementationName();
30022de8995SAndre Fischer }
30122de8995SAndre Fischer
30222de8995SAndre Fischer
30322de8995SAndre Fischer
30422de8995SAndre Fischer
30522de8995SAndre Fischer
supportsService(const::rtl::OUString & rsServiceName)30622de8995SAndre Fischer sal_Bool SAL_CALL ContextChangeEventMultiplexer::supportsService (
30722de8995SAndre Fischer const ::rtl::OUString& rsServiceName)
30822de8995SAndre Fischer throw (cssu::RuntimeException)
30922de8995SAndre Fischer {
31022de8995SAndre Fischer return ::comphelper::findValue(static_GetSupportedServiceNames(), rsServiceName, sal_True).getLength() != 0;
31122de8995SAndre Fischer }
31222de8995SAndre Fischer
31322de8995SAndre Fischer
31422de8995SAndre Fischer
31522de8995SAndre Fischer
getSupportedServiceNames(void)31622de8995SAndre Fischer cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::getSupportedServiceNames (void)
31722de8995SAndre Fischer throw (cssu::RuntimeException)
31822de8995SAndre Fischer {
31922de8995SAndre Fischer return static_GetSupportedServiceNames();
32022de8995SAndre Fischer }
32122de8995SAndre Fischer
32222de8995SAndre Fischer
32322de8995SAndre Fischer
32422de8995SAndre Fischer
disposing(const css::lang::EventObject & rEvent)325*7a32b0c8SAndre Fischer void SAL_CALL ContextChangeEventMultiplexer::disposing (
326*7a32b0c8SAndre Fischer const css::lang::EventObject& rEvent)
327*7a32b0c8SAndre Fischer throw (cssu::RuntimeException)
328*7a32b0c8SAndre Fischer {
329*7a32b0c8SAndre Fischer ListenerMap::iterator iDescriptor (maListeners.find(rEvent.Source));
330*7a32b0c8SAndre Fischer
331*7a32b0c8SAndre Fischer if (iDescriptor == maListeners.end())
332*7a32b0c8SAndre Fischer {
333*7a32b0c8SAndre Fischer OSL_ASSERT(iDescriptor != maListeners.end());
334*7a32b0c8SAndre Fischer return;
335*7a32b0c8SAndre Fischer }
336*7a32b0c8SAndre Fischer
337*7a32b0c8SAndre Fischer // Should we notify the remaining listeners?
338*7a32b0c8SAndre Fischer
339*7a32b0c8SAndre Fischer maListeners.erase(iDescriptor);
340*7a32b0c8SAndre Fischer }
341*7a32b0c8SAndre Fischer
342*7a32b0c8SAndre Fischer
343*7a32b0c8SAndre Fischer
344*7a32b0c8SAndre Fischer
34522de8995SAndre Fischer // Local and static methods.
34622de8995SAndre Fischer
impl_getStaticImplementationName(void)34722de8995SAndre Fischer OUString SAL_CALL ContextChangeEventMultiplexer::impl_getStaticImplementationName (void)
34822de8995SAndre Fischer {
34922de8995SAndre Fischer return A2S(IMPLEMENTATION_NAME);
35022de8995SAndre Fischer }
35122de8995SAndre Fischer
35222de8995SAndre Fischer
35322de8995SAndre Fischer
35422de8995SAndre Fischer
static_GetSupportedServiceNames(void)35522de8995SAndre Fischer cssu::Sequence<OUString> SAL_CALL ContextChangeEventMultiplexer::static_GetSupportedServiceNames (void)
35622de8995SAndre Fischer {
35722de8995SAndre Fischer cssu::Sequence<OUString> aServiceNames (2);
35822de8995SAndre Fischer aServiceNames[0] = A2S(SERVICE_NAME);
35922de8995SAndre Fischer aServiceNames[1] = A2S(SINGLETON_NAME);
36022de8995SAndre Fischer return aServiceNames;
36122de8995SAndre Fischer }
36222de8995SAndre Fischer
36322de8995SAndre Fischer
36422de8995SAndre Fischer
36522de8995SAndre Fischer
impl_createFactory(const cssu::Reference<cssl::XMultiServiceFactory> & rxServiceManager)36622de8995SAndre Fischer cssu::Reference<cssu::XInterface> ContextChangeEventMultiplexer::impl_createFactory (
36722de8995SAndre Fischer const cssu::Reference<cssl::XMultiServiceFactory>& rxServiceManager)
36822de8995SAndre Fischer {
36922de8995SAndre Fischer (void)rxServiceManager;
37022de8995SAndre Fischer return cppu::createSingleComponentFactory(
37122de8995SAndre Fischer ContextChangeEventMultiplexer::static_CreateInstance,
37222de8995SAndre Fischer ContextChangeEventMultiplexer::impl_getStaticImplementationName(),
37322de8995SAndre Fischer ContextChangeEventMultiplexer::static_GetSupportedServiceNames()
37422de8995SAndre Fischer );
37522de8995SAndre Fischer }
37622de8995SAndre Fischer
37722de8995SAndre Fischer
37822de8995SAndre Fischer
37922de8995SAndre Fischer
static_CreateInstance(const cssu::Reference<cssu::XComponentContext> & rxComponentContext)38022de8995SAndre Fischer cssu::Reference<cssu::XInterface> SAL_CALL ContextChangeEventMultiplexer::static_CreateInstance (
38122de8995SAndre Fischer const cssu::Reference<cssu::XComponentContext>& rxComponentContext)
38222de8995SAndre Fischer throw (cssu::Exception)
38322de8995SAndre Fischer {
38422de8995SAndre Fischer ContextChangeEventMultiplexer* pObject = new ContextChangeEventMultiplexer(rxComponentContext);
38522de8995SAndre Fischer cssu::Reference<cssu::XInterface> xService (static_cast<XWeak*>(pObject), cssu::UNO_QUERY);
38622de8995SAndre Fischer return xService;
38722de8995SAndre Fischer }
38822de8995SAndre Fischer
38922de8995SAndre Fischer } // end of namespace framework
390