Merge develop to Release_2_8_3_Branch
[jalview.git] / src / jalview / gui / JvSwingUtils.java
index 4dfd40d..a0bc7c9 100644 (file)
@@ -1,6 +1,6 @@
 /*
- * Jalview - A Sequence Alignment Editor and Viewer (Version 2.8.2)
- * Copyright (C) 2014 The Jalview Authors
+ * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$)
+ * Copyright (C) $$Year-Rel$$ The Jalview Authors
  * 
  * This file is part of Jalview.
  * 
  */
 package jalview.gui;
 
+import jalview.util.MessageManager;
+
+import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.Font;
+import java.awt.GridLayout;
 import java.awt.Rectangle;
 import java.awt.event.ActionListener;
 
+import javax.swing.AbstractButton;
 import javax.swing.JButton;
 import javax.swing.JComponent;
 import javax.swing.JLabel;
 import javax.swing.JMenu;
 import javax.swing.JMenuItem;
 import javax.swing.JPanel;
+import javax.swing.JScrollBar;
 import javax.swing.SwingConstants;
 
 /**
@@ -46,20 +52,22 @@ public final class JvSwingUtils
    * <table width=350>
    * <tr>
    * <td></td> field
+ * @param enclose TODO
+ * @param ttext
    * 
-   * @param ttext
    * @return
    */
-  public static String wrapTooltip(String ttext)
+  public static String wrapTooltip(boolean enclose, String ttext)
   {
     if (ttext.length() < 60)
     {
-      return ttext;
+      return enclose ? "<html>" + ttext + "</html>" : ttext;
     }
     else
     {
-      return "<table width=350 border=0><tr><td>" + ttext
-              + "</td></tr></table>";
+      return (enclose ? "<html>" : "")
+              + "<table width=350 border=0><tr><td>" + ttext
+              + "</td></tr></table>" + ((enclose ? "</html>" : ""));
     }
   }
 
@@ -117,14 +125,16 @@ public final class JvSwingUtils
   public static JPanel addtoLayout(JPanel panel, String tooltip,
           JComponent label, JComponent valBox)
   {
-    JPanel laypanel = new JPanel(), labPanel = new JPanel(), valPanel = new JPanel();
+    JPanel laypanel = new JPanel(new GridLayout(1, 2));
+    JPanel labPanel = new JPanel(new BorderLayout());
+    JPanel valPanel = new JPanel();
     // laypanel.setSize(panel.getPreferredSize());
     // laypanel.setLayout(null);
     labPanel.setBounds(new Rectangle(7, 7, 158, 23));
     valPanel.setBounds(new Rectangle(172, 7, 270, 23));
     // labPanel.setLayout(new GridLayout(1,1));
     // valPanel.setLayout(new GridLayout(1,1));
-    labPanel.add(label);
+    labPanel.add(label, BorderLayout.WEST);
     valPanel.add(valBox);
     laypanel.add(labPanel);
     laypanel.add(valPanel);
@@ -207,4 +217,71 @@ 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);
+    if (i18nString != null && !i18nString.isEmpty())
+    {
+      comp.setText(MessageManager.getString(i18nString));
+    }
+  }
+
+  public static void jvInitComponent(JComponent comp)
+  {
+    setColorAndFont(comp);
+  }
+
+  private static void setColorAndFont(JComponent comp)
+  {
+    comp.setBackground(Color.white);
+    comp.setFont(JvSwingUtils.getLabelFont());
+  }
+
 }