LibreOffice Module accessibility (master) 1
AccessibleBrowseBoxBase.hxx
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
20
21#pragma once
22
23#include <sal/config.h>
24
26#include <rtl/ustring.hxx>
27#include <tools/gen.hxx>
28#include <vcl/svapp.hxx>
32#include <com/sun/star/lang/XServiceInfo.hpp>
33#include <com/sun/star/awt/XWindow.hpp>
34#include <com/sun/star/accessibility/XAccessible.hpp>
35#include <com/sun/star/accessibility/XAccessibleContext.hpp>
36#include <com/sun/star/accessibility/XAccessibleComponent.hpp>
37#include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
38#include <com/sun/star/awt/XFocusListener.hpp>
40#include <comphelper/uno3.hxx>
41
42
43namespace vcl { class Window; }
44
45namespace vcl {
46 class IAccessibleTableProvider;
47}
48
49namespace accessibility {
50
51typedef ::cppu::WeakComponentImplHelper<
52 css::accessibility::XAccessibleContext,
53 css::accessibility::XAccessibleComponent,
54 css::accessibility::XAccessibleEventBroadcaster,
55 css::awt::XFocusListener,
56 css::lang::XServiceInfo >
58
63 public ::cppu::BaseMutex,
65{
66public:
78 css::uno::Reference< css::accessibility::XAccessible > xParent,
80 css::uno::Reference< css::awt::XWindow > _xFocusWindow,
82
91 css::uno::Reference< css::accessibility::XAccessible > xParent,
93 css::uno::Reference< css::awt::XWindow > _xFocusWindow,
95 OUString rName,
96 OUString rDescription );
97
98protected:
99 virtual ~AccessibleBrowseBoxBase() override;
100
102 virtual void SAL_CALL disposing() override;
103
104public:
105 // XAccessibleContext
106
108 virtual css::uno::Reference<css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override;
109
111 virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override;
112
116 virtual OUString SAL_CALL getAccessibleDescription() override;
117
121 virtual OUString SAL_CALL getAccessibleName() override;
122
126 virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override;
127
129 virtual sal_Int64 SAL_CALL getAccessibleStateSet() override;
130
132 virtual css::lang::Locale SAL_CALL getLocale() override;
133
137 virtual sal_Int16 SAL_CALL getAccessibleRole() override;
138
139 /* Derived classes have to implement:
140 - getAccessibleChildCount,
141 - getAccessibleChild,
142 - getAccessibleRole.
143 Derived classes may overwrite getAccessibleIndexInParent to increase
144 performance. */
145
146 // XAccessibleComponent
147
150 virtual sal_Bool SAL_CALL containsPoint( const css::awt::Point& rPoint ) override;
151
153 virtual css::awt::Rectangle SAL_CALL getBounds() override;
154
157 virtual css::awt::Point SAL_CALL getLocation() override;
158
161 virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
162
164 virtual css::awt::Size SAL_CALL getSize() override;
165
166 virtual sal_Int32 SAL_CALL getForeground( ) override;
167 virtual sal_Int32 SAL_CALL getBackground( ) override;
168
169 // XFocusListener
170 virtual void SAL_CALL disposing( const css::lang::EventObject& Source ) override;
171 virtual void SAL_CALL focusGained( const css::awt::FocusEvent& e ) override;
172 virtual void SAL_CALL focusLost( const css::awt::FocusEvent& e ) override;
173
174 /* Derived classes have to implement:
175 - getAccessibleAt,
176 - grabFocus. */
177
181 virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint( const css::awt::Point& rPoint ) override;
182
183 // XAccessibleEventBroadcaster
184
186 virtual void SAL_CALL addAccessibleEventListener(
187 const css::uno::Reference< css::accessibility::XAccessibleEventListener>& rxListener ) override;
188
190 virtual void SAL_CALL removeAccessibleEventListener(
191 const css::uno::Reference< css::accessibility::XAccessibleEventListener>& rxListener ) override;
192
193 // XTypeProvider
194
196 virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override;
197
198 // XServiceInfo
199
201 virtual sal_Bool SAL_CALL supportsService( const OUString& rServiceName ) override;
202
204 virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override;
205
206 /* Derived classes have to implement:
207 - getImplementationName. */
208
209 // helper methods
210
212 inline AccessibleBrowseBoxObjType getType() const;
213
215 void setAccessibleName( const OUString& rName );
217 void setAccessibleDescription( const OUString& rDescription );
218
220 void commitEvent(
221 sal_Int16 nEventId,
222 const css::uno::Any& rNewValue,
223 const css::uno::Any& rOldValue );
225 bool isAlive() const;
226
227protected:
228 // internal virtual methods
229
235 bool implIsShowing();
236
245
252 virtual sal_Int64 implCreateStateSet();
253
254 // internal helper methods
255
258 inline void implSetName( const OUString& rName );
259
272
275
276public:
278 ::osl::Mutex& getMutex( ) { return m_aMutex; }
279
281 void ensureIsAlive() const;
282
283
284protected:
285 // members
286
288 css::uno::Reference< css::accessibility::XAccessible > mxParent;
291
294 css::uno::Reference< css::awt::XWindow > m_xFocusWindow;
295
296private:
298 OUString maName;
301
304
306};
307
308
309// a version of AccessibleBrowseBoxBase which implements not only the XAccessibleContext,
310// but also the XAccessible
311
312typedef ::cppu::ImplHelper1 < css::accessibility::XAccessible
314
318{
319protected:
332 const css::uno::Reference< css::accessibility::XAccessible >& rxParent,
334 const css::uno::Reference< css::awt::XWindow >& _xFocusWindow,
336
347 const css::uno::Reference< css::accessibility::XAccessible >& rxParent,
349 const css::uno::Reference< css::awt::XWindow >& _xFocusWindow,
351 const OUString& rName,
352 const OUString& rDescription );
353
354public:
355 // noncopyable
358 // XInterface
360 // XTypeProvider
361 DECLARE_XTYPEPROVIDER( )
362
363protected:
364 virtual ~BrowseBoxAccessibleElement() override;
365
366protected:
367 // XAccessible
368
370 virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override;
371};
372
373
374// a helper class for protecting methods which need to lock the solar mutex in addition to the own mutex
375
376class SolarMethodGuard : public SolarMutexGuard, public osl::MutexGuard
377{
378public:
379 SolarMethodGuard( osl::Mutex& rMutex )
381 ,osl::MutexGuard( rMutex )
382 {
383 }
384};
385
386// inlines
387
389{
390 return meObjType;
391}
392
394 const OUString& rName )
395{
396 maName = rName;
397}
398
399} // namespace accessibility
400
401
402
403/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
AccessibleBrowseBoxObjType
The BrowseBox accessible objects inherit from this base class.
virtual tools::Rectangle implGetBoundingBox()=0
Derived classes return the bounding box relative to the parent window.
::vcl::IAccessibleTableProvider * mpBrowseBox
The VCL BrowseBox control.
virtual sal_Int64 SAL_CALL getAccessibleIndexInParent() override
virtual sal_Int64 SAL_CALL getAccessibleStateSet() override
void setAccessibleDescription(const OUString &rDescription)
Changes the description of the object and notifies listeners.
void implSetName(const OUString &rName)
Changes the name of the object (flat assignment, no notify).
void setAccessibleName(const OUString &rName)
Changes the name of the object and notifies listeners.
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleAtPoint(const css::awt::Point &rPoint) override
css::uno::Reference< css::awt::XWindow > m_xFocusWindow
This is the window which get all the nice focus events.
virtual OUString SAL_CALL getAccessibleDescription() override
virtual css::awt::Point SAL_CALL getLocation() override
void setClientId(::comphelper::AccessibleEventNotifier::TClientId _aNewClientId)
::comphelper::AccessibleEventNotifier::TClientId getClientId() const
virtual css::awt::Rectangle SAL_CALL getBounds() override
virtual sal_Bool SAL_CALL containsPoint(const css::awt::Point &rPoint) override
AccessibleBrowseBoxObjType meObjType
The type of this object (for names, descriptions, state sets, ...).
virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getAccessibleParent() override
virtual sal_Int16 SAL_CALL getAccessibleRole() override
virtual css::uno::Sequence< sal_Int8 > SAL_CALL getImplementationId() override
virtual css::awt::Size SAL_CALL getSize() override
virtual tools::Rectangle implGetBoundingBoxOnScreen()=0
Derived classes return the bounding box in screen coordinates.
tools::Rectangle getBoundingBoxOnScreen()
Locks all mutex's and calculates the bounding box in screen coordinates.
AccessibleBrowseBoxBase(css::uno::Reference< css::accessibility::XAccessible > xParent, ::vcl::IAccessibleTableProvider &rBrowseBox, css::uno::Reference< css::awt::XWindow > _xFocusWindow, AccessibleBrowseBoxObjType eObjType)
Constructor sets specified name and description.
virtual css::uno::Sequence< OUString > SAL_CALL getSupportedServiceNames() override
::comphelper::AccessibleEventNotifier::TClientId m_aClientId
virtual sal_Int64 implCreateStateSet()
Creates a bitset of states of the current object.
AccessibleBrowseBoxObjType getType() const
OUString maDescription
Localized description text.
virtual sal_Int32 SAL_CALL getBackground() override
virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet > SAL_CALL getAccessibleRelationSet() override
virtual OUString SAL_CALL getAccessibleName() override
virtual sal_Int32 SAL_CALL getForeground() override
virtual void SAL_CALL disposing() override
Commits DeFunc event to listeners and cleans up members.
bool implIsShowing()
Determines whether the BrowseBox control is really showing inside of its parent accessible window.
virtual void SAL_CALL removeAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &rxListener) override
Removes an event listener.
virtual sal_Bool SAL_CALL supportsService(const OUString &rServiceName) override
virtual void SAL_CALL addAccessibleEventListener(const css::uno::Reference< css::accessibility::XAccessibleEventListener > &rxListener) override
Adds a new event listener.
virtual void SAL_CALL focusGained(const css::awt::FocusEvent &e) override
css::uno::Reference< css::accessibility::XAccessible > mxParent
The parent accessible object.
virtual css::lang::Locale SAL_CALL getLocale() override
virtual css::awt::Point SAL_CALL getLocationOnScreen() override
void commitEvent(sal_Int16 nEventId, const css::uno::Any &rNewValue, const css::uno::Any &rOldValue)
Commits an event to all listeners.
tools::Rectangle getBoundingBox()
Locks all mutex's and calculates the bounding box relative to the parent window.
virtual void SAL_CALL focusLost(const css::awt::FocusEvent &e) override
virtual css::uno::Reference< css::accessibility::XAccessibleContext > SAL_CALL getAccessibleContext() override
BrowseBoxAccessibleElement(const BrowseBoxAccessibleElement &)=delete
const BrowseBoxAccessibleElement & operator=(const BrowseBoxAccessibleElement &)=delete
BrowseBoxAccessibleElement(const css::uno::Reference< css::accessibility::XAccessible > &rxParent, ::vcl::IAccessibleTableProvider &rBrowseBox, const css::uno::Reference< css::awt::XWindow > &_xFocusWindow, AccessibleBrowseBoxObjType eObjType)
Constructor sets specified name and description.
mutable::osl::Mutex m_aMutex
::cppu::WeakComponentImplHelper< css::accessibility::XAccessibleContext, css::accessibility::XAccessibleComponent, css::accessibility::XAccessibleEventBroadcaster, css::awt::XFocusListener, css::lang::XServiceInfo > AccessibleBrowseBoxImplHelper
::cppu::ImplHelper1< css::accessibility::XAccessible > BrowseBoxAccessibleElement_Base
unsigned char sal_Bool
#define DECLARE_XINTERFACE()