| /* |
| * Copyright (c) 2005, 2015, Oracle and/or its affiliates. All rights reserved. |
| * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
| * |
| * This code is free software; you can redistribute it and/or modify it |
| * under the terms of the GNU General Public License version 2 only, as |
| * published by the Free Software Foundation. Oracle designates this |
| * particular file as subject to the "Classpath" exception as provided |
| * by Oracle in the LICENSE file that accompanied this code. |
| * |
| * This code is distributed in the hope that it will be useful, but WITHOUT |
| * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
| * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
| * version 2 for more details (a copy is included in the LICENSE file that |
| * accompanied this code). |
| * |
| * You should have received a copy of the GNU General Public License version |
| * 2 along with this work; if not, write to the Free Software Foundation, |
| * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
| * |
| * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
| * or visit www.oracle.com if you need additional information or have any |
| * questions. |
| */ |
| |
| /* |
| * A class to manage JNI calls into AccessBridge.java |
| */ |
| |
| #include "AccessBridgePackages.h" |
| |
| #include <windows.h> |
| #include <jni.h> |
| |
| #ifndef __AccessBridgeJavaEntryPoints_H__ |
| #define __AccessBridgeJavaEntryPoints_H__ |
| |
| class AccessBridgeJavaEntryPoints { |
| JNIEnv *jniEnv; |
| |
| jobject accessBridgeObject; |
| |
| jclass bridgeClass; |
| jclass eventHandlerClass; |
| |
| jmethodID decrementReferenceMethod; |
| jmethodID getJavaVersionPropertyMethod; |
| |
| jmethodID isJavaWindowMethod; |
| jmethodID isSameObjectMethod; |
| jmethodID getAccessibleContextFromHWNDMethod; |
| jmethodID getHWNDFromAccessibleContextMethod; |
| |
| jmethodID getAccessibleContextAtMethod; |
| jmethodID getAccessibleContextWithFocusMethod; |
| |
| jmethodID getAccessibleNameFromContextMethod; |
| jmethodID getAccessibleDescriptionFromContextMethod; |
| jmethodID getAccessibleRoleStringFromContextMethod; |
| jmethodID getAccessibleRoleStringFromContext_en_USMethod; |
| jmethodID getAccessibleStatesStringFromContextMethod; |
| jmethodID getAccessibleStatesStringFromContext_en_USMethod; |
| jmethodID getAccessibleParentFromContextMethod; |
| jmethodID getAccessibleIndexInParentFromContextMethod; |
| jmethodID getAccessibleChildrenCountFromContextMethod; |
| jmethodID getAccessibleChildFromContextMethod; |
| jmethodID getAccessibleBoundsOnScreenFromContextMethod; |
| jmethodID getAccessibleXcoordFromContextMethod; |
| jmethodID getAccessibleYcoordFromContextMethod; |
| jmethodID getAccessibleHeightFromContextMethod; |
| jmethodID getAccessibleWidthFromContextMethod; |
| |
| jmethodID getAccessibleComponentFromContextMethod; |
| jmethodID getAccessibleActionFromContextMethod; |
| jmethodID getAccessibleSelectionFromContextMethod; |
| jmethodID getAccessibleTextFromContextMethod; |
| jmethodID getAccessibleValueFromContextMethod; |
| |
| /* begin AccessibleTable */ |
| jmethodID getAccessibleTableFromContextMethod; |
| jmethodID getAccessibleTableRowHeaderMethod; |
| jmethodID getAccessibleTableColumnHeaderMethod; |
| jmethodID getAccessibleTableRowCountMethod; |
| jmethodID getAccessibleTableColumnCountMethod; |
| jmethodID getAccessibleTableCaptionMethod; |
| jmethodID getAccessibleTableSummaryMethod; |
| |
| jmethodID getContextFromAccessibleTableMethod; |
| jmethodID getAccessibleTableCellAccessibleContextMethod; |
| jmethodID getAccessibleTableCellIndexMethod; |
| jmethodID getAccessibleTableCellRowExtentMethod; |
| jmethodID getAccessibleTableCellColumnExtentMethod; |
| jmethodID isAccessibleTableCellSelectedMethod; |
| |
| jmethodID getAccessibleTableRowHeaderRowCountMethod; |
| jmethodID getAccessibleTableColumnHeaderRowCountMethod; |
| |
| jmethodID getAccessibleTableRowHeaderColumnCountMethod; |
| jmethodID getAccessibleTableColumnHeaderColumnCountMethod; |
| |
| jmethodID getAccessibleTableRowDescriptionMethod; |
| jmethodID getAccessibleTableColumnDescriptionMethod; |
| |
| jmethodID getAccessibleTableRowSelectionCountMethod; |
| jmethodID isAccessibleTableRowSelectedMethod; |
| jmethodID getAccessibleTableRowSelectionsMethod; |
| |
| jmethodID getAccessibleTableColumnSelectionCountMethod; |
| jmethodID isAccessibleTableColumnSelectedMethod; |
| jmethodID getAccessibleTableColumnSelectionsMethod; |
| |
| jmethodID getAccessibleTableRowMethod; |
| jmethodID getAccessibleTableColumnMethod; |
| jmethodID getAccessibleTableIndexMethod; |
| |
| /* end AccessibleTable */ |
| |
| /* begin AccessibleRelationSet */ |
| |
| jmethodID getAccessibleRelationSetMethod; |
| jmethodID getAccessibleRelationCountMethod; |
| jmethodID getAccessibleRelationKeyMethod; |
| jmethodID getAccessibleRelationTargetCountMethod; |
| jmethodID getAccessibleRelationTargetMethod; |
| |
| /* end AccessibleRelationSet */ |
| |
| // AccessibleHypertext methods |
| jmethodID getAccessibleHypertextMethod; |
| jmethodID getAccessibleHyperlinkCountMethod; |
| jmethodID getAccessibleHyperlinkTextMethod; |
| jmethodID getAccessibleHyperlinkURLMethod; |
| jmethodID getAccessibleHyperlinkStartIndexMethod; |
| jmethodID getAccessibleHyperlinkEndIndexMethod; |
| jmethodID getAccessibleHypertextLinkIndexMethod; |
| jmethodID getAccessibleHyperlinkMethod; |
| jmethodID activateAccessibleHyperlinkMethod; |
| |
| // AccessibleKeyBinding |
| jmethodID getAccessibleKeyBindingsCountMethod; |
| jmethodID getAccessibleKeyBindingCharMethod; |
| jmethodID getAccessibleKeyBindingModifiersMethod; |
| |
| // AccessibleIcon |
| jmethodID getAccessibleIconsCountMethod; |
| jmethodID getAccessibleIconDescriptionMethod; |
| jmethodID getAccessibleIconHeightMethod; |
| jmethodID getAccessibleIconWidthMethod; |
| |
| // AccessibleAction |
| jmethodID getAccessibleActionsCountMethod; |
| jmethodID getAccessibleActionNameMethod; |
| jmethodID doAccessibleActionsMethod; |
| |
| // AccessibleText |
| jmethodID getAccessibleCharCountFromContextMethod; |
| jmethodID getAccessibleCaretPositionFromContextMethod; |
| jmethodID getAccessibleIndexAtPointFromContextMethod; |
| |
| jmethodID getAccessibleLetterAtIndexFromContextMethod; |
| jmethodID getAccessibleWordAtIndexFromContextMethod; |
| jmethodID getAccessibleSentenceAtIndexFromContextMethod; |
| |
| jmethodID getAccessibleTextSelectionStartFromContextMethod; |
| jmethodID getAccessibleTextSelectionEndFromContextMethod; |
| jmethodID getAccessibleTextSelectedTextFromContextMethod; |
| jmethodID getAccessibleAttributesAtIndexFromContextMethod; |
| jmethodID getAccessibleAttributeSetAtIndexFromContextMethod; |
| jmethodID getAccessibleTextRectAtIndexFromContextMethod; |
| jmethodID getAccessibleXcoordTextRectAtIndexFromContextMethod; |
| jmethodID getAccessibleYcoordTextRectAtIndexFromContextMethod; |
| jmethodID getAccessibleHeightTextRectAtIndexFromContextMethod; |
| jmethodID getAccessibleWidthTextRectAtIndexFromContextMethod; |
| jmethodID getAccessibleTextLineLeftBoundsFromContextMethod; |
| jmethodID getAccessibleTextLineRightBoundsFromContextMethod; |
| jmethodID getAccessibleTextRangeFromContextMethod; |
| |
| jmethodID getCurrentAccessibleValueFromContextMethod; |
| jmethodID getMaximumAccessibleValueFromContextMethod; |
| jmethodID getMinimumAccessibleValueFromContextMethod; |
| |
| jmethodID addAccessibleSelectionFromContextMethod; |
| jmethodID clearAccessibleSelectionFromContextMethod; |
| jmethodID getAccessibleSelectionContextFromContextMethod; |
| jmethodID getAccessibleSelectionCountFromContextMethod; |
| jmethodID isAccessibleChildSelectedFromContextMethod; |
| jmethodID removeAccessibleSelectionFromContextMethod; |
| jmethodID selectAllAccessibleSelectionFromContextMethod; |
| |
| jmethodID addJavaEventNotificationMethod; |
| jmethodID removeJavaEventNotificationMethod; |
| jmethodID addAccessibilityEventNotificationMethod; |
| jmethodID removeAccessibilityEventNotificationMethod; |
| |
| jmethodID getBoldFromAttributeSetMethod; |
| jmethodID getItalicFromAttributeSetMethod; |
| jmethodID getUnderlineFromAttributeSetMethod; |
| jmethodID getStrikethroughFromAttributeSetMethod; |
| jmethodID getSuperscriptFromAttributeSetMethod; |
| jmethodID getSubscriptFromAttributeSetMethod; |
| jmethodID getBackgroundColorFromAttributeSetMethod; |
| jmethodID getForegroundColorFromAttributeSetMethod; |
| jmethodID getFontFamilyFromAttributeSetMethod; |
| jmethodID getFontSizeFromAttributeSetMethod; |
| jmethodID getAlignmentFromAttributeSetMethod; |
| jmethodID getBidiLevelFromAttributeSetMethod; |
| jmethodID getFirstLineIndentFromAttributeSetMethod; |
| jmethodID getLeftIndentFromAttributeSetMethod; |
| jmethodID getRightIndentFromAttributeSetMethod; |
| jmethodID getLineSpacingFromAttributeSetMethod; |
| jmethodID getSpaceAboveFromAttributeSetMethod; |
| jmethodID getSpaceBelowFromAttributeSetMethod; |
| |
| jmethodID setTextContentsMethod; |
| jmethodID getParentWithRoleMethod; |
| jmethodID getTopLevelObjectMethod; |
| jmethodID getParentWithRoleElseRootMethod; |
| jmethodID getObjectDepthMethod; |
| jmethodID getActiveDescendentMethod; |
| |
| /** |
| * Additional methods for Teton |
| */ |
| jmethodID getVirtualAccessibleNameFromContextMethod; // Ben Key |
| jmethodID requestFocusMethod; |
| jmethodID selectTextRangeMethod; |
| jmethodID getTextAttributesInRangeMethod; |
| jmethodID getVisibleChildrenCountMethod; |
| jmethodID getVisibleChildMethod; |
| jmethodID setCaretPositionMethod; |
| |
| jmethodID getCaretLocationMethod; |
| jmethodID getCaretLocationXMethod; |
| jmethodID getCaretLocationYMethod; |
| jmethodID getCaretLocationHeightMethod; |
| jmethodID getCaretLocationWidthMethod; |
| |
| public: |
| AccessBridgeJavaEntryPoints(JNIEnv *jniEnvironment, jobject bridgeObject); |
| ~AccessBridgeJavaEntryPoints(); |
| BOOL BuildJavaEntryPoints(); |
| |
| // HWND management methods |
| BOOL isJavaWindow(jint window); |
| jobject getAccessibleContextFromHWND(jint window); |
| HWND getHWNDFromAccessibleContext(jobject accessibleContext); |
| |
| // version methods |
| BOOL getVersionInfo(AccessBridgeVersionInfo *info); |
| |
| // verification methods |
| BOOL verifyAccessibleText(jobject obj); |
| |
| /* ===== utility methods ===== */ |
| BOOL isSameObject(jobject obj1, jobject obj2); |
| BOOL setTextContents(const jobject accessibleContext, const wchar_t *text); |
| jobject getParentWithRole (const jobject accessibleContext, const wchar_t *role); |
| jobject getTopLevelObject (const jobject accessibleContext); |
| jobject getParentWithRoleElseRoot (const jobject accessibleContext, const wchar_t *role); |
| jint getObjectDepth (const jobject accessibleContext); |
| jobject getActiveDescendent (const jobject accessibleContext); |
| |
| // Accessible Context methods |
| jobject getAccessibleContextAt(jint x, jint y, jobject AccessibleContext); |
| jobject getAccessibleContextWithFocus(); |
| BOOL getAccessibleContextInfo(jobject AccessibleContext, AccessibleContextInfo *info); |
| jobject getAccessibleChildFromContext(jobject AccessibleContext, jint childIndex); |
| jobject getAccessibleParentFromContext(jobject AccessibleContext); |
| |
| /* begin AccessibleTable methods */ |
| |
| BOOL getAccessibleTableInfo(jobject acParent, AccessibleTableInfo *tableInfo); |
| BOOL getAccessibleTableCellInfo(jobject accessibleTable,jint row, jint column, |
| AccessibleTableCellInfo *tableCellInfo); |
| |
| BOOL getAccessibleTableRowHeader(jobject acParent, AccessibleTableInfo *tableInfo); |
| BOOL getAccessibleTableColumnHeader(jobject acParent, AccessibleTableInfo *tableInfo); |
| |
| jobject getAccessibleTableRowDescription(jobject acParent, jint row); |
| jobject getAccessibleTableColumnDescription(jobject acParent, jint column); |
| |
| jint getAccessibleTableRowSelectionCount(jobject accessibleTable); |
| BOOL isAccessibleTableRowSelected(jobject accessibleTable, jint row); |
| BOOL getAccessibleTableRowSelections(jobject accessibleTable, jint count, jint *selections); |
| |
| jint getAccessibleTableColumnSelectionCount(jobject accessibleTable); |
| BOOL isAccessibleTableColumnSelected(jobject accessibleTable, jint column); |
| BOOL getAccessibleTableColumnSelections(jobject accessibleTable, jint count, jint *selections); |
| |
| jint getAccessibleTableRow(jobject accessibleTable, jint index); |
| jint getAccessibleTableColumn(jobject accessibleTable, jint index); |
| jint getAccessibleTableIndex(jobject accessibleTable, jint row, jint column); |
| |
| /* end AccessibleTable methods */ |
| |
| BOOL getAccessibleRelationSet(jobject accessibleContext, AccessibleRelationSetInfo *relationSetInfo); |
| |
| // AccessibleHypertext methods |
| BOOL getAccessibleHypertext(jobject accessibleContext, AccessibleHypertextInfo *hyperlink); |
| |
| BOOL activateAccessibleHyperlink(jobject accessibleContext, jobject accessibleHyperlink); |
| |
| BOOL getAccessibleHypertextExt(const jobject accessibleContext, |
| const jint nStartIndex, |
| /* OUT */ AccessibleHypertextInfo *hypertext); |
| jint getAccessibleHyperlinkCount(const jobject accessibleContext); |
| jint getAccessibleHypertextLinkIndex(const jobject accessibleContext, |
| const jint nIndex); |
| BOOL getAccessibleHyperlink(const jobject accessibleContext, |
| const jint nIndex, |
| /* OUT */ AccessibleHyperlinkInfo *hyperlinkInfo); |
| |
| // Accessible Keybinding methods |
| BOOL getAccessibleKeyBindings(jobject accessibleContext, AccessibleKeyBindings *keyBindings); |
| |
| // AccessibleIcon methods |
| BOOL getAccessibleIcons(jobject accessibleContext, AccessibleIcons *icons); |
| |
| // AccessibleActionMethods |
| BOOL getAccessibleActions(jobject accessibleContext, AccessibleActions *actions); |
| BOOL doAccessibleActions(jobject accessibleContext, AccessibleActionsToDo *actionsToDo, jint *failure); |
| |
| // Accessible Text methods |
| BOOL getAccessibleTextInfo(jobject AccessibleContext, AccessibleTextInfo *textInfo, jint x, jint y); |
| BOOL getAccessibleTextItems(jobject AccessibleContext, AccessibleTextItemsInfo *textItems, jint index); |
| BOOL getAccessibleTextSelectionInfo(jobject AccessibleContext, AccessibleTextSelectionInfo *selectionInfo); |
| BOOL getAccessibleTextAttributes(jobject AccessibleContext, jint index, AccessibleTextAttributesInfo *attributes); |
| BOOL getAccessibleTextRect(jobject AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index); |
| BOOL getAccessibleCaretRect(jobject AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index); |
| BOOL getAccessibleTextLineBounds(jobject AccessibleContext, jint index, jint *startIndex, jint *endIndex); |
| BOOL getAccessibleTextRange(jobject AccessibleContext, jint start, jint end, wchar_t *text, short len); |
| |
| // Accessible Value methods |
| BOOL getCurrentAccessibleValueFromContext(jobject AccessibleContext, wchar_t *value, short len); |
| BOOL getMaximumAccessibleValueFromContext(jobject AccessibleContext, wchar_t *value, short len); |
| BOOL getMinimumAccessibleValueFromContext(jobject AccessibleContext, wchar_t *value, short len); |
| |
| // Accessible Selection methods |
| void addAccessibleSelectionFromContext(jobject AccessibleContext, int i); |
| void clearAccessibleSelectionFromContext(jobject AccessibleContext); |
| jobject getAccessibleSelectionFromContext(jobject AccessibleContext, int i); |
| int getAccessibleSelectionCountFromContext(jobject AccessibleContext); |
| BOOL isAccessibleChildSelectedFromContext(jobject AccessibleContext, int i); |
| void removeAccessibleSelectionFromContext(jobject AccessibleContext, int i); |
| void selectAllAccessibleSelectionFromContext(jobject AccessibleContext); |
| |
| // Event handling methods |
| BOOL addJavaEventNotification(jlong type); |
| BOOL removeJavaEventNotification(jlong type); |
| BOOL addAccessibilityEventNotification(jlong type); |
| BOOL removeAccessibilityEventNotification(jlong type); |
| |
| /** |
| * Additional methods for Teton |
| */ |
| |
| /** |
| * Gets the AccessibleName for a component based upon the JAWS algorithm. Returns |
| * whether successful. |
| * |
| * Bug ID 4916682 - Implement JAWS AccessibleName policy |
| */ |
| BOOL getVirtualAccessibleName(const jobject accessibleContext, wchar_t *name, int len); |
| |
| /** |
| * Request focus for a component. Returns whether successful; |
| * |
| * Bug ID 4944757 - requestFocus method needed |
| */ |
| BOOL requestFocus(const jobject accessibleContext); |
| |
| /** |
| * Selects text between two indices. Selection includes the text at the start index |
| * and the text at the end index. Returns whether successful; |
| * |
| * Bug ID 4944758 - selectTextRange method needed |
| */ |
| BOOL selectTextRange(const jobject accessibleContext, int startIndex, int endIndex); |
| |
| /** |
| * Get text attributes between two indices. The attribute list includes the text at the |
| * start index and the text at the end index. Returns whether successful; |
| * |
| * Bug ID 4944761 - getTextAttributes between two indices method needed |
| */ |
| BOOL getTextAttributesInRange(const jobject accessibleContext, int startIndex, int endIndex, |
| AccessibleTextAttributesInfo *attributes, short *len); |
| |
| /** |
| * Gets the number of visible children of a component. Returns -1 on error. |
| * |
| * Bug ID 4944762- getVisibleChildren for list-like components needed |
| */ |
| int getVisibleChildrenCount(const jobject accessibleContext); |
| |
| /** |
| * Gets the visible children of an AccessibleContext. Returns whether successful; |
| * |
| * Bug ID 4944762- getVisibleChildren for list-like components needed |
| */ |
| BOOL getVisibleChildren(const jobject accessibleContext, const int startIndex, |
| VisibleChildrenInfo *visibleChildrenInfo); |
| |
| /** |
| * Set the caret to a text position. Returns whether successful; |
| * |
| * Bug ID 4944770 - setCaretPosition method needed |
| */ |
| BOOL setCaretPosition(const jobject accessibleContext, int position); |
| |
| /** |
| * Gets the bounding rectangle for the text caret |
| */ |
| BOOL getCaretLocation(jobject AccessibleContext, AccessibleTextRectInfo *rectInfo, jint index); |
| |
| }; |
| |
| #endif |