JAL-845 handling eXpand/Gather split frame views
[jalview.git] / src / jalview / gui / JvSwingUtils.java
index c404e2f..1cc8a92 100644 (file)
@@ -34,6 +34,7 @@ import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
+import javax.swing.JScrollBar;
 import javax.swing.SwingConstants;
 
 /**
@@ -212,6 +213,53 @@ public final class JvSwingUtils
     }
   }
 
+  /**
+   * Returns the proportion of its range that a scrollbar's position represents,
+   * as a value between 0 and 1. For example if the whole range is from 0 to
+   * 200, then a position of 40 gives proportion = 0.2.
+   * 
+   * @see http://www.javalobby.org/java/forums/t33050.html#91885334
+   * 
+   * @param scroll
+   * @return
+   */
+  public static float getScrollBarProportion(JScrollBar scroll)
+  {
+    /*
+     * The extent (scroll handle width) deduction gives the true operating range
+     * of possible positions.
+     */
+    int possibleRange = scroll.getMaximum() - scroll.getMinimum()
+            - scroll.getModel().getExtent();
+    float valueInRange = scroll.getValue()
+            - (scroll.getModel().getExtent() / 2f);
+    float proportion = valueInRange / possibleRange;
+    return proportion;
+  }
+
+  /**
+   * Returns the scroll bar position in its range that would match the given
+   * proportion (between 0 and 1) of the whole. For example if the whole range
+   * is from 0 to 200, then a proportion of 0.25 gives position 50.
+   * 
+   * @param scrollbar
+   * @param proportion
+   * @return
+   */
+  public static int getScrollValueForProportion(JScrollBar scrollbar,
+          float proportion)
+  {
+    /*
+     * The extent (scroll handle width) deduction gives the true operating range
+     * of possible positions.
+     */
+    float fraction = proportion
+            * (scrollbar.getMaximum() - scrollbar.getMinimum() - scrollbar
+                    .getModel().getExtent())
+            + (scrollbar.getModel().getExtent() / 2f);
+    return Math.min(Math.round(fraction), scrollbar.getMaximum());
+  }
+
   public static void jvInitComponent(AbstractButton comp, String i18nString)
   {
     setColorAndFont(comp);
@@ -226,14 +274,10 @@ public final class JvSwingUtils
     setColorAndFont(comp);
   }
 
-  // public static void jvInitComponent(JComponent comp, String name){
-  // setColorAndFont(comp);
-  // comp.setText(MessageManager.getString("label.select_all"));
-  // }
-
   private static void setColorAndFont(JComponent comp)
   {
     comp.setBackground(Color.white);
     comp.setFont(JvSwingUtils.getLabelFont());
   }
+
 }