LibreOffice Module toolkit (master) 1
listenermultiplexer.cxx
Go to the documentation of this file.
1/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2/*
3 * This file is part of the LibreOffice project.
4 *
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
8 *
9 * This file incorporates work covered by the following license notice:
10 *
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
18 */
19
22#include <com/sun/star/lang/DisposedException.hpp>
23
24// class EventListenerMultiplexer
25
26EventListenerMultiplexer::EventListenerMultiplexer( ::cppu::OWeakObject& rSource )
27 : ListenerMultiplexerBase( rSource )
28{
29}
30
31void SAL_CALL EventListenerMultiplexer::acquire() noexcept
32{
33 return ListenerMultiplexerBase::acquire();
34}
35
36void SAL_CALL EventListenerMultiplexer::release() noexcept
37{
38 return ListenerMultiplexerBase::release();
39}
40
41// css::uno::XInterface
42css::uno::Any EventListenerMultiplexer::queryInterface( const css::uno::Type & rType )
43{
44 css::uno::Any aRet = ::cppu::queryInterface( rType,
45 static_cast< css::lang::XEventListener* >(this) );
46 return (aRet.hasValue() ? aRet : ListenerMultiplexerBase::queryInterface( rType ));
47}
48
49// css::lang::XEventListener
50void EventListenerMultiplexer::disposing( const css::lang::EventObject& )
51{
52}
53
54
55// class FocusListenerMultiplexer
56
57IMPL_LISTENERMULTIPLEXER_BASEMETHODS( FocusListenerMultiplexer, css::awt::XFocusListener )
58IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( FocusListenerMultiplexer, css::awt::XFocusListener, focusGained, css::awt::FocusEvent )
59IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( FocusListenerMultiplexer, css::awt::XFocusListener, focusLost, css::awt::FocusEvent )
60
61
62// class WindowListenerMultiplexer
63
64IMPL_LISTENERMULTIPLEXER_BASEMETHODS( WindowListenerMultiplexer, css::awt::XWindowListener )
65IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( WindowListenerMultiplexer, css::awt::XWindowListener, windowResized, css::awt::WindowEvent )
66IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( WindowListenerMultiplexer, css::awt::XWindowListener, windowMoved, css::awt::WindowEvent )
67IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( WindowListenerMultiplexer, css::awt::XWindowListener, windowShown, css::lang::EventObject )
68IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( WindowListenerMultiplexer, css::awt::XWindowListener, windowHidden, css::lang::EventObject )
69
70
71// class VclContainerListenerMultiplexer
72
73IMPL_LISTENERMULTIPLEXER_BASEMETHODS( VclContainerListenerMultiplexer, css::awt::XVclContainerListener )
74IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( VclContainerListenerMultiplexer, css::awt::XVclContainerListener, windowAdded, css::awt::VclContainerEvent )
75IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( VclContainerListenerMultiplexer, css::awt::XVclContainerListener, windowRemoved, css::awt::VclContainerEvent )
76
77
78// class KeyListenerMultiplexer
79
80IMPL_LISTENERMULTIPLEXER_BASEMETHODS( KeyListenerMultiplexer, css::awt::XKeyListener )
81IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( KeyListenerMultiplexer, css::awt::XKeyListener, keyPressed, css::awt::KeyEvent )
82IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( KeyListenerMultiplexer, css::awt::XKeyListener, keyReleased, css::awt::KeyEvent )
83
84
85// class MouseListenerMultiplexer
86
87IMPL_LISTENERMULTIPLEXER_BASEMETHODS( MouseListenerMultiplexer, css::awt::XMouseListener )
88IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MouseListenerMultiplexer, css::awt::XMouseListener, mousePressed, css::awt::MouseEvent )
89IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MouseListenerMultiplexer, css::awt::XMouseListener, mouseReleased, css::awt::MouseEvent )
90IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MouseListenerMultiplexer, css::awt::XMouseListener, mouseEntered, css::awt::MouseEvent )
91IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MouseListenerMultiplexer, css::awt::XMouseListener, mouseExited, css::awt::MouseEvent )
92
93
94// class MouseMotionListenerMultiplexer
95
96IMPL_LISTENERMULTIPLEXER_BASEMETHODS( MouseMotionListenerMultiplexer, css::awt::XMouseMotionListener )
97IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MouseMotionListenerMultiplexer, css::awt::XMouseMotionListener, mouseDragged, css::awt::MouseEvent )
98IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MouseMotionListenerMultiplexer, css::awt::XMouseMotionListener, mouseMoved, css::awt::MouseEvent )
99
100
101// class PaintListenerMultiplexer
102
103IMPL_LISTENERMULTIPLEXER_BASEMETHODS( PaintListenerMultiplexer, css::awt::XPaintListener )
104IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( PaintListenerMultiplexer, css::awt::XPaintListener, windowPaint, css::awt::PaintEvent )
105
106
107// class TopWindowListenerMultiplexer
108
109IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TopWindowListenerMultiplexer, css::awt::XTopWindowListener )
110IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowOpened, css::lang::EventObject )
111IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowClosing, css::lang::EventObject )
112IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowClosed, css::lang::EventObject )
113IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowMinimized, css::lang::EventObject )
114IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowNormalized, css::lang::EventObject )
115IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowActivated, css::lang::EventObject )
116IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TopWindowListenerMultiplexer, css::awt::XTopWindowListener, windowDeactivated, css::lang::EventObject )
117
118
119// class TextListenerMultiplexer
120
121IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TextListenerMultiplexer, css::awt::XTextListener )
122IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TextListenerMultiplexer, css::awt::XTextListener, textChanged, css::awt::TextEvent )
123
124
125// class ActionListenerMultiplexer
126
127IMPL_LISTENERMULTIPLEXER_BASEMETHODS( ActionListenerMultiplexer, css::awt::XActionListener )
128IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( ActionListenerMultiplexer, css::awt::XActionListener, actionPerformed, css::awt::ActionEvent )
129
130
131// class ItemListenerMultiplexer
132
133IMPL_LISTENERMULTIPLEXER_BASEMETHODS( ItemListenerMultiplexer, css::awt::XItemListener )
134IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( ItemListenerMultiplexer, css::awt::XItemListener, itemStateChanged, css::awt::ItemEvent )
135
136
137// class TabListenerMultiplexer
138
139IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TabListenerMultiplexer, css::awt::XTabListener )
140
141void TabListenerMultiplexer::inserted( sal_Int32 evt )
142IMPL_TABLISTENERMULTIPLEXER_LISTENERMETHOD_BODY_1PARAM( TabListenerMultiplexer, css::awt::XTabListener, inserted, ::sal_Int32 )
143
144void TabListenerMultiplexer::removed( sal_Int32 evt )
145IMPL_TABLISTENERMULTIPLEXER_LISTENERMETHOD_BODY_1PARAM( TabListenerMultiplexer, css::awt::XTabListener, removed, ::sal_Int32 )
146
147void TabListenerMultiplexer::changed( sal_Int32 evt, const css::uno::Sequence< css::beans::NamedValue >& evt2 )
148{
149 sal_Int32 aMulti( evt );
150 std::unique_lock g(m_aMutex);
151 ::comphelper::OInterfaceIteratorHelper4 aIt(g, maListeners);
152 g.unlock();
153 while( aIt.hasMoreElements() )
154 {
155 css::uno::Reference<css::awt::XTabListener> xListener(aIt.next());
156 try
157 {
158 xListener->changed( aMulti, evt2 );
159 }
160 catch(const css::lang::DisposedException& e)
161 {
162 OSL_ENSURE( e.Context.is(), "caught DisposedException with empty Context field" );
163 if ( e.Context == xListener || !e.Context.is() )
164 {
165 std::unique_lock g2(m_aMutex);
166 aIt.remove(g2);
167 }
168 }
169 catch(const css::uno::RuntimeException&)
170 {
171 DISPLAY_EXCEPTION( TabListenerMultiplexer, changed )
172 }
173 }
174}
175
176
177void TabListenerMultiplexer::activated( sal_Int32 evt )
178IMPL_TABLISTENERMULTIPLEXER_LISTENERMETHOD_BODY_1PARAM( TabListenerMultiplexer, css::awt::XTabListener, activated, ::sal_Int32 )
179
180void TabListenerMultiplexer::deactivated( sal_Int32 evt )
181IMPL_TABLISTENERMULTIPLEXER_LISTENERMETHOD_BODY_1PARAM( TabListenerMultiplexer, css::awt::XTabListener, deactivated, ::sal_Int32 )
182
183
184// class ContainerListenerMultiplexer
185
186IMPL_LISTENERMULTIPLEXER_BASEMETHODS( ContainerListenerMultiplexer, css::container::XContainerListener )
187IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( ContainerListenerMultiplexer, css::container::XContainerListener, elementInserted, css::container::ContainerEvent )
188IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( ContainerListenerMultiplexer, css::container::XContainerListener, elementRemoved, css::container::ContainerEvent )
189IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( ContainerListenerMultiplexer, css::container::XContainerListener, elementReplaced, css::container::ContainerEvent )
190
191
192// class SpinListenerMultiplexer
193
194IMPL_LISTENERMULTIPLEXER_BASEMETHODS( SpinListenerMultiplexer, css::awt::XSpinListener )
195IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( SpinListenerMultiplexer, css::awt::XSpinListener, up, css::awt::SpinEvent )
196IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( SpinListenerMultiplexer, css::awt::XSpinListener, down, css::awt::SpinEvent )
197IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( SpinListenerMultiplexer, css::awt::XSpinListener, first, css::awt::SpinEvent )
198IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( SpinListenerMultiplexer, css::awt::XSpinListener, last, css::awt::SpinEvent )
199
200
201// class AdjustmentListenerMultiplexer
202
203IMPL_LISTENERMULTIPLEXER_BASEMETHODS( AdjustmentListenerMultiplexer, css::awt::XAdjustmentListener )
204IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( AdjustmentListenerMultiplexer, css::awt::XAdjustmentListener, adjustmentValueChanged, css::awt::AdjustmentEvent )
205
206
207// class MenuListenerMultiplexer
208
209IMPL_LISTENERMULTIPLEXER_BASEMETHODS( MenuListenerMultiplexer, css::awt::XMenuListener )
210IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MenuListenerMultiplexer, css::awt::XMenuListener, itemHighlighted, css::awt::MenuEvent )
211IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MenuListenerMultiplexer, css::awt::XMenuListener, itemSelected, css::awt::MenuEvent )
212IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MenuListenerMultiplexer, css::awt::XMenuListener, itemActivated, css::awt::MenuEvent )
213IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( MenuListenerMultiplexer, css::awt::XMenuListener, itemDeactivated, css::awt::MenuEvent )
214
215
216// class TreeSelectionListenerMultiplexer
217
218IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TreeSelectionListenerMultiplexer, css::view::XSelectionChangeListener )
219IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TreeSelectionListenerMultiplexer, css::view::XSelectionChangeListener, selectionChanged, css::lang::EventObject )
220
221
222// class TreeSelectionListenerMultiplexer
223
224IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TreeExpansionListenerMultiplexer, css::awt::tree::XTreeExpansionListener )
225IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TreeExpansionListenerMultiplexer, css::awt::tree::XTreeExpansionListener, requestChildNodes, css::awt::tree::TreeExpansionEvent )
226IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD_EXCEPTION( TreeExpansionListenerMultiplexer, css::awt::tree::XTreeExpansionListener, treeExpanding, css::awt::tree::TreeExpansionEvent, css::awt::tree::ExpandVetoException )
227IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD_EXCEPTION( TreeExpansionListenerMultiplexer, css::awt::tree::XTreeExpansionListener, treeCollapsing, css::awt::tree::TreeExpansionEvent, css::awt::tree::ExpandVetoException )
228IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TreeExpansionListenerMultiplexer, css::awt::tree::XTreeExpansionListener, treeExpanded, css::awt::tree::TreeExpansionEvent )
229IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TreeExpansionListenerMultiplexer, css::awt::tree::XTreeExpansionListener, treeCollapsed, css::awt::tree::TreeExpansionEvent )
230
231
232// class TreeEditListenerMultiplexer
233
234IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TreeEditListenerMultiplexer, css::awt::tree::XTreeEditListener )
235
236
237// class SelectionListenerMultiplexer
238
239IMPL_LISTENERMULTIPLEXER_BASEMETHODS( SelectionListenerMultiplexer, css::awt::grid::XGridSelectionListener )
240IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( SelectionListenerMultiplexer, css::awt::grid::XGridSelectionListener, selectionChanged, css::awt::grid::GridSelectionEvent )
241
242
243// class SelectionListenerMultiplexer
244
245IMPL_LISTENERMULTIPLEXER_BASEMETHODS( TabPageListenerMultiplexer, css::awt::tab::XTabPageContainerListener )
246IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD( TabPageListenerMultiplexer, css::awt::tab::XTabPageContainerListener, tabPageActivated, css::awt::tab::TabPageActivatedEvent )
247/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
void SAL_CALL windowClosed(const css::lang::EventObject &e) override
void SAL_CALL windowMinimized(const css::lang::EventObject &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL actionPerformed(const css::awt::ActionEvent &rEvent) override
void SAL_CALL windowDeactivated(const css::lang::EventObject &e) override
void SAL_CALL itemDeactivated(const css::awt::MenuEvent &rEvent) override
virtual void SAL_CALL treeExpanded(const css::awt::tree::TreeExpansionEvent &aEvent) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL textChanged(const css::awt::TextEvent &rEvent) override
void SAL_CALL windowHidden(const css::lang::EventObject &e) override
void SAL_CALL windowActivated(const css::lang::EventObject &e) override
void SAL_CALL deactivated(::sal_Int32 ID) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL up(const css::awt::SpinEvent &rEvent) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL windowResized(const css::awt::WindowEvent &e) override
void SAL_CALL mouseReleased(const css::awt::MouseEvent &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL windowAdded(const css::awt::VclContainerEvent &e) override
void SAL_CALL mouseExited(const css::awt::MouseEvent &e) override
void SAL_CALL itemActivated(const css::awt::MenuEvent &rEvent) override
void SAL_CALL down(const css::awt::SpinEvent &rEvent) override
virtual DECL_LISTENERMULTIPLEXER_END void SAL_CALL selectionChanged(const css::lang::EventObject &aEvent) override
void SAL_CALL elementReplaced(const css::container::ContainerEvent &Event) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL itemHighlighted(const css::awt::MenuEvent &rEvent) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL inserted(::sal_Int32 ID) override
void SAL_CALL changed(::sal_Int32 ID, const css::uno::Sequence< css::beans::NamedValue > &Properties) override
void SAL_CALL mouseMoved(const css::awt::MouseEvent &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL windowPaint(const css::awt::PaintEvent &e) override
void SAL_CALL elementRemoved(const css::container::ContainerEvent &Event) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL mousePressed(const css::awt::MouseEvent &e) override
void SAL_CALL last(const css::awt::SpinEvent &rEvent) override
void SAL_CALL first(const css::awt::SpinEvent &rEvent) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL windowOpened(const css::lang::EventObject &e) override
void SAL_CALL windowClosing(const css::lang::EventObject &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL elementInserted(const css::container::ContainerEvent &Event) override
void SAL_CALL mouseEntered(const css::awt::MouseEvent &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL itemStateChanged(const css::awt::ItemEvent &rEvent) override
void SAL_CALL removed(::sal_Int32 ID) override
void SAL_CALL windowRemoved(const css::awt::VclContainerEvent &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL keyPressed(const css::awt::KeyEvent &e) override
virtual void SAL_CALL treeCollapsed(const css::awt::tree::TreeExpansionEvent &aEvent) override
void SAL_CALL keyReleased(const css::awt::KeyEvent &e) override
class UNLESS_MERGELIBS(TOOLKIT_DLLPUBLIC) ListenerMultiplexerBase DECL_LISTENERMULTIPLEXER_END void SAL_CALL focusGained(const css::awt::FocusEvent &e) override
void SAL_CALL focusLost(const css::awt::FocusEvent &e) override
virtual void SAL_CALL treeExpanding(const css::awt::tree::TreeExpansionEvent &aEvent) override
void SAL_CALL itemSelected(const css::awt::MenuEvent &rEvent) override
void SAL_CALL windowShown(const css::lang::EventObject &e) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL tabPageActivated(const css::awt::tab::TabPageActivatedEvent &aEvent) override
void SAL_CALL activated(::sal_Int32 ID) override
virtual DECL_LISTENERMULTIPLEXER_END void SAL_CALL requestChildNodes(const css::awt::tree::TreeExpansionEvent &aEvent) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL adjustmentValueChanged(const css::awt::AdjustmentEvent &rEvent) override
DECL_LISTENERMULTIPLEXER_END void SAL_CALL mouseDragged(const css::awt::MouseEvent &e) override
virtual void SAL_CALL treeCollapsing(const css::awt::tree::TreeExpansionEvent &aEvent) override
void SAL_CALL windowNormalized(const css::lang::EventObject &e) override
void SAL_CALL windowMoved(const css::awt::WindowEvent &e) override
#define IMPL_TABLISTENERMULTIPLEXER_LISTENERMETHOD_BODY_1PARAM(ClassName, InterfaceName, MethodName, ParamType1)
Definition: macros.hxx:87
#define IMPL_LISTENERMULTIPLEXER_BASEMETHODS(ClassName, InterfaceName)
Definition: macros.hxx:60
#define IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD(ClassName, InterfaceName, MethodName, EventType)
Definition: macros.hxx:150
#define IMPL_LISTENERMULTIPLEXER_LISTENERMETHOD_EXCEPTION(ClassName, InterfaceName, MethodName, EventType, Exception)
Definition: macros.hxx:146
#define DISPLAY_EXCEPTION(ClassName, MethodName)
Definition: macros.hxx:80