diff options
Diffstat (limited to 'org.mihalis.opal/src/main/java/org/mihalis/opal/roundedToolbar/RoundedToolItem.java')
-rw-r--r-- | org.mihalis.opal/src/main/java/org/mihalis/opal/roundedToolbar/RoundedToolItem.java | 1005 |
1 files changed, 1005 insertions, 0 deletions
diff --git a/org.mihalis.opal/src/main/java/org/mihalis/opal/roundedToolbar/RoundedToolItem.java b/org.mihalis.opal/src/main/java/org/mihalis/opal/roundedToolbar/RoundedToolItem.java new file mode 100644 index 0000000..535e65b --- /dev/null +++ b/org.mihalis.opal/src/main/java/org/mihalis/opal/roundedToolbar/RoundedToolItem.java @@ -0,0 +1,1005 @@ +/******************************************************************************* + * Copyright (c) 2012 Laurent CARON. 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 + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: Laurent CARON (laurent.caron at gmail dot com) - initial API and implementation + *******************************************************************************/ +package org.mihalis.opal.roundedToolbar; + +import java.util.ArrayList; +import java.util.List; + +import org.eclipse.swt.SWT; +import org.eclipse.swt.SWTException; +import org.eclipse.swt.events.SelectionEvent; +import org.eclipse.swt.events.SelectionListener; +import org.eclipse.swt.graphics.Color; +import org.eclipse.swt.graphics.GC; +import org.eclipse.swt.graphics.Image; +import org.eclipse.swt.graphics.Point; +import org.eclipse.swt.graphics.Rectangle; +import org.eclipse.swt.widgets.Event; +import org.eclipse.swt.widgets.Item; +import org.eclipse.swt.widgets.Widget; +import org.mihalis.opal.utils.AdvancedPath; +import org.mihalis.opal.utils.SWTGraphicUtil; + +/** + * Instances of this class represent a selectable user interface object that + * represents a button in a rounded tool bar. + * <dl> + * <dt><b>Styles:</b></dt> + * <dd>(none)</dd> + * <dt><b>Events:</b></dt> + * <dd>Selection</dd> + * </dl> + * + * @see <a href="http://www.eclipse.org/swt/snippets/#toolbar">ToolBar, ToolItem + * snippets</a> + */ +public class RoundedToolItem extends Item { + + /** The Constant MARGIN. */ + private static final int MARGIN = 4; + + /** The start gradient color. */ + private static Color START_GRADIENT_COLOR = SWTGraphicUtil.getColorSafely(70, 70, 70); + + /** The end gradient color. */ + private static Color END_GRADIENT_COLOR = SWTGraphicUtil.getColorSafely(116, 116, 116); + + /** The parent toolbar. */ + private final RoundedToolbar parentToolbar; + + /** The selection listeners. */ + private final List<SelectionListener> selectionListeners; + + /** The bounds. */ + private Rectangle bounds; + + /** The enabled. */ + private boolean enabled; + + /** The selection. */ + private boolean selection; + + /** The width. */ + private int width; + + /** The height. */ + private int height; + + /** The disabled image. */ + private Image disabledImage; + + /** The selection image. */ + private Image selectionImage; + + /** The alignment. */ + private int alignment; + + /** The vertical alignment. */ + private int verticalAlignment; + + /** The text color selected. */ + private Color textColorSelected; + + /** The text color. */ + private Color textColor; + + /** The tooltip text. */ + private String tooltipText; + + /** The gc. */ + private GC gc; + + /** The toolbar height. */ + private int toolbarHeight; + + /** The is last. */ + private boolean isLast; + + /** + * Constructs a new instance of this class given its parent (which must be a + * <code>ToolBar</code>) and a style value describing its behavior and + * appearance. The item is added to the end of the items maintained by its + * parent. + * <p> + * The style value is either one of the style constants defined in class + * <code>SWT</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>SWT</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 composite control which will be the parent of the new + * instance (cannot be null) + * @see Widget#getStyle + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> + * </ul> + * @exception SWTException <ul> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the + * thread that created the parent</li> + * <li>ERROR_INVALID_SUBCLASS - if this class is not an + * allowed subclass</li> + * </ul> + */ + public RoundedToolItem(final RoundedToolbar parent) { + this(parent, SWT.NONE); + } + + /** + * Constructs a new instance of this class given its parent (which must be a + * <code>ToolBar</code>) and a style value describing its behavior and + * appearance. The item is added to the end of the items maintained by its + * parent. + * <p> + * The style value is either one of the style constants defined in class + * <code>SWT</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>SWT</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 composite control which will be the parent of the new + * instance (cannot be null) + * @param style the style of control to construct + * @see Widget#getStyle + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the parent is null</li> + * </ul> + * @exception SWTException <ul> + * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the + * thread that created the parent</li> + * <li>ERROR_INVALID_SUBCLASS - if this class is not an + * allowed subclass</li> + * </ul> + */ + public RoundedToolItem(final RoundedToolbar parent, final int style) { + super(parent, style); + parent.addItem(this); + parentToolbar = parent; + textColor = parent.getDisplay().getSystemColor(SWT.COLOR_BLACK); + textColorSelected = parent.getDisplay().getSystemColor(SWT.COLOR_WHITE); + enabled = true; + alignment = SWT.CENTER; + verticalAlignment = SWT.CENTER; + selectionListeners = new ArrayList<SelectionListener>(); + width = -1; + height = -1; + } + + /** + * Adds the listener to the collection of listeners who will be notified + * when the control is selected by the user, by sending it one of the + * messages defined in the <code>SelectionListener</code> interface. + * <p> + * <code>widgetDefaultSelected</code> is not called. + * </p> + * + * @param listener the listener which should be notified when the control is + * selected by the user, + * @see SelectionListener + * @see #removeSelectionListener + * @see SelectionEvent + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> + * </ul> + * @exception SWTException <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 addSelectionListener(final SelectionListener listener) { + checkWidget(); + if (listener == null) { + SWT.error(SWT.ERROR_NULL_ARGUMENT); + } + selectionListeners.add(listener); + } + + /** + * Compute default size. + * + * @return the default size of the item + */ + Point computeDefaultSize() { + final Point sizeOfTextAndImages = computeSizeOfTextAndImages(); + return new Point(2 * MARGIN + sizeOfTextAndImages.x, 2 * MARGIN + sizeOfTextAndImages.y); + } + + /** + * Compute size of text and images. + * + * @return the point + */ + private Point computeSizeOfTextAndImages() { + int width = 0, height = 0; + final boolean textNotEmpty = getText() != null && !getText().equals(""); + + if (textNotEmpty) { + final GC gc = new GC(parentToolbar); + final Point extent = gc.stringExtent(getText()); + gc.dispose(); + width += extent.x; + height = extent.y; + } + + final Point imageSize = new Point(-1, -1); + computeImageSize(getImage(), imageSize); + computeImageSize(selectionImage, imageSize); + computeImageSize(disabledImage, imageSize); + + if (imageSize.x != -1) { + width += imageSize.x; + height = Math.max(imageSize.y, height); + if (textNotEmpty) { + width += MARGIN; + } + } + return new Point(width, height); + } + + /** + * Compute image size. + * + * @param image the image + * @param imageSize the image size + */ + private void computeImageSize(final Image image, final Point imageSize) { + if (image == null) { + return; + } + final Rectangle imageBounds = image.getBounds(); + imageSize.x = Math.max(imageBounds.width, imageSize.x); + imageSize.y = Math.max(imageBounds.height, imageSize.y); + } + + /** + * Dispose. + * + * @see org.eclipse.swt.widgets.Widget#dispose() + */ + @Override + public void dispose() { + selectionListeners.clear(); + getParent().removeItem(this); + bounds = null; + disabledImage = null; + selectionImage = null; + textColor = null; + textColorSelected = null; + super.dispose(); + } + + /** + * Draw button. + * + * @param gc the gc + * @param x the x + * @param toolbarHeight the toolbar height + * @param isLast the is last + */ + void drawButton(final GC gc, final int x, final int toolbarHeight, final boolean isLast) { + this.gc = gc; + this.toolbarHeight = toolbarHeight; + this.isLast = isLast; + + if (selection) { + drawBackground(x); + } + if (!isLast) { + drawRightLine(x); + } + + int xPosition = computeHorizontalPosition(x); + + xPosition += drawImage(x + xPosition); + drawText(x + xPosition); + + bounds = new Rectangle(x, 0, getWidth(), toolbarHeight); + } + + /** + * Draw background. + * + * @param x the x + */ + private void drawBackground(final int x) { + final AdvancedPath path = new AdvancedPath(getDisplay()); + final boolean isFirst = getParent().indexOf(this) == 0; + if (isFirst) { + path.addRoundRectangleStraightRight(x, 0, getWidth(), toolbarHeight, parentToolbar.getCornerRadius(), parentToolbar.getCornerRadius()); + } else if (isLast) { + path.addRoundRectangleStraightLeft(x, 0, getWidth(), toolbarHeight, parentToolbar.getCornerRadius(), parentToolbar.getCornerRadius()); + } else { + path.addRectangle(x, 0, getWidth(), toolbarHeight); + } + + gc.setClipping(path); + + gc.setForeground(START_GRADIENT_COLOR); + gc.setBackground(END_GRADIENT_COLOR); + gc.fillGradientRectangle(x, 0, getWidth() + parentToolbar.getCornerRadius(), toolbarHeight, true); + + gc.setClipping((Rectangle) null); + } + + /** + * Draw right line. + * + * @param x the x + */ + private void drawRightLine(final int x) { + gc.setForeground(RoundedToolbar.BORDER_COLOR); + gc.drawLine(x + getWidth(), 0, x + getWidth(), toolbarHeight); + } + + /** + * Compute horizontal position. + * + * @param x the x + * @return the int + */ + private int computeHorizontalPosition(final int x) { + final int widthOfTextAndImage = computeSizeOfTextAndImages().x; + switch (alignment) { + case SWT.CENTER: + return (getWidth() - widthOfTextAndImage) / 2; + case SWT.RIGHT: + return getWidth() - widthOfTextAndImage - MARGIN; + default: + return MARGIN; + } + } + + /** + * Compute vertical position. + * + * @param height the height + * @return the int + */ + private int computeVerticalPosition(final int height) { + switch (verticalAlignment) { + case SWT.CENTER: + return (toolbarHeight - height) / 2; + case SWT.TOP: + return MARGIN; + default: + return toolbarHeight - height - MARGIN; + } + } + + /** + * Fire selection event. + */ + void fireSelectionEvent() { + final Event event = new Event(); + event.widget = parentToolbar; + event.display = getDisplay(); + event.item = this; + event.type = SWT.Selection; + for (final SelectionListener selectionListener : selectionListeners) { + selectionListener.widgetSelected(new SelectionEvent(event)); + } + } + + /** + * Draw image. + * + * @param xPosition the x position + * @return the int + */ + private int drawImage(final int xPosition) { + Image image; + if (!isEnabled()) { + image = disabledImage; + } else if (selection) { + image = selectionImage; + } else { + image = getImage(); + } + + if (image == null) { + return 0; + } + + final int yPosition = computeVerticalPosition(image.getBounds().height); + gc.drawImage(image, xPosition, yPosition); + return image.getBounds().width + MARGIN; + } + + /** + * Draw text. + * + * @param xPosition the x position + */ + private void drawText(final int xPosition) { + gc.setFont(parentToolbar.getFont()); + if (selection) { + gc.setForeground(textColorSelected); + } else { + gc.setForeground(textColor); + } + + final Point textSize = gc.stringExtent(getText()); + final int yPosition = computeVerticalPosition(textSize.y); + + gc.drawText(getText(), xPosition, yPosition, true); + } + + /** + * Returns a value which describes the position of the text in the receiver. + * The value will be one of <code>LEFT</code>, <code>RIGHT</code> or + * <code>CENTER</code>. + * + * @return the alignment + * + * @exception SWTException + * <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 int getAlignment() { + checkWidget(); + return alignment; + } + + /** + * Returns a rectangle describing the receiver's size and location relative + * to its parent (or its display if its parent is null), unless the receiver + * is a shell. In this case, the location is relative to the display. + * + * @return the receiver's bounding rectangle + * + * @exception SWTException + * <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 Rectangle getBounds() { + checkWidget(); + return bounds; + } + + /** + * Gets the disabled image. + * + * @return the image displayed when the button is disabled + * @exception SWTException <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 Image getDisabledImage() { + checkWidget(); + return disabledImage; + } + + /** + * Returns <code>true</code> if the receiver is enabled, and + * <code>false</code> otherwise. A disabled control is typically not + * selectable from the user interface and draws with an inactive or "grayed" + * look. + * + * @return the receiver's enabled state + * @see #isEnabled + * @exception SWTException <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 boolean getEnabled() { + checkWidget(); + return enabled; + } + + /** + * Returns the whole height of the widget. + * + * @return the receiver's height + * + * @exception SWTException + * <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 int getHeight() { + checkWidget(); + if (height == -1) { + return computeDefaultSize().y; + } + return height; + } + + /** + * Returns the receiver's parent, which must be a + * <code>RoundedToolBar</code>. + * + * @return the receiver's parent + * + * @exception SWTException + * <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 RoundedToolbar getParent() { + checkWidget(); + return parentToolbar; + } + + /** + * Returns <code>true</code> if the receiver is selected, and false + * otherwise. + * + * @return the selection state + * + * @exception SWTException + * <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 boolean getSelection() { + checkWidget(); + return selection; + } + + /** + * Gets the selection image. + * + * @return the image displayed when the button is selected + * @exception SWTException <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 Image getSelectionImage() { + checkWidget(); + return selectionImage; + } + + /** + * Returns the color of the text when the button is enabled and not + * selected. + * + * @return the receiver's text color + * + * @exception SWTException + * <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 Color getTextColor() { + checkWidget(); + return textColor; + } + + /** + * Returns the color of the text when the button is not selected. + * + * @return the receiver's text color + * + * @exception SWTException + * <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 Color getTextColorSelected() { + checkWidget(); + return textColorSelected; + } + + /** + * Returns the receiver's tool tip text, or null if it has not been set. + * + * @return the receiver's tool tip text + * + * @exception SWTException + * <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 String getTooltipText() { + checkWidget(); + return tooltipText; + } + + /** + * Returns a value which describes the position of the text in the receiver. + * The value will be one of <code>TOP</code>, <code>BOTTOM</code> or + * <code>CENTER</code>. + * + * @return the alignment + * + * @exception SWTException + * <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 int getVerticalAlignment() { + checkWidget(); + return verticalAlignment; + } + + /** + * Returns the whole height of the widget. + * + * @return the receiver's height + * + * @exception SWTException + * <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 int getWidth() { + checkWidget(); + if (width == -1) { + return computeDefaultSize().x; + } + return width; + } + + /** + * Returns <code>true</code> if the receiver is enabled, and + * <code>false</code> otherwise. A disabled control is typically not + * selectable from the user interface and draws with an inactive or "grayed" + * look. + * + * @return the receiver's enabled state + * @see #getEnabled + * @exception SWTException <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 boolean isEnabled() { + checkWidget(); + return enabled; + } + + /** + * Removes the listener from the collection of listeners who will be + * notified when the control is selected by the user. + * + * @param listener the listener which should no longer be notified + * @see SelectionListener + * @see #addSelectionListener + * @exception IllegalArgumentException <ul> + * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> + * </ul> + * @exception SWTException <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 removeSelectionListener(final SelectionListener listener) { + checkWidget(); + if (listener == null) { + SWT.error(SWT.ERROR_NULL_ARGUMENT); + } + selectionListeners.remove(listener); + } + + /** + * Controls how text will be displayed in the receiver. The argument should + * be one of <code>LEFT</code>, <code>RIGHT</code> or <code>CENTER</code>. + * + * @param alignment the new alignment + * + * @exception SWTException + * <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 setAlignment(final int alignment) { + checkWidget(); + this.alignment = alignment; + } + + /** + * Sets the receiver's size and location to the rectangular area specified + * by the argument. The <code>x</code> and <code>y</code> fields of the + * rectangle are relative to the receiver's parent (or its display if its + * parent is null). + * <p> + * Note: Attempting to set the width or height of the receiver to a negative + * number will cause that value to be set to zero instead. + * </p> + * + * @param rectangle the new bounds + * @exception SWTException <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 setBounds(final Rectangle rectangle) { + checkWidget(); + if (bounds == null) { + SWT.error(SWT.ERROR_NULL_ARGUMENT); + } + + bounds = new Rectangle(Math.max(0, rectangle.x), // + Math.max(0, rectangle.y), // + Math.max(0, rectangle.width), // + Math.max(0, rectangle.height)); + + } + + /** + * Sets the receiver's image to the argument when this is one is disabled, + * which may be null indicating that no image should be displayed. + * + * @param image the image to display on the receiver (may be null) + * + * @exception IllegalArgumentException + * <ul> + * <li>ERROR_INVALID_ARGUMENT - if the image has been + * disposed</li> + * </ul> + * @exception SWTException + * <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 setDisabledImage(final Image image) { + checkWidget(); + disabledImage = image; + } + + /** + * Enables the receiver if the argument is <code>true</code>, and disables + * it otherwise. + * <p> + * A disabled control is typically not selectable from the user interface + * and draws with an inactive or "grayed" look. + * </p> + * + * @param enabled the new enabled state + * + * @exception SWTException + * <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 setEnabled(final boolean enabled) { + checkWidget(); + this.enabled = enabled; + } + + /** + * Sets the height of the receiver. + * <p> + * Note: Attempting to set the width or height of the receiver to a negative + * number will cause that value to be set to zero instead. + * </p> + * @param height the new width + * + * @exception SWTException + * <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 setHeight(final int height) { + checkWidget(); + this.height = Math.max(height, 0); + } + + /** + * Sets the selection state of the receiver. + * + * @param selected the new selection state + * + * @exception SWTException + * <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 setSelection(final boolean selected) { + checkWidget(); + selection = selected; + } + + /** + * Sets the receiver's image to the argument when this one is selected, + * which may be null indicating that no image should be displayed. + * + * @param image the image to display on the receiver (may be null) + * + * @exception IllegalArgumentException + * <ul> + * <li>ERROR_INVALID_ARGUMENT - if the image has been + * disposed</li> + * </ul> + * @exception SWTException + * <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 setSelectionImage(final Image image) { + checkWidget(); + selectionImage = image; + } + + /** + * Sets the receiver's text color to the argument, which may be null + * indicating that no image should be displayed. + * + * @param textColor the text color to display on the receiver (may be null) + * + * @exception IllegalArgumentException + * <ul> + * <li>ERROR_INVALID_ARGUMENT - if the image has been + * disposed</li> + * </ul> + * @exception SWTException + * <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 setTextColor(final Color textColor) { + checkWidget(); + this.textColor = textColor; + } + + /** + * Sets the receiver's text color to the argument when this one is selected, + * which may be null indicating that no image should be displayed. + * + * @param textColor the text color to display on the receiver (may be null) + * + * @exception IllegalArgumentException + * <ul> + * <li>ERROR_INVALID_ARGUMENT - if the image has been + * disposed</li> + * </ul> + * @exception SWTException + * <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 setTextColorSelected(final Color textColor) { + checkWidget(); + textColorSelected = textColor; + } + + /** + * Sets the receiver's tool tip text to the argument, which may be null + * indicating that the default tool tip for the control will be shown. For a + * control that has a default tool tip, such as the Tree control on Windows, + * setting the tool tip text to an empty string replaces the default, + * causing no tool tip text to be shown. + * <p> + * The mnemonic indicator (character '&') is not displayed in a tool + * tip. To display a single '&' in the tool tip, the character '&' + * can be escaped by doubling it in the string. + * </p> + * + * @param string the new tool tip text (or null) + * + * @exception SWTException + * <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 setTooltipText(final String string) { + checkWidget(); + tooltipText = string == null ? "" : string; + } + + /** + * Controls how text will be displayed in the receiver. The argument should + * be one of <code>TOP</code>, <code>BOTTOM</code> or <code>CENTER</code>. + * + * @param verticalAlignment the new vertical alignment + * @exception SWTException <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 setVerticalAlignment(final int verticalAlignment) { + checkWidget(); + this.verticalAlignment = verticalAlignment; + } + + /** + * Sets the width of the receiver. + * <p> + * Note: Attempting to set the width or height of the receiver to a negative + * number will cause that value to be set to zero instead. + * </p> + * @param width the new width + * + * @exception SWTException + * <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 setWidth(final int width) { + checkWidget(); + this.width = Math.max(0, width); + } +} |