X-Git-Url: http://source.jalview.org/gitweb/?a=blobdiff_plain;f=src%2Fjalview%2Fjbgui%2FGSplitFrame.java;h=0549f17da8a909b893afc49b3a8a4edbb4353c65;hb=4c091bec21e4aec8e1784d757d9d466382e61e25;hp=b9f07db8ea5988c8aa8248b7237ec7ac61779516;hpb=4d7f98a6dd54d9863ba449ec79dcd95d25ed863d;p=jalview.git
diff --git a/src/jalview/jbgui/GSplitFrame.java b/src/jalview/jbgui/GSplitFrame.java
index b9f07db..0549f17 100644
--- a/src/jalview/jbgui/GSplitFrame.java
+++ b/src/jalview/jbgui/GSplitFrame.java
@@ -1,3 +1,23 @@
+/*
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
+ *
+ * This file is part of Jalview.
+ *
+ * Jalview is free software: you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation, either version 3
+ * of the License, or (at your option) any later version.
+ *
+ * Jalview is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty
+ * of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE. See the GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Jalview. If not, see .
+ * The Jalview Authors are detailed in the 'AUTHORS' file.
+ */
package jalview.jbgui;
import jalview.util.Platform;
@@ -13,6 +33,8 @@ import javax.swing.plaf.basic.BasicInternalFrameUI;
public class GSplitFrame extends JInternalFrame
{
+ protected static final int DIVIDER_SIZE = 5;
+
private static final long serialVersionUID = 1L;
private GAlignFrame topFrame;
@@ -21,6 +43,12 @@ public class GSplitFrame extends JInternalFrame
private JSplitPane splitPane;
+ /*
+ * proportional position of split divider; saving this allows it to be
+ * restored after hiding one half and resizing
+ */
+ private double dividerRatio;
+
/**
* Constructor
*
@@ -45,12 +73,30 @@ public class GSplitFrame extends JInternalFrame
splitPane = new JSplitPane(JSplitPane.VERTICAL_SPLIT, topFrame,
bottomFrame);
splitPane.setVisible(true);
- final double ratio = bottomFrame.getHeight() == 0 ? 0.5d : topFrame
- .getHeight()
- / (double) (topFrame.getHeight() + bottomFrame.getHeight());
- splitPane.setDividerLocation(ratio);
- splitPane.setResizeWeight(ratio);
- splitPane.setDividerSize(5);
+
+ /*
+ * set divider split at 50:50, or restore saved split if loading from
+ * project
+ */
+ int topFrameHeight = topFrame.getHeight();
+ /**
+ * TODO SplitFrame.setDividerLocation
+ *
+ * @j2sNative
+ */
+ {
+ splitPane.setDividerSize(DIVIDER_SIZE);
+ if (topFrameHeight == 0)
+ {
+ setRelativeDividerLocation(0.5d); // as a proportion
+ }
+ else
+ {
+ int dividerPosition = topFrameHeight + DIVIDER_SIZE / 2;
+ splitPane.setDividerLocation(dividerPosition); // absolute position
+ }
+ splitPane.setResizeWeight(0.5d);
+ }
add(splitPane);
}
@@ -63,7 +109,7 @@ public class GSplitFrame extends JInternalFrame
*/
protected void hideTitleBars()
{
- if (new Platform().isAMac())
+ if (Platform.isAMac())
{
// this saves some space - but doesn't hide the title bar
topFrame.putClientProperty("JInternalFrame.isPalette", true);
@@ -72,8 +118,13 @@ public class GSplitFrame extends JInternalFrame
}
else
{
- ((BasicInternalFrameUI) topFrame.getUI()).setNorthPane(null);
- ((BasicInternalFrameUI) bottomFrame.getUI()).setNorthPane(null);
+ /**
+ * @j2sNative
+ */
+ {
+ ((BasicInternalFrameUI) topFrame.getUI()).setNorthPane(null);
+ ((BasicInternalFrameUI) bottomFrame.getUI()).setNorthPane(null);
+ }
}
}
@@ -114,16 +165,31 @@ public class GSplitFrame extends JInternalFrame
return false;
}
Point p = comp.getLocationOnScreen();
- Rectangle r = new Rectangle(p.x, p.y, comp.getWidth(), comp.getHeight());
+ Rectangle r = new Rectangle(p.x, p.y, comp.getWidth(),
+ comp.getHeight());
return r.contains(loc);
}
/**
- * Make the complement of the specified split component visible or hidden,
- * adjusting the position of the split divide.
+ * Makes the complement of the specified split component visible or hidden,
+ * restoring or saving the position of the split divide.
*/
public void setComplementVisible(Object alignFrame, boolean show)
{
+ /*
+ * save divider ratio on hide, restore on show
+ */
+ if (show)
+ {
+ setRelativeDividerLocation(dividerRatio);
+ }
+ else
+ {
+ this.dividerRatio = splitPane.getDividerLocation()
+ / (double) (splitPane.getHeight()
+ - splitPane.getDividerSize());
+ }
+
if (alignFrame == this.topFrame)
{
this.bottomFrame.setVisible(show);
@@ -132,12 +198,50 @@ public class GSplitFrame extends JInternalFrame
{
this.topFrame.setVisible(show);
}
- if (show)
+
+ validate();
+ }
+
+ /**
+ * Set the divider location as a proportion (0 <= r <= 1) of the height
+ * Warning: this overloads setDividerLocation(int), and getDividerLocation()
+ * returns the int (pixel count) value
+ *
+ * @param r
+ */
+ public void setRelativeDividerLocation(double r)
+ {
+ this.dividerRatio = r;
+ /**
+ * @j2sNative
+ */
{
- // SplitPane needs nudging to restore 50-50 split
- // TODO save/restore other ratios
- splitPane.setDividerLocation(0.5d);
+ splitPane.setDividerLocation(r);
}
- validate();
+ }
+
+ /**
+ * Sets the divider location (in pixels from top)
+ *
+ * @return
+ */
+ protected void setDividerLocation(int p)
+ {
+ /**
+ * @j2sNative
+ */
+ {
+ splitPane.setDividerLocation(p);
+ }
+ }
+
+ /**
+ * Returns the divider location (in pixels from top)
+ *
+ * @return
+ */
+ protected int getDividerLocation()
+ {
+ return splitPane.getDividerLocation();
}
}