1 /*
2  * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.  Oracle designates this
8  * particular file as subject to the "Classpath" exception as provided
9  * by Oracle in the LICENSE file that accompanied this code.
10  *
11  * This code is distributed in the hope that it will be useful, but WITHOUT
12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
14  * version 2 for more details (a copy is included in the LICENSE file that
15  * accompanied this code).
16  *
17  * You should have received a copy of the GNU General Public License version
18  * 2 along with this work; if not, write to the Free Software Foundation,
19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20  *
21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22  * or visit www.oracle.com if you need additional information or have any
23  * questions.
24  */
25 
26 /*
27  * Glue routines called by Windows AT into the WindowsAccessBridge dll
28  */
29 
30 #ifndef __AccessBridgeWindowsEntryPoints_H__
31 #define __AccessBridgeWindowsEntryPoints_H__
32 
33 #include <windows.h>
34 #include <jni.h>
35 
36 #include "AccessBridgePackages.h"
37 #include "AccessBridgeCallbacks.h"
38 
39 #ifdef __cplusplus
40 extern "C" {
41 #endif
42 
43     void Windows_run();
44 
45     void releaseJavaObject(long vmID, JOBJECT64 object);
46     void getVersionInfo(long vmID, AccessBridgeVersionInfo *info);
47 
48     // Window related functions
49     HWND getTopLevelHWND(HWND descendent);
50     BOOL isJavaWindow(HWND window);
51     BOOL getAccessibleContextFromHWND(HWND window, long *vmID, JOBJECT64 *AccessibleContext);
52     HWND getHWNDFromAccessibleContext(long vmID, JOBJECT64 accessibleContext);
53 
54     // returns whether two objects are the same
55     BOOL isSameObject(long vmID, JOBJECT64 obj1, JOBJECT64 obj2);
56 
57     // Accessible Context functions
58     BOOL getAccessibleContextAt(long vmID, JOBJECT64 AccessibleContextParent,
59                                 jint x, jint y, JOBJECT64 *AccessibleContext);
60     BOOL getAccessibleContextWithFocus(HWND window, long *vmID, JOBJECT64 *AccessibleContext);
61     BOOL getAccessibleContextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleContextInfo *info);
62     JOBJECT64 getAccessibleChildFromContext(long vmID, JOBJECT64 AccessibleContext, jint childIndex);
63     JOBJECT64 getAccessibleParentFromContext(long vmID, JOBJECT64 AccessibleContext);
64 
65     /* begin AccessibleTable */
66     BOOL getAccessibleTableInfo(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);
67     BOOL getAccessibleTableCellInfo(long vmID, JOBJECT64 accessibleTable, jint row, jint column,
68                                     AccessibleTableCellInfo *tableCellInfo);
69 
70     BOOL getAccessibleTableRowHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);
71     BOOL getAccessibleTableColumnHeader(long vmID, JOBJECT64 acParent, AccessibleTableInfo *tableInfo);
72 
73     JOBJECT64 getAccessibleTableRowDescription(long vmID, JOBJECT64 acParent, jint row);
74     JOBJECT64 getAccessibleTableColumnDescription(long vmID, JOBJECT64 acParent, jint column);
75 
76     jint getAccessibleTableRowSelectionCount(long vmID, JOBJECT64 accessibleTable);
77     BOOL isAccessibleTableRowSelected(long vmID, JOBJECT64 accessibleTable, jint row);
78     BOOL getAccessibleTableRowSelections(long vmID, JOBJECT64 accessibleTable, jint count,
79                                          jint *selections);
80 
81     jint getAccessibleTableColumnSelectionCount(long vmID, JOBJECT64 accessibleTable);
82     BOOL isAccessibleTableColumnSelected(long vmID, JOBJECT64 accessibleTable, jint column);
83     BOOL getAccessibleTableColumnSelections(long vmID, JOBJECT64 accessibleTable, jint count,
84                                             jint *selections);
85 
86     jint getAccessibleTableRow(long vmID, JOBJECT64 accessibleTable, jint index);
87     jint getAccessibleTableColumn(long vmID, JOBJECT64 accessibleTable, jint index);
88     jint getAccessibleTableIndex(long vmID, JOBJECT64 accessibleTable, jint row, jint column);
89 
90     /* end AccessibleTable */
91 
92     BOOL getAccessibleRelationSet(long vmID, JOBJECT64 accessibleContext,
93                                   AccessibleRelationSetInfo *relationSetInfo);
94 
95     // AccessibleHypertext methods
96     BOOL getAccessibleHypertext(long vmID, JOBJECT64 accessibleContext, AccessibleHypertextInfo *hypertextInfo);
97 
98     BOOL activateAccessibleHyperlink(long vmID, JOBJECT64 accessibleContext, JOBJECT64 accessibleHyperlink);
99 
100     jint getAccessibleHyperlinkCount(const long vmID,
101                                      const AccessibleContext accessibleContext);
102 
103     BOOL getAccessibleHypertextExt(const long vmID,
104                                    const AccessibleContext accessibleContext,
105                                    const jint nStartIndex,
106                                    /* OUT */ AccessibleHypertextInfo *hypertextInfo);
107 
108     jint getAccessibleHypertextLinkIndex(const long vmID,
109                                          const AccessibleHypertext hypertext,
110                                          const jint nIndex);
111 
112     BOOL getAccessibleHyperlink(const long vmID,
113                                 const AccessibleHypertext hypertext,
114                                 const jint nIndex,
115                                 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo);
116 
117 
118     /* Accessible KeyBindings, Icons and Actions */
119     BOOL getAccessibleKeyBindings(long vmID, JOBJECT64 accessibleContext,
120                                   AccessibleKeyBindings *keyBindings);
121 
122     BOOL getAccessibleIcons(long vmID, JOBJECT64 accessibleContext,
123                             AccessibleIcons *icons);
124 
125     BOOL getAccessibleActions(long vmID, JOBJECT64 accessibleContext,
126                               AccessibleActions *actions);
127 
128     BOOL doAccessibleActions(long vmID, JOBJECT64 accessibleContext,
129                              AccessibleActionsToDo *actionsToDo, jint *failure);
130 
131     /* ----- Additional AccessibleHypertext methods for Teton */
132 
133 
134     jint getAccessibleHypertextLinkCount(const long vmID,
135                                          const AccessibleContext accessibleContext);
136 
137     BOOL getAccessibleHypertextExt(const long vmID,
138                                    const AccessibleContext accessibleContext,
139                                    const jint nStartIndex,
140                                    /* OUT */ AccessibleHypertextInfo *hypertextInfo);
141 
142     jint getAccessibleHypertextLinkIndex(const long vmID,
143                                          const AccessibleContext accessibleContext,
144                                          const jint nIndex);
145 
146     BOOL getAccessibleHyperlink(const long vmID,
147                                 const AccessibleContext accessibleContext,
148                                 const jint nIndex,
149                                 /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo);
150 
151 
152     /* Additional utility methods */
153     BOOL setTextContents (const long vmID, const AccessibleContext accessibleContext, const wchar_t *text);
154 
155     AccessibleContext getParentWithRole (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role);
156 
157     AccessibleContext getTopLevelObject (const long vmID, const AccessibleContext accessibleContext);
158 
159     AccessibleContext getParentWithRoleElseRoot (const long vmID, const AccessibleContext accessibleContext, const wchar_t *role);
160 
161     int getObjectDepth (const long vmID, const AccessibleContext accessibleContext);
162 
163     AccessibleContext getActiveDescendent (const long vmID, const AccessibleContext accessibleContext);
164 
165     /**
166      * Additional methods for Teton
167      */
168 
169     /**
170      * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns
171      * whether successful.
172      *
173      * Bug ID 4916682 - Implement JAWS AccessibleName policy
174      */
175     BOOL getVirtualAccessibleName(long vmID, AccessibleContext accessibleContext, wchar_t *name, int len);
176 
177     /**
178      * Request focus for a component. Returns whether successful;
179      *
180      * Bug ID 4944757 - requestFocus method needed
181      */
182     BOOL requestFocus(long vmID, AccessibleContext accessibleContext);
183 
184     /**
185      * Selects text between two indices.  Selection includes the text at the start index
186      * and the text at the end index. Returns whether successful;
187      *
188      * Bug ID 4944758 - selectTextRange method needed
189      */
190     BOOL selectTextRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex);
191 
192     /**
193      * Get text attributes between two indices.  The attribute list includes the text at the
194      * start index and the text at the end index. Returns whether successful;
195      *
196      * Bug ID 4944761 - getTextAttributes between two indices method needed
197      */
198     BOOL getTextAttributesInRange(long vmID, AccessibleContext accessibleContext, int startIndex, int endIndex,
199                                   AccessibleTextAttributesInfo *attributes, short *len);
200 
201     /**
202      * Returns the number of visible children of a component. Returns -1 on error.
203      *
204      * Bug ID 4944762- getVisibleChildren for list-like components needed
205      */
206     int getVisibleChildrenCount(long vmID, AccessibleContext accessibleContext);
207 
208     /**
209      * Gets the visible children of an AccessibleContext. Returns whether successful;
210      *
211      * Bug ID 4944762- getVisibleChildren for list-like components needed
212      */
213     BOOL getVisibleChildren(long vmID, AccessibleContext accessibleContext, int startIndex,
214                             VisibleChildrenInfo *visibleChildrenInfo);
215 
216     /**
217      * Set the caret to a text position. Returns whether successful;
218      *
219      * Bug ID 4944770 - setCaretPosition method needed
220      */
221     BOOL setCaretPosition(long vmID, AccessibleContext accessibleContext, int position);
222 
223     /**
224      * Gets the text caret bounding rectangle
225      */
226     BOOL getCaretLocation(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index);
227 
228     // Accessible Text functions
229     BOOL getAccessibleTextInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextInfo *textInfo, jint x, jint y);
230     BOOL getAccessibleTextItems(long vmID, JOBJECT64 AccessibleContext, AccessibleTextItemsInfo *textItems, jint index);
231     BOOL getAccessibleTextSelectionInfo(long vmID, JOBJECT64 AccessibleContext, AccessibleTextSelectionInfo *selectionInfo);
232     BOOL getAccessibleTextAttributes(long vmID, JOBJECT64 AccessibleContext, jint index, AccessibleTextAttributesInfo *attributes);
233     BOOL getAccessibleTextRect(long vmID, JOBJECT64 AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index);
234     BOOL getAccessibleTextLineBounds(long vmID, JOBJECT64 AccessibleContext, jint index, jint *startIndex, jint *endIndex);
235     BOOL getAccessibleTextRange(long vmID, JOBJECT64 AccessibleContext, jint start, jint end, wchar_t *text, short len);
236 
237     // Accessible Value methods
238     BOOL getCurrentAccessibleValueFromContext(long vmID,JOBJECT64 AccessibleContext, wchar_t *value, short len);
239     BOOL getMaximumAccessibleValueFromContext(long vmID,JOBJECT64 AccessibleContext, wchar_t *value, short len);
240     BOOL getMinimumAccessibleValueFromContext(long vmID,JOBJECT64 AccessibleContext, wchar_t *value, short len);
241 
242     // Accessible Selection methods
243     void addAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
244     void clearAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext);
245     JOBJECT64 getAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
246     int getAccessibleSelectionCountFromContext(long vmID,JOBJECT64 AccessibleContext);
247     BOOL isAccessibleChildSelectedFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
248     void removeAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext, int i);
249     void selectAllAccessibleSelectionFromContext(long vmID,JOBJECT64 AccessibleContext);
250 
251 
252     // PropertyChange Event registry routines
253     void setPropertyChangeFP(AccessBridge_PropertyChangeFP fp);
254 
255     // Java application shutdown
256     void setJavaShutdownFP(AccessBridge_JavaShutdownFP fp);
257 
258     // Focus Event registry routines
259     void setFocusGainedFP(AccessBridge_FocusGainedFP fp);
260     void setFocusLostFP(AccessBridge_FocusLostFP fp);
261 
262     // Caret Event registry routines
263     void setCaretUpdateFP(AccessBridge_CaretUpdateFP fp);
264 
265     // Mouse Event registry routines
266     void setMouseClickedFP(AccessBridge_MouseClickedFP fp);
267     void setMouseEnteredFP(AccessBridge_MouseEnteredFP fp);
268     void setMouseExitedFP(AccessBridge_MouseExitedFP fp);
269     void setMousePressedFP(AccessBridge_MousePressedFP fp);
270     void setMouseReleasedFP(AccessBridge_MouseReleasedFP fp);
271 
272     // Menu/PopupMenu Event registry routines
273     void setMenuCanceledFP(AccessBridge_MenuCanceledFP fp);
274     void setMenuDeselectedFP(AccessBridge_MenuDeselectedFP fp);
275     void setMenuSelectedFP(AccessBridge_MenuSelectedFP fp);
276     void setPopupMenuCanceledFP(AccessBridge_PopupMenuCanceledFP fp);
277     void setPopupMenuWillBecomeInvisibleFP(AccessBridge_PopupMenuWillBecomeInvisibleFP fp);
278     void setPopupMenuWillBecomeVisibleFP(AccessBridge_PopupMenuWillBecomeVisibleFP fp);
279 
280     // Accessibility PropertyChange Event registry routines
281     void setPropertyNameChangeFP(AccessBridge_PropertyNameChangeFP fp);
282     void setPropertyDescriptionChangeFP(AccessBridge_PropertyDescriptionChangeFP fp);
283     void setPropertyStateChangeFP(AccessBridge_PropertyStateChangeFP fp);
284     void setPropertyValueChangeFP(AccessBridge_PropertyValueChangeFP fp);
285     void setPropertySelectionChangeFP(AccessBridge_PropertySelectionChangeFP fp);
286     void setPropertyTextChangeFP(AccessBridge_PropertyTextChangeFP fp);
287     void setPropertyCaretChangeFP(AccessBridge_PropertyCaretChangeFP fp);
288     void setPropertyVisibleDataChangeFP(AccessBridge_PropertyVisibleDataChangeFP fp);
289     void setPropertyChildChangeFP(AccessBridge_PropertyChildChangeFP fp);
290     void setPropertyActiveDescendentChangeFP(AccessBridge_PropertyActiveDescendentChangeFP fp);
291 
292     void setPropertyTableModelChangeFP(AccessBridge_PropertyTableModelChangeFP fp);
293 
294 
295 
296 #ifdef __cplusplus
297 }
298 #endif
299 
300 #endif
301