package jalview.gui;
import jalview.datamodel.AlignmentAnnotation;
+import jalview.datamodel.AlignmentI;
import jalview.datamodel.Annotation;
import jalview.datamodel.ColumnSelection;
import jalview.datamodel.HiddenColumns;
*/
public AnnotationPanel(AlignmentPanel ap)
{
-// setBackground(Color.white); // BH 2019
-
- ToolTipManager.sharedInstance().registerComponent(this);
+ ToolTipManager.sharedInstance().registerComponent(this);
ToolTipManager.sharedInstance().setInitialDelay(0);
ToolTipManager.sharedInstance().setDismissDelay(10000);
this.ap = ap;
@Override
public void mouseMoved(MouseEvent evt)
{
+ int yPos = evt.getY();
AlignmentAnnotation[] aa = av.getAlignment().getAlignmentAnnotation();
- if (aa == null)
- {
- this.setToolTipText(null);
- return;
- }
-
- int row = -1;
- int height = 0;
-
- for (int i = 0; i < aa.length; i++)
- {
- if (aa[i].visible)
- {
- height += aa[i].height;
- }
-
- if (evt.getY() < height)
- {
- row = i;
- break;
- }
- }
+ int row = getRowIndex(yPos, aa);
if (row == -1)
{
int column = (evt.getX() / av.getCharWidth())
+ av.getRanges().getStartRes();
+ column = Math.min(column, av.getRanges().getEndRes());
if (av.hasHiddenColumns())
{
if (row > -1 && ann.annotations != null
&& column < ann.annotations.length)
{
- buildToolTip(ann, column, aa);
- setStatusMessage(column, ann);
+ setToolTipText(buildToolTip(ann, column, aa));
+ String msg = getStatusMessage(av.getAlignment(), column, ann);
+ ap.alignFrame.setStatus(msg);
}
else
{
}
/**
- * Builds a tooltip for the annotation at the current mouse position.
+ * Answers the index in the annotations array of the visible annotation at the
+ * given y position. This is done by adding the heights of visible annotations
+ * until the y position has been exceeded. Answers -1 if no annotations are
+ * visible, or the y position is below all annotations.
+ *
+ * @param yPos
+ * @param aa
+ * @return
+ */
+ static int getRowIndex(int yPos, AlignmentAnnotation[] aa)
+ {
+ if (aa == null)
+ {
+ return -1;
+ }
+ int row = -1;
+ int height = 0;
+
+ for (int i = 0; i < aa.length; i++)
+ {
+ if (aa[i].visible)
+ {
+ height += aa[i].height;
+ }
+
+ if (height > yPos)
+ {
+ row = i;
+ break;
+ }
+ }
+ return row;
+ }
+
+ /**
+ * Answers a tooltip for the annotation at the current mouse position
*
* @param ann
* @param column
* @param anns
*/
- void buildToolTip(AlignmentAnnotation ann, int column,
+ static String buildToolTip(AlignmentAnnotation ann, int column,
AlignmentAnnotation[] anns)
{
+ String tooltip = null;
if (ann.graphGroup > -1)
{
StringBuilder tip = new StringBuilder(32);
if (tip.length() != 6)
{
tip.setLength(tip.length() - 4);
- this.setToolTipText(tip.toString() + "</html>");
+ tooltip = tip.toString() + "</html>";
}
}
- else if (ann.annotations[column] != null)
+ else if (column < ann.annotations.length
+ && ann.annotations[column] != null)
{
String description = ann.annotations[column].description;
if (description != null && description.length() > 0)
{
- this.setToolTipText(JvSwingUtils.wrapTooltip(true, description));
+ tooltip = JvSwingUtils.wrapTooltip(true, description);
}
else
{
- this.setToolTipText(null); // no tooltip if null or empty description
+ tooltip = null; // no tooltip if null or empty description
}
}
else
{
// clear the tooltip.
- this.setToolTipText(null);
+ tooltip = null;
}
+ return tooltip;
}
/**
- * Constructs and displays the status bar message
+ * Constructs and returns the status bar message
*
+ * @param al
* @param column
* @param ann
*/
- void setStatusMessage(int column, AlignmentAnnotation ann)
+ static String getStatusMessage(AlignmentI al, int column,
+ AlignmentAnnotation ann)
{
/*
* show alignment column and annotation description if any
text.append(MessageManager.getString("label.column")).append(" ")
.append(column + 1);
- if (ann.annotations[column] != null)
+ if (column < ann.annotations.length && ann.annotations[column] != null)
{
String description = ann.annotations[column].description;
if (description != null && description.trim().length() > 0)
SequenceI seqref = ann.sequenceRef;
if (seqref != null)
{
- int seqIndex = av.getAlignment().findIndex(seqref);
+ int seqIndex = al.findIndex(seqref);
if (seqIndex != -1)
{
text.append(", ").append(MessageManager.getString("label.sequence"))
{
text.append(" ");
String name;
- if (av.getAlignment().isNucleotide())
+ if (al.isNucleotide())
{
name = ResidueProperties.nucleotideName
.get(String.valueOf(residue));
}
}
- ap.alignFrame.setStatus(text.toString());
+ return text.toString();
}
/**