annotate dwt/accessibility/SWTAccessibleDelegate.d @ 45:d8635bb48c7c

Merge with SWT 3.5
author Jacob Carlborg <doob@me.com>
date Mon, 01 Dec 2008 17:07:00 +0100
parents
children cfa563df4fdd
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
45
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
1 /*******************************************************************************
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
2 * Copyright (c) 2000, 2008 IBM Corporation and others.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
3 * All rights reserved. This program and the accompanying materials
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
4 * are made available under the terms of the Eclipse Public License v1.0
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
5 * which accompanies this distribution, and is available at
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
6 * http://www.eclipse.org/legal/epl-v10.html
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
7 *
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
8 * Contributors:
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
9 * IBM Corporation - initial API and implementation
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
10 *******************************************************************************/
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
11 module dwt.accessibility.SWTAccessibleDelegate;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
12
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
13 import dwt.dwthelper.utils;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
14
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
15
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
16 import dwt.DWT;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
17 import dwt.internal.C;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
18 import dwt.internal.Callback;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
19 import dwt.internal.cocoa.NSArray;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
20 import dwt.internal.cocoa.NSObject;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
21 import dwt.internal.cocoa.NSPoint;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
22 import dwt.internal.cocoa.NSString;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
23 import dwt.internal.cocoa.OS;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
24 import dwt.internal.cocoa.id;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
25
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
26 class SWTAccessibleDelegate extends NSObject {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
27
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
28 /**
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
29 * Accessible Key: The string constant for looking up the accessible
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
30 * for a control using <code>getData(String)</code>. When an accessible
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
31 * is created for a control, it is stored as a property in the control
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
32 * using <code>setData(String, Object)</code>.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
33 */
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
34 static final String ACCESSIBLE_KEY = "Accessible"; //$NON-NLS-1$
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
35 static final String DWT_OBJECT = "DWT_OBJECT";
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
36
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
37 static Callback accessible2Args, accessible3Args, accessible4Args;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
38 static int /*long*/ proc2Args, proc3Args, proc4Args;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
39
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
40 Accessible accessibleParent;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
41 int /*long*/ delegateJniRef;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
42 int childID;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
43
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
44 NSArray attributeNames = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
45 NSArray parameterizedAttributeNames = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
46 NSArray actionNames = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
47
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
48 static {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
49 Class clazz = SWTAccessibleDelegate.class;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
50
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
51 accessible2Args = new Callback(clazz, "accessibleProc", 2);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
52 proc2Args = accessible2Args.getAddress();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
53 if (proc2Args is 0) DWT.error (DWT.ERROR_NO_MORE_CALLBACKS);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
54
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
55 accessible3Args = new Callback(clazz, "accessibleProc", 3);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
56 proc3Args = accessible3Args.getAddress();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
57 if (proc3Args is 0) DWT.error (DWT.ERROR_NO_MORE_CALLBACKS);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
58
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
59 accessible4Args = new Callback(clazz, "accessibleProc", 4);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
60 proc4Args = accessible3Args.getAddress();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
61 if (proc4Args is 0) DWT.error (DWT.ERROR_NO_MORE_CALLBACKS);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
62
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
63 // Accessible custom controls need to implement the NSAccessibility protocol. To do that,
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
64 // we dynamically add the methods to the control's class that are required
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
65 // by NSAccessibility. Then, when external assistive technology services are used,
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
66 // those methods get called to provide the needed information.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
67
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
68 String className = "SWTAccessibleDelegate";
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
69
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
70 // TODO: These should either move out of Display or be accessible to this class.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
71 String types = "*";
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
72 int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF is 4 ? 2 : 3;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
73
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
74 int /*long*/ cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
75 OS.class_addIvar(cls, DWT_OBJECT, size, (byte)align, types);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
76
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
77 // Add the NSAccessibility overrides
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
78 OS.class_addMethod(cls, OS.sel_accessibilityActionNames, proc2Args, "@:");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
79 OS.class_addMethod(cls, OS.sel_accessibilityAttributeNames, proc2Args, "@:");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
80 OS.class_addMethod(cls, OS.sel_accessibilityParameterizedAttributeNames, proc2Args, "@:");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
81 OS.class_addMethod(cls, OS.sel_accessibilityIsIgnored, proc2Args, "@:");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
82 OS.class_addMethod(cls, OS.sel_accessibilityFocusedUIElement, proc2Args, "@:");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
83
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
84 OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
85 OS.class_addMethod(cls, OS.sel_accessibilityHitTest_, proc3Args, "@:{NSPoint}");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
86 OS.class_addMethod(cls, OS.sel_accessibilityIsAttributeSettable_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
87 OS.class_addMethod(cls, OS.sel_accessibilityActionDescription_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
88 OS.class_addMethod(cls, OS.sel_accessibilityPerformAction_, proc3Args, "@:@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
89
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
90 OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_forParameter_, proc4Args, "@:@@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
91 OS.class_addMethod(cls, OS.sel_accessibilitySetValue_forAttribute_, proc4Args, "@:@@");
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
92
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
93 OS.objc_registerClassPair(cls);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
94 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
95
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
96
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
97 public SWTAccessibleDelegate(Accessible accessible, int childID) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
98 super(0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
99 this.accessibleParent = accessible;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
100 this.childID = childID;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
101 alloc().init();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
102 delegateJniRef = OS.NewGlobalRef(this);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
103 if (delegateJniRef is 0) DWT.error(DWT.ERROR_NO_HANDLES);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
104 OS.object_setInstanceVariable(this.id, DWT_OBJECT, delegateJniRef);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
105 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
106
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
107 NSArray accessibilityActionNames() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
108
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
109 if (actionNames !is null)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
110 return retainedAutoreleased(actionNames);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
111
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
112 actionNames = accessibleParent.internal_accessibilityActionNames(childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
113 actionNames.retain();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
114 return retainedAutoreleased(actionNames);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
115 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
116
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
117 NSArray accessibilityAttributeNames() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
118
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
119 if (attributeNames !is null)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
120 return retainedAutoreleased(attributeNames);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
121
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
122 attributeNames = accessibleParent.internal_accessibilityAttributeNames(childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
123 attributeNames.retain();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
124 return retainedAutoreleased(attributeNames);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
125 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
126
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
127 id accessibilityAttributeValue(NSString attribute) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
128 return accessibleParent.internal_accessibilityAttributeValue(attribute, childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
129 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
130
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
131 // parameterized attribute methods
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
132 NSArray accessibilityParameterizedAttributeNames() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
133
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
134 if (parameterizedAttributeNames !is null)
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
135 return retainedAutoreleased(parameterizedAttributeNames);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
136
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
137 parameterizedAttributeNames = accessibleParent.internal_accessibilityParameterizedAttributeNames(childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
138 parameterizedAttributeNames.retain();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
139 return retainedAutoreleased(parameterizedAttributeNames);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
140 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
141
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
142 id accessibilityAttributeValue_forParameter(NSString attribute, id parameter) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
143 return accessibleParent.internal_accessibilityAttributeValue_forParameter(attribute, parameter, childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
144 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
145
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
146 // Return YES if the UIElement doesn't show up to the outside world - i.e. its parent should return the UIElement's children as its own - cutting the UIElement out. E.g. NSControls are ignored when they are single-celled.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
147 bool accessibilityIsIgnored() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
148 return accessibleParent.internal_accessibilityIsIgnored(childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
149 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
150
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
151 bool accessibilityIsAttributeSettable(NSString attribute) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
152 return accessibleParent.internal_accessibilityIsAttributeSettable(attribute, childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
153 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
154
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
155 // Returns the deepest descendant of the UIElement hierarchy that contains the point. You can assume the point has already been determined to lie within the receiver. Override this method to do deeper hit testing within a UIElement - e.g. a NSMatrix would test its cells. The point is bottom-left relative screen coordinates.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
156 id accessibilityHitTest(NSPoint point) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
157 return accessibleParent.internal_accessibilityHitTest(point, childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
158 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
159
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
160 // Returns the UI Element that has the focus. You can assume that the search for the focus has already been narrowed down to the reciever. Override this method to do a deeper search with a UIElement - e.g. a NSMatrix would determine if one of its cells has the focus.
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
161 id accessibilityFocusedUIElement() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
162 return accessibleParent.internal_accessibilityFocusedUIElement(childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
163 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
164
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
165 void accessibilityPerformAction(NSString action) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
166 accessibleParent.internal_accessibilityPerformAction(action, childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
167 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
168
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
169 id accessibilityActionDescription(NSString action) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
170 return accessibleParent.internal_accessibilityActionDescription(action, childID);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
171 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
172
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
173
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
174 void accessibilitySetValue_forAttribute(id value, NSString attribute) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
175 // This shouldn't be called!
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
176 System.out.println("Ignoring attribute: " + attribute.getString());
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
177 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
178
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
179 static NSArray retainedAutoreleased(NSArray inObject) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
180 id temp = inObject.retain();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
181 id temp2 = new NSObject(temp.id).autorelease();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
182 return new NSArray(temp2.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
183 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
184
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
185 static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
186 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
187 if (swtAcc is null) return 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
188
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
189 if (sel is OS.sel_accessibilityAttributeNames) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
190 NSArray retObject = swtAcc.accessibilityAttributeNames();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
191 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
192 } else if (sel is OS.sel_accessibilityActionNames) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
193 NSArray retObject = swtAcc.accessibilityActionNames();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
194 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
195 } else if (sel is OS.sel_accessibilityParameterizedAttributeNames) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
196 NSArray retObject = swtAcc.accessibilityParameterizedAttributeNames();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
197 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
198 } else if (sel is OS.sel_accessibilityIsIgnored) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
199 bool retVal = swtAcc.accessibilityIsIgnored();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
200 return (retVal ? 1 : 0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
201 } else if (sel is OS.sel_accessibilityFocusedUIElement) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
202 id retObject = swtAcc.accessibilityFocusedUIElement();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
203 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
204 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
205
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
206 return 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
207 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
208
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
209 static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
210 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
211 if (swtAcc is null) return 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
212
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
213 if (sel is OS.sel_accessibilityAttributeValue_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
214 NSString attribute = new NSString(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
215 id retObject = swtAcc.accessibilityAttributeValue(attribute);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
216 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
217 } else if (sel is OS.sel_accessibilityHitTest_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
218 NSPoint point= new NSPoint();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
219 OS.memmove(point, arg0, NSPoint.sizeof);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
220 id retObject = swtAcc.accessibilityHitTest(point);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
221 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
222 } else if (sel is OS.sel_accessibilityIsAttributeSettable_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
223 NSString attribute = new NSString(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
224 return (swtAcc.accessibilityIsAttributeSettable(attribute) ? 1 : 0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
225 } else if (sel is OS.sel_accessibilityActionDescription_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
226 NSString action = new NSString(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
227 id retObject = swtAcc.accessibilityActionDescription(action);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
228 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
229 } else if (sel is OS.sel_accessibilityPerformAction_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
230 NSString action = new NSString(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
231 swtAcc.accessibilityPerformAction(action);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
232 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
233
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
234 return 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
235 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
236
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
237 static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
238 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
239 if (swtAcc is null) return 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
240
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
241 if (sel is OS.sel_accessibilityAttributeValue_forParameter_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
242 NSString attribute = new NSString(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
243 id parameter = new id(arg1);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
244 id retObject = swtAcc.accessibilityAttributeValue_forParameter(attribute, parameter);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
245 return (retObject is null ? 0 : retObject.id);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
246 } else if (sel is OS.sel_accessibilitySetValue_forAttribute_) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
247 id value = new id(arg0);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
248 NSString attribute = new NSString(arg1);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
249 swtAcc.accessibilitySetValue_forAttribute(value, attribute);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
250 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
251
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
252 return 0;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
253 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
254
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
255 static SWTAccessibleDelegate getAccessibleDelegate(int /*long*/ id) {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
256 if (id is 0) return null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
257 int /*long*/ [] jniRef = new int /*long*/ [1];
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
258 OS.object_getInstanceVariable(id, DWT_OBJECT, jniRef);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
259 if (jniRef[0] is 0) return null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
260 return (SWTAccessibleDelegate)OS.JNIGetObject(jniRef[0]);
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
261 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
262
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
263 public void internal_dispose_SWTAccessibleDelegate() {
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
264 if (actionNames !is null) actionNames.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
265 actionNames = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
266 if (attributeNames !is null) attributeNames.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
267 attributeNames = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
268 if (parameterizedAttributeNames !is null) parameterizedAttributeNames.release();
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
269 parameterizedAttributeNames = null;
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
270 }
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
271
d8635bb48c7c Merge with SWT 3.5
Jacob Carlborg <doob@me.com>
parents:
diff changeset
272 }