X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fgui%2FAnnotationPanel.java;h=50971c73f72c7eda8dae610b5a4087a31155abdb;hb=e837aa274d86db61848aeb6990eaa09c0c1e6a20;hp=abe92bbabb4f691f41ce4c7ee3ba8aba5a466c8a;hpb=90ff735f876d7064f1f24925874fd7f41f94c7ac;p=jalview.git diff --git a/src/jalview/gui/AnnotationPanel.java b/src/jalview/gui/AnnotationPanel.java index abe92bb..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 { @@ -961,7 +968,7 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, gg.fillRect(0, 0, imgWidth, image.getHeight()); imageFresh = true; } - + drawComponent(gg, av.getRanges().getStartRes(), av.getRanges().getEndRes() + 1); imageFresh = false; @@ -1014,7 +1021,11 @@ public class AnnotationPanel extends JPanel implements AwtRenderPanelI, gg.translate(-transX, 0); fastPaint = true; - 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; @@ -1182,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; } }