X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=13476243a403117e980102b3c08d0c0cff1e4d5c;hb=709f51ae2e2c9e2b8d798300819c7e75b282bcfc;hp=3212156698c233482655207467c693f0c5c67d14;hpb=31b84e9690b026255a488724ef7b847da94e48af;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 3212156..1347624 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -21,6 +21,7 @@ package jalview.gui; import jalview.datamodel.AlignmentAnnotation; +import jalview.datamodel.AlignmentI; import jalview.datamodel.Annotation; import jalview.datamodel.ColumnSelection; import jalview.datamodel.HiddenColumns; @@ -149,9 +150,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, */ 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; @@ -762,30 +761,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, @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) { @@ -795,6 +774,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, int column = (evt.getX() / av.getCharWidth()) + av.getRanges().getStartRes(); + column = Math.min(column, av.getRanges().getEndRes()); if (av.hasHiddenColumns()) { @@ -806,8 +786,9 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, 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 { @@ -817,15 +798,51 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } /** - * 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); @@ -847,35 +864,39 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (tip.length() != 6) { tip.setLength(tip.length() - 4); - this.setToolTipText(tip.toString() + ""); + tooltip = tip.toString() + ""; } } - 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 @@ -884,7 +905,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, 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) @@ -900,7 +921,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, 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")) @@ -910,7 +931,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, { text.append(" "); String name; - if (av.getAlignment().isNucleotide()) + if (al.isNucleotide()) { name = ResidueProperties.nucleotideName .get(String.valueOf(residue)); @@ -931,7 +952,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, } } - ap.alignFrame.setStatus(text.toString()); + return text.toString(); } /** @@ -1276,18 +1297,23 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, // Here we only want to fastpaint on a scroll, with resize using a normal // paint, so scroll events are identified as changes to the horizontal or // vertical start value. - if (evt.getPropertyName().equals(ViewportRanges.STARTRES)) + switch (evt.getPropertyName()) { + case ViewportRanges.STARTRES: fastPaint((int) evt.getNewValue() - (int) evt.getOldValue()); - } - else if (evt.getPropertyName().equals(ViewportRanges.STARTRESANDSEQ)) - { + break; + case ViewportRanges.STARTRESANDSEQ: fastPaint(((int[]) evt.getNewValue())[0] - ((int[]) evt.getOldValue())[0]); - } - else if (evt.getPropertyName().equals(ViewportRanges.MOVE_VIEWPORT)) - { + break; + case ViewportRanges.MOVE_VIEWPORT: repaint(); + break; + case ViewportRanges.STARTSEQ: + case ViewportRanges.ENDRES: + case ViewportRanges.ENDSEQ: + // ignore + break; } } @@ -1309,7 +1335,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, * hscroll, status bar, insets. */ int stuff = (ap.getViewName() != null ? 30 : 0) - + (Platform.isAMac() ? 120 : 140); + + (Platform.isAMacAndNotJS() ? 120 : 140); int availableHeight = ap.alignFrame.getHeight() - stuff; int rowHeight = av.getCharHeight();