LibreOffice Module svx (master)  1
AccessibleShape.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 #ifndef INCLUDED_SVX_ACCESSIBLESHAPE_HXX
22 #define INCLUDED_SVX_ACCESSIBLESHAPE_HXX
23 
24 #include <com/sun/star/accessibility/AccessibleScrollType.hpp>
25 #include <com/sun/star/accessibility/TextSegment.hpp>
26 #include <com/sun/star/accessibility/XAccessibleSelection.hpp>
27 #include <com/sun/star/accessibility/XAccessibleExtendedAttributes.hpp>
28 #include <com/sun/star/accessibility/XAccessibleGroupPosition.hpp>
29 #include <com/sun/star/accessibility/XAccessibleHypertext.hpp>
30 #include <com/sun/star/awt/Point.hpp>
31 #include <com/sun/star/awt/Rectangle.hpp>
32 #include <com/sun/star/awt/Size.hpp>
33 #include <com/sun/star/document/XShapeEventListener.hpp>
34 #include <com/sun/star/lang/EventObject.hpp>
35 #include <com/sun/star/uno/Any.hxx>
36 #include <com/sun/star/uno/Reference.hxx>
37 #include <com/sun/star/uno/Sequence.hxx>
38 #include <com/sun/star/uno/Type.hxx>
39 #include <com/sun/star/lang/XUnoTunnel.hpp>
43 #include <rtl/ustring.hxx>
44 #include <sal/types.h>
47 #include <svx/svxdllapi.h>
48 #include <memory>
49 
50 namespace com::sun::star {
51  namespace accessibility { class XAccessible; }
52  namespace accessibility { class XAccessibleEventListener; }
53  namespace accessibility { class XAccessibleHyperlink; }
54  namespace accessibility { class XAccessibleRelationSet; }
55  namespace accessibility { class XAccessibleStateSet; }
56  namespace beans { struct PropertyValue; }
57  namespace document { struct EventObject; }
58  namespace drawing { class XShape; }
59  namespace uno { class XInterface; }
60 }
61 
62 class SdrObject;
63 
64 namespace accessibility {
65 
66 class AccessibleShapeInfo;
67 class AccessibleTextHelper;
68 class ChildrenManager;
69 class IAccessibleParent;
70 
96  : public AccessibleContextBase,
98  public css::accessibility::XAccessibleSelection,
99  public css::accessibility::XAccessibleExtendedAttributes,
100  public css::accessibility::XAccessibleGroupPosition,
101  public css::accessibility::XAccessibleHypertext,
103  public css::document::XShapeEventListener,
104  public css::lang::XUnoTunnel
105 {
106 public:
107  //===== internal ========================================================
108 
125  const AccessibleShapeInfo& rShapeInfo,
126  const AccessibleShapeTreeInfo& rShapeTreeInfo);
127  //Solution: Overwrite the object's current name.
128  virtual OUString SAL_CALL getAccessibleName() override;
129  virtual OUString SAL_CALL getAccessibleDescription() override;
130  virtual css::uno::Reference< css::accessibility::XAccessibleRelationSet> SAL_CALL getAccessibleRelationSet() override;
131 //===== XAccessibleSelection ============================================
132 
133  virtual void SAL_CALL selectAccessibleChild(
134  sal_Int32 nChildIndex ) override;
135 
136  virtual sal_Bool SAL_CALL isAccessibleChildSelected(
137  sal_Int32 nChildIndex ) override;
138 
139  virtual void SAL_CALL clearAccessibleSelection( ) override;
140 
141  virtual void SAL_CALL selectAllAccessibleChildren( ) override;
142 
143  virtual sal_Int32 SAL_CALL getSelectedAccessibleChildCount( ) override;
144 
145  virtual css::uno::Reference< css::accessibility::XAccessible > SAL_CALL getSelectedAccessibleChild(
146  sal_Int32 nSelectedChildIndex ) override;
147 
148  virtual void SAL_CALL deselectAccessibleChild(
149  sal_Int32 nSelectedChildIndex ) override;
150 
151  // ====== XAccessibleExtendedAttributes =====================================
152  virtual css::uno::Any SAL_CALL getExtendedAttributes() override ;
154  virtual sal_Int16 SAL_CALL getAccessibleRole() override;
155  //===== XAccessibleGroupPosition =========================================
156  virtual css::uno::Sequence< sal_Int32 > SAL_CALL
157  getGroupPosition( const css::uno::Any& rAny ) override;
158  virtual OUString SAL_CALL getObjectLink( const css::uno::Any& accoject ) override;
162  virtual ~AccessibleShape() override;
163 
167  virtual void Init();
168 
181  virtual bool SetState (sal_Int16 aState) override;
182 
195  virtual bool ResetState (sal_Int16 aState) override;
196 
208  bool GetState (sal_Int16 aState);
209 
210 
211  //===== XAccessibleContext ==============================================
212 
214  virtual sal_Int32 SAL_CALL
215  getAccessibleChildCount() override;
216 
226  virtual css::uno::Reference<
227  css::accessibility::XAccessible> SAL_CALL
228  getAccessibleChild (sal_Int32 nIndex) override;
229 
230 
232  virtual css::uno::Reference<
233  css::accessibility::XAccessibleStateSet> SAL_CALL
234  getAccessibleStateSet() override;
235 
237  virtual sal_Int32 SAL_CALL
238  getAccessibleIndexInParent() override;
239 
240  //===== XAccessibleComponent ============================================
241 
242  virtual css::uno::Reference<
243  css::accessibility::XAccessible > SAL_CALL
244  getAccessibleAtPoint (const css::awt::Point& aPoint) override;
245 
246  virtual css::awt::Rectangle SAL_CALL getBounds() override;
247 
248  virtual css::awt::Point SAL_CALL getLocation() override;
249 
250  virtual css::awt::Point SAL_CALL getLocationOnScreen() override;
251 
252  virtual css::awt::Size SAL_CALL getSize() override;
253 
254  virtual sal_Int32 SAL_CALL getForeground() override;
255 
256  virtual sal_Int32 SAL_CALL getBackground() override;
257 
258  //===== XAccessibleEventBroadcaster =====================================
259 
266  virtual void SAL_CALL
267  addAccessibleEventListener (
268  const css::uno::Reference<
269  css::accessibility::XAccessibleEventListener >& rxListener) override;
270 
278  virtual void SAL_CALL
279  removeAccessibleEventListener (
280  const css::uno::Reference<
281  css::accessibility::XAccessibleEventListener >& rxListener) override;
282 
283 
284  //===== XInterface ======================================================
285 
286  virtual css::uno::Any SAL_CALL
287  queryInterface (const css::uno::Type & rType) override;
288 
289  virtual void SAL_CALL
290  acquire()
291  throw () override;
292 
293  virtual void SAL_CALL
294  release()
295  throw () override;
296 
297 
298  //===== XServiceInfo ====================================================
299 
302  virtual OUString SAL_CALL
303  getImplementationName() override;
304 
305  virtual css::uno::Sequence< OUString> SAL_CALL
306  getSupportedServiceNames() override;
307 
308  //===== XTypeProvider ===================================================
309 
310  virtual css::uno::Sequence< css::uno::Type> SAL_CALL
311  getTypes() override;
312 
313  //===== IAccessibleViewForwarderListener ================================
314  virtual void ViewForwarderChanged() override;
315 
319  void disposing (const css::lang::EventObject& Source);
320 
321  //===== document::XShapeEventListener ========================================
322 
323  virtual void SAL_CALL
324  notifyShapeEvent (const css::document::EventObject& rEventObject) override;
325 
326 
327  //===== XUnoTunnel ========================================================
328 
330 
331  //===== XAccessibleHypertext ========================================================
332  virtual sal_Int32 SAL_CALL getHyperLinkCount() override;
333  virtual css::uno::Reference< css::accessibility::XAccessibleHyperlink >
334  SAL_CALL getHyperLink( sal_Int32 nLinkIndex ) override;
335  virtual sal_Int32 SAL_CALL getHyperLinkIndex( sal_Int32 nCharIndex ) override;
336  //===== XAccessibleText ==================================================
337  virtual sal_Int32 SAL_CALL getCaretPosition( ) override;
338  virtual sal_Bool SAL_CALL setCaretPosition( sal_Int32 nIndex ) override;
339  virtual sal_Unicode SAL_CALL getCharacter( sal_Int32 nIndex ) override;//Shen Zhen Jie changed sal_Unicode to sal_uInt32; change back to sal_Unicode
340  virtual css::uno::Sequence< css::beans::PropertyValue > SAL_CALL getCharacterAttributes( sal_Int32 nIndex, const css::uno::Sequence< OUString >& aRequestedAttributes ) override;
341  virtual css::awt::Rectangle SAL_CALL getCharacterBounds( sal_Int32 nIndex ) override;
342  virtual sal_Int32 SAL_CALL getCharacterCount( ) override;
343  virtual sal_Int32 SAL_CALL getIndexAtPoint( const css::awt::Point& aPoint ) override;
344  virtual OUString SAL_CALL getSelectedText( ) override;
345  virtual sal_Int32 SAL_CALL getSelectionStart( ) override;
346  virtual sal_Int32 SAL_CALL getSelectionEnd( ) override;
347  virtual sal_Bool SAL_CALL setSelection( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) override;
348  virtual OUString SAL_CALL getText( ) override;
349  virtual OUString SAL_CALL getTextRange( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) override;
350  virtual css::accessibility::TextSegment SAL_CALL getTextAtIndex( sal_Int32 nIndex, sal_Int16 aTextType ) override;
351  virtual css::accessibility::TextSegment SAL_CALL getTextBeforeIndex( sal_Int32 nIndex, sal_Int16 aTextType ) override;
352  virtual css::accessibility::TextSegment SAL_CALL getTextBehindIndex( sal_Int32 nIndex, sal_Int16 aTextType ) override;
353  virtual sal_Bool SAL_CALL copyText( sal_Int32 nStartIndex, sal_Int32 nEndIndex ) override;
354  virtual sal_Bool SAL_CALL scrollSubstringTo( sal_Int32 nStartIndex, sal_Int32 nEndIndex, css::accessibility::AccessibleScrollType aScrollType) override;
355 
356  //===== Misc ========================================================
357 
358  const css::uno::Reference< css::drawing::XShape >&
359  GetXShape() const { return mxShape; }
360 
365  void setIndexInParent(sal_Int32 _nIndex) { m_nIndexInParent = _nIndex; }
366 
367 protected:
369  std::unique_ptr<ChildrenManager> mpChildrenManager;
370 
372  css::uno::Reference<
373  css::drawing::XShape> mxShape;
374 
378 
381  sal_Int32 m_nIndexInParent;
382 
385  std::unique_ptr<AccessibleTextHelper> mpText;
386 
390 
394 
398  virtual void SAL_CALL disposing() override;
399 
404  virtual OUString
405  CreateAccessibleBaseName();
406 
410  virtual OUString
411  CreateAccessibleName() override;
412 
414  OUString
415  GetFullAccessibleName(AccessibleShape *shape);
416  virtual OUString GetStyle();
419  void UpdateStates();
420 
421 private:
422  AccessibleShape (const AccessibleShape&) = delete;
423  AccessibleShape& operator= (const AccessibleShape&) = delete;
424  //Old accessible name
425  OUString aAccName;
426 
432  void UpdateNameAndDescription();
433 };
434 
435 } // end of namespace accessibility
436 
437 #endif
438 
439 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
sal_Int32 nIndex
void Init()
sal_Int32 m_nIndexInParent
the index in parent.
const css::uno::Reference< css::drawing::XShape > & GetXShape() const
OUString getImplementationName()
#define UNO3_GETIMPLEMENTATION_DECL(classname)
#define SVX_DLLPUBLIC
Definition: svxdllapi.h:28
This interface contains methods missing from the XAccessibleContext interface that allow the modifica...
uno::Reference< drawing::XShape > const mxShape
IAccessibleParent * mpParent
This object can be used to modify the child list of our parent.
sal_uInt16 sal_Unicode
std::unique_ptr< ChildrenManager > mpChildrenManager
Children manager. May be empty if there are no children.
css::uno::Sequence< OUString > getSupportedServiceNames()
css::uno::Reference< css::drawing::XShape > mxShape
Reference to the actual shape.
unsigned char sal_Bool
Abstract DrawObject.
Definition: svdobj.hxx:312
std::unique_ptr< AccessibleTextHelper > mpText
The accessible text engine.
AccessibleShapeTreeInfo maShapeTreeInfo
Bundle of information passed to all shapes in a document tree.
This base class provides a base implementation for all shapes.
exports com.sun.star. beans
This class is a container for the information specific for a single shape that is passed to the const...
void setIndexInParent(sal_Int32 _nIndex)
set the index _nIndex at the accessible shape
SdrObject * m_pShape
This object can be removed when we have an extra interface to ask if the shape is selected...
This class bundles all information that is passed down the tree of accessible shapes so that each sha...
css::uno::Any SAL_CALL queryInterface(const css::uno::Type &rType, Interface1 *p1)