gov.noaa.pmel.sgt
Class Layer

java.lang.Object
  extended by java.awt.Component
      extended by gov.noaa.pmel.sgt.Layer
All Implemented Interfaces:
LayerControl, java.awt.image.ImageObserver, java.awt.MenuContainer, java.io.Serializable, java.lang.Cloneable
Direct Known Subclasses:
DataGroupLayer, PlotLayer

public class Layer
extends java.awt.Component
implements java.lang.Cloneable, LayerControl

A Layer contains a single Graph object and multiple LayerChild objects. There can be many Layer objects associated with each Pane object and the Layer objects can share Transform and Axis objects, but are not required to. The Layer is also where keys related to Color, Vectors, and Lines are attached. The can be at most one key of each type attached to a Layer.

The Layer object transforms physical coordinates to device coordinates. All objects that attach to a Layer use physical coordinates. The exception to this is the Graph object (and its children), since these objects transform user coordinates to physical coordinates.

The following is a simple example of using the Pane, Layer, and SGLabel objects together. In this example, the Pane and Layer objects are created such that, in the absence of any resizing, 100 pixels is equal to 1.0 physical units. Two labels are created, the first contains the current time and is located in the bottom left of the Layer. The second label is a title that is positioned near the top and centered.

 Pane pane;
 Layer layer;
 SGLabel title;
 SGLabel label;
 GeoDate stime;
 ...
 //
 // Instantiate Pane, Layer, and GeoDate objects.
 //
 pane = new Pane("test pane", new Dimension(400, 300));
 pane.setLayout(new StackedLayout());
 layer = new Layer("Test Layer", new Dimension2D(4.0, 3.0));
 stime = new GeoDate();
 //
 // Instatiate an SGLabel object as label, set its text to the
 // current time and position it near the lower-left corner
 // of the layer.
 //
 label = new SGLabel("test", stime.toString(), new Point2D.Double(0.05, 0.05));
 //
 // Set properties for label.
 //
 label.setAlign(SGLabel.BOTTOM, SGLabel.LEFT);
 label.setColor(Color.magenta);
 label.setHeightP(0.15);
 label.setFont(new Font("Dialog", Font.PLAIN, 10));
 //
 // Add label to layer.
 //
 layer.addChild(label);
 //
 // Instatiate an SGLabel object as title, set its text and position
 // it near the top of the layer and centered. Set the properties
 // for title.
 //
 title = new SGLabel("title", "SciGraph Test!", new Point2D.Double(2.125, 2.9));
 title.setAlign(SGLabel.TOP, SGLabel.CENTER);
 title.setHeightP(0.25);
 title.setFont(new Font("Helvetica", Font.BOLD, 14));
 //
 // Add title to layer and add layer to pane.
 //
 layer.addChild(title);
 pane.add(layer);
 

Since:
1.0
Version:
$Revision$, $Date$
Author:
Donald Denbo
See Also:
Pane, Graph, ColorKey, SGLabel, LineKey, GeoDate, Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class java.awt.Component
java.awt.Component.AccessibleAWTComponent, java.awt.Component.BltBufferStrategy, java.awt.Component.FlipBufferStrategy
 
Field Summary
protected  AbstractPane pane_
           
 
Fields inherited from class java.awt.Component
BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT
 
Fields inherited from interface java.awt.image.ImageObserver
ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH
 
Constructor Summary
Layer()
          Default constructor for Layer.
Layer(java.lang.String id)
          Create a Layer object.
Layer(java.lang.String id, Dimension2D psize)
          Create a Layer object.
 
Method Summary
 void addChild(LayerChild child)
          Add a LayerChild to the Layer.
 java.util.Enumeration childElements()
          Create a Enumeration for the LayerChild's associated with the Layer.
 java.util.Iterator childIterator()
           
 Layer copy()
          Copy the Layer and its attached classes.
 void draw(java.awt.Graphics g)
          Draw the Layer and its attached classes.
 void drawDraggableItems(java.awt.Graphics g)
          Used internally by sgt.
 LayerChild findChild(java.lang.String id)
          Find LayerChild in Layer.
 Rectangle2D.Double getBoundsP()
          Get the Layer bounds in physical coordinates.
 LayerChild getChild(java.lang.String labid)
          Get a child associated with the Layer.
 LayerChild[] getChildren()
           
 Graph getGraph()
          Get the Graph attached to the layer.
 java.lang.String getId()
          Get the Layer identifier.
 java.lang.Object getObjectAt(int x, int y)
          Find object associated with a MOUSE_DOWN event.
 java.lang.Object getObjectAt(int x, int y, boolean check)
          Find object associated with a MOUSE_DOWN event.
 java.lang.Object getObjectAt(java.awt.Point pt, boolean check)
          Find object associated with a MOUSE_DOWN event.
 java.lang.Object[] getObjectsAt(int x, int y, boolean check)
          Find objects associated with a MOUSE_DOWN event.
 AbstractPane getPane()
          Get the Pane the Layer is associated with.
 Dimension2D getSizeP()
          Get the Layer size in physical coordinates.
 double getXDtoP(int xd)
          Transform device units to physical for the x direction.
protected  double getXOffset()
           
 int getXPtoD(double xp)
          Transform physical units to device for x coordinate.
 double getXPtoD2(double xp)
          Transform physical units to device for x coordinate.
protected  double getXSlope()
           
 double getYDtoP(int yd)
          Transform device units to physical for the y direction.
protected  double getYOffset()
           
 int getYPtoD(double yp)
          Transform physcial units to device for y coordinate.
 double getYPtoD2(double yp)
          Transform physcial units to device for y coordinate.
protected  double getYSlope()
           
 boolean isChildAttached(LayerChild child)
          Tests if a LayerChild is attached to the Layer.
 boolean isDataInLayer(java.lang.String id)
          Checks to see if a data id matches that data attached to the Graph.
 void modified(java.lang.String mess)
          Used internally by sgt.
 void removeAllChildren()
          Remove all LayerChild objects from the Layer.
 void removeChild(LayerChild child)
          Remove a LayerChild object from the Layer.
 void removeChild(java.lang.String labid)
          Remove a LayerChild object from the Layer.
 void setBounds(int x, int y, int w, int h)
          Set the bounds of the Layer in device units.
 void setBounds(java.awt.Rectangle bnds)
          Set the bounds of the Layer in device units.
 boolean setGraph(Graph gr)
          Associate a graph with the layer.
 void setId(java.lang.String id)
          Set the Layer identifier.
 void setLocation(int x, int y)
          Set the location of the Layer in device units.
 void setLocation(java.awt.Point pt)
          Set the location of the Layer in device units.
 void setPane(AbstractPane p)
          Set the Pane the Layer is associated with.
 void setSize(java.awt.Dimension sze)
          Set the size of the Layer in device units.
 void setSize(int w, int h)
          Set the size of the Layer in device units.
 void setSizeP(Dimension2D psize)
          Set the size of the Layer in physical coordinates.
 java.lang.String toString()
          Get a String representation of the Layer.
 
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, addNotify, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, bounds, checkImage, checkImage, coalesceEvents, contains, contains, createImage, createImage, createVolatileImage, createVolatileImage, deliverEvent, disable, disableEvents, dispatchEvent, doLayout, enable, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getAccessibleContext, getAlignmentX, getAlignmentY, getBackground, getBounds, getBounds, getColorModel, getComponentAt, getComponentAt, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeys, getFocusTraversalKeysEnabled, getFont, getFontMetrics, getForeground, getGraphics, getGraphicsConfiguration, getHeight, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getListeners, getLocale, getLocation, getLocation, getLocationOnScreen, getMaximumSize, getMinimumSize, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPreferredSize, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getSize, getToolkit, getTreeLock, getWidth, getX, getY, gotFocus, handleEvent, hasFocus, hide, imageUpdate, inside, invalidate, isBackgroundSet, isCursorSet, isDisplayable, isDoubleBuffered, isEnabled, isFocusable, isFocusCycleRoot, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isOpaque, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, layout, list, list, list, list, list, locate, location, lostFocus, minimumSize, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paint, paintAll, paramString, postEvent, preferredSize, prepareImage, prepareImage, print, printAll, processComponentEvent, processEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processKeyEvent, processMouseEvent, processMouseMotionEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removeNotify, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, reshape, resize, resize, setBackground, setComponentOrientation, setCursor, setDropTarget, setEnabled, setFocusable, setFocusTraversalKeys, setFocusTraversalKeysEnabled, setFont, setForeground, setIgnoreRepaint, setLocale, setMaximumSize, setMinimumSize, setName, setPreferredSize, setVisible, show, show, size, transferFocus, transferFocusBackward, transferFocusUpCycle, update, validate
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

pane_

protected AbstractPane pane_
Constructor Detail

Layer

public Layer(java.lang.String id)
Create a Layer object. The Layer is created with a default width and height equal to 1.0.

Parameters:
id - identifier for Layer

Layer

public Layer(java.lang.String id,
             Dimension2D psize)
Create a Layer object. The Layer is created with the specified dimensions and identifier.

Parameters:
id - identifier for Layer
psize - The physical dimensions of the Layer

Layer

public Layer()
Default constructor for Layer. The Layer is created with an empty identifier and a width and height equal to 1.0f.

Method Detail

setSize

public void setSize(java.awt.Dimension sze)
Set the size of the Layer in device units.

Overrides:
setSize in class java.awt.Component
Parameters:
sze - dimension of the Layer

setSize

public void setSize(int w,
                    int h)
Set the size of the Layer in device units.

Overrides:
setSize in class java.awt.Component
Parameters:
w - width of the Layer
h - height of the Layer

setLocation

public void setLocation(java.awt.Point pt)
Set the location of the Layer in device units.

Overrides:
setLocation in class java.awt.Component
Parameters:
pt - location of the Layer

setLocation

public void setLocation(int x,
                        int y)
Set the location of the Layer in device units.

Overrides:
setLocation in class java.awt.Component
Parameters:
x - horizontal location of the Layer
y - vertical location of the Layer

setBounds

public void setBounds(int x,
                      int y,
                      int w,
                      int h)
Set the bounds of the Layer in device units.

Overrides:
setBounds in class java.awt.Component
Parameters:
x - horizontal location of the Layer
y - vertical location of the Layer
w - width of the Layer
h - height of the Layer

setBounds

public void setBounds(java.awt.Rectangle bnds)
Set the bounds of the Layer in device units.

Overrides:
setBounds in class java.awt.Component
Parameters:
bnds - bounds of the Layer

getXPtoD

public int getXPtoD(double xp)
Transform physical units to device for x coordinate.

Parameters:
xp - x physical coordinate
Returns:
x device coordinate
Since:
2.0

getYPtoD

public int getYPtoD(double yp)
Transform physcial units to device for y coordinate.

Parameters:
yp - y physical coordinate
Returns:
y device coordinate
Since:
2.0

getXPtoD2

public double getXPtoD2(double xp)
Transform physical units to device for x coordinate.

Parameters:
xp - x physical coordinate
Returns:
x device coordinate
Since:
3.0

getYPtoD2

public double getYPtoD2(double yp)
Transform physcial units to device for y coordinate.

Parameters:
yp - y physical coordinate
Returns:
y device coordinate
Since:
3.0

getXSlope

protected double getXSlope()

getYSlope

protected double getYSlope()

getXOffset

protected double getXOffset()

getYOffset

protected double getYOffset()

getXDtoP

public double getXDtoP(int xd)
Transform device units to physical for the x direction.

Parameters:
xd - device x coordinate
Returns:
physical x coordinate

getYDtoP

public double getYDtoP(int yd)
Transform device units to physical for the y direction.

Parameters:
yd - device y coordinate
Returns:
physical y coordinate

copy

public Layer copy()
Copy the Layer and its attached classes.

Returns:
copy

draw

public void draw(java.awt.Graphics g)
          throws PaneNotFoundException
Draw the Layer and its attached classes.

Specified by:
draw in interface LayerControl
Parameters:
g - graphics context
Throws:
PaneNotFoundException - if a pane object is not found

drawDraggableItems

public void drawDraggableItems(java.awt.Graphics g)
                        throws PaneNotFoundException
Description copied from interface: LayerControl
Used internally by sgt.

Specified by:
drawDraggableItems in interface LayerControl
Parameters:
g - Graphics object.
Throws:
PaneNotFoundException - Pane not found.

setGraph

public boolean setGraph(Graph gr)
Associate a graph with the layer. Only one graph or its children may be attached to a layer. Multiple graphs are created by using multiple layers.

Parameters:
gr - graph
Returns:
True if attachment was succesful
See Also:
Graph

getGraph

public Graph getGraph()
Get the Graph attached to the layer.

Returns:
Reference to the Graph.

addChild

public void addChild(LayerChild child)
Add a LayerChild to the Layer. Each Layer can contain as many children as needed.

Parameters:
child - A LayerChild
See Also:
SGLabel, LineKey, ColorKey, Ruler

removeChild

public void removeChild(LayerChild child)
                 throws ChildNotFoundException
Remove a LayerChild object from the Layer.

Parameters:
child - A ChildLayer object associated with the Layer
Throws:
ChildNotFoundException - The child is not associated with the Layer
See Also:
SGLabel, LineKey, ColorKey, Ruler

removeChild

public void removeChild(java.lang.String labid)
                 throws ChildNotFoundException
Remove a LayerChild object from the Layer.

Parameters:
labid - An identifier for a LayerChild associated with the Layer
Throws:
ChildNotFoundException - The child is not associated with the Layer
See Also:
SGLabel, LineKey, ColorKey, Ruler

findChild

public LayerChild findChild(java.lang.String id)
Find LayerChild in Layer.

Parameters:
id - LayerChild identifier
Returns:
LayerChild
Since:
3.0

isChildAttached

public boolean isChildAttached(LayerChild child)
Tests if a LayerChild is attached to the Layer.

Parameters:
child - LayerChild to test
Returns:
true if attached to Layer
Since:
2.0

removeAllChildren

public void removeAllChildren()
Remove all LayerChild objects from the Layer.


getChild

public LayerChild getChild(java.lang.String labid)
                    throws ChildNotFoundException
Get a child associated with the Layer.

Parameters:
labid - A LayerChild object identifier
Returns:
layerChild with id
Throws:
ChildNotFoundException - The child is not associated with the Layer
See Also:
SGLabel, LineKey, ColorKey, Ruler

childElements

public java.util.Enumeration childElements()
Create a Enumeration for the LayerChild's associated with the Layer.

Returns:
Enumeration for the LayerChild objects.
See Also:
Enumeration, SGLabel, LineKey, ColorKey, Ruler

childIterator

public java.util.Iterator childIterator()
Since:
3.0

getChildren

public LayerChild[] getChildren()
Since:
3.0

setSizeP

public void setSizeP(Dimension2D psize)
Set the size of the Layer in physical coordinates.

Parameters:
psize - The physical size of the Layer.

getSizeP

public Dimension2D getSizeP()
Get the Layer size in physical coordinates. This returns the physical coordinate size of the Layer.

Returns:
A Dimension2D containing the physical size of the Layer.
See Also:
Dimension2D

getBoundsP

public Rectangle2D.Double getBoundsP()
Get the Layer bounds in physical coordinates. The origin of the bounding rectangle, for a Layer, is always (0,0).

Returns:
A Rectangle2D.Double containing the physical bounds of the Layer.
See Also:
Rectangle2D.Double

getId

public java.lang.String getId()
Get the Layer identifier.

Specified by:
getId in interface LayerControl
Returns:
The identifier.

setId

public void setId(java.lang.String id)
Set the Layer identifier.

Parameters:
id - identifier

setPane

public void setPane(AbstractPane p)
Set the Pane the Layer is associated with. This method is called by Pane when the Pane.add method is exectued.

Specified by:
setPane in interface LayerControl
Parameters:
p - The Pane

getPane

public AbstractPane getPane()
Get the Pane the Layer is associated with.

Returns:
Refence to the Pane

modified

public void modified(java.lang.String mess)
Used internally by sgt.

Parameters:
mess - message
Since:
2.0

getObjectAt

public java.lang.Object getObjectAt(int x,
                                    int y,
                                    boolean check)
Find object associated with a MOUSE_DOWN event. The getObjectAt method scans through all the objects associated with the layer to find one whose bounding box contains the mouse location. This method should not be called by a user.

Parameters:
pt - device coordinates
check - if true requires that object isSelectable
Returns:
object at location

getObjectAt

public java.lang.Object getObjectAt(int x,
                                    int y)
Find object associated with a MOUSE_DOWN event. The getObjectAt method scans through all the objects associated with the layer to find one whose bounding box contains the mouse location. This method should not be called by a user.

Parameters:
pt - device coordinates
Returns:
object at location

getObjectAt

public java.lang.Object getObjectAt(java.awt.Point pt,
                                    boolean check)
Find object associated with a MOUSE_DOWN event. The getObjectAt method scans through all the objects associated with the layer to find one whose bounding box contains the mouse location. This method should not be called by a user.

Parameters:
pt - device coordinates
check - if true requires that object isSelectable
Returns:
object at location

getObjectsAt

public java.lang.Object[] getObjectsAt(int x,
                                       int y,
                                       boolean check)
Find objects associated with a MOUSE_DOWN event. The getObjecstAt method scans through all the objects associated with the layer to find those whose bounding box contains the mouse location. This method should not be called by a user.

Parameters:
x - mouse coordinate
y - mouse coordinate
check - if selectable
Returns:
object array
Since:
3.0

toString

public java.lang.String toString()
Get a String representation of the Layer.

Overrides:
toString in class java.awt.Component
Returns:
String representation

isDataInLayer

public boolean isDataInLayer(java.lang.String id)
Checks to see if a data id matches that data attached to the Graph.

Parameters:
id - data identifier
Returns:
true if data is in layer
Since:
2.0