/*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.5)
+ * Jalview - A Sequence Alignment Editor and Viewer (Version 2.6)
* Copyright (C) 2010 J Procter, AM Waterhouse, G Barton, M Clamp, S Searle
*
* This file is part of Jalview.
import java.awt.*;
import java.awt.event.*;
+import java.awt.font.LineMetrics;
+import java.awt.geom.AffineTransform;
+
+import jalview.analysis.AAFrequency;
import jalview.datamodel.*;
import jalview.schemes.ColourSchemeI;
this.ap = ap;
av = ap.av;
setLayout(null);
- adjustPanelHeight();
+ int height = adjustPanelHeight();
+ ap.apvscroll.setValues(0, getSize().height, 0, height);
addMouseMotionListener(this);
public void adjustmentValueChanged(AdjustmentEvent evt)
{
- ap.alabels.setScrollOffset(-evt.getValue());
}
/**
public void actionPerformed(ActionEvent evt)
{
AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
- if (aa==null)
+ if (aa == null)
{
return;
}
return;
}
- int height = 0;
+ int height = -scrollOffset;
activeRow = -1;
for (int i = 0; i < aa.length; i++)
graphStretch = -1;
graphStretchY = -1;
mouseDragging = false;
+ if (needValidating)
+ {
+ ap.validate();
+ needValidating = false;
+ }
ap.scalePanel.mouseReleased(evt);
}
{
}
+ boolean needValidating = false;
+
public void mouseDragged(MouseEvent evt)
{
if (graphStretch > -1)
}
graphStretchY = evt.getY();
adjustPanelHeight();
+ needValidating = true;
ap.paintAlignment(true);
}
else
}
int row = -1;
- int height = 0;
+ int height = -scrollOffset;
for (int i = 0; i < aa.length; i++)
{
public int adjustPanelHeight()
{
+ return adjustPanelHeight(true);
+ }
+
+ public int adjustPanelHeight(boolean repaint)
+ {
+
// setHeight of panels
AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
int height = 0;
height += aa[i].height;
}
}
- else
+ if (height == 0)
{
height = 20;
}
-
- this.setSize(getSize().width, height);
-
- repaint();
+ this.setSize(new Dimension(getSize().width, height));
+ if (repaint)
+ {
+ repaint();
+ }
return height;
}
AlignmentAnnotation[] aa = av.alignment.getAlignmentAnnotation();
-
+ g.translate(0, -scrollOffset);
int x = 0;
int y = 0;
int column = 0;
if (v == column)
{
- g
- .fillRect(x * av.charWidth, y, av.charWidth,
- av.charHeight);
+ g.fillRect(x * av.charWidth, y, av.charWidth, av.charHeight);
}
}
}
if (sCol == 0 || row.annotations[sCol - 1] == null
|| row.annotations[sCol - 1].secondaryStructure != 'H')
{
- g
- .fillArc(lastSSX, y + 4 + iconOffset, av.charWidth, 8,
- 90, 180);
+ g.fillArc(lastSSX, y + 4 + iconOffset, av.charWidth, 8, 90, 180);
x1 += av.charWidth / 2;
}
y += aa[i].height;
}
}
+ g.translate(0, +scrollOffset);
}
public void drawLineGraph(Graphics g, AlignmentAnnotation aa, int sRes,
int column;
int aaMax = aa.annotations.length - 1;
boolean renderHistogram = true, renderProfile = false;
- /*
- * Logos are disabled for 2.5 release : Bug # 0060064 if (aa.autoCalculated
- * && aa.label.startsWith("Consensus")) { // TODO: generalise this to have
- * render styles for consensus/profile data if (aa.groupRef!=null) {
- * renderHistogram = aa.groupRef.isShowConsensusHistogram(); renderProfile =
- * aa.groupRef.isShowSequenceLogo(); } else { renderHistogram =
- * av.isShowConsensusHistogram(); renderProfile = av.isShowSequenceLogo(); }
- * }
- */
+ if (aa.autoCalculated && aa.label.startsWith("Consensus"))
+ { // TODO: generalise this to have render styles for consensus/profile data
+ if (aa.groupRef != null)
+ {
+ renderHistogram = aa.groupRef.isShowConsensusHistogram();
+ renderProfile = aa.groupRef.isShowSequenceLogo();
+ }
+ else
+ {
+ renderHistogram = av.isShowConsensusHistogram();
+ renderProfile = av.isShowSequenceLogo();
+ }
+ }
+
while (x < eRes - sRes)
{
column = sRes + x;
}
}
// draw profile if available
- // Disabled for 2.5 release: see bug #0060064
- /**
- * if (aa.annotations[column].value!=0 && renderProfile) { int profl[] =
- * getProfileFor(aa,column); int ht = y1; //,htn=y2-y1;//aa.graphHeight;
- * float wdth; double ht2=0; char[] dc = new char[1]; // LineMetrics lm;
- * for (int c=1;profl!=null && c<profl[0];) { dc[0] = (char) profl[c++];
- * wdth = av.charWidth; wdth/=(float) fm .charsWidth(dc,0,1);
- *
- * if (c>2) { ht+=(int)ht2; } { // not java 1.1 compatible: Bug # 0060064
- * g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(wdth,
- * (ht2=(htn*((double)profl[c++])/100.0))/av.charHeight))); lm =
- * g.getFontMetrics().getLineMetrics(dc,0,1, g);
- * g.setColor(profcolour.findColour(dc[0]));
- * g.drawChars(dc,0,1,x*av.charWidth, (int) (ht+lm.getHeight())); } }
- * g.setFont(ofont); }
- **/
+ if (aa.annotations[column].value != 0 && renderProfile)
+ {
+ int profl[] = getProfileFor(aa, column);
+ int ht = y1, htn = y2 - y1;// aa.graphHeight;
+ float wdth;
+ double ht2 = 0;
+ char[] dc = new char[1];
+ LineMetrics lm;
+ for (int c = 1; profl != null && c < profl[0];)
+ {
+ dc[0] = (char) profl[c++];
+ wdth = av.charWidth;
+ wdth /= (float) fm.charsWidth(dc, 0, 1);
+
+ if (c > 2)
+ {
+ ht += (int) ht2;
+ }
+ { // not java 1.1 compatible: Bug # 0060064
+ g.setFont(ofont.deriveFont(AffineTransform.getScaleInstance(
+ wdth, (ht2 = (htn * ((double) profl[c++]) / 100.0))
+ / av.charHeight)));
+ lm = g.getFontMetrics().getLineMetrics(dc, 0, 1, g);
+ g.setColor(profcolour.findColour(dc[0]));
+ g.drawChars(dc, 0, 1, x * av.charWidth,
+ (int) (ht + lm.getHeight()));
+ }
+ }
+ g.setFont(ofont);
+ }
+
x++;
}
}
}
- /*
- * Disabled for 2.5 release - see bug #0060064 private int[]
- * getProfileFor(AlignmentAnnotation aa, int column) { // if
- * (aa.autoCalculated && aa.label.startsWith("Consensus")) { if
- * (aa.groupRef!=null && aa.groupRef.consensusData!=null) { // &&
- * aa.groupRef.isShowSequenceLogo()) { return
- * AAFrequency.extractProfile(aa.groupRef
- * .consensusData[column],aa.groupRef.getIgnoreGapsConsensus()); } // TODO
- * extend annotation row to enable dynamic and static profile data to be
- * stored if (aa.groupRef==null && aa.sequenceRef==null) // &&
- * av.isShowSequenceLogo()) { return
- * AAFrequency.extractProfile(av.hconsensus[column
- * ],av.getIgnoreGapsConsensus()); } // } return null; }
- */
+ private int[] getProfileFor(AlignmentAnnotation aa, int column)
+ {
+ // if (aa.autoCalculated && aa.label.startsWith("Consensus")) {
+ if (aa.groupRef != null && aa.groupRef.consensusData != null)
+ {
+ // && aa.groupRef.isShowSequenceLogo()) {
+ return AAFrequency.extractProfile(aa.groupRef.consensusData[column],
+ aa.groupRef.getIgnoreGapsConsensus());
+ }
+ // TODO extend annotation row to enable dynamic and static profile data to
+ // be stored
+ if (aa.groupRef == null && aa.sequenceRef == null)
+ // && av.isShowSequenceLogo())
+ {
+ return AAFrequency.extractProfile(av.hconsensus[column],
+ av.getIgnoreGapsConsensus());
+ }
+ // }
+ return null;
+ }
// used by overview window
public void drawGraph(Graphics g, AlignmentAnnotation aa, int width,
x += av.charWidth;
}
}
+
+ int scrollOffset = 0;
+
+ public void setScrollOffset(int value)
+ {
+ scrollOffset = value;
+ repaint();
+ }
}