blob: 4233798564f7757a592e789b41b0e733a97721f2 [file] [log] [blame]
/*
* 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