Mercurial > projects > dwt-mac
diff dwt/custom/CBanner.d @ 41:6337764516f1
Sync dwt/custom with dwt-linux (took copy of complete folder)
author | Frank Benoit <benoit@tionex.de> |
---|---|
date | Tue, 07 Oct 2008 16:29:55 +0200 |
parents | 5b53d338c709 |
children |
line wrap: on
line diff
--- a/dwt/custom/CBanner.d Tue Oct 07 14:41:31 2008 +0200 +++ b/dwt/custom/CBanner.d Tue Oct 07 16:29:55 2008 +0200 @@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2007 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 @@ -7,12 +7,13 @@ * * Contributors: * IBM Corporation - initial API and implementation - * * Port to the D programming language: - * Jacob Carlborg <jacob.carlborg@gmail.com> + * Frank Benoit <benoit@tionex.de> *******************************************************************************/ module dwt.custom.CBanner; + + import dwt.DWT; import dwt.DWTException; import dwt.graphics.Color; @@ -26,6 +27,10 @@ import dwt.widgets.Event; import dwt.widgets.Layout; import dwt.widgets.Listener; +import dwt.custom.CBannerLayout; + +import Math = tango.math.Math; + /** * Instances of this class implement a Composite that lays out its @@ -42,12 +47,14 @@ * <dt><b>Styles:</b></dt> * <dd>NONE</dd> * <dt><b>Events:</b></dt> - * <dd>cast(None)</dd> + * <dd>(None)</dd> * </dl> * <p> * IMPORTANT: This class is <em>not</em> intended to be subclassed. * </p> - * + * + * @see <a href="http://www.eclipse.org/swt/">Sample code and further information</a> + * * @since 3.0 */ @@ -59,9 +66,9 @@ bool simple = true; - int[] curve = new int[0]; + int[] curve; int curveStart = 0; - Rectangle curveRect = new Rectangle(0, 0, 0, 0); + Rectangle curveRect; int curve_width = 5; int curve_indent = -2; @@ -82,506 +89,472 @@ static const int MIN_LEFT = 10; static int BORDER1 = DWT.COLOR_WIDGET_HIGHLIGHT_SHADOW; - /** - * Constructs a new instance of this class given its parent - * and a style value describing its behavior and appearance. - * <p> - * The style value is either one of the style constants defined in - * class <code>DWT</code> which is applicable to instances of this - * class, or must be built by <em>bitwise OR</em>'ing together - * (that is, using the <code>int</code> "|" operator) two or more - * of those <code>DWT</code> style constants. The class description - * lists the style constants that are applicable to the class. - * Style bits are also inherited from superclasses. - * </p> - * - * @param parent a widget which will be the parent of the new instance (cannot be null) - * @param style the style of widget to construct - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> - * </ul> - * @exception DWTException <ul> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> - * </ul> - * - */ - public this (Composite parent, int style) { - super(parent, checkStyle(style)); - super.setLayout(new CBannerLayout()); - resizeCursor = new Cursor(getDisplay(), DWT.CURSOR_SIZEWE); + +/** + * Constructs a new instance of this class given its parent + * and a style value describing its behavior and appearance. + * <p> + * The style value is either one of the style constants defined in + * class <code>DWT</code> which is applicable to instances of this + * class, or must be built by <em>bitwise OR</em>'ing together + * (that is, using the <code>int</code> "|" operator) two or more + * of those <code>DWT</code> style constants. The class description + * lists the style constants that are applicable to the class. + * Style bits are also inherited from superclasses. + * </p> + * + * @param parent a widget which will be the parent of the new instance (cannot be null) + * @param style the style of widget to construct + * + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> + * </ul> + * @exception DWTException <ul> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the parent</li> + * </ul> + * + */ +public this(Composite parent, int style) { + curveRect = new Rectangle(0, 0, 0, 0); + super(parent, checkStyle(style)); + super.setLayout(new CBannerLayout()); + resizeCursor = new Cursor(getDisplay(), DWT.CURSOR_SIZEWE); - Listener listener = new class Listener { - public void handleEvent (Event e) { - switch (e.type) { - case DWT.Dispose: - onDispose(); - break; - case DWT.MouseDown: - onMouseDown(e.x, e.y); - break; - case DWT.MouseExit: - onMouseExit(); - break; - case DWT.MouseMove: - onMouseMove(e.x, e.y); - break; - case DWT.MouseUp: - onMouseUp(); - break; - case DWT.Paint: - onPaint(e.gc); - break; - case DWT.Resize: - onResize(); - break; - } + Listener listener = new class() Listener { + public void handleEvent(Event e) { + switch (e.type) { + case DWT.Dispose: + onDispose(); break; + case DWT.MouseDown: + onMouseDown (e.x, e.y); break; + case DWT.MouseExit: + onMouseExit(); break; + case DWT.MouseMove: + onMouseMove(e.x, e.y); break; + case DWT.MouseUp: + onMouseUp(); break; + case DWT.Paint: + onPaint(e.gc); break; + case DWT.Resize: + onResize(); break; + default: } - }; - int[] events = new int[][DWT.Dispose , DWT.MouseDown , DWT.MouseExit , DWT.MouseMove , DWT.MouseUp , DWT.Paint , DWT.Resize]; - for (int i = 0; i < events.length; i++) { - addListener(events[i], listener); } + }; + int[] events = [DWT.Dispose, DWT.MouseDown, DWT.MouseExit, DWT.MouseMove, DWT.MouseUp, DWT.Paint, DWT.Resize]; + for (int i = 0; i < events.length; i++) { + addListener(events[i], listener); } +} +static int[] bezier(int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int count) { + // The parametric equations for a Bezier curve for x[t] and y[t] where 0 <= t <=1 are: + // x[t] = x0+3(x1-x0)t+3(x0+x2-2x1)t^2+(x3-x0+3x1-3x2)t^3 + // y[t] = y0+3(y1-y0)t+3(y0+y2-2y1)t^2+(y3-y0+3y1-3y2)t^3 + double a0 = x0; + double a1 = 3*(x1 - x0); + double a2 = 3*(x0 + x2 - 2*x1); + double a3 = x3 - x0 + 3*x1 - 3*x2; + double b0 = y0; + double b1 = 3*(y1 - y0); + double b2 = 3*(y0 + y2 - 2*y1); + double b3 = y3 - y0 + 3*y1 - 3*y2; - static int[] bezier (int x0, int y0, int x1, int y1, int x2, int y2, int x3, int y3, int count) { - // The parametric equations for a Bezier curve for x[t] and y[t] where 0 <= t <=1 are: - // x[t] = x0+3(x1-x0)t+3(x0+x2-2x1)t^2+(x3-x0+3x1-3x2)t^3 - // y[t] = y0+3(y1-y0)t+3(y0+y2-2y1)t^2+(y3-y0+3y1-3y2)t^3 - double a0 = x0; - double a1 = 3 * (x1 - x0); - double a2 = 3 * (x0 + x2 - 2 * x1); - double a3 = x3 - x0 + 3 * x1 - 3 * x2; - double b0 = y0; - double b1 = 3 * (y1 - y0); - double b2 = 3 * (y0 + y2 - 2 * y1); - double b3 = y3 - y0 + 3 * y1 - 3 * y2; - - int[] polygon = new int[2 * count + 2]; - for (int i = 0; i <= count; i++) { - double t = cast(double) i / cast(double) count; - polygon[2 * i] = cast(int) (a0 + a1 * t + a2 * t * t + a3 * t * t * t); - polygon[2 * i + 1] = cast(int) (b0 + b1 * t + b2 * t * t + b3 * t * t * t); - } - return polygon; + int[] polygon = new int[2*count + 2]; + for (int i = 0; i <= count; i++) { + double t = cast(double)i / cast(double)count; + polygon[2*i] = cast(int)(a0 + a1*t + a2*t*t + a3*t*t*t); + polygon[2*i + 1] = cast(int)(b0 + b1*t + b2*t*t + b3*t*t*t); } + return polygon; +} +static int checkStyle (int style) { + return DWT.NONE; +} +/** +* Returns the Control that appears on the bottom side of the banner. +* +* @return the control that appears on the bottom side of the banner or null +* +* @exception DWTException <ul> +* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> +* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> +* </ul> +* +* @since 3.0 +*/ +public Control getBottom() { + checkWidget(); + return bottom; +} +public override Rectangle getClientArea() { + return new Rectangle(0, 0, 0, 0); +} - static int checkStyle (int style) { - return DWT.NONE; - } - - /** - * Returns the Control that appears on the bottom side of the banner. - * - * @return the control that appears on the bottom side of the banner or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - * - * @since 3.0 - */ - public Control getBottom () { - checkWidget(); - return bottom; - } - - public Rectangle getClientArea () { - return new Rectangle(0, 0, 0, 0); - } +/** +* Returns the Control that appears on the left side of the banner. +* +* @return the control that appears on the left side of the banner or null +* +* @exception DWTException <ul> +* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> +* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> +* </ul> +* +* @since 3.0 +*/ +public Control getLeft() { + checkWidget(); + return left; +} - /** - * Returns the Control that appears on the left side of the banner. - * - * @return the control that appears on the left side of the banner or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - * - * @since 3.0 - */ - public Control getLeft () { - checkWidget(); - return left; +/** +* Returns the Control that appears on the right side of the banner. +* +* @return the control that appears on the right side of the banner or null +* +* @exception DWTException <ul> +* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> +* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> +* </ul> +* +* @since 3.0 +*/ +public Control getRight() { + checkWidget(); + return right; +} +/** + * Returns the minimum size of the control that appears on the right of the banner. + * + * @return the minimum size of the control that appears on the right of the banner + * + * @since 3.1 + */ +public Point getRightMinimumSize() { + checkWidget(); + return new Point(rightMinWidth, rightMinHeight); +} +/** + * Returns the width of the control that appears on the right of the banner. + * + * @return the width of the control that appears on the right of the banner + * + * @since 3.0 + */ +public int getRightWidth() { + checkWidget(); + if (right is null) return 0; + if (rightWidth is DWT.DEFAULT) { + Point size = right.computeSize(DWT.DEFAULT, DWT.DEFAULT, false); + return size.x; } - - /** - * Returns the Control that appears on the right side of the banner. - * - * @return the control that appears on the right side of the banner or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - * - * @since 3.0 - */ - public Control getRight () { - checkWidget(); - return right; + return rightWidth; +} +/** + * Returns <code>true</code> if the CBanner is rendered + * with a simple, traditional shape. + * + * @return <code>true</code> if the CBanner is rendered with a simple shape + * + * @since 3.0 + */ +public bool getSimple() { + checkWidget(); + return simple; +} +void onDispose() { + if (resizeCursor !is null) resizeCursor.dispose(); + resizeCursor = null; + left = null; + right = null; + bottom = null; +} +void onMouseDown (int x, int y) { + if (curveRect.contains(x, y)) { + dragging = true; + rightDragDisplacement = curveStart - x + curve_width - curve_indent; } - - /** - * Returns the minimum size of the control that appears on the right of the banner. - * - * @return the minimum size of the control that appears on the right of the banner - * - * @since 3.1 - */ - public Point getRightMinimumSize () { - checkWidget(); - return new Point(rightMinWidth, rightMinHeight); - } - - /** - * Returns the width of the control that appears on the right of the banner. - * - * @return the width of the control that appears on the right of the banner - * - * @since 3.0 - */ - public int getRightWidth () { - checkWidget(); - if (right is null) - return 0; - if (rightWidth is DWT.DEFAULT) { - Point size = right.computeSize(DWT.DEFAULT, DWT.DEFAULT, false); - return size.x; +} +void onMouseExit() { + if (!dragging) setCursor(null); +} +void onMouseMove(int x, int y) { + if (dragging) { + Point size = getSize(); + if (!(0 < x && x < size.x)) return; + rightWidth = Math.max(0, size.x - x - rightDragDisplacement); + if (rightMinWidth is DWT.DEFAULT) { + Point minSize = right.computeSize(rightMinWidth, rightMinHeight); + rightWidth = Math.max(minSize.x, rightWidth); + } else { + rightWidth = Math.max(rightMinWidth, rightWidth); } - return rightWidth; + layout(false); + return; } - - /** - * Returns <code>true</code> if the CBanner is rendered - * with a simple, traditional shape. - * - * @return <code>true</code> if the CBanner is rendered with a simple shape - * - * @since 3.0 - */ - public bool getSimple () { - checkWidget(); - return simple; + if (curveRect.contains(x, y)) { + setCursor(resizeCursor); + } else { + setCursor(null); } - - void onDispose () { - if (resizeCursor !is null) - resizeCursor.dispose(); - resizeCursor = null; - left = null; - right = null; - bottom = null; +} +void onMouseUp () { + dragging = false; +} +void onPaint(GC gc) { +// Useful for debugging paint problems +// { +// Point size = getSize(); +// gc.setBackground(getDisplay().getSystemColor(DWT.COLOR_GREEN)); +// gc.fillRectangle(-10, -10, size.x+20, size.y+20); +// } + if (left is null && right is null) return; + Point size = getSize(); + Color border1 = getDisplay().getSystemColor(BORDER1); + if (bottom !is null) { + int y = bottom.getBounds().y - BORDER_STRIPE - 1; + gc.setForeground(border1); + gc.drawLine(0, y, size.x, y); } - - void onMouseDown (int x, int y) { - if (curveRect.contains(x, y)) { - dragging = true; - rightDragDisplacement = curveStart - x + curve_width - curve_indent; - } + if (left is null || right is null) return; + int[] line1 = new int[curve.length+6]; + int index = 0; + int x = curveStart; + line1[index++] = x + 1; + line1[index++] = size.y - BORDER_STRIPE; + for (int i = 0; i < curve.length/2; i++) { + line1[index++]=x+curve[2*i]; + line1[index++]=curve[2*i+1]; } + line1[index++] = x + curve_width; + line1[index++] = 0; + line1[index++] = size.x; + line1[index++] = 0; - void onMouseExit () { - if (!dragging) - setCursor(null); - } + Color background = getBackground(); - void onMouseMove (int x, int y) { - if (dragging) { - Point size = getSize(); - if (!(0 < x && x < size.x)) - return; - rightWidth = Math.max(0, size.x - x - rightDragDisplacement); - if (rightMinWidth is DWT.DEFAULT) { - Point minSize = right.computeSize(rightMinWidth, rightMinHeight); - rightWidth = Math.max(minSize.x, rightWidth); - } - else { - rightWidth = Math.max(rightMinWidth, rightWidth); - } - layout(false); - return; + if (getDisplay().getDepth() >= 15) { + // Anti- aliasing + int[] line2 = new int[line1.length]; + index = 0; + for (int i = 0; i < line1.length/2; i++) { + line2[index] = line1[index++] - 1; + line2[index] = line1[index++]; + } + int[] line3 = new int[line1.length]; + index = 0; + for (int i = 0; i < line1.length/2; i++) { + line3[index] = line1[index++] + 1; + line3[index] = line1[index++]; } - if (curveRect.contains(x, y)) { - setCursor(resizeCursor); - } - else { - setCursor(null); - } - } + RGB from = border1.getRGB(); + RGB to = background.getRGB(); + int red = from.red + 3*(to.red - from.red)/4; + int green = from.green + 3*(to.green - from.green)/4; + int blue = from.blue + 3*(to.blue - from.blue)/4; + Color color = new Color(getDisplay(), red, green, blue); + gc.setForeground(color); + gc.drawPolyline(line2); + gc.drawPolyline(line3); + color.dispose(); - void onMouseUp () { - dragging = false; + // draw tail fading to background + int x1 = Math.max(0, curveStart - CURVE_TAIL); + gc.setForeground(background); + gc.setBackground(border1); + gc.fillGradientRectangle(x1, size.y - BORDER_STRIPE, curveStart-x1+1, 1, false); + } else { + // draw solid tail + int x1 = Math.max(0, curveStart - CURVE_TAIL); + gc.setForeground(border1); + gc.drawLine(x1, size.y - BORDER_STRIPE, curveStart+1, size.y - BORDER_STRIPE); } - void onPaint (GC gc) { - // Useful for debugging paint problems - // { - // Point size = getSize(); - // gc.setBackground(getDisplay().getSystemColor(DWT.COLOR_GREEN)); - // gc.fillRectangle(-10, -10, size.x+20, size.y+20); - // } - if (left is null && right is null) - return; - Point size = getSize(); - Color border1 = getDisplay().getSystemColor(BORDER1); - if (bottom !is null) { - int y = bottom.getBounds().y - BORDER_STRIPE - 1; - gc.setForeground(border1); - gc.drawLine(0, y, size.x, y); - } - if (left is null || right is null) - return; - int[] line1 = new int[curve.length + 6]; - int index = 0; - int x = curveStart; - line1[index++] = x + 1; - line1[index++] = size.y - BORDER_STRIPE; - for (int i = 0; i < curve.length / 2; i++) { - line1[index++] = x + curve[2 * i]; - line1[index++] = curve[2 * i + 1]; - } - line1[index++] = x + curve_width; - line1[index++] = 0; - line1[index++] = size.x; - line1[index++] = 0; - - Color background = getBackground(); - - if (getDisplay().getDepth() >= 15) { - // Anti- aliasing - int[] line2 = new int[line1.length]; - index = 0; - for (int i = 0; i < line1.length / 2; i++) { - line2[index] = line1[index++] - 1; - line2[index] = line1[index++]; - } - int[] line3 = new int[line1.length]; - index = 0; - for (int i = 0; i < line1.length / 2; i++) { - line3[index] = line1[index++] + 1; - line3[index] = line1[index++]; - } - RGB from = border1.getRGB(); - RGB to = background.getRGB(); - int red = from.red + 3 * (to.red - from.red) / 4; - int green = from.green + 3 * (to.green - from.green) / 4; - int blue = from.blue + 3 * (to.blue - from.blue) / 4; - Color color = new Color(getDisplay(), red, green, blue); - gc.setForeground(color); - gc.drawPolyline(line2); - gc.drawPolyline(line3); - color.dispose(); + // draw border + gc.setForeground(border1); + gc.drawPolyline(line1); +} - // draw tail fading to background - int x1 = Math.max(0, curveStart - CURVE_TAIL); - gc.setForeground(background); - gc.setBackground(border1); - gc.fillGradientRectangle(x1, size.y - BORDER_STRIPE, curveStart - x1 + 1, 1, false); - } - else { - // draw solid tail - int x1 = Math.max(0, curveStart - CURVE_TAIL); - gc.setForeground(border1); - gc.drawLine(x1, size.y - BORDER_STRIPE, curveStart + 1, size.y - BORDER_STRIPE); - } - - // draw border - gc.setForeground(border1); - gc.drawPolyline(line1); - } - - void onResize () { - updateCurve(getSize().y); +void onResize() { + updateCurve(getSize().y); +} +/** +* Set the control that appears on the bottom side of the banner. +* The bottom control is optional. Setting the bottom control to null will remove it from +* the banner - however, the creator of the control must dispose of the control. +* +* @param control the control to be displayed on the bottom or null +* +* @exception DWTException <ul> +* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> +* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> +* <li>ERROR_INVALID_ARGUMENT - if the bottom control was not created as a child of the receiver</li> +* </ul> +* +* @since 3.0 +*/ +public void setBottom(Control control) { + checkWidget(); + if (control !is null && control.getParent() !is this) { + DWT.error(DWT.ERROR_INVALID_ARGUMENT); } - - /** - * Set the control that appears on the bottom side of the banner. - * The bottom control is optional. Setting the bottom control to null will remove it from - * the banner - however, the creator of the control must dispose of the control. - * - * @param control the control to be displayed on the bottom or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * <li>ERROR_INVALID_ARGUMENT - if the bottom control was not created as a child of the receiver</li> - * </ul> - * - * @since 3.0 - */ - public void setBottom (Control control) { - checkWidget(); - if (control !is null && control.getParent() !is this) { - DWT.error(DWT.ERROR_INVALID_ARGUMENT); - } - if (bottom !is null && !bottom.isDisposed()) { - Point size = bottom.getSize(); - bottom.setLocation(OFFSCREEN - size.x, OFFSCREEN - size.y); - } - bottom = control; - layout(false); + if (bottom !is null && !bottom.isDisposed()) { + Point size = bottom.getSize(); + bottom.setLocation(OFFSCREEN - size.x, OFFSCREEN - size.y); } - - /** - * Sets the layout which is associated with the receiver to be - * the argument which may be null. - * <p> - * Note: No Layout can be set on this Control because it already - * manages the size and position of its children. - * </p> - * - * @param layout the receiver's new layout or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - */ - public void setLayout (Layout layout) { - checkWidget(); - return; - } + bottom = control; + layout(false); +} +/** + * Sets the layout which is associated with the receiver to be + * the argument which may be null. + * <p> + * Note: No Layout can be set on this Control because it already + * manages the size and position of its children. + * </p> + * + * @param layout the receiver's new layout or null + * + * @exception DWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> + * </ul> + */ +public override void setLayout (Layout layout) { + checkWidget(); + return; +} - /** - * Set the control that appears on the left side of the banner. - * The left control is optional. Setting the left control to null will remove it from - * the banner - however, the creator of the control must dispose of the control. - * - * @param control the control to be displayed on the left or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * <li>ERROR_INVALID_ARGUMENT - if the left control was not created as a child of the receiver</li> - * </ul> - * - * @since 3.0 - */ - public void setLeft (Control control) { - checkWidget(); - if (control !is null && control.getParent() !is this) { - DWT.error(DWT.ERROR_INVALID_ARGUMENT); - } - if (left !is null && !left.isDisposed()) { - Point size = left.getSize(); - left.setLocation(OFFSCREEN - size.x, OFFSCREEN - size.y); - } - left = control; - layout(false); +/** +* Set the control that appears on the left side of the banner. +* The left control is optional. Setting the left control to null will remove it from +* the banner - however, the creator of the control must dispose of the control. +* +* @param control the control to be displayed on the left or null +* +* @exception DWTException <ul> +* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> +* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> +* <li>ERROR_INVALID_ARGUMENT - if the left control was not created as a child of the receiver</li> +* </ul> +* +* @since 3.0 +*/ +public void setLeft(Control control) { + checkWidget(); + if (control !is null && control.getParent() !is this) { + DWT.error(DWT.ERROR_INVALID_ARGUMENT); + } + if (left !is null && !left.isDisposed()) { + Point size = left.getSize(); + left.setLocation(OFFSCREEN - size.x, OFFSCREEN - size.y); } - - /** - * Set the control that appears on the right side of the banner. - * The right control is optional. Setting the right control to null will remove it from - * the banner - however, the creator of the control must dispose of the control. - * - * @param control the control to be displayed on the right or null - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * <li>ERROR_INVALID_ARGUMENT - if the right control was not created as a child of the receiver</li> - * </ul> - * - * @since 3.0 - */ - public void setRight (Control control) { - checkWidget(); - if (control !is null && control.getParent() !is this) { - DWT.error(DWT.ERROR_INVALID_ARGUMENT); - } - if (right !is null && !right.isDisposed()) { - Point size = right.getSize(); - right.setLocation(OFFSCREEN - size.x, OFFSCREEN - size.y); - } - right = control; - layout(false); + left = control; + layout(false); +} +/** +* Set the control that appears on the right side of the banner. +* The right control is optional. Setting the right control to null will remove it from +* the banner - however, the creator of the control must dispose of the control. +* +* @param control the control to be displayed on the right or null +* +* @exception DWTException <ul> +* <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> +* <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> +* <li>ERROR_INVALID_ARGUMENT - if the right control was not created as a child of the receiver</li> +* </ul> +* +* @since 3.0 +*/ +public void setRight(Control control) { + checkWidget(); + if (control !is null && control.getParent() !is this) { + DWT.error(DWT.ERROR_INVALID_ARGUMENT); + } + if (right !is null && !right.isDisposed()) { + Point size = right.getSize(); + right.setLocation(OFFSCREEN - size.x, OFFSCREEN - size.y); } - - /** - * Set the minimum height of the control that appears on the right side of the banner. - * - * @param size the minimum size of the control on the right - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * <li>ERROR_INVALID_ARGUMENT - if the size is null or the values of size are less than DWT.DEFAULT</li> - * </ul> - * - * @since 3.1 - */ - public void setRightMinimumSize (Point size) { - checkWidget(); - if (size is null || size.x < DWT.DEFAULT || size.y < DWT.DEFAULT) - DWT.error(DWT.ERROR_INVALID_ARGUMENT); - rightMinWidth = size.x; - rightMinHeight = size.y; + right = control; + layout(false); +} +/** + * Set the minimum height of the control that appears on the right side of the banner. + * + * @param size the minimum size of the control on the right + * + * @exception DWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> + * <li>ERROR_INVALID_ARGUMENT - if the size is null or the values of size are less than DWT.DEFAULT</li> + * </ul> + * + * @since 3.1 + */ +public void setRightMinimumSize(Point size) { + checkWidget(); + if (size is null || size.x < DWT.DEFAULT || size.y < DWT.DEFAULT) DWT.error(DWT.ERROR_INVALID_ARGUMENT); + rightMinWidth = size.x; + rightMinHeight = size.y; + layout(false); +} +/** + * Set the width of the control that appears on the right side of the banner. + * + * @param width the width of the control on the right + * + * @exception DWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> + * <li>ERROR_INVALID_ARGUMENT - if width is less than DWT.DEFAULT</li> + * </ul> + * + * @since 3.0 + */ +public void setRightWidth(int width) { + checkWidget(); + if (width < DWT.DEFAULT) DWT.error(DWT.ERROR_INVALID_ARGUMENT); + rightWidth = width; + layout(false); +} +/** + * Sets the shape that the CBanner will use to render itself. + * + * @param simple <code>true</code> if the CBanner should render itself in a simple, traditional style + * + * @exception DWTException <ul> + * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> + * </ul> + * + * @since 3.0 + */ +public void setSimple(bool simple) { + checkWidget(); + if (this.simple !is simple) { + this.simple = simple; + if (simple) { + curve_width = 5; + curve_indent = -2; + } else { + curve_width = 50; + curve_indent = 5; + } + updateCurve(getSize().y); layout(false); - } - - /** - * Set the width of the control that appears on the right side of the banner. - * - * @param width the width of the control on the right - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * <li>ERROR_INVALID_ARGUMENT - if width is less than DWT.DEFAULT</li> - * </ul> - * - * @since 3.0 - */ - public void setRightWidth (int width) { - checkWidget(); - if (width < DWT.DEFAULT) - DWT.error(DWT.ERROR_INVALID_ARGUMENT); - rightWidth = width; - layout(false); - } - - /** - * Sets the shape that the CBanner will use to render itself. - * - * @param simple <code>true</code> if the CBanner should render itself in a simple, traditional style - * - * @exception DWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - * - * @since 3.0 - */ - public void setSimple (bool simple) { - checkWidget(); - if (this.simple !is simple) { - this.simple = simple; - if (simple) { - curve_width = 5; - curve_indent = -2; - } - else { - curve_width = 50; - curve_indent = 5; - } - updateCurve(getSize().y); - layout(false); - redraw(); - } - } - - void updateCurve (int height) { - int h = height - BORDER_STRIPE; - if (simple) { - curve = new int[][0 , h , 1 , h , 2 , h - 1 , 3 , h - 2 , 3 , 2 , 4 , 1 , 5 , 0]; - } - else { - curve = bezier(0, h + 1, BEZIER_LEFT, h + 1, curve_width - BEZIER_RIGHT, 0, curve_width, 0, curve_width); - } + redraw(); } } +void updateCurve(int height) { + int h = height - BORDER_STRIPE; + if (simple) { + curve = [0,h, 1,h, 2,h-1, 3,h-2, + 3,2, 4,1, 5,0]; + } else { + curve = bezier(0, h+1, BEZIER_LEFT, h+1, + curve_width-BEZIER_RIGHT, 0, curve_width, 0, + curve_width); + } +} +}