/* * 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 #include #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