X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=398f57d0fcb9a1b975beea3a0fe41965878f4cd7;hb=608002f963630dd631941e34f1a6a93b6dcbd823;hp=bb311efea67a97c6482d3db8df2e6eb17b95dffa;hpb=69bab27e77ceaca6d12e0de49f8fc62e01678f53;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index bb311ef..398f57d 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -26,6 +26,7 @@ import jalview.datamodel.ColumnSelection; import jalview.datamodel.SequenceI; import jalview.renderer.AnnotationRenderer; import jalview.renderer.AwtRenderPanelI; +import jalview.util.Comparison; import jalview.util.MessageManager; import java.awt.AlphaComposite; @@ -351,7 +352,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } } else - // HELIX OR SHEET + // HELIX, SHEET or STEM { char type = 0; String symbol = "\u03B1"; @@ -412,9 +413,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } } + av.getAlignment().validateAnnotation(aa[activeRow]); ap.alignmentChanged(); - + ap.alignFrame.setMenusForViewport(); adjustPanelHeight(); repaint(); @@ -628,10 +630,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } /** - * DOCUMENT ME! + * Constructs the tooltip, and constructs and displays a status message, for + * the current mouse position * * @param evt - * DOCUMENT ME! */ @Override public void mouseMoved(MouseEvent evt) @@ -657,7 +659,6 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (evt.getY() < height) { row = i; - break; } } @@ -668,64 +669,125 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, return; } - int res = (evt.getX() / av.getCharWidth()) + av.getStartRes(); + int column = (evt.getX() / av.getCharWidth()) + av.getStartRes(); if (av.hasHiddenColumns()) { - res = av.getColumnSelection().adjustForHiddenColumns(res); + column = av.getColumnSelection().adjustForHiddenColumns(column); + } + + AlignmentAnnotation ann = aa[row]; + if (row > -1 && ann.annotations != null + && column < ann.annotations.length) + { + buildToolTip(ann, column, aa); + setStatusMessage(column, ann); + } + else + { + this.setToolTipText(null); + ap.alignFrame.statusBar.setText(" "); } + } - if (row > -1 && aa[row].annotations != null - && res < aa[row].annotations.length) + /** + * Builds a tooltip for the annotation at the current mouse position. + * + * @param ann + * @param column + * @param anns + */ + void buildToolTip(AlignmentAnnotation ann, int column, + AlignmentAnnotation[] anns) + { + if (ann.graphGroup > -1) { - if (aa[row].graphGroup > -1) + StringBuilder tip = new StringBuilder(32); + tip.append(""); + for (int i = 0; i < anns.length; i++) { - StringBuffer tip = new StringBuffer(""); - for (int gg = 0; gg < aa.length; gg++) + if (anns[i].graphGroup == ann.graphGroup + && anns[i].annotations[column] != null) { - if (aa[gg].graphGroup == aa[row].graphGroup - && aa[gg].annotations[res] != null) + tip.append(anns[i].label); + String description = anns[i].annotations[column].description; + if (description != null && description.length() > 0) { - tip.append(aa[gg].label + " " - + aa[gg].annotations[res].description + "
"); + tip.append(" ").append(description); } - } - if (tip.length() != 6) - { - tip.setLength(tip.length() - 4); - this.setToolTipText(tip.toString() + ""); + tip.append("
"); } } - else if (aa[row].annotations[res] != null - && aa[row].annotations[res].description != null - && aa[row].annotations[res].description.length() > 0) + if (tip.length() != 6) { - this.setToolTipText(JvSwingUtils.wrapTooltip(true, - aa[row].annotations[res].description)); + tip.setLength(tip.length() - 4); + this.setToolTipText(tip.toString() + ""); } - else + } + else if (ann.annotations[column] != null) + { + String description = ann.annotations[column].description; + if (description != null && description.length() > 0) { - // clear the tooltip. - this.setToolTipText(null); + this.setToolTipText(JvSwingUtils.wrapTooltip(true, description)); } + } + else + { + // clear the tooltip. + this.setToolTipText(null); + } + } - if (aa[row].annotations[res] != null) + /** + * Constructs and displays the status bar message + * + * @param column + * @param ann + */ + void setStatusMessage(int column, AlignmentAnnotation ann) + { + /* + * show alignment column and annotation description if any + */ + StringBuilder text = new StringBuilder(32); + text.append(MessageManager.getString("label.column")).append(" ") + .append(column + 1); + + if (ann.annotations[column] != null) + { + String description = ann.annotations[column].description; + if (description != null && description.trim().length() > 0) { - StringBuffer text = new StringBuffer("Sequence position " - + (res + 1)); + text.append(" ").append(description); + } + } - if (aa[row].annotations[res].description != null) + /* + * if the annotation is sequence-specific, show the sequence number + * in the alignment, and (if not a gap) the residue and position + */ + SequenceI seqref = ann.sequenceRef; + if (seqref != null) + { + int seqIndex = av.getAlignment().findIndex(seqref); + if (seqIndex != -1) + { + text.append(", ") + .append(MessageManager.getString("label.sequence")) + .append(" ") + .append(seqIndex + 1); + char residue = seqref.getCharAt(column); + if (!Comparison.isGap(residue)) { - text.append(" " + aa[row].annotations[res].description); + int residuePos = seqref.findPosition(column); + text.append(": ").append(residue).append(" (") + .append(residuePos).append(")"); } - - ap.alignFrame.statusBar.setText(text.toString()); } } - else - { - this.setToolTipText(null); - } + + ap.alignFrame.statusBar.setText(text.toString()); } /**