JAL-2778 Revert back to old synchronisation
[jalview.git] / src / jalview / gui / JvSwingUtils.java
index a0bc7c9..0a765cb 100644 (file)
@@ -28,6 +28,7 @@ import java.awt.Font;
 import java.awt.GridLayout;
 import java.awt.Rectangle;
 import java.awt.event.ActionListener;
+import java.util.Objects;
 
 import javax.swing.AbstractButton;
 import javax.swing.JButton;
@@ -48,27 +49,48 @@ import javax.swing.SwingConstants;
 public final class JvSwingUtils
 {
   /**
-   * wrap a bare html safe string to around 60 characters per line using a
-   * <table width=350>
-   * <tr>
-   * <td></td> field
- * @param enclose TODO
- * @param ttext
+   * wrap a bare html safe string to around 60 characters per line using a CSS
+   * style class specifying word-wrap and break-word
+   * 
+   * @param enclose
+   *          if true, add &lt;html&gt; wrapper tags
+   * @param ttext
    * 
    * @return
    */
   public static String wrapTooltip(boolean enclose, String ttext)
   {
-    if (ttext.length() < 60)
+    Objects.requireNonNull(ttext,
+            "Tootip text to format must not be null!");
+    ttext = ttext.trim();
+    boolean maxLengthExceeded = false;
+
+    if (ttext.contains("<br>"))
     {
-      return enclose ? "<html>" + ttext + "</html>" : ttext;
+      String[] htmllines = ttext.split("<br>");
+      for (String line : htmllines)
+      {
+        maxLengthExceeded = line.length() > 60;
+        if (maxLengthExceeded)
+        {
+          break;
+        }
+      }
     }
     else
     {
-      return (enclose ? "<html>" : "")
-              + "<table width=350 border=0><tr><td>" + ttext
-              + "</td></tr></table>" + ((enclose ? "</html>" : ""));
+      maxLengthExceeded = ttext.length() > 60;
     }
+
+    if (!maxLengthExceeded)
+    {
+      return enclose ? "<html>" + ttext + "</html>" : ttext;
+    }
+
+    return (enclose ? "<html>" : "")
+            + "<style> p.ttip {width: 350; text-align: justify; word-wrap: break-word;}</style><p class=\"ttip\">"
+            + ttext + "</p>" + ((enclose ? "</html>" : ""));
+
   }
 
   public static JButton makeButton(String label, String tooltip,
@@ -98,8 +120,8 @@ public final class JvSwingUtils
     for (int i = 0, iSize = menu.getMenuComponentCount(); i < iSize; i++)
     {
       if (menu.getMenuComponent(i) instanceof JMenu
-              && ((JMenu) menu.getMenuComponent(i)).getText().equals(
-                      submenu))
+              && ((JMenu) menu.getMenuComponent(i)).getText()
+                      .equals(submenu))
       {
         submenuinstance = (JMenu) menu.getMenuComponent(i);
       }
@@ -128,12 +150,8 @@ public final class JvSwingUtils
     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, BorderLayout.WEST);
     valPanel.add(valBox);
     laypanel.add(labPanel);
@@ -181,8 +199,10 @@ public final class JvSwingUtils
 
   public static Font getLabelFont(boolean bold, boolean italic)
   {
-    return new java.awt.Font("Verdana", (!bold && !italic) ? Font.PLAIN
-            : (bold ? Font.BOLD : 0) + (italic ? Font.ITALIC : 0), 11);
+    return new java.awt.Font("Verdana",
+            (!bold && !italic) ? Font.PLAIN
+                    : (bold ? Font.BOLD : 0) + (italic ? Font.ITALIC : 0),
+            11);
   }
 
   /**
@@ -258,8 +278,8 @@ public final class JvSwingUtils
      * of possible positions.
      */
     float fraction = proportion
-            * (scrollbar.getMaximum() - scrollbar.getMinimum() - scrollbar
-                    .getModel().getExtent())
+            * (scrollbar.getMaximum() - scrollbar.getMinimum()
+                    - scrollbar.getModel().getExtent())
             + (scrollbar.getModel().getExtent() / 2f);
     return Math.min(Math.round(fraction), scrollbar.getMaximum());
   }