X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=50971c73f72c7eda8dae610b5a4087a31155abdb;hb=7aa1e482163172b1ea16622eb2195fc8f2039951;hp=0d86b07a904c3d27af57e8517f6d2c68990a93fc;hpb=2131bbe62dd921c47cf5f117fa4e441c9be0f554;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index 0d86b07..50971c7 100755 --- a/src/jalview/gui/AnnotationPanel.java +++ b/src/jalview/gui/AnnotationPanel.java @@ -30,6 +30,7 @@ import jalview.renderer.AwtRenderPanelI; import jalview.schemes.ResidueProperties; import jalview.util.Comparison; import jalview.util.MessageManager; +import jalview.util.Platform; import jalview.viewmodel.ViewportListenerI; import jalview.viewmodel.ViewportRanges; @@ -175,11 +176,12 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (e.isShiftDown()) { e.consume(); - if (e.getWheelRotation() > 0) + double wheelRotation = e.getPreciseWheelRotation(); + if (wheelRotation > 0) { av.getRanges().scrollRight(true); } - else + else if (wheelRotation < 0) { av.getRanges().scrollRight(false); } @@ -205,7 +207,8 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, @Override public Dimension getPreferredScrollableViewportSize() { - return getPreferredSize(); + Dimension ps = getPreferredSize(); + return new Dimension(ps.width, adjustForAlignFrame(false, ps.height)); } @Override @@ -724,7 +727,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, if (av.hasHiddenColumns()) { column = av.getAlignment().getHiddenColumns() - .adjustForHiddenColumns(column); + .visibleToAbsoluteColumn(column); } AlignmentAnnotation ann = aa[row]; @@ -782,6 +785,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, { this.setToolTipText(JvSwingUtils.wrapTooltip(true, description)); } + else + { + this.setToolTipText(null); // no tooltip if null or empty description + } } else { @@ -1015,7 +1022,10 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, fastPaint = true; - av.getAlignPanel().alignFrame.repaint(); + // Call repaint on alignment panel so that repaints from other alignment + // panel components can be aggregated. Otherwise performance of the overview + // window and others may be adversely affected. + av.getAlignPanel().repaint(); } private volatile boolean lastImageGood = false; @@ -1183,5 +1193,54 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, fastPaint(((int[]) evt.getNewValue())[0] - ((int[]) evt.getOldValue())[0]); } + else if (evt.getPropertyName().equals(ViewportRanges.MOVE_VIEWPORT)) + { + repaint(); + } + } + + /** + * computes the visible height of the annotation panel + * + * @param adjustPanelHeight + * - when false, just adjust existing height according to other + * windows + * @param annotationHeight + * @return height to use for the ScrollerPreferredVisibleSize + */ + public int adjustForAlignFrame(boolean adjustPanelHeight, + int annotationHeight) + { + /* + * Estimate available height in the AlignFrame for alignment + + * annotations. Deduct an estimate for title bar, menu bar, scale panel, + * hscroll, status bar, insets. + */ + int stuff = (ap.getViewName() != null ? 30 : 0) + + (Platform.isAMac() ? 120 : 140); + int availableHeight = ap.alignFrame.getHeight() - stuff; + int rowHeight = av.getCharHeight(); + + if (adjustPanelHeight) + { + int alignmentHeight = rowHeight * av.getAlignment().getHeight(); + + /* + * If not enough vertical space, maximize annotation height while keeping + * at least two rows of alignment visible + */ + if (annotationHeight + alignmentHeight > availableHeight) + { + annotationHeight = Math.min(annotationHeight, + availableHeight - 2 * rowHeight); + } + } + else + { + // maintain same window layout whilst updating sliders + annotationHeight = Math.min(ap.annotationScroller.getSize().height, + availableHeight - 2 * rowHeight); + } + return annotationHeight; } }