1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */
3 /* This Source Code Form is subject to the terms of the Mozilla Public
4  * License, v. 2.0. If a copy of the MPL was not distributed with this
5  * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
6 
7 #if defined(MOZILLA_INTERNAL_API)
8 #error This code is NOT for internal Gecko use!
9 #endif  // defined(MOZILLA_INTERNAL_API)
10 
11 #ifndef mozilla_a11y_HandlerTextLeaf_h
12 #define mozilla_a11y_HandlerTextLeaf_h
13 
14 #include "AccessibleHandler.h"
15 #include "IUnknownImpl.h"
16 #include "mozilla/RefPtr.h"
17 
18 namespace mozilla {
19 namespace a11y {
20 
21 class HandlerTextLeaf final : public IAccessible2, public IServiceProvider {
22  public:
23   explicit HandlerTextLeaf(IDispatch *aParent, long aIndexInParent, HWND aHwnd,
24                            AccChildData &aData);
25 
26   DECL_IUNKNOWN
27 
28   // IDispatch
29   STDMETHODIMP GetTypeInfoCount(UINT *pctinfo) override;
30   STDMETHODIMP GetTypeInfo(UINT iTInfo, LCID lcid,
31                            ITypeInfo **ppTInfo) override;
32   STDMETHODIMP GetIDsOfNames(REFIID riid, LPOLESTR *rgszNames, UINT cNames,
33                              LCID lcid, DISPID *rgDispId) override;
34   STDMETHODIMP Invoke(DISPID dispIdMember, REFIID riid, LCID lcid, WORD wFlags,
35                       DISPPARAMS *pDispParams, VARIANT *pVarResult,
36                       EXCEPINFO *pExcepInfo, UINT *puArgErr) override;
37 
38   // IAccessible
39   STDMETHODIMP get_accParent(IDispatch **ppdispParent) override;
40   STDMETHODIMP get_accChildCount(long *pcountChildren) override;
41   STDMETHODIMP get_accChild(VARIANT varChild, IDispatch **ppdispChild) override;
42   STDMETHODIMP get_accName(VARIANT varChild, BSTR *pszName) override;
43   STDMETHODIMP get_accValue(VARIANT varChild, BSTR *pszValue) override;
44   STDMETHODIMP get_accDescription(VARIANT varChild,
45                                   BSTR *pszDescription) override;
46   STDMETHODIMP get_accRole(VARIANT varChild, VARIANT *pvarRole) override;
47   STDMETHODIMP get_accState(VARIANT varChild, VARIANT *pvarState) override;
48   STDMETHODIMP get_accHelp(VARIANT varChild, BSTR *pszHelp) override;
49   STDMETHODIMP get_accHelpTopic(BSTR *pszHelpFile, VARIANT varChild,
50                                 long *pidTopic) override;
51   STDMETHODIMP get_accKeyboardShortcut(VARIANT varChild,
52                                        BSTR *pszKeyboardShortcut) override;
53   STDMETHODIMP get_accFocus(VARIANT *pvarChild) override;
54   STDMETHODIMP get_accSelection(VARIANT *pvarChildren) override;
55   STDMETHODIMP get_accDefaultAction(VARIANT varChild,
56                                     BSTR *pszDefaultAction) override;
57   STDMETHODIMP accSelect(long flagsSelect, VARIANT varChild) override;
58   STDMETHODIMP accLocation(long *pxLeft, long *pyTop, long *pcxWidth,
59                            long *pcyHeight, VARIANT varChild) override;
60   STDMETHODIMP accNavigate(long navDir, VARIANT varStart,
61                            VARIANT *pvarEndUpAt) override;
62   STDMETHODIMP accHitTest(long xLeft, long yTop, VARIANT *pvarChild) override;
63   STDMETHODIMP accDoDefaultAction(VARIANT varChild) override;
64   STDMETHODIMP put_accName(VARIANT varChild, BSTR szName) override;
65   STDMETHODIMP put_accValue(VARIANT varChild, BSTR szValue) override;
66 
67   // IAccessible2
68   STDMETHODIMP get_nRelations(long *nRelations) override;
69   STDMETHODIMP get_relation(long relationIndex,
70                             IAccessibleRelation **relation) override;
71   STDMETHODIMP get_relations(long maxRelations, IAccessibleRelation **relations,
72                              long *nRelations) override;
73   STDMETHODIMP role(long *role) override;
74   STDMETHODIMP scrollTo(IA2ScrollType scrollType) override;
75   STDMETHODIMP scrollToPoint(IA2CoordinateType coordinateType, long x,
76                              long y) override;
77   STDMETHODIMP get_groupPosition(long *groupLevel, long *similarItemsInGroup,
78                                  long *positionInGroup) override;
79   STDMETHODIMP get_states(AccessibleStates *states) override;
80   STDMETHODIMP get_extendedRole(BSTR *extendedRole) override;
81   STDMETHODIMP get_localizedExtendedRole(BSTR *localizedExtendedRole) override;
82   STDMETHODIMP get_nExtendedStates(long *nExtendedStates) override;
83   STDMETHODIMP get_extendedStates(long maxExtendedStates, BSTR **extendedStates,
84                                   long *nExtendedStates) override;
85   STDMETHODIMP get_localizedExtendedStates(
86       long maxLocalizedExtendedStates, BSTR **localizedExtendedStates,
87       long *nLocalizedExtendedStates) override;
88   STDMETHODIMP get_uniqueID(long *uniqueID) override;
89   STDMETHODIMP get_windowHandle(HWND *windowHandle) override;
90   STDMETHODIMP get_indexInParent(long *indexInParent) override;
91   STDMETHODIMP get_locale(IA2Locale *locale) override;
92   STDMETHODIMP get_attributes(BSTR *attributes) override;
93 
94   // IServiceProvider
95   STDMETHODIMP QueryService(REFGUID aServiceId, REFIID aIid,
96                             void **aOutInterface) override;
97 
98  private:
99   ~HandlerTextLeaf();
100 
101   RefPtr<IDispatch> mParent;
102   long mIndexInParent;
103   HWND mHwnd;
104   AccChildData mData;
105 };
106 
107 }  // namespace a11y
108 }  // namespace mozilla
109 
110 #endif  // mozilla_a11y_HandlerTextLeaf_h
111