* estimate width and height of SplitFrame; this.getInsets() doesn't seem to
* give the full additional size (a few pixels short)
*/
- int widthFudge = Platform.isAMac() ? MAC_INSETS_WIDTH
+ int widthFudge = Platform.isAMacAndNotJS() ? MAC_INSETS_WIDTH
: WINDOWS_INSETS_WIDTH;
- int heightFudge = Platform.isAMac() ? MAC_INSETS_HEIGHT
+ int heightFudge = Platform.isAMacAndNotJS() ? MAC_INSETS_HEIGHT
: WINDOWS_INSETS_HEIGHT;
int width = ((AlignFrame) getTopFrame()).getWidth() + widthFudge;
int height = ((AlignFrame) getTopFrame()).getHeight()
// allow about 65 pixels for Desktop decorators on Windows
int newHeight = Math.min(height,
- Desktop.instance.getHeight() - DESKTOP_DECORATORS_HEIGHT);
+ Desktop.getInstance().getHeight() - DESKTOP_DECORATORS_HEIGHT);
if (newHeight != height)
{
int oldDividerLocation = getDividerLocation();
{
// TODO if CommandListener is only ever 1:1 for complementary views,
// may change broadcast pattern to direct messaging (more efficient)
- final StructureSelectionManager ssm = StructureSelectionManager
- .getStructureSelectionManager(Desktop.instance);
+ final StructureSelectionManager ssm = Desktop
+ .getStructureSelectionManager();
ssm.addCommandListener(((AlignFrame) getTopFrame()).getViewport());
ssm.addCommandListener(((AlignFrame) getBottomFrame()).getViewport());
}
}
/**
- * 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.
+ * <p>
+ * 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();
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());
- int myHeight = getHeight();
- double minRatio = topPanelMinHeight / (double) myHeight;
+ - 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 bottomPanelHeight = bottomFrame.getHeight();
int bottomSequencesHeight = bottomFrame.alignPanel.getSeqPanel().seqCanvas
.getHeight();
int bottomPanelMinHeight = bottomPanelHeight
- - Math.max(
- 0,
- bottomSequencesHeight - 2
- * bottomViewport.getCharHeight());
- double maxRatio = (myHeight - bottomPanelMinHeight) / (double) myHeight;
+ - Math.max(0, bottomSequencesHeight - 3 * bottomCharHeight);
+ double maxRatio = (totalHeight - bottomPanelMinHeight) / totalHeight;
/*
* estimate ratio of (topFrameContent / bottomFrameContent)
*/
- int insets = Platform.isAMac() ? MAC_INSETS_HEIGHT
+ int insets = Platform.isAMacAndNotJS() ? MAC_INSETS_HEIGHT
: WINDOWS_INSETS_HEIGHT;
// allow 3 'rows' for scale, scrollbar, status bar
int topHeight = insets + (3 + topCount) * topCharHeight
*/
ratio = Math.min(ratio, maxRatio);
ratio = Math.max(ratio, minRatio);
- // setRelativeDividerLocation(ratio);
+ setRelativeDividerLocation(ratio);
}
/**
public void internalFrameClosed(InternalFrameEvent evt)
{
close();
- };
+ }
});
}
topFrame.setDisplayedView(newTopPanel);
}
- newBottomPanel.av.viewName = newTopPanel.av.viewName;
+ newBottomPanel.av.setViewName(newTopPanel.av.getViewName());
newTopPanel.av.setCodingComplement(newBottomPanel.av);
/*
*/
adjustLayout();
- final StructureSelectionManager ssm = StructureSelectionManager
- .getStructureSelectionManager(Desktop.instance);
+ final StructureSelectionManager ssm = Desktop
+ .getStructureSelectionManager();
ssm.addCommandListener(newTopPanel.av);
ssm.addCommandListener(newBottomPanel.av);
}
*/
protected void expandViews_actionPerformed()
{
- Desktop.instance.explodeViews(this);
+ Desktop.getInstance().explodeViews(this);
}
/**
*/
protected void gatherViews_actionPerformed()
{
- Desktop.instance.gatherViews(this);
+ Desktop.getInstance().gatherViews(this);
}
/**