*/
package jalview.gui;
+import jalview.datamodel.SequenceI;
import jalview.renderer.AnnotationRenderer;
+import jalview.renderer.seqfeatures.FeatureColourFinder;
import jalview.viewmodel.OverviewDimensions;
import java.awt.Color;
// main visible SeqCanvas
private SequenceRenderer sr;
- private jalview.renderer.seqfeatures.FeatureRenderer fr;
+ jalview.renderer.seqfeatures.FeatureRenderer fr;
/**
* Creates a new OverviewPanel object.
sr = new SequenceRenderer(av);
sr.renderGaps = false;
sr.forOverview = true;
- fr = new FeatureRenderer(alPanel);
+ fr = new FeatureRenderer(ap);
- od = new OverviewDimensions(av);
+ od = new OverviewDimensions(av.getRanges(),
+ (av.isShowAnnotation() && av
+ .getAlignmentConservationAnnotation() != null));
addComponentListener(new ComponentAdapter()
{
{
if (!av.getWrapAlignment())
{
- // TODO: feature: jv2.5 detect shift drag and update selection from
- // it.
- od.setBoxPositionByMouse(evt.getX(), evt.getY());
+ od.updateViewportFromMouse(evt.getX(), evt.getY(), av
+ .getAlignment().getHiddenSequences(), av
+ .getColumnSelection(), av.getRanges());
ap.setScrollValues(od.getScrollCol(), od.getScrollRow());
}
}
{
if (!av.getWrapAlignment())
{
- od.setBoxPositionByMouse(evt.getX(), evt.getY());
+ od.updateViewportFromMouse(evt.getX(), evt.getY(), av
+ .getAlignment().getHiddenSequences(), av
+ .getColumnSelection(), av.getRanges());
ap.setScrollValues(od.getScrollCol(), od.getScrollRow());
}
}
if ((getWidth() > 0) && (getHeight() > 0))
{
- od.setWidth(getWidth()); // width = getWidth();
- od.setHeight(getHeight()); // sequencesHeight = getHeight() - graphHeight;
+ od.setWidth(getWidth());
+ od.setHeight(getHeight());
}
setPreferredSize(new Dimension(od.getWidth(), od.getHeight()));
mg.setColor(Color.orange);
mg.fillRect(0, 0, od.getWidth(), miniMe.getHeight());
- // calculate scale based on current alignment width and height
- od.updateScales();
-
// calculate sampleCol and sampleRow
// alignment width is max number of residues/bases
// alignment height is number of sequences
int alwidth = av.getAlignment().getWidth();
- int alheight = av.getAlignment().getHeight()
- + av.getAlignment().getHiddenSequences().getSize();
+ int alheight = av.getAlignment().getAbsoluteHeight();
// sampleCol or sampleRow is the width/height allocated to each residue
// in particular, sometimes we may need more than one row/col of the
buildImage(sampleRow, sampleCol);
- if (av.getAlignmentConservationAnnotation() != null)
+ // check for conservation annotation to make sure overview works for DNA too
+ if (av.isShowAnnotation()
+ && (av.getAlignmentConservationAnnotation() != null))
{
renderer.updateFromAlignViewport(av);
for (int col = 0; col < od.getWidth() && !resizeAgain; col++)
setBoxPosition();
}
+ /*
+ * Build the overview panel image
+ */
private void buildImage(float sampleRow, float sampleCol)
{
int lastcol = -1;
int lastrow = -1;
- int color = Color.white.getRGB();
+ int rgbColour = Color.white.getRGB();
+
+ SequenceI seq = null;
+ FeatureColourFinder finder = new FeatureColourFinder(fr);
- jalview.datamodel.SequenceI seq = null;
- final boolean hasHiddenRows = av.hasHiddenRows();
final boolean hasHiddenCols = av.hasHiddenColumns();
boolean hiddenRow = false;
// get hidden row and hidden column map once at beginning.
lastrow = currentrow;
- hiddenRow = false;
- // should be method(s) in Alignment
- if (hasHiddenRows)
- {
- seq = av.getAlignment().getHiddenSequences()
- .getHiddenSequence(lastrow);
- if (seq == null)
- {
- int index = av.getAlignment().getHiddenSequences()
- .findIndexWithoutHiddenSeqs(lastrow);
-
- seq = av.getAlignment().getSequenceAt(index);
- }
- else
- {
- hiddenRow = true;
- }
- }
- else
- {
- seq = av.getAlignment().getSequenceAt(lastrow);
- }
- // end of Alignment method(s)
- }
-
- if (seq == null)
- {
- System.out.println(lastrow + " null");
- continue;
+ // get the sequence which would be at alignment index 'lastrow' if no
+ // rows were hidden, and determine whether it is hidden or not
+ hiddenRow = av.getAlignment().isHidden(lastrow);
+ seq = av.getAlignment().getSequenceAtAbsoluteIndex(lastrow);
}
for (int col = 0; col < od.getWidth() && !resizeAgain; col++)
{
if (doCopy)
{
- color = miniMe.getRGB(col, row - 1);
+ rgbColour = miniMe.getRGB(col, row - 1);
}
else if ((int) (col * sampleCol) != lastcol
|| (int) (row * sampleRow) != lastrow)
{
lastcol = (int) (col * sampleCol);
- color = getColumnColourFromSequence(seq, hiddenRow, hasHiddenCols,
- lastcol);
+ rgbColour = getColumnColourFromSequence(seq, hiddenRow,
+ hasHiddenCols, lastcol, finder);
}
- // else if ((int) (col * sampleCol) == lastcol && (int) (row *
- // sampleRow) == lastrow))
- // we just use the color we already have , so don't need to set it
+ // else we just use the color we already have , so don't need to set it
- miniMe.setRGB(col, row, color);
+ miniMe.setRGB(col, row, rgbColour);
}
}
}
/*
* Find the colour of a sequence at a specified column position
*/
- private int getColumnColourFromSequence(jalview.datamodel.SequenceI seq,
- boolean hiddenRow, boolean hasHiddenCols, int lastcol)
+ private int getColumnColourFromSequence(
+ jalview.datamodel.SequenceI seq,
+ boolean hiddenRow, boolean hasHiddenCols, int lastcol,
+ FeatureColourFinder finder)
{
- int color;
+ Color color = Color.white;
- if (seq.getLength() > lastcol)
+ if ((seq != null) && (seq.getLength() > lastcol))
{
- color = sr.getResidueBoxColour(seq, lastcol).getRGB();
-
- if (av.isShowSequenceFeatures())
- {
- color = fr.findFeatureColour(color, seq, lastcol);
- }
- }
- else
- {
- color = Color.white.getRGB(); // White
+ color = sr.getResidueColour(seq, lastcol, finder);
}
if (hiddenRow
|| (hasHiddenCols && !av.getColumnSelection()
.isVisible(lastcol)))
{
- color = new Color(color).darker().darker().getRGB();
+ color = color.darker().darker();
}
- return color;
+ return color.getRGB();
}
/**
*/
public void setBoxPosition()
{
- od.setBoxPosition();
+ od.setBoxPosition(av.getAlignment()
+ .getHiddenSequences(), av.getColumnSelection(), av.getRanges());
repaint();
}
g.fillRect(0, 0, getWidth(), getHeight());
}
}
- // TODO: render selected regions
+
g.setColor(Color.red);
od.drawBox(g);
}