diff dwt/widgets/ToolBar.d @ 45:d8635bb48c7c

Merge with SWT 3.5
author Jacob Carlborg <doob@me.com>
date Mon, 01 Dec 2008 17:07:00 +0100
parents e831403a80a9
children cfa563df4fdd
line wrap: on
line diff
--- a/dwt/widgets/ToolBar.d	Tue Oct 21 15:20:04 2008 +0200
+++ b/dwt/widgets/ToolBar.d	Mon Dec 01 17:07:00 2008 +0100
@@ -1,5 +1,5 @@
-/*******************************************************************************
- * Copyright (c) 2000, 2006 IBM Corporation and others.
+/*******************************************************************************
+ * Copyright (c) 2000, 2008 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
@@ -15,11 +15,20 @@
  
 import dwt.DWT;
 import dwt.DWTException;
+import dwt.accessibility.ACC;
 import dwt.graphics.Point;
 import dwt.graphics.Rectangle;
+import dwt.internal.cocoa.NSArray;
+import dwt.internal.cocoa.NSButton;
+import dwt.internal.cocoa.NSFont;
+import dwt.internal.cocoa.NSMutableArray;
+import dwt.internal.cocoa.NSNumber;
 import dwt.internal.cocoa.NSRect;
+import dwt.internal.cocoa.NSString;
 import dwt.internal.cocoa.NSView;
+import dwt.internal.cocoa.OS;
 import dwt.internal.cocoa.SWTView;
+import dwt.internal.cocoa.id;
 
 /**
  * Instances of this class support the layout of selectable
@@ -43,11 +52,16 @@
  * </p><p>
  * IMPORTANT: This class is <em>not</em> intended to be subclassed.
  * </p>
+ *
+ * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem snippets</a>
+ * @see <a href="http://www.eclipse.org/swt/examples.php">DWT Example: ControlExample</a>
+ * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a>
  */
 public class ToolBar : Composite {
     int itemCount;
     ToolItem [] items;
-
+    NSArray accessibilityAttributes = null;
+    
 /**
  * Constructs a new instance of this class given its parent
  * and a style value describing its behavior and appearance.
@@ -99,6 +113,77 @@
     }
 }
 
+int accessibilityAttributeNames(int /*long*/ id, int /*long*/ sel) {
+    
+    if (accessibilityAttributes is null) {
+        NSMutableArray ourAttributes = NSMutableArray.arrayWithCapacity(10);
+        ourAttributes.addObject(OS.NSAccessibilityRoleAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityRoleDescriptionAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityParentAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityPositionAttribute);
+        ourAttributes.addObject(OS.NSAccessibilitySizeAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityWindowAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityTopLevelUIElementAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityEnabledAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityFocusedAttribute);
+        ourAttributes.addObject(OS.NSAccessibilityChildrenAttribute);
+
+        if (accessible !is null) {
+            // See if the accessible will override or augment the standard list.
+            // Help, title, and description can be overridden.
+            NSMutableArray extraAttributes = NSMutableArray.arrayWithCapacity(3);
+            extraAttributes.addObject(OS.NSAccessibilityHelpAttribute);
+            extraAttributes.addObject(OS.NSAccessibilityDescriptionAttribute);
+            extraAttributes.addObject(OS.NSAccessibilityTitleAttribute);
+
+            for (int i = extraAttributes.count() - 1; i >= 0; i--) {
+                NSString attribute = new NSString(extraAttributes.objectAtIndex(i).id);
+                if (accessible.internal_accessibilityAttributeValue(attribute, ACC.CHILDID_SELF) !is null) {
+                    ourAttributes.addObject(extraAttributes.objectAtIndex(i));
+                }
+            }
+        }
+        
+        accessibilityAttributes = ourAttributes;
+        accessibilityAttributes.retain();
+    }
+    
+    return accessibilityAttributes.id;
+}
+
+int accessibilityAttributeValue (int /*long*/ id, int /*long*/ sel, int /*long*/ arg0) {
+    NSString nsAttributeName = new NSString(arg0);
+    
+    if (accessible !is null) {
+        id returnObject = accessible.internal_accessibilityAttributeValue(nsAttributeName, ACC.CHILDID_SELF);
+        if (returnObject !is null) return returnObject.id;
+    }
+    
+    if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute) || nsAttributeName.isEqualToString (OS.NSAccessibilityRoleDescriptionAttribute)) {
+        NSString role = OS.NSAccessibilityToolbarRole;
+
+        if (nsAttributeName.isEqualToString (OS.NSAccessibilityRoleAttribute))
+            return role.id;
+        else {
+            int roleDescription = OS.NSAccessibilityRoleDescription(role.id, 0);
+            return roleDescription;
+        }
+    } else if (nsAttributeName.isEqualToString(OS.NSAccessibilityEnabledAttribute)) {
+        return NSNumber.numberWithBool(isEnabled()).id;
+    } else if (nsAttributeName.isEqualToString(OS.NSAccessibilityFocusedAttribute)) {
+        bool focused = (view.id is view.window().firstResponder().id);
+        return NSNumber.numberWithBool(focused).id;
+    }
+    
+    return super.accessibilityAttributeValue(id, sel, arg0);
+}
+
+bool accessibilityIsIgnored(int /*long*/ id, int /*long*/ sel) {
+    // Toolbars aren't ignored.
+    return false;   
+}
+
 static int checkStyle (int style) {
     /*
     * Even though it is legal to create this widget
@@ -127,12 +212,10 @@
 }
 
 void createHandle () {
-    SWTView widget = cast(SWTView)new SWTView().alloc();
+    NSView widget = cast(NSView)new SWTView().alloc();
     widget.initWithFrame(new NSRect());
 //  widget.setDrawsBackground(false);
-    widget.setTag(jniRef);
     view = widget;
-    parent.contentView().addSubview_(widget);
 }
 
 void createItem (ToolItem item, int index) {
@@ -143,7 +226,7 @@
         items = newItems;
     }
     item.createWidget();
-    view.addSubview_(item.view);
+    view.addSubview(item.view);
     System.arraycopy (items, index, items, index + 1, itemCount++ - index);
     items [index] = item;
     relayout ();
@@ -421,6 +504,12 @@
     super.releaseChildren (destroy);
 }
 
+void releaseHandle () {
+    super.releaseHandle ();
+    if (accessibilityAttributes !is null) accessibilityAttributes.release();
+    accessibilityAttributes = null;
+}
+
 void removeControl (Control control) {
     super.removeControl (control);
     for (int i=0; i<itemCount; i++) {
@@ -429,10 +518,16 @@
     }
 }
 
-int setBounds (int x, int y, int width, int height, bool move, bool resize) {
-    int result = super.setBounds (x, y, width, height, move, resize);
-    if ((result & RESIZED) !is 0) relayout ();
-    return result;
+void resized () {
+    super.resized ();
+    relayout ();
+}
+
+void setFont(NSFont font) {
+    for (int i = 0; i < itemCount; i++) {
+        ToolItem item = items[i];
+        if (item.button !is null) ((NSButton)item.button).setAttributedTitle(item.createString());
+    }
 }
 
 public void setRedraw (bool redraw) {