< prev index next >

src/java.desktop/macosx/native/libawt_lwawt/awt/JavaComponentAccessibility.m

Print this page

        

@@ -52,10 +52,11 @@
 #define JAVA_AX_SELECTED_CHILDREN (-2)
 #define JAVA_AX_VISIBLE_CHILDREN (-3)
 // If the value is >=0, it's an index
 
 static JNF_STATIC_MEMBER_CACHE(jm_getChildrenAndRoles, sjc_CAccessibility, "getChildrenAndRoles", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;IZ)[Ljava/lang/Object;");
+static JNF_STATIC_MEMBER_CACHE(jm_getTableInfo, sjc_CAccessibility, "getTableInfo", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;I)I");
 static JNF_STATIC_MEMBER_CACHE(sjm_getAccessibleComponent, sjc_CAccessibility, "getAccessibleComponent", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljavax/accessibility/AccessibleComponent;");
 static JNF_STATIC_MEMBER_CACHE(sjm_getAccessibleValue, sjc_CAccessibility, "getAccessibleValue", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljavax/accessibility/AccessibleValue;");
 static JNF_STATIC_MEMBER_CACHE(sjm_getAccessibleName, sjc_CAccessibility, "getAccessibleName", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljava/lang/String;");
 static JNF_STATIC_MEMBER_CACHE(sjm_getAccessibleDescription, sjc_CAccessibility, "getAccessibleDescription", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Ljava/lang/String;");
 static JNF_STATIC_MEMBER_CACHE(sjm_isFocusTraversable, sjc_CAccessibility, "isFocusTraversable", "(Ljavax/accessibility/Accessible;Ljava/awt/Component;)Z");

@@ -115,10 +116,18 @@
 - (BOOL)accessibilityIsVerticalScrollBarAttributeSettable;
 - (id)accessibilityHorizontalScrollBarAttribute;
 - (BOOL)accessibilityIsHorizontalScrollBarAttributeSettable;
 @end
 
+@interface TableAccessibility : JavaComponentAccessibility {
+
+}
+- (NSArray *)initializeAttributeNamesWithEnv:(JNIEnv *)env;
+- (NSArray *)accessibilityRowsAttribute;
+- (NSArray *)accessibilityColumnsAttribute;
+@end
+
 
 @implementation JavaComponentAccessibility
 
 - (NSString *)description
 {

@@ -368,10 +377,12 @@
 
     // otherwise, create a new instance
     JavaComponentAccessibility *newChild = nil;
     if ([javaRole isEqualToString:@"pagetablist"]) {
         newChild = [TabGroupAccessibility alloc];
+    } else if ([javaRole isEqualToString:@"table"]) {
+        newChild = [TableAccessibility alloc];
     } else if ([javaRole isEqualToString:@"scrollpane"]) {
         newChild = [ScrollAreaAccessibility alloc];
     } else {
         NSString *nsRole = [sRoles objectForKey:javaRole];
         if ([nsRole isEqualToString:NSAccessibilityStaticTextRole] || [nsRole isEqualToString:NSAccessibilityTextAreaRole] || [nsRole isEqualToString:NSAccessibilityTextFieldRole]) {

@@ -482,11 +493,12 @@
     }
 
     // children
     if (attributeStatesArray[6]) {
         [attributeNames addObject:NSAccessibilityChildrenAttribute];
-        if ([javaRole isEqualToString:@"list"]) {
+        if ([javaRole isEqualToString:@"list"]
+                || [javaRole isEqualToString:@"table"]) {
             [attributeNames addObject:NSAccessibilitySelectedChildrenAttribute];
             [attributeNames addObject:NSAccessibilityVisibleChildrenAttribute];
         }
         // Just above, the below mentioned support has been added back in for lists.
         // However, the following comments may still be useful for future fixes.

@@ -650,11 +662,13 @@
             return names;
         }
         id myParent = [self accessibilityParentAttribute];
         if ([myParent isKindOfClass:[JavaComponentAccessibility class]]) {
             NSString *parentRole = [(JavaComponentAccessibility *)myParent javaRole];
-            if ([parentRole isEqualToString:@"list"]) {
+
+            if ([parentRole isEqualToString:@"list"]
+                    || [parentRole isEqualToString:@"table"]) {
                 NSMutableArray *moreNames =
                     [[NSMutableArray alloc] initWithCapacity: [names count] + 2];
                 [moreNames addObjectsFromArray: names];
                 [moreNames addObject:NSAccessibilitySelectedAttribute];
                 [moreNames addObject:NSAccessibilityIndexAttribute];

@@ -1845,10 +1859,45 @@
     return NO;
 }
 
 @end
 
+// these constants are duplicated in CAccessibility.java
+#define JAVA_AX_ROWS (1)
+#define JAVA_AX_COLS (2)
+
+@implementation TableAccessibility
+
+- (NSArray *)initializeAttributeNamesWithEnv:(JNIEnv *)env
+{
+    NSMutableArray *names = (NSMutableArray *)[super initializeAttributeNamesWithEnv:env];
+
+    [names addObject:NSAccessibilityRowCountAttribute];
+    [names addObject:NSAccessibilityColumnCountAttribute];
+    return names;
+}
+
+- (id)getTableInfo:(jint)info {
+    if (fAccessible == NULL) return 0;
+
+    JNIEnv* env = [ThreadUtilities getJNIEnv];
+    jint count = JNFCallStaticIntMethod(env, jm_getTableInfo, fAccessible,
+                                        fComponent, info);
+    NSNumber *index = [NSNumber numberWithInt:count];
+    return index;
+}
+
+
+- (id)accessibilityRowCountAttribute {
+    return [self getTableInfo:JAVA_AX_ROWS];
+}
+
+- (id)accessibilityColumnCountAttribute {
+    return [self getTableInfo:JAVA_AX_COLS];
+}
+@end
+
 /*
  * Returns Object.equals for the two items
  * This may use LWCToolkit.invokeAndWait(); don't call while holding fLock
  * and try to pass a component so the event happens on the correct thread.
  */
< prev index next >