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 }