blob: 8919972907bcf3e93e2add0c9e272cb6a09ddc44 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2010 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.draw2d;
import java.beans.PropertyChangeListener;
import java.util.Collection;
import java.util.List;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Cursor;
import org.eclipse.swt.graphics.Font;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Insets;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;
import org.eclipse.draw2d.geometry.Translatable;
/**
* A lightweight graphical object. Figures are rendered to a {@link Graphics}
* object. Figures can be composed to create complex graphics.
*
* @noimplement This interface is not intended to be implemented by clients. Use
* {@link Figure}.
*/
public interface IFigure {
/**
* Insets that are all 0. Always returns
* <code>true<code> for {@link #isEmpty()}.
*/
class NoInsets extends Insets {
NoInsets() {
super(0, 0, 0, 0);
}
public boolean isEmpty() {
return true;
}
}
/**
* The maximum allowable dimension. ({@link Integer#MAX_VALUE},
* {@link Integer#MAX_VALUE})
*/
Dimension MAX_DIMENSION = new Dimension(Integer.MAX_VALUE,
Integer.MAX_VALUE);
/**
* The minimum allowable dimension. (5,5)
*/
Dimension MIN_DIMENSION = new Dimension(5, 5);
/**
* Empty Insets.
*/
Insets NO_INSETS = new NoInsets();
/**
* Adds the given IFigure as a child of this IFigure. The same as calling
* {@link #add(IFigure, Object, int) add(figure, null, -1)}.
*
* @param figure
* The IFigure to add
*/
void add(IFigure figure);
/**
* Adds the given IFigure as a child of this IFigure at the given index. The
* same as calling {@link #add(IFigure, Object, int) add(figure, null,
* index)}.
*
* @param figure
* The IFigure to add
* @param index
* The index where the IFigure should be added
*/
void add(IFigure figure, int index);
/**
* Adds the given IFigure as a child of this IFigure with the given
* constraint. The same as calling {@link #add(IFigure, Object, int)
* add(figure, constraint, -1)}.
*
* @param figure
* The IFigure to add
* @param constraint
* The newly added IFigure's constraint
*/
void add(IFigure figure, Object constraint);
/**
* Adds the child with the specified index and constraint. The child's
* parent is currently not null, it is removed from that parent. If this
* figure has a LayoutManager, then
* {@link LayoutManager#setConstraint(IFigure, Object)} shall be called on
* the layout.
*
* @param figure
* The IFigure to add
* @param constraint
* The newly added IFigure's constraint
* @param index
* The index where the IFigure should be added
* @throws IndexOutOfBoundsException
* if the index is out of range
* @throws IllegalArgumentException
* if adding the child creates a cycle
*/
void add(IFigure figure, Object constraint, int index);
/**
* Registers the given listener as an AncestorListener of this figure.
*
* @param listener
* The listener to add
*/
void addAncestorListener(AncestorListener listener);
/**
* Registers the given listener as a CoordinateListener of this figure.
*
* @param listener
* the listener to add
* @since 3.1
*/
void addCoordinateListener(CoordinateListener listener);
/**
* Registers the given listener as a FigureListener of this figure.
*
* @param listener
* The listener to add
*/
void addFigureListener(FigureListener listener);
/**
* Registers the given listener as a FocusListener of this figure.
*
* @param listener
* The listener to add
*/
void addFocusListener(FocusListener listener);
/**
* Registers the given listener as a KeyListener of this figure.
*
* @param listener
* The listener to add
*/
void addKeyListener(KeyListener listener);
/**
* Registers the given listener on this figure.
*
* @param listener
* The listener to add
* @since 3.1
*/
void addLayoutListener(LayoutListener listener);
/**
* Registers the given listener as a MouseListener of this IFigure.
*
* @param listener
* The listener to add
*/
void addMouseListener(MouseListener listener);
/**
* Registers the given listener as a MouseMotionListener of this IFigure.
*
* @param listener
* The listener to add
*/
void addMouseMotionListener(MouseMotionListener listener);
/**
* Called after this IFigure is added to its parent.
*/
void addNotify();
/**
* Registers the given listener as a PropertyChangeListener of this IFigure.
*
* @param listener
* The listener to add
*/
void addPropertyChangeListener(PropertyChangeListener listener);
/**
* Registers the given listener as a PropertyChangeListener of this IFigure,
* interested only in the given property.
*
* @param property
* The property the listener is interested in
* @param listener
* The listener to add
*/
void addPropertyChangeListener(String property,
PropertyChangeListener listener);
/**
* Returns <code>true</code> if the point <code>(x, y)</code> is contained
* within this IFigure's bounds.
*
* @param x
* The X coordinate
* @param y
* The Y coordinate
* @return <code>true</code> if the point (x,y) is contained in this
* IFigure's bounds
*/
boolean containsPoint(int x, int y);
/**
* Returns <code>true</code> if the Point p is contained within this
* IFigure's bounds.
*
* @param p
* The point
* @return <code>true</code> if the Point p is contained within this
* IFigure's bounds
*/
boolean containsPoint(Point p);
/**
* Erases this IFigure.
*/
void erase();
/**
* Returns the IFigure at the specified location. May return
* <code>this</code> or <code>null</code>.
*
* @param x
* The X coordinate
* @param y
* The Y coordinate
* @return The IFigure at the specified location
*/
IFigure findFigureAt(int x, int y);
/**
* Returns the IFigure at the specified location based on the conditional
* TreeSearch. May return <code>this</code> or <code>null</code>
*
* @param x
* the X coordinate
* @param y
* the Y coordinate
* @param search
* the conditional TreeSearch
* @return the IFigure at the specified location
*/
IFigure findFigureAt(int x, int y, TreeSearch search);
/**
* Returns the IFigure at the specified location. May return
* <code>this</code> or <code>null</code>.
*
* @param p
* The point
* @return The IFigure at the specified location
*/
IFigure findFigureAt(Point p);
/**
* Returns the IFigure at the specified location, excluding any IFigures in
* <code>collection</code>. May return <code>this</code> or
* <code>null</code>.
*
* @param x
* The X coordinate
* @param y
* The Y coordinate
* @param collection
* A collection of IFigures to be excluded
* @return The IFigure at the specified location, excluding any IFigures in
* collection
*/
IFigure findFigureAtExcluding(int x, int y, Collection collection);
/**
* Returns the IFigure located at the given location which will accept mouse
* events.
*
* @param x
* The X coordinate
* @param y
* The Y coordinate
* @return The IFigure located at the given location which will accept mouse
* events
*/
IFigure findMouseEventTargetAt(int x, int y);
/**
* Returns the background color. Background color can be inherited from the
* parent.
*
* @return The background color
*/
Color getBackgroundColor();
/**
* Returns the current border by reference.
*
* @return The current border
*/
Border getBorder();
/**
* Returns the smallest rectangle completely enclosing the IFigure.
* Implementation may return the Rectangle by reference. For this reason,
* callers of this method must not modify the returned Rectangle. The
* Rectangle's values may change in the future.
*
* @return This IFigure's bounds
*/
Rectangle getBounds();
/**
* Returns an unmodifiable list of children by reference.
*
* @return An unmodifiable list of children by reference
*/
List getChildren();
/**
* Returns the rectangular area within this Figure's bounds in which
* children will be placed (via {@link LayoutManager LayoutManagers}) and
* the painting of children will be clipped.
*
* @return The client area
*/
Rectangle getClientArea();
/**
* Copies the client area into the specificied Recangle, and returns that
* rectangle for convenience.
*
* @param rect
* The destination rectangle for the client area
* @return The same instance that was passed in, modified to contain the
* client area
*/
Rectangle getClientArea(Rectangle rect);
/**
* Returns the IClippingStrategy used by this figure to clip its children
*
* @return the IClipppingStrategy used to clip this figure's children.
* @since 3.6
*/
IClippingStrategy getClippingStrategy();
/**
* Returns the Cursor used when the mouse is over this IFigure.
*
* @return The Cursor used when the mouse is over this IFigure
*/
Cursor getCursor();
/**
* Returns the current Font by reference.
*
* @return The current Font
*/
Font getFont();
/**
* Returns the foreground color.
*
* @return The foreground color
*/
Color getForegroundColor();
/**
* Returns the current Insets. May be returned by reference. The returned
* value should not be modified.
*
* @return The current Insets.
*/
Insets getInsets();
/**
* Returns the current LayoutManager by reference.
*
* @return The current LayoutManager by reference
*/
LayoutManager getLayoutManager();
/**
* Returns the background Color of this Figure. Does not inherit this Color
* from the parent, may return null.
*
* @return The local background Color
*/
Color getLocalBackgroundColor();
/**
* Returns the local foreground Color of this Figure. Does not inherit this
* Color from the parent, may return null.
*
* @return The local foreground Color
*/
Color getLocalForegroundColor();
/**
* Returns a hint indicating the largest desireable size for the IFigure.
* Returned Dimension is by value.
*
* @return The maximum size
*/
Dimension getMaximumSize();
/**
* Returns a hint indicating the smallest desireable size for the IFigure.
* The returned dimension may be by <i>reference</i>, and it must not be
* modified by the caller.
*
* @return The minimum size
*/
Dimension getMinimumSize();
/**
* Returns a hint indicating the smallest desireable size for the IFigure.
* The returned dimension may be by <i>reference</i>, and it must not be
* modified by the caller.
*
* @param wHint
* the width hint
* @param hHint
* the height hint
* @return The minimum size
*/
Dimension getMinimumSize(int wHint, int hHint);
/**
* Returns the IFigure that is the current parent of this IFigure or
* <code>null</code> if there is no parent.
*
* @return <code>null</code> or the parent figure
*/
IFigure getParent();
/**
* Returns the preferred size for this IFigure. The returned value must not
* be modified by the caller. If the figure has no preference, it returns
* its current size. The same as calling {@link #getPreferredSize(int, int)
* getPreferredSize(-1, -1)}.
*
* @return The preferred size
*/
Dimension getPreferredSize();
/**
* Returns the preferred size for this IFigure using the provided width and
* height hints. The returned dimension may be by <i>reference</i>, and it
* must not be modified by the caller. A value of <code>-1</code> indicates
* that there is no constraint in that direction.
*
* @param wHint
* a width hint
* @param hHint
* a height hint
* @return The preferred size
*/
Dimension getPreferredSize(int wHint, int hHint);
/**
* Returns the current size. Returned Dimension is by value.
*
* @return The current size
*/
Dimension getSize();
/**
* Returns a IFigure that is the tooltip for this IFigure.
*
* @return This IFigure's tooltip
*/
IFigure getToolTip();
/**
* Returns the UpdateManager for this IFigure by reference.
*
* @return The update manager
*/
UpdateManager getUpdateManager();
/**
* Called when this IFigure has gained focus.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link FocusListener} with this IFigure.
*
* @param event
* The focus event
*/
void handleFocusGained(FocusEvent event);
/**
* Called when this IFigure has lost focus.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link FocusListener} with this IFigure.
*
* @param event
* The focus event
*/
void handleFocusLost(FocusEvent event);
/**
* Called when a key is pressed while this IFigure has focus.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link KeyListener} with this IFigure.
*
* @param event
* The key event
*/
void handleKeyPressed(KeyEvent event);
/**
* Called when a key is released while this IFigure has focus.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link KeyListener} with this IFigure.
*
* @param event
* The key event
*/
void handleKeyReleased(KeyEvent event);
/**
* Called when a mouse button has been double-clicked while within this
* IFigure's bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseDoubleClicked(MouseEvent event);
/**
* Called when the mouse has been dragged within this IFigure's bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseMotionListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseDragged(MouseEvent event);
/**
* Called when the mouse has entered this IFigure's bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseMotionListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseEntered(MouseEvent event);
/**
* Called when the mouse has exited this IFigure's bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseMotionListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseExited(MouseEvent event);
/**
* Called when the mouse has hovered over this IFigure.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseMotionListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseHover(MouseEvent event);
/**
* Called when the mouse has moved within this IFigure's bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseMotionListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseMoved(MouseEvent event);
/**
* Called when a mouse button has been pressed while within this IFigure's
* bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMousePressed(MouseEvent event);
/**
* Called when a mouse button has been released while within this IFigure's
* bounds.
* <p>
* <b>NOTE</b>: You should not override this method. If you are interested
* in receiving notification of this type of event, you should register a
* {@link MouseListener} with this IFigure.
*
* @param event
* The mouse event
*/
void handleMouseReleased(MouseEvent event);
/**
* Returns <code>true</code> if this IFigure has focus.
*
* @return <code>true</code> if this IFigure has focus
*/
boolean hasFocus();
/**
* This method is <b>for internal purposes only</b> and should not be
* called.
*
* @return The event dispatcher
*/
EventDispatcher internalGetEventDispatcher();
/**
* Returns <code>true</code> if this IFigure's bounds intersect with the
* given Rectangle. Figure is asked so that non-rectangular IFigures can
* reduce the frequency of paints.
*
* @param rect
* The rectangle to check for intersection
* @return <code>true</code> if this IFigure's bounds intersect with the
* given Rectangle
*/
boolean intersects(Rectangle rect);
/**
* Invalidates this IFigure. If this figure has a LayoutManager, then
* {@link LayoutManager#invalidate()} should be called on that layout.
*/
void invalidate();
/**
* Invalidates this figure as well as all contained within.
*/
void invalidateTree();
/**
* Returns <code>true</code> if this figure is capable of applying a local
* coordinate system which affects its children.
*
* @since 3.1
* @return <code>true</code> if this figure provides local coordinates to
* children
*/
boolean isCoordinateSystem();
/**
* Returns <code>true</code> if this IFigure is enabled.
*
* @return <code>true</code> if this IFigure is enabled
*/
boolean isEnabled();
/**
* Returns <code>true</code> if this IFigure can gain focus on a
* {@link org.eclipse.swt.events.TraverseEvent}.
*
* @return <code>true</code> if this IFigure can gain focus on a
* TraverseEvent
*/
boolean isFocusTraversable();
/**
* @return <code>true</code> if this figure is hosted in a Control that is
* mirrored
* @since 3.1
*/
boolean isMirrored();
/**
* Returns <code>true</code> if this IFigure is opaque.
*
* @return <code>true</code> if this IFigure is opaque
*/
boolean isOpaque();
/**
* Returns <code>true</code> if this IFigure can receive focus on a call to
* {@link #requestFocus()}.
*
* @return <code>true</code> if this IFigure can receive focus on a call to
* requestFocus()
*/
boolean isRequestFocusEnabled();
/**
* Returns <code>true</code> if this IFigure is showing. This figure is only
* showing if it is visible and its parent is showing, or it has no parent.
*
* @return <code>true</code> if this IFigure is showing
*/
boolean isShowing();
/**
* returns <code>true</code> if this figure's visibility flag is set to
* true. Does not walk up the parent chain.
*
* @return <code>true</code> if the figure's visibility flag is set
*/
boolean isVisible();
/**
* Paints this IFigure and its children.
*
* @param graphics
* The Graphics object used for painting
*/
void paint(Graphics graphics);
/**
* Removes the given child from this figure's children. If this figure has a
* LayoutManager, then {@link LayoutManager#remove(IFigure)} shall be called
* on that layout with the child.
*
* @param figure
* The IFigure to remove
*/
void remove(IFigure figure);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of ancestor events.
*
* @param listener
* The listener to remove
*/
void removeAncestorListener(AncestorListener listener);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of coordinate changes.
*
* @param listener
* the listener to remove
* @since 3.1
*/
void removeCoordinateListener(CoordinateListener listener);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of IFigure events.
*
* @param listener
* The listener to remove
*/
void removeFigureListener(FigureListener listener);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of focus events.
*
* @param listener
* The listener to remove
*/
void removeFocusListener(FocusListener listener);
/**
* Removes the first occurence of the given listener.
*
* @param listener
* The listener to remove
*/
void removeKeyListener(KeyListener listener);
/**
* Removes the most recent occurence of the given listener.
*
* @since 3.1
* @param listener
* the listener to remove
*/
void removeLayoutListener(LayoutListener listener);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of mouse events.
*
* @param listener
* The listener to remove
*/
void removeMouseListener(MouseListener listener);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of mouse motion events.
*
* @param listener
* The listener to remove
*/
void removeMouseMotionListener(MouseMotionListener listener);
/**
* Called before this IFigure is removed from its parent.
*/
void removeNotify();
/**
* Unregisters the given listener, so that it will no longer receive
* notification of any property changes.
*
* @param listener
* The listener to remove
*/
void removePropertyChangeListener(PropertyChangeListener listener);
/**
* Unregisters the given listener, so that it will no longer receive
* notification of changes in the given property. This will only unregister
* the listener for the given property. If the listener is registered to
* listen to other properties, this will not affect the notification of the
* listener regarding those properties.
*
* @param property
* The property that the listener is no longer interested in
* @param listener
* The listener no longer interested in the property
*/
void removePropertyChangeListener(String property,
PropertyChangeListener listener);
/**
* Repaints this IFigure.
*/
void repaint();
/**
* Repaints the rectangular area within this IFigure whose upper-left corner
* is located at the point <code>(x,y)</code> and whose width and height are
* <code>w</code> and <code>h</code>, respectively.
*
* @param x
* The X coordinate of the area to repaint
* @param y
* The Y coordinate of the area to repaint
* @param w
* The width of the area to repaint
* @param h
* The height of the area to repaint
*/
void repaint(int x, int y, int w, int h);
/**
* Repaints the rectangular area within this IFigure represented by
* <code>rect</code>.
*
* @param rect
* The rectangular area to be repainted
*/
void repaint(Rectangle rect);
/**
* Requests focus from the {@link EventDispatcher}.
*/
void requestFocus();
/**
* Invalidates this figure and revalidates() its parent. If a figure does
* not have a parent, it will request a validation from it UpdateManager.
* Calling this method does not guarantee that a repaint will occur.
*/
void revalidate();
/**
* Sets the background color.
*
* @param c
* The new background color
*/
void setBackgroundColor(Color c);
/**
* Sets the border.
*
* @param b
* The new border
*/
void setBorder(Border b);
/**
* Sets the bounds to the bounds of the specified <code>Rectangle</code>.
*
* @param rect
* The new bounds
*/
void setBounds(Rectangle rect);
/**
* Registers a clipping strategy to specify how clipping is performed for
* child figures.
*
* @param clippingStrategy
* @since 3.6
*/
void setClippingStrategy(IClippingStrategy clippingStrategy);
/**
* Convenience method to set the constraint of the specified child in the
* current LayoutManager.
*
* @param child
* The figure whose constraint is being set
* @param constraint
* the constraint
* @throws IllegalArgumentException
* if the child is not contained by this Figure
*/
void setConstraint(IFigure child, Object constraint);
/**
* Sets the cursor.
*
* @param cursor
* The new cursor
*/
void setCursor(Cursor cursor);
/**
* Sets this IFigure to be enabled.
*
* @param value
* <code>true</code> if this IFigure should be enabled
*/
void setEnabled(boolean value);
/**
* Sets the ability for this IFigure to gain focus on a
* {@link org.eclipse.swt.events.TraverseEvent}.
*
* @param value
* <code>true</code> if this IFigure should gain focus on a
* TraverseEvent
*/
void setFocusTraversable(boolean value);
/**
* Sets the font.
*
* @param f
* The new font
*/
void setFont(Font f);
/**
* Sets the foreground color.
*
* @param c
* The new foreground color
*/
void setForegroundColor(Color c);
/**
* Sets the LayoutManager.
*
* @param lm
* The new layout manager
*/
void setLayoutManager(LayoutManager lm);
/**
* Sets the location of this IFigure.
*
* @param p
* The new location
*/
void setLocation(Point p);
/**
* Sets the maximum size this IFigure can be.
*
* @param size
* The new maximum size
*/
void setMaximumSize(Dimension size);
/**
* Sets the minimum size this IFigure can be.
*
* @param size
* The new minimum size
*/
void setMinimumSize(Dimension size);
/**
* Sets this IFigure to be opaque if <i>isOpaque</i> is <code>true</code>
* and transparent if <i>isOpaque</i> is <code>false</code>.
*
* @param isOpaque
* <code>true</code> is this IFigure should be opaque
*/
void setOpaque(boolean isOpaque);
/**
* Sets this IFigure's parent.
*
* @param parent
* The new parent IFigure
*/
void setParent(IFigure parent);
/**
* Sets this IFigure's preferred size.
*
* @param size
* The new preferred size
*/
void setPreferredSize(Dimension size);
/**
* Sets the ability for this Figure to gain focus on a call to
* {@link #requestFocus()}.
*
* @param requestFocusEnabled
* <code>true</code> if this IFigure should gain focus on a call
* to requestFocus()
*/
void setRequestFocusEnabled(boolean requestFocusEnabled);
/**
* Sets this IFigure's size.
*
* @param d
* The new size
*/
void setSize(Dimension d);
/**
* Sets this IFigure's size.
*
* @param w
* The new width
* @param h
* The new height
*/
void setSize(int w, int h);
/**
* Sets a tooltip that is displayed when the mouse hovers over this IFigure.
*
* @param figure
* The tooltip IFigure
*/
void setToolTip(IFigure figure);
/**
* Sets this IFigure's visibility.
*
* @param visible
* <code>true</code> if this IFigure should be visible
*/
void setVisible(boolean visible);
/**
* Moves this IFigure <code>x</code> pixels horizontally and <code>y</code>
* pixels vertically.
*
* @param x
* The amount to move this IFigure horizontally
* @param y
* The amount to move this IFigure vertically
*/
void translate(int x, int y);
/**
* Translates a Translatable from this IFigure's parent's coordinates to
* this IFigure's local coordinates.
*
* @param t
* The object to translate
*/
void translateFromParent(Translatable t);
/**
* Translates a Translatable that is relative to this figure's bounds to
* absolute.
*
* @param t
* The object to translate
*/
void translateToAbsolute(Translatable t);
/**
* Translates a Translatable from this IFigure's coordinates to its parent's
* coordinates.
*
* @param t
* The object to translate
*/
void translateToParent(Translatable t);
/**
* Translates a Translatable in absolute coordinates to be relative to this
* figure's bounds.
*
* @param t
* The object to translate
*/
void translateToRelative(Translatable t);
/**
* Indicates that this figure should make itself valid. Validation includes
* invoking layout on a LayoutManager if present, and then validating all
* children figures. Default validation uses pre-order, depth-first
* ordering.
*/
void validate();
}