null pointer in wrapped mode, click near sequence
[jalview.git] / src / jalview / gui / IdPanel.java
index 201516f..bb6efd7 100755 (executable)
@@ -59,6 +59,7 @@ public class IdPanel extends JPanel implements MouseListener,
         add(idCanvas, BorderLayout.CENTER);\r
         addMouseListener(this);\r
         addMouseMotionListener(this);\r
+        ToolTipManager.sharedInstance().registerComponent(this);\r
     }\r
 \r
     /**\r
@@ -68,8 +69,40 @@ public class IdPanel extends JPanel implements MouseListener,
      */\r
     public void mouseMoved(MouseEvent e)\r
     {\r
+      int y = e.getY();\r
+\r
+      if (av.getWrapAlignment())\r
+      {\r
+        y = getWrappedY(y);\r
+      }\r
+\r
+      int seq = av.getIndex(y);\r
+      if(seq!=-1)\r
+      {\r
+        StringBuffer tip = new StringBuffer("<html>");\r
+        tip.append(av.alignment.getSequenceAt(seq).getDisplayId(true));\r
+        if (av.alignment.getSequenceAt(seq).getDescription() != null)\r
+        {\r
+          tip.append("<table width=250 border=0><tr><td><i>");\r
+          tip.append(av.alignment.getSequenceAt(seq).getDescription());\r
+          tip.append("</i></td></tr></table>");\r
+        }\r
+        tip.append("</html>");\r
+        setToolTipText(tip.toString());\r
+      }\r
+\r
+    }\r
+\r
+    int getWrappedY(int y)\r
+    {\r
+      int hgap = av.charHeight;\r
+      if (av.scaleAboveWrapped)\r
+        hgap += av.charHeight;\r
+\r
+      return y - hgap;\r
     }\r
 \r
+\r
     /**\r
      * DOCUMENT ME!\r
      *\r
@@ -83,7 +116,7 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
         if (av.getWrapAlignment())\r
         {\r
-            y -= (2 * av.charHeight);\r
+            y = getWrappedY(y);\r
         }\r
 \r
         int seq = av.getIndex(y);\r
@@ -114,7 +147,7 @@ public class IdPanel extends JPanel implements MouseListener,
      */\r
     public void mouseClicked(MouseEvent e)\r
     {\r
-        if (e.getClickCount() < 2)\r
+      if (e.getClickCount() < 2)\r
         return;\r
 \r
       java.util.Vector links = Preferences.sequenceURLLinks;\r
@@ -125,12 +158,18 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
       if (av.getWrapAlignment())\r
       {\r
-        y -= (2 * av.charHeight);\r
+         y = getWrappedY(y);\r
       }\r
 \r
       //DEFAULT LINK IS FIRST IN THE LINK LIST\r
       int seq = av.getIndex(y);\r
+      if(seq==-1)\r
+        return;\r
+\r
       String id = av.getAlignment().getSequenceAt(seq).getName();\r
+      if (id.indexOf("|") > -1)\r
+        id = id.substring(id.lastIndexOf("|") + 1);\r
+\r
 \r
       String url = links.elementAt(0).toString();\r
       url = url.substring(url.indexOf("|")+1);\r
@@ -205,7 +244,7 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
         if (av.getWrapAlignment())\r
         {\r
-            y -= (2 * av.charHeight);\r
+            y = getWrappedY(y);\r
         }\r
 \r
         int seq = av.getIndex(y);\r
@@ -285,6 +324,9 @@ public class IdPanel extends JPanel implements MouseListener,
      */\r
     void selectSeqs(int start, int end)\r
     {\r
+      if(av.getSelectionGroup()==null)\r
+            return;\r
+\r
         lastid = start;\r
 \r
         if (end < start)\r
@@ -297,7 +339,7 @@ public class IdPanel extends JPanel implements MouseListener,
 \r
         for (int i = start; i <= end; i++)\r
         {\r
-            av.getSelectionGroup().addSequence(av.getAlignment().getSequenceAt(i),\r
+          av.getSelectionGroup().addSequence(av.getAlignment().getSequenceAt(i),\r
                 true);\r
         }\r
     }\r