diff options
author | Oliver-Rainer Wittmann <orw@apache.org> | 2013-04-10 08:20:16 +0000 |
---|---|---|
committer | Michael Meeks <michael.meeks@suse.com> | 2013-05-20 11:33:10 +0100 |
commit | d02f75a8c36705924ddd6a5921fe3012fafce812 (patch) | |
tree | 40da9f25714a77f5e9e17ef7bee81c33a1a11b4b /framework | |
parent | d8d55787b81cdc955b73c8befa4ab608f46e32aa (diff) |
Resolves: #i121420# merge sidebar feature
(cherry picked from commit 0a0a9b32aa5bf1ce2554ad37cbba3c7a105db2b5)
Conflicts:
chart2/source/controller/dialogs/dlg_View3D.cxx
chart2/source/controller/dialogs/tp_3D_SceneIllumination.cxx
chart2/source/controller/dialogs/tp_3D_SceneIllumination.hxx
chart2/source/controller/drawinglayer/ViewElementListProvider.cxx
chart2/source/controller/inc/ViewElementListProvider.hxx
chart2/source/controller/inc/dlg_View3D.hxx
chart2/source/controller/main/ShapeController.cxx
chart2/source/inc/chartview/DrawModelWrapper.hxx
chart2/source/view/main/DrawModelWrapper.cxx
cui/source/inc/border.hxx
cui/source/inc/cuitabarea.hxx
cui/source/inc/cuitabline.hxx
cui/source/inc/sdrcelldlg.hxx
cui/source/inc/treeopt.hxx
cui/source/options/optchart.cxx
cui/source/options/optchart.hxx
cui/source/options/optcolor.cxx
cui/source/options/treeopt.cxx
cui/source/tabpages/backgrnd.cxx
cui/source/tabpages/border.cxx
cui/source/tabpages/chardlg.cxx
cui/source/tabpages/numpages.cxx
cui/source/tabpages/tpcolor.cxx
cui/source/tabpages/tplneend.cxx
editeng/inc/editeng/outliner.hxx
extensions/source/propctrlr/standardcontrol.cxx
framework/source/register/registerservices.cxx
offapi/com/sun/star/ui/makefile.mk
officecfg/registry/data/org/openoffice/Office/UI/GenericCommands.xcu
officecfg/registry/data/org/openoffice/Office/UI/makefile.mk
officecfg/registry/schema/org/openoffice/Office/UI/makefile.mk
postprocess/packregistry/makefile.mk
reportdesign/source/ui/dlg/Condition.cxx
reportdesign/source/ui/misc/UITools.cxx
sc/inc/document.hxx
sc/inc/helpids.h
sc/inc/sc.hrc
sc/prj/build.lst
sc/sdi/scalc.sdi
sc/source/core/data/documen9.cxx
sc/source/core/data/drwlayer.cxx
sc/source/ui/app/scdll.cxx
sc/source/ui/app/typemap.cxx
sc/source/ui/dbgui/scendlg.cxx
sc/source/ui/docshell/docsh2.cxx
sc/source/ui/docshell/docsh4.cxx
sc/source/ui/drawfunc/chartsh.cxx
sc/source/ui/drawfunc/drawsh.cxx
sc/source/ui/drawfunc/drawsh2.cxx
sc/source/ui/drawfunc/drawsh4.cxx
sc/source/ui/drawfunc/drformsh.cxx
sc/source/ui/drawfunc/drtxtob.cxx
sc/source/ui/drawfunc/drtxtob1.cxx
sc/source/ui/drawfunc/drtxtob2.cxx
sc/source/ui/drawfunc/graphsh.cxx
sc/source/ui/drawfunc/oleobjsh.cxx
sc/source/ui/inc/chartsh.hxx
sc/source/ui/inc/formatsh.hxx
sc/source/ui/miscdlgs/tabbgcolordlg.cxx
sc/source/ui/navipi/navipi.cxx
sc/source/ui/optdlg/opredlin.cxx
sc/source/ui/optdlg/tpview.cxx
sc/source/ui/sidebar/makefile.mk
sc/source/ui/view/auditsh.cxx
sc/source/ui/view/cellsh.cxx
sc/source/ui/view/editsh.cxx
sc/source/ui/view/formatsh.cxx
sc/source/ui/view/pivotsh.cxx
sc/source/ui/view/tabvwsh.cxx
sc/util/makefile.mk
sd/inc/sdabstdlg.hxx
sd/prj/build.lst
sd/sdi/ToolPanelViewShell.sdi
sd/sdi/makefile.mk
sd/source/ui/accessibility/makefile.mk
sd/source/ui/animations/CustomAnimationDialog.cxx
sd/source/ui/dlg/PaneChildWindows.cxx
sd/source/ui/dlg/PaneShells.cxx
sd/source/ui/dlg/copydlg.cxx
sd/source/ui/dlg/navigatr.cxx
sd/source/ui/dlg/sddlgfact.cxx
sd/source/ui/dlg/sddlgfact.hxx
sd/source/ui/docshell/docshel3.cxx
sd/source/ui/framework/configuration/ConfigurationControllerResourceManager.cxx
sd/source/ui/framework/factories/TaskPanelFactory.cxx
sd/source/ui/framework/factories/TaskPanelFactory.hxx
sd/source/ui/framework/factories/ViewShellWrapper.cxx
sd/source/ui/framework/factories/makefile.mk
sd/source/ui/framework/module/ImpressModule.cxx
sd/source/ui/framework/module/ToolPanelModule.cxx
sd/source/ui/framework/tools/FrameworkHelper.cxx
sd/source/ui/func/fuolbull.cxx
sd/source/ui/inc/DrawViewShell.hxx
sd/source/ui/inc/PaneChildWindows.hxx
sd/source/ui/inc/celltempl.hxx
sd/source/ui/inc/copydlg.hxx
sd/source/ui/inc/dlgpage.hxx
sd/source/ui/inc/framework/FrameworkHelper.hxx
sd/source/ui/inc/prltempl.hxx
sd/source/ui/inc/tabtempl.hxx
sd/source/ui/inc/taskpane/ILayoutableWindow.hxx
sd/source/ui/inc/taskpane/PanelId.hxx
sd/source/ui/inc/tpaction.hxx
sd/source/ui/sidebar/AllMasterPagesSelector.cxx
sd/source/ui/sidebar/AllMasterPagesSelector.hxx
sd/source/ui/sidebar/CurrentMasterPagesSelector.cxx
sd/source/ui/sidebar/CurrentMasterPagesSelector.hxx
sd/source/ui/sidebar/DocumentHelper.cxx
sd/source/ui/sidebar/DocumentHelper.hxx
sd/source/ui/sidebar/LayoutMenu.cxx
sd/source/ui/sidebar/LayoutMenu.hxx
sd/source/ui/sidebar/MasterPageContainer.cxx
sd/source/ui/sidebar/MasterPageContainer.hxx
sd/source/ui/sidebar/MasterPageContainerFiller.cxx
sd/source/ui/sidebar/MasterPageContainerFiller.hxx
sd/source/ui/sidebar/MasterPageContainerProviders.cxx
sd/source/ui/sidebar/MasterPageContainerProviders.hxx
sd/source/ui/sidebar/MasterPageContainerQueue.cxx
sd/source/ui/sidebar/MasterPageContainerQueue.hxx
sd/source/ui/sidebar/MasterPageDescriptor.cxx
sd/source/ui/sidebar/MasterPageDescriptor.hxx
sd/source/ui/sidebar/MasterPageObserver.cxx
sd/source/ui/sidebar/MasterPagesSelector.cxx
sd/source/ui/sidebar/MasterPagesSelector.hxx
sd/source/ui/sidebar/PreviewValueSet.cxx
sd/source/ui/sidebar/PreviewValueSet.hxx
sd/source/ui/sidebar/RecentMasterPagesSelector.cxx
sd/source/ui/sidebar/RecentlyUsedMasterPages.cxx
sd/source/ui/sidebar/SidebarShellManager.cxx
sd/source/ui/sidebar/SlideTransitionPanel.hxx
sd/source/ui/sidebar/makefile.mk
sd/source/ui/slidesorter/shell/SlideSorterViewShell.cxx
sd/source/ui/table/TableDesignPane.hxx
sd/source/ui/toolpanel/ControlContainer.cxx
sd/source/ui/toolpanel/ControlContainerDescriptor.hxx
sd/source/ui/toolpanel/MethodGuard.hxx
sd/source/ui/toolpanel/ScrollPanel.cxx
sd/source/ui/toolpanel/SlideSorterCacheDisplay.cxx
sd/source/ui/toolpanel/SubToolPanel.cxx
sd/source/ui/toolpanel/TaskPaneFocusManager.cxx
sd/source/ui/toolpanel/TaskPaneTreeNode.cxx
sd/source/ui/toolpanel/TitleBar.cxx
sd/source/ui/toolpanel/TitledControl.cxx
sd/source/ui/toolpanel/ToolPanel.cxx
sd/source/ui/toolpanel/ToolPanel.hxx
sd/source/ui/toolpanel/ToolPanelFactory.cxx
sd/source/ui/toolpanel/ToolPanelUIElement.cxx
sd/source/ui/toolpanel/ToolPanelUIElement.hxx
sd/source/ui/toolpanel/ToolPanelViewShell.cxx
sd/source/ui/toolpanel/controls/CustomAnimationPanel.cxx
sd/source/ui/toolpanel/controls/CustomAnimationPanel.hxx
sd/source/ui/toolpanel/controls/MasterPagesPanel.cxx
sd/source/ui/toolpanel/controls/MasterPagesPanel.hxx
sd/source/ui/toolpanel/controls/SlideTransitionPanel.cxx
sd/source/ui/toolpanel/controls/SlideTransitionPanel.hxx
sd/source/ui/toolpanel/controls/TableDesignPanel.cxx
sd/source/ui/toolpanel/controls/TableDesignPanel.hxx
sd/source/ui/unoidl/UnoDocumentSettings.cxx
sd/source/ui/view/ViewShellBase.cxx
sd/source/ui/view/drtxtob.cxx
sd/source/ui/view/drviews3.cxx
sd/source/ui/view/drviews7.cxx
sd/source/ui/view/drviewsa.cxx
sd/source/ui/view/drviewsf.cxx
sd/source/ui/view/outlnvsh.cxx
sd/source/ui/view/sdview.cxx
sd/source/ui/view/viewshel.cxx
sd/uiconfig/sdraw/menubar/menubar.xml
sd/util/makefile.mk
sfx2/Package_inc.mk
sfx2/inc/sfx2/sfx.hrc
sfx2/inc/sfx2/sfxsids.hrc
sfx2/source/control/bindings.cxx
sfx2/source/dialog/templdlg.cxx
sfx2/source/inc/templdgi.hxx
svx/AllLangResTarget_svx.mk
svx/Package_inc.mk
svx/inc/svx/XPropertyTable.hxx
svx/inc/svx/bmpmask.hxx
svx/inc/svx/colrctrl.hxx
svx/inc/svx/dialogs.hrc
svx/inc/svx/dlgctrl.hxx
svx/inc/svx/dlgutil.hxx
svx/inc/svx/drawitem.hxx
svx/inc/svx/fontwork.hxx
svx/inc/svx/galbrws.hxx
svx/inc/svx/sdr/table/tablecontroller.hxx
svx/inc/svx/svdmodel.hxx
svx/inc/svx/svdstr.hrc
svx/inc/svx/svxids.hrc
svx/inc/svx/svxitems.hrc
svx/inc/svx/xattr.hxx
svx/inc/svx/xflgrit.hxx
svx/inc/svx/xflhtit.hxx
svx/inc/svx/xit.hxx
svx/inc/svx/xlineit.hxx
svx/inc/svx/xlndsit.hxx
svx/inc/svx/xlnedit.hxx
svx/inc/svx/xlnstit.hxx
svx/inc/svx/xtable.hxx
svx/sdi/svx.sdi
svx/source/dialog/_bmpmask.cxx
svx/source/dialog/dialcontrol.cxx
svx/source/dialog/dlgctrl.cxx
svx/source/dialog/dlgutil.cxx
svx/source/dialog/fontwork.cxx
svx/source/gallery2/galbrws.cxx
svx/source/gallery2/galbrws1.cxx
svx/source/gallery2/gallery1.cxx
svx/source/items/drawitem.cxx
svx/source/items/svxitems.src
svx/source/sdr/attribute/sdrformtextattribute.cxx
svx/source/sidebar/ColorPanel.hxx
svx/source/sidebar/EmptyPanel.hrc
svx/source/sidebar/EmptyPanel.hxx
svx/source/sidebar/gallery/GalleryPanel.hxx
svx/source/svdraw/svdedtv1.cxx
svx/source/svdraw/svdmodel.cxx
svx/source/svdraw/svdogrp.cxx
svx/source/svdraw/svdstr.src
svx/source/tbxctrls/tbcontrl.cxx
svx/source/unodraw/XPropertyTable.cxx
svx/source/unodraw/unoctabl.cxx
svx/source/xoutdev/XPropertyEntry.cxx
svx/source/xoutdev/xattr.cxx
svx/source/xoutdev/xattr2.cxx
svx/source/xoutdev/xtabbtmp.cxx
svx/source/xoutdev/xtabcolr.cxx
svx/source/xoutdev/xtabdash.cxx
svx/source/xoutdev/xtabgrdt.cxx
svx/source/xoutdev/xtabhtch.cxx
svx/source/xoutdev/xtable.cxx
svx/source/xoutdev/xtablend.cxx
svx/util/svx.component
sw/inc/cmdid.h
sw/inc/docsh.hxx
sw/inc/editsh.hxx
sw/inc/helpid.h
sw/inc/rcid.hrc
sw/inc/swabstdlg.hxx
sw/inc/swcommands.h
sw/sdi/swriter.sdi
sw/source/core/doc/docdesc.cxx
sw/source/core/draw/drawdoc.cxx
sw/source/ui/app/docsh2.cxx
sw/source/ui/app/docshdrw.cxx
sw/source/ui/app/docshini.cxx
sw/source/ui/app/docst.cxx
sw/source/ui/config/optpage.cxx
sw/source/ui/dialog/swdlgfact.cxx
sw/source/ui/dialog/swdlgfact.hxx
sw/source/ui/fmtui/tmpdlg.cxx
sw/source/ui/inc/tmpdlg.hxx
sw/source/ui/misc/pggrid.cxx
sw/source/ui/shells/annotsh.cxx
sw/source/ui/shells/basesh.cxx
sw/source/ui/shells/beziersh.cxx
sw/source/ui/shells/drawdlg.cxx
sw/source/ui/shells/drawsh.cxx
sw/source/ui/shells/drformsh.cxx
sw/source/ui/shells/drwbassh.cxx
sw/source/ui/shells/drwtxtex.cxx
sw/source/ui/shells/drwtxtsh.cxx
sw/source/ui/shells/frmsh.cxx
sw/source/ui/shells/grfsh.cxx
sw/source/ui/shells/olesh.cxx
sw/source/ui/shells/tabsh.cxx
sw/source/ui/shells/textsh.cxx
sw/source/ui/shells/textsh1.cxx
sw/source/ui/shells/txtnum.cxx
sw/source/ui/uiview/viewtab.cxx
sw/source/ui/uno/unofreg.cxx
sw/source/ui/utlui/navipi.cxx
sw/util/sw.component
vcl/inc/vcl/split.hxx
vcl/inc/vcl/window.hxx
vcl/inc/window.h
vcl/source/window/split.cxx
vcl/source/window/window.cxx
vcl/source/window/window4.cxx
Change-Id: Idebaff59f9d60e4e93290cefefdda4c5a1e9215e
Resolves: #i122194# Adapted license text in propertypanel.hrc
then renamed it to ResourceDefinitions.hrc
(cherry picked from commit e952d1401c1adc41934118ba7f542611ef9da11b)
Conflicts:
sfx2/Package_inc.mk
sfx2/source/sidebar/SidebarChildWindow.cxx
svx/source/sidebar/graphic/GraphicPropertyPanel.cxx
svx/source/sidebar/line/LinePropertyPanel.cxx
svx/source/sidebar/possize/PosSizePropertyPanel.cxx
sw/source/ui/sidebar/PagePropertyPanel.src
sw/source/ui/sidebar/WrapPropertyPanel.src
Change-Id: Ie009056a78ab108556717a501399c83b477b3548
Resolves: #i122194# finally I got the correct file name
Change-Id: If7a075af8c9a829f6f0a69f883c5c6d4ac97ba2a
More merge changes for optional sidebar:
revert toolpanel removal, restore and re-enable task pane
remove apparently un-used SidebarFactory module
add extra visibility annotation to ItemReceiverUpdate
Diffstat (limited to 'framework')
-rw-r--r-- | framework/Library_fwk.mk | 1 | ||||
-rw-r--r-- | framework/inc/macros/registration.hxx | 2 | ||||
-rw-r--r-- | framework/inc/services/ContextChangeEventMultiplexer.hxx | 138 | ||||
-rw-r--r-- | framework/inc/services/EventMultiplexer.hxx | 116 | ||||
-rw-r--r-- | framework/source/register/registerservices.cxx | 5 | ||||
-rw-r--r-- | framework/source/services/ContextChangeEventMultiplexer.cxx | 383 | ||||
-rw-r--r-- | framework/source/services/EventMultiplexer.cxx | 266 | ||||
-rw-r--r-- | framework/util/fwk.component | 4 |
8 files changed, 912 insertions, 3 deletions
diff --git a/framework/Library_fwk.mk b/framework/Library_fwk.mk index f534aab81979..d1818146dfd9 100644 --- a/framework/Library_fwk.mk +++ b/framework/Library_fwk.mk @@ -108,6 +108,7 @@ $(eval $(call gb_Library_add_exception_objects,fwk,\ framework/source/services/backingcomp \ framework/source/services/backingwindow \ framework/source/services/desktop \ + framework/source/services/ContextChangeEventMultiplexer \ framework/source/services/frame \ framework/source/services/modulemanager \ framework/source/services/pathsettings \ diff --git a/framework/inc/macros/registration.hxx b/framework/inc/macros/registration.hxx index bfdc18c8db13..f5c102a50770 100644 --- a/framework/inc/macros/registration.hxx +++ b/framework/inc/macros/registration.hxx @@ -71,7 +71,7 @@ ________________________________________________________________________________ { \ LOG_REGISTRATION_GETFACTORY( "\t\tpImplementationName and pServiceManager are valid ...\n" ) \ /* Define variables which are used in following macros. */ \ - ::com::sun::star::uno::Reference< ::com::sun::star::lang::XSingleServiceFactory > xFactory ; \ + ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > xFactory ; \ ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xServiceManager ; \ xServiceManager = reinterpret_cast< ::com::sun::star::lang::XMultiServiceFactory* >( pServiceManager ) ; \ /* These parameter will expand to */ \ diff --git a/framework/inc/services/ContextChangeEventMultiplexer.hxx b/framework/inc/services/ContextChangeEventMultiplexer.hxx new file mode 100644 index 000000000000..3a7bd956b7fc --- /dev/null +++ b/framework/inc/services/ContextChangeEventMultiplexer.hxx @@ -0,0 +1,138 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef __FRAMEWORK_SERVICES_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ +#define __FRAMEWORK_SERVICES_CONTEXT_CHANGE_EVENT_MULTIPLEXER_HXX_ + +#include <com/sun/star/ui/XContextChangeEventMultiplexer.hpp> + +#include <cppuhelper/compbase4.hxx> +#include <cppuhelper/basemutex.hxx> + +#include "macros/xserviceinfo.hxx" + +#include <map> +#include <boost/noncopyable.hpp> + + +namespace +{ + typedef ::cppu::WeakComponentImplHelper4 < + css::ui::XContextChangeEventMultiplexer, + css::lang::XSingleComponentFactory, + css::lang::XServiceInfo, + css::lang::XEventListener + > ContextChangeEventMultiplexerInterfaceBase; +} + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; +namespace cssl = ::com::sun::star::lang; + +namespace framework { + +class ContextChangeEventMultiplexer + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public ContextChangeEventMultiplexerInterfaceBase +{ +public: + ContextChangeEventMultiplexer(const cssu::Reference<css::uno::XComponentContext>& rxContext); + virtual ~ContextChangeEventMultiplexer (void); + + virtual void SAL_CALL disposing (void); + + // XContextChangeEventMultiplexer + virtual void SAL_CALL addContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeContextChangeEventListener ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeAllContextChangeEventListeners ( + const cssu::Reference<css::ui::XContextChangeEventListener>& rxListener) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL broadcastContextChangeEvent ( + const css::ui::ContextChangeEventObject& rContextChangeEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException); + + // XSingleComponentFactory + virtual cssu::Reference<cssu::XInterface> SAL_CALL createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + virtual cssu::Reference<cssu::XInterface > SAL_CALL createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName (void) + throw (cssu::RuntimeException); + virtual sal_Bool SAL_CALL supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException); + virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) + throw (cssu::RuntimeException); + + // XEventListener + virtual void SAL_CALL disposing ( + const css::lang::EventObject& rEvent) + throw (cssu::RuntimeException); + + static ::rtl::OUString SAL_CALL impl_getStaticImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& xServiceManager); + +private: + typedef ::std::vector<cssu::Reference<css::ui::XContextChangeEventListener> > ListenerContainer; + class FocusDescriptor + { + public: + ListenerContainer maListeners; + ::rtl::OUString msCurrentApplicationName; + ::rtl::OUString msCurrentContextName; + }; + typedef ::std::map<cssu::Reference<cssu::XInterface>, FocusDescriptor> ListenerMap; + ListenerMap maListeners; + + /** Notify all listeners in the container that is associated with + the given event focus. + + Typically called twice from broadcastEvent(), once for the + given event focus and onece for NULL. + */ + void BroadcastEventToSingleContainer ( + const css::ui::ContextChangeEventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus); + FocusDescriptor* GetFocusDescriptor ( + const cssu::Reference<cssu::XInterface>& rxEventFocus, + const bool bCreateWhenMissing); + + static cssu::Sequence< ::rtl::OUString > SAL_CALL static_GetSupportedServiceNames (void); + static cssu::Reference<cssu::XInterface> SAL_CALL static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception); +}; + +} // end of namespace framework + +#endif + diff --git a/framework/inc/services/EventMultiplexer.hxx b/framework/inc/services/EventMultiplexer.hxx new file mode 100644 index 000000000000..6e0881c08921 --- /dev/null +++ b/framework/inc/services/EventMultiplexer.hxx @@ -0,0 +1,116 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#ifndef __FRAMEWORK_SERVICES_EVENT_MULTIPLEXER_HXX_ +#define __FRAMEWORK_SERVICES_EVENT_MULTIPLEXER_HXX_ + +#include <com/sun/star/util/XEventMultiplexer.hpp> + +#include <cppuhelper/compbase3.hxx> +#include <cppuhelper/basemutex.hxx> + +#include "macros/xserviceinfo.hxx" + +namespace +{ + typedef ::cppu::WeakComponentImplHelper3 < + css::util::XEventMultiplexer, + css::lang::XSingleComponentFactory, + css::lang::XServiceInfo + > EventMultiplexerInterfaceBase; +} + + +namespace css = ::com::sun::star; +namespace cssu = ::com::sun::star::uno; +namespace cssl = ::com::sun::star::lang; + +namespace framework { + +class EventMultiplexer + : private ::boost::noncopyable, + private ::cppu::BaseMutex, + public EventMultiplexerInterfaceBase +{ +public: + EventMultiplexer(const cssu::Reference<css::uno::XComponentContext>& rxContext); + virtual ~EventMultiplexer (void); + + // XEventMultiplexer + virtual void SAL_CALL addEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeEventListener ( + const cssu::Reference<css::util::XEventListener>& rxListener, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL removeAllEventListeners ( + const cssu::Reference<css::util::XEventListener>& rxListener) + throw(cssu::RuntimeException, cssl::IllegalArgumentException); + virtual void SAL_CALL broadcastEvent ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus) + throw(cssu::RuntimeException); + + // XSingleComponentFactory + virtual cssu::Reference<cssu::XInterface> SAL_CALL createInstanceWithContext ( + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + virtual cssu::Reference<cssu::XInterface > SAL_CALL createInstanceWithArgumentsAndContext ( + const cssu::Sequence<cssu::Any>& rArguments, + const cssu::Reference<cssu::XComponentContext>& rxContext) + throw (cssu::Exception, cssu::RuntimeException); + + // XServiceInfo + virtual ::rtl::OUString SAL_CALL getImplementationName (void) + throw (cssu::RuntimeException); + virtual sal_Bool SAL_CALL supportsService ( + const ::rtl::OUString& rsServiceName) + throw (cssu::RuntimeException); + virtual cssu::Sequence< ::rtl::OUString> SAL_CALL getSupportedServiceNames (void) + throw (cssu::RuntimeException); + + static ::rtl::OUString SAL_CALL impl_getStaticImplementationName (void); + static cssu::Reference<cssu::XInterface> SAL_CALL impl_createFactory ( + const cssu::Reference<cssl::XMultiServiceFactory>& xServiceManager); + +private: + typedef ::std::vector<cssu::Reference<css::util::XEventListener> > ListenerContainer; + typedef ::std::map<cssu::Reference<cssu::XInterface>, ListenerContainer> ListenerMap; + ListenerMap maListeners; + + /** Notify all listeners in the container that is associated with + the given event focus. + + Typically called twice from broadcastEvent(), once for the + given event focus and onece for NULL. + */ + void BroadcastEventToSingleContainer ( + const cssl::EventObject& rEventObject, + const cssu::Reference<cssu::XInterface>& rxEventFocus); + + static cssu::Sequence< ::rtl::OUString > SAL_CALL static_GetSupportedServiceNames (void); + static cssu::Reference<cssu::XInterface> SAL_CALL static_CreateInstance ( + const cssu::Reference<cssu::XComponentContext>& rxComponentContext) + throw (cssu::Exception); +}; + +} // end of namespace framework + +#endif + diff --git a/framework/source/register/registerservices.cxx b/framework/source/register/registerservices.cxx index f8fd6c2320cc..33ce118cec5e 100644 --- a/framework/source/register/registerservices.cxx +++ b/framework/source/register/registerservices.cxx @@ -66,12 +66,12 @@ #include <uiconfiguration/uicategorydescription.hxx> #include <services/sessionlistener.hxx> #include <services/taskcreatorsrv.hxx> - #include <uielement/langselectionstatusbarcontroller.hxx> #include <uiconfiguration/imagemanager.hxx> #include <uifactory/windowcontentfactorymanager.hxx> #include <services/substitutepathvars.hxx> #include <services/pathsettings.hxx> +#include <services/ContextChangeEventMultiplexer.hxx> COMPONENTGETFACTORY ( fwk, IFFACTORY( ::framework::URLTransformer ) else @@ -112,7 +112,8 @@ COMPONENTGETFACTORY ( fwk, IFFACTORY( ::framework::WindowContentFactoryManager ) else IFFACTORY( ::framework::TabWindowService ) else IFFACTORY( ::framework::SubstitutePathVariables ) else - IFFACTORY( ::framework::PathSettings ) + IFFACTORY( ::framework::PathSettings ) else + IFFACTORY( ::framework::ContextChangeEventMultiplexer ) ) /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/framework/source/services/ContextChangeEventMultiplexer.cxx b/framework/source/services/ContextChangeEventMultiplexer.cxx new file mode 100644 index 000000000000..d4f30a40973f --- /dev/null +++ b/framework/source/services/ContextChangeEventMultiplexer.cxx @@ -0,0 +1,383 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#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..952a29d66f68 --- /dev/null +++ b/framework/source/services/EventMultiplexer.cxx @@ -0,0 +1,266 @@ +/* + * This file is part of the LibreOffice project. + * + * This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. + * + * This file incorporates work covered by the following license notice: + * + * 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 . + */ +#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 diff --git a/framework/util/fwk.component b/framework/util/fwk.component index efb700a992e1..9d604c51db9d 100644 --- a/framework/util/fwk.component +++ b/framework/util/fwk.component @@ -40,6 +40,10 @@ <implementation name="com.sun.star.comp.framework.DocumentAcceleratorConfiguration"> <service name="com.sun.star.ui.DocumentAcceleratorConfiguration"/> </implementation> + <implementation name="org.apache.openoffice.comp.framework.ContextChangeEventMultiplexer"> + <service name="com.sun.star.ui.ContextChangeEventMultiplexer"/> + <singleton name="com.sun.star.ui.ContextChangeEventMultiplexer"/> + </implementation> <implementation name="com.sun.star.comp.framework.Frame"> <service name="com.sun.star.frame.Frame"/> </implementation> |