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