Mercurial > projects > dwt-mac
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) {