1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
3 * This file is part of the LibreOffice project.
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/.
9 * This file incorporates work covered by the following license notice:
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 .
22 #include <tools/color.hxx>
23 #include <vcl/image.hxx>
24 #include <cppuhelper/implbase.hxx>
25 #include <comphelper/compbase.hxx>
26 #include <com/sun/star/accessibility/XAccessible.hpp>
27 #include <com/sun/star/accessibility/XAccessibleContext.hpp>
28 #include <com/sun/star/accessibility/XAccessibleComponent.hpp>
29 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
30 #include <com/sun/star/accessibility/XAccessibleEventBroadcaster.hpp>
35 #define VALUESET_ITEM_NONEITEM 0xFFFE
41 VALUESETITEM_IMAGE_AND_TEXT
,
54 rtl::Reference
< ValueItemAcc
> mxAcc
;
61 explicit ValueSetItem( ValueSet
& rParent
);
64 css::uno::Reference
< css::accessibility::XAccessible
>
65 GetAccessible( bool bIsTransientChildrenDisabled
);
68 typedef comphelper::WeakComponentImplHelper
<
69 css::accessibility::XAccessible
,
70 css::accessibility::XAccessibleEventBroadcaster
,
71 css::accessibility::XAccessibleContext
,
72 css::accessibility::XAccessibleComponent
,
73 css::accessibility::XAccessibleSelection
>
74 ValueSetAccComponentBase
;
76 class ValueSetAcc final
: public ValueSetAccComponentBase
80 explicit ValueSetAcc(ValueSet
* pParent
);
81 virtual ~ValueSetAcc() override
;
83 void FireAccessibleEvent( short nEventId
, const css::uno::Any
& rOldValue
, const css::uno::Any
& rNewValue
);
84 bool HasAccessibleListeners() const { return( mxEventListeners
.size() > 0 ); }
86 static ValueSetAcc
* getImplementation( const css::uno::Reference
< css::uno::XInterface
>& rxData
) noexcept
;
90 /** Called by the corresponding ValueSet when it gets the focus.
91 Stores the new focus state and broadcasts a state change event.
95 /** Called by the corresponding ValueSet when it loses the focus.
96 Stores the new focus state and broadcasts a state change event.
101 virtual css::uno::Reference
< css::accessibility::XAccessibleContext
> SAL_CALL
getAccessibleContext( ) override
;
103 // XAccessibleEventBroadcaster
104 virtual void SAL_CALL
addAccessibleEventListener( const css::uno::Reference
< css::accessibility::XAccessibleEventListener
>& xListener
) override
;
105 virtual void SAL_CALL
removeAccessibleEventListener( const css::uno::Reference
< css::accessibility::XAccessibleEventListener
>& xListener
) override
;
107 // XAccessibleContext
108 virtual sal_Int64 SAL_CALL
getAccessibleChildCount( ) override
;
109 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getAccessibleChild( sal_Int64 i
) override
;
110 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getAccessibleParent( ) override
;
111 virtual sal_Int64 SAL_CALL
getAccessibleIndexInParent( ) override
;
112 virtual sal_Int16 SAL_CALL
getAccessibleRole( ) override
;
113 virtual OUString SAL_CALL
getAccessibleDescription( ) override
;
114 virtual OUString SAL_CALL
getAccessibleName( ) override
;
115 virtual css::uno::Reference
< css::accessibility::XAccessibleRelationSet
> SAL_CALL
getAccessibleRelationSet( ) override
;
116 virtual sal_Int64 SAL_CALL
getAccessibleStateSet( ) override
;
117 virtual css::lang::Locale SAL_CALL
getLocale( ) override
;
119 // XAccessibleComponent
120 virtual sal_Bool SAL_CALL
containsPoint( const css::awt::Point
& aPoint
) override
;
121 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getAccessibleAtPoint( const css::awt::Point
& aPoint
) override
;
122 virtual css::awt::Rectangle SAL_CALL
getBounds( ) override
;
123 virtual css::awt::Point SAL_CALL
getLocation( ) override
;
124 virtual css::awt::Point SAL_CALL
getLocationOnScreen( ) override
;
125 virtual css::awt::Size SAL_CALL
getSize( ) override
;
126 virtual void SAL_CALL
grabFocus( ) override
;
127 virtual sal_Int32 SAL_CALL
getForeground( ) override
;
128 virtual sal_Int32 SAL_CALL
getBackground( ) override
;
130 // XAccessibleSelection
131 virtual void SAL_CALL
selectAccessibleChild( sal_Int64 nChildIndex
) override
;
132 virtual sal_Bool SAL_CALL
isAccessibleChildSelected( sal_Int64 nChildIndex
) override
;
133 virtual void SAL_CALL
clearAccessibleSelection( ) override
;
134 virtual void SAL_CALL
selectAllAccessibleChildren( ) override
;
135 virtual sal_Int64 SAL_CALL
getSelectedAccessibleChildCount( ) override
;
136 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getSelectedAccessibleChild( sal_Int64 nSelectedChildIndex
) override
;
137 virtual void SAL_CALL
deselectAccessibleChild( sal_Int64 nSelectedChildIndex
) override
;
140 ::std::vector
< css::uno::Reference
<
141 css::accessibility::XAccessibleEventListener
> > mxEventListeners
;
143 /// The current FOCUSED state.
146 /** Tell all listeners that the object is dying. This callback is
147 usually called from the WeakComponentImplHelper class.
149 virtual void disposing(std::unique_lock
<std::mutex
>&) override
;
151 /** Return the number of items. This takes the None-Item into account.
153 sal_uInt16
getItemCount() const;
155 /** Return the item associated with the given index. The None-Item is
156 taken into account which, when present, is taken to be the first
159 Index of the item to return. The index 0 denotes the None-Item
162 Returns NULL when the given index is out of range.
164 ValueSetItem
* getItem (sal_uInt16 nIndex
) const;
166 /** Check whether or not the object has been disposed (or is in the
167 state of being disposed). If that is the case then
168 DisposedException is thrown to inform the (indirect) caller of the
170 @throws css::lang::DisposedException
172 void ThrowIfDisposed();
174 /** Check whether the value set has a 'none' field, i.e. a field (button)
175 that deselects any items (selects none of them).
177 Returns <true/> if there is a 'none' field and <false/> if it is
180 bool HasNoneField() const;
183 class ValueItemAcc
: public ::cppu::WeakImplHelper
< css::accessibility::XAccessible
,
184 css::accessibility::XAccessibleEventBroadcaster
,
185 css::accessibility::XAccessibleContext
,
186 css::accessibility::XAccessibleComponent
>
190 ::std::vector
< css::uno::Reference
<
191 css::accessibility::XAccessibleEventListener
> > mxEventListeners
;
193 ValueSetItem
* mpParent
;
194 bool mbIsTransientChildrenDisabled
;
198 ValueItemAcc(ValueSetItem
* pParent
, bool bIsTransientChildrenDisabled
);
199 virtual ~ValueItemAcc() override
;
201 void ParentDestroyed();
203 void FireAccessibleEvent( short nEventId
, const css::uno::Any
& rOldValue
, const css::uno::Any
& rNewValue
);
205 static ValueItemAcc
* getImplementation( const css::uno::Reference
< css::uno::XInterface
>& rxData
) noexcept
;
210 virtual css::uno::Reference
< css::accessibility::XAccessibleContext
> SAL_CALL
getAccessibleContext( ) override
;
212 // XAccessibleEventBroadcaster
213 virtual void SAL_CALL
addAccessibleEventListener( const css::uno::Reference
< css::accessibility::XAccessibleEventListener
>& xListener
) override
;
214 virtual void SAL_CALL
removeAccessibleEventListener( const css::uno::Reference
< css::accessibility::XAccessibleEventListener
>& xListener
) override
;
216 // XAccessibleContext
217 virtual sal_Int64 SAL_CALL
getAccessibleChildCount( ) override
;
218 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getAccessibleChild( sal_Int64 i
) override
;
219 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getAccessibleParent( ) override
;
220 virtual sal_Int64 SAL_CALL
getAccessibleIndexInParent( ) override
;
221 virtual sal_Int16 SAL_CALL
getAccessibleRole( ) override
;
222 virtual OUString SAL_CALL
getAccessibleDescription( ) override
;
223 virtual OUString SAL_CALL
getAccessibleName( ) override
;
224 virtual css::uno::Reference
< css::accessibility::XAccessibleRelationSet
> SAL_CALL
getAccessibleRelationSet( ) override
;
225 virtual sal_Int64 SAL_CALL
getAccessibleStateSet( ) override
;
226 virtual css::lang::Locale SAL_CALL
getLocale( ) override
;
228 // XAccessibleComponent
229 virtual sal_Bool SAL_CALL
containsPoint( const css::awt::Point
& aPoint
) override
;
230 virtual css::uno::Reference
< css::accessibility::XAccessible
> SAL_CALL
getAccessibleAtPoint( const css::awt::Point
& aPoint
) override
;
231 virtual css::awt::Rectangle SAL_CALL
getBounds( ) override
;
232 virtual css::awt::Point SAL_CALL
getLocation( ) override
;
233 virtual css::awt::Point SAL_CALL
getLocationOnScreen( ) override
;
234 virtual css::awt::Size SAL_CALL
getSize( ) override
;
235 virtual void SAL_CALL
grabFocus( ) override
;
236 virtual sal_Int32 SAL_CALL
getForeground( ) override
;
237 virtual sal_Int32 SAL_CALL
getBackground( ) override
;
241 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */