JAL-3141 Added tooltips on Schemes dropdown and Customise checkbox
[jalview.git] / src / jalview / gui / JvSwingUtils.java
index 79e0cef..8ec40cb 100644 (file)
@@ -20,6 +20,7 @@
  */
 package jalview.gui;
 
+import jalview.io.IntKeyStringValueEntry;
 import jalview.util.MessageManager;
 
 import java.awt.BorderLayout;
@@ -355,13 +356,57 @@ public final class JvSwingUtils
   }
 
   /**
+   * A helper method to build a drop-down choice of values, with tooltips for the
+   * entries
+   * 
+   * @param entries
+   * @param tooltips
+   */
+  public static JComboBox<IntKeyStringValueEntry> buildIntKeyStringValueComboWithTooltips(
+          List<IntKeyStringValueEntry> entries, List<String> tooltips)
+  {
+    JComboBox<IntKeyStringValueEntry> combo = new JComboBox<>();
+    final ComboBoxTooltipRenderer renderer = new ComboBoxTooltipRenderer();
+    combo.setRenderer(renderer);
+    for (IntKeyStringValueEntry attName : entries)
+    {
+      combo.addItem(attName);
+    }
+    renderer.setTooltips(tooltips);
+    final MouseAdapter mouseListener = new MouseAdapter()
+    {
+      @Override
+      public void mouseEntered(MouseEvent e)
+      {
+        int j = combo.getSelectedIndex();
+        if (j > -1)
+        {
+          combo.setToolTipText(tooltips.get(j));
+        }
+      }
+
+      @Override
+      public void mouseExited(MouseEvent e)
+      {
+        combo.setToolTipText(null);
+      }
+    };
+    for (Component c : combo.getComponents())
+    {
+      c.addMouseListener(mouseListener);
+    }
+    return combo;
+  }
+
+  /**
    * Adds a titled border to the component in the default font and position (top
-   * left)
+   * left), optionally witht italic text
    * 
    * @param comp
    * @param title
+   * @param italic
    */
-  public static void createItalicTitledBorder(JComponent comp,
+  public static TitledBorder createTitledBorder(JComponent comp,
           String title, boolean italic)
   {
     Font font = comp.getFont();
@@ -374,6 +419,8 @@ public final class JvSwingUtils
             title, TitledBorder.LEADING, TitledBorder.DEFAULT_POSITION,
             font);
     comp.setBorder(titledBorder);
+
+    return titledBorder;
   }
 
 }