/******************************************************************************* * Copyright (c) 2006 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 * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * chris.gross@us.ibm.com - initial API and implementation *******************************************************************************/ package org.eclipse.nebula.widgets.pshelf; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Control; /** * <p> * NOTE: THIS WIDGET AND ITS API ARE STILL UNDER DEVELOPMENT. THIS IS A PRE-RELEASE ALPHA * VERSION. USERS SHOULD EXPECT API CHANGES IN FUTURE VERSIONS. * </p> * Renders a single visual unit. * * @author chris.gross@us.ibm.com */ public abstract class AbstractRenderer { /** Hover state. */ private boolean hover; /** Renderer has focus. */ private boolean focus; /** Mouse down on the renderer area. */ private boolean mouseDown; /** Selection state. */ private boolean selected; /** Expansion state. */ private boolean expanded; /** The bounds the renderer paints on. */ private Rectangle bounds = new Rectangle(0, 0, 0, 0); private boolean disposed = false; /** * Returns the bounds. * * @return Rectangle describing the bounds. */ public Rectangle getBounds() { return bounds; } /** * Sets the bounds of the drawing. * * @param x X coordinate. * @param y Y coordinate. * @param width Width. * @param height Height. */ public void setBounds(int x, int y, int width, int height) { setBounds(new Rectangle(x, y, width, height)); } /** * Sets the bounds of the drawing. * * @param bounds Bounds. */ public void setBounds(Rectangle bounds) { this.bounds = bounds; } /** * Returns the size. * * @return size of the renderer. */ public Point getSize() { return new Point(bounds.width, bounds.height); } /** * Sets the location of the drawing. * * @param x X. * @param y Y. */ public void setLocation(int x, int y) { setBounds(new Rectangle(x, y, bounds.width, bounds.height)); } /** * Sets the location of the drawing. * * @param location Location. */ public void setLocation(Point location) { setBounds(new Rectangle(location.x, location.y, bounds.width, bounds.height)); } /** * Sets the area of the drawing. * * @param width Width. * @param height Height. */ public void setSize(int width, int height) { setBounds(new Rectangle(bounds.x, bounds.y, width, height)); } /** * Sets the area of the drawing. * * @param size Size. */ public void setSize(Point size) { setBounds(new Rectangle(bounds.x, bounds.y, size.x, size.y)); } /** * Returns a boolean value indicating if this renderer has focus. * * @return True/false if has focus. */ public boolean isFocus() { return focus; } /** * Sets focus state. * * @param focus focus state. */ public void setFocus(boolean focus) { this.focus = focus; } /** * Returns the hover state. * * @return Is the renderer in the hover state. */ public boolean isHover() { return hover; } /** * Sets the hover state. * * @param hover Hover state. */ public void setHover(boolean hover) { this.hover = hover; } /** * Returns the boolean value indicating if the renderer has the mouseDown * state. * * @return mouse down state. */ public boolean isMouseDown() { return mouseDown; } /** * Sets the mouse down state. * * @param mouseDown Mouse state. */ public void setMouseDown(boolean mouseDown) { this.mouseDown = mouseDown; } /** * Returns the boolean state indicating if the selected state is set. * * @return selected state. */ public boolean isSelected() { return selected; } /** * Sets the selected state. * * @param selected Selection state. */ public void setSelected(boolean selected) { this.selected = selected; } /** * Returns the expansion state. * * @return Returns the expanded. */ public boolean isExpanded() { return expanded; } /** * Sets the expansion state of this renderer. * * @param expanded The expanded to set. */ public void setExpanded(boolean expanded) { this.expanded = expanded; } /** * Paints the visual representation of the given value on the given GC. The * actual class of the value object is determined by the use of the * implementing class. * <p> * Implementors need to respect the bounds values that may have been * specified. The bounds values may affect the x and y values for all * drawing operations as well as the width and heights. Implementors may use * a <code>Transform</code> to translate the coordinates of all the * drawing operations, otherwise they will need to offset each draw. * </p> * * @param gc GC to paint with * @param value the value being painted */ public abstract void paint(GC gc, Object value); /** * Returns the size of the given value's visual representation. * * @param gc convenience GC for string and text extents * @param wHint given width (or SWT.DEFAULT) * @param hHint given height (or SWT.DEFAULT) * @param value value to be sized * @return the size */ public abstract Point computeSize(GC gc, int wHint, int hHint, Object value); /** * Performs any initialization logic (such as creating new colors or fonts). * * @param parent control that is using the renderer */ public abstract void initialize(Control parent); /** * Disposes of any resources managed by this renderer. */ public void dispose(){ setDisposed(true); } /** * @return the disposed */ public boolean isDisposed() { return disposed; } /** * @param disposed the disposed to set */ protected void setDisposed(boolean disposed) { this.disposed = disposed; } }