From 34348a4079b425ce7fda3eb75e5e6a2b62cf16b9 Mon Sep 17 00:00:00 2001 From: Jim Procter Date: Fri, 4 Apr 2014 16:38:24 +0100 Subject: [PATCH] JAL-1211 - set annotation panel height according to the amount of annotation present on the alignment and the relative size of the alignment. --- src/jalview/appletgui/AlignmentPanel.java | 25 ++++++++++++++++------ src/jalview/gui/AlignmentPanel.java | 32 +++++++++++++++++++++-------- 2 files changed, 42 insertions(+), 15 deletions(-) diff --git a/src/jalview/appletgui/AlignmentPanel.java b/src/jalview/appletgui/AlignmentPanel.java index b34a5bb..5a49281 100644 --- a/src/jalview/appletgui/AlignmentPanel.java +++ b/src/jalview/appletgui/AlignmentPanel.java @@ -84,7 +84,6 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, annotationPanelHolder.add(annotationPanel, BorderLayout.CENTER); sequenceHolderPanel.add(annotationPanelHolder, BorderLayout.SOUTH); - alabels = new AnnotationLabels(this); setAnnotationVisible(av.showAnnotation); @@ -138,7 +137,6 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, } } }); - } public SequenceRenderer getSequenceRenderer() @@ -480,12 +478,27 @@ public class AlignmentPanel extends Panel implements AdjustmentListener, int mheight = height; Dimension d = sequenceHolderPanel.getSize(), e = idPanel.getSize(); int seqandannot = d.height - scalePanelHolder.getSize().height; - // sets initial preferred height - if ((height + 40) > seqandannot / 2) + + if (adjustPanelHeight) { - height = seqandannot / 2; + // NOTE: this logic is different in the application. Need a better algorithm to define behaviour + // sets initial preferred height + // try and set height according to alignment + float sscaling = (float) ((av.getCharHeight() * av.getAlignment().getHeight())/(1.0*mheight)); + if (sscaling > 0.5) + { + // if the alignment is too big then + // default is 0.5 split + height = seqandannot / 2; + } + else + { + // otherwise just set the panel so that one row of sequence is visible + height = -av.getCharHeight() * 1 + + (int) (seqandannot * (1 - sscaling)); + } } - if (!adjustPanelHeight) + else { // maintain same window layout whilst updating sliders height = annotationPanelHolder.getSize().height; diff --git a/src/jalview/gui/AlignmentPanel.java b/src/jalview/gui/AlignmentPanel.java index 541c7c2..6bfe4bd 100644 --- a/src/jalview/gui/AlignmentPanel.java +++ b/src/jalview/gui/AlignmentPanel.java @@ -422,16 +422,30 @@ public class AlignmentPanel extends GAlignmentPanel implements protected void validateAnnotationDimensions(boolean adjustPanelHeight) { int height = annotationPanel.adjustPanelHeight(); - - if (hscroll.isVisible()) - { - height += hscroll.getPreferredSize().height; - } - if (height > alignFrame.getHeight() / 2) - { - height = alignFrame.getHeight() / 2; + + int theight = av.getCharHeight() * (av.getAlignment().getHeight() + (!av.hasHiddenRows() ? 0 : av.getAlignment().getHiddenSequences().getSize())); + float sscaling = (float) (theight/(1.0*theight+height)); + float ascaling=(float)(height*1.0/alignFrame.getHeight()); + int rheight = alignFrame.getHeight() - height - av.getCharHeight(); + if (adjustPanelHeight) + { + // NOTE: this logic is different in the applet. Need a better algorithm to define behaviour + // try and set height according to alignment + if (ascaling>0 && sscaling < 0.5) + { + // if the alignment is too big then + // default is 0.5 split + height = alignFrame.getHeight() / 2; + } + else + { + // if space for more than one sequence row left when annotation is fully displayed then set height to annotation height + // otherwise, leave at least two lines of sequence shown. + height = (rheight>av.getCharHeight()) ? height : (-av.getCharHeight() * 3 + + (int) (alignFrame.getHeight() * (1 - sscaling))); + } } - if (!adjustPanelHeight) + else { // maintain same window layout whilst updating sliders height = annotationScroller.getSize().height; -- 1.7.10.2