From d55d92c783c55dfbb1001134ef4478941af826ad Mon Sep 17 00:00:00 2001 From: gmungoc Date: Mon, 18 Sep 2017 09:26:43 +0100 Subject: [PATCH] JAL-2728 fine tuned initial split of split frame view --- src/jalview/gui/CrossRefAction.java | 2 +- src/jalview/gui/SplitFrame.java | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/src/jalview/gui/CrossRefAction.java b/src/jalview/gui/CrossRefAction.java index 01ee1ff..2d1dfd4 100644 --- a/src/jalview/gui/CrossRefAction.java +++ b/src/jalview/gui/CrossRefAction.java @@ -242,7 +242,7 @@ public class CrossRefAction implements Runnable String linkedTitle = MessageManager .getString("label.linked_view_title"); Desktop.addInternalFrame(sf, linkedTitle, -1, -1); - sf.adjustDivider(); + sf.adjustInitialLayout(); // finally add the top, then bottom frame to the view list xrefViews.add(dna ? copyThis.alignPanel : newFrame.alignPanel); diff --git a/src/jalview/gui/SplitFrame.java b/src/jalview/gui/SplitFrame.java index c23ed7c..5bff407 100644 --- a/src/jalview/gui/SplitFrame.java +++ b/src/jalview/gui/SplitFrame.java @@ -194,12 +194,16 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI } /** - * Adjust the divider for a sensible split of the real estate (for example, + * Adjusts the divider for a sensible split of the real estate (for example, * when many transcripts are shown with a single protein). This should only be * called after the split pane has been laid out (made visible) so it has a - * height. + * height. The aim is to avoid unnecessary vertical scroll bars, while + * ensuring that at least 2 sequences are visible in each panel. + *

+ * Once laid out, the user may choose to customise as they wish, so this + * method is not called again after the initial layout. */ - protected void adjustDivider() + protected void adjustInitialLayout() { AlignFrame topFrame = (AlignFrame) getTopFrame(); AlignFrame bottomFrame = (AlignFrame) getBottomFrame(); @@ -224,30 +228,26 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI int bottomCharHeight = bottomViewport.getViewStyle().getCharHeight(); /* - * calculate the minimum ratio that leaves at least - * two sequences visible in the top panel + * calculate the minimum ratio that leaves at least the height + * of two sequences (after rounding) visible in the top panel */ int topPanelHeight = topFrame.getHeight(); int bottomPanelHeight = bottomFrame.getHeight(); int topSequencesHeight = topFrame.alignPanel.getSeqPanel().seqCanvas .getHeight(); int topPanelMinHeight = topPanelHeight - - Math.max(0, - topSequencesHeight - 2 * topViewport.getCharHeight()); + - Math.max(0, topSequencesHeight - 3 * topCharHeight); double totalHeight = (double) topPanelHeight + bottomPanelHeight; double minRatio = topPanelMinHeight / totalHeight; /* - * calculate the maximum ratio that leaves at least - * two sequences visible in the bottom panel + * calculate the maximum ratio that leaves at least the height + * of two sequences (after rounding) visible in the bottom panel */ int bottomSequencesHeight = bottomFrame.alignPanel.getSeqPanel().seqCanvas .getHeight(); int bottomPanelMinHeight = bottomPanelHeight - - Math.max( - 0, - bottomSequencesHeight - 2 - * bottomViewport.getCharHeight()); + - Math.max(0, bottomSequencesHeight - 3 * bottomCharHeight); double maxRatio = (totalHeight - bottomPanelMinHeight) / totalHeight; /* @@ -268,7 +268,7 @@ public class SplitFrame extends GSplitFrame implements SplitContainerI */ ratio = Math.min(ratio, maxRatio); ratio = Math.max(ratio, minRatio); - // setRelativeDividerLocation(ratio); + setRelativeDividerLocation(ratio); } /** -- 1.7.10.2