changeset 58:6d9ec9ccdcdd

Updated Accessible to 3.514
author Jacob Carlborg <doob@me.com>
date Tue, 09 Dec 2008 21:35:30 +0100
parents 4444d15131d5
children 83b0ad9d9238
files dwt/accessibility/Accessible.d dwt/internal/Lock.d dwt/internal/Platform.d dwt/widgets/ToolTip.d dwt/widgets/TrayItem.d dwt/widgets/TypedListener.d
diffstat 6 files changed, 197 insertions(+), 207 deletions(-) [+]
line wrap: on
line diff
--- a/dwt/accessibility/Accessible.d	Mon Dec 08 22:02:10 2008 +0100
+++ b/dwt/accessibility/Accessible.d	Tue Dec 09 21:35:30 2008 +0100
@@ -14,11 +14,6 @@
 module dwt.accessibility.Accessible;
 
 import dwt.dwthelper.utils;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.Map;
-import java.util.Vector;
 
 import dwt.DWT;
 import dwt.DWTException;
@@ -34,16 +29,20 @@
 import dwt.internal.cocoa.NSString;
 import dwt.internal.cocoa.NSValue;
 import dwt.internal.cocoa.OS;
-import dwt.internal.cocoa.id;
+import cocoa = dwt.internal.cocoa.id;
 import dwt.widgets.Composite;
 import dwt.widgets.Control;
 import dwt.widgets.Display;
 import dwt.widgets.Monitor;
 import dwt.widgets.Shell;
 
+import tango.util.container.HashMap;
+
 import dwt.accessibility.AccessibleListener;
 import dwt.accessibility.AccessibleControlListener;
 import dwt.accessibility.AccessibleTextListener;
+import dwt.accessibility.SWTAccessibleDelegate;
+import dwt.dwthelper.array;
 
 /**
  * Instances of this class provide a bridge between application
@@ -70,49 +69,55 @@
  */
 public class Accessible {
 
-    static NSString[] baseAttributes = { 
-        OS.NSAccessibilityRoleAttribute,
-        OS.NSAccessibilityRoleDescriptionAttribute,
-        OS.NSAccessibilityHelpAttribute,
-        OS.NSAccessibilityFocusedAttribute,
-        OS.NSAccessibilityParentAttribute,
-        OS.NSAccessibilityChildrenAttribute,
-        OS.NSAccessibilityPositionAttribute,
-        OS.NSAccessibilitySizeAttribute,
-        OS.NSAccessibilityWindowAttribute,
-        OS.NSAccessibilityTopLevelUIElementAttribute
-    };
+    static NSString[] baseAttributes;
 
-    static NSString[] baseTextAttributes = {
-        OS.NSAccessibilityNumberOfCharactersAttribute,
-        OS.NSAccessibilitySelectedTextAttribute,
-        OS.NSAccessibilitySelectedTextRangeAttribute,
-        OS.NSAccessibilityInsertionPointLineNumberAttribute,
-        OS.NSAccessibilitySelectedTextRangesAttribute,
-        OS.NSAccessibilityVisibleCharacterRangeAttribute,
-        OS.NSAccessibilityValueAttribute,
-    };
+    static NSString[] baseTextAttributes;
     
-    static NSString[] baseParameterizedAttributes = {
-        OS.NSAccessibilityStringForRangeParameterizedAttribute,
-        OS.NSAccessibilityRangeForLineParameterizedAttribute,
-    };
+    static NSString[] baseParameterizedAttributes;
     
 
     NSMutableArray attributeNames = null;
     NSMutableArray parameterizedAttributeNames = null;
     NSMutableArray actionNames = null;
 
-    Vector accessibleListeners = new Vector();
-    Vector accessibleControlListeners = new Vector();
-    Vector accessibleTextListeners = new Vector ();
+    AccessibleListener[] accessibleListeners;
+    AccessibleControlListener[] accessibleControlListeners;
+    AccessibleTextListener[] accessibleTextListeners;
     Control control;
 
-    Map /*<Integer, SWTAccessibleDelegate>*/ children = new HashMap();
+    HashMap!(int, SWTAccessibleDelegate) children;
     
     this (Control control) {
     
         this.control = control;
+        
+        baseAttributes = [ 
+                          OS.NSAccessibilityRoleAttribute,
+                          OS.NSAccessibilityRoleDescriptionAttribute,
+                          OS.NSAccessibilityHelpAttribute,
+                          OS.NSAccessibilityFocusedAttribute,
+                          OS.NSAccessibilityParentAttribute,
+                          OS.NSAccessibilityChildrenAttribute,
+                          OS.NSAccessibilityPositionAttribute,
+                          OS.NSAccessibilitySizeAttribute,
+                          OS.NSAccessibilityWindowAttribute,
+                          OS.NSAccessibilityTopLevelUIElementAttribute
+                      ];
+        
+        baseTextAttributes = [
+                              OS.NSAccessibilityNumberOfCharactersAttribute,
+                              OS.NSAccessibilitySelectedTextAttribute,
+                              OS.NSAccessibilitySelectedTextRangeAttribute,
+                              OS.NSAccessibilityInsertionPointLineNumberAttribute,
+                              OS.NSAccessibilitySelectedTextRangesAttribute,
+                              OS.NSAccessibilityVisibleCharacterRangeAttribute,
+                              OS.NSAccessibilityValueAttribute
+                          ];
+        
+        baseParameterizedAttributes = [
+                                       OS.NSAccessibilityStringForRangeParameterizedAttribute,
+                                       OS.NSAccessibilityRangeForLineParameterizedAttribute
+                                   ];
     }
     
     /**
@@ -215,7 +220,7 @@
         accessibleTextListeners.addElement (listener);      
     }
     
-    public id internal_accessibilityActionDescription(NSString action, int childID) {
+    public cocoa.id internal_accessibilityActionDescription(NSString action, int childID) {
         // TODO No action support for now.
         return NSString.stringWith("");
     }
@@ -226,7 +231,7 @@
         event.childID = childID;
         event.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(event);
         }
 
@@ -274,7 +279,7 @@
         event.childID = childID;
         event.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(event);
         }
 
@@ -377,7 +382,7 @@
         }
     }
 
-    public id internal_accessibilityAttributeValue(NSString attribute, int childID) {
+    public cocoa.id internal_accessibilityAttributeValue(NSString attribute, int childID) {
         if (attribute.isEqualToString(OS.NSAccessibilityRoleAttribute)) return getRoleAttribute(childID);
         if (attribute.isEqualToString(OS.NSAccessibilitySubroleAttribute)) return getSubroleAttribute(childID);
         if (attribute.isEqualToString(OS.NSAccessibilityRoleDescriptionAttribute)) return getRoleDescriptionAttribute(childID);
@@ -408,7 +413,7 @@
         return null;
     }
     
-    public id internal_accessibilityAttributeValue_forParameter(NSString attribute, id parameter, int childID) {
+    public cocoa.id internal_accessibilityAttributeValue_forParameter(NSString attribute, id parameter, int childID) {
         if (attribute.isEqualToString(OS.NSAccessibilityStringForRangeParameterizedAttribute)) return getStringForRangeAttribute(parameter, childID);
         if (attribute.isEqualToString(OS.NSAccessibilityRangeForLineParameterizedAttribute)) return getRangeForLineParameterizedAttribute(parameter, childID);      
         return null;
@@ -416,12 +421,12 @@
 
     // Returns the UI Element that has the focus. You can assume that the search for the focus has already been narrowed down to the receiver.
     // 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.
-    public id internal_accessibilityFocusedUIElement(int childID) {
+    public cocoa.id internal_accessibilityFocusedUIElement(int childID) {
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = ACC.CHILDID_MULTIPLE; // set to invalid value, to test if the application sets it in getFocus()
         event.accessible = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getFocus(event);
         }
         
@@ -431,30 +436,30 @@
         
         /* The application can optionally answer an accessible. */
         if (event.accessible !is null) {
-            return new id(OS.NSAccessibilityUnignoredAncestor(event.accessible.control.view.id));
+            return new cocoa.id(OS.NSAccessibilityUnignoredAncestor(event.accessible.control.view.id));
         }
         
         /* Or the application can answer a valid child ID, including CHILDID_SELF and CHILDID_NONE. */
         if (event.childID is ACC.CHILDID_SELF || event.childID is ACC.CHILDID_NONE) {
-            return new id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
+            return new cocoa.id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
         }   
 
-        return new id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(event.childID).id));
+        return new cocoa.id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(event.childID).id));
     }
 
     // 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.
-    public id internal_accessibilityHitTest(NSPoint point, int childID) {
+    public cocoa.id internal_accessibilityHitTest(NSPoint point, int childID) {
         AccessibleControlEvent event = new AccessibleControlEvent(this);
-        event.x = (int) point.x;
+        event.x = cast(int) point.x;
         Monitor primaryMonitor = Display.getCurrent().getPrimaryMonitor();
-        event.y = (int) (primaryMonitor.getBounds().height - point.y);
+        event.y = cast(int) (primaryMonitor.getBounds().height - point.y);
     
         // Set an impossible value to determine if anything responded to the event.
         event.childID = ACC.CHILDID_MULTIPLE;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getChildAtPoint(event);
         }
         
@@ -463,14 +468,14 @@
             return null;
         
         if (event.accessible !is null) {
-            return new id(OS.NSAccessibilityUnignoredAncestor(event.accessible.control.view.id));
+            return new cocoa.id(OS.NSAccessibilityUnignoredAncestor(event.accessible.control.view.id));
         }
     
         if (event.childID is ACC.CHILDID_SELF || event.childID is ACC.CHILDID_NONE) {
-            return new id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
+            return new cocoa.id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
         }
     
-        return new id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(event.childID).id));
+        return new cocoa.id(OS.NSAccessibilityUnignoredAncestor(childIDToOs(event.childID).id));
     }
 
     public bool internal_accessibilityIsAttributeSettable(NSString attribute, int childID) {
@@ -541,29 +546,25 @@
         if (attributeNames !is null) attributeNames.release();
         attributeNames = null;
         if (parameterizedAttributeNames !is null) parameterizedAttributeNames.release();
-        parameterizedAttributeNames = null;
+        parameterizedAttributeNames = null;        
         
-        Collection delegates = children.values();
-        Iterator iter = delegates.iterator();
-        while (iter.hasNext()) {
-            SWTAccessibleDelegate childDelegate = (SWTAccessibleDelegate)iter.next();
+        foreach (childDelegate ; children)
             childDelegate.internal_dispose_SWTAccessibleDelegate();
-        }
         
         children.clear();
     }
     
-    id getExpandedAttribute(int childID) {
+    cocoa.id getExpandedAttribute(int childID) {
         // TODO: May need to expand the API so the combo box state can be reported.
         return NSNumber.numberWithBool(false);
     }
 
-    id getHelpAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getHelpAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleEvent event = new AccessibleEvent(this);
         event.childID = childID;
         for (int i = 0; i < accessibleListeners.size(); i++) {
-            AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+            AccessibleListener listener = accessibleListeners.elementAt(i);
             listener.getHelp(event);
         }
         
@@ -580,7 +581,7 @@
         event.childID = childID;
         event.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(event);
         }
         if (event.detail !is -1) {
@@ -593,13 +594,13 @@
         return returnValue;
     }
     
-    id getSubroleAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getSubroleAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(event);
         }
         if (event.detail !is -1) {
@@ -613,13 +614,13 @@
         return returnValue;
     }
     
-    id getRoleDescriptionAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getRoleDescriptionAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(event);
         }
         if (event.detail !is -1) {
@@ -634,14 +635,14 @@
             NSString nsAppSubrole = null;
             
             if (appSubrole !is null) nsAppSubrole = NSString.stringWith(appSubrole);
-            returnValue = new NSString(OS.NSAccessibilityRoleDescription (((nsAppRole !is null) ? nsAppRole.id : 0), (nsAppSubrole !is null) ? nsAppSubrole.id : 0));
+            returnValue = new NSString(OS.NSAccessibilityRoleDescription (((nsAppRole !is null) ? nsAppRole.id : null), (nsAppSubrole !is null) ? nsAppSubrole.id : null));
         }
         return returnValue;
     }
     
-    id getTitleAttribute (int childID) {
+    cocoa.id getTitleAttribute (int childID) {
         
-        id returnValue = null;//NSString.stringWith("");
+        cocoa.id returnValue = null;//NSString.stringWith("");
         
         /*
         * Feature of the Macintosh.  The text of a Label is returned in its value,
@@ -651,7 +652,7 @@
         roleEvent.childID = childID;
         roleEvent.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(roleEvent);
         }
         if (roleEvent.detail !is ACC.ROLE_LABEL) {
@@ -659,7 +660,7 @@
             event.childID = childID;
             event.result = null;
             for (int i = 0; i < accessibleListeners.size(); i++) {
-                AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+                AccessibleListener listener = accessibleListeners.elementAt(i);
                 listener.getName(event);
             }
             
@@ -669,14 +670,14 @@
         return returnValue;
     }
     
-    id getValueAttribute (int childID) {
+    cocoa.id getValueAttribute (int childID) {
         id returnValue = null;
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.detail = -1;
         event.result = null; //TODO: could pass the OS value to the app
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getRole(event);
             listener.getValue(event);
         }
@@ -709,7 +710,7 @@
             AccessibleControlEvent ace = new AccessibleControlEvent(this);
             ace.childID = -4;
             for (int i = 0; i < accessibleControlListeners.size(); i++) {
-                AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+                AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
                 listener.getSelection(ace);
             }
             if (ace.childID >= ACC.CHILDID_SELF) {
@@ -732,7 +733,7 @@
             e.childID = childID;
             e.result = null;
             for (int i = 0; i < accessibleListeners.size(); i++) {
-                AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+                AccessibleListener listener = accessibleListeners.elementAt(i);
                 listener.getName(e);
             }
             if (e.result !is null) {
@@ -746,23 +747,23 @@
         return returnValue;
     }
     
-    id getEnabledAttribute (int childID) {
+    cocoa.id getEnabledAttribute (int childID) {
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.detail = -1;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getState(event);
         }
 
         return NSNumber.numberWithBool(control.isEnabled());
     }
     
-    id getFocusedAttribute (int childID) {
+    cocoa.id getFocusedAttribute (int childID) {
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = ACC.CHILDID_MULTIPLE; // set to invalid value, to test if the application sets it in getFocus()
         event.accessible = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getFocus(event);
         }
 
@@ -792,7 +793,7 @@
         return NSNumber.numberWithBool(hasFocus);
     }
     
-    id getParentAttribute (int childID) {
+    cocoa.id getParentAttribute (int childID) {
         // Returning null here means 'let Cocoa figure it out.'
         if (childID is ACC.CHILDID_SELF)
             return null;
@@ -800,19 +801,19 @@
             return new id(OS.NSAccessibilityUnignoredAncestor(control.view.id));
     }
     
-    id getChildrenAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getChildrenAttribute (int childID) {
+        cocoa.id returnValue = null;
         if (childID is ACC.CHILDID_SELF) {
             AccessibleControlEvent event = new AccessibleControlEvent(this);
             event.childID = childID;
             event.detail = -1; // set to impossible value to test if app resets
             for (int i = 0; i < accessibleControlListeners.size(); i++) {
-                AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+                AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
                 listener.getChildCount(event);
             }
             if (event.detail > 0) {
                 for (int i = 0; i < accessibleControlListeners.size(); i++) {
-                    AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+                    AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
                     listener.getChildren(event);
                 }
                 Object [] appChildren = event.children;
@@ -822,15 +823,15 @@
 
                     for (int i = 0; i < appChildren.length; i++) {
                         Object child = appChildren[i];
-                        if (child instanceof Integer) {
-                            id accChild = childIDToOs(((Integer)child).intValue());                         
+                        if (cast(Integer) child) {
+                            id accChild = childIDToOs((cast(Integer)child).intValue());                         
                             childArray.addObject(accChild);
                         } else {
-                            childArray.addObject(((Accessible)child).control.view);
+                            childArray.addObject((cast(Accessible)child).control.view);
                         }
                     }
 
-                    returnValue = new id(OS.NSAccessibilityUnignoredChildren(childArray.id));
+                    returnValue = new cocoa.id(OS.NSAccessibilityUnignoredChildren(childArray.id));
                 }
             }
         } else {
@@ -844,19 +845,19 @@
         return returnValue;
     }
     
-    id getTabsAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getTabsAttribute (int childID) {
+        cocoa.id returnValue = null;
         if (childID is ACC.CHILDID_SELF) {
             AccessibleControlEvent event = new AccessibleControlEvent(this);
             event.childID = childID;
             event.detail = -1; // set to impossible value to test if app resets
             for (int i = 0; i < accessibleControlListeners.size(); i++) {
-                AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+                AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
                 listener.getChildCount(event);
             }
             if (event.detail > 0) {
                 for (int i = 0; i < accessibleControlListeners.size(); i++) {
-                    AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+                    AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
                     listener.getChildren(event);
                 }
                 Object [] appChildren = event.children;
@@ -866,25 +867,25 @@
 
                     for (int i = 0; i < appChildren.length; i++) {
                         Object child = appChildren[i];
-                        if (child instanceof Integer) {
-                            int subChildID = ((Integer)child).intValue();
+                        if (cast(Integer)child) {
+                            int subChildID = (cast(Integer)child).intValue();
                             event.childID = subChildID;
                             event.detail = -1;
                             for (int j = 0; j < accessibleControlListeners.size(); j++) {
-                                AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(j);
+                                AccessibleControlListener listener = accessibleControlListeners.elementAt(j);
                                 listener.getRole(event);
                             }
                             
                             if (event.detail is ACC.ROLE_TABITEM) {
-                                id accChild = childIDToOs(((Integer)child).intValue());                         
+                                cocoa.id accChild = childIDToOs((cast(Integer)child).intValue());                         
                                 childArray.addObject(accChild);
                             }
                         } else {
-                            childArray.addObject(((Accessible)child).control.view);
+                            childArray.addObject((cast(Accessible)child).control.view);
                         }
                     }
 
-                    returnValue = new id(OS.NSAccessibilityUnignoredChildren(childArray.id));
+                    returnValue = new cocoa.id(OS.NSAccessibilityUnignoredChildren(childArray.id));
                 }
             }
         } else {
@@ -898,28 +899,28 @@
         return returnValue;
     }
     
-    id getWindowAttribute (int childID) {
+    cocoa.id getWindowAttribute (int childID) {
         return control.view.window();
     }
     
-    id getTopLevelUIElementAttribute (int childID) {
+    cocoa.id getTopLevelUIElementAttribute (int childID) {
         return control.view.window();
     }
     
-    id getPositionAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getPositionAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.width = -1;
         
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getLocation(event);
         }
 
         Monitor primaryMonitor = Display.getCurrent().getPrimaryMonitor();
         
-        NSPoint osPositionAttribute = new NSPoint ();
+        NSPoint osPositionAttribute = NSPoint ();
         if (event.width !is -1) {
             // The point returned is the lower-left coordinate of the widget in lower-left relative screen coordinates.
             osPositionAttribute.x = event.x;
@@ -933,7 +934,7 @@
                 if (control.getParent() !is null)
                     pt = control.getParent().toDisplay(location.x, location.y);
                 else 
-                    pt = ((Shell)control).toDisplay(location.x, location.y);
+                    pt = (cast(Shell)control).toDisplay(location.x, location.y);
 
                 osPositionAttribute.x = pt.x;
                 osPositionAttribute.y = pt.y;
@@ -944,18 +945,18 @@
         return returnValue;
     }
     
-    id getSizeAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getSizeAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.width = -1;
 
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getLocation(event);
         }
 
-        NSSize controlSize = new NSSize ();
+        NSSize controlSize = NSSize ();
         if (event.width !is -1) {
             controlSize.width = event.width;
             controlSize.height = event.height;
@@ -970,13 +971,13 @@
         return returnValue;
     }
     
-    id getDescriptionAttribute (int childID) {
+    cocoa.id getDescriptionAttribute (int childID) {
         AccessibleEvent event = new AccessibleEvent(this);
         event.childID = childID;
         event.result = null;
-        id returnValue = null;
+        cocoa.id returnValue = null;
         for (int i = 0; i < accessibleListeners.size(); i++) {
-            AccessibleListener listener = (AccessibleListener) accessibleListeners.elementAt(i);
+            AccessibleListener listener = accessibleListeners.elementAt(i);
             listener.getDescription(event);
         }
 
@@ -984,26 +985,26 @@
 
         // If no description was provided, try the name.
         if (returnValue is null) {
-            if (control instanceof Composite) returnValue = NSString.stringWith("");
+            if (cast(Composite) control) returnValue = NSString.stringWith("");
         }
 
         return returnValue;
     }
     
-    id getInsertionPointLineNumberAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getInsertionPointLineNumberAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleControlEvent controlEvent = new AccessibleControlEvent(this);
         controlEvent.childID = childID;
         controlEvent.result = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getValue(controlEvent);
         }
         AccessibleTextEvent textEvent = new AccessibleTextEvent(this);
         textEvent.childID = childID;
         textEvent.offset = -1;
         for (int i = 0; i < accessibleTextListeners.size(); i++) {
-            AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+            AccessibleTextListener listener = accessibleTextListeners.elementAt(i);
             listener.getCaretOffset(textEvent);
         }
         if (controlEvent.result !is null && textEvent.offset !is -1) {
@@ -1013,13 +1014,13 @@
         return returnValue;
     }
     
-    id getNumberOfCharactersAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getNumberOfCharactersAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.result = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getValue(event);
         }
         String appValue = event.result;
@@ -1029,18 +1030,18 @@
         return returnValue;
     }
     
-    id getRangeForLineParameterizedAttribute (id parameter, int childID) {
-        id returnValue = null;
+    cocoa.id getRangeForLineParameterizedAttribute (cocoa.id parameter, int childID) {
+        cocoa.id returnValue = null;
 
         // The parameter is an NSNumber with the line number.
         NSNumber lineNumberObj = new NSNumber(parameter.id);        
         int lineNumber = lineNumberObj.intValue();
-        System.out.println("Line number = " + lineNumber);
+        System.Out.println("Line number = " ~ lineNumber);
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.result = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getValue(event);
         }
         if (event.result !is null) {
@@ -1052,14 +1053,14 @@
         return returnValue;
     }
     
-    id getSelectedTextAttribute (int childID) {
-        id returnValue = NSString.stringWith("");
+    cocoa.id getSelectedTextAttribute (int childID) {
+        cocoa.id returnValue = NSString.stringWith("");
         AccessibleTextEvent event = new AccessibleTextEvent(this);
         event.childID = childID;
         event.offset = -1;
         event.length = -1;
         for (int i = 0; i < accessibleTextListeners.size(); i++) {
-            AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+            AccessibleTextListener listener = accessibleTextListeners.elementAt(i);
             listener.getSelectionRange(event);
         }
         int offset = event.offset;
@@ -1069,7 +1070,7 @@
             event2.childID = event.childID;
             event2.result = null;
             for (int i = 0; i < accessibleControlListeners.size(); i++) {
-                AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+                AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
                 listener.getValue(event2);
             }
             String appValue = event2.result;
@@ -1080,14 +1081,14 @@
         return returnValue;
     }
     
-    id getSelectedTextRangeAttribute (int childID) {
-        id returnValue = null;
+    cocoa.id getSelectedTextRangeAttribute (int childID) {
+        cocoa.id returnValue = null;
         AccessibleTextEvent event = new AccessibleTextEvent(this);
         event.childID = childID;
         event.offset = -1;
         event.length = 0;
         for (int i = 0; i < accessibleTextListeners.size(); i++) {
-            AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+            AccessibleTextListener listener = accessibleTextListeners.elementAt(i);
             listener.getSelectionRange(event);
         }
         if (event.offset !is -1) {
@@ -1099,8 +1100,8 @@
         return returnValue;
     }
     
-    id getStringForRangeAttribute (id parameter, int childID) {
-        id returnValue = null;
+    cocoa.id getStringForRangeAttribute (cocoa.id parameter, int childID) {
+        cocoa.id returnValue = null;
         
         // Parameter is an NSRange wrapped in an NSValue. 
         NSValue parameterObject = new NSValue(parameter.id);
@@ -1109,7 +1110,7 @@
         event.childID = childID;
         event.result = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getValue(event);
         }
         String appValue = event.result;
@@ -1121,7 +1122,7 @@
         return returnValue;
     }
     
-    id getSelectedTextRangesAttribute (int childID) {
+    cocoa.id getSelectedTextRangesAttribute (int childID) {
         NSMutableArray returnValue = null; 
         AccessibleTextEvent event = new AccessibleTextEvent(this);
         event.childID = childID;
@@ -1129,7 +1130,7 @@
         event.length = 0;
         
         for (int i = 0; i < accessibleTextListeners.size(); i++) {
-            AccessibleTextListener listener = (AccessibleTextListener) accessibleTextListeners.elementAt(i);
+            AccessibleTextListener listener = accessibleTextListeners.elementAt(i);
             listener.getSelectionRange(event);
         }
         
@@ -1144,12 +1145,12 @@
         return returnValue;
     }
     
-    id getVisibleCharacterRangeAttribute (int childID) {
+    cocoa.id getVisibleCharacterRangeAttribute (int childID) {
         AccessibleControlEvent event = new AccessibleControlEvent(this);
         event.childID = childID;
         event.result = null;
         for (int i = 0; i < accessibleControlListeners.size(); i++) {
-            AccessibleControlListener listener = (AccessibleControlListener) accessibleControlListeners.elementAt(i);
+            AccessibleControlListener listener = accessibleControlListeners.elementAt(i);
             listener.getValue(event);
         }
         
@@ -1287,8 +1288,8 @@
     }
 
     static NSArray retainedAutoreleased(NSArray inObject) {
-        id temp = inObject.retain();
-        id temp2 = new NSObject(temp.id).autorelease();
+        cocoa.id temp = inObject.retain();
+        cocoa.id temp2 = (new NSObject(temp.id)).autorelease();
         return new NSArray(temp2.id);
     }
     
@@ -1382,17 +1383,17 @@
         OS.NSAccessibilityPostNotification(control.view.id, OS.NSAccessibilitySelectedTextChangedNotification.id);
     }
     
-    id childIDToOs(int childID) {
+    cocoa.id childIDToOs(int childID) {
         if (childID is ACC.CHILDID_SELF) {
             return control.view;
         }
 
         /* Check cache for childID, if found, return corresponding osChildID. */
-        SWTAccessibleDelegate childRef = (SWTAccessibleDelegate) children.get(new Integer(childID));
+        SWTAccessibleDelegate childRef = children.get(childID);
         
         if (childRef is null) {
             childRef = new SWTAccessibleDelegate(this, childID);
-            children.put(new Integer(childID), childRef);
+            children.put(childID, childRef);
         }
         
         return childRef;
--- a/dwt/internal/Lock.d	Mon Dec 08 22:02:10 2008 +0100
+++ b/dwt/internal/Lock.d	Tue Dec 09 21:35:30 2008 +0100
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2005 IBM Corporation and others.
  * All rights reserved. This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
@@ -7,7 +7,6 @@
  *
  * Contributors:
  *     IBM Corporation - initial API and implementation
- *
  * Port to the D programming language:
  *     Frank Benoit <benoit@tionex.de>
  *******************************************************************************/
@@ -16,75 +15,59 @@
 import tango.core.Thread;
 import tango.core.sync.Mutex;
 import tango.core.sync.Condition;
-import tango.core.Exception;
-
-import dwt.dwthelper.utils;
 
 /**
- * Instances of this represent a recursive monitor.  Note that this
- * is an empty implementation which does not actually perform locking.
+ * Instance of this represent a recursive monitor.
  */
-public class Lock
-{
+public class Lock {
+    int count, waitCount;
+    Thread owner;
     Mutex mutex;
     Condition cond;
 
-    public this ()
-    {
+    public this() {
         mutex = new Mutex;
         cond = new Condition(mutex);
     }
+/**
+ * Locks the monitor and returns the lock count. If
+ * the lock is owned by another thread, wait until
+ * the lock is released.
+ *
+ * @return the lock count
+ */
+public int lock() {
+    synchronized (mutex) {
+        Thread current = Thread.getThis();
+        if (owner !is current) {
+            waitCount++;
+            while (count > 0) {
+                try {
+                    cond.wait();
+                } catch (SyncException e) {
+                    /* Wait forever, just like synchronized blocks */
+                }
+            }
+            --waitCount;
+            owner = current;
+        }
+        return ++count;
+    }
+}
 
-    /**
-     * Locks the monitor and returns the lock count. If
-     * the lock is owned by another thread, wait until
-     * the lock is released.
-     *
-     * @return the lock count
-     */
-    public int lock ()
-    {
-        synchronized (mutex)
-        {
-            Thread current = Thread.getThis();
-            if (owner !is current)
-            {
-                waitCount++;
-                while (count > 0)
-                {
-                    try
-                    {
-                        cond.wait();
-                    }
-                    catch (SyncException e)
-                    {
-                    }
-                }
-                --waitCount;
-                owner = current;
-            }
-            return ++count;
-        }
-    }
-
-    /**
-     * Unlocks the monitor. If the current thread is not
-     * the monitor owner, do nothing.
-     */
-    public void unlock ()
-    {
-        synchronized (mutex)
-        {
-            Thread current = Thread.getThis();
-            if (owner is current)
-            {
-                if (--count is 0)
-                {
-                    owner = null;
-                    if (waitCount > 0)
-                        cond.notifyAll();
-                }
+/**
+ * Unlocks the monitor. If the current thread is not
+ * the monitor owner, do nothing.
+ */
+public void unlock() {
+    synchronized (mutex) {
+        Thread current = Thread.getThis();
+        if (owner is current) {
+            if (--count is 0) {
+                owner = null;
+                if (waitCount > 0) cond.notifyAll();
             }
         }
     }
 }
+}
--- a/dwt/internal/Platform.d	Mon Dec 08 22:02:10 2008 +0100
+++ b/dwt/internal/Platform.d	Tue Dec 09 21:35:30 2008 +0100
@@ -14,6 +14,7 @@
 module dwt.internal.Platform;
 
 import dwt.dwthelper.utils;
+import dwt.internal.Lock;
 
 public class Platform {
     
--- a/dwt/widgets/ToolTip.d	Mon Dec 08 22:02:10 2008 +0100
+++ b/dwt/widgets/ToolTip.d	Tue Dec 09 21:35:30 2008 +0100
@@ -127,6 +127,8 @@
                     case DWT.Dispose: onDispose (event); break;
                     case DWT.Paint: onPaint (event); break;
                     case DWT.MouseDown: onMouseDown (event); break;
+                    default:
+                        assert(false);
                 }
             }
             };
--- a/dwt/widgets/TrayItem.d	Mon Dec 08 22:02:10 2008 +0100
+++ b/dwt/widgets/TrayItem.d	Tue Dec 09 21:35:30 2008 +0100
@@ -274,7 +274,7 @@
 void register () {
     super.register ();
     display.addWidget (view, this);
-    display.addWidget (((NSControl)view).cell(), this);
+    display.addWidget ((cast(NSControl)view).cell(), this);
 }
 
 void releaseHandle () {
--- a/dwt/widgets/TypedListener.d	Mon Dec 08 22:02:10 2008 +0100
+++ b/dwt/widgets/TypedListener.d	Tue Dec 09 21:35:30 2008 +0100
@@ -297,6 +297,9 @@
             e.doit = event.doit;
             break;
         }
+        
+        default:
+            assert(false);
     }
 }