JAL-3032 JTable work; JSUtil.jQuery object; drag-drop;
[jalview.git] / src / jalview / gui / SeqPanel.java
index 8b2e7bc..18c6acc 100644 (file)
@@ -62,7 +62,9 @@ import java.awt.event.MouseWheelListener;
 import java.util.Collections;
 import java.util.List;
 
+import javax.swing.JLabel;
 import javax.swing.JPanel;
+import javax.swing.JToolTip;
 import javax.swing.SwingUtilities;
 import javax.swing.ToolTipManager;
 
@@ -158,6 +160,8 @@ public class SeqPanel extends JPanel
     ToolTipManager.sharedInstance().registerComponent(this);
     ToolTipManager.sharedInstance().setInitialDelay(0);
     ToolTipManager.sharedInstance().setDismissDelay(10000);
+    
+    
     this.av = viewport;
     setBackground(Color.white);
 
@@ -694,6 +698,8 @@ public class SeqPanel extends JPanel
 
   String lastMessage;
 
+  private String formattedTooltipText;
+
   @Override
   public void mouseOverSequence(SequenceI sequence, int index, int pos)
   {
@@ -863,16 +869,20 @@ public class SeqPanel extends JPanel
       String textString = tooltipText.toString();
       if (lastTooltip == null || !lastTooltip.equals(textString))
       {
-        String formattedTooltipText = JvSwingUtils.wrapTooltip(true,
+        formattedTooltipText = JvSwingUtils.wrapTooltip(true,
                 textString);
         setToolTipText(formattedTooltipText);
+        
         lastTooltip = textString;
       }
     }
   }
 
+  
   private Point lastp = null;
 
+  private JToolTip tempTip = new JLabel().createToolTip();
+
   /*
    * (non-Javadoc)
    * 
@@ -881,19 +891,31 @@ public class SeqPanel extends JPanel
   @Override
   public Point getToolTipLocation(MouseEvent event)
   {
-    int x = event.getX(), w = getWidth();
-    int wdth = (w - x < 200) ? -(w / 2) : 5; // switch sides when tooltip is too
-    // close to edge
+    // BH 2018
+
+    if (tooltipText == null || tooltipText.length() == 6)
+      return null;
+
+    if (lastp != null && event.isShiftDown())
+      return lastp;
+
     Point p = lastp;
-    if (!event.isShiftDown() || p == null)
-    {
-      p = (tooltipText != null && tooltipText.length() > 6)
-              ? new Point(event.getX() + wdth, event.getY() - 20)
-              : null;
-    }
+    int x = event.getX();
+    int y = event.getY();
+    int w = getWidth();
+
+    tempTip.setTipText(formattedTooltipText);
+    int tipWidth = (int) tempTip.getPreferredSize().getWidth();
+    
+    // was      x += (w - x < 200) ? -(w / 2) : 5;
+    x = (x + tipWidth < w ? x + 10 : w - tipWidth);
+    p = new Point(x, y + 20); // BH 2018 was - 20?
     /*
      * TODO: try to modify position region is not obcured by tooltip
+     * 
+     * Done? 
      */
+
     return lastp = p;
   }