## org.biojava.bio.gui.sequence
Class PairwiseOverlayRenderer

    java.lang.Object
      org.biojava.utils.AbstractChangeable
          org.biojava.bio.gui.sequence.PairwiseOverlayRenderer

All Implemented Interfaces:
  Serializable, PairwiseSequenceRenderer, Changeable

    public class PairwiseOverlayRenderer

extends AbstractChangeable
implements PairwiseSequenceRenderer, Serializable

`PairwiseOverlayRenderer` allows a list of other `PairwiseSequenceRenderer`s to superimpose their output. Operations on the child renderers (rendering, event handling) are carried out in the order in which they were added.

Since:
  1.2
Author:
  Keith James, Matthew Pocock
See Also:
  Serialized Form

Nested Class Summary

Nested classes/interfaces inherited from interface org.biojava.bio.gui.sequence.PairwiseSequenceRenderer
`PairwiseSequenceRenderer.PairwiseRendererForwarder`

Field Summary
`static ChangeType` `RENDERERS` Constant `RENDERERS` indicating a change to the renderers handled by the overlay.

Constructor Summary
`PairwiseOverlayRenderer()` Creates a new, empty `PairwiseOverlayRenderer`.

Method Summary
`protected void` `_addRenderer(PairwiseSequenceRenderer renderer)`
`protected void` `_removeRenderer(PairwiseSequenceRenderer renderer)`
`void` `addRenderer(PairwiseSequenceRenderer renderer)` `addRenderer` adds a renderer.
`void` `clearRenderers()` `clearRenderers` removes all the renderers.
`protected ChangeSupport` `getChangeSupport(ChangeType ct)` Called to retrieve the ChangeSupport for this object.
`void` `paint(Graphics2D g2, PairwiseRenderContext context)` `paint` applies all renderers in the order in which they were added.
`SequenceViewerEvent` `processMouseEvent(PairwiseRenderContext context, MouseEvent me, List path)` `processMouseEvent` produces a `SequenceViewerEvent` in response to a mouse gesture.
`void` `removeRenderer(PairwiseSequenceRenderer renderer)` `removeRenderer` removes a renderer.

Methods inherited from class org.biojava.utils.AbstractChangeable
`addChangeListener, addChangeListener, generateChangeSupport, hasListeners, hasListeners, isUnchanging, removeChangeListener, removeChangeListener`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Field Detail

### RENDERERS

    public static final ChangeType RENDERERS

  Constant `RENDERERS` indicating a change to the renderers handled by the overlay.

Constructor Detail

### PairwiseOverlayRenderer

    public PairwiseOverlayRenderer()

  Creates a new, empty `PairwiseOverlayRenderer`.

Method Detail

### addRenderer

    public void addRenderer(PairwiseSequenceRenderer renderer)
                     throws ChangeVetoException

  `addRenderer` adds a renderer.

  Parameters:
    `renderer` - a `PairwiseSequenceRenderer`.
  Throws:
    `ChangeVetoException` - if an error occurs.

### removeRenderer

    public void removeRenderer(PairwiseSequenceRenderer renderer)
                        throws ChangeVetoException

  `removeRenderer` removes a renderer.

  Parameters:
    `renderer` - a `PairwiseSequenceRenderer`.
  Throws:
    `ChangeVetoException` - if an error occurs.

### clearRenderers

    public void clearRenderers()
                        throws ChangeVetoException

  `clearRenderers` removes all the renderers.

  Throws:
    `ChangeVetoException` - if an error occurs.

### paint

    public void paint(Graphics2D g2,
                      PairwiseRenderContext context)

  `paint` applies all renderers in the order in which they were added.

  Specified by:
    `paint` in interface `PairwiseSequenceRenderer`
  Parameters:
    `g2` - a `Graphics2D`.
    `context` - a `PairwiseRenderContext`.

### getChangeSupport

    protected ChangeSupport getChangeSupport(ChangeType ct)

  Description copied from class: `AbstractChangeable`
  Called to retrieve the ChangeSupport for this object.

  Your implementation of this method should have the following structure: ``

       ChangeSupport cs = super.getChangeSupport(ct);

       if(someForwarder == null && ct.isMatching(SomeInterface.SomeChangeType)) {
         someForwarder = new ChangeForwarder(...

         this.stateVariable.addChangeListener(someForwarder, VariableInterface.AChange);
       }

       return cs;

  It is usual for the forwarding listeners (someForwarder in this example) to be transient and lazily instantiated. Be sure to register & unregister the forwarder in the code that does the ChangeEvent handling in setter methods.

  Overrides:
    `getChangeSupport` in class `AbstractChangeable`

### processMouseEvent

    public SequenceViewerEvent processMouseEvent(PairwiseRenderContext context,
                                                 MouseEvent me,
                                                 List path)

  `processMouseEvent` produces a `SequenceViewerEvent` in response to a mouse gesture. The list of renderers are probed in the order in which they were added and the first renderer to accept the event will return.

  Specified by:
    `processMouseEvent` in interface `PairwiseSequenceRenderer`
  Parameters:
    `context` - a `PairwiseRenderContext`.
    `me` - a `MouseEvent` that caused the request.
    `path` - a `List` of `PairwiseSequenceRenderer` instances passed through so far.
  Returns:
    a `SequenceViewerEvent` encapsulating the mouse gesture.

### _addRenderer

    protected void _addRenderer(PairwiseSequenceRenderer renderer)

### _removeRenderer

    protected void _removeRenderer(PairwiseSequenceRenderer renderer)