changeset 59:83b0ad9d9238

Ported SWTAccessibleDelegate
author Jacob Carlborg <doob@me.com>
date Tue, 09 Dec 2008 21:52:21 +0100
parents 6d9ec9ccdcdd
children 62202ce0039f
files dwt/accessibility/Accessible.d dwt/accessibility/SWTAccessibleDelegate.d
diffstat 2 files changed, 65 insertions(+), 67 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/accessibility/Accessible.d	Tue Dec 09 21:35:30 2008 +0100
+++ b/dwt/accessibility/Accessible.d	Tue Dec 09 21:52:21 2008 +0100
@@ -413,7 +413,7 @@
         return null;
     }
     
-    public cocoa.id internal_accessibilityAttributeValue_forParameter(NSString attribute, id parameter, int childID) {
+    public cocoa.id internal_accessibilityAttributeValue_forParameter(NSString attribute, cocoa.id parameter, int childID) {
         if (attribute.isEqualToString(OS.NSAccessibilityStringForRangeParameterizedAttribute)) return getStringForRangeAttribute(parameter, childID);
         if (attribute.isEqualToString(OS.NSAccessibilityRangeForLineParameterizedAttribute)) return getRangeForLineParameterizedAttribute(parameter, childID);      
         return null;
--- a/dwt/accessibility/SWTAccessibleDelegate.d	Tue Dec 09 21:35:30 2008 +0100
+++ b/dwt/accessibility/SWTAccessibleDelegate.d	Tue Dec 09 21:52:21 2008 +0100
@@ -7,6 +7,9 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
+ *     
+ * Port to the D programming language:
+ *     Jacob Carlborg <doob@me.com>
  *******************************************************************************/
 module dwt.accessibility.SWTAccessibleDelegate;
 
@@ -15,15 +18,17 @@
 
 import dwt.DWT;
 import dwt.internal.C;
-import dwt.internal.Callback;
 import dwt.internal.cocoa.NSArray;
 import dwt.internal.cocoa.NSObject;
 import dwt.internal.cocoa.NSPoint;
 import dwt.internal.cocoa.NSString;
 import dwt.internal.cocoa.OS;
-import dwt.internal.cocoa.id;
+import cocoa = dwt.internal.cocoa.id;
 
-class SWTAccessibleDelegate extends NSObject {
+import dwt.accessibility.Accessible;
+import objc = dwt.internal.objc.runtime;
+
+class SWTAccessibleDelegate : NSObject {
 
     /**
      * Accessible Key: The string constant for looking up the accessible 
@@ -34,31 +39,24 @@
     static final String ACCESSIBLE_KEY = "Accessible"; //$NON-NLS-1$
     static final String DWT_OBJECT = "DWT_OBJECT";
 
-    static Callback accessible2Args, accessible3Args, accessible4Args;
-    static int /*long*/ proc2Args, proc3Args, proc4Args;
+    static objc.IMP proc2Args, proc3Args, proc4Args;
 
     Accessible accessibleParent;
-    int /*long*/ delegateJniRef;
+    void* delegateJniRef;
     int childID;
 
     NSArray attributeNames = null;
     NSArray parameterizedAttributeNames = null;
     NSArray actionNames = null;
 
-    static {
-        Class clazz = SWTAccessibleDelegate.class;
-
-        accessible2Args = new Callback(clazz, "accessibleProc", 2);
-        proc2Args = accessible2Args.getAddress();
-        if (proc2Args is 0) DWT.error (DWT.ERROR_NO_MORE_CALLBACKS);
+    static this (){
+        ClassInfo clazz = SWTAccessibleDelegate.classinfo;
 
-        accessible3Args = new Callback(clazz, "accessibleProc", 3);
-        proc3Args = accessible3Args.getAddress();
-        if (proc3Args is 0) DWT.error (DWT.ERROR_NO_MORE_CALLBACKS);        
+        proc2Args = cast(objc.IMP) &accessibleProc2;
 
-        accessible4Args = new Callback(clazz, "accessibleProc", 4);
-        proc4Args = accessible3Args.getAddress();
-        if (proc4Args is 0) DWT.error (DWT.ERROR_NO_MORE_CALLBACKS);        
+        proc3Args = cast(objc.IMP) &accessibleProc3;       
+
+        proc4Args = cast(objc.IMP) &accessibleProc4;      
 
         // Accessible custom controls need to implement the NSAccessibility protocol. To do that, 
         // we dynamically add the methods to the control's class that are required 
@@ -69,10 +67,10 @@
 
         // TODO: These should either move out of Display or be accessible to this class.
         String types = "*";
-        int size = C.PTR_SIZEOF, align = C.PTR_SIZEOF is 4 ? 2 : 3;
+        size_t size = C.PTR_SIZEOF, align_ = C.PTR_SIZEOF is 4 ? 2 : 3;
 
-        int /*long*/ cls = OS.objc_allocateClassPair(OS.class_NSObject, className, 0);
-        OS.class_addIvar(cls, DWT_OBJECT, size, (byte)align, types);
+        objc.Class cls = OS.objc_allocateClassPair(cast(objc.Class) OS.class_NSObject, className, 0);
+        OS.class_addIvar(cls, DWT_OBJECT, size, cast(byte)align_, types);
 
         // Add the NSAccessibility overrides
         OS.class_addMethod(cls, OS.sel_accessibilityActionNames, proc2Args, "@:");
@@ -94,13 +92,13 @@
     }
 
 
-    public SWTAccessibleDelegate(Accessible accessible, int childID) {
-        super(0);
+    public this(Accessible accessible, int childID) {
+        super(cast(objc.id) null);
         this.accessibleParent = accessible;
         this.childID = childID;
         alloc().init();
         delegateJniRef = OS.NewGlobalRef(this);
-        if (delegateJniRef is 0) DWT.error(DWT.ERROR_NO_HANDLES);
+        if (delegateJniRef is null) DWT.error(DWT.ERROR_NO_HANDLES);
         OS.object_setInstanceVariable(this.id, DWT_OBJECT, delegateJniRef);
     }
 
@@ -124,7 +122,7 @@
         return retainedAutoreleased(attributeNames);
     }
 
-    id accessibilityAttributeValue(NSString attribute) {
+    cocoa.id accessibilityAttributeValue(NSString attribute) {
         return accessibleParent.internal_accessibilityAttributeValue(attribute, childID);
     }
     
@@ -139,7 +137,7 @@
         return retainedAutoreleased(parameterizedAttributeNames);
     }
     
-    id accessibilityAttributeValue_forParameter(NSString attribute, id parameter) {
+    cocoa.id accessibilityAttributeValue_forParameter(NSString attribute, cocoa.id parameter) {
         return accessibleParent.internal_accessibilityAttributeValue_forParameter(attribute, parameter, childID);
     }
 
@@ -153,12 +151,12 @@
     }
 
     // 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.
-    id accessibilityHitTest(NSPoint point) {
+    cocoa.id accessibilityHitTest(NSPoint point) {
         return accessibleParent.internal_accessibilityHitTest(point, childID);
     }
 
     // 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.
-    id accessibilityFocusedUIElement() {
+    cocoa.id accessibilityFocusedUIElement() {
         return accessibleParent.internal_accessibilityFocusedUIElement(childID);
     }
 
@@ -166,98 +164,98 @@
         accessibleParent.internal_accessibilityPerformAction(action, childID);
     }
     
-    id accessibilityActionDescription(NSString action) {
+    cocoa.id accessibilityActionDescription(NSString action) {
         return accessibleParent.internal_accessibilityActionDescription(action, childID);
     }
     
     
-    void accessibilitySetValue_forAttribute(id value, NSString attribute) {
+    void accessibilitySetValue_forAttribute(cocoa.id value, NSString attribute) {
         // This shouldn't be called!
-        System.out.println("Ignoring attribute: " + attribute.getString());
+        System.Out.println("Ignoring attribute: " + attribute.getString());
     }
     
     static NSArray retainedAutoreleased(NSArray inObject) {
-        id temp = inObject.retain();
-        id temp2 = new NSObject(temp.id).autorelease();
+        cocoa.id temp = inObject.retain();
+        cocoa.id temp2 = (NSObject(temp.id)).autorelease();
         return new NSArray(temp2.id);
     }
-    
-    static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel) {
+extern (C){    
+    static objc.id accessibleProc2(objc.id id, objc.SEL sel) {
         SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
-        if (swtAcc is null) return 0;
-        
+        if (swtAcc is null) return null;
+
         if (sel is OS.sel_accessibilityAttributeNames) {
             NSArray retObject = swtAcc.accessibilityAttributeNames();
-            return (retObject is null ? 0 : retObject.id);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilityActionNames) {
             NSArray retObject = swtAcc.accessibilityActionNames();
-            return (retObject is null ? 0 : retObject.id);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilityParameterizedAttributeNames) {
             NSArray retObject = swtAcc.accessibilityParameterizedAttributeNames();
-            return (retObject is null ? 0 : retObject.id);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilityIsIgnored) {
             bool retVal = swtAcc.accessibilityIsIgnored();
-            return (retVal ? 1 : 0);
+            return (retVal ? cast(objc.id)1 : null);
         } else if (sel is OS.sel_accessibilityFocusedUIElement) {
-            id retObject = swtAcc.accessibilityFocusedUIElement();
-            return (retObject is null ? 0 : retObject.id);
+            cocoa.id retObject = swtAcc.accessibilityFocusedUIElement();
+            return (retObject is null ? null : retObject.id);
         }
 
-        return 0;
+        return null;
     }
 
-    static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+    static objc.id accessibleProc3(objc.id id, objc.SEL sel, objc.id arg0) {
         SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
-        if (swtAcc is null) return 0;
+        if (swtAcc is null) return null;
         
         if (sel is OS.sel_accessibilityAttributeValue_) {
             NSString attribute = new NSString(arg0);
-            id retObject = swtAcc.accessibilityAttributeValue(attribute);
-            return (retObject is null ? 0 : retObject.id);
+            cocoa.id retObject = swtAcc.accessibilityAttributeValue(attribute);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilityHitTest_) {
             NSPoint point= NSPoint();
             OS.memmove(point, arg0, NSPoint.sizeof);
-            id retObject = swtAcc.accessibilityHitTest(point);
-            return (retObject is null ? 0 : retObject.id);
+            cocoa.id retObject = swtAcc.accessibilityHitTest(point);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilityIsAttributeSettable_) {
             NSString attribute = new NSString(arg0);
             return (swtAcc.accessibilityIsAttributeSettable(attribute) ? 1 : 0);
         } else if (sel is OS.sel_accessibilityActionDescription_) {
             NSString action = new NSString(arg0);
-            id retObject = swtAcc.accessibilityActionDescription(action);
-            return (retObject is null ? 0 : retObject.id);
+            cocoa.id retObject = swtAcc.accessibilityActionDescription(action);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilityPerformAction_) {
             NSString action = new NSString(arg0);
             swtAcc.accessibilityPerformAction(action);
         }
 
-        return 0;
+        return null;
     }
 
-    static int /*long*/ accessibleProc(int /*long*/ id, int /*long*/ sel, int /*long*/ arg0, int /*long*/ arg1) {
+    static objc.id accessibleProc4(objc.id id, objc.SEL sel, objc.id arg0, objc.id arg1) {
         SWTAccessibleDelegate swtAcc = getAccessibleDelegate(id);
-        if (swtAcc is null) return 0;
+        if (swtAcc is null) return null;
         
         if (sel is OS.sel_accessibilityAttributeValue_forParameter_) {
             NSString attribute = new NSString(arg0);
-            id parameter = new id(arg1);
-            id retObject = swtAcc.accessibilityAttributeValue_forParameter(attribute, parameter);
-            return (retObject is null ? 0 : retObject.id);
+            cocoa.id parameter = new cocoa.id(arg1);
+            cocoa.id retObject = swtAcc.accessibilityAttributeValue_forParameter(attribute, parameter);
+            return (retObject is null ? null : retObject.id);
         } else if (sel is OS.sel_accessibilitySetValue_forAttribute_) {
-            id value = new id(arg0);
+            cocoa.id value = new cocoa.id(arg0);
             NSString attribute = new NSString(arg1);
             swtAcc.accessibilitySetValue_forAttribute(value, attribute);
         }
 
-        return 0;
+        return null;
     }
-
-    static SWTAccessibleDelegate getAccessibleDelegate(int /*long*/ id) {
-        if (id is 0) return null;
-        int /*long*/ [] jniRef = new int /*long*/ [1];
+}
+    static SWTAccessibleDelegate getAccessibleDelegate(objc.id id) {
+        if (id is null) return null;
+        void* jniRef;
         OS.object_getInstanceVariable(id, DWT_OBJECT, jniRef);
-        if (jniRef[0] is 0) return null;
-        return (SWTAccessibleDelegate)OS.JNIGetObject(jniRef[0]);
+        if (jniRef is null) return null;
+        return cast(SWTAccessibleDelegate)OS.JNIGetObject(jniRef);
     }
 
     public void internal_dispose_SWTAccessibleDelegate() {