Mercurial > projects > dwt-mac
comparison dwt/accessibility/SWTAccessibleDelegate.d @ 123:63a09873578e
Fixed compile errors
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Thu, 15 Jan 2009 23:08:54 +0100 |
parents | c74ba20de292 |
children | ad4e1fe71a5a |
comparison
equal
deleted
inserted
replaced
122:2e671fa40eec | 123:63a09873578e |
---|---|
27 | 27 |
28 import dwt.accessibility.Accessible; | 28 import dwt.accessibility.Accessible; |
29 import objc = dwt.internal.objc.runtime; | 29 import objc = dwt.internal.objc.runtime; |
30 | 30 |
31 class SWTAccessibleDelegate : NSObject { | 31 class SWTAccessibleDelegate : NSObject { |
32 | 32 |
33 /** | 33 /** |
34 * Accessible Key: The string constant for looking up the accessible | 34 * Accessible Key: The string constant for looking up the accessible |
35 * for a control using <code>getData(String)</code>. When an accessible | 35 * for a control using <code>getData(String)</code>. When an accessible |
36 * is created for a control, it is stored as a property in the control | 36 * is created for a control, it is stored as a property in the control |
37 * using <code>setData(String, Object)</code>. | 37 * using <code>setData(String, Object)</code>. |
38 */ | 38 */ |
39 static final String ACCESSIBLE_KEY = "Accessible"; //$NON-NLS-1$ | 39 static final String ACCESSIBLE_KEY = "Accessible"; //$NON-NLS-1$ |
40 static final String DWT_OBJECT = "DWT_OBJECT"; | 40 static final String DWT_OBJECT = "DWT_OBJECT"; |
41 | 41 |
42 static objc.IMP proc2Args, proc3Args, proc4Args; | 42 static objc.IMP proc2Args, proc3Args, proc4Args; |
43 | 43 |
44 Accessible accessibleParent; | 44 Accessible accessibleParent; |
45 void* delegateJniRef; | 45 void* delegateJniRef; |
46 int childID; | 46 int childID; |
47 | 47 |
48 NSArray attributeNames = null; | 48 NSArray attributeNames = null; |
49 NSArray parameterizedAttributeNames = null; | 49 NSArray parameterizedAttributeNames = null; |
50 NSArray actionNames = null; | 50 NSArray actionNames = null; |
51 | 51 |
52 static this (){ | 52 static this (){ |
53 ClassInfo clazz = SWTAccessibleDelegate.classinfo; | 53 ClassInfo clazz = SWTAccessibleDelegate.classinfo; |
54 | 54 |
55 proc2Args = cast(objc.IMP) &accessibleProc2; | 55 proc2Args = cast(objc.IMP) &accessibleProc2; |
56 | 56 |
57 proc3Args = cast(objc.IMP) &accessibleProc3; | 57 proc3Args = cast(objc.IMP) &accessibleProc3; |
58 | 58 |
59 proc4Args = cast(objc.IMP) &accessibleProc4; | 59 proc4Args = cast(objc.IMP) &accessibleProc4; |
60 | 60 |
61 // Accessible custom controls need to implement the NSAccessibility protocol. To do that, | 61 // Accessible custom controls need to implement the NSAccessibility protocol. To do that, |
62 // we dynamically add the methods to the control's class that are required | 62 // we dynamically add the methods to the control's class that are required |
63 // by NSAccessibility. Then, when external assistive technology services are used, | 63 // by NSAccessibility. Then, when external assistive technology services are used, |
64 // those methods get called to provide the needed information. | 64 // those methods get called to provide the needed information. |
65 | 65 |
66 String className = "SWTAccessibleDelegate"; | 66 String className = "SWTAccessibleDelegate"; |
67 | 67 |
68 // TODO: These should either move out of Display or be accessible to this class. | 68 // TODO: These should either move out of Display or be accessible to this class. |
69 String types = "*"; | 69 String types = "*"; |
70 size_t size = C.PTR_SIZEOF, align_ = C.PTR_SIZEOF is 4 ? 2 : 3; | 70 size_t size = C.PTR_SIZEOF, align_ = C.PTR_SIZEOF is 4 ? 2 : 3; |
71 | 71 |
72 objc.Class cls = OS.objc_allocateClassPair(cast(objc.Class) OS.class_NSObject, className, 0); | 72 objc.Class cls = OS.objc_allocateClassPair(cast(objc.Class) OS.class_NSObject, className, 0); |
73 OS.class_addIvar(cls, DWT_OBJECT, size, cast(byte)align_, types); | 73 OS.class_addIvar(cls, DWT_OBJECT, size, cast(byte)align_, types); |
74 | 74 |
75 // Add the NSAccessibility overrides | 75 // Add the NSAccessibility overrides |
76 OS.class_addMethod(cls, OS.sel_accessibilityActionNames, proc2Args, "@:"); | 76 OS.class_addMethod(cls, OS.sel_accessibilityActionNames, proc2Args, "@:"); |
77 OS.class_addMethod(cls, OS.sel_accessibilityAttributeNames, proc2Args, "@:"); | 77 OS.class_addMethod(cls, OS.sel_accessibilityAttributeNames, proc2Args, "@:"); |
78 OS.class_addMethod(cls, OS.sel_accessibilityParameterizedAttributeNames, proc2Args, "@:"); | 78 OS.class_addMethod(cls, OS.sel_accessibilityParameterizedAttributeNames, proc2Args, "@:"); |
79 OS.class_addMethod(cls, OS.sel_accessibilityIsIgnored, proc2Args, "@:"); | 79 OS.class_addMethod(cls, OS.sel_accessibilityIsIgnored, proc2Args, "@:"); |
80 OS.class_addMethod(cls, OS.sel_accessibilityFocusedUIElement, proc2Args, "@:"); | 80 OS.class_addMethod(cls, OS.sel_accessibilityFocusedUIElement, proc2Args, "@:"); |
81 | 81 |
82 OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_, proc3Args, "@:@"); | 82 OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_, proc3Args, "@:@"); |
83 OS.class_addMethod(cls, OS.sel_accessibilityHitTest_, proc3Args, "@:{NSPoint}"); | 83 OS.class_addMethod(cls, OS.sel_accessibilityHitTest_, proc3Args, "@:{NSPoint}"); |
84 OS.class_addMethod(cls, OS.sel_accessibilityIsAttributeSettable_, proc3Args, "@:@"); | 84 OS.class_addMethod(cls, OS.sel_accessibilityIsAttributeSettable_, proc3Args, "@:@"); |
85 OS.class_addMethod(cls, OS.sel_accessibilityActionDescription_, proc3Args, "@:@"); | 85 OS.class_addMethod(cls, OS.sel_accessibilityActionDescription_, proc3Args, "@:@"); |
86 OS.class_addMethod(cls, OS.sel_accessibilityPerformAction_, proc3Args, "@:@"); | 86 OS.class_addMethod(cls, OS.sel_accessibilityPerformAction_, proc3Args, "@:@"); |
87 | 87 |
88 OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_forParameter_, proc4Args, "@:@@"); | 88 OS.class_addMethod(cls, OS.sel_accessibilityAttributeValue_forParameter_, proc4Args, "@:@@"); |
89 OS.class_addMethod(cls, OS.sel_accessibilitySetValue_forAttribute_, proc4Args, "@:@@"); | 89 OS.class_addMethod(cls, OS.sel_accessibilitySetValue_forAttribute_, proc4Args, "@:@@"); |
90 | 90 |
91 OS.objc_registerClassPair(cls); | 91 OS.objc_registerClassPair(cls); |
92 } | 92 } |
93 | 93 |
94 | 94 |
95 public this(Accessible accessible, int childID) { | 95 public this(Accessible accessible, int childID) { |
96 super(cast(objc.id) null); | 96 super(cast(objc.id) null); |
97 this.accessibleParent = accessible; | 97 this.accessibleParent = accessible; |
98 this.childID = childID; | 98 this.childID = childID; |
99 alloc().init(); | 99 alloc().init(); |
100 delegateJniRef = OS.NewGlobalRef(this); | 100 delegateJniRef = OS.NewGlobalRef(this); |
101 if (delegateJniRef is null) DWT.error(DWT.ERROR_NO_HANDLES); | 101 if (delegateJniRef is null) DWT.error(DWT.ERROR_NO_HANDLES); |
102 OS.object_setInstanceVariable(this.id, DWT_OBJECT, delegateJniRef); | 102 OS.object_setInstanceVariable(this.id, DWT_OBJECT, delegateJniRef); |
103 } | 103 } |
104 | 104 |
105 NSArray accessibilityActionNames() { | 105 NSArray accessibilityActionNames() { |
106 | 106 |
107 if (actionNames !is null) | 107 if (actionNames !is null) |
108 return retainedAutoreleased(actionNames); | 108 return retainedAutoreleased(actionNames); |
109 | 109 |
110 actionNames = accessibleParent.internal_accessibilityActionNames(childID); | 110 actionNames = accessibleParent.internal_accessibilityActionNames(childID); |
111 actionNames.retain(); | 111 actionNames.retain(); |
112 return retainedAutoreleased(actionNames); | 112 return retainedAutoreleased(actionNames); |
113 } | 113 } |
114 | 114 |
115 NSArray accessibilityAttributeNames() { | 115 NSArray accessibilityAttributeNames() { |
116 | 116 |
117 if (attributeNames !is null) | 117 if (attributeNames !is null) |
118 return retainedAutoreleased(attributeNames); | 118 return retainedAutoreleased(attributeNames); |
119 | 119 |
120 attributeNames = accessibleParent.internal_accessibilityAttributeNames(childID); | 120 attributeNames = accessibleParent.internal_accessibilityAttributeNames(childID); |
121 attributeNames.retain(); | 121 attributeNames.retain(); |
122 return retainedAutoreleased(attributeNames); | 122 return retainedAutoreleased(attributeNames); |
123 } | 123 } |
124 | 124 |
125 cocoa.id accessibilityAttributeValue(NSString attribute) { | 125 cocoa.id accessibilityAttributeValue(NSString attribute) { |
126 return accessibleParent.internal_accessibilityAttributeValue(attribute, childID); | 126 return accessibleParent.internal_accessibilityAttributeValue(attribute, childID); |
127 } | 127 } |
128 | 128 |
129 // parameterized attribute methods | 129 // parameterized attribute methods |
138 } | 138 } |
139 | 139 |
140 cocoa.id accessibilityAttributeValue_forParameter(NSString attribute, cocoa.id parameter) { | 140 cocoa.id accessibilityAttributeValue_forParameter(NSString attribute, cocoa.id parameter) { |
141 return accessibleParent.internal_accessibilityAttributeValue_forParameter(attribute, parameter, childID); | 141 return accessibleParent.internal_accessibilityAttributeValue_forParameter(attribute, parameter, childID); |
142 } | 142 } |
143 | 143 |
144 // 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. | 144 // 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. |
145 bool accessibilityIsIgnored() { | 145 bool accessibilityIsIgnored() { |
146 return accessibleParent.internal_accessibilityIsIgnored(childID); | 146 return accessibleParent.internal_accessibilityIsIgnored(childID); |
147 } | 147 } |
148 | 148 |
149 bool accessibilityIsAttributeSettable(NSString attribute) { | 149 bool accessibilityIsAttributeSettable(NSString attribute) { |
150 return accessibleParent.internal_accessibilityIsAttributeSettable(attribute, childID); | 150 return accessibleParent.internal_accessibilityIsAttributeSettable(attribute, childID); |
151 } | 151 } |
152 | 152 |
153 // 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. | 153 // 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. |
154 cocoa.id accessibilityHitTest(NSPoint point) { | 154 cocoa.id accessibilityHitTest(NSPoint point) { |
155 return accessibleParent.internal_accessibilityHitTest(point, childID); | 155 return accessibleParent.internal_accessibilityHitTest(point, childID); |
156 } | 156 } |
157 | 157 |
158 // 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. | 158 // 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. |
159 cocoa.id accessibilityFocusedUIElement() { | 159 cocoa.id accessibilityFocusedUIElement() { |
160 return accessibleParent.internal_accessibilityFocusedUIElement(childID); | 160 return accessibleParent.internal_accessibilityFocusedUIElement(childID); |
161 } | 161 } |
162 | 162 |
163 void accessibilityPerformAction(NSString action) { | 163 void accessibilityPerformAction(NSString action) { |
164 accessibleParent.internal_accessibilityPerformAction(action, childID); | 164 accessibleParent.internal_accessibilityPerformAction(action, childID); |
165 } | 165 } |
166 | 166 |
167 cocoa.id accessibilityActionDescription(NSString action) { | 167 cocoa.id accessibilityActionDescription(NSString action) { |
177 static NSArray retainedAutoreleased(NSArray inObject) { | 177 static NSArray retainedAutoreleased(NSArray inObject) { |
178 cocoa.id temp = inObject.retain(); | 178 cocoa.id temp = inObject.retain(); |
179 cocoa.id temp2 = (new NSObject(temp.id)).autorelease(); | 179 cocoa.id temp2 = (new NSObject(temp.id)).autorelease(); |
180 return new NSArray(temp2.id); | 180 return new NSArray(temp2.id); |
181 } | 181 } |
182 extern (C){ | 182 extern (C){ |
183 static objc.id accessibleProc2(objc.id id, objc.SEL sel) { | 183 static objc.id accessibleProc2(objc.id id, objc.SEL sel) { |
184 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id); | 184 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id); |
185 if (swtAcc is null) return null; | 185 if (swtAcc is null) return null; |
186 | 186 |
187 if (sel is OS.sel_accessibilityAttributeNames) { | 187 if (sel is OS.sel_accessibilityAttributeNames) { |
188 NSArray retObject = swtAcc.accessibilityAttributeNames(); | 188 NSArray retObject = swtAcc.accessibilityAttributeNames(); |
189 return (retObject is null ? null : retObject.id); | 189 return (retObject is null ? null : retObject.id); |
190 } else if (sel is OS.sel_accessibilityActionNames) { | 190 } else if (sel is OS.sel_accessibilityActionNames) { |
191 NSArray retObject = swtAcc.accessibilityActionNames(); | 191 NSArray retObject = swtAcc.accessibilityActionNames(); |
198 return (retVal ? cast(objc.id)1 : null); | 198 return (retVal ? cast(objc.id)1 : null); |
199 } else if (sel is OS.sel_accessibilityFocusedUIElement) { | 199 } else if (sel is OS.sel_accessibilityFocusedUIElement) { |
200 cocoa.id retObject = swtAcc.accessibilityFocusedUIElement(); | 200 cocoa.id retObject = swtAcc.accessibilityFocusedUIElement(); |
201 return (retObject is null ? null : retObject.id); | 201 return (retObject is null ? null : retObject.id); |
202 } | 202 } |
203 | 203 |
204 return null; | 204 return null; |
205 } | 205 } |
206 | 206 |
207 static objc.id accessibleProc3(objc.id id, objc.SEL sel, objc.id arg0) { | 207 static objc.id accessibleProc3(objc.id id, objc.SEL sel, objc.id arg0) { |
208 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id); | 208 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id); |
209 if (swtAcc is null) return null; | 209 if (swtAcc is null) return null; |
210 | 210 |
211 if (sel is OS.sel_accessibilityAttributeValue_) { | 211 if (sel is OS.sel_accessibilityAttributeValue_) { |
226 return (retObject is null ? null : retObject.id); | 226 return (retObject is null ? null : retObject.id); |
227 } else if (sel is OS.sel_accessibilityPerformAction_) { | 227 } else if (sel is OS.sel_accessibilityPerformAction_) { |
228 NSString action = new NSString(arg0); | 228 NSString action = new NSString(arg0); |
229 swtAcc.accessibilityPerformAction(action); | 229 swtAcc.accessibilityPerformAction(action); |
230 } | 230 } |
231 | 231 |
232 return null; | 232 return null; |
233 } | 233 } |
234 | 234 |
235 static objc.id accessibleProc4(objc.id id, objc.SEL sel, objc.id arg0, objc.id arg1) { | 235 static objc.id accessibleProc4(objc.id id, objc.SEL sel, objc.id arg0, objc.id arg1) { |
236 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id); | 236 SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id); |
237 if (swtAcc is null) return null; | 237 if (swtAcc is null) return null; |
238 | 238 |
239 if (sel is OS.sel_accessibilityAttributeValue_forParameter_) { | 239 if (sel is OS.sel_accessibilityAttributeValue_forParameter_) { |
244 } else if (sel is OS.sel_accessibilitySetValue_forAttribute_) { | 244 } else if (sel is OS.sel_accessibilitySetValue_forAttribute_) { |
245 cocoa.id value = new cocoa.id(arg0); | 245 cocoa.id value = new cocoa.id(arg0); |
246 NSString attribute = new NSString(arg1); | 246 NSString attribute = new NSString(arg1); |
247 swtAcc.accessibilitySetValue_forAttribute(value, attribute); | 247 swtAcc.accessibilitySetValue_forAttribute(value, attribute); |
248 } | 248 } |
249 | 249 |
250 return null; | 250 return null; |
251 } | 251 } |
252 } | 252 } |
253 static SWTAccessibleDelegate getAccessibleDelegate(objc.id id) { | 253 static SWTAccessibleDelegate getAccessibleDelegate(objc.id id) { |
254 if (id is null) return null; | 254 if (id is null) return null; |
255 void* jniRef; | 255 void* jniRef; |
256 OS.object_getInstanceVariable(id, DWT_OBJECT, jniRef); | 256 OS.object_getInstanceVariable(id, DWT_OBJECT, jniRef); |
257 if (jniRef is null) return null; | 257 if (jniRef is null) return null; |
258 return cast(SWTAccessibleDelegate)OS.JNIGetObject(jniRef); | 258 return cast(SWTAccessibleDelegate)OS.JNIGetObject(jniRef); |
259 } | 259 } |
260 | 260 |
261 public void internal_dispose_SWTAccessibleDelegate() { | 261 public void internal_dispose_SWTAccessibleDelegate() { |
262 if (actionNames !is null) actionNames.release(); | 262 if (actionNames !is null) actionNames.release(); |
263 actionNames = null; | 263 actionNames = null; |
264 if (attributeNames !is null) attributeNames.release(); | 264 if (attributeNames !is null) attributeNames.release(); |
265 attributeNames = null; | 265 attributeNames = null; |
266 if (parameterizedAttributeNames !is null) parameterizedAttributeNames.release(); | 266 if (parameterizedAttributeNames !is null) parameterizedAttributeNames.release(); |
267 parameterizedAttributeNames = null; | 267 parameterizedAttributeNames = null; |
268 } | 268 } |
269 | 269 |
270 } | 270 } |